diff --git a/.dockerignore b/.dockerignore index 79585db..2750d37 100644 --- a/.dockerignore +++ b/.dockerignore @@ -2,12 +2,13 @@ **/package-lock.json **/target **/.git -**/.env* +**/*.env* build tree.db txs.db dist -test +**/test test-e2e *_key.json -**/params/ \ No newline at end of file +**/params*/ +**/*.log \ No newline at end of file diff --git a/.gitignore b/.gitignore index 0b76cfd..240dfb4 100644 --- a/.gitignore +++ b/.gitignore @@ -11,7 +11,7 @@ prover.js *params.bin *_key.json -.env +*.env # Log file zp.log diff --git a/CONFIGURATION.md b/CONFIGURATION.md index 4ed4867..6c7747b 100644 --- a/CONFIGURATION.md +++ b/CONFIGURATION.md @@ -1,44 +1,60 @@ # Configuration ## Common configuration +These environment variables are required for all services. +| name | description | value | +| - | - | - | +| COMMON_LOG_LEVEL | Log level | Winston log level | +| COMMON_POOL_ADDRESS | Address of the pool contract | hexadecimal prefixed with "0x" | +| COMMON_START_BLOCK | The block number used to start searching for events when the relayer/watcher instance is run for the first time | integer | +| COMMON_REDIS_URL | Url to redis instance | URL | +| COMMON_RPC_URL | The HTTPS URL(s) used to communicate to the RPC nodes. Several URLs can be specified, delimited by spaces. If the connection to one of these nodes is lost the next URL is used for connection. | URL | +| COMMON_REQUIRE_HTTPS | If set to `true`, then RPC URL(s) must be in HTTPS format. HTTP RPC URL(s) should be used in test environment only. | boolean | +| COMMON_RPC_SYNC_STATE_CHECK_INTERVAL | Interval in milliseconds for checking JSON RPC sync state, by requesting the latest block number. Watcher will switch to the fallback JSON RPC in case sync process is stuck. If this variable is `0` sync state check is disabled. Defaults to `0`. | integer | +| COMMON_RPC_REQUEST_TIMEOUT | Timeout in milliseconds for a single RPC request. Defaults to `1000`. | integer | +| COMMON_JSONRPC_ERROR_CODES | Override default JSON rpc error codes that can trigger RPC fallback to the next URL from the list (or a retry in case of a single RPC URL). Default is `-32603,-32002,-32005`. Should be a comma-separated list of negative integers. | `string` | +| COMMON_EVENTS_PROCESSING_BATCH_SIZE | Batch size for one `eth_getLogs` request when processing logs. Defaults to `10000` | integer | + +## Relayer | name | description | value | | - | - | - | -| PORT | Relayer port | integer | +| RELAYER_PORT | Relayer port | integer | +| RELAYER_TOKEN_ADDRESS | Address of the token contract | hexadecimal prefixed with "0x" | | RELAYER_ADDRESS_PRIVATE_KEY | Private key to sign pool transactions | hexadecimal prefixed with "0x" | -| POOL_ADDRESS | Address of the pool contract | hexadecimal prefixed with "0x" | | RELAYER_GAS_LIMIT | Gas limit for pool transactions | integer | -| RELAYER_FEE | Minimal accepted relayer fee (in tokens | integer | -| MAX_NATIVE_AMOUNT_FAUCET | Maximal amount of faucet value (in ETH) | integer | -| TREE_UPDATE_PARAMS_PATH | Local path to tree update circuit parameters | string | -| TRANSFER_PARAMS_PATH | Local path to transfer circuit parameters | string | -| TX_VK_PATH | Local path to transaction circuit verification key | string | +| RELAYER_FEE | Minimal accepted relayer fee (in tokens) | integer | +| RELAYER_MAX_NATIVE_AMOUNT_FAUCET | Maximal amount of faucet value (in ETH) | integer | +| RELAYER_TREE_UPDATE_PARAMS_PATH | Local path to tree update circuit parameters | string | +| RELAYER_TRANSFER_PARAMS_PATH | Local path to transfer circuit parameters | string | +| RELAYER_TX_VK_PATH | Local path to transaction circuit verification key | string | | RELAYER_REQUEST_LOG_PATH | Path to a file where all HTTP request logs will be saved. Default `./zp.log`. | string | -| STATE_DIR_PATH | Path to persistent state files related to tree and transactions storage. Default: `./POOL_STATE` | string | -| GAS_PRICE_FALLBACK | Default fallback gas price | integer | -| GAS_PRICE_ESTIMATION_TYPE | Gas price estimation type | `web3` / `gas-price-oracle` / `eip1559-gas-estimation` / `polygon-gasstation-v2` | -| GAS_PRICE_SPEED_TYPE | This parameter specifies the desirable transaction speed | `instant` / `fast` / `standard` / `low` | -| GAS_PRICE_FACTOR | A value that will multiply the gas price of the oracle to convert it to gwei. If the oracle API returns gas prices in gwei then this can be set to `1`. Also, it could be used to intentionally pay more gas than suggested by the oracle to guarantee the transaction verification. E.g. `1.25` or `1.5`. | integer | -| GAS_PRICE_UPDATE_INTERVAL | Interval in milliseconds used to get the updated gas price value using specified estimation type | integer | -| GAS_PRICE_SURPLUS | A surplus to be added to fetched `gasPrice` on initial transaction submission. Default `0.1`. | float | -| MIN_GAS_PRICE_BUMP_FACTOR | Minimum `gasPrice` bump factor to meet RPC node requirements. Default `0.1`. | float | -| MAX_FEE_PER_GAS_LIMIT | Max limit on `maxFeePerGas` parameter for each transaction in wei | integer | -| MAX_SENT_QUEUE_SIZE | Maximum number of jobs waiting in the `sentTxQueue` at a time. | integer | -| START_BLOCK | The block number used to start searching for events when the relayer instance is run for the first time | integer -| EVENTS_PROCESSING_BATCH_SIZE | Batch size for one `eth_getLogs` request when reprocessing old logs. Defaults to `10000` | integer -| RELAYER_LOG_LEVEL | Log level | Winston log level | -| RELAYER_REDIS_URL | Url to redis instance | URL | -| RPC_URL | The HTTPS URL(s) used to communicate to the RPC nodes. Several URLs can be specified, delimited by spaces. If the connection to one of these nodes is lost the next URL is used for connection. | URL | +| RELAYER_STATE_DIR_PATH | Path to persistent state files related to tree and transactions storage. Default: `./POOL_STATE` | string | +| RELAYER_GAS_PRICE_FALLBACK | Default fallback gas price | integer | +| RELAYER_GAS_PRICE_ESTIMATION_TYPE | Gas price estimation type | `web3` / `gas-price-oracle` / `eip1559-gas-estimation` / `polygon-gasstation-v2` | +| RELAYER_GAS_PRICE_SPEED_TYPE | This parameter specifies the desirable transaction speed | `instant` / `fast` / `standard` / `low` | +| RELAYER_GAS_PRICE_FACTOR | A value that will multiply the gas price of the oracle to convert it to gwei. If the oracle API returns gas prices in gwei then this can be set to `1`. Also, it could be used to intentionally pay more gas than suggested by the oracle to guarantee the transaction verification. E.g. `1.25` or `1.5`. | integer | +| RELAYER_GAS_PRICE_UPDATE_INTERVAL | Interval in milliseconds used to get the updated gas price value using specified estimation type | integer | +| RELAYER_GAS_PRICE_SURPLUS | A surplus to be added to fetched `gasPrice` on initial transaction submission. Default `0.1`. | float | +| RELAYER_MIN_GAS_PRICE_BUMP_FACTOR | Minimum `gasPrice` bump factor to meet RPC node requirements. Default `0.1`. | float | +| RELAYER_MAX_FEE_PER_GAS_LIMIT | Max limit on `maxFeePerGas` parameter for each transaction in wei | integer | +| RELAYER_MAX_SENT_QUEUE_SIZE | Maximum number of jobs waiting in the `sentTxQueue` at a time. | integer | | RELAYER_TX_REDUNDANCY | If set to `true`, instructs relayer to send `eth_sendRawTransaction` requests through all available RPC urls defined in `RPC_URL` variables instead of using first available one. Defaults to `false` | boolean | -| RELAYER_RPC_SYNC_STATE_CHECK_INTERVAL | Interval in milliseconds for checking JSON RPC sync state, by requesting the latest block number. Relayer will switch to the fallback JSON RPC in case sync process is stuck. If this variable is `0` sync state check is disabled. Defaults to `0` | integer | -| INSUFFICIENT_BALANCE_CHECK_TIMEOUT | Interval in milliseconds to check for relayer balance update if transaction send failed with insufficient balance error. Default `60000` | integer | -| SENT_TX_DELAY | Delay in milliseconds for sentTxWorker to verify submitted transactions | integer | -| SENT_TX_ERROR_THRESHOLD | Maximum number of re-sends which is considered to be normal. After this threshold each re-send will log a corresponding error (but re-send loop will continue). Defaults to `3`. | integer | -| PERMIT_DEADLINE_THRESHOLD_INITIAL | Minimum time threshold in seconds for permit signature deadline to be valid (before initial transaction submission) | integer | -| PERMIT_DEADLINE_THRESHOLD_RESEND | Minimum time threshold in seconds for permit signature deadline to be valid (for re-send attempts) | integer | +| RELAYER_INSUFFICIENT_BALANCE_CHECK_TIMEOUT | Interval in milliseconds to check for relayer balance update if transaction send failed with insufficient balance error. Default `60000` | integer | +| RELAYER_SENT_TX_DELAY | Delay in milliseconds for sentTxWorker to verify submitted transactions | integer | +| RELAYER_SENT_TX_ERROR_THRESHOLD | Maximum number of re-sends which is considered to be normal. After this threshold each re-send will log a corresponding error (but re-send loop will continue). Defaults to `3`. | integer | +| RELAYER_PERMIT_DEADLINE_THRESHOLD_INITIAL | Minimum time threshold in seconds for permit signature deadline to be valid (before initial transaction submission) | integer | +| RELAYER_PERMIT_DEADLINE_THRESHOLD_RESEND | Minimum time threshold in seconds for permit signature deadline to be valid (for re-send attempts) | integer | | RELAYER_REQUIRE_TRACE_ID | If set to `true`, then requests to relayer (except `/info`, `/version`, `/params/hash/tree`, `/params/hash/tx`) without `zkbob-support-id` header will be rejected. | boolean | -| RELAYER_REQUIRE_HTTPS | If set to `true`, then RPC URL(s) must be in HTTPS format. HTTP RPC URL(s) should be used in test environment only. | boolean | | RELAYER_LOG_IGNORE_ROUTES | List of space separated relayer endpoints for which request logging will be suppressed. E.g. `/fee /version` | string(s) | | RELAYER_LOG_HEADER_BLACKLIST | List of space separated HTTP headers which will be suppressed in request logs. E.g. `content-length content-type` | string(s) | | RELAYER_SCREENER_URL | Screener service URL | URL | | RELAYER_SCREENER_TOKEN | Authorization token for screener service | string | + +## Watcher + +| name | description | value | +| - | - | - | +| WATCHER_EVENT_POLLING_INTERVAL | The interval in milliseconds used to request the RPC node for new blocks. | integer | +| WATCHER_DIRECT_DEPOSIT_BATCH_SIZE | Maximum size of a single direct deposit batch. Defaults to `16`. | integer | +| WATCHER_DIRECT_DEPOSIT_BATCH_TTL | Maximum TTL in milliseconds for a new direct deposit batch. After this time batch will be submitted to the queue, even if it has less than `DIRECT_DEPOSIT_BATCH_SIZE` elements. Defaults to `3600000` (1 hour) | integer | diff --git a/docker-compose.yaml b/docker-compose.yaml index 01a23e4..333139f 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -32,12 +32,16 @@ services: - relayer_tree:/app/tree.db - relayer_txs:/app/txs.db - $PARAMS_PATH:/app/zp-relayer/params/ - env_file: zp-relayer/.env + env_file: ./zp-relayer/relayer.env ports: - 8000:8000 - depends_on: - - verifier - + watcher: + image: ghcr.io/zkbob/zkbob-relayer:${RELAYER_VERSION:-latest} + build: + context: . + dockerfile: docker/Dockerfile.relayer + command: yarn run start:direct-deposit-watcher:prod + env_file: ./zp-relayer/watcher.env volumes: relayer_tree: relayer_txs: diff --git a/test-flow-generator/package.json b/test-flow-generator/package.json index cbd027e..b17088a 100644 --- a/test-flow-generator/package.json +++ b/test-flow-generator/package.json @@ -9,8 +9,8 @@ "dependencies": { "@metamask/eth-sig-util": "^4.0.1", "http-server": "14.1.1", - "libzkbob-rs-node": "0.2.2", - "libzkbob-rs-wasm-web": "0.8.0", + "libzkbob-rs-node": "1.0.0", + "libzkbob-rs-wasm-web": "1.0.0", "node-polyfill-webpack-plugin": "^1.1.4", "puppeteer": "^19.2.0", "web3-utils": "1.8.0", diff --git a/test-flow-generator/src/config.ts b/test-flow-generator/src/config.ts index 6470424..946f837 100644 --- a/test-flow-generator/src/config.ts +++ b/test-flow-generator/src/config.ts @@ -1,5 +1,5 @@ export const config = { - tokenAddress: '0xe78A0F7E598Cc8b0Bb87894B0F60dD2a88d6a8Ab', - poolAddress: '0xe982E462b094850F12AF94d21D470e21bE9D0E9C', + tokenAddress: '0xCfEB869F69431e42cdB54A4F4f105C19C080A601', + poolAddress: '0x9b1f7F645351AF3631a656421eD2e40f2802E6c0', chainId: 31337, } diff --git a/test-flow-generator/src/generate.ts b/test-flow-generator/src/generate.ts index 8298f53..db8e394 100644 --- a/test-flow-generator/src/generate.ts +++ b/test-flow-generator/src/generate.ts @@ -13,7 +13,7 @@ export async function newAccount() { const sk = Array.from({ length: 10 }, () => Math.floor(Math.random() * 100)) const stateId = sk.toString() const state = await UserState.init(stateId) - const zkAccount = UserAccount.fromSeed(Uint8Array.from(sk), state) + const zkAccount = UserAccount.fromSeed(Uint8Array.from(sk), 0n, state) return zkAccount } diff --git a/yarn.lock b/yarn.lock index 104015b..326f6ff 100644 --- a/yarn.lock +++ b/yarn.lock @@ -556,6 +556,11 @@ dependencies: "@types/node" "*" +"@types/semver@^7.3.13": + version "7.3.13" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" + integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== + "@types/serve-static@*": version "1.13.10" resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.10.tgz#f5e0ce8797d2d7cc5ebeda48a52c96c4fa47a8d9" @@ -3472,17 +3477,17 @@ libzeropool-rs-wasm-bundler@0.3.8: resolved "https://registry.yarnpkg.com/libzeropool-rs-wasm-bundler/-/libzeropool-rs-wasm-bundler-0.3.8.tgz#2b55628a741f4bd0f776d87365c22ed0da63ba6c" integrity sha512-b+W6M/gyeaoKZ4LJC2ThtZmXHVOoEtsa3foPezAyfdgbsyNGDHbSMBcqoTIXVHkP6ul7BKxjOP3xvfi3F6klTg== -libzkbob-rs-node@0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/libzkbob-rs-node/-/libzkbob-rs-node-0.2.2.tgz#2b176b9c74fd24eb59c2f38cba42d227fc7fb152" - integrity sha512-8elJ5FoiZHhnm2Tnu8TLSzC0A4g7+t+UVSIIysn4ZVOVAgFkojTlSniZL9cqgTmjvMxZzySk5DCcKpa6pTp/WQ== +libzkbob-rs-node@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/libzkbob-rs-node/-/libzkbob-rs-node-1.0.0.tgz#a65582e2aca8fc8f90e9c501facf5da16709f14a" + integrity sha512-WiIAON2Fe+oakYBgh1ajjG9NQkQFZPTAWc2hvs3BEkw8ezgjkkvh1/yZ8ap8QQE2PAm/rSqsAPuQgj7160Ulvg== dependencies: cargo-cp-artifact "^0.1" -libzkbob-rs-wasm-web@0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/libzkbob-rs-wasm-web/-/libzkbob-rs-wasm-web-0.8.0.tgz#b133aa0f1a381567fde082662ce4c4e46ea7aa47" - integrity sha512-EIPeDyl2wmpSMx299LnG0UCqg5wy8sr7TqfCdgPDxA8kH5Gu92MF12KOOOx7sfLpoYZ965y7MbkkuUfz5OzVAg== +libzkbob-rs-wasm-web@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/libzkbob-rs-wasm-web/-/libzkbob-rs-wasm-web-1.0.0.tgz#74eba1caa2bfc728be8fd1f3161e5089360f2a72" + integrity sha512-3xW0BjAZ9NDoNLCwlGHNjg5q1GN7fEpXCVf7+emQxQrt/vey9PNTAQnNIEjWZ/M0Fn52t06Og2P6zgqcGUCz7Q== lighthouse-logger@^1.0.0: version "1.3.0" @@ -4998,6 +5003,13 @@ secure-compare@3.0.1: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== +semver@7.3.8: + version "7.3.8" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + dependencies: + lru-cache "^6.0.0" + semver@^7.3.4: version "7.3.5" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" diff --git a/zp-memo-parser/memo.ts b/zp-memo-parser/memo.ts index a180e19..a377d07 100644 --- a/zp-memo-parser/memo.ts +++ b/zp-memo-parser/memo.ts @@ -24,7 +24,11 @@ export interface PermittableDepositTxData extends DefaultTxData { holder: Uint8Array } -export type TxData = DefaultTxData | WithdrawTxData | PermittableDepositTxData +export type TxData = T extends TxType.WITHDRAWAL + ? WithdrawTxData + : T extends TxType.PERMITTABLE_DEPOSIT + ? PermittableDepositTxData + : DefaultTxData // Size in bytes const U256_SIZE = 32 @@ -82,7 +86,7 @@ function getNoteHashes(rawHashes: Buffer, num: number, maxNotes: number): Uint8A for (let i = 0; i < num; i++) { const start = i * U256_SIZE const end = start + U256_SIZE - const note_hash = Buffer.from(rawHashes.slice(start, end)) + const note_hash = Buffer.from(rawHashes.subarray(start, end)) notes.push(note_hash) } // Append zero note hashes @@ -92,7 +96,11 @@ function getNoteHashes(rawHashes: Buffer, num: number, maxNotes: number): Uint8A return notes } -export function getTxData(data: Buffer, txType: Option): TxData { +function getAddress(data: Buffer, offset: number): Uint8Array { + return new Uint8Array(data.subarray(offset, offset + 20)) +} + +export function getTxData(data: Buffer, txType: Option): TxData { function readU64(offset: number) { let uint = data.readBigUInt64BE(offset) return uint.toString(10) @@ -103,29 +111,29 @@ export function getTxData(data: Buffer, txType: Option): TxData { if (txType === TxType.WITHDRAWAL) { const nativeAmount = readU64(offset) offset += 8 - const receiver = new Uint8Array(data.slice(offset, offset + 20)) + const receiver = getAddress(data, offset) return { fee, nativeAmount, receiver, - } + } as TxData } else if (txType === TxType.PERMITTABLE_DEPOSIT) { const deadline = readU64(offset) offset += 8 - const holder = new Uint8Array(data.slice(offset, offset + 20)) + const holder = getAddress(data, offset) return { fee, deadline, holder, - } + } as TxData } - return { fee } + return { fee } as TxData } -export function decodeMemo(data: Buffer, txType: Option, maxNotes = 127) { +export function decodeMemo(data: Buffer, maxNotes = 127) { const reader = new BinaryReader(data) const numItems = new DataView(reader.readFixedArray(4).buffer).getUint32(0, true) - const memo: Memo = deserialize(clientBorshSchema(numItems - 1), Memo, data.slice(reader.offset)) + const memo: Memo = deserialize(clientBorshSchema(numItems - 1), Memo, data.subarray(reader.offset)) memo.numItems = numItems memo.noteHashes = getNoteHashes(memo.rawNoteHashes, numItems - 1, maxNotes) memo.rawBuf = data diff --git a/zp-relayer/.env.example b/zp-relayer/.env.example index 2471ea5..24fcb9d 100644 --- a/zp-relayer/.env.example +++ b/zp-relayer/.env.example @@ -1,20 +1,22 @@ -PORT=8000 -RELAYER_ADDRESS_PRIVATE_KEY=0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d -POOL_ADDRESS=0xC89Ce4735882C9F0f0FE26686c53074E09B0D550 +COMMON_POOL_ADDRESS=0x9b1f7F645351AF3631a656421eD2e40f2802E6c0 +COMMON_START_BLOCK=0 +COMMON_LOG_LEVEL=debug +COMMON_RELAYER_REDIS_URL=127.0.0.1:6379 +COMMON_RPC_URL=http://127.0.0.1:8545 + +RELAYER_PORT=8000 +RELAYER_ADDRESS_PRIVATE_KEY=0x6370fd033278c143179d81c5526140625662b8daa446c22ee2d73db3707e620c +RELAYER_TOKEN_ADDRESS=0xCfEB869F69431e42cdB54A4F4f105C19C080A601 RELAYER_GAS_LIMIT=2000000 RELAYER_FEE=0 -MAX_NATIVE_AMOUNT_FAUCET=0 +RELAYER_MAX_NATIVE_AMOUNT_FAUCET=0 -TREE_UPDATE_PARAMS_PATH="./params/tree_params.bin" -TX_VK_PATH="./params/transfer_verification_key.json" +RELAYER_TREE_UPDATE_PARAMS_PATH="./params/tree_params.bin" +RELAYER_TX_VK_PATH="./params/transfer_verification_key.json" +RELAYER_STATE_DIR_PATH="./test/STATE_DIR/" -SENT_TX_DELAY=30000 -GAS_PRICE_FALLBACK= -GAS_PRICE_UPDATE_INTERVAL= -GAS_PRICE_ESTIMATION_TYPE="web3" -RELAYER_LOG_LEVEL=debug -RELAYER_REDIS_URL=127.0.0.1:6379 -RPC_URL=http://127.0.0.1:8545 -LETSENCRYPT_HOST=example.com -VIRTUAL_HOST=example.com -LETSENCRYPT_EMAIL=mail@example.com \ No newline at end of file +RELAYER_INSUFFICIENT_BALANCE_CHECK_TIMEOUT=500 +RELAYER_SENT_TX_DELAY=2000 +RELAYER_GAS_PRICE_FALLBACK= +RELAYER_GAS_PRICE_UPDATE_INTERVAL=100000 +RELAYER_GAS_PRICE_ESTIMATION_TYPE="eip1559-gas-estimation" diff --git a/zp-relayer/abi/direct-deposit-queue-abi.json b/zp-relayer/abi/direct-deposit-queue-abi.json new file mode 100644 index 0000000..0e3e84a --- /dev/null +++ b/zp-relayer/abi/direct-deposit-queue-abi.json @@ -0,0 +1,539 @@ +[ + { + "inputs": [ + { + "internalType": "address", + "name": "_pool", + "type": "address" + }, + { + "internalType": "address", + "name": "_token", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256[]", + "name": "indices", + "type": "uint256[]" + } + ], + "name": "CompleteDirectDepositBatch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "RefundDirectDeposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "fallbackUser", + "type": "address" + }, + { + "components": [ + { + "internalType": "bytes10", + "name": "diversifier", + "type": "bytes10" + }, + { + "internalType": "bytes32", + "name": "pk", + "type": "bytes32" + } + ], + "indexed": false, + "internalType": "struct ZkAddress.ZkAddress", + "name": "zkAddress", + "type": "tuple" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "deposit", + "type": "uint64" + } + ], + "name": "SubmitDirectDeposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "fee", + "type": "uint64" + } + ], + "name": "UpdateDirectDepositFee", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint40", + "name": "timeout", + "type": "uint40" + } + ], + "name": "UpdateDirectDepositTimeout", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "manager", + "type": "address" + } + ], + "name": "UpdateOperatorManager", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "_indices", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "_out_commit", + "type": "uint256" + } + ], + "name": "collect", + "outputs": [ + { + "internalType": "uint256", + "name": "total", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalFee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "hashsum", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_fallbackUser", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_rawZkAddress", + "type": "bytes" + } + ], + "name": "directDeposit", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_fallbackUser", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "string", + "name": "_zkAddress", + "type": "string" + } + ], + "name": "directDeposit", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "directDepositFee", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "directDepositNonce", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "directDepositTimeout", + "outputs": [ + { + "internalType": "uint40", + "name": "", + "type": "uint40" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" + } + ], + "name": "getDirectDeposit", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "fallbackReceiver", + "type": "address" + }, + { + "internalType": "uint96", + "name": "sent", + "type": "uint96" + }, + { + "internalType": "uint64", + "name": "deposit", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "fee", + "type": "uint64" + }, + { + "internalType": "uint40", + "name": "timestamp", + "type": "uint40" + }, + { + "internalType": "enum IZkBobDirectDeposits.DirectDepositStatus", + "name": "status", + "type": "uint8" + }, + { + "internalType": "bytes10", + "name": "diversifier", + "type": "bytes10" + }, + { + "internalType": "bytes32", + "name": "pk", + "type": "bytes32" + } + ], + "internalType": "struct IZkBobDirectDeposits.DirectDeposit", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "onTokenTransfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "operatorManager", + "outputs": [ + { + "internalType": "contract IOperatorManager", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pool", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pool_id", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256[]", + "name": "_indices", + "type": "uint256[]" + } + ], + "name": "refundDirectDeposit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" + } + ], + "name": "refundDirectDeposit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "_fee", + "type": "uint64" + } + ], + "name": "setDirectDepositFee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint40", + "name": "_timeout", + "type": "uint40" + } + ], + "name": "setDirectDepositTimeout", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IOperatorManager", + "name": "_operatorManager", + "type": "address" + } + ], + "name": "setOperatorManager", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "token", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] \ No newline at end of file diff --git a/zp-relayer/abi/pool-abi.json b/zp-relayer/abi/pool-abi.json index dadc992..17c4081 100644 --- a/zp-relayer/abi/pool-abi.json +++ b/zp-relayer/abi/pool-abi.json @@ -20,6 +20,16 @@ "internalType": "contract ITreeVerifier", "name": "_tree_verifier", "type": "address" + }, + { + "internalType": "contract IBatchDepositVerifier", + "name": "_batch_deposit_verifier", + "type": "address" + }, + { + "internalType": "address", + "name": "_direct_deposit_queue", + "type": "address" } ], "stateMutability": "nonpayable", @@ -69,6 +79,75 @@ "name": "OwnershipTransferred", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint8", + "name": "tier", + "type": "uint8" + }, + { + "components": [ + { + "internalType": "uint56", + "name": "tvlCap", + "type": "uint56" + }, + { + "internalType": "uint32", + "name": "dailyDepositCap", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "dailyWithdrawalCap", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "dailyUserDepositCap", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "depositCap", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "directDepositCap", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "dailyUserDirectDepositCap", + "type": "uint32" + } + ], + "indexed": false, + "internalType": "struct ZkBobAccounting.TierLimits", + "name": "limits", + "type": "tuple" + } + ], + "name": "UpdateLimits", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "manager", + "type": "address" + } + ], + "name": "UpdateOperatorManager", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -88,6 +167,38 @@ "name": "UpdateTier", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "seller", + "type": "address" + } + ], + "name": "UpdateTokenSeller", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fee", + "type": "uint256" + } + ], + "name": "WithdrawFee", + "type": "event" + }, { "inputs": [ { @@ -120,6 +231,52 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_root_after", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "_indices", + "type": "uint256[]" + }, + { + "internalType": "uint256", + "name": "_out_commit", + "type": "uint256" + }, + { + "internalType": "uint256[8]", + "name": "_batch_deposit_proof", + "type": "uint256[8]" + }, + { + "internalType": "uint256[8]", + "name": "_tree_proof", + "type": "uint256[8]" + } + ], + "name": "appendDirectDeposits", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "batch_deposit_verifier", + "outputs": [ + { + "internalType": "contract IBatchDepositVerifier", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "denominator", @@ -133,6 +290,19 @@ "stateMutability": "pure", "type": "function" }, + { + "inputs": [], + "name": "direct_deposit_queue", + "outputs": [ + { + "internalType": "contract IZkBobDirectDepositQueue", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -194,6 +364,21 @@ "internalType": "uint8", "name": "tier", "type": "uint8" + }, + { + "internalType": "uint256", + "name": "dailyUserDirectDepositCap", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "dailyUserDirectDepositCapUsage", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "directDepositCap", + "type": "uint256" } ], "internalType": "struct ZkBobAccounting.Limits", @@ -235,6 +420,16 @@ "internalType": "uint256", "name": "_depositCap", "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_dailyUserDirectDepositCap", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_directDepositCap", + "type": "uint256" } ], "name": "initialize", @@ -313,6 +508,24 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "recordDirectDeposit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [], "name": "renounceOwnership", @@ -320,6 +533,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "_tier", + "type": "uint8" + } + ], + "name": "resetDailyLimits", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -370,6 +596,16 @@ "internalType": "uint256", "name": "_depositCap", "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_dailyUserDirectDepositCap", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_directDepositCap", + "type": "uint256" } ], "name": "setLimits", @@ -390,6 +626,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "_seller", + "type": "address" + } + ], + "name": "setTokenSeller", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -421,11 +670,24 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "tokenSeller", + "outputs": [ + { + "internalType": "contract ITokenSeller", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "transact", "outputs": [], - "stateMutability": "payable", + "stateMutability": "nonpayable", "type": "function" }, { @@ -485,4 +747,4 @@ "stateMutability": "nonpayable", "type": "function" } -] +] \ No newline at end of file diff --git a/zp-relayer/config.ts b/zp-relayer/config.ts deleted file mode 100644 index b8aace2..0000000 --- a/zp-relayer/config.ts +++ /dev/null @@ -1,64 +0,0 @@ -import './env' -import Web3 from 'web3' -import { toBN } from 'web3-utils' -import type { EstimationType, GasPriceKey } from './services/gas-price' - -const relayerAddress = new Web3().eth.accounts.privateKeyToAccount( - process.env.RELAYER_ADDRESS_PRIVATE_KEY as string -).address - -const defaultHeaderBlacklist = - 'accept accept-language accept-encoding connection content-length content-type postman-token referer upgrade-insecure-requests' - -const config = { - relayerRef: process.env.RELAYER_REF || null, - relayerSHA: process.env.RELAYER_SHA || null, - port: parseInt(process.env.PORT || '8000'), - relayerAddress, - relayerPrivateKey: process.env.RELAYER_ADDRESS_PRIVATE_KEY as string, - poolAddress: process.env.POOL_ADDRESS, - tokenAddress: process.env.TOKEN_ADDRESS, - relayerGasLimit: toBN(process.env.RELAYER_GAS_LIMIT as string), - relayerFee: toBN(process.env.RELAYER_FEE as string), - maxFaucet: toBN(process.env.MAX_NATIVE_AMOUNT_FAUCET as string), - treeUpdateParamsPath: process.env.TREE_UPDATE_PARAMS_PATH || './params/tree_params.bin', - transferParamsPath: process.env.TRANSFER_PARAMS_PATH || './params/transfer_params.bin', - txVKPath: process.env.TX_VK_PATH || './params/transfer_verification_key.json', - requestLogPath: process.env.RELAYER_REQUEST_LOG_PATH || './zp.log', - stateDirPath: process.env.STATE_DIR_PATH || './POOL_STATE', - gasPriceFallback: process.env.GAS_PRICE_FALLBACK as string, - gasPriceEstimationType: (process.env.GAS_PRICE_ESTIMATION_TYPE as EstimationType) || 'web3', - gasPriceSpeedType: (process.env.GAS_PRICE_SPEED_TYPE as GasPriceKey) || 'fast', - gasPriceFactor: parseInt(process.env.GAS_PRICE_FACTOR || '1'), - gasPriceUpdateInterval: parseInt(process.env.GAS_PRICE_UPDATE_INTERVAL || '5000'), - gasPriceSurplus: parseFloat(process.env.GAS_PRICE_SURPLUS || '0.1'), - minGasPriceBumpFactor: parseFloat(process.env.MIN_GAS_PRICE_BUMP_FACTOR || '0.1'), - maxFeeLimit: process.env.MAX_FEE_PER_GAS_LIMIT ? toBN(process.env.MAX_FEE_PER_GAS_LIMIT) : null, - maxSentQueueSize: parseInt(process.env.MAX_SENT_QUEUE_SIZE || '20'), - startBlock: parseInt(process.env.START_BLOCK || '0'), - eventsProcessingBatchSize: parseInt(process.env.EVENTS_PROCESSING_BATCH_SIZE || '10000'), - logLevel: process.env.RELAYER_LOG_LEVEL || 'debug', - redisUrl: process.env.RELAYER_REDIS_URL as string, - rpcUrls: (process.env.RPC_URL as string).split(' ').filter(url => url.length > 0), - relayerTxRedundancy: process.env.RELAYER_TX_REDUNDANCY === 'true', - sentTxDelay: parseInt(process.env.SENT_TX_DELAY || '30000'), - sentTxLogErrorThreshold: parseInt(process.env.SENT_TX_ERROR_THRESHOLD || '3'), - rpcRequestTimeout: parseInt(process.env.RPC_REQUEST_TIMEOUT || '1000'), - insufficientBalanceCheckTimeout: parseInt(process.env.INSUFFICIENT_BALANCE_CHECK_TIMEOUT || '60000'), - rpcSyncCheckInterval: parseInt(process.env.RELAYER_RPC_SYNC_STATE_CHECK_INTERVAL || '0'), - permitDeadlineThresholdInitial: parseInt(process.env.PERMIT_DEADLINE_THRESHOLD_INITIAL || '300'), - relayerJsonRpcErrorCodes: (process.env.RELAYER_JSONRPC_ERROR_CODES || '-32603 -32002 -32005') - .split(' ') - .filter(s => s.length > 0) - .map(s => parseInt(s, 10)), - requireTraceId: process.env.RELAYER_REQUIRE_TRACE_ID === 'true', - requireHTTPS: process.env.RELAYER_REQUIRE_HTTPS === 'true', - logIgnoreRoutes: (process.env.RELAYER_LOG_IGNORE_ROUTES || '').split(' ').filter(r => r.length > 0), - logHeaderBlacklist: (process.env.RELAYER_LOG_HEADER_BLACKLIST || defaultHeaderBlacklist) - .split(' ') - .filter(r => r.length > 0), - screenerUrl: process.env.RELAYER_SCREENER_URL || null, - screenerToken: process.env.RELAYER_SCREENER_TOKEN || null, -} - -export default config diff --git a/zp-relayer/configs/baseConfig.ts b/zp-relayer/configs/baseConfig.ts new file mode 100644 index 0000000..cc61d42 --- /dev/null +++ b/zp-relayer/configs/baseConfig.ts @@ -0,0 +1,19 @@ +const config = { + poolAddress: process.env.COMMON_POOL_ADDRESS as string, + startBlock: parseInt(process.env.COMMON_START_BLOCK || '0'), + logLevel: process.env.COMMON_LOG_LEVEL || 'debug', + redisUrl: process.env.COMMON_REDIS_URL as string, + rpcUrls: (process.env.COMMON_RPC_URL as string).split(' ').filter(url => url.length > 0), + requireHTTPS: process.env.COMMON_REQUIRE_RPC_HTTPS === 'true', + rpcSyncCheckInterval: parseInt(process.env.COMMON_RPC_SYNC_STATE_CHECK_INTERVAL || '0'), + rpcRequestTimeout: parseInt(process.env.COMMON_RPC_REQUEST_TIMEOUT || '1000'), + jsonRpcErrorCodes: (process.env.COMMON_JSONRPC_ERROR_CODES || '-32603 -32002 -32005') + .split(' ') + .filter(s => s.length > 0) + .map(s => parseInt(s, 10)), + eventsProcessingBatchSize: parseInt(process.env.COMMON_EVENTS_PROCESSING_BATCH_SIZE || '10000'), + screenerUrl: process.env.COMMON_SCREENER_URL || null, + screenerToken: process.env.COMMON_SCREENER_TOKEN || null, +} + +export default config diff --git a/zp-relayer/configs/relayerConfig.ts b/zp-relayer/configs/relayerConfig.ts new file mode 100644 index 0000000..452b564 --- /dev/null +++ b/zp-relayer/configs/relayerConfig.ts @@ -0,0 +1,59 @@ +import Web3 from 'web3' +import { toBN } from 'web3-utils' +import type { EstimationType, GasPriceKey } from '../services/gas-price' +import baseConfig from './baseConfig' + +export enum ProverType { + Local = 'local', + Remote = 'remote', +} + +const relayerAddress = new Web3().eth.accounts.privateKeyToAccount( + process.env.RELAYER_ADDRESS_PRIVATE_KEY as string +).address + +const defaultHeaderBlacklist = + 'accept accept-language accept-encoding connection content-length content-type postman-token referer upgrade-insecure-requests' + +const config = { + ...baseConfig, + relayerRef: process.env.RELAYER_REF || null, + relayerSHA: process.env.RELAYER_SHA || null, + port: parseInt(process.env.RELAYER_PORT || '8000'), + relayerAddress, + relayerPrivateKey: process.env.RELAYER_ADDRESS_PRIVATE_KEY as string, + tokenAddress: process.env.RELAYER_TOKEN_ADDRESS as string, + relayerGasLimit: toBN(process.env.RELAYER_GAS_LIMIT as string), + relayerFee: toBN(process.env.RELAYER_FEE as string), + maxFaucet: toBN(process.env.RELAYER_MAX_NATIVE_AMOUNT_FAUCET as string), + treeUpdateParamsPath: process.env.RELAYER_TREE_UPDATE_PARAMS_PATH || './params/tree_params.bin', + transferParamsPath: process.env.RELAYER_TRANSFER_PARAMS_PATH || './params/transfer_params.bin', + directDepositParamsPath: process.env.RELAYER_DIRECT_DEPOSIT_PARAMS_PATH || './params/delegated_deposit_params.bin', + txVKPath: process.env.RELAYER_TX_VK_PATH || './params/transfer_verification_key.json', + requestLogPath: process.env.RELAYER_REQUEST_LOG_PATH || './zp.log', + stateDirPath: process.env.RELAYER_STATE_DIR_PATH || './POOL_STATE', + gasPriceFallback: process.env.RELAYER_GAS_PRICE_FALLBACK as string, + gasPriceEstimationType: (process.env.RELAYER_GAS_PRICE_ESTIMATION_TYPE as EstimationType) || 'web3', + gasPriceSpeedType: (process.env.RELAYER_GAS_PRICE_SPEED_TYPE as GasPriceKey) || 'fast', + gasPriceFactor: parseInt(process.env.RELAYER_GAS_PRICE_FACTOR || '1'), + gasPriceUpdateInterval: parseInt(process.env.RELAYER_GAS_PRICE_UPDATE_INTERVAL || '5000'), + gasPriceSurplus: parseFloat(process.env.RELAYER_GAS_PRICE_SURPLUS || '0.1'), + minGasPriceBumpFactor: parseFloat(process.env.RELAYER_MIN_GAS_PRICE_BUMP_FACTOR || '0.1'), + maxFeeLimit: process.env.RELAYER_MAX_FEE_PER_GAS_LIMIT ? toBN(process.env.RELAYER_MAX_FEE_PER_GAS_LIMIT) : null, + maxSentQueueSize: parseInt(process.env.RELAYER_MAX_SENT_QUEUE_SIZE || '20'), + relayerTxRedundancy: process.env.RELAYER_TX_REDUNDANCY === 'true', + sentTxDelay: parseInt(process.env.RELAYER_SENT_TX_DELAY || '30000'), + sentTxLogErrorThreshold: parseInt(process.env.RELAYER_SENT_TX_ERROR_THRESHOLD || '3'), + insufficientBalanceCheckTimeout: parseInt(process.env.RELAYER_INSUFFICIENT_BALANCE_CHECK_TIMEOUT || '60000'), + permitDeadlineThresholdInitial: parseInt(process.env.RELAYER_PERMIT_DEADLINE_THRESHOLD_INITIAL || '300'), + requireTraceId: process.env.RELAYER_REQUIRE_TRACE_ID === 'true', + requireLibJsVersion: process.env.RELAYER_REQUIRE_LIBJS_VERSION === 'true', + logIgnoreRoutes: (process.env.RELAYER_LOG_IGNORE_ROUTES || '').split(' ').filter(r => r.length > 0), + logHeaderBlacklist: (process.env.RELAYER_LOG_HEADER_BLACKLIST || defaultHeaderBlacklist) + .split(' ') + .filter(r => r.length > 0), + treeProverType: (process.env.RELAYER_TREE_PROVER_TYPE || ProverType.Local) as ProverType, + directDepositProverType: (process.env.RELAYER_DD_PROVER_TYPE || ProverType.Local) as ProverType, +} + +export default config diff --git a/zp-relayer/configs/watcherConfig.ts b/zp-relayer/configs/watcherConfig.ts new file mode 100644 index 0000000..483ec58 --- /dev/null +++ b/zp-relayer/configs/watcherConfig.ts @@ -0,0 +1,11 @@ +import baseConfig from './baseConfig' + +const config = { + ...baseConfig, + blockConfirmations: parseInt(process.env.WATCHER_BLOCK_CONFIRMATIONS || '1'), + eventPollingInterval: parseInt(process.env.WATCHER_EVENT_POLLING_INTERVAL || '600000'), + directDepositBatchSize: parseInt(process.env.DIRECT_DEPOSIT_BATCH_SIZE || '16'), + directDepositBatchTtl: parseInt(process.env.DIRECT_DEPOSIT_BATCH_TTL || '3600000'), +} + +export default config diff --git a/zp-relayer/direct-deposit/BatchCache.ts b/zp-relayer/direct-deposit/BatchCache.ts new file mode 100644 index 0000000..6e2c16b --- /dev/null +++ b/zp-relayer/direct-deposit/BatchCache.ts @@ -0,0 +1,157 @@ +import type Redis from 'ioredis' +import { Mutex } from 'async-mutex' +import { logger } from '@/services/appLogger' +import { + DIRECT_DEPOSIT_REPROCESS_INTERVAL, + DIRECT_DEPOSIT_REPROCESS_NAME, + DIRECT_DEPOSIT_SET_NAME, +} from '@/utils/constants' + +export class BatchCache { + private timer: NodeJS.Timeout | null = null + private mutex = new Mutex() + + constructor( + private batchSize: number, + private ttl: number, + private cb: (es: T[]) => Promise | void, + private validate: (e: T) => Promise, + private redis: Redis, + private key: string = DIRECT_DEPOSIT_SET_NAME + ) {} + + async init() { + await this.processCache() + this.watchReprocess() + } + + private watchReprocess() { + setInterval(async () => { + const rawEs = await this.redis.lpop(DIRECT_DEPOSIT_REPROCESS_NAME, this.batchSize) + if (!rawEs || rawEs.length === 0) { + return + } + const es: [string, T][] = rawEs.map(rawE => { + const e = JSON.parse(rawE) + return [e.nonce, e] + }) + await this.add(es) + }, DIRECT_DEPOSIT_REPROCESS_INTERVAL) + } + + private clearTimer() { + if (this.timer) { + clearTimeout(this.timer) + this.timer = null + } + } + + private setTimer() { + this.clearTimer() + this.timer = setTimeout(() => { + logger.info('BatchCache timer expired, processing...') + this.execute() + }, this.ttl) + } + + private addToRedis(values: [string, T][]) { + const rawValues = values.map(([s, v]) => [s, JSON.stringify(v)]) + return this.redis.zadd(this.key, ...rawValues.flat()) + } + + private async take(count: number) { + if (count === 0) return [] + const es: string[] = await this.redis.zpopmin(this.key, count) + // Remove score values and parse JSON + let res: T[] = [] + for (let i = 0; i < es.length; i += 2) { + res.push(JSON.parse(es[i])) + } + + return res + } + + // TODO: count could be maintained in-memory + private count() { + return this.redis.zcard(this.key) + } + + private async execute() { + this.clearTimer() + const validatedEs: T[] = [] + let es: T[] = [] + let count: number + logger.info('Assembling new batch...') + do { + count = this.batchSize - validatedEs.length + es = await this.take(count) + logger.info('Retrieved entries from cache', { count: es.length }) + + const validatedResults = await Promise.allSettled( + es.map(async e => { + try { + await this.validate(e) + return e + } catch (err) { + logger.error('Validation failed', { + error: (err as Error).message, + elem: e, + }) + throw err + } + }) + ) + + for (const r of validatedResults) { + if (r.status === 'fulfilled') { + validatedEs.push(r.value) + } + } + } while (validatedEs.length < this.batchSize && count === es.length) + // validatedEs.length === batchSize => batch is full + // count < es.length => cache is drained + + if (validatedEs.length === 0) { + logger.warn('Empty batch after validation, skipping') + return + } + logger.info('Executing batch', { count: validatedEs.length }) + await this.cb(validatedEs) + } + + private async processCache() { + let count = await this.count() + + // Execute all whole batches + while (count >= this.batchSize) { + await this.execute() + count = await this.count() + } + + // If batch still has less than `batchSize` + // elements then update a timer + if (count % this.batchSize != 0 && this.timer === null) { + this.setTimer() + } + } + + // TODO: could be optimized + // We don't need to insert `values` in db if `count` + `values.length` > `batchSize` + // This implementation is simpler and doesn't have any tricky edge cases + async add(values: [string, T][]) { + if (values.length === 0) { + return + } + + // Prevents possible race condition between + // `watchReprocess` and explicit `add` call + const release = await this.mutex.acquire() + + try { + await this.addToRedis(values) + await this.processCache() + } finally { + release() + } + } +} diff --git a/zp-relayer/direct-deposit/utils.ts b/zp-relayer/direct-deposit/utils.ts new file mode 100644 index 0000000..1d5d343 --- /dev/null +++ b/zp-relayer/direct-deposit/utils.ts @@ -0,0 +1,35 @@ +import { logger } from '@/services/appLogger' +import { redis } from '@/services/redisClient' +import config from '@/configs/baseConfig' +import type { DirectDeposit } from '@/queue/poolTxQueue' + +const serviceKey = 'direct-deposit' +const lastBlockRedisKey = `${serviceKey}:lastProcessedBlock` + +export let lastProcessedBlock = Math.max(config.startBlock - 1, 0) + +export async function getLastProcessedBlock() { + const result = await redis.get(lastBlockRedisKey) + logger.debug('Last Processed block obtained', { fromRedis: result, fromConfig: lastProcessedBlock }) + lastProcessedBlock = result ? parseInt(result, 10) : lastProcessedBlock +} + +export function updateLastProcessedBlock(lastBlockNumber: number) { + lastProcessedBlock = lastBlockNumber + return redis.set(lastBlockRedisKey, lastProcessedBlock) +} + +export function parseDirectDepositEvent(o: Record): DirectDeposit { + const dd: DirectDeposit = { + sender: o.sender, + nonce: o.nonce, + fallbackUser: o.fallbackUser, + zkAddress: { + diversifier: o.zkAddress.diversifier, + pk: o.zkAddress.pk, + }, + deposit: o.deposit, + } + + return dd +} diff --git a/zp-relayer/direct-deposit/watcher.ts b/zp-relayer/direct-deposit/watcher.ts new file mode 100644 index 0000000..cad73a8 --- /dev/null +++ b/zp-relayer/direct-deposit/watcher.ts @@ -0,0 +1,89 @@ +// Reference implementation: +// https://github.com/omni/tokenbridge/blob/master/oracle/src/watcher.js +import type Web3 from 'web3' +import type { AbiItem } from 'web3-utils' +import type { DirectDeposit } from '@/queue/poolTxQueue' +import { web3 } from '@/services/web3' +import PoolAbi from '@/abi/pool-abi.json' +import DirectDepositQueueAbi from '@/abi/direct-deposit-queue-abi.json' +import config from '@/configs/watcherConfig' +import { logger } from '@/services/appLogger' +import { redis } from '@/services/redisClient' +import { lastProcessedBlock, getLastProcessedBlock, updateLastProcessedBlock, parseDirectDepositEvent } from './utils' +import { BatchCache } from './BatchCache' +import { validateDirectDeposit } from '@/validation/tx/validateDirectDeposit' +import { getBlockNumber, getEvents } from '@/utils/web3' +import { directDepositQueue } from '@/queue/directDepositQueue' + +const PoolInstance = new web3.eth.Contract(PoolAbi as AbiItem[], config.poolAddress) +const DirectDepositQueueInstance = new web3.eth.Contract(DirectDepositQueueAbi as AbiItem[]) + +const eventName = 'SubmitDirectDeposit' + +const batch = new BatchCache( + config.directDepositBatchSize, + config.directDepositBatchTtl, + ds => { + logger.info('Adding direct-deposit events to queue', { count: ds.length }) + directDepositQueue.add('', ds) + }, + dd => validateDirectDeposit(dd, DirectDepositQueueInstance), + redis +) + +async function init() { + await getLastProcessedBlock() + await batch.init() + const queueAddress = await PoolInstance.methods.direct_deposit_queue().call() + DirectDepositQueueInstance.options.address = queueAddress + runWatcher() +} + +async function getLastBlockToProcess(web3: Web3) { + const lastBlockNumber = await getBlockNumber(web3) + return lastBlockNumber - config.blockConfirmations +} + +async function watch() { + const lastBlockToProcess = await getLastBlockToProcess(web3) + + if (lastBlockToProcess <= lastProcessedBlock) { + logger.debug('All blocks already processed') + return + } + + const fromBlock = lastProcessedBlock + 1 + const rangeEndBlock = fromBlock + config.eventsProcessingBatchSize + let toBlock = Math.min(lastBlockToProcess, rangeEndBlock) + + let events = await getEvents(DirectDepositQueueInstance, eventName, { + fromBlock, + toBlock, + }) + logger.info(`Found ${events.length} direct-deposit events`) + + const directDeposits: [string, DirectDeposit][] = [] + for (let event of events) { + const dd = parseDirectDepositEvent(event.returnValues) + directDeposits.push([dd.nonce, dd]) + } + + await batch.add(directDeposits) + + logger.debug('Updating last processed block', { lastProcessedBlock: toBlock.toString() }) + await updateLastProcessedBlock(toBlock) +} + +async function runWatcher() { + try { + await watch() + } catch (e) { + logger.error(e) + } + + setTimeout(() => { + runWatcher() + }, config.eventPollingInterval) +} + +init() diff --git a/zp-relayer/endpoints.ts b/zp-relayer/endpoints.ts index ef4ad3d..9220507 100644 --- a/zp-relayer/endpoints.ts +++ b/zp-relayer/endpoints.ts @@ -1,7 +1,7 @@ import { Request, Response } from 'express' import { pool, PoolTx } from './pool' import { poolTxQueue } from './queue/poolTxQueue' -import config from './config' +import config from './configs/relayerConfig' import { checkGetLimits, checkGetSiblings, @@ -10,10 +10,11 @@ import { checkSendTransactionsErrors, checkTraceId, validateBatch, -} from './validation/validation' +} from './validation/api/validation' import { sentTxQueue, SentTxState } from './queue/sentTxQueue' import type { Queue } from 'bullmq' -import { TRACE_ID } from './utils/constants' +import { HEADER_TRACE_ID } from './utils/constants' +import { getFileHash } from './utils/helpers' async function sendTransactions(req: Request, res: Response) { validateBatch([ @@ -22,7 +23,7 @@ async function sendTransactions(req: Request, res: Response) { ]) const rawTxs = req.body as PoolTx[] - const traceId = req.headers[TRACE_ID] as string + const traceId = req.headers[HEADER_TRACE_ID] as string const txs = rawTxs.map(tx => { const { proof, memo, txType, depositSignature } = tx @@ -238,8 +239,11 @@ function getSiblings(req: Request, res: Response) { res.json(siblings) } -function getParamsHash(type: 'tree' | 'transfer') { - const hash = type === 'tree' ? pool.treeParamsHash : pool.transferParamsHash +function getParamsHash(path: string | null) { + let hash: string | null = null + if (path) { + hash = getFileHash(path) + } return (req: Request, res: Response) => { res.json({ hash }) } diff --git a/zp-relayer/env.ts b/zp-relayer/env.ts deleted file mode 100644 index 50c8721..0000000 --- a/zp-relayer/env.ts +++ /dev/null @@ -1,2 +0,0 @@ -import dotenv from 'dotenv' -dotenv.config() diff --git a/zp-relayer/index.ts b/zp-relayer/index.ts index 4f3ef5e..4e8e0ec 100644 --- a/zp-relayer/index.ts +++ b/zp-relayer/index.ts @@ -1,19 +1,17 @@ -import './env' import express from 'express' -import router from './router' +import { createRouter } from './router' import { logger } from './services/appLogger' import { createConsoleLoggerMiddleware, createPersistentLoggerMiddleware } from './services/loggerMiddleware' -import config from './config' +import config from './configs/relayerConfig' import { init } from './init' -const app = express() - -app.use(createPersistentLoggerMiddleware(config.requestLogPath)) -app.use(createConsoleLoggerMiddleware()) +init().then(() => { + const app = express() -app.use(router) + app.use(createPersistentLoggerMiddleware(config.requestLogPath)) + app.use(createConsoleLoggerMiddleware()) -init().then(() => { + app.use(createRouter()) const PORT = config.port app.listen(PORT, () => logger.info(`Started relayer on port ${PORT}`)) }) diff --git a/zp-relayer/init.ts b/zp-relayer/init.ts index 351849f..e2646f2 100644 --- a/zp-relayer/init.ts +++ b/zp-relayer/init.ts @@ -1,26 +1,77 @@ +import { Mutex } from 'async-mutex' +import { Params } from 'libzkbob-rs-node' import { pool } from './pool' import { GasPrice } from './services/gas-price' import { web3 } from './services/web3' -import config from './config' -import { Mutex } from 'async-mutex' - +import { web3Redundant } from './services/web3Redundant' +import config, { ProverType } from './configs/relayerConfig' import { createPoolTxWorker } from './workers/poolTxWorker' import { createSentTxWorker } from './workers/sentTxWorker' import { initializeDomain } from './utils/EIP712SaltedPermit' import { redis } from './services/redisClient' -import { validateTx } from './validateTx' +import { validateTx } from './validation/tx/validateTx' +import { TxManager } from './tx/TxManager' +import { Circuit, IProver, LocalProver, RemoteProver } from './prover' +import type { IWorkerBaseConfig } from './workers/workerTypes' +import { createDirectDepositWorker } from './workers/directDepositWorker' + +function buildProver(circuit: T, type: ProverType, path: string): IProver { + if (type === ProverType.Local) { + const params = Params.fromFile(path) + return new LocalProver(circuit, params) + } else { + // TODO: add env url + return new RemoteProver('') + } +} export async function init() { await initializeDomain(web3) - await pool.init() + const gasPriceService = new GasPrice(web3, config.gasPriceUpdateInterval, config.gasPriceEstimationType, { speedType: config.gasPriceSpeedType, factor: config.gasPriceFactor, maxFeeLimit: config.maxFeeLimit, }) await gasPriceService.start() - const workerMutex = new Mutex() - ;(await createPoolTxWorker(gasPriceService, validateTx, workerMutex, redis)).run() - ;(await createSentTxWorker(gasPriceService, workerMutex, redis)).run() + + const txManager = new TxManager(web3Redundant, config.relayerPrivateKey, gasPriceService) + await txManager.init() + + const mutex = new Mutex() + + const baseConfig: IWorkerBaseConfig = { + redis, + } + + const treeProver = buildProver(Circuit.Tree, config.treeProverType, config.treeUpdateParamsPath as string) + + const directDepositProver = buildProver( + Circuit.DirectDeposit, + config.directDepositProverType, + config.directDepositParamsPath as string + ) + + const workerPromises = [ + createPoolTxWorker({ + ...baseConfig, + validateTx, + treeProver, + mutex, + txManager, + }), + createSentTxWorker({ + ...baseConfig, + mutex, + txManager, + }), + createDirectDepositWorker({ + ...baseConfig, + directDepositProver, + }), + ] + + const workers = await Promise.all(workerPromises) + workers.forEach(w => w.run()) } diff --git a/zp-relayer/package.json b/zp-relayer/package.json index 9982108..7954b9b 100644 --- a/zp-relayer/package.json +++ b/zp-relayer/package.json @@ -6,8 +6,10 @@ "scripts": { "initialize": "yarn install --frozen-lockfile", "build": "tsc --project ./ && tsc-alias", - "start:dev": "ts-node index.ts", + "start:dev": "DOTENV_CONFIG_PATH=relayer.env ts-node -r dotenv/config index.ts", "start:prod": "node index.js", + "start:direct-deposit-watcher:dev": "DOTENV_CONFIG_PATH=watcher.env ts-node -r dotenv/config direct-deposit/watcher.ts", + "start:direct-deposit-watcher:prod": "node direct-deposit/watcher.js", "deploy:local": "ts-node test/deploy.ts", "deploy:local:rm": "rm -rf test/STATE_DIR && ts-node test/clear.ts", "test:unit": "ts-mocha -r dotenv/config --paths --timeout 1000000 test/unit-tests/*.test.ts", @@ -26,9 +28,10 @@ "express-winston": "4.2.0", "gas-price-oracle": "0.5.1", "ioredis": "5.2.4", - "libzkbob-rs-node": "0.2.2", + "libzkbob-rs-node": "1.0.0", "node-fetch": "^2.6.1", "promise-retry": "^2.0.1", + "semver": "7.3.8", "web3": "1.7.4", "winston": "3.3.3", "zp-memo-parser": "link:../zp-memo-parser" @@ -42,6 +45,7 @@ "@types/mocha": "^9.0.0", "@types/node-fetch": "^2.5.12", "@types/promise-retry": "^1.1.3", + "@types/semver": "^7.3.13", "@types/uuid": "^8.3.4", "chai": "^4.3.4", "chai-as-promised": "7.1.1", diff --git a/zp-relayer/pool.ts b/zp-relayer/pool.ts index 25ca860..c0ea8f6 100644 --- a/zp-relayer/pool.ts +++ b/zp-relayer/pool.ts @@ -1,17 +1,15 @@ -import './env' -import fs from 'fs' -import crypto from 'crypto' import BN from 'bn.js' import PoolAbi from './abi/pool-abi.json' +import TokenAbi from './abi/token-abi.json' import { AbiItem, toBN } from 'web3-utils' import type { Contract } from 'web3-eth-contract' -import config from './config' +import config from './configs/relayerConfig' import { web3 } from './services/web3' import { logger } from './services/appLogger' import { redis } from './services/redisClient' -import { poolTxQueue } from './queue/poolTxQueue' +import { poolTxQueue, WorkerTxType, WorkerTxTypePriority } from './queue/poolTxQueue' import { getBlockNumber, getEvents, getTransaction } from './utils/web3' -import { Helpers, Params, Proof, SnarkProof, VK } from 'libzkbob-rs-node' +import { Helpers, Proof, SnarkProof, VK } from 'libzkbob-rs-node' import { PoolState } from './state/PoolState' import type { TxType } from 'zp-memo-parser' @@ -66,9 +64,7 @@ export interface LimitsFetch { class Pool { public PoolInstance: Contract - public treeParams: Params - public treeParamsHash: string - public transferParamsHash: string + public TokenInstance: Contract private txVK: VK public state: PoolState public optimisticState: PoolState @@ -78,11 +74,8 @@ class Pool { constructor() { this.PoolInstance = new web3.eth.Contract(PoolAbi as AbiItem[], config.poolAddress) + this.TokenInstance = new web3.eth.Contract(TokenAbi as AbiItem[], config.tokenAddress) - this.treeParamsHash = Pool.getHash(config.treeUpdateParamsPath) - this.transferParamsHash = Pool.getHash(config.transferParamsPath) - - this.treeParams = Params.fromFile(config.treeUpdateParamsPath) const txVK = require(config.txVKPath) this.txVK = txVK @@ -95,13 +88,6 @@ class Pool { this.optimisticState = states.optimisticState } - private static getHash(path: string) { - const buffer = fs.readFileSync(path) - const hash = crypto.createHash('sha256') - hash.update(buffer) - return hash.digest('hex') - } - async init() { if (this.isInitialized) return @@ -123,7 +109,13 @@ class Pool { depositSignature, } }) - const job = await poolTxQueue.add('tx', { transactions: queueTxs, traceId }) + const job = await poolTxQueue.add( + 'tx', + { type: WorkerTxType.Normal, transactions: queueTxs, traceId }, + { + priority: WorkerTxTypePriority[WorkerTxType.Normal], + } + ) logger.debug(`Added poolTxWorker job: ${job.id}`) return job.id } @@ -156,10 +148,13 @@ class Pool { missedIndices[i] = localIndex + (i + 1) * OUTPLUSONE } - const lastBlockNumber = await this.getLastBlockToProcess() + const transactSelector = '0xaf989083' + const directDepositSelector = '0x1dc4cb33' + + const lastBlockNumber = (await this.getLastBlockToProcess()) + 1 let toBlock = startBlock - for (let fromBlock = startBlock; toBlock <= lastBlockNumber + 1; fromBlock = toBlock) { - toBlock += config.eventsProcessingBatchSize + for (let fromBlock = startBlock; toBlock < lastBlockNumber; fromBlock = toBlock) { + toBlock = Math.min(toBlock + config.eventsProcessingBatchSize, lastBlockNumber) const events = await getEvents(this.PoolInstance, 'Message', { fromBlock, toBlock: toBlock - 1, @@ -170,40 +165,58 @@ class Pool { for (let i = 0; i < events.length; i++) { const { returnValues, transactionHash } = events[i] - const memoString: string = returnValues.message - if (!memoString) { - throw new Error('incorrect memo in event') - } - const { input } = await getTransaction(web3, transactionHash) - const calldata = Buffer.from(truncateHexPrefix(input), 'hex') - - const parser = new PoolCalldataParser(calldata) - - const outCommitRaw = parser.getField('outCommit') - const outCommit = web3.utils.hexToNumberString(outCommitRaw) - - const txTypeRaw = parser.getField('txType') - const txType = toTxType(txTypeRaw) - - const memoSize = web3.utils.hexToNumber(parser.getField('memoSize')) - const memoRaw = truncateHexPrefix(parser.getField('memo', memoSize)) - - const truncatedMemo = truncateMemoTxPrefix(memoRaw, txType) - const commitAndMemo = numToHex(toBN(outCommit)).concat(transactionHash.slice(2)).concat(truncatedMemo) const newPoolIndex = Number(returnValues.index) const prevPoolIndex = newPoolIndex - OUTPLUSONE const prevCommitIndex = Math.floor(Number(prevPoolIndex) / OUTPLUSONE) + let outCommit: string + let memo: string + + if (input.startsWith(directDepositSelector)) { + // Direct deposit case + const res = web3.eth.abi.decodeParameters( + [ + 'uint256', // Root after + 'uint256[]', // Indices + 'uint256', // Out commit + 'uint256[8]', // Deposit proof + 'uint256[8]', // Tree proof + ], + input.slice(10) // Cut off selector + ) + outCommit = res[2] + memo = truncateHexPrefix(returnValues.message || '') + } else if (input.startsWith(transactSelector)) { + // Normal tx case + const calldata = Buffer.from(truncateHexPrefix(input), 'hex') + + const parser = new PoolCalldataParser(calldata) + + const outCommitRaw = parser.getField('outCommit') + outCommit = web3.utils.hexToNumberString(outCommitRaw) + + const txTypeRaw = parser.getField('txType') + const txType = toTxType(txTypeRaw) + + const memoSize = web3.utils.hexToNumber(parser.getField('memoSize')) + const memoRaw = truncateHexPrefix(parser.getField('memo', memoSize)) + + memo = truncateMemoTxPrefix(memoRaw, txType) + + // Save nullifier in confirmed state + const nullifier = parser.getField('nullifier') + await this.state.nullifiers.add([web3.utils.hexToNumberString(nullifier)]) + } else { + throw new Error(`Unknown transaction type: ${input}`) + } + + const commitAndMemo = numToHex(toBN(outCommit)).concat(transactionHash.slice(2)).concat(memo) for (let state of [this.state, this.optimisticState]) { state.addCommitment(prevCommitIndex, Helpers.strToNum(outCommit)) state.addTx(prevPoolIndex, Buffer.from(commitAndMemo, 'hex')) } - - // Save nullifier in confirmed state - const nullifier = parser.getField('nullifier') - await this.state.nullifiers.add([web3.utils.hexToNumberString(nullifier)]) } } @@ -277,5 +290,6 @@ class Pool { } } -export const pool = new Pool() +export let pool: Pool = new Pool() + export type { Pool } diff --git a/zp-relayer/prover/IProver.ts b/zp-relayer/prover/IProver.ts new file mode 100644 index 0000000..d11a876 --- /dev/null +++ b/zp-relayer/prover/IProver.ts @@ -0,0 +1,27 @@ +import type { + TreePub, + TreeSec, + Proof, + DelegatedDepositBatchPub, + DelegatedDepositBatchSec, + Params, +} from 'libzkbob-rs-node' + +// TODO: add support for DD +export enum Circuit { + Tree = 'tree', + DirectDeposit = 'direct-deposit', +} + +type ProveInput = C extends Circuit.Tree + ? [TreePub, TreeSec] + : C extends Circuit.DirectDeposit + ? [DelegatedDepositBatchPub, DelegatedDepositBatchSec] + : never + +export type PubInput = ProveInput extends [infer P, any] ? P : never +export type SecInput = ProveInput extends [any, infer S] ? S : never + +export interface IProver { + prove(pub: PubInput, sec: SecInput): Promise +} diff --git a/zp-relayer/prover/LocalProver.ts b/zp-relayer/prover/LocalProver.ts new file mode 100644 index 0000000..4052270 --- /dev/null +++ b/zp-relayer/prover/LocalProver.ts @@ -0,0 +1,22 @@ +import { Proof, Params } from 'libzkbob-rs-node' +import { Circuit, IProver, PubInput, SecInput } from './IProver' + +type InternalProve = (p: Params, pub: PubInput, sec: SecInput) => Promise + +export class LocalProver implements IProver { + private _prove: InternalProve + + constructor(circuit: C, private readonly params: Params) { + if (circuit === Circuit.Tree) { + this._prove = Proof.treeAsync as InternalProve + } else if (circuit === Circuit.DirectDeposit) { + this._prove = Proof.delegatedDepositAsync as InternalProve + } else { + throw new Error('Unsupported circuit') + } + } + + prove(pub: PubInput, sec: SecInput): Promise { + return this._prove(this.params, pub, sec) + } +} diff --git a/zp-relayer/prover/RemoteProver.ts b/zp-relayer/prover/RemoteProver.ts new file mode 100644 index 0000000..10be7a4 --- /dev/null +++ b/zp-relayer/prover/RemoteProver.ts @@ -0,0 +1,11 @@ +import type { Proof } from 'libzkbob-rs-node' +import { Circuit, IProver, PubInput, SecInput } from './IProver' + +export class RemoteProver implements IProver { + constructor(private readonly url: string) {} + + async prove(pub: PubInput, sec: SecInput): Promise { + // TODO: implement + throw new Error('Not implemented') + } +} diff --git a/zp-relayer/prover/index.ts b/zp-relayer/prover/index.ts new file mode 100644 index 0000000..c96a3f2 --- /dev/null +++ b/zp-relayer/prover/index.ts @@ -0,0 +1,3 @@ +export * from './IProver' +export * from './LocalProver' +export * from './RemoteProver' diff --git a/zp-relayer/queue/directDepositQueue.ts b/zp-relayer/queue/directDepositQueue.ts new file mode 100644 index 0000000..2966c63 --- /dev/null +++ b/zp-relayer/queue/directDepositQueue.ts @@ -0,0 +1,8 @@ +import { Queue } from 'bullmq' +import { DIRECT_DEPOSIT_QUEUE_NAME } from '@/utils/constants' +import { DirectDeposit } from './poolTxQueue' +import { redis } from '@/services/redisClient' + +export const directDepositQueue = new Queue(DIRECT_DEPOSIT_QUEUE_NAME, { + connection: redis, +}) diff --git a/zp-relayer/queue/poolTxQueue.ts b/zp-relayer/queue/poolTxQueue.ts index dd4f658..ecb798b 100644 --- a/zp-relayer/queue/poolTxQueue.ts +++ b/zp-relayer/queue/poolTxQueue.ts @@ -1,8 +1,8 @@ import { Queue } from 'bullmq' -import { redis } from '@/services/redisClient' import { TX_QUEUE_NAME } from '@/utils/constants' import type { Proof } from 'libzkbob-rs-node' import { TxType } from 'zp-memo-parser' +import { redis } from '@/services/redisClient' export interface TxPayload { amount: string @@ -13,13 +13,50 @@ export interface TxPayload { depositSignature: string | null } -export interface BatchTx { - transactions: TxPayload[] +interface ZkAddress { + diversifier: string + pk: string +} + +export interface DirectDeposit { + sender: string + nonce: string + fallbackUser: string + zkAddress: ZkAddress + deposit: string +} + +export interface DirectDepositTxPayload { + deposits: DirectDeposit[] + txProof: Proof + outCommit: string + memo: string +} + +export enum WorkerTxType { + Normal = 'normal', + DirectDeposit = 'dd', +} + +export const WorkerTxTypePriority: Record = { + [WorkerTxType.Normal]: 1, + [WorkerTxType.DirectDeposit]: 2, +} + +export type WorkerTx = T extends WorkerTxType.Normal + ? TxPayload + : T extends WorkerTxType.DirectDeposit + ? DirectDepositTxPayload + : never + +export interface BatchTx { + type: T + transactions: M extends true ? WorkerTx[] : WorkerTx traceId?: string } export type PoolTxResult = [string, string] -export const poolTxQueue = new Queue(TX_QUEUE_NAME, { +export const poolTxQueue = new Queue, PoolTxResult[]>(TX_QUEUE_NAME, { connection: redis, }) diff --git a/zp-relayer/queue/sentTxQueue.ts b/zp-relayer/queue/sentTxQueue.ts index ddad263..f69f658 100644 --- a/zp-relayer/queue/sentTxQueue.ts +++ b/zp-relayer/queue/sentTxQueue.ts @@ -1,9 +1,9 @@ import { Queue } from 'bullmq' -import { redis } from '@/services/redisClient' import { SENT_TX_QUEUE_NAME } from '@/utils/constants' +import { redis } from '@/services/redisClient' import type { TransactionConfig } from 'web3-core' -import { GasPriceValue } from '@/services/gas-price' -import type { TxPayload } from './poolTxQueue' +import type { GasPriceValue } from '@/services/gas-price' +import type { BatchTx, WorkerTxType } from './poolTxQueue' export type SendAttempt = [string, GasPriceValue] export interface SentTxPayload { @@ -13,10 +13,9 @@ export interface SentTxPayload { commitIndex: number truncatedMemo: string txConfig: TransactionConfig - nullifier: string - txPayload: TxPayload + nullifier?: string + txPayload: BatchTx prevAttempts: SendAttempt[] - traceId?: string } export enum SentTxState { diff --git a/zp-relayer/router.ts b/zp-relayer/router.ts index c7d9176..13dfcfe 100644 --- a/zp-relayer/router.ts +++ b/zp-relayer/router.ts @@ -1,10 +1,11 @@ import express, { NextFunction, Request, Response } from 'express' import cors from 'cors' +import semver from 'semver' import endpoints from './endpoints' import { logger } from './services/appLogger' -import { ValidationError } from './validation/validation' -import config from './config' -import { TRACE_ID } from './utils/constants' +import { ValidationError } from './validation/api/validation' +import config from './configs/relayerConfig' +import { HEADER_LIBJS, HEADER_TRACE_ID, LIBJS_MIN_VERSION } from './utils/constants' function wrapErr(f: (_req: Request, _res: Response, _next: NextFunction) => Promise | void) { return async (req: Request, res: Response, next: NextFunction) => { @@ -16,51 +17,70 @@ function wrapErr(f: (_req: Request, _res: Response, _next: NextFunction) => Prom } } -const router = express.Router() +export function createRouter() { + const router = express.Router() -router.use(cors()) -router.use(express.urlencoded({ extended: true })) -router.use(express.json()) -router.use(express.text()) + router.use(cors()) + router.use(express.urlencoded({ extended: true })) + router.use(express.json()) + router.use(express.text()) -router.use((err: any, req: Request, res: Response, next: NextFunction) => { - if (err) { - logger.error('Request error:', err) - return res.sendStatus(500) - } - next() -}) + router.use((err: any, req: Request, res: Response, next: NextFunction) => { + if (err) { + logger.error('Request error:', err) + return res.sendStatus(500) + } + next() + }) -router.use((req: Request, res: Response, next: NextFunction) => { - if (config.requireTraceId && req.headers[TRACE_ID]) { - logger.info('TraceId', { traceId: req.headers[TRACE_ID], path: req.path }) - } - next() -}) + router.use((req: Request, res: Response, next: NextFunction) => { + const traceId = req.headers[HEADER_TRACE_ID] + if (config.requireTraceId && traceId) { + logger.info('TraceId', { traceId, path: req.path }) + } -router.get('/', endpoints.root) -router.get('/version', endpoints.relayerVersion) -router.post('/sendTransactions', wrapErr(endpoints.sendTransactions)) -router.get('/transactions/v2', wrapErr(endpoints.getTransactionsV2)) -router.get('/merkle/root/:index?', wrapErr(endpoints.merkleRoot)) -router.get('/job/:id', wrapErr(endpoints.getJob)) -router.get('/info', wrapErr(endpoints.relayerInfo)) -router.get('/fee', wrapErr(endpoints.getFee)) -router.get('/limits', wrapErr(endpoints.getLimits)) -router.get('/siblings', wrapErr(endpoints.getSiblings)) -router.get('/params/hash/tree', wrapErr(endpoints.getParamsHash('tree'))) -router.get('/params/hash/tx', wrapErr(endpoints.getParamsHash('transfer'))) + if (config.requireLibJsVersion) { + const libJsVersion = req.headers[HEADER_LIBJS] as string + let isValidVersion = false + try { + isValidVersion = semver.gte(libJsVersion, LIBJS_MIN_VERSION) + } catch (e) { + logger.warn('Invalid libjs version header', { libJsVersion }) + } -// Error handler middleware -router.use((error: any, req: Request, res: Response) => { - if (error instanceof ValidationError) { - const validationErrors = error.validationErrors - logger.warn('Validation errors', { errors: validationErrors, path: req.path }) - res.status(400).json(validationErrors) - } else { - logger.error('Internal error', { error, path: req.path }) - res.status(500).send('Internal server error') - } -}) + if (!isValidVersion) { + throw new ValidationError([{ path: HEADER_LIBJS, message: `Minimum supported version: ${LIBJS_MIN_VERSION}` }]) + } + } -export default router + next() + }) + + router.get('/', endpoints.root) + router.get('/version', endpoints.relayerVersion) + router.post('/sendTransactions', wrapErr(endpoints.sendTransactions)) + router.get('/transactions/v2', wrapErr(endpoints.getTransactionsV2)) + router.get('/merkle/root/:index?', wrapErr(endpoints.merkleRoot)) + router.get('/job/:id', wrapErr(endpoints.getJob)) + router.get('/info', wrapErr(endpoints.relayerInfo)) + router.get('/fee', wrapErr(endpoints.getFee)) + router.get('/limits', wrapErr(endpoints.getLimits)) + router.get('/siblings', wrapErr(endpoints.getSiblings)) + router.get('/params/hash/tree', wrapErr(endpoints.getParamsHash(config.treeUpdateParamsPath))) + router.get('/params/hash/tx', wrapErr(endpoints.getParamsHash(config.transferParamsPath))) + router.get('/params/hash/direct-deposit', wrapErr(endpoints.getParamsHash(config.directDepositParamsPath))) + + // Error handler middleware + router.use((error: any, req: Request, res: Response, next: NextFunction) => { + if (error instanceof ValidationError) { + const validationErrors = error.validationErrors + logger.warn('Validation errors', { errors: validationErrors, path: req.path }) + res.status(400).json(validationErrors) + } else { + logger.error('Internal error', { error, path: req.path }) + res.status(500).send('Internal server error') + } + }) + + return router +} diff --git a/zp-relayer/services/appLogger.ts b/zp-relayer/services/appLogger.ts index d2b2c98..cb203c6 100644 --- a/zp-relayer/services/appLogger.ts +++ b/zp-relayer/services/appLogger.ts @@ -1,5 +1,5 @@ import { createLogger, format, transports } from 'winston' -import config from '@/config' +import config from '@/configs/baseConfig' export const logger = createLogger({ level: config.logLevel, diff --git a/zp-relayer/services/gas-price/GasPrice.ts b/zp-relayer/services/gas-price/GasPrice.ts index 448eff5..d3f840d 100644 --- a/zp-relayer/services/gas-price/GasPrice.ts +++ b/zp-relayer/services/gas-price/GasPrice.ts @@ -1,8 +1,9 @@ import BN from 'bn.js' import type Web3 from 'web3' +import type { TransactionConfig } from 'web3-core' import { toWei, toBN } from 'web3-utils' import BigNumber from 'bignumber.js' -import config from '@/config' +import config from '@/configs/relayerConfig' import { setIntervalAndRun } from '@/utils/helpers' import { estimateFees } from '@mycrypto/gas-estimation' import { GasPriceOracle } from 'gas-price-oracle' @@ -38,6 +39,19 @@ function isEIP1559GasPrice(gp: GasPriceValue): gp is EIP1559GasPrice { return 'maxFeePerGas' in gp && 'maxPriorityFeePerGas' in gp } +export function getGasPriceValue(tx: TransactionConfig): GasPriceValue | null { + if ('gasPrice' in tx) { + return { gasPrice: tx.gasPrice as string } + } + if ('maxFeePerGas' in tx && 'maxPriorityFeePerGas' in tx) { + return { + maxFeePerGas: tx.maxFeePerGas as string, + maxPriorityFeePerGas: tx.maxPriorityFeePerGas as string, + } + } + return null +} + export function getMaxRequiredGasPrice(gp: GasPriceValue): string { if (isLegacyGasPrice(gp)) return gp.gasPrice if (isEIP1559GasPrice(gp)) return gp.maxFeePerGas diff --git a/zp-relayer/services/loggerMiddleware.ts b/zp-relayer/services/loggerMiddleware.ts index de268ef..213dd52 100644 --- a/zp-relayer/services/loggerMiddleware.ts +++ b/zp-relayer/services/loggerMiddleware.ts @@ -1,6 +1,6 @@ import { format, transports } from 'winston' import expressWinston from 'express-winston' -import config from '@/config' +import config from '@/configs/relayerConfig' import { logger } from './appLogger' export function createPersistentLoggerMiddleware(filename: string = 'zp.log') { diff --git a/zp-relayer/services/providers/BaseHttpProvider.ts b/zp-relayer/services/providers/BaseHttpProvider.ts index c051034..d063910 100644 --- a/zp-relayer/services/providers/BaseHttpProvider.ts +++ b/zp-relayer/services/providers/BaseHttpProvider.ts @@ -1,9 +1,6 @@ import fetch from 'node-fetch' import { HttpProvider } from 'web3-core' import type { OperationOptions } from 'retry' -import config from '@/config' - -const JSONRPC_ERROR_CODES = config.relayerJsonRpcErrorCodes export interface ProviderOptions { name: string @@ -23,7 +20,7 @@ export default abstract class BaseHttpProvider implements HttpProvider { options: ProviderOptions connected = false - constructor(public host: string, options: Partial = {}) { + constructor(public host: string, options: Partial = {}, private jsonRpcErrorCodes: number[] = []) { this.options = { ...defaultOptions, ...options } } @@ -47,7 +44,7 @@ export default abstract class BaseHttpProvider implements HttpProvider { if ( response.error && - (JSONRPC_ERROR_CODES.includes(response.error.code) || response.error.message?.includes('ancient block')) + (this.jsonRpcErrorCodes.includes(response.error.code) || response.error.message?.includes('ancient block')) ) { throw new Error(response?.error.message) } diff --git a/zp-relayer/services/providers/HttpListProvider.ts b/zp-relayer/services/providers/HttpListProvider.ts index b94d306..17955a1 100644 --- a/zp-relayer/services/providers/HttpListProvider.ts +++ b/zp-relayer/services/providers/HttpListProvider.ts @@ -22,12 +22,12 @@ export default class HttpListProvider extends BaseHttpProvider { latestBlock: number syncStateCheckerIntervalId?: NodeJS.Timer - constructor(urls: string[], options: Partial = {}) { + constructor(urls: string[], options: Partial = {}, jsonRpcErrorCodes: number[]) { if (!urls || !urls.length) { throw new TypeError(`Invalid URLs: '${urls}'`) } - super(urls[0], options) + super(urls[0], options, jsonRpcErrorCodes) this.currentIndex = 0 this.lastTimeUsedPrimary = 0 this.latestBlock = 0 diff --git a/zp-relayer/services/providers/SafeEthLogsProvider.ts b/zp-relayer/services/providers/SafeEthLogsProvider.ts new file mode 100644 index 0000000..f55d942 --- /dev/null +++ b/zp-relayer/services/providers/SafeEthLogsProvider.ts @@ -0,0 +1,39 @@ +// Reference implementation: +// https://github.com/omni/tokenbridge/blob/master/oracle/src/services/SafeEthLogsProvider.js +import { HttpProvider } from 'web3-core' +import { hexToNumber, isHexStrict } from 'web3-utils' +import { logger } from '../appLogger' + +export function SafeEthLogsProvider(provider: HttpProvider) { + const oldSend = provider.send.bind(provider) + const newSend = function (payload: any, callback: any) { + if (payload.method === 'eth_getLogs' && isHexStrict(payload.params[0].toBlock)) { + logger.debug('Modifying eth_getLogs request to include batch eth_blockNumber request') + + const newPayload = [payload, { jsonrpc: '2.0', id: payload.id + 1, method: 'eth_blockNumber', params: [] }] + oldSend(newPayload as any, (err, res) => { + if (err) { + callback(err, null) + } else { + // @ts-ignore + const rawBlockNumber = res.find(({ id }) => id === payload.id + 1) + const blockNumber = hexToNumber(rawBlockNumber.result) + const toBlock = hexToNumber(payload.params[0].toBlock) + + if (blockNumber < toBlock) { + logger.warn('Returned block number is less than the specified toBlock', { toBlock, blockNumber }) + callback(new Error('block number too low'), null) + } else { + // @ts-ignore + const rawLogs = res.find(({ id }) => id === payload.id) + callback(null, rawLogs) + } + } + }) + } else { + oldSend(payload, callback) + } + } + provider.send = newSend.bind(provider) + return provider +} diff --git a/zp-relayer/services/redisClient.ts b/zp-relayer/services/redisClient.ts index b2d2e05..372ee7b 100644 --- a/zp-relayer/services/redisClient.ts +++ b/zp-relayer/services/redisClient.ts @@ -1,15 +1,6 @@ import Redis from 'ioredis' -import { logger } from './appLogger' -import config from '@/config' +import config from '@/configs/baseConfig' export const redis = new Redis(config.redisUrl, { maxRetriesPerRequest: null, }) - -redis.on('connect', () => { - logger.info('Connected to redis') -}) - -redis.on('error', () => { - logger.error('Disconnected from redis') -}) diff --git a/zp-relayer/services/web3.ts b/zp-relayer/services/web3.ts index 07a7328..b5da134 100644 --- a/zp-relayer/services/web3.ts +++ b/zp-relayer/services/web3.ts @@ -1,28 +1,16 @@ import Web3 from 'web3' -import config from '@/config' import type { HttpProvider } from 'web3-core' import { RETRY_CONFIG } from '@/utils/constants' import HttpListProvider from './providers/HttpListProvider' -import RedundantHttpListProvider from './providers/RedundantHttpListProvider' import { checkHTTPS } from '@/utils/helpers' +import { SafeEthLogsProvider } from './providers/SafeEthLogsProvider' +import config from '@/configs/baseConfig' const providerOptions = { requestTimeout: config.rpcRequestTimeout, retry: RETRY_CONFIG, } - config.rpcUrls.forEach(checkHTTPS(config.requireHTTPS)) -const provider = new HttpListProvider(config.rpcUrls, providerOptions) +const provider = new HttpListProvider(config.rpcUrls, providerOptions, config.jsonRpcErrorCodes) provider.startSyncStateChecker(config.rpcSyncCheckInterval) -const web3 = new Web3(provider as HttpProvider) - -let web3Redundant = web3 -if (config.relayerTxRedundancy && config.rpcUrls.length > 1) { - const redundantProvider = new RedundantHttpListProvider(config.rpcUrls, { - ...providerOptions, - name: 'redundant', - }) - web3Redundant = new Web3(redundantProvider) -} - -export { web3, web3Redundant } +export const web3 = new Web3(SafeEthLogsProvider(provider as HttpProvider)) diff --git a/zp-relayer/services/web3Redundant.ts b/zp-relayer/services/web3Redundant.ts new file mode 100644 index 0000000..e261dd9 --- /dev/null +++ b/zp-relayer/services/web3Redundant.ts @@ -0,0 +1,19 @@ +import Web3 from 'web3' +import RedundantHttpListProvider from './providers/RedundantHttpListProvider' +import config from '@/configs/relayerConfig' +import { web3 } from './web3' +import { RETRY_CONFIG } from '@/utils/constants' + +export let web3Redundant = web3 + +const providerOptions = { + requestTimeout: config.rpcRequestTimeout, + retry: RETRY_CONFIG, +} +if (config.relayerTxRedundancy && config.rpcUrls.length > 1) { + const redundantProvider = new RedundantHttpListProvider(config.rpcUrls, { + ...providerOptions, + name: 'redundant', + }) + web3Redundant = new Web3(redundantProvider) +} diff --git a/zp-relayer/test.env b/zp-relayer/test.env index 713a351..24fcb9d 100644 --- a/zp-relayer/test.env +++ b/zp-relayer/test.env @@ -1,22 +1,22 @@ -PORT=8000 +COMMON_POOL_ADDRESS=0x9b1f7F645351AF3631a656421eD2e40f2802E6c0 +COMMON_START_BLOCK=0 +COMMON_LOG_LEVEL=debug +COMMON_RELAYER_REDIS_URL=127.0.0.1:6379 +COMMON_RPC_URL=http://127.0.0.1:8545 + +RELAYER_PORT=8000 RELAYER_ADDRESS_PRIVATE_KEY=0x6370fd033278c143179d81c5526140625662b8daa446c22ee2d73db3707e620c -POOL_ADDRESS=0xe982E462b094850F12AF94d21D470e21bE9D0E9C -TOKEN_ADDRESS=0xe78A0F7E598Cc8b0Bb87894B0F60dD2a88d6a8Ab -START_BLOCK=0 +RELAYER_TOKEN_ADDRESS=0xCfEB869F69431e42cdB54A4F4f105C19C080A601 RELAYER_GAS_LIMIT=2000000 RELAYER_FEE=0 -MAX_NATIVE_AMOUNT_FAUCET=0 - -TREE_UPDATE_PARAMS_PATH="./params/tree_params.bin" -TX_VK_PATH="./params/transfer_verification_key.json" -STATE_DIR_PATH="./test/STATE_DIR/" +RELAYER_MAX_NATIVE_AMOUNT_FAUCET=0 -INSUFFICIENT_BALANCE_CHECK_TIMEOUT=500 -SENT_TX_DELAY=2000 -GAS_PRICE_FALLBACK= -GAS_PRICE_UPDATE_INTERVAL=100000 -GAS_PRICE_ESTIMATION_TYPE="eip1559-gas-estimation" +RELAYER_TREE_UPDATE_PARAMS_PATH="./params/tree_params.bin" +RELAYER_TX_VK_PATH="./params/transfer_verification_key.json" +RELAYER_STATE_DIR_PATH="./test/STATE_DIR/" -RELAYER_LOG_LEVEL=debug -RELAYER_REDIS_URL=127.0.0.1:6379 -RPC_URL=http://127.0.0.1:8545 +RELAYER_INSUFFICIENT_BALANCE_CHECK_TIMEOUT=500 +RELAYER_SENT_TX_DELAY=2000 +RELAYER_GAS_PRICE_FALLBACK= +RELAYER_GAS_PRICE_UPDATE_INTERVAL=100000 +RELAYER_GAS_PRICE_ESTIMATION_TYPE="eip1559-gas-estimation" diff --git a/zp-relayer/test/deploy.ts b/zp-relayer/test/deploy.ts index c496e06..7e994f1 100644 --- a/zp-relayer/test/deploy.ts +++ b/zp-relayer/test/deploy.ts @@ -23,7 +23,7 @@ async function waitForContracts() { let bytecode = '0x' do { try { - bytecode = await web3.eth.getCode('0xe982E462b094850F12AF94d21D470e21bE9D0E9C') + bytecode = await web3.eth.getCode('0x9b1f7F645351AF3631a656421eD2e40f2802E6c0') await sleep(200) } catch (e) {} } while (bytecode === '0x') diff --git a/zp-relayer/test/docker-compose.yml b/zp-relayer/test/docker-compose.yml index 1806392..0b7aa04 100644 --- a/zp-relayer/test/docker-compose.yml +++ b/zp-relayer/test/docker-compose.yml @@ -2,7 +2,7 @@ version: '3.8' services: anvil: - image: ghcr.io/foundry-rs/foundry:nightly-70f4fb55fa87e0e980f7f9fcccc5429bb1a48dbe + image: ghcr.io/foundry-rs/foundry:nightly-08d4315330b041cba67e44c65e0fc187fef54422 ports: - 8545:8545 entrypoint: > diff --git a/zp-relayer/test/flows/flow_dependent_deposits_2.json b/zp-relayer/test/flows/flow_dependent_deposits_2.json index 4028b3d..e0e3167 100644 --- a/zp-relayer/test/flows/flow_dependent_deposits_2.json +++ b/zp-relayer/test/flows/flow_dependent_deposits_2.json @@ -1 +1 @@ -[{"txType":"0003","txTypeData":{"from":"0x1df62f291b2e969fb0849d99d9ce41e2f137006e","amount":"5"},"transactionData":{"public":{"root":"11469701942666298368112882412133877458305516134926649826543144744382391691533","nullifier":"1376360567980989642050467459235668075158663899912608069021919267613973712415","out_commit":"13867655713381014276654768015091945139177749640194311147059941276016728459002","delta":"5","memo":"6556708315140188162938514751273792518958919471652765469280223816676763713853"},"secret":{"tx":{"input":[{"d":"0","p_d":"16168109197448810159900485336006847503831674085783953878679473053958964499021","i":"0","b":"0","e":"0"},[{"d":"1137672637056074796968635","p_d":"11878058939442494686181507942140719521447777403110050611897066726058202193141","b":"0","t":"1061717011528216887309096"},{"d":"715771930075654862839639","p_d":"21739734454950346541333061659543724191555157289291064206459167277019887278439","b":"0","t":"448698281781544384577941"},{"d":"983362646581288772965162","p_d":"10147645256204218146532366020321744168432299136362923404268683822648658145794","b":"0","t":"665087632427006901343727"}]],"output":[{"d":"511432890983930095008438","p_d":"15755601748006370195973835440348672548373705784424849485921452452580497131920","i":"0","b":"5","e":"0"},[{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"}]]},"in_proof":[{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},[{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]}]],"eddsa_s":"949885788697233336264793766557350223633523500306868553091813387220514710652","eddsa_r":"2409576019850131844155224435837672765746902954306315315153193404778109103914","eddsa_a":"17648086045609352049249615945248128101954805841269211445806056047142451514809"},"ciphertext":"01000000747b72358d2ea271cf0d8072c05681dc27cbeafc7bf8c0db915459b0b68db61055ecbb18c397267a4960288546c8557040cd09469b817604083e45507cddb30fe7d2e7d1903a610a161f7c7f56eb2be483da5ee5360468aec3e040a82b8700fdebe35157308969418fda5fc9e8ae1080a310a0fd9666fa624c23bde3ece1611445e821489ef0df0e881053b2e3ad7a2a0b2fa4e5c946a16581b42010ab521940dc222e50e5afa1e8ff420fdbc8fd70040353c4a43a393c524a302ffcef058ac2921a0a3a20cb","memo":"000000000000000000000000764abce81df62f291b2e969fb0849d99d9ce41e2f137006e01000000747b72358d2ea271cf0d8072c05681dc27cbeafc7bf8c0db915459b0b68db61055ecbb18c397267a4960288546c8557040cd09469b817604083e45507cddb30fe7d2e7d1903a610a161f7c7f56eb2be483da5ee5360468aec3e040a82b8700fdebe35157308969418fda5fc9e8ae1080a310a0fd9666fa624c23bde3ece1611445e821489ef0df0e881053b2e3ad7a2a0b2fa4e5c946a16581b42010ab521940dc222e50e5afa1e8ff420fdbc8fd70040353c4a43a393c524a302ffcef058ac2921a0a3a20cb","commitment_root":"13867655713381014276654768015091945139177749640194311147059941276016728459002","out_hashes":["7559549814638830761298096008383928754550374388917727353646758079562956045172","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461"],"parsed_delta":{"v":5,"e":0,"index":0}},"depositSignature":"c5c248c2ec4e42053b5a724d13192cbf1535e1dc550276a7158f7e209fadeeffc08b49449471e31e913ee31b81e1fe2555ca495f9c99b49e1bbbb6f1bb4d360c","deadline":"1984609512","proof":{"inputs":["11469701942666298368112882412133877458305516134926649826543144744382391691533","1376360567980989642050467459235668075158663899912608069021919267613973712415","13867655713381014276654768015091945139177749640194311147059941276016728459002","5","6556708315140188162938514751273792518958919471652765469280223816676763713853"],"proof":{"a":["20262051287335050766076049158051411320430212303303149434984097832919982322590","15708298606032867202340351252628423739813622949505537184082443326060704247964"],"b":[["9955480362367764687623854273669766214561516446941394224398503314433779576174","252392945853580198895868989645422091123558739610198245126070784251056719409"],["18640184951784287141674244317942413734428997428617817231533883764676242220354","282574334777613414567658178209984652966271297778914900082428252020227503915"]],"c":["6157893475598287216852321216447787225549401627706838533434596682222166663737","19853816952730518387975221246882502577093249633639750324038558257429763397250"]}}},{"txType":"0003","txTypeData":{"from":"0x1df62f291b2e969fb0849d99d9ce41e2f137006e","amount":"5"},"transactionData":{"public":{"root":"6122683495905748109448994617198178513613543159545648821997701168777062221514","nullifier":"1341885881370354741768253276053478883063555166264990034570142851045584707733","out_commit":"15834514946512831270231733243843997289851947007578946515679173001834294837997","delta":"12259964326927110866866776217202473468949912977468817413","memo":"12867813331910330892259049235589291431780338613651053731984409795394929024966"},"secret":{"tx":{"input":[{"d":"511432890983930095008438","p_d":"15755601748006370195973835440348672548373705784424849485921452452580497131920","i":"0","b":"5","e":"0"},[{"d":"964295999852777991862364","p_d":"7710185341289232146053297425672332460893364792257206996271412047161999554489","b":"0","t":"479338117725599896307122"},{"d":"1148362057517609729473617","p_d":"3311886505389087786334262506522760067143653291442420875870528115230496499977","b":"0","t":"1028225670515466690495814"},{"d":"1170920421922262655574586","p_d":"18556522064745676372250293519049210989736836609066044318026982521539035366628","b":"0","t":"418760638357287622655210"}]],"output":[{"d":"906607651681326085421433","p_d":"14257394338706293059789471167668206462913991976653723049337371245174486788014","i":"0","b":"10","e":"640"},[{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"}]]},"in_proof":[{"sibling":["6634257576132171181853636486652267162938250203364881974499045611385650496461","522535841805272509785471739560670907901803100379533916522366862439656660706","5531505720112419174552011511368466606524449052754036195330113153613535104476","11329107969209561607639978749821791505989823914753522080153457697297357471572","15352658802967173102705828119067422100499283382786583167468164930410196407148","693915472917531005300210909571774949875959308914908899247619510229153605991","15141150100053359483136089782360938554673261981069224805995527807509579907339","14714135131729000159871566580913366989973155681884951701205677304798723517153","7627219359786202965428762367979749348660074284384916423168422862902932424831","14551312803999726205102199121216044114178321255077732763187534410264273264477","8133200400714649277420943314430065689284296998442846431340458388300981773202","19757957384704703741994568750351615325340927095380651395218576901111994341312","5901787700375591888593349058351005758829733721889580801499958432339125722117","19610513091507606056305032357502140527607412933509798884555991018234020735550","9192158814814940467737597506351631595487805610002096082411402141191271289034","15148195026354169755004685112465574914097093714834468264388454016674751742404","19002444695496836611838706233351326378861769708403674372155042415140128768451","6763631975639579682217345019407739076344940280496238910656270074535663824550","12341717392944213854008315273751832217218539945524045851434723385845462156644","11188058538255209925140405088005030946576268598716710282220993109667689740819","8767206592009162685638605323931886632571407359842734160297858458232122701697","14806656623031055020403556767950405732280024630750601286800590772051854555577","1449745595536323767029826772218393750182843022155053540570887685758005275362","14765222336817644649711564851747393428952536408520879107108664314912194196332","18982658160224083592721682006811348397029735258325914857425249164605527855495","967440321479665771456770493134553793860406789235076340454890138689092398743","8572241015560852043038102363298212135872617918466794947737128919860989647576","12321040915162805881434398012323625623795260302839411951191547398563350127146","1298406847154241449159894232700436562945625671911038094089134903076476940734","13431717271286002143863064443149123073867305935730567069074323632094779906762","18685561605392691989953390877556007261171303533861983942569541094114673599076","13636738154803958676121594462998156260460565875177602873233203829261160109659","11140924918219198527253893695586727689118341082504963503885178419412738437285","8474943624663153781162388714410508382201175186669451645994959916456656701311","9309089957223635716291637648453776901031309116565418783465358778831489149051","4103099250878752973100498917988600567004154521200948180433869120256331253914","11160939302949194840812207983448709967740913175948942656104962328204560247908","14248462656890584285977708924431681107857584429784533132203700239154068075366","7195074526527890157871299180569895776266215514996373018130241622113485556177","4943263310141200676717673361235064531985540932726984279532900193640862300203","5627339774594137179528094994483896875762556850864443691412042157668983586635","2498416842977474257592472050316460590153865371699452127457309775442710367806","1550870853608757868458620218775305036473988111799553999977217107059043115199","13482439215704946735601313042140305736621462345162903440313509330875135734460","15182649948730062375321737692408817980506635025074846398909015256770821463532","1247690880441109659214778745323800445655802148600726437291573229536109714198","5341871252039295346907887643036618265097925372949238666377398522613804820550","21459734131189367378477890969465280901558661138826956196178023231247877916395"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},[{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]}]],"eddsa_s":"327816284313716592666292179116008597344964606926637045576033789228544559848","eddsa_r":"15121495112933232877381025088374356675640292011399430635775773821357690751196","eddsa_a":"17648086045609352049249615945248128101954805841269211445806056047142451514809"},"ciphertext":"01000000490aa8171fed6d2274601ebcdea1788b555bb531ed8ff8b29a995379c7343c0ef2a84e3ba249b9017b4d78f5f14c7bda77e5bb2af8659afb7473269291ac6c15b6e314573b50cdb5e654c641341023d5964d321cf2d3eef47c61431ae8565e38bc5e6d70246b701c2fca9a11431c47315def76ff4c53fb08ade0e816c497fd3aa927bc4651f9ed3da1c2938fb440ddeb508128a7202cafb7b9726978f840acb4bcfc71b5faf9a581ca7cb0bbc453b29afd1fdd0fcd1698953104efed5db3a96c02eae4b77df1","memo":"000000000000000000000000764abce81df62f291b2e969fb0849d99d9ce41e2f137006e01000000490aa8171fed6d2274601ebcdea1788b555bb531ed8ff8b29a995379c7343c0ef2a84e3ba249b9017b4d78f5f14c7bda77e5bb2af8659afb7473269291ac6c15b6e314573b50cdb5e654c641341023d5964d321cf2d3eef47c61431ae8565e38bc5e6d70246b701c2fca9a11431c47315def76ff4c53fb08ade0e816c497fd3aa927bc4651f9ed3da1c2938fb440ddeb508128a7202cafb7b9726978f840acb4bcfc71b5faf9a581ca7cb0bbc453b29afd1fdd0fcd1698953104efed5db3a96c02eae4b77df1","commitment_root":"15834514946512831270231733243843997289851947007578946515679173001834294837997","out_hashes":["6438754972669030713338430160212913447085129672199334406335478030365039790665","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461"],"parsed_delta":{"v":5,"e":0,"index":128}},"depositSignature":"580861c76e69dd8c298b115ebb5c325248fb33fa03adaae855a31aac83f9cc26dcfe584de794c62c6ba7869f62e9c8d4cea502f9359ff869b881a87de456f287","deadline":"1984609512","proof":{"inputs":["6122683495905748109448994617198178513613543159545648821997701168777062221514","1341885881370354741768253276053478883063555166264990034570142851045584707733","15834514946512831270231733243843997289851947007578946515679173001834294837997","12259964326927110866866776217202473468949912977468817413","12867813331910330892259049235589291431780338613651053731984409795394929024966"],"proof":{"a":["14910999927618120387629696240369824351815259767286745083861228379517807573476","12989809563888129296521035351189019226450033247562124380567718701303321035540"],"b":[["11653647755673065297626536146568579092237952963664450044333360978677935506276","11070861046791091926593841312586147060728611452648535543042174970410769833556"],["18123312808920371021217240536151710960237574288033432249660781459179275028166","14841425047889816221427132492025204934464423848010508802974706134522438208344"]],"c":["10986529246074577233132533496575740665655819521592960520418383424246726612994","6982548579837390531282365723321749012725360023184266185302962168968810908879"]}}}] \ No newline at end of file +[{"txType":"0003","txTypeData":{"from":"0x1df62f291b2e969fb0849d99d9ce41e2f137006e","amount":"5"},"transactionData":{"public":{"root":"11469701942666298368112882412133877458305516134926649826543144744382391691533","nullifier":"7100289288803007540933246076011793129432590516598215033026451083858617059881","out_commit":"13709849224013202398179863885325305291947237868865066610500367773444424422445","delta":"5","memo":"3019540893033656368252226195743823336744419665074715931850799983410435286297"},"secret":{"tx":{"input":[{"d":"0","p_d":"19200709690753561892473450196417126125557212739868761897688925534500765258022","i":"0","b":"0","e":"0"},[{"d":"571109723510219327479494","p_d":"6562373385401255691344777715303629123302233801131463033630204973242644782411","b":"0","t":"146984916244436528281299"},{"d":"563769380132597107203431","p_d":"11300412546730985720589548502211679198482132885360975731977671583589837168854","b":"0","t":"447667344508427865770199"},{"d":"1094540307345053595260172","p_d":"9738334362488224722045282042915791361040443185156803949251019796080750406320","b":"0","t":"1090804495720488271956755"}]],"output":[{"d":"558559035350564080661183","p_d":"10559589406451028889836313995164359513123204029431046504701488799818234005691","i":"0","b":"5","e":"0"},[{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"}]]},"in_proof":[{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},[{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]}]],"eddsa_s":"1276777536438155975189968493008031712071425989904641229365201312569140945060","eddsa_r":"21599563589145743077739497545445828077966374792810360792123626906880824046709","eddsa_a":"19604573558214678718020339364465568678705829722688282650020750688182282150916"},"ciphertext":"01000000db03b5563ce0ac8f79d51d5f1e9b97145ba5a6306c188788c7a5e0076c81fc11e1e3706a5699f1fcee7045fe39860e17528ca2305fe17cced6d1f01569a9c51ad0df056da1ed10178fdebe71441351ac842c12425a72d820cbf848656b1bd162278a10db5c8f85586fe78833dbfe88d62a41a03e7ce3a1b29ac6bd9e0aa1e72982774dd927337f21d6180e6cd7437f7ede1ea635ca8a2a5e99f355619b03f672da512b870c703124101ecd11734d0630267becc7c797498652c57358e0c8f155b326cac8f33e","memo":"00000000000000000000000076c306ad1df62f291b2e969fb0849d99d9ce41e2f137006e01000000db03b5563ce0ac8f79d51d5f1e9b97145ba5a6306c188788c7a5e0076c81fc11e1e3706a5699f1fcee7045fe39860e17528ca2305fe17cced6d1f01569a9c51ad0df056da1ed10178fdebe71441351ac842c12425a72d820cbf848656b1bd162278a10db5c8f85586fe78833dbfe88d62a41a03e7ce3a1b29ac6bd9e0aa1e72982774dd927337f21d6180e6cd7437f7ede1ea635ca8a2a5e99f355619b03f672da512b870c703124101ecd11734d0630267becc7c797498652c57358e0c8f155b326cac8f33e","commitment_root":"13709849224013202398179863885325305291947237868865066610500367773444424422445","out_hashes":["8135457124022258182557264387191515447407403519080807165307115426238199825371","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461"],"parsed_delta":{"v":5,"e":0,"index":0}},"depositSignature":"51a9e3cf35efad80c636dfd6b85ef9d72980f44ff4117baff7ec0513d3b6e7f39b7689e090b72a0e8851237cad0426d25ebbb51d545ee43e13836a005e2ca8f9","deadline":"1992492717","proof":{"inputs":["11469701942666298368112882412133877458305516134926649826543144744382391691533","7100289288803007540933246076011793129432590516598215033026451083858617059881","13709849224013202398179863885325305291947237868865066610500367773444424422445","5","3019540893033656368252226195743823336744419665074715931850799983410435286297"],"proof":{"a":["4060877701105477769665621173760413781034595564010647569118851032346384377971","4342419877641713546068832428322849477954821644653084999900049147223602227714"],"b":[["2640016829771381303129007804398215937805022486242772292435872014149648210331","18241571465398621782132735713290101537777659209207989030486199169318460254946"],["8133934551379697953430540110870910745079008724853550718329993600517073250967","10058713538263628229224347041604959961552304845658356987062950097503134446965"]],"c":["3517695754113959959265433688093561382664287715379266195549559582067145273655","13294518669455255698873953109852919177102041017680400830881056265568639864874"]}}},{"txType":"0003","txTypeData":{"from":"0x1df62f291b2e969fb0849d99d9ce41e2f137006e","amount":"5"},"transactionData":{"public":{"root":"2700491576686257782828878040280602565545183121090288882042621175171621148398","nullifier":"7463952182389360447484109294135181300070667362063572619560027202465390787727","out_commit":"19895091448714016830072757118958023378075777443405600452097314602229839504592","delta":"12259964326927110866866776217202473468949912977468817413","memo":"15875616793931120888852869806078388344801579362336009201224793024458402589310"},"secret":{"tx":{"input":[{"d":"558559035350564080661183","p_d":"10559589406451028889836313995164359513123204029431046504701488799818234005691","i":"0","b":"5","e":"0"},[{"d":"141967341028945314341355","p_d":"12825170971093859527967549313445437666147732450512574195367846786387501565500","b":"0","t":"1167285137633890273879769"},{"d":"1095014462534689652175265","p_d":"5468675478261627549585063175713398063596904589769099475810889346128769565432","b":"0","t":"156715373746097414013767"},{"d":"218884870995284619206386","p_d":"6496522458240732789352901438747562038936129606329091635247751687311735940528","b":"0","t":"299843769163607284579794"}]],"output":[{"d":"1191657428598162470669241","p_d":"16453428364434057825161185257374345047048713850479801819454056537428991996757","i":"0","b":"10","e":"640"},[{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"}]]},"in_proof":[{"sibling":["6634257576132171181853636486652267162938250203364881974499045611385650496461","522535841805272509785471739560670907901803100379533916522366862439656660706","5531505720112419174552011511368466606524449052754036195330113153613535104476","11329107969209561607639978749821791505989823914753522080153457697297357471572","15352658802967173102705828119067422100499283382786583167468164930410196407148","693915472917531005300210909571774949875959308914908899247619510229153605991","15141150100053359483136089782360938554673261981069224805995527807509579907339","14714135131729000159871566580913366989973155681884951701205677304798723517153","7627219359786202965428762367979749348660074284384916423168422862902932424831","14551312803999726205102199121216044114178321255077732763187534410264273264477","8133200400714649277420943314430065689284296998442846431340458388300981773202","19757957384704703741994568750351615325340927095380651395218576901111994341312","5901787700375591888593349058351005758829733721889580801499958432339125722117","19610513091507606056305032357502140527607412933509798884555991018234020735550","9192158814814940467737597506351631595487805610002096082411402141191271289034","15148195026354169755004685112465574914097093714834468264388454016674751742404","19002444695496836611838706233351326378861769708403674372155042415140128768451","6763631975639579682217345019407739076344940280496238910656270074535663824550","12341717392944213854008315273751832217218539945524045851434723385845462156644","11188058538255209925140405088005030946576268598716710282220993109667689740819","8767206592009162685638605323931886632571407359842734160297858458232122701697","14806656623031055020403556767950405732280024630750601286800590772051854555577","1449745595536323767029826772218393750182843022155053540570887685758005275362","14765222336817644649711564851747393428952536408520879107108664314912194196332","18982658160224083592721682006811348397029735258325914857425249164605527855495","967440321479665771456770493134553793860406789235076340454890138689092398743","8572241015560852043038102363298212135872617918466794947737128919860989647576","12321040915162805881434398012323625623795260302839411951191547398563350127146","1298406847154241449159894232700436562945625671911038094089134903076476940734","13431717271286002143863064443149123073867305935730567069074323632094779906762","18685561605392691989953390877556007261171303533861983942569541094114673599076","13636738154803958676121594462998156260460565875177602873233203829261160109659","11140924918219198527253893695586727689118341082504963503885178419412738437285","8474943624663153781162388714410508382201175186669451645994959916456656701311","9309089957223635716291637648453776901031309116565418783465358778831489149051","4103099250878752973100498917988600567004154521200948180433869120256331253914","11160939302949194840812207983448709967740913175948942656104962328204560247908","14248462656890584285977708924431681107857584429784533132203700239154068075366","7195074526527890157871299180569895776266215514996373018130241622113485556177","4943263310141200676717673361235064531985540932726984279532900193640862300203","5627339774594137179528094994483896875762556850864443691412042157668983586635","2498416842977474257592472050316460590153865371699452127457309775442710367806","1550870853608757868458620218775305036473988111799553999977217107059043115199","13482439215704946735601313042140305736621462345162903440313509330875135734460","15182649948730062375321737692408817980506635025074846398909015256770821463532","1247690880441109659214778745323800445655802148600726437291573229536109714198","5341871252039295346907887643036618265097925372949238666377398522613804820550","21459734131189367378477890969465280901558661138826956196178023231247877916395"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},[{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]}]],"eddsa_s":"1148180119359792699684385667229028983399508312999974972032406390438846433544","eddsa_r":"6918783322070175971182131356139759066392290894634956382363153186896904880796","eddsa_a":"19604573558214678718020339364465568678705829722688282650020750688182282150916"},"ciphertext":"010000005c746b4ba63014b6db5f4ecb553b832bb11b6d8dce7d5954bcc9e0d12276a626663f970d7739c7fd3baa89b1316496f7571cb00ea02e8766f1c25613ed2f1114e10e20ccf0fad8df9f82367250f0bc87d18c9daa7cdbe3ee4734959df7479150c0e05dca95cf00fdab28eafef1892ad886b41d974ea6a52b97868a330b00cb4452be19c2a1e057d72653b6dc5c7668e6b6b2bc0dead3f06f325efe5e6b9963053918d8422d87439df0032c3b0fb87f71c11f3667a09f4fb37d16fa79a1ab06d2e73758584b3b","memo":"00000000000000000000000076c306ad1df62f291b2e969fb0849d99d9ce41e2f137006e010000005c746b4ba63014b6db5f4ecb553b832bb11b6d8dce7d5954bcc9e0d12276a626663f970d7739c7fd3baa89b1316496f7571cb00ea02e8766f1c25613ed2f1114e10e20ccf0fad8df9f82367250f0bc87d18c9daa7cdbe3ee4734959df7479150c0e05dca95cf00fdab28eafef1892ad886b41d974ea6a52b97868a330b00cb4452be19c2a1e057d72653b6dc5c7668e6b6b2bc0dead3f06f325efe5e6b9963053918d8422d87439df0032c3b0fb87f71c11f3667a09f4fb37d16fa79a1ab06d2e73758584b3b","commitment_root":"19895091448714016830072757118958023378075777443405600452097314602229839504592","out_hashes":["17482000203727183917194523243486564942587220819102531631035846470582410114140","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461"],"parsed_delta":{"v":5,"e":0,"index":128}},"depositSignature":"cec85ad9995a75d3f39d927b02be05be355069bd0dedde4eed266a742957bf483548a987ee33b178e60ed0ab3e07fce6ddfd71c2104f2c272c4db65ef0162c2d","deadline":"1992492717","proof":{"inputs":["2700491576686257782828878040280602565545183121090288882042621175171621148398","7463952182389360447484109294135181300070667362063572619560027202465390787727","19895091448714016830072757118958023378075777443405600452097314602229839504592","12259964326927110866866776217202473468949912977468817413","15875616793931120888852869806078388344801579362336009201224793024458402589310"],"proof":{"a":["2723482859269868356543214400052451887991675335649241634843290441668823633852","10041970769446778427671957305256563808952279709994167067564444590784407066573"],"b":[["5961836826525789520483327639197833369190367916307894521955702551571194298216","19446935266390385713255347594814168219270628899311047856969022817318709443413"],["8399390372243009698792655290642440116173235355626418677187339296804328510932","14686709686756771917418160977681171763757222184268848335192067642565995961797"]],"c":["1064216519698851878992032756218363344046294712195104059421172073171355284688","4925612376069387379743819746929363174127477643624051131222651812082006300563"]}}}] \ No newline at end of file diff --git a/zp-relayer/test/flows/flow_independent_deposits_5.json b/zp-relayer/test/flows/flow_independent_deposits_5.json index 87133f0..952ca4d 100644 --- a/zp-relayer/test/flows/flow_independent_deposits_5.json +++ b/zp-relayer/test/flows/flow_independent_deposits_5.json @@ -1 +1 @@ -[{"txType":"0003","txTypeData":{"from":"0x1df62f291b2e969fb0849d99d9ce41e2f137006e","amount":"5"},"transactionData":{"public":{"root":"11469701942666298368112882412133877458305516134926649826543144744382391691533","nullifier":"16142007376205249617950322847510875012147302836277203721895173500713964952531","out_commit":"447089824058814919270571350005775959014251914220559836329746611044227187149","delta":"5","memo":"1286647643304908147879611035885256400701425474847507109023522440711741321740"},"secret":{"tx":{"input":[{"d":"0","p_d":"5922671164386425939331920763061821860404848401323538647771898108358497054795","i":"0","b":"0","e":"0"},[{"d":"536853095880037482313677","p_d":"1802649670985647028998234449815125037228349169966674287979283154767099438005","b":"0","t":"831266033709522040404466"},{"d":"475204547662768244850378","p_d":"21594692935872399323591251663595825000516808777968499865489922350528378110791","b":"0","t":"678072072767637590264002"},{"d":"143041278458927808525371","p_d":"12350602728988829558621671465123449638335165364131766001241033280852275012444","b":"0","t":"810360822280925116627342"}]],"output":[{"d":"1182118365714098824885985","p_d":"18533982787746933499454212530198462124081449599034729256909235309103532810183","i":"0","b":"5","e":"0"},[{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"}]]},"in_proof":[{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},[{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]}]],"eddsa_s":"1340160588005176295611968409150742963228363844791902495848825557261352556791","eddsa_r":"12707425438283330051089396669490276406652316111678302761829156591104377762825","eddsa_a":"11945205235703370290439930725504638231453004583171711394151836855006285040733"},"ciphertext":"01000000b3297748c5d8211aa26a0374d84d094127efda5ae03aabca82f0457f2f735f089a2ac08dbff8b19930e33444085f0f4990bfc0b7ed510a64008ece862d5e1d08db4f850df2bc451214312787d25127fa2541b5e24a8197222c17a760099fe50cf0ca571a5c9d0bdfba8cd35e19be5eb029ca71f70fc70884041475626a218c6cbb459c6f043f2ddde39e28a7fbdbf92476f995852f4a31400dd4551b07d28ae9fcb136a1b200d61d0187310016ae1d3cb282aa1d84b3c7e83b072bb79493234a140d65e4876a","memo":"000000000000000000000000764abd001df62f291b2e969fb0849d99d9ce41e2f137006e01000000b3297748c5d8211aa26a0374d84d094127efda5ae03aabca82f0457f2f735f089a2ac08dbff8b19930e33444085f0f4990bfc0b7ed510a64008ece862d5e1d08db4f850df2bc451214312787d25127fa2541b5e24a8197222c17a760099fe50cf0ca571a5c9d0bdfba8cd35e19be5eb029ca71f70fc70884041475626a218c6cbb459c6f043f2ddde39e28a7fbdbf92476f995852f4a31400dd4551b07d28ae9fcb136a1b200d61d0187310016ae1d3cb282aa1d84b3c7e83b072bb79493234a140d65e4876a","commitment_root":"447089824058814919270571350005775959014251914220559836329746611044227187149","out_hashes":["3787148241170884370856459325606263824825906580688034198059154600576069085619","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461"],"parsed_delta":{"v":5,"e":0,"index":0}},"depositSignature":"665fe0b9623f37bc9511d0bbabdd77bc3a2c97d6c5ac6860b96d6032d88c874d13981b579f9d837141683ed35119ca24f5151c974caa0183e6a9fbc626f1a3a8","deadline":"1984609536","proof":{"inputs":["11469701942666298368112882412133877458305516134926649826543144744382391691533","16142007376205249617950322847510875012147302836277203721895173500713964952531","447089824058814919270571350005775959014251914220559836329746611044227187149","5","1286647643304908147879611035885256400701425474847507109023522440711741321740"],"proof":{"a":["16108357056537821892802963952358736137542219274609068580950739911193962905737","15599792799347635389417286502291683968066907222908775707851325039945071688963"],"b":[["9302504108122463270732649903826036076975506837220984030355846315335706149146","9862791908006365484764685853822837097907865471971690847172104841296091848510"],["8898240348534295001107687531262404950662524522476720106274899185399258887660","15593706180972519248040919741163442133552193076236148483813152036514021335798"]],"c":["18924120635899809631019201998229573388112664425869976112337017490307715328454","9109100600202975830470402453216937640726269310546917455084960153435186694965"]}}},{"txType":"0003","txTypeData":{"from":"0x1df62f291b2e969fb0849d99d9ce41e2f137006e","amount":"5"},"transactionData":{"public":{"root":"11469701942666298368112882412133877458305516134926649826543144744382391691533","nullifier":"16775304615746923800690213892480216933695080466418101468361070363247784699432","out_commit":"3858346963152039681977491267469379641505875167913648748533110743791367646974","delta":"5","memo":"16717753297271834657881946445852671766797245682849547540734184749013252873916"},"secret":{"tx":{"input":[{"d":"0","p_d":"9512678849871690894379601682266065696736383172361397606828091275527543522903","i":"0","b":"0","e":"0"},[{"d":"944734314926707893874251","p_d":"1377082198282531486986519102027045653825757711614794495737476729494402115179","b":"0","t":"990833114835293203873276"},{"d":"688731109461391274850666","p_d":"1860293525554703857899770743201312794373182350106548410372336864604582992006","b":"0","t":"840111452689751812665203"},{"d":"973175649450531176551630","p_d":"8758795400376929697687357460876203687943368914780276182157051961611715640956","b":"0","t":"660229493587273419336850"}]],"output":[{"d":"597110229717081610220925","p_d":"14637655028518514348510450044923611010908030617339605324426761555780549071627","i":"0","b":"5","e":"0"},[{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"}]]},"in_proof":[{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},[{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]}]],"eddsa_s":"74353027777785488671071442999317821960049044790963793464587863441077245339","eddsa_r":"4420215801451911147869032650046381139020213980094363152851622094024213324859","eddsa_a":"15087899104617919765208086898738714146173755046901060943836977805552466694313"},"ciphertext":"01000000b1462af4958007e006ab9952ab9626d61c03bc40d809d7c515fed4b759c372063cd7a593c0a73afa55b3809b7c5bd5519a2e99a621c3313db251744de2abf024f3821582c51f610a946e900fe66ab57e17da6b2802841bd20deb89715a113919276ea2a19513b03df351469af9c7478d224f65a2f251b368b534c79cda32aa94d49fec28c1de363d58313d887322c68ce42b65f1383d00cd5c92f178afb089a501df53edc27319d84d222cafbc64a9b0f881f2e9ab1f326bd8b9085300175ea6a2288ffe1abd","memo":"000000000000000000000000764abd001df62f291b2e969fb0849d99d9ce41e2f137006e01000000b1462af4958007e006ab9952ab9626d61c03bc40d809d7c515fed4b759c372063cd7a593c0a73afa55b3809b7c5bd5519a2e99a621c3313db251744de2abf024f3821582c51f610a946e900fe66ab57e17da6b2802841bd20deb89715a113919276ea2a19513b03df351469af9c7478d224f65a2f251b368b534c79cda32aa94d49fec28c1de363d58313d887322c68ce42b65f1383d00cd5c92f178afb089a501df53edc27319d84d222cafbc64a9b0f881f2e9ab1f326bd8b9085300175ea6a2288ffe1abd","commitment_root":"3858346963152039681977491267469379641505875167913648748533110743791367646974","out_hashes":["2916645916216981095975322228580159805070490284707169262841985785756551628465","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461"],"parsed_delta":{"v":5,"e":0,"index":0}},"depositSignature":"ba1bf90ab1401aa0e3986c470192091828608e8f9d163f23349470f79b61b7576d541063723972aa01e3201c17b11172f8e9f84ad1c99ffc96f75ad8c37c4121","deadline":"1984609536","proof":{"inputs":["11469701942666298368112882412133877458305516134926649826543144744382391691533","16775304615746923800690213892480216933695080466418101468361070363247784699432","3858346963152039681977491267469379641505875167913648748533110743791367646974","5","16717753297271834657881946445852671766797245682849547540734184749013252873916"],"proof":{"a":["7305539032363620893031088927486245101427039134284536138070220912723319228298","8000147168348861658842845757742660155093959633020314104253911821158887356218"],"b":[["5177719823237263262263976022475563027591739589981104329057403329792437075989","18452482612900802814082937453431068756201125585400877350961335289862254743480"],["2264562534263621137324563432247155249313326796779792018020611766957746364137","1126718834483818845606764092094084594535386317156991366160920133622974507144"]],"c":["1759522243381414716132502781696390528111723682887863575715242551979833231596","8683741901830440543532300020614320519346010291286601275276808928654126035470"]}}},{"txType":"0003","txTypeData":{"from":"0x1df62f291b2e969fb0849d99d9ce41e2f137006e","amount":"5"},"transactionData":{"public":{"root":"11469701942666298368112882412133877458305516134926649826543144744382391691533","nullifier":"14233119260714359540001841436653181254418850148832129374256803521418620993955","out_commit":"17352735390165733104586634040574013550345535802376655384386112954788687448278","delta":"5","memo":"1741229593660215272746749488810646278001549622208611825731143978351286764342"},"secret":{"tx":{"input":[{"d":"0","p_d":"2547642463672204937059167864810612518010942777427281615091233072758693053203","i":"0","b":"0","e":"0"},[{"d":"219113853350977713385156","p_d":"8926204722490091168448008507126708083464005222647134022819172744511874341569","b":"0","t":"526174840207996035506573"},{"d":"973488132261062711135872","p_d":"18214327631748773995868280825087644052733640207618849947932134161812978058030","b":"0","t":"226312088833252448082110"},{"d":"266613749831021790894793","p_d":"7856679097999269715217820807372404006123660474803622769681221743111658822914","b":"0","t":"1088373622045921781824598"}]],"output":[{"d":"993995905582950512695141","p_d":"5231206298600064585410649983719101026052385284569932516851889051844164825272","i":"0","b":"5","e":"0"},[{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"}]]},"in_proof":[{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},[{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]}]],"eddsa_s":"2422422954022106834404226630777405457012801326101807611620349830984274176294","eddsa_r":"3987641457171262111471821261237894311832349631785963977111409343864673955018","eddsa_a":"12534821761328325003620977806950411197677085440720841691385305257737935557525"},"ciphertext":"01000000da0effe47dfd5f62d710b06b0d590e0777873c040422ef688ab1d59eb5d73401e08625ab0a88cb18a86eaf84f20c3f668628eeb98f4ade73a27d807cf3aa2c1905f832e96d228df05cf905b4ed052486efd797b8f8e85122743c56e602d06d66ab8fbfc4c5a2c73b8cf86564e26a4879a24558e5806070f503b5096b21f18f9277d6fdb0628495dd1dd2b26a3e0fe6b983df8cea76852a37359daa6f75a80122335eaad36a29fb0ba1823cc098e378aaa15fee1529df723ab2959d86bd98190a8a156fe497e2","memo":"000000000000000000000000764abd001df62f291b2e969fb0849d99d9ce41e2f137006e01000000da0effe47dfd5f62d710b06b0d590e0777873c040422ef688ab1d59eb5d73401e08625ab0a88cb18a86eaf84f20c3f668628eeb98f4ade73a27d807cf3aa2c1905f832e96d228df05cf905b4ed052486efd797b8f8e85122743c56e602d06d66ab8fbfc4c5a2c73b8cf86564e26a4879a24558e5806070f503b5096b21f18f9277d6fdb0628495dd1dd2b26a3e0fe6b983df8cea76852a37359daa6f75a80122335eaad36a29fb0ba1823cc098e378aaa15fee1529df723ab2959d86bd98190a8a156fe497e2","commitment_root":"17352735390165733104586634040574013550345535802376655384386112954788687448278","out_hashes":["545677667893899597147996941048422994610103686822572528488484916004604808922","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461"],"parsed_delta":{"v":5,"e":0,"index":0}},"depositSignature":"438d8e0d542e7d4a1b4a04489ecdc061c4a2a7fb9bb2cf37b68f37ab1f9791447ffcd05cda7eadd0cedd654ad60740d37669cd30c847cb177d09de887ff4479b","deadline":"1984609536","proof":{"inputs":["11469701942666298368112882412133877458305516134926649826543144744382391691533","14233119260714359540001841436653181254418850148832129374256803521418620993955","17352735390165733104586634040574013550345535802376655384386112954788687448278","5","1741229593660215272746749488810646278001549622208611825731143978351286764342"],"proof":{"a":["8151334403823207644185615955622988251796450793021209811604987031084586172965","15340115195011062966209617692085787637073209368870126671222503929476638812846"],"b":[["10717232020186716690328155974908193023428914180447184825455498147924742778021","5626917866019642808383589164751822238206754049402469711527215763506289521318"],["7573769847630286337478914422679201687747493620886279739661142234435455480943","7925203885857022371968638297519523613792045982281982061274777998610034048838"]],"c":["13415116801156693916653585828568542906851459338923816836529603651855653582398","7880422033208294166021689225792326779709994507968694564567293374973463481242"]}}},{"txType":"0003","txTypeData":{"from":"0x1df62f291b2e969fb0849d99d9ce41e2f137006e","amount":"5"},"transactionData":{"public":{"root":"11469701942666298368112882412133877458305516134926649826543144744382391691533","nullifier":"6803981302583146346836364535172245385016417126779491309454997314832834968753","out_commit":"17457948064771343768169495844479358219258377636019715183313248269098894368937","delta":"5","memo":"875623041794538444193197638539235627853569046886754537896716740952237924035"},"secret":{"tx":{"input":[{"d":"0","p_d":"14889278483812473367381934844341911263592532860002711880316432122054225174398","i":"0","b":"0","e":"0"},[{"d":"473319087312751393015848","p_d":"15203159462748196234904725895387664124021952397700442821989781144018975980262","b":"0","t":"566853691340244875395355"},{"d":"257814150521622006191514","p_d":"5119654997974000103846555782185243629477045439535056236753137656245874126828","b":"0","t":"305183579576323414325535"},{"d":"278100216997655618746894","p_d":"19383041731748030226518563883386334830695211586705372130924985905773554279192","b":"0","t":"673788764082230295395146"}]],"output":[{"d":"95249683419181680590836","p_d":"19386990083493166478696924174458816815657224904552827956441128982592654743407","i":"0","b":"5","e":"0"},[{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"}]]},"in_proof":[{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},[{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]}]],"eddsa_s":"1806383450447712220895134655336503481091149501764470612430878489166927384036","eddsa_r":"11814058932548453290446228425715689669066668160236783980205648333442945188170","eddsa_a":"12894930030023534040932827777426873524000563197182023315329736731564124713569"},"ciphertext":"01000000ce3ff18654665e4fb3d740e73f64591e715edba850d070b3c815306c5d41ee209b850fca0e64fc479ec920cfcffef89999423ab1e1b07adf1dabf1b03a6ea0154e961d9d0ac347aa77ee3c42cc808a9fbb13099752cc3c13523209084a8932c0c3884a1c5b83f46e53508a631dbcc4ee03fa469a2488a2aa192d9261106b486c25bc315601930c98907fde3a770321443c260aa8c574b07c92f15f9020875e2beda1e6de594d2075f09b9367ff61c045dd8643c6dab1792bbf6570d87cd0167d1fbd8ae8edd6","memo":"000000000000000000000000764abd011df62f291b2e969fb0849d99d9ce41e2f137006e01000000ce3ff18654665e4fb3d740e73f64591e715edba850d070b3c815306c5d41ee209b850fca0e64fc479ec920cfcffef89999423ab1e1b07adf1dabf1b03a6ea0154e961d9d0ac347aa77ee3c42cc808a9fbb13099752cc3c13523209084a8932c0c3884a1c5b83f46e53508a631dbcc4ee03fa469a2488a2aa192d9261106b486c25bc315601930c98907fde3a770321443c260aa8c574b07c92f15f9020875e2beda1e6de594d2075f09b9367ff61c045dd8643c6dab1792bbf6570d87cd0167d1fbd8ae8edd6","commitment_root":"17457948064771343768169495844479358219258377636019715183313248269098894368937","out_hashes":["14894971888262869890454061884188484990776315486167043023184673984428614172622","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461"],"parsed_delta":{"v":5,"e":0,"index":0}},"depositSignature":"c68a74c262f138d74d61499f6b1b9afe4e0dc6779faa0c6dd08f46ffa012cde90e7343179c99c1953dc0640ef8a928317674ee8691fe0036056a9b3dbc4b44c5","deadline":"1984609537","proof":{"inputs":["11469701942666298368112882412133877458305516134926649826543144744382391691533","6803981302583146346836364535172245385016417126779491309454997314832834968753","17457948064771343768169495844479358219258377636019715183313248269098894368937","5","875623041794538444193197638539235627853569046886754537896716740952237924035"],"proof":{"a":["15831986074716661312714759695883000824569747148197951731946818627361067084690","9499049580622163161376698815866846183859603806062844959469839852314657373126"],"b":[["48306558306261208658698541163769683896900059916297278053325856372220353004","19393479372807326113561553715115524222306707417622324339817153572914927325586"],["3426754431679638115176632541323058817629494120320616777217476955579261654123","13244854982022980783075280314635900723733487316337736748324048134499287601889"]],"c":["3977332701214773694665298482902207200665469594910623373413943573999156293809","8851259723479841842503302818830531052289830853445482411962903793762177936159"]}}},{"txType":"0003","txTypeData":{"from":"0x1df62f291b2e969fb0849d99d9ce41e2f137006e","amount":"5"},"transactionData":{"public":{"root":"11469701942666298368112882412133877458305516134926649826543144744382391691533","nullifier":"1467051654337315986853206201150429441687826678194659949346346301173211854855","out_commit":"11114262113329738318552071221144694525799882003411385702975565671626189806650","delta":"5","memo":"1704620283020077560300144589802838895950402396303066171446131894901802259405"},"secret":{"tx":{"input":[{"d":"0","p_d":"16374683881069662514405946989569286539078229715829971487063480222291752522325","i":"0","b":"0","e":"0"},[{"d":"839883161259209424395075","p_d":"19704788528879817608090190555245983576012050495432784597501640428818053434485","b":"0","t":"736999132974793265278644"},{"d":"425313791490576627326901","p_d":"14690446495069763827018228510947639940031594601522505288872668446611759162765","b":"0","t":"1015815293693338036100769"},{"d":"1125291666566216619708016","p_d":"3669705293730924156220509041646995051777257107408444790218170630665019910279","b":"0","t":"1099956232630267790831407"}]],"output":[{"d":"631488810399619294531508","p_d":"3358322423137739943415912269598096041810626988568448105540000057503359913393","i":"0","b":"5","e":"0"},[{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"}]]},"in_proof":[{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},[{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]}]],"eddsa_s":"1159423202565879527057818312786731236458797746457219877458441519213482946087","eddsa_r":"16409442195032641906803601387231058971767116928839816097991029328865336276985","eddsa_a":"13399237007686222279919800650487202905095455721713963039706129781475767626248"},"ciphertext":"010000009e915c55b12942fe642d0b5adc179f8e54387a8f7984c76c75cf63ea81dd6605e82a5878541af4ba1aecb966b70f7e623b467ef40195c03767fb27fc8f215e2013fcc4e7f15b582a149dd3e06502a4e577cc55bae998157ef55422eee85a7f7ddd2cec1b799c1251d889f48346cbe6ea8dd3eaea943e09bcd5a4aaab6194f4ec9db302fc79b09c4f69a5d6ac9581326d637562db22e62af0ac960cb46d5fe073bf44c13c97f8fa47ec2e4be59e790271a5b9b3a8939faa6c0c44b14dcfd77fdc97b4914e4569","memo":"000000000000000000000000764abd011df62f291b2e969fb0849d99d9ce41e2f137006e010000009e915c55b12942fe642d0b5adc179f8e54387a8f7984c76c75cf63ea81dd6605e82a5878541af4ba1aecb966b70f7e623b467ef40195c03767fb27fc8f215e2013fcc4e7f15b582a149dd3e06502a4e577cc55bae998157ef55422eee85a7f7ddd2cec1b799c1251d889f48346cbe6ea8dd3eaea943e09bcd5a4aaab6194f4ec9db302fc79b09c4f69a5d6ac9581326d637562db22e62af0ac960cb46d5fe073bf44c13c97f8fa47ec2e4be59e790271a5b9b3a8939faa6c0c44b14dcfd77fdc97b4914e4569","commitment_root":"11114262113329738318552071221144694525799882003411385702975565671626189806650","out_hashes":["2443311431983623782013082199831976878251641931438400492880797451288657564062","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461"],"parsed_delta":{"v":5,"e":0,"index":0}},"depositSignature":"7c56bb5474e8223b43880c036f23bfc5638ce3f7ceef7da4d189772136534ab00d987988e8e1d0e20bd6584a3b32f0e77343d7c587e0a0e3833db4564874e792","deadline":"1984609537","proof":{"inputs":["11469701942666298368112882412133877458305516134926649826543144744382391691533","1467051654337315986853206201150429441687826678194659949346346301173211854855","11114262113329738318552071221144694525799882003411385702975565671626189806650","5","1704620283020077560300144589802838895950402396303066171446131894901802259405"],"proof":{"a":["5379383350681710490470008278843268774355898247373188247324361889012365295454","7248449263794447072006786381609002349339560561889341159893391526118434593710"],"b":[["7742875107034481151560486657350562981523346743239795371750500720057879205175","5902170854691040756918747798015466155447062581849941600428072690021271112100"],["1164249890764854086598906767607840450996113281776344604056685818216428964205","5055474953537104940462371636777764506354096293914402478644572072723554052770"]],"c":["3547710367127115421279969545474844659525436722514444880754791277991358345705","5091269134833652220971494791087041269586722057286549468295765162298486553291"]}}}] \ No newline at end of file +[{"txType":"0003","txTypeData":{"from":"0x1df62f291b2e969fb0849d99d9ce41e2f137006e","amount":"5"},"transactionData":{"public":{"root":"11469701942666298368112882412133877458305516134926649826543144744382391691533","nullifier":"4911923227704639823759508094112064489979154214269756310328649986669769131621","out_commit":"5083849948680892879909408067003747970365245079212851589596112091353428559039","delta":"5","memo":"1502812185439545788761615395623369888883780466898824168414585265611214434241"},"secret":{"tx":{"input":[{"d":"0","p_d":"8106968116783662918551845081030034097957058609692196089370562526226200350553","i":"0","b":"0","e":"0"},[{"d":"765543243966843278291013","p_d":"10168185484838326926501540734059059796041951467664838843685194896879534949873","b":"0","t":"447980119912775491212955"},{"d":"1033407806328246194036048","p_d":"549629580527989377261683446304129593751966888386691037932140602503135875947","b":"0","t":"204768434605219371979147"},{"d":"138992605877069995556877","p_d":"9953979893114048011848293312164576329956770041686053407154928993341962961612","b":"0","t":"416281626280822919830898"}]],"output":[{"d":"1007215301058681047174763","p_d":"1096956836138222729041811103727085664603854272551815531567742621388366125559","i":"0","b":"5","e":"0"},[{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"}]]},"in_proof":[{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},[{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]}]],"eddsa_s":"2615259625718775669235010182820826877638896053516882853844841081826754207236","eddsa_r":"7230612211602571775169790187756893972388580290547251053624396132009375049887","eddsa_a":"4719411262419869562483424778460115500702457903827063600602223210473301286076"},"ciphertext":"0100000058347e4e94047b1f08c80c2446dbb7959112890d6626730285456c90de4d0327d94c55a8857ec1a28aa558d7fddd9c23a35aad149f6190e513cc883fdf8f381b1cbde217dd1aa76deb35aad7c269c6065dbcea08c4aca9b78eb0c690a9c8ac78db314b67409eed79f65ed689dfeebe469864ca5d664610bd88b876ab87e38841249b8c79796091637e4297cb9d0e30d79f8be94d5db834603ffd6891d481205f2b2c18ff8b6eb701c6c89d3bdd218491055c02d0bc21dc77604c191115bd074e4c3562e409d4","memo":"00000000000000000000000076c306b61df62f291b2e969fb0849d99d9ce41e2f137006e0100000058347e4e94047b1f08c80c2446dbb7959112890d6626730285456c90de4d0327d94c55a8857ec1a28aa558d7fddd9c23a35aad149f6190e513cc883fdf8f381b1cbde217dd1aa76deb35aad7c269c6065dbcea08c4aca9b78eb0c690a9c8ac78db314b67409eed79f65ed689dfeebe469864ca5d664610bd88b876ab87e38841249b8c79796091637e4297cb9d0e30d79f8be94d5db834603ffd6891d481205f2b2c18ff8b6eb701c6c89d3bdd218491055c02d0bc21dc77604c191115bd074e4c3562e409d4","commitment_root":"5083849948680892879909408067003747970365245079212851589596112091353428559039","out_hashes":["17646039070728097617361620192240256688895497365184552711952279053230883615832","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461"],"parsed_delta":{"v":5,"e":0,"index":0}},"depositSignature":"a6afc495992cd7b5e5220cfcad77bceb6fce00bdaf328e6b38125a2af375e98d43e484acfa7066db59a756edab424e68924fcb69b0d2e78846880573b74c9e70","deadline":"1992492726","proof":{"inputs":["11469701942666298368112882412133877458305516134926649826543144744382391691533","4911923227704639823759508094112064489979154214269756310328649986669769131621","5083849948680892879909408067003747970365245079212851589596112091353428559039","5","1502812185439545788761615395623369888883780466898824168414585265611214434241"],"proof":{"a":["655786377342758334963976728331374888347868921592341380248813036398523444394","5159546481681892310547323793794917327224898060977305841116041554565475553287"],"b":[["8119581148502950589754047487695586285395083177219444407768525179464572416399","1611655355824762681744870872534525656209979081092293903031416415641958643674"],["5066082478754116011571648185154794489203173149858170261202062842700499756105","18077031194350039463503848163969578122983489888542549961560436697461647432866"]],"c":["10469953290243900032005930803232522919605081211886397408800656075192977861650","4424932364424803380365129865078222133012747058809886839788310632575037053752"]}}},{"txType":"0003","txTypeData":{"from":"0x1df62f291b2e969fb0849d99d9ce41e2f137006e","amount":"5"},"transactionData":{"public":{"root":"11469701942666298368112882412133877458305516134926649826543144744382391691533","nullifier":"3240698366189707526625317199387902342342007048085680863344813839488538088176","out_commit":"14768515695881525949050937530138652142348047677715339854954389965563080576556","delta":"5","memo":"17761624292945301700687889577429183236894625237408503479456389634568822544269"},"secret":{"tx":{"input":[{"d":"0","p_d":"20463223910838656748494617837784324457242809038172417305949046668231535683301","i":"0","b":"0","e":"0"},[{"d":"778527272355460234275451","p_d":"3615463193555577034312277127206838042426932407368863765940857317908012993803","b":"0","t":"605253790940410672512654"},{"d":"910234065603172543517174","p_d":"15090112873831579009377336879530890624970561937996103184601474233236175300887","b":"0","t":"1191973573153492444606207"},{"d":"43356633339416208368231","p_d":"20647637612352083629863065724418489132533647193486266211916258961128077308857","b":"0","t":"569293462680625668272383"}]],"output":[{"d":"400570040613911193272805","p_d":"7272818467446340513883867807950296752456344641870555379348557825945811495801","i":"0","b":"5","e":"0"},[{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"}]]},"in_proof":[{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},[{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]}]],"eddsa_s":"655187467762813774499215136407331767022365765844888923903573512112391310812","eddsa_r":"19067555144045307106086415675197823014245127491423665693207914211604914418816","eddsa_a":"17081753682332689258138826812444675573355230949576278628788376734236164981825"},"ciphertext":"01000000e5df752f1d10c9e98be375ce1bcd16aa062c004c5faf25acfde36113c712b822709f805722b4c7e7547403d88087318cece04df2b17dac1e07702b0061a3e229dfb03699ffdb9ec07d4511081dccda2e856c7200e1da9fd462377bb395b5b431e040d54963d7fe8f0198dba73526af84a2acc07be6bbee749d1f0d2018a75d5f2307595f35a24508159806f65a2e524242c5516e9ca87a1ed14a5573a7b9c04bb11745be736b5c4c5d4af01fd301b4c05d83a5f6e4ba6e884e775c1ea8723cc3679c78eca252","memo":"00000000000000000000000076c306b61df62f291b2e969fb0849d99d9ce41e2f137006e01000000e5df752f1d10c9e98be375ce1bcd16aa062c004c5faf25acfde36113c712b822709f805722b4c7e7547403d88087318cece04df2b17dac1e07702b0061a3e229dfb03699ffdb9ec07d4511081dccda2e856c7200e1da9fd462377bb395b5b431e040d54963d7fe8f0198dba73526af84a2acc07be6bbee749d1f0d2018a75d5f2307595f35a24508159806f65a2e524242c5516e9ca87a1ed14a5573a7b9c04bb11745be736b5c4c5d4af01fd301b4c05d83a5f6e4ba6e884e775c1ea8723cc3679c78eca252","commitment_root":"14768515695881525949050937530138652142348047677715339854954389965563080576556","out_hashes":["15703866310255112308943290027301138487420376131817006383402120222488298643429","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461"],"parsed_delta":{"v":5,"e":0,"index":0}},"depositSignature":"71c313b2e4d6f5dcb24757de28e1c77ea61b4863873e8f6ffaf3cc900761c2e2b70498da228c925871c29afb9392a6215b11b66c0b779bed99693ec62155cb69","deadline":"1992492726","proof":{"inputs":["11469701942666298368112882412133877458305516134926649826543144744382391691533","3240698366189707526625317199387902342342007048085680863344813839488538088176","14768515695881525949050937530138652142348047677715339854954389965563080576556","5","17761624292945301700687889577429183236894625237408503479456389634568822544269"],"proof":{"a":["13483602855646754364501795235793849942477445599901704457806083546283632000334","2681872918700406505619937487764430702262071061067220698921411494136933941047"],"b":[["5209460123189604695629712902371934698602408018004611359862335983797169845318","3250880477547641037813780053705479732999574801196500552976015901195907722798"],["16789592566834553502516901269690810420354309947102679840174994299652253509913","14507881282682562243640178264471001438348854682266964798860093354585529875938"]],"c":["15409282407680382322357243898562481751108949720619288584815589769186201416415","6253668711596733788039233994745279092717739551550199829809972249945177411085"]}}},{"txType":"0003","txTypeData":{"from":"0x1df62f291b2e969fb0849d99d9ce41e2f137006e","amount":"5"},"transactionData":{"public":{"root":"11469701942666298368112882412133877458305516134926649826543144744382391691533","nullifier":"9815667364809955693178603516525757044270979815709644892073969056310191753121","out_commit":"10955827122679594913521431076589900341908657252580939516880169646991605739706","delta":"5","memo":"8465042642681909446127938882778370026943678651499302820501857383555199633039"},"secret":{"tx":{"input":[{"d":"0","p_d":"13564709466619827990601356314158987307736849927173561902458278603894571341074","i":"0","b":"0","e":"0"},[{"d":"1084172312765591974331574","p_d":"11485436656668495000853713283932065791086437844038512879242009581320899220270","b":"0","t":"880059914517681896889019"},{"d":"1045143482978150963602968","p_d":"17680201789692145410480567368193170140193366207433543095825790761227053187061","b":"0","t":"265577092410842425056195"},{"d":"325455323683033907102656","p_d":"11880558436498755860937773671977818142191940315828205070013652308102030696603","b":"0","t":"127763492994437980525482"}]],"output":[{"d":"715147901443864913857693","p_d":"9112281678150099102906645493813401256343517189073324426486844519809855871382","i":"0","b":"5","e":"0"},[{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"}]]},"in_proof":[{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},[{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]}]],"eddsa_s":"2563118372545991619140074264914683019553958735464799796116228141134357065276","eddsa_r":"19406810748384456123249695647818220666519172788763557620455667917344672630736","eddsa_a":"20211895369377646877795126181038456487725134619323082732620460628951097785137"},"ciphertext":"01000000e3b30604c91c22acaadc7dfc7b99cd5ede6b5b0c447d14930a1e67e34950b00b3481a08a5dff237cf179f8f3ae72a3a9de502d4947b75907e5d37d78b708791446e5130e91ffef65ed7a3a2a5e0541d2c861f2b0f8562da00e3c0bb704165dfbf227a2cb4582a87ad8359332807eda3efd697b9db073cc2dbdbc5ebbd6874867f164ef742e4fe1dbfa3c74a8b31bc1b24d0ac483ed78fb578627a7724b2e7009cd57d76758a867b61906a2824729077e00d227294bdd6ad3d0fc0c01f317cb195c7ad25e01a7","memo":"00000000000000000000000076c306b61df62f291b2e969fb0849d99d9ce41e2f137006e01000000e3b30604c91c22acaadc7dfc7b99cd5ede6b5b0c447d14930a1e67e34950b00b3481a08a5dff237cf179f8f3ae72a3a9de502d4947b75907e5d37d78b708791446e5130e91ffef65ed7a3a2a5e0541d2c861f2b0f8562da00e3c0bb704165dfbf227a2cb4582a87ad8359332807eda3efd697b9db073cc2dbdbc5ebbd6874867f164ef742e4fe1dbfa3c74a8b31bc1b24d0ac483ed78fb578627a7724b2e7009cd57d76758a867b61906a2824729077e00d227294bdd6ad3d0fc0c01f317cb195c7ad25e01a7","commitment_root":"10955827122679594913521431076589900341908657252580939516880169646991605739706","out_hashes":["5286960549549086086845165472019557888762580041218145977249901316559012803555","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461"],"parsed_delta":{"v":5,"e":0,"index":0}},"depositSignature":"07ae28dad5bba708372eed8f1495ff2cd78ab7dc71f8c4f8b48697941c887e198f99ef4f7c38cc8836848db6f0fe0d4c09dcc67a078ea7cfe052a3d9fa4b3ecc","deadline":"1992492726","proof":{"inputs":["11469701942666298368112882412133877458305516134926649826543144744382391691533","9815667364809955693178603516525757044270979815709644892073969056310191753121","10955827122679594913521431076589900341908657252580939516880169646991605739706","5","8465042642681909446127938882778370026943678651499302820501857383555199633039"],"proof":{"a":["9509181418391528917300279179389133621142062728123396105753802216566011927668","19598859355610456075081422710235400270407745560962244853786465720668670840690"],"b":[["16045887910873997209786782339743815601015420403336005264743560636575336269136","19387561247960428376807261737669085933597872517187026641072586794816585401433"],["13243421155852015874424705966085533583766256498150067535786387220977959702975","13382476948659873456741262279465231806252736911135120322477181922170888919482"]],"c":["16793837592134101026630345171753948011960035336895083020204371638906371694373","18797365549278469859250967048678494553442599937717490962096255334141708433842"]}}},{"txType":"0003","txTypeData":{"from":"0x1df62f291b2e969fb0849d99d9ce41e2f137006e","amount":"5"},"transactionData":{"public":{"root":"11469701942666298368112882412133877458305516134926649826543144744382391691533","nullifier":"5369442294158131972048875182485513674582101932821232553880084895628326997814","out_commit":"18649535850945799006144074974913433940191679345272569110478094085324911231547","delta":"5","memo":"6255427451012558600087721977857818277405179904692815593324318645872341634340"},"secret":{"tx":{"input":[{"d":"0","p_d":"7782747618235721884841812819264966572265636502192925190622156116885597817165","i":"0","b":"0","e":"0"},[{"d":"677340755626778852394416","p_d":"4611611763471083061180374773083883834350933946794160106824240137084351636025","b":"0","t":"1101278947359878689294472"},{"d":"640316484847183237826152","p_d":"19616549124588787443600697847571617385893421641356596330892262563054950765160","b":"0","t":"315777579749980411564938"},{"d":"246620952286411179326375","p_d":"15652311900443654874657780784936950076135902067938646650047510879951803508914","b":"0","t":"777929874438175304917583"}]],"output":[{"d":"428887439917081310971229","p_d":"4165563861852346882650528922706190780514846463451290984449172227823547774273","i":"0","b":"5","e":"0"},[{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"}]]},"in_proof":[{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},[{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]}]],"eddsa_s":"1415817330649296589694932667367285495010300648998162813153396237208356246729","eddsa_r":"538170205964348651235888851639271624946236752712348471466881736169069784866","eddsa_a":"17597951296482073853243350071827300978680551965261760026864928594381082642909"},"ciphertext":"010000009e735482e1c4d110b189b95c29d171f804c31788038307e9705378624b6f4c19bd1bc548d4d57b696ffb356de4b6f98823c3155ddd0b00d60cc40a2e58f5d414b1d63728c0c7bedf510a15f43bb4f725c24104cf9a40ad429255b69c8d303039dba46a555280eb8142f0ab467feac7612784a3726491fd8305f1146eeff223846e68184941d4cc18e7fa6b62d50733feb3cee9a8ba98bb0ee68e3b92beff801033d3a1757fdc4b1b3caa71a802eab4dcb8b906d778aeb296db7d9963d2272474fec295c703b6","memo":"00000000000000000000000076c306b71df62f291b2e969fb0849d99d9ce41e2f137006e010000009e735482e1c4d110b189b95c29d171f804c31788038307e9705378624b6f4c19bd1bc548d4d57b696ffb356de4b6f98823c3155ddd0b00d60cc40a2e58f5d414b1d63728c0c7bedf510a15f43bb4f725c24104cf9a40ad429255b69c8d303039dba46a555280eb8142f0ab467feac7612784a3726491fd8305f1146eeff223846e68184941d4cc18e7fa6b62d50733feb3cee9a8ba98bb0ee68e3b92beff801033d3a1757fdc4b1b3caa71a802eab4dcb8b906d778aeb296db7d9963d2272474fec295c703b6","commitment_root":"18649535850945799006144074974913433940191679345272569110478094085324911231547","out_hashes":["11442869717715414512104995671127245487781968092990580871107392325922875274142","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461"],"parsed_delta":{"v":5,"e":0,"index":0}},"depositSignature":"d6eb210c66c40afd6a0b1b87fc11661287c2389b9f1b9589c45e9c8b6c92a71c5059f24c8c9e38e1d6c1326b3bcc6ede9023cdd62aaefc3276bd3be7fe990d61","deadline":"1992492727","proof":{"inputs":["11469701942666298368112882412133877458305516134926649826543144744382391691533","5369442294158131972048875182485513674582101932821232553880084895628326997814","18649535850945799006144074974913433940191679345272569110478094085324911231547","5","6255427451012558600087721977857818277405179904692815593324318645872341634340"],"proof":{"a":["7604889359717625843016563619534156904804906281763734866510956561288654893431","3829903293704536900154507763225694872713579514649542430867119225204303853256"],"b":[["777943328277216374084113794248632862840501014145409062337853120320357306324","8090483889889186892136216177321276241476036249840357354028578443265590228502"],["8317430617725320734205416909358973513594888782386403052388978846366606539352","18076541004485059798092169776040072582827104786068891045911633597376220559897"]],"c":["20941897563787492649152929771777397237239207338949536332966453915666617411077","21113036976665972649174126341002901048146091684503906521836067539237111926436"]}}},{"txType":"0003","txTypeData":{"from":"0x1df62f291b2e969fb0849d99d9ce41e2f137006e","amount":"5"},"transactionData":{"public":{"root":"11469701942666298368112882412133877458305516134926649826543144744382391691533","nullifier":"9560419371203521003799913591680947362141142370747417341960654834447642231764","out_commit":"6909426544196838124777527268595382444767639253153756772639251070288081108926","delta":"5","memo":"18996978397544325244092854206103333478697569732728389028817025326758092206059"},"secret":{"tx":{"input":[{"d":"0","p_d":"6436246958755692003093767823038034635712113362872356491054097313126760357017","i":"0","b":"0","e":"0"},[{"d":"34160328782883640811357","p_d":"12135774079281462432372608630109465462249506853433635597978710421723075388082","b":"0","t":"414680113866255726776712"},{"d":"600049238053920195434125","p_d":"729269393864174039664571425303606276631183912654745592886294797303768710698","b":"0","t":"277637562508414614683238"},{"d":"481437393755415546822581","p_d":"7608040031336463410996067936562730143602037854066736717696054503418955061864","b":"0","t":"278954714638840209917450"}]],"output":[{"d":"871036652801570377055158","p_d":"2611328975425914407813755010423568666332848603805747889188194588960945945171","i":"0","b":"5","e":"0"},[{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"}]]},"in_proof":[{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},[{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]}]],"eddsa_s":"457146749286040508645121858109499321884906572108609338920866106623797397406","eddsa_r":"4665814117079934173256230533994234496333066970844464570919643292088497361842","eddsa_a":"14289915176682631525507041050610259827685796566722925817186696574825862569235"},"ciphertext":"010000003322cc5147f71e23a278c71d8390dccf3182d332c492ec8088415dacc7fdff177e3345a91caaf154c148ad4290de4bad60e3e3878b46bd7eadcc81cb8ca1ca23778108c7f08b2c4ca7e7858a1041628938b2f031a5ad4a82883da542d8c1e99fe03540e58537e6e7f79a7e548b0279fb58ee180e506f754c716e3ae1b91d73ec38372479348bdee3135c46ed59597116df0f6790774e9cf0c3a5df3410125a58bb328a8c69e64c8078cc377b4690a2c4daf4cf506302423f43ca4274dc074f9287413add597e","memo":"00000000000000000000000076c306b71df62f291b2e969fb0849d99d9ce41e2f137006e010000003322cc5147f71e23a278c71d8390dccf3182d332c492ec8088415dacc7fdff177e3345a91caaf154c148ad4290de4bad60e3e3878b46bd7eadcc81cb8ca1ca23778108c7f08b2c4ca7e7858a1041628938b2f031a5ad4a82883da542d8c1e99fe03540e58537e6e7f79a7e548b0279fb58ee180e506f754c716e3ae1b91d73ec38372479348bdee3135c46ed59597116df0f6790774e9cf0c3a5df3410125a58bb328a8c69e64c8078cc377b4690a2c4daf4cf506302423f43ca4274dc074f9287413add597e","commitment_root":"6909426544196838124777527268595382444767639253153756772639251070288081108926","out_hashes":["10855493043940817168015213767262201127951851809016076764127996089186093113907","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461"],"parsed_delta":{"v":5,"e":0,"index":0}},"depositSignature":"114bb70563f6d9c873a186e31f69f4e6d9625eaa8296e0e40d352f5b18a91d636ab22e0bd6c831925a947c4fe2e379e7ec13363221190ea4b1b731b303dbc84a","deadline":"1992492727","proof":{"inputs":["11469701942666298368112882412133877458305516134926649826543144744382391691533","9560419371203521003799913591680947362141142370747417341960654834447642231764","6909426544196838124777527268595382444767639253153756772639251070288081108926","5","18996978397544325244092854206103333478697569732728389028817025326758092206059"],"proof":{"a":["4602892000158444288607381395302122097038842460708145655320957437107539872013","15871135524798379209734835243690648413946413753334097288492704119819633280338"],"b":[["12537220843303290473729083982326192444508930010452012154072499017555950419673","227229718435559916067765649884279085125192764337099902884442068964071491121"],["14737416111668390161250617747737058881855813111720681603458925258046081432887","7673855246490866151534466101808527712136950273575326558673323178660325820211"]],"c":["3460443718499417471961024434986736306013056843300753715058883612085501858977","19597380514510122789228320932744392391159079851183828014549091833614908793023"]}}}] \ No newline at end of file diff --git a/zp-relayer/test/flows/flow_zero-address_withdraw_2.json b/zp-relayer/test/flows/flow_zero-address_withdraw_2.json index a2b4434..8d65baa 100644 --- a/zp-relayer/test/flows/flow_zero-address_withdraw_2.json +++ b/zp-relayer/test/flows/flow_zero-address_withdraw_2.json @@ -1 +1 @@ -[{"txType":"0003","txTypeData":{"from":"0x1df62f291b2e969fb0849d99d9ce41e2f137006e","amount":"5"},"transactionData":{"public":{"root":"11469701942666298368112882412133877458305516134926649826543144744382391691533","nullifier":"18515028901333389604678394075172595423465057644476872404364136898618919710922","out_commit":"14890945186358350120022791491960196396319317292890169382484205278310876961095","delta":"5","memo":"5765531276489942717719131357727931495463111783104207010332520948539304430863"},"secret":{"tx":{"input":[{"d":"0","p_d":"179209878618035504967544250568861577657014310369534826204401430605583780376","i":"0","b":"0","e":"0"},[{"d":"1167672320378973240054293","p_d":"3819397593970961285592078266546599518642999546970048759035920931070526042797","b":"0","t":"236241218588557946633346"},{"d":"799307917384746280369826","p_d":"9445359558117227387583558677443709194704749815763585448711399266436196587732","b":"0","t":"1113574166296097053394753"},{"d":"189994330826487987847479","p_d":"18050977467812732362514681268940064926257355975852207576489218708128782447735","b":"0","t":"970998783633459613394178"}]],"output":[{"d":"885071313457278279538720","p_d":"15638878520966993613863764884897287301465253307123819851444013291633014470323","i":"0","b":"5","e":"0"},[{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"}]]},"in_proof":[{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},[{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]}]],"eddsa_s":"2110709754420590891206397577621021136972278118019247582409940589215611654140","eddsa_r":"814469789944333642177598036137668557256144296417473894108571731189393067174","eddsa_a":"13920279638945886252769448798255688309158948222633950940760875106219392093788"},"ciphertext":"01000000a5bb2987a9a23a5b96685bfb618fe978bc957821f9f024a98b6e63eacc49c70e5aa0ac5ab14278eb430953b28b3b24dec78622dd7bef911977c3099f7ce78e2ec348757f963d6e0920686e181cb36203a745c07b97cddc8e6f1809f66f3df0298be05db46d5ef33002918231dd02d40891558403518a5af0fc173352b164e9915ceb634a8bc22ae1fa5864b1c1099b5d1109468b6b9bdb28168aae4f2b8a471c1f446250cbf90490481545730d9e162ce0386a3cc915b5c9e505243cfd2d98799b419308b180","memo":"000000000000000000000000767495771df62f291b2e969fb0849d99d9ce41e2f137006e01000000a5bb2987a9a23a5b96685bfb618fe978bc957821f9f024a98b6e63eacc49c70e5aa0ac5ab14278eb430953b28b3b24dec78622dd7bef911977c3099f7ce78e2ec348757f963d6e0920686e181cb36203a745c07b97cddc8e6f1809f66f3df0298be05db46d5ef33002918231dd02d40891558403518a5af0fc173352b164e9915ceb634a8bc22ae1fa5864b1c1099b5d1109468b6b9bdb28168aae4f2b8a471c1f446250cbf90490481545730d9e162ce0386a3cc915b5c9e505243cfd2d98799b419308b180","commitment_root":"14890945186358350120022791491960196396319317292890169382484205278310876961095","out_hashes":["6684491798053043856786112755328477332217937850823335496488768774256976313253","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461"],"parsed_delta":{"v":5,"e":0,"index":0}},"depositSignature":"e1568ebeff0678cf582cf512beac6ad9bf3103357ea94bf0470d63029e2dd73b2a47a188290d765a4d3bb30cbe1b18fd729118c96cf3609e45349511d4bc4f9c","deadline":"1987351927","proof":{"inputs":["11469701942666298368112882412133877458305516134926649826543144744382391691533","18515028901333389604678394075172595423465057644476872404364136898618919710922","14890945186358350120022791491960196396319317292890169382484205278310876961095","5","5765531276489942717719131357727931495463111783104207010332520948539304430863"],"proof":{"a":["1481551330336040159617137963162618554054252113543964271331192040421242186315","8155386717600976238480491122043505161407778040512747977448560385096878275145"],"b":[["14506468573215554080098261863794831927342708369104994477687753029423706378666","7954524086842581468101521218389852617139454625233502470031008326226307811273"],["18360731487753882439870994533137371773712071672783062767657251123649410091923","13043006103394589294982958693105097347965455764232542979070227629529925406484"]],"c":["9593739822585563114631113615585770940110813373805656865564420520945503471536","2444004037537223308598298403441120223872766310126075763583138148748507548485"]}}},{"txType":"0002","txTypeData":{"to":"0x0000000000000000000000000000000000000000","amount":"5"},"transactionData":{"public":{"root":"21326704332367584751752413194007976581907135851281750581055917734942931389324","nullifier":"11217430346558834806246283316812852711639636286980501621770150403480128065392","out_commit":"18242406946207642823480396336281013158754507938384093092455037012116940805860","delta":"12259964326927110866866776217202473487396657051178369019","memo":"8696445333967441038096915542630600227243583692287397432729139197426035952875"},"secret":{"tx":{"input":[{"d":"885071313457278279538720","p_d":"15638878520966993613863764884897287301465253307123819851444013291633014470323","i":"0","b":"5","e":"0"},[{"d":"1199673190057741418786348","p_d":"14012417402536805961102779931481084253771681445567923568685958492920443204782","b":"0","t":"976561813773877060853635"},{"d":"481931281338416407554765","p_d":"1704384490888641819098763900864402840259281059658544173188991504610646072549","b":"0","t":"436612928427696668520480"},{"d":"151462939276974591937556","p_d":"2143150027907168274663157835001416833128843817163908612456418520175633437668","b":"0","t":"571127562897565995516024"}]],"output":[{"d":"106109493038892134186251","p_d":"6159527974229972904241196775865819283706732526230271153671593173445894716829","i":"0","b":"0","e":"640"},[{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"}]]},"in_proof":[{"sibling":["6634257576132171181853636486652267162938250203364881974499045611385650496461","522535841805272509785471739560670907901803100379533916522366862439656660706","5531505720112419174552011511368466606524449052754036195330113153613535104476","11329107969209561607639978749821791505989823914753522080153457697297357471572","15352658802967173102705828119067422100499283382786583167468164930410196407148","693915472917531005300210909571774949875959308914908899247619510229153605991","15141150100053359483136089782360938554673261981069224805995527807509579907339","14714135131729000159871566580913366989973155681884951701205677304798723517153","7627219359786202965428762367979749348660074284384916423168422862902932424831","14551312803999726205102199121216044114178321255077732763187534410264273264477","8133200400714649277420943314430065689284296998442846431340458388300981773202","19757957384704703741994568750351615325340927095380651395218576901111994341312","5901787700375591888593349058351005758829733721889580801499958432339125722117","19610513091507606056305032357502140527607412933509798884555991018234020735550","9192158814814940467737597506351631595487805610002096082411402141191271289034","15148195026354169755004685112465574914097093714834468264388454016674751742404","19002444695496836611838706233351326378861769708403674372155042415140128768451","6763631975639579682217345019407739076344940280496238910656270074535663824550","12341717392944213854008315273751832217218539945524045851434723385845462156644","11188058538255209925140405088005030946576268598716710282220993109667689740819","8767206592009162685638605323931886632571407359842734160297858458232122701697","14806656623031055020403556767950405732280024630750601286800590772051854555577","1449745595536323767029826772218393750182843022155053540570887685758005275362","14765222336817644649711564851747393428952536408520879107108664314912194196332","18982658160224083592721682006811348397029735258325914857425249164605527855495","967440321479665771456770493134553793860406789235076340454890138689092398743","8572241015560852043038102363298212135872617918466794947737128919860989647576","12321040915162805881434398012323625623795260302839411951191547398563350127146","1298406847154241449159894232700436562945625671911038094089134903076476940734","13431717271286002143863064443149123073867305935730567069074323632094779906762","18685561605392691989953390877556007261171303533861983942569541094114673599076","13636738154803958676121594462998156260460565875177602873233203829261160109659","11140924918219198527253893695586727689118341082504963503885178419412738437285","8474943624663153781162388714410508382201175186669451645994959916456656701311","9309089957223635716291637648453776901031309116565418783465358778831489149051","4103099250878752973100498917988600567004154521200948180433869120256331253914","11160939302949194840812207983448709967740913175948942656104962328204560247908","14248462656890584285977708924431681107857584429784533132203700239154068075366","7195074526527890157871299180569895776266215514996373018130241622113485556177","4943263310141200676717673361235064531985540932726984279532900193640862300203","5627339774594137179528094994483896875762556850864443691412042157668983586635","2498416842977474257592472050316460590153865371699452127457309775442710367806","1550870853608757868458620218775305036473988111799553999977217107059043115199","13482439215704946735601313042140305736621462345162903440313509330875135734460","15182649948730062375321737692408817980506635025074846398909015256770821463532","1247690880441109659214778745323800445655802148600726437291573229536109714198","5341871252039295346907887643036618265097925372949238666377398522613804820550","21459734131189367378477890969465280901558661138826956196178023231247877916395"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},[{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]}]],"eddsa_s":"2678436201717203821423636332834786128164953738940101680048928330698314895170","eddsa_r":"12585340222851394532498477017061125224382893617869552352039691299311633763421","eddsa_a":"13920279638945886252769448798255688309158948222633950940760875106219392093788"},"ciphertext":"01000000a9c146c37c701c59acaa910e3880aeca483f27d38a60a454fbd3d55881a86d0bba7998cbddbd341a45029dcfe28f77ef3e4262ad7202542e7a3c0958ffa99e283b6cd4b1dd8e3df9a12e2120b2cc49e2362e5a5da78400f14ae867b7ed6cc8d7383b48de84856b3bfa3a8764b80eeac2173d0b3e9cf577a0c2b51095ff2c1da8faae9f322b47172b179199836e2641638be678ad65260639d6ca309f5ca1e6cbf4b65abec885583d007d98f25629cd8c7bdd0e8f08f949ab4865fb65d4d6013a13a2ee0cf6fd","memo":"00000000000000000000000000000000000000000000000000000000000000000000000001000000a9c146c37c701c59acaa910e3880aeca483f27d38a60a454fbd3d55881a86d0bba7998cbddbd341a45029dcfe28f77ef3e4262ad7202542e7a3c0958ffa99e283b6cd4b1dd8e3df9a12e2120b2cc49e2362e5a5da78400f14ae867b7ed6cc8d7383b48de84856b3bfa3a8764b80eeac2173d0b3e9cf577a0c2b51095ff2c1da8faae9f322b47172b179199836e2641638be678ad65260639d6ca309f5ca1e6cbf4b65abec885583d007d98f25629cd8c7bdd0e8f08f949ab4865fb65d4d6013a13a2ee0cf6fd","commitment_root":"18242406946207642823480396336281013158754507938384093092455037012116940805860","out_hashes":["5169190645051600467245646827843962323439404268642378936737359616449257587113","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461"],"parsed_delta":{"v":-5,"e":0,"index":128}},"depositSignature":null,"proof":{"inputs":["21326704332367584751752413194007976581907135851281750581055917734942931389324","11217430346558834806246283316812852711639636286980501621770150403480128065392","18242406946207642823480396336281013158754507938384093092455037012116940805860","12259964326927110866866776217202473487396657051178369019","8696445333967441038096915542630600227243583692287397432729139197426035952875"],"proof":{"a":["8099456782736035677107604565050608440770933824470236338998577894014579937756","5192337459996591875923558930557144680831815027303082922585546525400963756200"],"b":[["14693970210963981254436122835314343787200707738345534556231043222576642055861","12780307789620384175478026106181310323852450332396847058002321016670282055128"],["15544604047212632783305576145544663988205475836482083385355445348462381097559","9489459671145412610758376359201460860193595542075678089914190366818107811305"]],"c":["14644886326988811121722279665207231232265255003916999553517651724334706319120","17996863601083919555924022722451233294932800489816294356561097459104048425542"]}}}] \ No newline at end of file +[{"txType":"0003","txTypeData":{"from":"0x1df62f291b2e969fb0849d99d9ce41e2f137006e","amount":"5"},"transactionData":{"public":{"root":"11469701942666298368112882412133877458305516134926649826543144744382391691533","nullifier":"2785949166072941088496320854681527991659232839588130622663665772951952394867","out_commit":"6950160852238851881604978361919199052681775284181449669868359266488584520112","delta":"5","memo":"20588593449272565211666008488640939320020655504227858119935023817653979810814"},"secret":{"tx":{"input":[{"d":"0","p_d":"18652627094890521649364767818859602664582753063493713588408679521812260042990","i":"0","b":"0","e":"0"},[{"d":"613183366819594998246361","p_d":"15761949766963686402071318116288884540393452588085312620342409373467638146632","b":"0","t":"1036866847412703374826250"},{"d":"105146226393294962306026","p_d":"11662375388921740743096474922537172100239998399968271679327113528434694768306","b":"0","t":"426251272665260724456717"},{"d":"1057828242577893656446841","p_d":"602002615448494140759128735399003610831919904470372697393867615698935220210","b":"0","t":"151199680447143205217069"}]],"output":[{"d":"1052038523840813040060709","p_d":"17659287167971395729212965171101222647948629184883262393849746310440043286544","i":"0","b":"5","e":"0"},[{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"}]]},"in_proof":[{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},[{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]}]],"eddsa_s":"2507261030531556175580922964331696221300191806839157449497462452012135784568","eddsa_r":"10303883106290122708853284473668594381752030961433971408893197026187010957710","eddsa_a":"18697130532335338189819745558381595887310604751512064895026362659348449558975"},"ciphertext":"010000005d0d4016e1b22ece47f6c58487ce95ed8e6b4db77204c5b226f5e2411610c01569203dd79c558ef5b0defea54fd22ff439367df3cbaf1d9420581f9852e6bd036fe2431cad8d7c03865de02e9e62f53f2c630b27b877e63b80388a20c76563fc759e3192487f49c3ffd72694d3845acf1c019d94dea0f14021b40583833d08a830d705e4e6b23591417106f0f99916094f8f6fd6252859eb0bffba18d8bbff4c49681b7695a56c9fda50ffc0464032aba4ad0854044ff53575aad303718ba765dc859ee474b1","memo":"00000000000000000000000076c306ca1df62f291b2e969fb0849d99d9ce41e2f137006e010000005d0d4016e1b22ece47f6c58487ce95ed8e6b4db77204c5b226f5e2411610c01569203dd79c558ef5b0defea54fd22ff439367df3cbaf1d9420581f9852e6bd036fe2431cad8d7c03865de02e9e62f53f2c630b27b877e63b80388a20c76563fc759e3192487f49c3ffd72694d3845acf1c019d94dea0f14021b40583833d08a830d705e4e6b23591417106f0f99916094f8f6fd6252859eb0bffba18d8bbff4c49681b7695a56c9fda50ffc0464032aba4ad0854044ff53575aad303718ba765dc859ee474b1","commitment_root":"6950160852238851881604978361919199052681775284181449669868359266488584520112","out_hashes":["9837915484685083182133467412930800853524410011624469243939828665585202367837","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461"],"parsed_delta":{"v":5,"e":0,"index":0}},"depositSignature":"308f3265b4c37e68439898e1bfa16c09871391066f0edf045c26afca3b6697693c68b9bfb0c06c1a5cf4c16dd223ab6d573f6d4d457d5224e3eafccb6723dda4","deadline":"1992492746","proof":{"inputs":["11469701942666298368112882412133877458305516134926649826543144744382391691533","2785949166072941088496320854681527991659232839588130622663665772951952394867","6950160852238851881604978361919199052681775284181449669868359266488584520112","5","20588593449272565211666008488640939320020655504227858119935023817653979810814"],"proof":{"a":["5759812759815507100651557432421275402617894241101266143502823102039760052883","12809999876070536369385501842006554433804162659658404211159537057472085308431"],"b":[["21656179246094645509322775274051528080151168712984822067132622581826352839485","20387149437819526543116202589067108612115372194436699646561677494838124947788"],["13890313835688615883734856494982205202289957791657984663698695524484473703899","617263379958615971039096263876707004827194168483516250881043916107093696899"]],"c":["21610793774359414795883005293674150234236680252650981498594935565854039432657","5245706043760473126938714875830327503865620213216332896393683452995008201372"]}}},{"txType":"0002","txTypeData":{"to":"0x0000000000000000000000000000000000000000","amount":"5"},"transactionData":{"public":{"root":"11325132499296045491649893870010322873157348125205821113692269270622622270018","nullifier":"12769199499396910542427781386541596308144725334987040340128517653631099851417","out_commit":"1073514244569013455709671209992268017380548787539503920143205312225713688733","delta":"12259964326927110866866776217202473487396657051178369019","memo":"6874541611530134098513071941987089652294048629457898945062299557166418516385"},"secret":{"tx":{"input":[{"d":"1052038523840813040060709","p_d":"17659287167971395729212965171101222647948629184883262393849746310440043286544","i":"0","b":"5","e":"0"},[{"d":"543754204894021962220021","p_d":"3624234073095768625219030119854011271419519592119236982553756234935308532168","b":"0","t":"1123424647886004778106133"},{"d":"659471957603989588651623","p_d":"8804678990420920904352896045284294651813753767853469281764949901404797406403","b":"0","t":"1090619368220520276820183"},{"d":"984798417249825484338399","p_d":"2236954464330682540339515240560718829221892722721879565754901585608849763689","b":"0","t":"256084615557403812926137"}]],"output":[{"d":"882291405568412146975812","p_d":"15008062266361504165584259479843620031791613458232393245898030807317460259460","i":"0","b":"0","e":"640"},[{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"},{"d":"0","p_d":"0","b":"0","t":"0"}]]},"in_proof":[{"sibling":["6634257576132171181853636486652267162938250203364881974499045611385650496461","522535841805272509785471739560670907901803100379533916522366862439656660706","5531505720112419174552011511368466606524449052754036195330113153613535104476","11329107969209561607639978749821791505989823914753522080153457697297357471572","15352658802967173102705828119067422100499283382786583167468164930410196407148","693915472917531005300210909571774949875959308914908899247619510229153605991","15141150100053359483136089782360938554673261981069224805995527807509579907339","14714135131729000159871566580913366989973155681884951701205677304798723517153","7627219359786202965428762367979749348660074284384916423168422862902932424831","14551312803999726205102199121216044114178321255077732763187534410264273264477","8133200400714649277420943314430065689284296998442846431340458388300981773202","19757957384704703741994568750351615325340927095380651395218576901111994341312","5901787700375591888593349058351005758829733721889580801499958432339125722117","19610513091507606056305032357502140527607412933509798884555991018234020735550","9192158814814940467737597506351631595487805610002096082411402141191271289034","15148195026354169755004685112465574914097093714834468264388454016674751742404","19002444695496836611838706233351326378861769708403674372155042415140128768451","6763631975639579682217345019407739076344940280496238910656270074535663824550","12341717392944213854008315273751832217218539945524045851434723385845462156644","11188058538255209925140405088005030946576268598716710282220993109667689740819","8767206592009162685638605323931886632571407359842734160297858458232122701697","14806656623031055020403556767950405732280024630750601286800590772051854555577","1449745595536323767029826772218393750182843022155053540570887685758005275362","14765222336817644649711564851747393428952536408520879107108664314912194196332","18982658160224083592721682006811348397029735258325914857425249164605527855495","967440321479665771456770493134553793860406789235076340454890138689092398743","8572241015560852043038102363298212135872617918466794947737128919860989647576","12321040915162805881434398012323625623795260302839411951191547398563350127146","1298406847154241449159894232700436562945625671911038094089134903076476940734","13431717271286002143863064443149123073867305935730567069074323632094779906762","18685561605392691989953390877556007261171303533861983942569541094114673599076","13636738154803958676121594462998156260460565875177602873233203829261160109659","11140924918219198527253893695586727689118341082504963503885178419412738437285","8474943624663153781162388714410508382201175186669451645994959916456656701311","9309089957223635716291637648453776901031309116565418783465358778831489149051","4103099250878752973100498917988600567004154521200948180433869120256331253914","11160939302949194840812207983448709967740913175948942656104962328204560247908","14248462656890584285977708924431681107857584429784533132203700239154068075366","7195074526527890157871299180569895776266215514996373018130241622113485556177","4943263310141200676717673361235064531985540932726984279532900193640862300203","5627339774594137179528094994483896875762556850864443691412042157668983586635","2498416842977474257592472050316460590153865371699452127457309775442710367806","1550870853608757868458620218775305036473988111799553999977217107059043115199","13482439215704946735601313042140305736621462345162903440313509330875135734460","15182649948730062375321737692408817980506635025074846398909015256770821463532","1247690880441109659214778745323800445655802148600726437291573229536109714198","5341871252039295346907887643036618265097925372949238666377398522613804820550","21459734131189367378477890969465280901558661138826956196178023231247877916395"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},[{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]},{"sibling":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"path":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]}]],"eddsa_s":"819959918944434610451738702804724411842743255119327638578543635361998732557","eddsa_r":"6408504465513076060240642124824250133628009995713147262762349167410279875387","eddsa_a":"18697130532335338189819745558381595887310604751512064895026362659348449558975"},"ciphertext":"010000002b53d1239df3652fbce04e85b85f0f25344a3139212ee9612d58871e89fb3229deae6756da97dc26b42137394ec8b6e7c6f3ffcd906317f555a92bbb39f0ec1fc530c2cda7625202d92e4eb3dee2b75d8ba11909f1af92fd3793a135f9b7af3d9ed12f7c1a2850eec805cbec1f1301371ae55b349d5fab1c1bbf333b7b35ca226c8b6273654c6e87b152b2e8defc870045e225f4d6379c7921e7abbf104cfb687fe658e9aa50c496e6a594ac04b6ce1d666d8752d0844b0fdb4b7cf061d2e34159815c69b4fb","memo":"000000000000000000000000000000000000000000000000000000000000000000000000010000002b53d1239df3652fbce04e85b85f0f25344a3139212ee9612d58871e89fb3229deae6756da97dc26b42137394ec8b6e7c6f3ffcd906317f555a92bbb39f0ec1fc530c2cda7625202d92e4eb3dee2b75d8ba11909f1af92fd3793a135f9b7af3d9ed12f7c1a2850eec805cbec1f1301371ae55b349d5fab1c1bbf333b7b35ca226c8b6273654c6e87b152b2e8defc870045e225f4d6379c7921e7abbf104cfb687fe658e9aa50c496e6a594ac04b6ce1d666d8752d0844b0fdb4b7cf061d2e34159815c69b4fb","commitment_root":"1073514244569013455709671209992268017380548787539503920143205312225713688733","out_hashes":["18634905180213625195218299929279536158500035536196802264974948304455187125035","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461","6634257576132171181853636486652267162938250203364881974499045611385650496461"],"parsed_delta":{"v":-5,"e":0,"index":128}},"depositSignature":null,"proof":{"inputs":["11325132499296045491649893870010322873157348125205821113692269270622622270018","12769199499396910542427781386541596308144725334987040340128517653631099851417","1073514244569013455709671209992268017380548787539503920143205312225713688733","12259964326927110866866776217202473487396657051178369019","6874541611530134098513071941987089652294048629457898945062299557166418516385"],"proof":{"a":["5989658728563838126860858246977613696524937543202468760765765294660355905590","14121760776516681108815120963413510567497882584064847817677496751826683858123"],"b":[["13918711863912506125568265572053510348103822646416751691858513092577695360522","21512784150901251906122948881868463788521160604431286225224430536033596678619"],["2105912911705065319664149109933808356410750634401844753415521828780736106825","4709406834617627786924716444797967949587443246249153075664436580061673363503"]],"c":["10184667690846441441914593787062629044484048790935711532423439014965438464184","14966596827689311041883656012932096885704974220853804186317775705713835604781"]}}}] \ No newline at end of file diff --git a/zp-relayer/test/unit-tests/validateTx.test.ts b/zp-relayer/test/unit-tests/validateTx.test.ts index c98cade..1f3d586 100644 --- a/zp-relayer/test/unit-tests/validateTx.test.ts +++ b/zp-relayer/test/unit-tests/validateTx.test.ts @@ -1,6 +1,6 @@ import { expect } from 'chai' import { toBN } from 'web3-utils' -import { checkDeadline } from '../../validateTx' +import { checkDeadline } from '../../validation/tx/validateTx' describe('Validation', () => { it('correctly checks deadline', () => { diff --git a/zp-relayer/test/worker-tests/poolWorker.test.ts b/zp-relayer/test/worker-tests/poolWorker.test.ts index f8f32bc..b0775b6 100644 --- a/zp-relayer/test/worker-tests/poolWorker.test.ts +++ b/zp-relayer/test/worker-tests/poolWorker.test.ts @@ -1,4 +1,5 @@ import chai from 'chai' +import { toBN } from 'web3-utils' import { v4 } from 'uuid' import { Mutex } from 'async-mutex' import chaiAsPromised from 'chai-as-promised' @@ -6,9 +7,9 @@ import { Job, QueueEvents, Worker } from 'bullmq' import { TxType } from 'zp-memo-parser' import { web3 } from './web3' import { pool } from '../../pool' -import config from '../../config' +import config from '../../configs/relayerConfig' import { sentTxQueue, SentTxState } from '../../queue/sentTxQueue' -import { poolTxQueue, PoolTxResult, BatchTx } from '../../queue/poolTxQueue' +import { poolTxQueue, PoolTxResult, BatchTx, WorkerTxType, DirectDeposit } from '../../queue/poolTxQueue' import { createPoolTxWorker } from '../../workers/poolTxWorker' import { createSentTxWorker } from '../../workers/sentTxWorker' import { PoolState } from '../../state/PoolState' @@ -16,18 +17,33 @@ import { GasPrice } from '../../services/gas-price' import { redis } from '../../services/redisClient' import { initializeDomain } from '../../utils/EIP712SaltedPermit' import { FlowOutputItem } from '../../../test-flow-generator/src/types' -import { disableMining, enableMining, evmRevert, evmSnapshot, mintTokens, newConnection, setBalance } from './utils' -import { validateTx } from '../../validateTx' +import { + approveTokens, + disableMining, + enableMining, + evmRevert, + evmSnapshot, + mintTokens, + newConnection, + setBalance, +} from './utils' +import { validateTx } from '../../validation/tx/validateTx' +import { TxManager } from '../../tx/TxManager' +import { Circuit, IProver, LocalProver } from '../../prover/' import flow from '../flows/flow_independent_deposits_5.json' import flowDependentDeposits from '../flows/flow_dependent_deposits_2.json' import flowZeroAddressWithdraw from '../flows/flow_zero-address_withdraw_2.json' +import { Params } from 'libzkbob-rs-node' +import { directDepositQueue } from '../../queue/directDepositQueue' +import { createDirectDepositWorker } from '../../workers/directDepositWorker' chai.use(chaiAsPromised) const expect = chai.expect -async function submitJob(item: FlowOutputItem): Promise> { +async function submitJob(item: FlowOutputItem): Promise, PoolTxResult[]>> { const job = await poolTxQueue.add('test', { + type: WorkerTxType.Normal, transactions: [ { amount: '0', @@ -43,15 +59,26 @@ async function submitJob(item: FlowOutputItem): Promise { let poolWorker: Worker let sentWorker: Worker let gasPriceService: GasPrice<'web3'> + let txManager: TxManager let poolQueueEvents: QueueEvents let sentQueueEvents: QueueEvents - let workerMutex: Mutex + let directDepositQueueEvents: QueueEvents + let mutex: Mutex let snapShotId: string let eventsInit = false + let treeProver: IProver + const treeParams = Params.fromFile(config.treeUpdateParamsPath as string) + const directDepositParams = Params.fromFile(config.directDepositParamsPath as string) + const ddSender = '0x28a8746e75304c0780e011bed21c72cd78cd535e' beforeEach(async () => { snapShotId = await evmSnapshot() @@ -68,20 +95,47 @@ describe('poolWorker', () => { gasPriceService = new GasPrice(web3, 10000, 'web3', {}) await gasPriceService.start() - workerMutex = new Mutex() - poolWorker = await createPoolTxWorker(gasPriceService, validateTx, workerMutex, redis) - sentWorker = await createSentTxWorker(gasPriceService, workerMutex, redis) + txManager = new TxManager(web3, config.relayerPrivateKey, gasPriceService) + await txManager.init() + + mutex = new Mutex() + + treeProver = new LocalProver(Circuit.Tree, treeParams) + const directDepositProver = new LocalProver(Circuit.DirectDeposit, directDepositParams) + + const baseConfig = { + redis, + } + poolWorker = await createPoolTxWorker({ + ...baseConfig, + validateTx, + treeProver, + mutex, + txManager, + }) + sentWorker = await createSentTxWorker({ + ...baseConfig, + mutex, + txManager, + }) + const directDepositWorker = await createDirectDepositWorker({ + ...baseConfig, + directDepositProver, + }) sentWorker.run() poolWorker.run() + directDepositWorker.run() if (!eventsInit) { poolQueueEvents = new QueueEvents(poolWorker.name, { connection: redis }) sentQueueEvents = new QueueEvents(sentWorker.name, { connection: redis }) + directDepositQueueEvents = new QueueEvents(directDepositWorker.name, { connection: redis }) eventsInit = true } await poolWorker.waitUntilReady() await sentWorker.waitUntilReady() + await directDepositWorker.waitUntilReady() await enableMining() }) @@ -99,7 +153,7 @@ describe('poolWorker', () => { gasPriceService.stop() }) - async function expectJobFinished(job: Job) { + async function expectJobFinished(job: Job, PoolTxResult[]>) { const [[initialHash, sentId]] = await job.waitUntilFinished(poolQueueEvents) expect(initialHash.length).eq(66) @@ -133,7 +187,13 @@ describe('poolWorker', () => { await mintTokens(deposit.txTypeData.from as string, parseInt(deposit.txTypeData.amount)) await sentWorker.pause() - const mockPoolWorker = await createPoolTxWorker(gasPriceService, async () => {}, workerMutex, newConnection()) + const mockPoolWorker = await createPoolTxWorker({ + mutex, + redis: newConnection(), + txManager, + validateTx: async () => {}, + treeProver, + }) mockPoolWorker.run() await mockPoolWorker.waitUntilReady() @@ -254,14 +314,12 @@ describe('poolWorker', () => { await setBalance(config.relayerAddress, '0x0') - // @ts-ignore - const failJob = await submitJob(deposit) - await expect(failJob.waitUntilFinished(poolQueueEvents)).rejectedWith('Insufficient funds for gas * price + value') - // @ts-ignore const job = await submitJob(deposit) + await job.waitUntilFinished(poolQueueEvents) - expect(await poolTxQueue.count()).eq(1) + expect(await poolTxQueue.count()).eq(0) + expect(await sentTxQueue.count()).eq(1) expect(await poolTxQueue.isPaused()).eq(true) expect(await sentTxQueue.isPaused()).eq(true) @@ -269,4 +327,54 @@ describe('poolWorker', () => { await expectJobFinished(job) }) + + it('should process direct deposit transaction', async () => { + const fee = await pool.PoolInstance.methods.directDepositFee().call() + const numDeposits = 16 + const singleDepositAmount = 2 + const amount = toBN(fee).muln(numDeposits * singleDepositAmount) + + await mintTokens(ddSender, amount) + await approveTokens(ddSender, config.poolAddress, amount) + + const ddFallback = ddSender + const diversifier = '35e48bf15982533e0b9d' // 10 bytes + const pk = '035b80d59edd72ff0eb3fcf7f7968395300e9c5d5b980de1920aa9d1f151191d' // 32 bytes + for (let i = 0; i < numDeposits; i++) { + await pool.PoolInstance.methods + .directDeposit(ddFallback, pool.denominator.mul(toBN(fee).muln(singleDepositAmount)), '0x' + diversifier + pk) + .send({ from: ddSender }) + } + + const events = await pool.PoolInstance.getPastEvents('SubmitDirectDeposit', { + fromBlock: 0, + toBlock: 'latest', + }) + const dds: DirectDeposit[] = events.map(e => { + const dd = e.returnValues + return { + sender: dd.sender, + nonce: dd.nonce, + fallbackUser: dd.fallbackUser, + zkAddress: { + diversifier: dd.zkAddress.diversifier, + pk: dd.zkAddress.pk, + }, + deposit: dd.deposit, + } + }) + const ddJob = await submitDirectDepositJob(dds) + const [poolJobId, memo] = await ddJob.waitUntilFinished(directDepositQueueEvents) + const poolJob = (await poolTxQueue.getJob(poolJobId)) as Job + await expectJobFinished(poolJob) + + const contractMemo: string = ( + await pool.PoolInstance.getPastEvents('Message', { + fromBlock: 0, + toBlock: 'latest', + }) + ).map(e => e.returnValues.message)[0] + + expect(memo).eq(contractMemo.slice(2)) + }) }) diff --git a/zp-relayer/test/worker-tests/utils.ts b/zp-relayer/test/worker-tests/utils.ts index b8774d1..b9df49e 100644 --- a/zp-relayer/test/worker-tests/utils.ts +++ b/zp-relayer/test/worker-tests/utils.ts @@ -1,11 +1,11 @@ import type { HttpProvider } from 'web3-core' +import type BN from 'bn.js' import Redis from 'ioredis' -import { web3 } from './web3' import { toBN } from 'web3-utils' +import { web3 } from './web3' import TokenAbi from '../abi/token-abi.json' -export const token = new web3.eth.Contract(TokenAbi as any, '0xe78A0F7E598Cc8b0Bb87894B0F60dD2a88d6a8Ab') -const denominator = toBN(1000000000) +export const token = new web3.eth.Contract(TokenAbi as any, process.env.RELAYER_TOKEN_ADDRESS) const minter = '0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1' function callRpcMethod(method: string, params: any[] = []) { @@ -25,13 +25,24 @@ function callRpcMethod(method: string, params: any[] = []) { }) } -export async function mintTokens(to: string, amount: number) { +export async function mintTokens(to: string, amount: number | BN, denominator = toBN(1000000000)) { + if (typeof amount === 'number') amount = toBN(amount) + await token.methods - .mint(to, denominator.muln(amount)) + .mint(to, denominator.mul(amount)) .send({ from: minter }) .once('transactionHash', () => mineBlock()) } +export async function approveTokens(from: string, to: string, amount: number | BN, denominator = toBN(1000000000)) { + if (typeof amount === 'number') amount = toBN(amount) + + await token.methods + .approve(to, denominator.mul(amount)) + .send({ from }) + .once('transactionHash', () => mineBlock()) +} + export function getTokenBalance(address: string) { return token.methods.balanceOf(address).call({ from: minter }) } diff --git a/zp-relayer/tx/TxManager.ts b/zp-relayer/tx/TxManager.ts new file mode 100644 index 0000000..8e3a4d7 --- /dev/null +++ b/zp-relayer/tx/TxManager.ts @@ -0,0 +1,106 @@ +import Web3 from 'web3' +import type { TransactionConfig } from 'web3-core' +import { isSameTransactionError } from '@/utils/web3Errors' +import { + addExtraGasPrice, + chooseGasPriceOptions, + EstimationType, + GasPrice, + GasPriceValue, + getGasPriceValue, +} from '@/services/gas-price' +import { getChainId } from '@/utils/web3' +import config from '@/configs/relayerConfig' +import { Mutex } from 'async-mutex' +import { logger } from '@/services/appLogger' +import { readNonce, updateNonce } from '@/utils/redisFields' + +export class TxManager { + nonce!: number + chainId!: number + mutex: Mutex + + constructor(private web3: Web3, private privateKey: string, private gasPrice: GasPrice) { + this.mutex = new Mutex() + } + + async init() { + this.nonce = await readNonce(true) + await updateNonce(this.nonce) + this.chainId = await getChainId(this.web3) + } + + async updateAndBumpGasPrice( + txConfig: TransactionConfig, + newGasPrice: GasPriceValue + ): Promise<[GasPriceValue | null, GasPriceValue]> { + const oldGasPrice = getGasPriceValue(txConfig) + if (oldGasPrice) { + const oldGasPriceWithExtra = addExtraGasPrice(oldGasPrice, config.minGasPriceBumpFactor, null) + return [oldGasPrice, chooseGasPriceOptions(oldGasPriceWithExtra, newGasPrice)] + } else { + return [null, newGasPrice] + } + } + + async prepareTx(txConfig: TransactionConfig, tLogger = logger, isResend = false) { + const release = await this.mutex.acquire() + try { + const gasPriceValue = await this.gasPrice.fetchOnce() + const newGasPriceWithExtra = addExtraGasPrice(gasPriceValue, config.gasPriceSurplus) + + let updatedTxConfig: TransactionConfig = {} + let newGasPrice: GasPriceValue + + if (isResend) { + if (typeof txConfig.nonce === 'undefined') { + throw new Error('Nonce should be set for re-send') + } + const [oldGasPrice, updatedGasPrice] = await this.updateAndBumpGasPrice(txConfig, newGasPriceWithExtra) + newGasPrice = updatedGasPrice + tLogger.warn('Updating gasPrice: %o -> %o', oldGasPrice, newGasPrice) + } else { + tLogger.info('Nonce', { nonce: this.nonce }) + newGasPrice = newGasPriceWithExtra + updatedTxConfig.nonce = this.nonce++ + updatedTxConfig.chainId = this.chainId + await updateNonce(this.nonce) + } + + updatedTxConfig = { + ...updatedTxConfig, + ...txConfig, + ...newGasPrice, + } + + const { transactionHash, rawTransaction } = await this.web3.eth.accounts.signTransaction( + updatedTxConfig, + this.privateKey + ) + return { + txHash: transactionHash as string, + rawTransaction: rawTransaction as string, + gasPrice: newGasPrice, + txConfig: updatedTxConfig, + } + } finally { + release() + } + } + + async sendTransaction(rawTransaction: string): Promise { + return new Promise((res, rej) => + // prettier-ignore + this.web3.eth.sendSignedTransaction(rawTransaction) + .once('transactionHash', () => res()) + .once('error', e => { + // Consider 'already known' errors as a successful send + if (isSameTransactionError(e)){ + res() + } else { + rej(e) + } + }) + ) + } +} diff --git a/zp-relayer/tx/signAndSend.ts b/zp-relayer/tx/signAndSend.ts deleted file mode 100644 index 5bb0e17..0000000 --- a/zp-relayer/tx/signAndSend.ts +++ /dev/null @@ -1,24 +0,0 @@ -import Web3 from 'web3' -import type { TransactionConfig } from 'web3-core' -import { isSameTransactionError } from '@/utils/web3Errors' - -export async function signTransaction(web3: Web3, txConfig: TransactionConfig, privateKey: string) { - const serializedTx = await web3.eth.accounts.signTransaction(txConfig, privateKey) - return [serializedTx.transactionHash as string, serializedTx.rawTransaction as string] -} - -export async function sendTransaction(web3: Web3, rawTransaction: string): Promise { - return new Promise((res, rej) => - // prettier-ignore - web3.eth.sendSignedTransaction(rawTransaction) - .once('transactionHash', () => res()) - .once('error', e => { - // Consider 'already known' errors as a successful send - if (isSameTransactionError(e)){ - res() - } else { - rej(e) - } - }) - ) -} diff --git a/zp-relayer/txProcessor.ts b/zp-relayer/txProcessor.ts index 3c4d38c..e673313 100644 --- a/zp-relayer/txProcessor.ts +++ b/zp-relayer/txProcessor.ts @@ -1,16 +1,18 @@ import Contract from 'web3-eth-contract' -import PoolAbi from './abi/pool-abi.json' import { AbiItem, toBN } from 'web3-utils' +import type { TxType } from 'zp-memo-parser' +import { DelegatedDepositsData, SnarkProof } from 'libzkbob-rs-node' +import type { PoolState } from './state/PoolState' +import PoolAbi from './abi/pool-abi.json' import { logger } from './services/appLogger' import { TRANSFER_INDEX_SIZE, ENERGY_SIZE, TOKEN_SIZE } from './utils/constants' -import { numToHex, flattenProof, truncateHexPrefix } from './utils/helpers' +import { numToHex, flattenProof, truncateHexPrefix, encodeProof, truncateMemoTxPrefix } from './utils/helpers' import { Delta, getTxProofField, parseDelta } from './utils/proofInputs' -import { SnarkProof, Proof } from 'libzkbob-rs-node' -import { TxType } from 'zp-memo-parser' -import { pool } from './pool' -import { TxPayload } from './queue/poolTxQueue' +import type { DirectDeposit, WorkerTx, WorkerTxType } from './queue/poolTxQueue' +import type { Circuit, IProver } from './prover/IProver' // @ts-ignore +// Used only to get `transact` method selector const PoolInstance = new Contract(PoolAbi as AbiItem[]) interface TxData { @@ -33,8 +35,8 @@ function buildTxData(txData: TxData) { const tokenAmount = numToHex(txData.delta.tokenAmount, TOKEN_SIZE) logger.debug(`DELTA ${transferIndex} ${energyAmount} ${tokenAmount}`) - const txFlatProof = flattenProof(txData.txProof) - const treeFlatProof = flattenProof(txData.treeProof) + const txFlatProof = encodeProof(txData.txProof) + const treeFlatProof = encodeProof(txData.treeProof) const memoMessage = txData.memo const memoSize = numToHex(toBN(memoMessage.length).divn(2), 4) @@ -62,18 +64,56 @@ function buildTxData(txData: TxData) { return data.join('') } -export async function processTx(tx: TxPayload) { - const { txType, txProof, rawMemo: memo, depositSignature } = tx +async function getTreeProof(state: PoolState, outCommit: string, prover: IProver) { + const { pub, sec, commitIndex } = state.getVirtualTreeProofInputs(outCommit) + + logger.debug(`Proving tree...`) + const treeProof = await prover.prove(pub, sec) + logger.debug(`Tree proved`) + return { treeProof, commitIndex } +} + +export async function getDirectDepositProof(deposits: DirectDeposit[], prover: IProver) { + const { + public: pub, + secret: sec, + memo, + out_commitment_hash: outCommit, + } = await DelegatedDepositsData.create( + deposits.map(d => { + return { + id: d.nonce, + receiver_d: toBN(d.zkAddress.diversifier).toString(10), + receiver_p: toBN(d.zkAddress.pk).toString(10), + denominated_amount: d.deposit, + } + }) + ) + const proof = await prover.prove(pub, sec) + return { proof, memo, outCommit } +} + +export interface ProcessResult { + data: string + commitIndex: number + outCommit: string + rootAfter: string + memo: string + nullifier?: string +} + +export async function buildTx( + tx: WorkerTx, + treeProver: IProver, + state: PoolState +): Promise { + const { txType, txProof, rawMemo, depositSignature } = tx const nullifier = getTxProofField(txProof, 'nullifier') const outCommit = getTxProofField(txProof, 'out_commit') const delta = parseDelta(getTxProofField(txProof, 'delta')) - const { pub, sec, commitIndex } = pool.optimisticState.getVirtualTreeProofInputs(outCommit) - - logger.debug(`Proving tree...`) - const treeProof = await Proof.treeAsync(pool.treeParams, pub, sec) - logger.debug(`Tree proved`) + const { treeProof, commitIndex } = await getTreeProof(state, outCommit, treeProver) const rootAfter = treeProof.inputs[1] const data = buildTxData({ @@ -84,8 +124,30 @@ export async function processTx(tx: TxPayload) { rootAfter: numToHex(toBN(rootAfter)), delta, txType, - memo, + memo: rawMemo, depositSignature, }) - return { data, commitIndex, rootAfter } + + const memo = truncateMemoTxPrefix(rawMemo, txType) + + return { data, commitIndex, outCommit, rootAfter, nullifier, memo } +} + +export async function buildDirectDeposits( + tx: WorkerTx, + treeProver: IProver, + state: PoolState +): Promise { + const outCommit = tx.outCommit + + const { treeProof, commitIndex } = await getTreeProof(state, outCommit, treeProver) + + const rootAfter = treeProof.inputs[1] + const indices = tx.deposits.map(d => d.nonce) + + const data: string = PoolInstance.methods + .appendDirectDeposits(rootAfter, indices, outCommit, flattenProof(tx.txProof.proof), flattenProof(treeProof.proof)) + .encodeABI() + + return { data, commitIndex, outCommit, rootAfter, memo: tx.memo } } diff --git a/zp-relayer/utils/EIP712SaltedPermit.ts b/zp-relayer/utils/EIP712SaltedPermit.ts index 74cc9a2..12b394a 100644 --- a/zp-relayer/utils/EIP712SaltedPermit.ts +++ b/zp-relayer/utils/EIP712SaltedPermit.ts @@ -1,4 +1,4 @@ -import config from '@/config' +import config from '@/configs/relayerConfig' import { recoverTypedSignature, SignTypedDataVersion } from '@metamask/eth-sig-util' import Web3 from 'web3' import TokenAbi from '@/abi/token-abi.json' diff --git a/zp-relayer/utils/constants.ts b/zp-relayer/utils/constants.ts index 04712a0..e6ec55f 100644 --- a/zp-relayer/utils/constants.ts +++ b/zp-relayer/utils/constants.ts @@ -4,6 +4,10 @@ const constants = { FALLBACK_RPC_URL_SWITCH_TIMEOUT: 60 * 60 * 1000, TX_QUEUE_NAME: 'tx', SENT_TX_QUEUE_NAME: 'sent', + DIRECT_DEPOSIT_QUEUE_NAME: 'dd-prove', + DIRECT_DEPOSIT_SET_NAME: 'dd:cache', + DIRECT_DEPOSIT_REPROCESS_NAME: 'dd:reprocess', + DIRECT_DEPOSIT_REPROCESS_INTERVAL: 60 * 1000, OUTPLUSONE: Constants.OUT + 1, TRANSFER_INDEX_SIZE: 12, ENERGY_SIZE: 28, @@ -17,7 +21,10 @@ const constants = { maxTimeout: 60000, randomize: true, }, - TRACE_ID: 'zkbob-support-id' as const, + MESSAGE_PREFIX_COMMON_V1: '0000', + HEADER_TRACE_ID: 'zkbob-support-id' as const, + HEADER_LIBJS: 'zkbob-libjs-version' as const, + LIBJS_MIN_VERSION: '2.0.0', } export = constants diff --git a/zp-relayer/utils/helpers.ts b/zp-relayer/utils/helpers.ts index 9953d6a..7d69cf3 100644 --- a/zp-relayer/utils/helpers.ts +++ b/zp-relayer/utils/helpers.ts @@ -1,12 +1,14 @@ +import fs from 'fs' +import crypto from 'crypto' +import type BN from 'bn.js' import type Web3 from 'web3' +import type { Mutex } from 'async-mutex' import type { Contract } from 'web3-eth-contract' -import type BN from 'bn.js' -import { padLeft, toBN } from 'web3-utils' -import { logger } from '@/services/appLogger' import type { SnarkProof } from 'libzkbob-rs-node' import { TxType } from 'zp-memo-parser' -import type { Mutex } from 'async-mutex' import promiseRetry from 'promise-retry' +import { padLeft, toBN } from 'web3-utils' +import { logger } from '@/services/appLogger' import { isContractCallError } from './web3Errors' const S_MASK = toBN('0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff') @@ -85,9 +87,12 @@ export function unpackSignature(packedSign: string) { return sig } -export function flattenProof(p: SnarkProof): string { - return [p.a, p.b.flat(), p.c] - .flat() +export function flattenProof(p: SnarkProof): string[] { + return [p.a, p.b, p.c].flat(2) +} + +export function encodeProof(p: SnarkProof): string { + return flattenProof(p) .map(n => { const hex = numToHex(toBN(n)) return hex @@ -235,3 +240,10 @@ export function contractCallRetry(contract: Contract, method: string, args: any[ } ) } + +export function getFileHash(path: string) { + const buffer = fs.readFileSync(path) + const hash = crypto.createHash('sha256') + hash.update(buffer) + return hash.digest('hex') +} diff --git a/zp-relayer/utils/redisFields.ts b/zp-relayer/utils/redisFields.ts index 896b627..5c57a20 100644 --- a/zp-relayer/utils/redisFields.ts +++ b/zp-relayer/utils/redisFields.ts @@ -1,7 +1,7 @@ import { logger } from '@/services/appLogger' import { redis } from '@/services/redisClient' import { web3 } from '@/services/web3' -import config from '@/config' +import config from '@/configs/relayerConfig' import { getNonce } from './web3' export enum RelayerKeys { diff --git a/zp-relayer/utils/web3.ts b/zp-relayer/utils/web3.ts index 35a9fb9..36aaee7 100644 --- a/zp-relayer/utils/web3.ts +++ b/zp-relayer/utils/web3.ts @@ -1,5 +1,5 @@ import type Web3 from 'web3' -import { Contract, PastEventOptions } from 'web3-eth-contract' +import type { Contract, PastEventOptions } from 'web3-eth-contract' import { logger } from '@/services/appLogger' export async function getNonce(web3: Web3, address: string) { diff --git a/zp-relayer/validation/validation.ts b/zp-relayer/validation/api/validation.ts similarity index 93% rename from zp-relayer/validation/validation.ts rename to zp-relayer/validation/api/validation.ts index e14116c..f95847b 100644 --- a/zp-relayer/validation/validation.ts +++ b/zp-relayer/validation/api/validation.ts @@ -3,8 +3,8 @@ import { isAddress } from 'web3-utils' import { Proof, SnarkProof } from 'libzkbob-rs-node' import { TxType } from 'zp-memo-parser' import type { PoolTx } from '@/pool' -import { TRACE_ID, ZERO_ADDRESS } from '@/utils/constants' -import config from '@/config' +import { HEADER_TRACE_ID, ZERO_ADDRESS } from '@/utils/constants' +import config from '@/configs/relayerConfig' const ajv = new Ajv({ allErrors: true, coerceTypes: true, useDefaults: true }) @@ -145,10 +145,10 @@ const AjvGetSiblingsSchema: JSONSchemaType<{ required: ['index'], } -const AjvTraceIdSchema: JSONSchemaType<{ [TRACE_ID]: string }> = { +const AjvTraceIdSchema: JSONSchemaType<{ [HEADER_TRACE_ID]: string }> = { type: 'object', - properties: { [TRACE_ID]: AjvNullableString }, - required: config.requireTraceId ? [TRACE_ID] : [], + properties: { [HEADER_TRACE_ID]: AjvNullableString }, + required: config.requireTraceId ? [HEADER_TRACE_ID] : [], } function checkErrors(schema: JSONSchemaType) { diff --git a/zp-relayer/validation/tx/common.ts b/zp-relayer/validation/tx/common.ts new file mode 100644 index 0000000..b09df10 --- /dev/null +++ b/zp-relayer/validation/tx/common.ts @@ -0,0 +1,54 @@ +import config from '@/configs/baseConfig' +import { logger } from '@/services/appLogger' +import { HEADER_TRACE_ID } from '@/utils/constants' + +export class TxValidationError extends Error { + name = 'TxValidationError' + constructor(message: string) { + super(message) + } +} + +type OptionError = Error | null +export async function checkAssertion(f: () => Promise | OptionError) { + const err = await f() + if (err) { + throw err + } +} + +export function checkSize(data: string, size: number) { + return data.length === size +} + +export async function checkScreener(address: string, traceId?: string) { + if (config.screenerUrl === null || config.screenerToken === null) { + return null + } + + const ACC_VALIDATION_FAILED = 'Internal account validation failed' + + const headers: Record = { + 'Content-type': 'application/json', + 'Authorization': `Bearer ${config.screenerToken}`, + } + + if (traceId) headers[HEADER_TRACE_ID] = traceId + + try { + const rawResponse = await fetch(config.screenerUrl, { + method: 'POST', + headers, + body: JSON.stringify({ address }), + }) + const response = await rawResponse.json() + if (response.result === true) { + return new TxValidationError(ACC_VALIDATION_FAILED) + } + } catch (e) { + logger.error('Request to screener failed', { error: (e as Error).message }) + return new TxValidationError(ACC_VALIDATION_FAILED) + } + + return null +} diff --git a/zp-relayer/validation/tx/validateDirectDeposit.ts b/zp-relayer/validation/tx/validateDirectDeposit.ts new file mode 100644 index 0000000..399024f --- /dev/null +++ b/zp-relayer/validation/tx/validateDirectDeposit.ts @@ -0,0 +1,70 @@ +import { toBN } from 'web3-utils' +import type { Contract } from 'web3-eth-contract' +import type { DirectDeposit } from '@/queue/poolTxQueue' +import { Helpers } from 'libzkbob-rs-node' +import { contractCallRetry } from '@/utils/helpers' +import { checkAssertion, checkScreener, TxValidationError } from './common' + +const SNARK_SCALAR_FIELD = toBN('21888242871839275222246405745257275088548364400416034343698204186575808495617') + +enum DirectDepositStatus { + Missing = '0', + Pending = '1', + Completed = '2', + Refunded = '3', +} + +interface DirectDepositStruct { + fallbackReceiver: string + sent: string + deposit: string + fee: string + timestamp: string + status: string + diversifier: string + pk: string +} + +function checkDirectDepositPK(pk: string) { + const bnPk = toBN(pk) + if (bnPk.gte(SNARK_SCALAR_FIELD)) { + throw new TxValidationError(`Direct deposit pk is out of snark scalar field: ${pk}`) + } + if (!Helpers.isInPrimeSubgroup(Helpers.strToNum(bnPk.toString(10)))) { + throw new TxValidationError(`Direct deposit pk is not in prime subgroup: ${pk}`) + } + return null +} + +async function checkDirectDepositConsistency(dd: DirectDeposit, directDepositContract: Contract) { + const ddFromContract: DirectDepositStruct = await contractCallRetry(directDepositContract, 'getDirectDeposit', [ + dd.nonce, + ]) + const errPrefix = `Direct deposit ${dd.nonce}` + + if (ddFromContract.status !== DirectDepositStatus.Pending) { + throw new TxValidationError(`${errPrefix} is not pending: ${ddFromContract.status})`) + } + + if (ddFromContract.fallbackReceiver !== dd.fallbackUser) { + throw new TxValidationError( + `${errPrefix} has incorrect user: expected ${dd.fallbackUser}, actual ${ddFromContract.fallbackReceiver})` + ) + } + + if (ddFromContract.deposit !== dd.deposit) { + throw new TxValidationError( + `${errPrefix} has incorrect amount: expected ${dd.deposit}, actual ${ddFromContract.deposit})` + ) + } + // TODO: we can also check other fields to detect inconsistency, but these two should be sufficient + + return null +} + +export async function validateDirectDeposit(dd: DirectDeposit, directDepositContract: Contract) { + await checkAssertion(() => checkDirectDepositPK(dd.zkAddress.pk)) + await checkAssertion(() => checkDirectDepositConsistency(dd, directDepositContract)) + await checkAssertion(() => checkScreener(dd.sender)) + await checkAssertion(() => checkScreener(dd.fallbackUser)) +} diff --git a/zp-relayer/validateTx.ts b/zp-relayer/validation/tx/validateTx.ts similarity index 73% rename from zp-relayer/validateTx.ts rename to zp-relayer/validation/tx/validateTx.ts index 2194b26..de136d0 100644 --- a/zp-relayer/validateTx.ts +++ b/zp-relayer/validation/tx/validateTx.ts @@ -1,45 +1,25 @@ import BN from 'bn.js' -import { toBN, AbiItem } from 'web3-utils' -import { TxType, TxData, WithdrawTxData, PermittableDepositTxData, getTxData } from 'zp-memo-parser' +import { toBN } from 'web3-utils' +import type { Contract } from 'web3-eth-contract' +import { TxType, TxData, getTxData } from 'zp-memo-parser' import { Proof, SnarkProof } from 'libzkbob-rs-node' -import { logger } from './services/appLogger' -import config from './config' -import type { Limits, Pool } from './pool' -import type { NullifierSet } from './state/nullifierSet' -import TokenAbi from './abi/token-abi.json' -import { web3 } from './services/web3' -import { contractCallRetry, numToHex, unpackSignature } from './utils/helpers' -import { recoverSaltedPermit } from './utils/EIP712SaltedPermit' -import { ZERO_ADDRESS, TRACE_ID } from './utils/constants' -import { TxPayload } from './queue/poolTxQueue' -import { getTxProofField, parseDelta } from './utils/proofInputs' -import type { PoolState } from './state/PoolState' - -const tokenContract = new web3.eth.Contract(TokenAbi as AbiItem[], config.tokenAddress) +import { logger } from '@/services/appLogger' +import config from '@/configs/relayerConfig' +import type { Limits, Pool } from '@/pool' +import type { NullifierSet } from '@/state/nullifierSet' +import { web3 } from '@/services/web3' +import { contractCallRetry, numToHex, truncateMemoTxPrefix, unpackSignature } from '@/utils/helpers' +import { recoverSaltedPermit } from '@/utils/EIP712SaltedPermit' +import { ZERO_ADDRESS, MESSAGE_PREFIX_COMMON_V1 } from '@/utils/constants' +import { getTxProofField, parseDelta } from '@/utils/proofInputs' +import type { TxPayload } from '@/queue/poolTxQueue' +import type { PoolState } from '@/state/PoolState' +import { checkAssertion, TxValidationError, checkSize, checkScreener } from './common' const ZERO = toBN(0) -export class TxValidationError extends Error { - name = 'TxValidationError' - constructor(message: string) { - super(message) - } -} - -type OptionError = Error | null -export async function checkAssertion(f: () => Promise | OptionError) { - const err = await f() - if (err) { - throw err - } -} - -export function checkSize(data: string, size: number) { - return data.length === size -} - -export async function checkBalance(address: string, minBalance: string) { - const balance = await contractCallRetry(tokenContract, 'balanceOf', [address]) +export async function checkBalance(token: Contract, address: string, minBalance: string) { + const balance = await contractCallRetry(token, 'balanceOf', [address]) const res = toBN(balance).gte(toBN(minBalance)) if (!res) { return new TxValidationError('Not enough balance for deposit') @@ -114,7 +94,6 @@ export function checkNonZeroWithdrawAddress(address: string) { * @param threshold "window" added to current relayer time, in seconds */ export function checkDeadline(signedDeadline: BN, threshold: number) { - logger.debug(`Deadline: ${signedDeadline}`) // Check native amount (relayer faucet) const currentTimestamp = new BN(Math.floor(Date.now() / 1000)) if (signedDeadline <= currentTimestamp.addn(threshold)) { @@ -145,18 +124,19 @@ export function checkLimits(limits: Limits, amount: BN) { return null } -async function checkDepositEnoughBalance(address: string, requiredTokenAmount: BN) { +async function checkDepositEnoughBalance(token: Contract, address: string, requiredTokenAmount: BN) { if (requiredTokenAmount.lte(toBN(0))) { throw new TxValidationError('Requested balance check for token amount <= 0') } - return checkBalance(address, requiredTokenAmount.toString(10)) + return checkBalance(token, address, requiredTokenAmount.toString(10)) } -async function getRecoveredAddress( - txType: TxType, +async function getRecoveredAddress( + txType: T, proofNullifier: string, - txData: TxData, + txData: TxData, + tokenContract: Contract, tokenAmount: BN, depositSignature: string | null ) { @@ -172,7 +152,7 @@ async function getRecoveredAddress( if (txType === TxType.DEPOSIT) { recoveredAddress = web3.eth.accounts.recover(nullifier, sig) } else if (txType === TxType.PERMITTABLE_DEPOSIT) { - const { deadline, holder } = txData as PermittableDepositTxData + const { deadline, holder } = txData as TxData const owner = web3.utils.toChecksumAddress(web3.utils.bytesToHex(Array.from(holder))) const spender = web3.utils.toChecksumAddress(config.poolAddress as string) const nonce = await contractCallRetry(tokenContract, 'nonces', [owner]) @@ -214,36 +194,12 @@ function checkPoolId(deltaPoolId: BN, contractPoolId: BN) { return new TxValidationError(`Incorrect poolId: given ${deltaPoolId}, expected ${contractPoolId}`) } -async function checkScreener(address: string, traceId?: string) { - if (config.screenerUrl === null || config.screenerToken === null) { +function checkMemoPrefix(memo: string, txType: TxType) { + const numItemsSuffix = truncateMemoTxPrefix(memo, txType).substring(4, 8) + if (numItemsSuffix === MESSAGE_PREFIX_COMMON_V1) { return null } - - const ACC_VALIDATION_FAILED = 'Internal account validation failed' - - const headers: Record = { - 'Content-type': 'application/json', - 'Authorization': `Bearer ${config.screenerToken}`, - } - - if (traceId) headers[TRACE_ID] = traceId - - try { - const rawResponse = await fetch(config.screenerUrl, { - method: 'POST', - headers, - body: JSON.stringify({ address }), - }) - const response = await rawResponse.json() - if (response.result === true) { - return new TxValidationError(ACC_VALIDATION_FAILED) - } - } catch (e) { - logger.error('Request to screener failed', { error: (e as Error).message }) - return new TxValidationError(ACC_VALIDATION_FAILED) - } - - return null + return new TxValidationError(`Memo prefix is incorrect: ${numItemsSuffix}`) } export async function validateTx( @@ -251,6 +207,8 @@ export async function validateTx( pool: Pool, traceId?: string ) { + await checkAssertion(() => checkMemoPrefix(rawMemo, txType)) + const buf = Buffer.from(rawMemo, 'hex') const txData = getTxData(buf, txType) @@ -280,23 +238,30 @@ export async function validateTx( let userAddress = ZERO_ADDRESS if (txType === TxType.WITHDRAWAL) { - const { nativeAmount, receiver } = txData as WithdrawTxData + const { nativeAmount, receiver } = txData as TxData userAddress = web3.utils.bytesToHex(Array.from(receiver)) logger.info('Withdraw address: %s', userAddress) await checkAssertion(() => checkNonZeroWithdrawAddress(userAddress)) await checkAssertion(() => checkNativeAmount(toBN(nativeAmount))) } else if (txType === TxType.DEPOSIT || txType === TxType.PERMITTABLE_DEPOSIT) { const requiredTokenAmount = tokenAmountWithFee.mul(pool.denominator) - userAddress = await getRecoveredAddress(txType, nullifier, txData, requiredTokenAmount, depositSignature) + userAddress = await getRecoveredAddress( + txType, + nullifier, + txData, + pool.TokenInstance, + requiredTokenAmount, + depositSignature + ) logger.info('Deposit address: %s', userAddress) - await checkAssertion(() => checkDepositEnoughBalance(userAddress, requiredTokenAmount)) + await checkAssertion(() => checkDepositEnoughBalance(pool.TokenInstance, userAddress, requiredTokenAmount)) } const limits = await pool.getLimitsFor(userAddress) await checkAssertion(() => checkLimits(limits, delta.tokenAmount)) if (txType === TxType.PERMITTABLE_DEPOSIT) { - const { deadline } = txData as PermittableDepositTxData + const { deadline } = txData as TxData logger.info('Deadline: %s', deadline) await checkAssertion(() => checkDeadline(toBN(deadline), config.permitDeadlineThresholdInitial)) } diff --git a/zp-relayer/workers/directDepositWorker.ts b/zp-relayer/workers/directDepositWorker.ts new file mode 100644 index 0000000..942051e --- /dev/null +++ b/zp-relayer/workers/directDepositWorker.ts @@ -0,0 +1,61 @@ +import { Job, Worker } from 'bullmq' +import { logger } from '@/services/appLogger' +import { withErrorLog } from '@/utils/helpers' +import { DIRECT_DEPOSIT_QUEUE_NAME } from '@/utils/constants' +import { DirectDeposit, poolTxQueue, WorkerTxType, WorkerTxTypePriority } from '@/queue/poolTxQueue' +import type { IDirectDepositWorkerConfig } from './workerTypes' +import { getDirectDepositProof } from '@/txProcessor' + +export async function createDirectDepositWorker({ redis, directDepositProver }: IDirectDepositWorkerConfig) { + const workerLogger = logger.child({ worker: 'dd-prove' }) + const WORKER_OPTIONS = { + autorun: false, + connection: redis, + // TODO: this worker can run jobs in parallel + // We can set higher concurrency if RemoteProver is used + concurrency: 2, + } + + const directDepositWorkerProcessor = async (job: Job) => { + const jobLogger = workerLogger.child({ jobId: job.id }) + + const directDeposits = job.data + + jobLogger.info('Building direct deposit proof', { count: directDeposits.length }) + const { proof, memo: rawMemo, outCommit } = await getDirectDepositProof(directDeposits, directDepositProver) + + const memo = rawMemo.toString('hex') + const poolJob = await poolTxQueue.add( + '', + { + type: WorkerTxType.DirectDeposit, + transactions: [ + { + deposits: directDeposits, + txProof: proof, + outCommit, + memo, + }, + ], + }, + { + priority: WorkerTxTypePriority[WorkerTxType.DirectDeposit], + } + ) + jobLogger.info('Added poolTx job', { id: poolJob.id }) + + return [poolJob.id as string, memo] as [string, string] + } + + const directDepositWorker = new Worker( + DIRECT_DEPOSIT_QUEUE_NAME, + job => withErrorLog(() => directDepositWorkerProcessor(job)), + WORKER_OPTIONS + ) + + directDepositWorker.on('error', e => { + workerLogger.info('DIRECT-DEPOSIT_WORKER ERR: %o', e) + }) + + return directDepositWorker +} diff --git a/zp-relayer/workers/poolTxWorker.ts b/zp-relayer/workers/poolTxWorker.ts index 39ae4cf..1a3c784 100644 --- a/zp-relayer/workers/poolTxWorker.ts +++ b/zp-relayer/workers/poolTxWorker.ts @@ -1,30 +1,30 @@ -import { toBN, toWei } from 'web3-utils' +import type { Logger } from 'winston' import { Job, Worker } from 'bullmq' -import { web3, web3Redundant } from '@/services/web3' +import { toBN } from 'web3-utils' +import { web3 } from '@/services/web3' import { logger } from '@/services/appLogger' -import { poolTxQueue, BatchTx, PoolTxResult, TxPayload } from '@/queue/poolTxQueue' +import { poolTxQueue, BatchTx, PoolTxResult, WorkerTx, WorkerTxType } from '@/queue/poolTxQueue' import { TX_QUEUE_NAME } from '@/utils/constants' -import { readNonce, updateNonce } from '@/utils/redisFields' -import { buildPrefixedMemo, truncateMemoTxPrefix, waitForFunds, withErrorLog, withMutex } from '@/utils/helpers' -import { signTransaction, sendTransaction } from '@/tx/signAndSend' -import { Pool, pool } from '@/pool' +import { buildPrefixedMemo, waitForFunds, withErrorLog, withMutex } from '@/utils/helpers' +import { pool } from '@/pool' import { sentTxQueue } from '@/queue/sentTxQueue' -import { processTx } from '@/txProcessor' -import config from '@/config' -import { addExtraGasPrice, EstimationType, GasPrice, getMaxRequiredGasPrice } from '@/services/gas-price' -import type { Mutex } from 'async-mutex' -import { getChainId } from '@/utils/web3' -import { getTxProofField } from '@/utils/proofInputs' -import type { Redis } from 'ioredis' +import { buildDirectDeposits, ProcessResult, buildTx } from '@/txProcessor' +import config from '@/configs/relayerConfig' +import { getMaxRequiredGasPrice } from '@/services/gas-price' import { isInsufficientBalanceError } from '@/utils/web3Errors' -import { TxValidationError } from '@/validateTx' - -export async function createPoolTxWorker( - gasPrice: GasPrice, - validateTx: (tx: TxPayload, pool: Pool, traceId?: string) => Promise, - mutex: Mutex, - redis: Redis -) { +import { TxValidationError } from '@/validation/tx/common' +import type { IPoolWorkerConfig } from './workerTypes' + +interface HandlerConfig { + type: T + tx: WorkerTx + processResult: ProcessResult + logger: Logger + traceId?: string + jobId: string +} + +export async function createPoolTxWorker({ redis, mutex, txManager, validateTx, treeProver }: IPoolWorkerConfig) { const workerLogger = logger.child({ worker: 'pool' }) const WORKER_OPTIONS = { autorun: false, @@ -32,111 +32,128 @@ export async function createPoolTxWorker( concurrency: 1, } - let nonce = await readNonce(true) - await updateNonce(nonce) + async function handleTx({ + type, + tx, + processResult, + logger, + traceId, + jobId, + }: HandlerConfig): Promise<[string, string]> { + const { data, outCommit, commitIndex, memo, rootAfter, nullifier } = processResult + + const gas = config.relayerGasLimit + const { txHash, rawTransaction, gasPrice, txConfig } = await txManager.prepareTx({ + data, + gas: gas.toString(), + to: config.poolAddress, + }) + logger.info('Sending tx', { txHash }) + try { + await txManager.sendTransaction(rawTransaction) + } catch (e) { + if (isInsufficientBalanceError(e as Error)) { + const minimumBalance = gas.mul(toBN(getMaxRequiredGasPrice(gasPrice))) + logger.error('Insufficient balance, waiting for funds', { minimumBalance: minimumBalance.toString(10) }) + await Promise.all([poolTxQueue.pause(), sentTxQueue.pause()]) + waitForFunds( + web3, + config.relayerAddress, + () => Promise.all([poolTxQueue.resume(), sentTxQueue.resume()]), + minimumBalance, + config.insufficientBalanceCheckTimeout + ) + } + logger.error('Tx send failed; it will be re-sent later', { txHash, error: (e as Error).message }) + } + + const prefixedMemo = buildPrefixedMemo(outCommit, txHash, memo) + + pool.optimisticState.updateState(commitIndex, outCommit, prefixedMemo) + + if (nullifier) { + logger.debug('Adding nullifier %s to OS', nullifier) + await pool.optimisticState.nullifiers.add([nullifier]) + } + + const sentJob = await sentTxQueue.add( + txHash, + { + poolJobId: jobId, + root: rootAfter, + outCommit, + commitIndex, + truncatedMemo: memo, + nullifier, + txConfig, + txPayload: { transactions: tx, traceId, type }, + prevAttempts: [[txHash, gasPrice]], + }, + { + delay: config.sentTxDelay, + } + ) + logger.info(`Added sentTxWorker job: ${sentJob.id}`) + return [txHash, sentJob.id as string] + } - const CHAIN_ID = await getChainId(web3) - const poolTxWorkerProcessor = async (job: Job) => { + const poolTxWorkerProcessor = async (job: Job, PoolTxResult[]>) => { const sentTxNum = await sentTxQueue.count() if (sentTxNum >= config.maxSentQueueSize) { throw new Error('Optimistic state overflow') } - const txs = job.data.transactions - const traceId = job.data.traceId + const { transactions: txs, traceId, type } = job.data const jobLogger = workerLogger.child({ jobId: job.id, traceId }) jobLogger.info('Processing...') jobLogger.info('Received %s txs', txs.length) const txHashes: [string, string][] = [] - for (const tx of txs) { - const { gas, amount, rawMemo, txType, txProof } = tx - - await validateTx(tx, pool, traceId) - const { data, commitIndex, rootAfter } = await processTx(tx) + const baseConfig = { + logger: jobLogger, + traceId, + type, + jobId: job.id as string, + } + let handlerConfig: HandlerConfig - jobLogger.info(`nonce: ${nonce}`) + for (const payload of txs) { + let processResult: ProcessResult + if (type === WorkerTxType.DirectDeposit) { + const tx = payload as WorkerTx + jobLogger.info('Received direct deposit', { number: txs.length }) - const txConfig = { - data, - nonce, - value: toWei(toBN(amount)), - gas, - to: config.poolAddress, - chainId: CHAIN_ID, - } - const gasPriceValue = await gasPrice.fetchOnce() - const gasPriceWithExtra = addExtraGasPrice(gasPriceValue, config.gasPriceSurplus) - const [txHash, rawTransaction] = await signTransaction( - web3, - { - ...txConfig, - ...gasPriceWithExtra, - }, - config.relayerPrivateKey - ) - jobLogger.info('Sending tx', { txHash }) - try { - await sendTransaction(web3Redundant, rawTransaction) - } catch (e) { - if (isInsufficientBalanceError(e as Error)) { - const minimumBalance = toBN(gas).mul(toBN(getMaxRequiredGasPrice(gasPriceWithExtra))) - jobLogger.error('Insufficient balance, waiting for funds', { minimumBalance: minimumBalance.toString(10) }) - await Promise.all([poolTxQueue.pause(), sentTxQueue.pause()]) - waitForFunds( - web3, - config.relayerAddress, - () => Promise.all([poolTxQueue.resume(), sentTxQueue.resume()]), - minimumBalance, - config.insufficientBalanceCheckTimeout - ) - throw e + if (tx.deposits.length === 0) { + logger.warn('Empty direct deposit batch, skipping') + continue } - jobLogger.error('Tx send failed; it will be re-sent later', { txHash, error: (e as Error).message }) - } - - await updateNonce(++nonce) - const nullifier = getTxProofField(txProof, 'nullifier') - const outCommit = getTxProofField(txProof, 'out_commit') + processResult = await buildDirectDeposits(tx, treeProver, pool.optimisticState) + } else if (type === WorkerTxType.Normal) { + const tx = payload as WorkerTx + await validateTx(tx, pool, traceId) - const truncatedMemo = truncateMemoTxPrefix(rawMemo, txType) - const prefixedMemo = buildPrefixedMemo(outCommit, txHash, truncatedMemo) - - pool.optimisticState.updateState(commitIndex, outCommit, prefixedMemo) - jobLogger.debug('Adding nullifier %s to OS', nullifier) - await pool.optimisticState.nullifiers.add([nullifier]) + processResult = await buildTx(tx, treeProver, pool.optimisticState) + } else { + throw new Error(`Unknown tx type: ${type}`) + } - const sentJob = await sentTxQueue.add( - txHash, - { - poolJobId: job.id as string, - root: rootAfter, - outCommit, - commitIndex, - truncatedMemo, - nullifier, - txConfig, - txPayload: tx, - prevAttempts: [[txHash, gasPriceWithExtra]], - traceId, - }, - { - delay: config.sentTxDelay, - priority: nonce, - } - ) - jobLogger.info(`Added sentTxWorker job: ${sentJob.id}`) + handlerConfig = { + ...baseConfig, + tx: payload, + processResult, + } - txHashes.push([txHash, sentJob.id as string]) + const res = await handleTx(handlerConfig) + txHashes.push(res) } return txHashes } - const poolTxWorker = new Worker( + const poolTxWorker = new Worker, PoolTxResult[]>( TX_QUEUE_NAME, job => withErrorLog( diff --git a/zp-relayer/workers/sentTxWorker.ts b/zp-relayer/workers/sentTxWorker.ts index 42bd80b..a18f37b 100644 --- a/zp-relayer/workers/sentTxWorker.ts +++ b/zp-relayer/workers/sentTxWorker.ts @@ -1,26 +1,21 @@ import type Redis from 'ioredis' -import type { Mutex } from 'async-mutex' import { toBN } from 'web3-utils' import type { TransactionReceipt, TransactionConfig } from 'web3-core' import { Job, Worker } from 'bullmq' -import config from '@/config' +import { DIRECT_DEPOSIT_REPROCESS_NAME } from '@/utils/constants' +import config from '@/configs/relayerConfig' import { pool } from '@/pool' -import { web3, web3Redundant } from '@/services/web3' +import { web3 } from '@/services/web3' import { logger } from '@/services/appLogger' -import { - GasPrice, - EstimationType, - chooseGasPriceOptions, - addExtraGasPrice, - getMaxRequiredGasPrice, -} from '@/services/gas-price' +import { getMaxRequiredGasPrice } from '@/services/gas-price' import { buildPrefixedMemo, withErrorLog, withLoop, withMutex } from '@/utils/helpers' import { OUTPLUSONE, SENT_TX_QUEUE_NAME } from '@/utils/constants' import { isGasPriceError, isInsufficientBalanceError, isNonceError, isSameTransactionError } from '@/utils/web3Errors' import { SendAttempt, SentTxPayload, sentTxQueue, SentTxResult, SentTxState } from '@/queue/sentTxQueue' -import { sendTransaction, signTransaction } from '@/tx/signAndSend' -import { poolTxQueue } from '@/queue/poolTxQueue' +import { DirectDepositTxPayload, poolTxQueue, WorkerTxType } from '@/queue/poolTxQueue' import { getNonce } from '@/utils/web3' +import type { ISentWorkerConfig } from './workerTypes' +import type { TxManager } from '@/tx/TxManager' const REVERTED_SET = 'reverted' const RECHECK_ERROR = 'Waiting for next check' @@ -60,10 +55,12 @@ async function handleMined( pool.optimisticState.addTx(commitIndex * OUTPLUSONE, Buffer.from(prefixedMemo, 'hex')) // Add nullifier to confirmed state and remove from optimistic one - jobLogger.info('Adding nullifier %s to PS', nullifier) - await pool.state.nullifiers.add([nullifier]) - jobLogger.info('Removing nullifier %s from OS', nullifier) - await pool.optimisticState.nullifiers.remove([nullifier]) + if (nullifier) { + jobLogger.info('Adding nullifier %s to PS', nullifier) + await pool.state.nullifiers.add([nullifier]) + jobLogger.info('Removing nullifier %s from OS', nullifier) + await pool.optimisticState.nullifiers.remove([nullifier]) + } const node1 = pool.state.getCommitment(commitIndex) const node2 = pool.optimisticState.getCommitment(commitIndex) @@ -111,16 +108,23 @@ async function handleReverted( if (!wj?.id) continue waitingJobIds.push(wj.id) - const { txPayload, traceId } = wj.data - const transactions = [txPayload] + const { txPayload } = wj.data + let reschedulePromise: Promise - // To not mess up traceId we add each transaction separately - const reschedulePromise = poolTxQueue.add(txHash, { transactions, traceId }).then(j => { - const newPoolJobId = j.id as string - newPoolJobIdMapping[wj.data.poolJobId] = newPoolJobId - return newPoolJobId + reschedulePromise = poolTxQueue.add(txHash, { + type: txPayload.type, + transactions: [txPayload.transactions], + traceId: txPayload.traceId, }) - reschedulePromises.push(reschedulePromise) + + // To not mess up traceId we add each transaction separately + reschedulePromises.push( + reschedulePromise.then(j => { + const newPoolJobId = j.id as string + newPoolJobIdMapping[wj.data.poolJobId] = newPoolJobId + return newPoolJobId + }) + ) } jobLogger.info('Marking ids %j as failed', waitingJobIds) await markFailed(redis, waitingJobIds) @@ -132,35 +136,29 @@ async function handleReverted( return [SentTxState.REVERT, txHash, rescheduledIds] as SentTxResult } -async function handleResend( +async function handleResend( txConfig: TransactionConfig, - gasPrice: GasPrice, + txManager: TxManager, job: Job, jobLogger = logger ) { const [lastHash, lastGasPrice] = job.data.prevAttempts.at(-1) as SendAttempt + jobLogger.warn('Tx %s is not mined, resending', lastHash) - const fetchedGasPrice = await gasPrice.fetchOnce() - const oldWithExtra = addExtraGasPrice(lastGasPrice, config.minGasPriceBumpFactor, null) - const newWithExtra = addExtraGasPrice(fetchedGasPrice, config.gasPriceSurplus, null) - - const newGasPrice = chooseGasPriceOptions(oldWithExtra, newWithExtra) - - jobLogger.warn('Tx %s is not mined; updating gasPrice: %o -> %o', lastHash, lastGasPrice, newGasPrice) - - const newTxConfig = { - ...txConfig, - ...newGasPrice, - } + const { + txConfig: newTxConfig, + gasPrice, + txHash, + rawTransaction, + } = await txManager.prepareTx(txConfig, jobLogger, true) - const [newTxHash, rawTransaction] = await signTransaction(web3, newTxConfig, config.relayerPrivateKey) - job.data.prevAttempts.push([newTxHash, newGasPrice]) - jobLogger.info('Re-send tx', { txHash: newTxHash }) + job.data.prevAttempts.push([txHash, gasPrice]) + jobLogger.info('Re-send tx', { txHash }) try { - await sendTransaction(web3Redundant, rawTransaction) + await txManager.sendTransaction(rawTransaction) } catch (e) { const err = e as Error - jobLogger.warn('Tx resend failed', { error: err.message, txHash: newTxHash }) + jobLogger.warn('Tx resend failed', { error: err.message, txHash }) if (isGasPriceError(err) || isSameTransactionError(err)) { // Tx wasn't sent successfully, but still update last attempt's // gasPrice to be accounted in the next iteration @@ -171,10 +169,10 @@ async function handleResend( // We don't want to take into account last gasPrice increase job.data.prevAttempts.at(-1)![1] = lastGasPrice - const minimumBalance = toBN(txConfig.gas!).mul(toBN(getMaxRequiredGasPrice(newGasPrice))) + const minimumBalance = toBN(txConfig.gas!).mul(toBN(getMaxRequiredGasPrice(gasPrice))) jobLogger.error('Insufficient balance, waiting for funds', { minimumBalance: minimumBalance.toString(10) }) } else if (isNonceError(err)) { - jobLogger.warn('Nonce error', { error: err.message, txHash: newTxHash }) + jobLogger.warn('Nonce error', { error: err.message, txHash }) // Throw suppressed error to be treated as a warning throw new Error(RECHECK_ERROR) } @@ -184,7 +182,7 @@ async function handleResend( // Overwrite old tx recorded in optimistic state db with new tx hash const { truncatedMemo, outCommit, commitIndex } = job.data - const prefixedMemo = buildPrefixedMemo(outCommit, newTxHash, truncatedMemo) + const prefixedMemo = buildPrefixedMemo(outCommit, txHash, truncatedMemo) pool.optimisticState.addTx(commitIndex * OUTPLUSONE, Buffer.from(prefixedMemo, 'hex')) // Update job @@ -192,10 +190,10 @@ async function handleResend( ...job.data, txConfig: newTxConfig, }) - await job.updateProgress({ txHash: newTxHash, gasPrice: newGasPrice }) + await job.updateProgress({ txHash, gasPrice }) } -export async function createSentTxWorker(gasPrice: GasPrice, mutex: Mutex, redis: Redis) { +export async function createSentTxWorker({ redis, mutex, txManager }: ISentWorkerConfig) { const workerLogger = logger.child({ worker: 'sent-tx' }) const WORKER_OPTIONS = { autorun: false, @@ -234,14 +232,13 @@ export async function createSentTxWorker(gasPrice: Gas } const sentTxWorkerProcessor = async (job: Job, resendNum: number = 1) => { - const jobLogger = workerLogger.child({ jobId: job.id, traceId: job.data.traceId, resendNum }) + const jobLogger = workerLogger.child({ jobId: job.id, traceId: job.data.txPayload.traceId, resendNum }) jobLogger.info('Verifying job %s', job.data.poolJobId) - const { prevAttempts, txConfig } = job.data + const { prevAttempts, txConfig, txPayload } = job.data // Any thrown web3 error will re-trigger re-send loop iteration const [tx, shouldReprocess] = await checkMined(prevAttempts, txConfig.nonce as number) - // Should always be defined if (shouldReprocess) { // TODO: handle this case later @@ -256,7 +253,7 @@ export async function createSentTxWorker(gasPrice: Gas jobLogger.error('Too many unsuccessful re-sends') } - await handleResend(txConfig, gasPrice, job, jobLogger) + await handleResend(txConfig, txManager, job, jobLogger) // Tx re-send successful // Throw error to re-run job after delay and @@ -267,6 +264,11 @@ export async function createSentTxWorker(gasPrice: Gas if (tx.status) { return await handleMined(tx, job.data, jobLogger) } else { + if (txPayload.type === WorkerTxType.DirectDeposit) { + const deposits = (txPayload.transactions as DirectDepositTxPayload).deposits + jobLogger.info('Adding reverted direct deposit to reprocess list', { count: deposits.length }) + await redis.lpush(DIRECT_DEPOSIT_REPROCESS_NAME, ...deposits.map(d => JSON.stringify(d))) + } return await handleReverted(tx, job.id as string, redis, jobLogger) } } diff --git a/zp-relayer/workers/workerTypes.ts b/zp-relayer/workers/workerTypes.ts new file mode 100644 index 0000000..c084beb --- /dev/null +++ b/zp-relayer/workers/workerTypes.ts @@ -0,0 +1,26 @@ +import type { Redis } from 'ioredis' +import type { Mutex } from 'async-mutex' +import type { TxManager } from '@/tx/TxManager' +import type { Pool } from '@/pool' +import type { TxPayload } from '@/queue/poolTxQueue' +import type { Circuit, IProver } from '@/prover' + +export interface IWorkerBaseConfig { + redis: Redis +} + +export interface IPoolWorkerConfig extends IWorkerBaseConfig { + validateTx: (tx: TxPayload, pool: Pool, traceId?: string) => Promise + treeProver: IProver + mutex: Mutex + txManager: TxManager +} + +export interface ISentWorkerConfig extends IWorkerBaseConfig { + mutex: Mutex + txManager: TxManager +} + +export interface IDirectDepositWorkerConfig extends IWorkerBaseConfig { + directDepositProver: IProver +}