From 3764710f25f5a059b6bbd08e7afdc9f33467b863 Mon Sep 17 00:00:00 2001 From: Carlos Medeiros Date: Wed, 25 Sep 2024 14:52:22 +0100 Subject: [PATCH] some work on c --- app/rust/src/parser/note.rs | 116 +++++++++++++++++ app/src/crypto.h | 3 + app/src/crypto_helper.c | 12 ++ app/src/crypto_helper.h | 3 +- app/src/parser.c | 50 +++++--- app/src/parser_impl.c | 10 ++ app/src/parser_impl.h | 2 + app/src/parser_txdef.h | 1 + app/src/parser_utils.c | 42 +++++++ app/src/parser_utils.h | 31 +++++ tests/testcases.json | 243 ++++-------------------------------- tests/ui_tests.cpp | 3 - 12 files changed, 281 insertions(+), 235 deletions(-) create mode 100644 app/rust/src/parser/note.rs create mode 100644 app/src/parser_utils.c create mode 100644 app/src/parser_utils.h diff --git a/app/rust/src/parser/note.rs b/app/rust/src/parser/note.rs new file mode 100644 index 0000000..67625c9 --- /dev/null +++ b/app/rust/src/parser/note.rs @@ -0,0 +1,116 @@ +use core::{mem::MaybeUninit, ptr::addr_of_mut}; + +use arrayref::array_ref; +use jubjub::{AffinePoint, Scalar}; +use nom::{bytes::complete::take, number::complete::le_u64}; + +use crate::{ + crypto::{decrypt, read_scalar}, + ironfish::{errors::IronfishError, public_address::PublicAddress}, + parser::AssetIdentifier, + parser::FromBytes, +}; + +use super::{memo::Memo, ParserError, ENCRYPTED_NOTE_SIZE, MAC_SIZE}; + +/// A note (think bank note) represents a value in the owner's "account". +/// When spending, proof that the note exists in the tree needs to be provided, +/// along with a nullifier key that is made public so the owner cannot attempt +/// to spend that note again.447903 +/// +/// When receiving funds, a new note needs to be created for the new owner +/// to hold those funds. +pub struct Note { + /// Asset identifier the note is associated with + pub(crate) asset_id: AssetIdentifier, + + /// A public address for the owner of the note. + pub(crate) owner: PublicAddress, + + /// Value this note represents. + pub(crate) value: u64, + + /// A random value generated when the note is constructed. + /// This helps create zero knowledge around the note, + /// allowing the owner to prove they have the note without revealing + /// anything else about it. + pub(crate) randomness: jubjub::Fr, + + /// Arbitrary note the spender can supply when constructing a spend so the + /// receiver has some record from whence it came. + /// Note: While this is encrypted with the output, it is not encoded into + /// the proof in any way. + pub(crate) memo: Memo, + + /// A public address for the sender of the note. + pub(crate) sender: PublicAddress, +} + +impl Note { + /// Create a note from its encrypted representation, given the spender's + /// view key. + /// + /// The note is stored on the [`crate::outputs::OutputDescription`] in + /// encrypted form. The spender encrypts it when they construct the output + /// using a shared secret derived from the owner's public key. + /// + /// This function allows the owner to decrypt the note using the derived + /// shared secret and their own view key. + #[inline(never)] + pub(crate) fn from_spender_encrypted( + // public_address: SubgroupPoint, + public_address: AffinePoint, + shared_secret: &[u8; 32], + encrypted_bytes: &[u8; ENCRYPTED_NOTE_SIZE + MAC_SIZE], + ) -> Result { + let mut this = MaybeUninit::uninit(); + Note::decrypt_note_parts(shared_secret, encrypted_bytes, &mut this) + .map_err(|_| IronfishError::FailedXChaCha20Poly1305Decryption)?; + + let owner = PublicAddress(public_address); + + let out = this.as_mut_ptr(); + unsafe { + addr_of_mut!((*out).owner).write(owner); + } + + Ok(unsafe { this.assume_init() }) + } + + #[inline(never)] + fn decrypt_note_parts( + shared_secret: &[u8; 32], + encrypted_bytes: &[u8; ENCRYPTED_NOTE_SIZE + MAC_SIZE], + out: &mut MaybeUninit, + ) -> Result<(), ParserError> { + let out = out.as_mut_ptr(); + + let plaintext_bytes: [u8; ENCRYPTED_NOTE_SIZE] = + decrypt(shared_secret, encrypted_bytes).map_err(|_| ParserError::UnexpectedError)?; + + // Fr + let (rem, randomness) = read_scalar(&plaintext_bytes[..])?; + + let (rem, value) = le_u64(rem)?; + + // Memo + let memo = unsafe { &mut *addr_of_mut!((*out).memo).cast() }; + let rem = Memo::from_bytes_into(rem, memo)?; + + // Asset Identifier + let asset_id = unsafe { &mut *addr_of_mut!((*out).asset_id).cast() }; + let rem = AssetIdentifier::from_bytes_into(rem, asset_id)?; + let asset_id = unsafe { asset_id.assume_init() }; + + // PublicAddress + let sender = unsafe { &mut *addr_of_mut!((*out).sender).cast() }; + let rem = PublicAddress::from_bytes_into(rem, sender)?; + + unsafe { + addr_of_mut!((*out).randomness).write(randomness); + addr_of_mut!((*out).value).write(value); + } + + Ok(()) + } +} diff --git a/app/src/crypto.h b/app/src/crypto.h index b82cba0..8d4257f 100644 --- a/app/src/crypto.h +++ b/app/src/crypto.h @@ -31,6 +31,9 @@ extern uint32_t hdPath[HDPATH_LEN_DEFAULT]; zxerr_t crypto_fillKeys(uint8_t *buffer, uint16_t bufferLen, key_kind_e requestedKey, uint16_t *cmdResponseLen); zxerr_t crypto_sign(const uint8_t publickeyRandomness[32], const uint8_t txnHash[32], uint8_t *output, uint16_t outputLen); +#if defined(LEDGER_SPECIFIC) +zxerr_t crypto_generateSaplingKeys(uint8_t *output, uint16_t outputLen, key_kind_e requestedKey); +#endif #ifdef __cplusplus } #endif diff --git a/app/src/crypto_helper.c b/app/src/crypto_helper.c index 87c23c3..cc1722b 100644 --- a/app/src/crypto_helper.c +++ b/app/src/crypto_helper.c @@ -220,3 +220,15 @@ zxerr_t crypto_signRedjubjub(const uint8_t randomizedPrivateKey[KEY_LENGTH], con return zxerr_ok; } + +#if defined(LEDGER_SPECIFIC) +parser_error_t crypto_get_ovk(uint8_t ovk[KEY_LENGTH]) { + uint8_t buffer[4 * KEY_LENGTH] = {0}; + + if (crypto_generateSaplingKeys(buffer, sizeof(buffer), ViewKeys) != zxerr_ok) { + return parser_unexpected_error; + } + memcpy(ovk, buffer + 3 * KEY_LENGTH, KEY_LENGTH); + return parser_ok; +} +#endif diff --git a/app/src/crypto_helper.h b/app/src/crypto_helper.h index 8494dd4..1e2d4b4 100644 --- a/app/src/crypto_helper.h +++ b/app/src/crypto_helper.h @@ -24,6 +24,7 @@ extern "C" { #include #include "coin.h" +#include "crypto.h" #include "keys_def.h" #include "parser_common.h" #include "zxerror.h" @@ -44,7 +45,7 @@ parser_error_t convertKey(const uint8_t spendingKey[KEY_LENGTH], const uint8_t m bool reduceWideByte); parser_error_t generate_key(const uint8_t expandedKey[KEY_LENGTH], constant_key_t keyType, uint8_t output[KEY_LENGTH]); parser_error_t computeIVK(const ak_t ak, const nk_t nk, ivk_t ivk); - +parser_error_t crypto_get_ovk(uint8_t ovk[KEY_LENGTH]); parser_error_t transaction_signature_hash(parser_tx_t *txObj, uint8_t output[HASH_LEN]); zxerr_t crypto_signRedjubjub(const uint8_t randomizedPrivateKey[KEY_LENGTH], const uint8_t rng[RNG_LEN], const uint8_t transactionHash[HASH_LEN], uint8_t output[REDJUBJUB_SIGNATURE_LEN]); diff --git a/app/src/parser.c b/app/src/parser.c index dfaf56a..0c18291 100644 --- a/app/src/parser.c +++ b/app/src/parser.c @@ -25,6 +25,7 @@ #include "crypto.h" #include "parser_common.h" #include "parser_impl.h" +#include "parser_utils.h" parser_error_t parser_init_context(parser_context_t *ctx, const uint8_t *buffer, uint16_t bufferSize) { ctx->offset = 0; @@ -64,7 +65,10 @@ parser_error_t parser_validate(parser_context_t *ctx) { parser_error_t parser_getNumItems(const parser_context_t *ctx, uint8_t *num_items) { UNUSED(ctx); - *num_items = 5; + + // Txversion + (ownner + amount + asset id) * n_output + fee + expiration + *num_items = 1 + ctx->tx_obj->outputs.elements * 3 + 2; + if (*num_items == 0) { return parser_unexpected_number_items; } @@ -85,6 +89,7 @@ static parser_error_t checkSanity(uint8_t numItems, uint8_t displayIdx) { return parser_ok; } +uint8_t out_idx = 0; parser_error_t parser_getItem(const parser_context_t *ctx, uint8_t displayIdx, char *outKey, uint16_t outKeyLen, char *outVal, uint16_t outValLen, uint8_t pageIdx, uint8_t *pageCount) { UNUSED(pageIdx); @@ -96,29 +101,44 @@ parser_error_t parser_getItem(const parser_context_t *ctx, uint8_t displayIdx, c CHECK_ERROR(checkSanity(numItems, displayIdx)); cleanOutput(outKey, outKeyLen, outVal, outValLen); - switch (displayIdx) { + uint64_t total_out_elements = ctx->tx_obj->outputs.elements * ELEMENTS_PER_OUTPUT; + uint8_t tmp_idx = displayIdx; + + if (tmp_idx > 0 && tmp_idx <= total_out_elements) { + tmp_idx = (tmp_idx % ELEMENTS_PER_OUTPUT) + OUTPUT_ELEMENT_OFFSET; + if (tmp_idx == 2) { + out_idx++; + } + } else if (tmp_idx > total_out_elements) { + tmp_idx -= total_out_elements - ELEMENTS_PER_OUTPUT; + } + + switch (tmp_idx) { case 0: - snprintf(outKey, outKeyLen, "Spends"); - snprintf(outVal, outValLen, "%d", (uint8_t)ctx->tx_obj->spends.elements); + snprintf(outKey, outKeyLen, "Tx Version"); + snprintf(outVal, outValLen, "V%d", (uint8_t)ctx->tx_obj->transactionVersion); return parser_ok; case 1: - snprintf(outKey, outKeyLen, "Outputs"); - snprintf(outVal, outValLen, "%d", (uint8_t)ctx->tx_obj->outputs.elements); + snprintf(outKey, outKeyLen, "Amount %d", out_idx - 1); + // snprintf(outVal, outValLen, "%d", (uint8_t)ctx->tx_obj->outputs.elements); return parser_ok; case 2: - snprintf(outKey, outKeyLen, "Mints"); - snprintf(outVal, outValLen, "%d", (uint8_t)ctx->tx_obj->mints.elements); + snprintf(outKey, outKeyLen, "Owner %d", out_idx - 1); + // snprintf(outVal, outValLen, "%d", (uint8_t)ctx->tx_obj->mints.elements); return parser_ok; case 3: - snprintf(outKey, outKeyLen, "Burns"); - snprintf(outVal, outValLen, "%d", (uint8_t)ctx->tx_obj->burns.elements); + snprintf(outKey, outKeyLen, "AssetID %d", out_idx - 1); + // snprintf(outVal, outValLen, "%d", (uint8_t)ctx->tx_obj->burns.elements); return parser_ok; - case 4: { - snprintf(outKey, outKeyLen, "TxnHash"); - pageStringHex(outVal, outValLen, (const char *)ctx->tx_obj->transactionHash, - sizeof(ctx->tx_obj->transactionHash), pageIdx, pageCount); + case 4: + snprintf(outKey, outKeyLen, "Fee"); + return _toStringBalance(&ctx->tx_obj->fee, COIN_AMOUNT_DECIMAL_PLACES, "", COIN_TICKER, outVal, outValLen, + pageIdx, pageCount); + return parser_ok; + case 5: + snprintf(outKey, outKeyLen, "Expiration"); + snprintf(outVal, outValLen, "%d", ctx->tx_obj->expiration); return parser_ok; - } default: break; } diff --git a/app/src/parser_impl.c b/app/src/parser_impl.c index d55dc78..88a5f91 100644 --- a/app/src/parser_impl.c +++ b/app/src/parser_impl.c @@ -139,5 +139,15 @@ parser_error_t _read(parser_context_t *ctx, parser_tx_t *v) { } CHECK_ERROR(transaction_signature_hash(v, v->transactionHash)); + +#if defined(LEDGER_SPECIFIC) + CHECK_ERROR(crypto_get_ovk(v->ovk)); +#else + // Testing OVK + uint8_t buffer[32] = {0x49, 0xba, 0xd8, 0x39, 0x5e, 0xf4, 0x48, 0xeb, 0x00, 0x48, 0xaf, 0x13, 0x2b, 0x5c, 0x94, 0x25, + 0x79, 0x02, 0x47, 0x36, 0xd4, 0xc3, 0xcf, 0xd6, 0x85, 0xb2, 0x41, 0xb9, 0x94, 0xf8, 0xf8, 0xe5}; + memcpy(v->ovk, buffer, sizeof(buffer)); +#endif + return parser_ok; } diff --git a/app/src/parser_impl.h b/app/src/parser_impl.h index 3fcf711..09f0bd8 100644 --- a/app/src/parser_impl.h +++ b/app/src/parser_impl.h @@ -25,6 +25,8 @@ extern "C" { #endif +#define ELEMENTS_PER_OUTPUT 3 +#define OUTPUT_ELEMENT_OFFSET 1 /** * @brief Checks that there are at least SIZE bytes available in the buffer. * @param CTX Context diff --git a/app/src/parser_txdef.h b/app/src/parser_txdef.h index ba06b19..976e256 100644 --- a/app/src/parser_txdef.h +++ b/app/src/parser_txdef.h @@ -124,6 +124,7 @@ typedef struct { bytes_t randomizedPublicKey; // redjubjub::PublicKey, bytes_t publicKeyRandomness; + uint8_t ovk[32]; bytes_t bindingSignature; // Not part of the incoming txn but it's used to compute signatures diff --git a/app/src/parser_utils.c b/app/src/parser_utils.c new file mode 100644 index 0000000..b0b7fd0 --- /dev/null +++ b/app/src/parser_utils.c @@ -0,0 +1,42 @@ +/******************************************************************************* + * (c) 2018 - 2024 Zondax AG + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + ********************************************************************************/ +#include "parser_utils.h" + +#include "coin.h" +#include "crypto_helper.h" +#include "zxformat.h" +#include "zxmacros.h" + +parser_error_t _toStringBalance(int64_t *amount, uint8_t decimalPlaces, const char postfix[], const char prefix[], + char *outValue, uint16_t outValueLen, uint8_t pageIdx, uint8_t *pageCount) { + char bufferUI[200] = {0}; + if (int64_to_str(bufferUI, sizeof(bufferUI), *amount) != NULL) { + return parser_unexpected_value; + } + + if (intstr_to_fpstr_inplace(bufferUI, sizeof(bufferUI), decimalPlaces) == 0) { + return parser_unexpected_value; + } + + if (z_str3join(bufferUI, sizeof(bufferUI), prefix, postfix) != zxerr_ok) { + return parser_unexpected_buffer_end; + } + + number_inplace_trimming(bufferUI, 1); + + pageString(outValue, outValueLen, bufferUI, pageIdx, pageCount); + return parser_ok; +} diff --git a/app/src/parser_utils.h b/app/src/parser_utils.h new file mode 100644 index 0000000..775f34a --- /dev/null +++ b/app/src/parser_utils.h @@ -0,0 +1,31 @@ +/******************************************************************************* + * (c) 2018 - 2024 Zondax AG + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + ********************************************************************************/ +#pragma once + +#include "parser_common.h" +#include "parser_txdef.h" + +#ifdef __cplusplus +extern "C" { +#endif + +parser_error_t _toStringBalance(int64_t *amount, uint8_t decimalPlaces, const char postfix[], const char prefix[], + char *outValue, uint16_t outValueLen, uint8_t pageIdx, uint8_t *pageCount); + +#ifdef __cplusplus +} + +#endif diff --git a/tests/testcases.json b/tests/testcases.json index 5c4ba56..bf5caa9 100644 --- a/tests/testcases.json +++ b/tests/testcases.json @@ -1,224 +1,35 @@ [ { - "index": 1, - "name": "1_ore_send", - "blob": "01010000000000000002000000000000000000000000000000000000000000000000000000000000000a000000347ca57c522acb8fc0a6f269b9bffb441b36a6c1c6cd4f2352012c1ad7eb5cd833c627142117be8c324c3faa39a0759d590e154dca395837b83068dc1a53140c33c627142117be8c324c3faa39a0759d590e154dca395837b83068dc1a53140cb44d31ad452f54838f91b41feac7419d2c7538c500ce5510199ddba05c8c6947f23254a8ece7b18a3cb7144fc77cebd2a882241ce2564d5b8f3cf766a5387ff1b1b10f1b6e5ab9d74177fcf455a3dab3e895d9c88cba1e08978d590ddaac0a900c1d22ab951b1fa4d85b37e637b0a7e9c118dd7705446c8f8e3f74880c921d421fe1022bc147cba9c32d4775e034268e8edac5005de514e39f60ae3561a1cdf9ed5c2137ba6c9524a2bc24fb7736f69d6d82a0754b944545e221a715627714dc2382f596661db49e4db2159d5bf48cac2f4ace8a03384665c824c59535bd126ea2f39339326a5e6291c94093c26358bfc0a6cc9d5fda8aaf4dc1be846309385604000000cb3768974e51464440bba4bc12052e6a063c679ae2c2be04cd6e7fda68b2f6270000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096449bab99c0059bc198fd1207283fed067c3132be69344a154cba4b84adb1637c574aab48ccdbcca4079deae4463079b734d8a53e9bed7d662d14bef21c657787623afcbc49068d9cb1b9a4c0c7991112768ad4d8b822c6e0427161094344520eb46b09c2ba4a87e88be90da4cd353205dc6c4487ca4544f0af249fa5f35cee9e480b201b4c89c770a33a7248ccf1e5a0995b32e320eaaa28b3e822b37f53cdcc600de3c7ec95ef87d616fd667a7d4d3e99976ae7384fd14a1039ad634ddffb5feb8a5ff1610891f82d84ccd75ccbd2863aed80a9c097136942c1e70b289c5f8200b9801c782a39559b9ab66cbb60dd733695311d674617dc85f16ea0dbe112467e1a0fd20d0600147b2c53b82c49c8f457151bc9b606287ea61fea172246bb676d3bf0ac07b38d7d4bbe917ce03fff93735a7899947ffc882737796725624427a21d7f6e1c2ef1000268e25e2e55191a3ebe8cc82b8918f74f79744d55a9521ff03e9cf868e8f9afbeaf063a0cf5aebc09712d0f5a05984601f6d5fbd26b8108dbbce9756c7a9c37ddba51ecf7a1f2635dadb37b15e259f19ef28806e44fad7ea0baaf3b4446957270a1adf1e61032eb030ecb33047f4784608b2dd9f35e9f136fe180c83c4542f9d3e00ecb4037f438fa7300acd6d1ac6d47db9136c5d4f28d952ac43ffbea3304f6dd9af41d0c9a022f6261b9320775d78c31032fb0f088c2c2c18ab6ce3f94b3610746ad985924706a788052cf79738d12c672706eb54cfc3f8b4815718f42575d746439e7bbb1bbb597c46282f6d99324b14a88d083822fe15bfb042616d9a346456b500d5e2350c9590eb2d408813341e19d9f3ca9d882c701458b3e857304927df7f1159e1cfe14aec82a05cc741517b13feee40211305be6ff649b7a091d6a415a8bb6452686c689a8643c874f899e8082685081a24bff433d158fddc55e71157fc20cab138f60e28d43b75689bb96414d1bd9f0c3971fa4fd73e11518d61dc599713d61bd698f9a379dc61a523b05c7a9e45f41373d7ee34bcad836935cc9d265066e42c93964a53ceeb21fdb0fd40fd3e57f5ec5aaca7d067184e5005c5d4eb6303a82cf0cc3f74593d51fcb2506ca00341548968605850fe76b66c8f3cbdd2cb1d536035b5e803950006860f419530494e8a24204dd5bbdd41bc90244d4fc8e4a1cadd00612397344f211555beb57f9814a0314cba421ab095750a800c8d5f8015e4c17cb52e8a7094f4c3555f1d8eca52eb8907da8c9115e87d3757f18e4c6bfccea0a885b9f10021f4256ef25c0dc66059f587718cfe3560a73d0274027fc9ec2cedf8ec2204e8e916f9aa9f56c30e10e48aebc9f43982ac9deffd3a81835a6e3d6f945bb6b6e9f3a267c09d66290842bff4b3eb0443f860df6b5c851e1aec95e37afa24b4e6d81b1ef548738d5603933f620e5a475f6596196a71785ad4af7b4b2b9648b05deefc22c620d52a2e88c4c06244d38bd6170e897b5708ebd169130abd88c84a319ca6ffae43dd18c7597747ba81e752bd7c44cf4b74b878421b3903502", - "output": - [ - "Fee: 0.00000000", - "Funds sent:", - "[1/1] | Amount: 0.00000001", - "[1/1] | To: f40ff5c315e640c8a07215e2c78eadee58ca54bcc44bd02d57d9906e55cc7202", - "[1/1] | From: 76fbdde4eeb81e6fc02a8232fe8d296744d0286edc82cd5a763a1e51102fb15b", - "[1/1] | Memo: " - ], - "output_expert": - [ - "Fee: 0.00000000", - "Outputs:", - "[1/1] | Amount: 0.00000001", - "[1/1] | To: f40ff5c315e640c8a07215e2c78eadee58ca54bcc44bd02d57d9906e55cc7202", - "[1/1] | From: 76fbdde4eeb81e6fc02a8232fe8d296744d0286edc82cd5a763a1e51102fb15b", - "[1/1] | Memo: ", - "[1/1] | Asset ID: 51f33a2f14f92735e562dc658a5639279ddca3d5079a6d1242b2a588a9cbf44c", - "[1/1] | Asset Name: $IRON", - "Spends:", - "[1/1] | Nullifier: cb3768974e51464440bba4bc12052e6a063c679ae2c2be04cd6e7fda68b2f627", - "[1/1] | Commitment: a2f39339326a5e6291c94093c26358bfc0a6cc9d5fda8aaf4dc1be8463093856", - "[1/1] | Size: 4" - ] - }, - { - "index": 2, - "name": "1_send_1_mint_1_burn", - "blob": "01010000000000000003000000000000000100000000000000010000000000000000000000000000000a0000008e59c0d4af05488e032a3b3b3840bceac510f6a525ec8fe64ad321d560a1e55866af4f3193329ba32acbc099dfaa5bf6eeac52a675852399b9f106abbb1b450266af4f3193329ba32acbc099dfaa5bf6eeac52a675852399b9f106abbb1b450286d29791fd4d136ce4e55aeb1f3ca90f0c6de2843595d61f85c0a78df0ebb739913c4c666fee1f1d151d6cd8d32e683189cb161857cb899c8a480edc6d317b8727ecc219009e8d129940897390cb19e8cf997812197ab1f54d94cf71abc894ab18c0f714799a06e56835c1d9ba4b6b3a860d65aadb4a94d00e432b8f970fe7e28286f58972ffd0bea1a107bcd4dd2320920c1b11230b81a14d851361edd77882a0e710fc247ba12cbf0d16105b24edea7afe5e9d33053ba1e5d4702b00086699f2f43df3d2468a79bd0baab0b65e31dfe1efaa3f57f99485eb034e970b95a76ea2f39339326a5e6291c94093c26358bfc0a6cc9d5fda8aaf4dc1be846309385604000000cb3768974e51464440bba4bc12052e6a063c679ae2c2be04cd6e7fda68b2f62700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1a98e0a1eab70dca8392ea8f575bc776a07fca39a82e50e1baa5bc899c6eb37f1b88bf8a721873fb46fbedf13afb5988f544a3f7b85786dd62889972f79b01aca58a5a678e8142be955a20a1207ba28e39084eaa40d1571b528f22c56a3c69906d4a69a6eb36f2fe38b8ca84614317459ca04952073e6b643141de770fbbc0a60b67e117956c1c6b4650b80f6ddf07f86a02f6d2ee808ab1922bd04aecaac057fee92111f0894dcd4e51b70cba0345c96eba6445f292b6bfff1e536e6d33587d5750f7ee6cebb964d381b9daca37ac7ac899a3f8eca47798f629d935f512825832b1ca4a3ea66c225e60ba236eb26cd4de0e7a0bdfb72aa3c64d41aaa32b33f119b6548078e316e57f2d1ed40b10804537556b2706537c0a09bc963022183f29377d6e96a528309affc9cf9c5b6f1a6d88d42d46bd81ad77a341a995c35d949cb04bcfc3d32fd4b72603517dfab005a01f094ce6af26d43ca6216caf2041fb678940bb961a95e444ec81c0fda3e86003da0a9ecefd5687993c5cbc7d4dbed7c17144db5e650a22a7cc580a1af0ace1d3d029eb9b293aef2d8e0f238f039fed4f42da52b0c324cdcca8d4e13c773c2db38b11ef8a903c8bc3c6f2c9cbefa842bc563b2803f8507ea181fbbc1d98db7ec54404a2b031f9f01e3abe39f77f807e661cf2b25d5904482f364cfba4827ec649d7bc42add9eb15866c6c8838b282fdcc0fe5e9f9492d8778f038ac5d7d872416c29ef2bc9578cae8fbf9f068cc7e3fbb940d0362f640dc2925150f3f44980c7f978560d896adb91b3514fe230a0736ba71a2a424e612b2be093ba933933740dce18d63fdb4b52bba088b9e0dd9f7dd4ce47aa850a0717790a41866c5bc8df2c3753558b8bbb5c251d88e8f94e6683149452c6d56954f367af2c7e39ce7035ea5f2bd9dddc16598e8445c1f874668f3551a2d1df39b9dca8ad82fe013713c9a24b07ae3e2fc022f922d1e2dc717a036bf95289d2fa45d8b0e3362796f8314123e12ac62523586739becf7c15dc245ba996d2bdb862c1bfe89bdbe01e34caee40b82aba1e21897df37ad1e630c67a5749b74a9276ed85835dbf8495230b012c69a6c1b5b4f7ae4712d056301ed33b75dc1797961799742b5ac5c656e1d84d7ac1c346c4d40f0a1869e79e023dd78f0a434eecba00b821475a9e92ca684d014f24c7fb8c6568400c172557eac8d4b12052f29d263d9a0308085785448aaf28e45a6755ddc219b8545c58638bb8d06b7063a17af5e1b0ac13cea1817526fa965320ab40a913343862c9c99974daefec558fcfe219afa0ebbf4708124b962dfa31c6a6cae61b004759063b912dd3e3bf51f92eca88e7602f1caeaaa1cb80d1463bd81fb82d97523fad76d108fd8db1e1ec6c480c7765c9a0bbe9708c33b5dbb787e6e14137855fd7715f87d4d5df6b1c5177faa03cdb57836a0d24daa26c4487c523804ba9f2afcf28dd5953e877233e2964b28dfa1b7f139220b3fde89148a906a170d53d4881a1ec1b8211ca3b59e6e780b5ab269f5d9052106a63bacfc3faef335430f89def5f1965e9774b8a25064bf7510288a5a81161b44f1ed1fdb8811b1b11623a55563518166a1d2c9addf137d8c7d1d01154279870deceb62dbad072fc7ccede68cb6c321284e86faadee9f4178c3849a04c7f2b4bc36f9be4235c21329909ae4b71508c967fcc32b7b0b0cd9c32cf9b9ce05869047c7a16d913483ca3f607d78b4ee4329d6b48c48c4b5e8a2c76245b13f7cf7ea57e6f93b061d33f00fc63bbfade74d6caaf047cf743608c4f8f779b4b5f8cd23592578542f6282d45cde599f833c10306cf81d9f051e98af44034b2da71125eb57e92b2de5efa31567959027eb777a47f275c7b882c56be193d9d6247699e740a966c4440d74166db27292d7bfa0d12b738e14e670042df5b429131daaec97ffbbcce6e0dd218bc97c08f6d01c7dc9521affd2037cfafb380c40993ef492f5dafa94eaadf4fb1f2e9c4f9f5f9aaf4c450ee1955329c5971e0c3a6efd3e25262b40672861a75a30016cde63c288aa0f9afabeac2db72e5e65d582a909527cd2384f2635acfc834fddd3f3024a44f7ead356f0b2769dca7de4c7a45ae859d951320c915591d4691bd248593fd6d2c0804ddc3427b59dac2804d5ab34f267129eba4431cf8dceec7be81afbbdc0669441e0066af4f3193329ba32acbc099dfaa5bf6eeac52a675852399b9f106abbb1b45028ef544248ae290798f862367299106f31a23bbdec73f87afff3dce46f023ab707d55b0e259649833de14957d7742e188851b50c108ebe096580c540a799fa530d77adc6194b091c09a901e3d742458ab23dd7f0a603ffd2e3537e435bbf6b9de041d905eba877f6e37c80689dab5480627708b6e0c926219e5625a37c372cc50f65943a0fa3a277ec97ecfb6e1e0eb1686c17cf3ce1d1d0e559d63dac258c2d2e443d0a153591904bac5d559bb20ec4cfd2895a8679d6096a1358909f263a71576fbdde4eeb81e6fc02a8232fe8d296744d0286edc82cd5a763a1e51102fb15b74657374000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000439050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000051f33a2f14f92735e562dc658a5639279ddca3d5079a6d1242b2a588a9cbf44c0200000000000000483e7c4647098f4b4f74ea407c81601b87495917d1f5505a703fc67d046bb6d27579e4f481fd98fe6f0516ff51a3f2de9fe46ffdcf1f89a61ff7b5fc050e1503", - "output": - [ - "Fee: 0.00000000", - "Funds sent:", - "[1/1] | Amount: 0.00000001", - "[1/1] | To: f40ff5c315e640c8a07215e2c78eadee58ca54bcc44bd02d57d9906e55cc7202", - "[1/1] | From: 76fbdde4eeb81e6fc02a8232fe8d296744d0286edc82cd5a763a1e51102fb15b", - "[1/1] | Memo: ", - "Mints:", - "[1/1] | Asset ID: 2295a46b40bcb346cbb1c9a4eed4f2a27d37ad9606d34514ccb9ee776e6fdf53", - "[1/1] | Asset Name: test", - "[1/1] | Value: 0.00001337", - "Burns:", - "[1/1] | Asset ID: 51f33a2f14f92735e562dc658a5639279ddca3d5079a6d1242b2a588a9cbf44c", - "[1/1] | Asset Name: $IRON", - "[1/1] | Value: 0.00000002" - ], - "output_expert": - [ - "Fee: 0.00000000", - "Outputs:", - "[1/1] | Amount: 0.00000001", - "[1/1] | To: f40ff5c315e640c8a07215e2c78eadee58ca54bcc44bd02d57d9906e55cc7202", - "[1/1] | From: 76fbdde4eeb81e6fc02a8232fe8d296744d0286edc82cd5a763a1e51102fb15b", - "[1/1] | Memo: ", - "[1/1] | Asset ID: 51f33a2f14f92735e562dc658a5639279ddca3d5079a6d1242b2a588a9cbf44c", - "[1/1] | Asset Name: $IRON", - "Spends:", - "[1/1] | Nullifier: cb3768974e51464440bba4bc12052e6a063c679ae2c2be04cd6e7fda68b2f627", - "[1/1] | Commitment: a2f39339326a5e6291c94093c26358bfc0a6cc9d5fda8aaf4dc1be8463093856", - "[1/1] | Size: 4", - "Mints:", - "[1/1] | Asset ID: 2295a46b40bcb346cbb1c9a4eed4f2a27d37ad9606d34514ccb9ee776e6fdf53", - "[1/1] | Asset Name: test", - "[1/1] | Value: 0.00001337", - "Burns:", - "[1/1] | Asset ID: 51f33a2f14f92735e562dc658a5639279ddca3d5079a6d1242b2a588a9cbf44c", - "[1/1] | Asset Name: $IRON", - "[1/1] | Value: 0.00000002" - ] - }, - { - "index": 3, - "name": "1_ore", - "blob": "01000000000000000001000000000000000100000000000000000000000000000000000000000000000a000000b54a1ca4a227fd3698b33c1aee5bf7fd387103e7328c6f374e826137a66e47b6c0b83e69ae1c14aea084755924b2eb51a6ab72018c4aedc6f9ce857a3bbe83088706190b263da7023885b3d43a2f840b01260be182ac267809946a63d1d1beb26c8690df3fc3510564c4cfa4545081eb83558df1cc12daf0a68975675bf40b8a5ffaa71df5df073677a2ac299cf95e653d69a2928a58cb311e97c35d64e02d530258d1b96b958542f9d03b8f7e4dc982d9dc025b73e01c62ff5b63db8f75c9c3d4d3ad6be8c8b01c0e2ffdf4cfe8b31089411356b40b479b988896ba853299dba2b4afa8e823a6524f21bbf96de133524db1da461639a3ff5108d8542db5ea675b23fa52c4d6cd0013bd17925c9597fb1c8180f1f53b248e36e007310c74551fe9024caddec27965ef9505fd149806174f9f66155ea45a89757ee71187223841cea69376e576bc635d42b73a480957e1f289e6d201f692a657fbc04e6efbf86a7281e6a0b8c6127e051d6fd54a74b95ee010555c5fcf6ee9bf465eb49694b7a07a67ab76fcaa260cc76225966ee849e569e5e518c764fb45138c947b901b9fe3d5200b785c23f90190dffb425715850cf3e526b3ecabbc265b39bca249e68be71cdb9c26a370204ce9f615920c9dc6a467b297f2a44d3628038debde52ff0968c25169892a3eededacffc4dd90ea833d157cbf0502c9584c801df237d1697e46ddcbce2b703179b429c621e84ea1562ce438ccac5b3bf2bf88a6d2231c03f70731165abcef89d18b34fdcb96244ebd408dc1d6c24448cdf0b280934ac1f242394f7661a6a49e08bbc0b83e69ae1c14aea084755924b2eb51a6ab72018c4aedc6f9ce857a3bbe83089655c9788ef2715293196053a0cef05abc7e8c004523454e2a112e1d839dc88b8cb034696bcc81a652ab28a0a006afb0a4818e72a15626190fb05b8b60db36eec50682042c4d6515aa43d309af9284fa8a7e3759902c9527423ee4fde2efe8500283eac589982ecf49e55e60f0baa32701ed210467401a7aee9d9a55c3d94a8465910599a64820aec14685c045ef974cad41014dfa9a7ec5b90fd4b122eeea4392ba0cb0741f47328e5438c8e9b586b7898f0e9c2fe004a532794e34a5a353cc76fbdde4eeb81e6fc02a8232fe8d296744d0286edc82cd5a763a1e51102fb15b6d696e74206f6e6c7900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000048ba8aedc8ce29bc830c03c9f4058deb2b23d975f47275687962a38de3e5d40701431586e73b5c2db6c382d54c9e28a78b78f1cfaaae21c77a8ec7df004e640a", - "output": [ - "Fee: 0.00000000", - "Mints:", - "[1/1] | Asset ID: c2aaedb64fa466b9c9efa2e9118b17686014ad97576b1a30c56814ba013c9114", - "[1/1] | Asset Name: mint only", - "[1/1] | Value: 0.00000001" - ], - "output_expert": [ - "Fee: 0.00000000", - "Mints:", - "[1/1] | Asset ID: c2aaedb64fa466b9c9efa2e9118b17686014ad97576b1a30c56814ba013c9114", - "[1/1] | Asset Name: mint only", - "[1/1] | Value: 0.00000001" - ] - }, - { - "index": 4, - "name": "max_mint", - "blob": "01010000000000000003000000000000000100000000000000010000000000000000000000000000000a00000064604bbc95cbf00d5e5558777375b78b49f6610a27c715090665d2334e7b8d66838f309d66f80e6a5961ff9847be7ee0f5590e3a328594211925618148c0af06838f309d66f80e6a5961ff9847be7ee0f5590e3a328594211925618148c0af06a69294c150493ff47e57d6b71e203f9a269a778be75d21b39f43d56d51c1505926ed7a1767f6b0f090f7f092074fc5ddaf46ca820302d8b144934c92e598ad1e336570b88e9853ba9eb564e5f94758b388a9ae7fbb522340ff6f7e282f50817903dd9bc631fed1686bca66555f64adc21aa7279de3bf708062a96a1363ef570f14f5f2af6ace3d37ec00a00827194f65a24fefba8b34ca855113700198b49e3dc2768496796a6849592ff524dc2039815fd9f4ac91dce7c4dd0bcca98445f4bee6738532667e629953d3cf5f43234f9a34f04ba9d36dc34af856a4f7f09b7470a2f39339326a5e6291c94093c26358bfc0a6cc9d5fda8aaf4dc1be846309385604000000cb3768974e51464440bba4bc12052e6a063c679ae2c2be04cd6e7fda68b2f62700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000983e72377c4fea317e71fb9be73f9b92f98a2d08bfbc8ee446045818e9c30cde0bf556d855af50ac513380fa1d5ff76b899a2288bda1ab3d650fb0e2e45e628849e5dbe73a43f35f814c5bff74fe2a0e4826c805822274a9581a0ef047770b6409ed9437b89adeb9e17cde8826368479271f7882de24fcc04759556e49557b84a92c3b664e28637de1331f587ead0e0badae7235057a5f78bfd1f0d63b04654b1372ca23274f40e80268698fe822098a81dfb677b37f4d038d3d56dcfd88c1dbeec673d6d0def56e1d9e9afd86b65201746955cdaef5f7228ba04f1b91264bb95d32719631f5867cdc614cd9584507c9572ded0560f1a73c2e5a13287e98481953bd644671ae96cfca20a25ac35e91b701551330ac37221df86fd551c574a84b3ec9f576ae4688adc4090735a5ba9ed42ebf5fd31f8c5c9c0b11a7e17a72d4e87aa91deafed705ba6b68890ef0d3e305760ffce4a2e9e3644a1f70256991c813e0ea4f7f8fa233bce17344c358e4010e59080fb70a16ddd651d006c659ca7a1f0ebc446a6726f94a2a2cef69153f705e997550de5fb958d711a1ce6d5f873b1c29675975a83474311b1efe8eb876795e6bcc3afe9d1f37f8331b559aab4a53a8d95ad9e61708ac717066a78487ff0a93de58d7a503a2024d3e13c11068b13242f8f313d24f46849afa9800e5de604d4b1ccc0c8001eb3c23e5a6a753f94a9552820df87435e30cf9a3aca9d34e0b5f68b3f889587c84e1512d0e0d9c4e3239fc628fb278d0006cf36b5fd5d97df5a00c46e17fd601387ba9b9bf371da25e06bda02e23853991315c983651502db6ed1c480deeeaf9b5ba190fcc3bf3ba458f78a43e2498995eb47f01e93b50206404f6bce58be14abc7f1fc29c52a007bae7f69104f3e3e64acac93168be332be4f8571fa6de1136eca4e58bf4708aa16351e6c1b0d551a050527375fd3355061f6d106f8bacb4151d0caaf711ba1cba041223aea3a0ab3ae45992112af1046e03e14f48f0c6d15af9ebdf8cb76381f2ed0af3c3228527b8f678bd3774edfd87c391c2abaa694a6aacf526856b83f501ca6318aca7d9ddb3ff231f4c53262c57f1b30d7af7193b03d39687539297625ae02f6141c49168bf878db9e0c7f2209e4ce67e5b387f3dfbe309569d3539a9fdd97a5d807692fc6f81eb2d31054783579dcc96943a2cf5eb20a11f98030ec424a10c57e9506cea0e266d1120b3e0cb030c44f68e85de5c7a574a367c77f09ba319a2d73b9cbf0ce70a0e185cc30aa228c8ec1fe5bba70e108e11893c0ea8dd2899da3b5feda4d8b30a072de02a3e512f0f438c3b2833a356590d150e46005b5dd6587cf09e6894f921ab97acc93e3c9f39eced670a2844aefe79a2b16cf4d2e275fdd78ccb6b6ecf7a6339384b09b242ee37552893d2d3ac63fb48255d1bfe2f3b03085e6d457fa66d1ac482be735146025c13b6f4cff4604774064f9fe4a50ebb0dad150618dce7bfee33bfef35733e5bb5e74cd6389898e37ec7fd09b6a1b8153044a95970e5170433ff94d4a6a0932c637826b2c96411d098cf71a377a54a962abba00e6c3c5ed3aaf7855c77cab3a5e7a5135341ee5309d1e40ab1181bdf8d3ae3f80d9486b96878e4857985e2250592e29d2fe8257949554ae610efe4bd3a4e59ade3fa3a1f478e6acb5465d3d88c1c1ed3a2e50b289508ff28a9bf98e590188a87dd07cbf72d555fac880a420dec4480de50260a6780990b0410454ec48457cc2ee0dbfe40b7eaf6764cafc9f8c7f30afc805511effc6eb7aeebb0dbac40116059362385f7176dc019a5b2b43826f63e329f0c5b9f4eb3acd1b923a3009de6015cdd2f31abe736291da0ccd8c2982fbd30e60f2d1b53fd7ce05141f0c9ed5f5c6ac9c14be8c2dc3ce679d60e446cffb54a5a1ced526495a034dc7e9555c2436b5945b66dcd50aec23f729e50588fb38dda3b6eba9febf1e35a3f7c0cf7dc7af8dd55d174fe4e7bae9f0cbc1c3f168e62df88bf8f6220b5c9d0769236b6c2313c48aacc70a64f00507e6b14de47a1b29969ae1315ea66aab92b7ce4019835e0d31e0982001e339fde175a72eda41d7e5c717c385022d9220af6fe777381882982948fb92953f212e55d6553ed82d5fba13fef7a207dc2c2b76667c7e2bdfec0bdef4154622c2ce3077750ed6920022af8078e8df840958191838f309d66f80e6a5961ff9847be7ee0f5590e3a328594211925618148c0af06b0d9dff72f48ec5ff4f1ce1f862dcfb2ddd46aef2eb5d8defcf3a93726e616e1da38b9eaf27b9036d0d58ccee6ee6a6894a20d0bd4f88b655f8d925208bd7da02e75c6a152b5a8c12d8498e68770552ad6d038a724f585b401e44526e07fb595130a76194d93ceb0cb239e26f56832c375090633b797659b475029313a67571858cf813db4c52e6c1d39d7283855e5a78ec885258178e01674f877255310a3fa6f58df3adf7e5b7bc4f48847307e7048b3ec67072dd7bc4399d002722ee8a6e476fbdde4eeb81e6fc02a8232fe8d296744d0286edc82cd5a763a1e51102fb15b74657374000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400008a5d784563010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000051f33a2f14f92735e562dc658a5639279ddca3d5079a6d1242b2a588a9cbf44c02000000000000001b1b45dc567a195b57a50de2c940a07c818b14e6f71fddecb13674e8886f62472684c574d1556e71b0cdf4230e05cc876ae8881db6822459ed4705e000db7f0a", - "output": - [ - "Fee: 0.00000000", - "Funds sent:", - "[1/1] | Amount: 0.00000001", - "[1/1] | To: f40ff5c315e640c8a07215e2c78eadee58ca54bcc44bd02d57d9906e55cc7202", - "[1/1] | From: 76fbdde4eeb81e6fc02a8232fe8d296744d0286edc82cd5a763a1e51102fb15b", - "[1/1] | Memo: ", - "Mints:", - "[1/1] | Asset ID: 2295a46b40bcb346cbb1c9a4eed4f2a27d37ad9606d34514ccb9ee776e6fdf53", - "[1/1] | Asset Name: test", - "[1/1] | Value: 1000000000.00000000", - "Burns:", - "[1/1] | Asset ID: 51f33a2f14f92735e562dc658a5639279ddca3d5079a6d1242b2a588a9cbf44c", - "[1/1] | Asset Name: $IRON", - "[1/1] | Value: 0.00000002" - ], - "output_expert": - [ - "Fee: 0.00000000", - "Outputs:", - "[1/1] | Amount: 0.00000001", - "[1/1] | To: f40ff5c315e640c8a07215e2c78eadee58ca54bcc44bd02d57d9906e55cc7202", - "[1/1] | From: 76fbdde4eeb81e6fc02a8232fe8d296744d0286edc82cd5a763a1e51102fb15b", - "[1/1] | Memo: ", - "[1/1] | Asset ID: 51f33a2f14f92735e562dc658a5639279ddca3d5079a6d1242b2a588a9cbf44c", - "[1/1] | Asset Name: $IRON", - "Spends:", - "[1/1] | Nullifier: cb3768974e51464440bba4bc12052e6a063c679ae2c2be04cd6e7fda68b2f627", - "[1/1] | Commitment: a2f39339326a5e6291c94093c26358bfc0a6cc9d5fda8aaf4dc1be8463093856", - "[1/1] | Size: 4", - "Mints:", - "[1/1] | Asset ID: 2295a46b40bcb346cbb1c9a4eed4f2a27d37ad9606d34514ccb9ee776e6fdf53", - "[1/1] | Asset Name: test", - "[1/1] | Value: 1000000000.00000000", - "Burns:", - "[1/1] | Asset ID: 51f33a2f14f92735e562dc658a5639279ddca3d5079a6d1242b2a588a9cbf44c", - "[1/1] | Asset Name: $IRON", - "[1/1] | Value: 0.00000002" - ] - }, - { - "index": 5, - "name": "max_memo_size", - "blob": "01010000000000000003000000000000000000000000000000000000000000000000000000000000000a00000068c6d5c64b4caac21507e7bcc42b9df6469467dc58670a8ff25bead09a3750b68daab8e65f5eb7966c6a524a8abaf3f398cb65e1c91beb5c753910261237a9088daab8e65f5eb7966c6a524a8abaf3f398cb65e1c91beb5c753910261237a90896dccbd599b9e3b8705b17d2849a711a9d42aaefe26cce5001cce174d2180c3cac80893e18e3ba1c25cbe9ff29bc3663a91bc7bb5864ee2dcbbc15c11f37a88425ed3fb34ad224fea60537659d7089432c8b1b78de9515b924d8e04a7e3dbf630a7d22a5be01f6a43e07662d6de8250019092de38a96b7781db3753a4b709f6cd0d30ba97e38a66a8da072eb05b02098a8fa744d1421b504cff06fc0b237f0b4d847fb3f36fc4a77b45eaf318dbb6907a7417848bfa856df1c74708e7e1ce9bb8a88a292c93bc7638d5a71dd1e7a154b846d7e1891824583db978069cf74d12ba2f39339326a5e6291c94093c26358bfc0a6cc9d5fda8aaf4dc1be846309385604000000cb3768974e51464440bba4bc12052e6a063c679ae2c2be04cd6e7fda68b2f627000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b4d1a89b423b2eaeb57ddb9d9d6f17e3d3296086d42ea06c3f40389fab983a1b52c00bd9a4f52ba27f66920b5db79f7936bc79df916a5229d69faa7564fc212b02756912ff254365ccbe28d0319b8ed94905494a9625c9fc500e404b9b439ce01e7deb5c87c84e19e23da54a68c3e3183be2d77d2ea533248f1d79a8ab0e5ce67929e1c73e30f0be55719025fa4a530b4dd06e421e3e7fb88bca16c812b6ec6f3cde354d66d3c39c41a2208d70576f1cdab91635d374c6adee83da3ff08359cce883124fa777ee437602ff47e1700b0eb5ce5a7a880e4db5392ec3db26f9cd356c414da566300cc692ea92ef12d2b0d8e3d2a6fca9fe41c052df6509859a23d5510b573fe1d22f5a8e324b80cc84c53e3a4b87bb2f423bd3416d266372b191914534f33ba1f2fdcea67cf8c1191f0366c0d7c3069f15dce8e6928b76cff502d26780d5789937f91a0ea871a98cb23fd4fbaba5b04889012ef65e5de0cd8a9c1809469ed99998779fd1b3bec8fe427b33cb3440286446804b891443bb0e926d56cc4f2ef1f113649987745b35dbd084d4b4f0b3906c4aec39b2c152b4dd5bf0d03d8654b5d33bb5f053af133b7cfd7aa509fe0aa65314a37570cdd4b409e0d5f807e89c2f00c86fa0cc613e4e0a4fa126db936171fe4b3c98f5ec84c9e0027ea8fee6ab09c0030c9a02a1b65adc963facf412a12a3a2a783854d573285431042d8603f98c0cbd00290d7b58876550ce2528d0a84b8754f1b435ea1efe73a6751a3e4c692c883197424c179e86a51b252e581ed98603c67f7a2cc3eb3899dfeaf9fa7197fb24d763128a4d7b7d25c31999922a07b20edf42785a0af6460647d10192afdcfc05b675c196ef147418635853156f287d16f34b32d0bc190a48d5e825087b39a877e26f98438495f143715d08467f2fe37df27199134fe33dba32cfc8f8c5c3599d2acdc8c05bf3d172eba82a8c08f99d697c52363fddeada294dce0d1b2a8f2297ca469204ffa99c40564029ac69a49a129b423924d45493adb9c26e9a41573def005914a9105a48e135e614143267224bc91127a2373a4e07a89bdf9fa3f694d9fe70742c627b871eea7c721f22ea546fe1dbe26e9c1e4def7f3caeca78f2e25a94993cb2a71957513dac8857829627e7202237291edf0239a3e2f64bfc99c121ba6ee511a81cfb5c1755efd84b001319c197fb102ec3adfde07d1a9f09a36d30cfab97678dfa16409c4ae44b01304e98cb44fd8219b89569dd02d9e0cab8f33bb7446c4e97f6960645c74c23e93c6c817aa7f4c68debba301496233c7e8d1ca4b6becae438fd39d92b92c96720747b690ea8e3aaccd4e7318c31a1ddc34570c6b71e04d3f370ade53478ab09d71462584abf9aba322797248b30d0542537c0bb6c0fcc370c8d9b0dd859cef2785bf28a6691116812b4e02f246db9b416fc5a31885dcc251c58cdfb48b37b5a9b1d4221d08310c2cc84bfca196c76d0a26f3b315f7b825e8c9e04326436d10de35a88203f4594dac3ec986dd0c45b6d7afb96deef7e297ef2f9800ac67a5628303eec2b2699fdf586c9e5bfd9f4faa31da20cbb52050dfbbb5b77e8311b401ead75887c20b679b5088d2434a185556a73dace724616647a9ebef432a0506dc2852f5a2a446babbd9b5b51cddb5a0abef7f4ace0c363e164fecd527623470d37fdeeca448e81d3a0acbe95201130d90376056b20b4d75701bab0a0dad55089465d863e1188b55be8d047f88ce0b9e16aec3f9dbebd96b65ba0988fa2822268125ad0c334e655be6960525c666eee5cd0631853e470272ea774ca3c43f7842db49fe5d2d93ff4b8febb596db0e3d4c697ed8615200ec45ae782810948fb8b41ff339f960a28ef28e78792eb46eb8c1195b68357f89633341928e3c696e6382920dc524d379af9e02c3b0957a650aa1c7b7ffe2468f9a91434042f463625c93cfd68f183d4c8fd15e64afa0b1d054f297b01ab97c7f654f47db808ccbbdfecd2a12bb43d7afa4eef296a098cb4e3bafb3dfaed2dca1b04332cfdc9abb56462cb5b90235666c7e472d80f239c34f5e509cdb9b4b0c266cde0a9385d6ed7fede6b5015fcf33cf99c37c4b33bf024b9fb5d9249dcade7b0846d59b5aea40bfac85d34f3b3232f5f3dc08c5e877a2b6c4a3fb8b0aaec7cb6491f54376fcaa6a046be9ba08225c188af61021934d647045d1a06e3811ee82d544f532abb268da69b1b5284605669e5fed85874e19f631ffbabc189514f3c0a7836fcac67cf39c254dfb0f53f55760e20b", - "output": - [ - "Fee: 0.00000000", - "Funds sent:", - "[1/2] | Amount: 0.00000001", - "[1/2] | To: f40ff5c315e640c8a07215e2c78eadee58ca54bcc44bd02d57d9906e55cc7202", - "[1/2] | From: 76fbdde4eeb81e6fc02a8232fe8d296744d0286edc82cd5a763a1e51102fb15b", - "[1/2] | Memo: This is a string with 32 bytes!!", - "[2/2] | Amount: 0.00000001", - "[2/2] | To: f40ff5c315e640c8a07215e2c78eadee58ca54bcc44bd02d57d9906e55cc7202", - "[2/2] | From: 76fbdde4eeb81e6fc02a8232fe8d296744d0286edc82cd5a763a1e51102fb15b", - "[2/2] | Memo: " - ], - "output_expert": - [ - "Fee: 0.00000000", - "Outputs:", - "[1/2] | Amount: 0.00000001", - "[1/2] | To: f40ff5c315e640c8a07215e2c78eadee58ca54bcc44bd02d57d9906e55cc7202", - "[1/2] | From: 76fbdde4eeb81e6fc02a8232fe8d296744d0286edc82cd5a763a1e51102fb15b", - "[1/2] | Memo: This is a string with 32 bytes!!", - "[1/2] | Asset ID: 51f33a2f14f92735e562dc658a5639279ddca3d5079a6d1242b2a588a9cbf44c", - "[1/2] | Asset Name: $IRON", - "[2/2] | Amount: 0.00000001", - "[2/2] | To: f40ff5c315e640c8a07215e2c78eadee58ca54bcc44bd02d57d9906e55cc7202", - "[2/2] | From: 76fbdde4eeb81e6fc02a8232fe8d296744d0286edc82cd5a763a1e51102fb15b", - "[2/2] | Memo: ", - "[2/2] | Asset ID: 51f33a2f14f92735e562dc658a5639279ddca3d5079a6d1242b2a588a9cbf44c", - "[2/2] | Asset Name: $IRON", - "Spends:", - "[1/1] | Nullifier: cb3768974e51464440bba4bc12052e6a063c679ae2c2be04cd6e7fda68b2f627", - "[1/1] | Commitment: a2f39339326a5e6291c94093c26358bfc0a6cc9d5fda8aaf4dc1be8463093856", - "[1/1] | Size: 4" - ] - }, - { - "index": 6, - "name": "emoji", - "blob": "01010000000000000004000000000000000100000000000000000000000000000000000000000000000a00000047b073d3a9fbcebde8afee3c3083e600f63aa643b57b7a9d4b49e3e0e8cbc58f1e4b98f6bdb4cfb994f3f2846d5b3267ab4788e9c3afda3638200dc174d908061e4b98f6bdb4cfb994f3f2846d5b3267ab4788e9c3afda3638200dc174d90806875ff7ff64a83592ae3708c94f5d00945e88e6014d679d05eb1a3d69ee34fb27ee2a53468065c4ffdd1f76b2653af397affdef3ad33f4e7173f5e81765017133e2650ce63b77342a1a1483963c50c444c3d9d78660aa521551ccf48587dbbf910d80f0729036b3da7765028f0873e80740608f8a6a725b56d9b9cb222dec893e082706935e465e884c71b7cf75d878b4a91ed7c06cf5c3ab9fdc03f4ef9a1715fd5c9835a473795a2cdd5e3ac57a7f402402435012746a5e7f53ac3150578300cc15fc9cb0d05644b0adbe3e7b9751e24a5779c1777b450eb8036f432a3f97d5a2f39339326a5e6291c94093c26358bfc0a6cc9d5fda8aaf4dc1be846309385604000000cb3768974e51464440bba4bc12052e6a063c679ae2c2be04cd6e7fda68b2f6270000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083a923396779204a8ccb0d844439c2c86f8f5774979f596c233b423f1dcbdd01bb842a9d1192b878419e2c79b86db77f8d9be79f703969cb1417d2975ef7cdd6dcb7309a4982a68193c5fb88226a739cc1f002635fd493cf114f09914779f0ef024832807f5443db967355e7695b17cee325534a5c7cfd922eba9f9b333d37be27feb58145aa1847a396af1202e3faceb69410d53e0851dd373b6779fe598255830611a793b92a16e7ac8a7ce50314006ca1b7f2cba0904bbce6a6c426d3f928d61c2bf356d6e92c157a1bcc8491f9e9f91329d6d7cd8e4e0f846c9d90a104c1412c08cda8cd944d1fe606332004eac35d06f6e7ca469e4ca96f51dbd9dc3e6b4ab8b0e8d6e4c248cd70b723dded9178da70045be6878ef5b9680d3e2ca4ba41f0a67c64677c370d29cac02d8b19f03afdc36328842950b3029da45344ae81364ed9ae98685283ad421cf4dc498d6231364d1c4930724242d5f723661cb1c3d7b754f6fe3d894bea8959d3b01b5bf18244e1cc40be487b6fa12c77112dd77b6a9fa29031f1ec76a9742f31235fd87c8472751864c4c5c511548bf805c36cf96b6321e17da7a1fab91e9ed694aff97c488ec0510d06aaec44226e07478b6c3e921d3ec973afc0968c526a80432b50f4753f027fca7c991928f06714a6571cad15c8b02b9c30baff8e36d4649bbe3032a1cfedf57df0e4b95f7aa9c659cf93bc4e9f5cde88cd325b6889d38dd235c4c95ef1f55c045c54c53e1b0acfed88840fd2c2d9525f8effbfa8b925e9d0a63aebb04ec390cd6dd526c097095393a2fbdd05987aaca1b4f98efb0da52571f61d4f69cd522d21207845b7a9525f570ce8e127dadfd4bd160cc3d80aff2e33cc8d6318a010f381b92acb775ce4733f95cdea489852ff04b01cdc19a7af8fc9e78dd663b76f582a8c6e66598c5a44d7635aa006f49267f248293566457d3ee0ee93f7a69d331db4746b21baa1725ba38e6f7bb16b59861a06ac95b03a735fcb85abc673a0f34f8d6aea4c49ad5a3144551136d52c5a1a41addadc4ba55f629190564b2cc842385feecdd25d092e78a9048321432c163c261f9e7b2f7a9a8dacf8f4976090ebaae5e38580d7555a50a6a670741d181caaeb34baabd6a318ffb126bed3fd2149cfca5d38f59e5fb8ad97c970b1d779c8569bb44f128d0b864e06bec2ec850d9856b3752787412afe78719e44e17fa46a6523bef8a170ce2722db430c9f76d5668a48a2453dee1e723ef7d87d05e3378dc6337f84df6d88622c98b9e47441492647c2fab7429044bc7ff16985491b15450fb82ea255728152100013b713b154b61e7e63c8fdf1158c30fa1d43f3cf1c2f9cfa1704d944c24a10fa859b2027c1e5c0e8f65aafa90505da28d60ddc3fba2c6ef244264b5d3cf41c663c5a948889fa8d72b095aa4a94b3c72edd68fbc10e90a01782f57d989a3b48b8083ff4c9a068aa3f87d54a21e743997baecac926105a73e4987dbf075dbbda6543fd88ad4b4d95792665511690e47c24dcd6d08f8bae51b7dbae01e495818879ea173c95321659fe28df3282a34821a0136dd4facd6d0bcc760fb1c923b465ac5d7582ad12cc87e3b83affded12e01e2aa9ec13090eb734ec712a2998d1861053e9da64a2e51ea8b4dc13392a7709dd2f74a5c26af0630c8f058e124330551c39277b6e826a845f492dd0e4d1e60a9a85f05600eb2630d174cbcb35ccab9ebb7d76e483ddf8199b941138bba88892480ebd772691c3c90562b1b1befb5836d1c580f16bd5dc78494b3ca26c51d8217c170add800fd2877eabb51617872c0eca278213f4186b88329f37f2785390362c373e57f2d45a1384d2d32bc0ff2759b1292f6a34816d8c9f73739306aa22d0517bf9674030794f6a77d6e5e8ae3c4b148a2d9c9f7d04fca84fa103adf954a10005f6de6613a856cac21495c97855e2946da7700cd979fd6d32efbd18ad56da4b05f868915506bd5ea45245deb4a9a1e4ae2d3cb85228ee89c9481097c2bdc2998b03d454348f9bc97b61a47b3bfc0ceb171e3c731b6543623a658f89e67fa8872ee1d300ec269c925554908bdefb1f6193869c3f10a26bc273b36c4ef6d79949f6c16f4e6b3b789dd7c1ca841b0211d7fb9d5447b5d5547dde673be0ea31445a078176df5516e38c8ac2fd1158d540189cb7d996b4c446ba711eba01cadab13e1b835faa3767ad989fe7e301693833f8b84c56fbec840b5612c9d9ab679ef7960ad2fe1f5fdc9fc5248bb50a9b729674f18ecf53a5737b5d2fd420633189405c25d034d461578cf715f617b64bb5bd4ef354f7b0408a2ede3973292200ea4c73545d75805a3ea41e81896cbc55f0cc24c04201d71b4cf0815c9fc855bccb6578513aa0f900e755fcaf3177c25805b7680b463d1c6a825e3386f3c62ed39579350d8793316d70844bf28d63f09b594aec9dd3eb0a3aa649578fa93de041dad90367712d781850cc00c29a3385a09bc636164cedb8b10118a434f5f0aed4a1ca83cc475e5d5c56cbcc533f20a939c8f48ad0187a1662258a4261983ad40b8df3bc4f9a0f21bfde76a386d10a69cf22c1a25e5d328aa80b4bce4cab8ad6d9d344f4d767a907d792da83eb279c63b6584f6eb2818df4a030841f95aa3f8995e89410ec768aa05eecac45a7a991790cd997f6f9c87a8785b3ee808f18e91a695026b51531d3005994e359124945d66acd2cd75aeb28f1c9d5041b6353b962a84a68c6e80d8b997a1fdba92df64996b029fab90ce3405a79a81e03c14b49002177ef359acff64a15bf88c51dd3d802827c7f387b0a4f70ea18ea030fc8d0f598650ba4a869a688077ff00da2505555a1c8554e3bebfcdbc6ca3bcb8f182150df1278600457c2df8812a514453fd8a7aaf7657d8052ac9f9f05bccb5d47e5cba8033eaa772cbaf941e4b98f6bdb4cfb994f3f2846d5b3267ab4788e9c3afda3638200dc174d90806a66851103605eb9e643619e31a16f0c710f263d4b898ec7dddeb3f596c32416417546b35af3d680a4342957b0a50d7c1912705c883e9911e443dd8dc41e8fd4ea03fbaffa09a930e2fb0014c2254b6213ed0e628b0b2d291d182dc6e9107efe70fb74efc725aa163d9db257286ae54135b5909aed4127d10da93a464f122032365b2d08c4e2cdcf95933e76f161151328c706593605717d02ae21fee47f67ccbdfe19324146f06219d642d82051aa9b14680a9f5f96eb8cf1edf5464f4526d3076fbdde4eeb81e6fc02a8232fe8d296744d0286edc82cd5a763a1e51102fb15bf09fa49100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001780589c600fc28925a8da11c2ddb8253067554b418ed47159cdabc404fe791cdce32e0e6f2decc3587d12747c201b9c6d3fc2d178619debf661bebf58c55802", + "index": 1, + "name": "1_ore_send", + "blob": "0101000000000000000300000000000000010000000000000000000000000000000100000000000000000000003475b26a991a739f6b77dd7bce822efa46d355a28cf0e4dc9c93b6ababf073c5ad26e3f59270401ff48e7ba11d800eaea4d91dc89d4ccf0975afec009dcebb07ad26e3f59270401ff48e7ba11d800eaea4d91dc89d4ccf0975afec009dcebb0795aef72203054fbfa24ffd1c375e6d69827111b74805477b38ef4932d143c6a44efc37619fbedc3a1b46d5613202ac6baf75caadb2ac6b6c9db0b02acf8698a1f51eb6a1a1dbebf7fa0b034803716d103c96e9893180cc971824bc2b978e1b1600ebd35de5d6b921b2ce8aa4c03ef7312c9d6efc7e259f4dd68d5c7b632a88bc259386faae6cea9e44e232a6cbf1079486a29e9d622e3c25e1985155226c4d48342be389600dc829f89aac5a81c444fd880f5b5ba1541b9434d620543a6e8be7eef40fe52914631d18a7d4dfb1c41beed6c2b7a51efd985f2e210059f36f6000ec8ee990b1228496c0d1140767f2aae76d79e09f5f777ff5af0f89ef6aefe7337805000045e9b744ed2afca6615aa6ba00dcf578979391b219ca05e90447abf21315a9be00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b9032b6225f92f518e019f07373891b6524df7bd3e25afc0b0fb7f5ca2da049c419860e0eb24aff16d830bc21061662393a76e80b2ef434d6f9bbfc3926644e933210d159074e80b368c16312710226160c38e0b05e69a8f353c5de3e0e6fd1e03892c58d7e8eeb5604aab425b445d86e9357341e2a175b8835b99653d75ba42c11500beeb61c90523a7dee736d73ab2a6e496b7aa8241ae8bd222475f3e0b510b0f5a57c5a97583d342d4c8740f66fb856d730caafa608296b2b02aa7bd4a99499b3cde309b75e0200df587d09952547f29046abc4fdd47714860d09f9cdcf3f3c24fd8d8fd0e0d2f83f1191ff59f37fa811d1a4c90faf70d4da89ef228ce6d8d0af19c715cae4d74fe07d3d66c473dff6799bc3d8979fafd5a9cef9b1d7650a1f488cd3478146e27075c1b1c73697ba64e94b37d13f29d22068ef58a7a721138213f218a11d1ab4b88d41420b40a010c9cbf2e10f00f7ae52dd54eeb9b716fac76db7d364b5cf43d278b61a0863234c03485364347505af9c86b8d582c453c1c98e52882d08e49d496791a899796ea3e5773435edc97caadffcc579341474cc31b87e6b19b0d526618585a6693184f903512ef641eda23f30e3a45782e95d1c3529230566b78aa1421834c58d0d44ab79467aff475858a38cbd67d4c4af4ed0cf677a063fea0b38b193ab6a18d81b3848f941d61b46bd86f348c613a9b0dc18610fae24d7328209168bb05d58d1085496a5a4769da339fa3ef1463956da25ccaff94a58beff6417d3f94d07eece27b8ca1db74ce29cce9a40556f8967d5ebb58da4efd01e4fb9b27578fc8e883320cff5f36a1b69706816cabdaff3ba9cb06756d8c37d760419d05bd9b8ffa84ed6ea98b952f0ea2e927ba0782e90a949b8821c305c20db46d66c00b48fc4150eeff0bc07a6fd890c80a802657573703a1b7aa9bd3b6eda9ad2adce2f162d1117aaf08093c779dd4db20c94a48e62357ade7daf5284d3b4d2f6885dc03a34b48aa2890ab4c60128769bf8bef2ee7a06f4d552eaed15c4df1da5ccf3762f37b818c9d62f7464416bc40f59c4f3c6299a929a67dd3d09e00d1bd68c16d38ee66e34b54272e0fdd2eb74c91e2eb66d4db7d061ddedb0b88f709fa9f027b00a5fbacb4f70f48612b11caf119866afea8a05de5b9e63b096e45634d7d68aef803cec2d21f91a55bea60be8abb233afe7dbbc415546945350432dc858064d42b82b0f0397fca660dddd45e9d95898d98d2fcbf2eb0c5de920aed36f3f56b511dd1ca5551a14b5d1b235be781c7c1a6f3297d4bccf83abb11bcaca33e12ea204c06849b39dae12e0cee817e0cbde1b1d1906b88cac1d96ed59c1377a0f7eac1a4efe9d2cafbcfd0c270f0d8311ac9839ad60cc834c1785e2796485dd844fa0694091206f8d3563830c2160a5510a41970da6cd5a0f810d36df27339db81152a7c2acc2f958f8d847ef2a9b18862eb2ebe6e2a635f905db4416d594d25268c61d163ee17d0b9052a6103d70139ec53b9f8328d5e3eed90541e494ad15da810b71fba9543198a4505e464608367a7fc83ae6ac1f7a63f3594d20452d928b86bbdccda5f9257f615eef5f05a7513cff8d074860980bca8873d387bb23894694650c9adad3ac1ba0ef617dbcec9946d874516131944e6e3a10eb017d696a20eaf9af5ffbc83b8f2db1e2cf82bfa1a2072523b844108d8fa9c980443c92121b2a2d47114b4dec3b0dbdab9ebd96295443d8a587682a044c2cc7ba72e9842ffb1156b7c774efdf0cdb5f96be7ad6cb1c361e3d7ee645c0c57dd23b4d247d940063cfa8a4afb72b671cc1d6f9037aac0cab8852d606d5616f41a3f8d7901176060a75e4c9e18d65cd2679fe5083c6e40e247c74f29b4ab9ea38827c7f4d1f1fac5a7409262374adcf69975be903a8561b83e37980567fd179e0f7eab72cb77f5fab2e44e49f8cb75f126b5d60cdbcacd00ab422d48d32d2db75442549ed7fe4b220ca969a9d8a4248cff3725f34cb64c6a59e73d8e841e5995075f32feec14d2954af1afec302d30d24214025e833f68676b1242f27dba75dd53426b46ea4fff0163ba0cce0e6e9ceecd5191199f5c9b867e62a4ab18781f7b440e6d9470ba05f09f0ed1062a745f4cb952ca862c91c3d3e88779f51c43bdc0973f03b5266f3296772fe19ff078ad2b7f237fcbbe47e4d2ad26e3f59270401ff48e7ba11d800eaea4d91dc89d4ccf0975afec009dcebb07b1ed0a33d8f1fb025d2fdaa5af2801bdf2aff84d3b69bdbf6882b424803170ff6db19d9e05cff32d44dbb9c5d6c5e00683956df74a3db738668124f64928c5e10fe1b733def7f86b6532c9150286d71038490e719cd4dd271e883bcd278750140ba5b3dbd716a40d94a9eeed141ae4a6d007b8cfd43a175a6c862df720bd03f7c38706371ab73ab00489294f72c6b18eb470d8f395fac71672ae4b2dd9afc8cbb986aaab0a15954d29b323fa21c13772068078845159b7b52a5bf766cea25e2640fae059d8ee3361b7a08429867254523f937c7654ae6fe7b188c1f0da57e9cd54657374636f696e00000000000000000000000000000000000000000000000041207265616c6c7920636f6f6c20636f696e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000389e2f71e4e9bc3e37a8b3a5b49432f7a93574eced25fce9add210b41203ed42e414a3468188977dfa4f1bbb2e36dc1bce38e759b8a54c85bea6d75a2aeea008", "output": [ - "Fee: 0.00000000", - "Funds sent:", - "[1/2] | Amount: 0.00000001", - "[1/2] | To: f40ff5c315e640c8a07215e2c78eadee58ca54bcc44bd02d57d9906e55cc7202", - "[1/2] | From: 76fbdde4eeb81e6fc02a8232fe8d296744d0286edc82cd5a763a1e51102fb15b", - "[1/2] | Memo: ", - "[2/2] | Amount: 0.00000001", - "[2/2] | To: f40ff5c315e640c8a07215e2c78eadee58ca54bcc44bd02d57d9906e55cc7202", - "[2/2] | From: 76fbdde4eeb81e6fc02a8232fe8d296744d0286edc82cd5a763a1e51102fb15b", - "[2/2] | Memo: ", - "Mints:", - "[1/1] | Asset ID: 7cf3755ef6fbeccc1aee5f6844e057fe528d21900971ca8218f4e9b7ec5a8cda", - "[1/1] | Asset Name: 🤑", - "[1/1] | Value: 0.00000001" + "0 | Tx Version: V1", + "1 | Owner 0 : 40fae059d8ee3361b7a08429867254523f937c7654ae6fe7b188c1f0da57e9cd", + "2 | Amount 0: 40", + "3 | AssetID 0: 51f33a2f14f92735e562dc658a5639279ddca3d5079a6d1242b2a588a9cbf44c", + "4 | Owner 1: 40fae059d8ee3361b7a08429867254523f937c7654ae6fe7b188c1f0da57e9cd", + "5 | Amount 1: 5", + "6 | AssetID 1: da40fc530a12327a1c1c367b8bd66ada35100501228cdb355b8fb6c40d048a64", + "7 | Owner 2: 40fae059d8ee3361b7a08429867254523f937c7654ae6fe7b188c1f0da57e9cd", + "8 | Amount 2: 1", + "9 | AssetID 2: 51f33a2f14f92735e562dc658a5639279ddca3d5079a6d1242b2a588a9cbf44c", + "10 | Fee : 1", + "11 | Expiration: 0" ], "output_expert": [ - "Fee: 0.00000000", - "Outputs:", - "[1/2] | Amount: 0.00000001", - "[1/2] | To: f40ff5c315e640c8a07215e2c78eadee58ca54bcc44bd02d57d9906e55cc7202", - "[1/2] | From: 76fbdde4eeb81e6fc02a8232fe8d296744d0286edc82cd5a763a1e51102fb15b", - "[1/2] | Memo: ", - "[1/2] | Asset ID: 51f33a2f14f92735e562dc658a5639279ddca3d5079a6d1242b2a588a9cbf44c", - "[1/2] | Asset Name: $IRON", - "[2/2] | Amount: 0.00000001", - "[2/2] | To: f40ff5c315e640c8a07215e2c78eadee58ca54bcc44bd02d57d9906e55cc7202", - "[2/2] | From: 76fbdde4eeb81e6fc02a8232fe8d296744d0286edc82cd5a763a1e51102fb15b", - "[2/2] | Memo: ", - "[2/2] | Asset ID: 51f33a2f14f92735e562dc658a5639279ddca3d5079a6d1242b2a588a9cbf44c", - "[2/2] | Asset Name: $IRON", - "Spends:", - "[1/1] | Nullifier: cb3768974e51464440bba4bc12052e6a063c679ae2c2be04cd6e7fda68b2f627", - "[1/1] | Commitment: a2f39339326a5e6291c94093c26358bfc0a6cc9d5fda8aaf4dc1be8463093856", - "[1/1] | Size: 4", - "Mints:", - "[1/1] | Asset ID: 7cf3755ef6fbeccc1aee5f6844e057fe528d21900971ca8218f4e9b7ec5a8cda", - "[1/1] | Asset Name: 🤑", - "[1/1] | Value: 0.00000001" + "0 | Tx Version: V1", + "1 | Owner 0 : 40fae059d8ee3361b7a08429867254523f937c7654ae6fe7b188c1f0da57e9cd", + "2 | Amount 0: 40", + "3 | AssetID 0: 51f33a2f14f92735e562dc658a5639279ddca3d5079a6d1242b2a588a9cbf44c", + "4 | Owner 1: 40fae059d8ee3361b7a08429867254523f937c7654ae6fe7b188c1f0da57e9cd", + "5 | Amount 1: 5", + "6 | AssetID 1: da40fc530a12327a1c1c367b8bd66ada35100501228cdb355b8fb6c40d048a64", + "7 | Owner 2: 40fae059d8ee3361b7a08429867254523f937c7654ae6fe7b188c1f0da57e9cd", + "8 | Amount 2: 1", + "9 | AssetID 2: 51f33a2f14f92735e562dc658a5639279ddca3d5079a6d1242b2a588a9cbf44c", + "10 | Fee : 1", + "11 | Expiration: 0" ] } ] diff --git a/tests/ui_tests.cpp b/tests/ui_tests.cpp index bd1ec5e..e11b93c 100644 --- a/tests/ui_tests.cpp +++ b/tests/ui_tests.cpp @@ -111,15 +111,12 @@ void check_testcase(const testcase_t &tc, bool expert_mode) { std::vector expected = app_mode_expert() ? tc.expected_expert : tc.expected; -// #{TODO} --> After updating testvector, enable this part -#if 0 EXPECT_EQ(output.size(), expected.size()); for (size_t i = 0; i < expected.size(); i++) { if (i < output.size()) { EXPECT_THAT(output[i], testing::Eq(expected[i])); } } -#endif } INSTANTIATE_TEST_SUITE_P