diff --git a/.github/workflows/guidelines_enforcer.yml b/.github/workflows/guidelines_enforcer.yml index 4da97c9e..fdaf9f27 100644 --- a/.github/workflows/guidelines_enforcer.yml +++ b/.github/workflows/guidelines_enforcer.yml @@ -21,6 +21,3 @@ jobs: guidelines_enforcer: name: Call Ledger guidelines_enforcer uses: LedgerHQ/ledger-app-workflows/.github/workflows/reusable_guidelines_enforcer.yml@v1 - with: - relative_app_directory: app - run_for_devices: '["nanos", "nanosp", "nanox", "stax"]' diff --git a/.github/workflows/ledger.yml b/.github/workflows/ledger.yml deleted file mode 100644 index f9515009..00000000 --- a/.github/workflows/ledger.yml +++ /dev/null @@ -1,37 +0,0 @@ -name: CI - -on: - # Triggers the workflow on push or pull request events but only for the main branch - push: - branches: - - main - - develop - pull_request: - branches: - - main - - develop - - # Allows you to run this workflow manually from the Actions tab - workflow_dispatch: - -jobs: - scan-build: - name: Clang Static Analyzer - runs-on: ubuntu-latest - - container: - image: ghcr.io/ledgerhq/ledger-app-builder/ledger-app-builder:latest - - steps: - - uses: actions/checkout@v3 - with: - submodules: true - - - name: Build with Clang Static Analyzer - run: | - scan-build --use-cc=clang -analyze-headers -enable-checker security -enable-checker unix -enable-checker valist -o scan-build --status-bugs make default - - uses: actions/upload-artifact@v2 - if: failure() - with: - name: scan-build - path: scan-build diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 4b7e0e80..e91290d1 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -29,6 +29,27 @@ jobs: make deps - run: make cpp_test + build_rust: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + submodules: true + - name: Install rust + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + - name: rustfmt + run: | + cd ./rs + cargo fmt --version + cargo fmt -- --check + - name: audit + run: | + cd ./rs + cargo audit + build_ledger: needs: configure runs-on: ubuntu-latest @@ -160,3 +181,37 @@ jobs: tag_name: ${{ steps.nanosp.outputs.tag_name }} draft: false prerelease: false + + build_package_stax: + needs: [configure, build, build_ledger, test_zemu] + if: ${{ github.ref == 'refs/heads/main' }} + runs-on: ubuntu-latest + container: + image: zondax/ledger-app-builder:latest + options: --user ${{ needs.configure.outputs.uid_gid }} + env: + BOLOS_SDK: /opt/stax-secure-sdk + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + submodules: true + - name: Install deps + run: pip install ledgerblue + + - name: Build Stax + shell: bash -l {0} + run: make SUBSTRATE_PARSER_FULL=1 + - name: Set tag + id: stax + run: echo "tag_name=$(./app/pkg/installer_stax.sh version)" >> $GITHUB_OUTPUT + - name: Update Release + id: update_release_2 + uses: softprops/action-gh-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token + with: + files: ./app/pkg/installer_stax.sh + tag_name: ${{ steps.stax.outputs.tag_name }} + draft: false + prerelease: false \ No newline at end of file diff --git a/app/Makefile.version b/app/Makefile.version index d796c687..f284f298 100644 --- a/app/Makefile.version +++ b/app/Makefile.version @@ -3,4 +3,4 @@ APPVERSION_M=0 # This is the `spec_version` field of `Runtime` APPVERSION_N=0 # This is the patch version of this release -APPVERSION_P=11 +APPVERSION_P=13 diff --git a/app/src/crypto.c b/app/src/crypto.c index 94979a82..f9879938 100644 --- a/app/src/crypto.c +++ b/app/src/crypto.c @@ -47,11 +47,11 @@ static zxerr_t crypto_extractPublicKey_ed25519(uint8_t *pubKey, uint16_t pubKeyL privateKeyData, NULL, NULL, - 0)) + 0)); - CATCH_CXERROR(cx_ecfp_init_private_key_no_throw(CX_CURVE_Ed25519, privateKeyData, SK_LEN_25519, &cx_privateKey)) - CATCH_CXERROR(cx_ecfp_init_public_key_no_throw(CX_CURVE_Ed25519, NULL, 0, &cx_publicKey)) - CATCH_CXERROR(cx_ecfp_generate_pair_no_throw(CX_CURVE_Ed25519, &cx_publicKey, &cx_privateKey, 1)) + CATCH_CXERROR(cx_ecfp_init_private_key_no_throw(CX_CURVE_Ed25519, privateKeyData, SK_LEN_25519, &cx_privateKey)); + CATCH_CXERROR(cx_ecfp_init_public_key_no_throw(CX_CURVE_Ed25519, NULL, 0, &cx_publicKey)); + CATCH_CXERROR(cx_ecfp_generate_pair_no_throw(CX_CURVE_Ed25519, &cx_publicKey, &cx_privateKey, 1)); for (unsigned int i = 0; i < PK_LEN_25519; i++) { pubKey[i] = cx_publicKey.W[64 - i]; } @@ -88,15 +88,15 @@ static zxerr_t crypto_sign_ed25519(uint8_t *output, uint16_t outputLen, const ui privateKeyData, NULL, NULL, - 0)) + 0)); - CATCH_CXERROR(cx_ecfp_init_private_key_no_throw(CX_CURVE_Ed25519, privateKeyData, SK_LEN_25519, &cx_privateKey)) + CATCH_CXERROR(cx_ecfp_init_private_key_no_throw(CX_CURVE_Ed25519, privateKeyData, SK_LEN_25519, &cx_privateKey)); CATCH_CXERROR(cx_eddsa_sign_no_throw(&cx_privateKey, CX_SHA512, message, messageLen, output, - outputLen)) + outputLen)); error = zxerr_ok; catch_cx_error: @@ -125,10 +125,9 @@ zxerr_t crypto_fillAddress_ed25519(uint8_t *buffer, uint16_t bufferLen, uint16_t if (bufferLen < PK_LEN_25519_PLUS_TAG + ADDRESS_LEN_TESTNET) { return zxerr_unknown; } - CHECK_ZXERR(crypto_extractPublicKey_ed25519(answer->publicKey + 1, PK_LEN_25519)) + CHECK_ZXERR(crypto_extractPublicKey_ed25519(answer->publicKey + 1, PK_LEN_25519)); - const bool isTestnet = hdPath[1] == HDPATH_1_TESTNET; - outLen = crypto_encodePubkey_ed25519(answer->address, sizeof(answer->address), answer->publicKey + 1, isTestnet); + outLen = crypto_encodePubkey_ed25519(answer->address, sizeof(answer->address), answer->publicKey + 1); if (outLen == 0) { MEMZERO(buffer, bufferLen); @@ -160,9 +159,9 @@ static zxerr_t crypto_hashFeeHeader(const header_t *header, uint8_t *output, uin cx_sha256_t sha256 = {0}; cx_sha256_init(&sha256); const uint8_t discriminant = 0x07; - cx_sha256_update(&sha256, &discriminant, sizeof(discriminant)); - cx_sha256_update(&sha256, header->extBytes.ptr, header->extBytes.len); - cx_sha256_final(&sha256, output); + CHECK_CX_OK(cx_sha256_update(&sha256, &discriminant, sizeof(discriminant))); + CHECK_CX_OK(cx_sha256_update(&sha256, header->extBytes.ptr, header->extBytes.len)); + CHECK_CX_OK(cx_sha256_final(&sha256, output)); return zxerr_ok; } @@ -174,11 +173,11 @@ static zxerr_t crypto_hashRawHeader(const header_t *header, uint8_t *output, uin cx_sha256_t sha256 = {0}; cx_sha256_init(&sha256); const uint8_t discriminant = 0x07; - cx_sha256_update(&sha256, &discriminant, sizeof(discriminant)); - cx_sha256_update(&sha256, header->bytes.ptr, header->bytes.len); + CHECK_CX_OK(cx_sha256_update(&sha256, &discriminant, sizeof(discriminant))); + CHECK_CX_OK(cx_sha256_update(&sha256, header->bytes.ptr, header->bytes.len)); const uint8_t header_discriminant = 0x00; - cx_sha256_update(&sha256, &header_discriminant, sizeof(header_discriminant)); - cx_sha256_final(&sha256, output); + CHECK_CX_OK(cx_sha256_update(&sha256, &header_discriminant, sizeof(header_discriminant))); + CHECK_CX_OK(cx_sha256_final(&sha256, output)); return zxerr_ok; } @@ -190,15 +189,15 @@ zxerr_t crypto_hashSigSection(const signature_section_t *signature_section, cons cx_sha256_t sha256 = {0}; cx_sha256_init(&sha256); if (prefix != NULL) { - cx_sha256_update(&sha256, prefix, prefixLen); + CHECK_CX_OK(cx_sha256_update(&sha256, prefix, prefixLen)); } - cx_sha256_update(&sha256, (uint8_t*) &signature_section->hashes.hashesLen, 4); - cx_sha256_update(&sha256, signature_section->hashes.hashes.ptr, HASH_LEN * signature_section->hashes.hashesLen); - cx_sha256_update(&sha256, (uint8_t*) &signature_section->signerDiscriminant, 1); + CHECK_CX_OK(cx_sha256_update(&sha256, (uint8_t*) &signature_section->hashes.hashesLen, 4)); + CHECK_CX_OK(cx_sha256_update(&sha256, signature_section->hashes.hashes.ptr, HASH_LEN * signature_section->hashes.hashesLen)); + CHECK_CX_OK(cx_sha256_update(&sha256, (uint8_t*) &signature_section->signerDiscriminant, 1)); switch (signature_section->signerDiscriminant) { case PubKeys: { - cx_sha256_update(&sha256, (uint8_t*) &signature_section->pubKeysLen, 4); + CHECK_CX_OK(cx_sha256_update(&sha256, (uint8_t*) &signature_section->pubKeysLen, 4)); uint32_t pos = 0; for (uint32_t i = 0; i < signature_section->pubKeysLen; i++) { uint8_t tag = signature_section->pubKeys.ptr[pos++]; @@ -211,19 +210,19 @@ zxerr_t crypto_hashSigSection(const signature_section_t *signature_section, cons pos += pubKeySize; } if(pos > 0) { - cx_sha256_update(&sha256, signature_section->pubKeys.ptr, pos); + CHECK_CX_OK(cx_sha256_update(&sha256, signature_section->pubKeys.ptr, pos)); } break; } case Address: - cx_sha256_update(&sha256, signature_section->address.ptr, signature_section->address.len); + CHECK_CX_OK(cx_sha256_update(&sha256, signature_section->address.ptr, signature_section->address.len)); break; default: return zxerr_invalid_crypto_settings; } - cx_sha256_update(&sha256, (const uint8_t*) &signature_section->signaturesLen, 4); + CHECK_CX_OK(cx_sha256_update(&sha256, (const uint8_t*) &signature_section->signaturesLen, 4)); uint32_t pos = 0; for (uint32_t i = 0; i < signature_section->signaturesLen; i++) { // Skip the signature's 1 byte index @@ -238,9 +237,9 @@ zxerr_t crypto_hashSigSection(const signature_section_t *signature_section, cons pos += signatureSize; } if(pos > 0) { - cx_sha256_update(&sha256, signature_section->indexedSignatures.ptr, pos); + CHECK_CX_OK(cx_sha256_update(&sha256, signature_section->indexedSignatures.ptr, pos)); } - cx_sha256_final(&sha256, output); + CHECK_CX_OK(cx_sha256_final(&sha256, output)); return zxerr_ok; } @@ -257,12 +256,6 @@ static zxerr_t crypto_addTxnHashes(const parser_tx_t *txObj, concatenated_hashes hashes->hashesLen++; break; - case InitValidator: - MEMCPY(hashes->hashes.ptr + hashes->hashesLen * HASH_LEN, txObj->initValidator.vp_type_sechash.ptr, HASH_LEN); - hashes->indices.ptr[hashes->hashesLen] = txObj->initValidator.vp_type_secidx; - hashes->hashesLen++; - break; - case UpdateVP: MEMCPY(hashes->hashes.ptr + hashes->hashesLen * HASH_LEN, txObj->updateVp.vp_type_sechash.ptr, HASH_LEN); hashes->indices.ptr[hashes->hashesLen] = txObj->updateVp.vp_type_secidx; diff --git a/app/src/crypto_helper.c b/app/src/crypto_helper.c index 370e948c..1ca2d11f 100644 --- a/app/src/crypto_helper.c +++ b/app/src/crypto_helper.c @@ -18,6 +18,7 @@ #include "bech32.h" #include "zxformat.h" #include "leb128.h" +#include "zxmacros.h" #ifdef LEDGER_SPECIFIC #include "bolos_target.h" @@ -70,17 +71,15 @@ static zxerr_t crypto_publicKeyHash_ed25519(uint8_t *publicKeyHash, const uint8_ return zxerr_ok; } -uint8_t crypto_encodePubkey_ed25519(uint8_t *buffer, uint16_t bufferLen, const uint8_t *pubkey, bool isTestnet) { +uint8_t crypto_encodePubkey_ed25519(uint8_t *buffer, uint16_t bufferLen, const uint8_t *pubkey) { if (buffer == NULL || pubkey == NULL) { return 0; } - if ((bufferLen < ADDRESS_LEN_TESTNET && isTestnet) || bufferLen < ADDRESS_LEN_MAINNET) { + if (bufferLen < ADDRESS_LEN_TESTNET) { return 0; } - const char *hrp = isTestnet ? "tnam" : "a"; - // Step 1: Compute the hash of the Ed25519 public key uint8_t publicKeyHash[21] = {0}; crypto_publicKeyHash_ed25519(publicKeyHash, pubkey); @@ -89,7 +88,7 @@ uint8_t crypto_encodePubkey_ed25519(uint8_t *buffer, uint16_t bufferLen, const u char addr_out[79] = {0}; zxerr_t err = bech32EncodeFromBytes(addr_out, sizeof(addr_out), - hrp, + "tnam", publicKeyHash, sizeof(publicKeyHash), 1, @@ -99,9 +98,8 @@ uint8_t crypto_encodePubkey_ed25519(uint8_t *buffer, uint16_t bufferLen, const u return 0; } - const uint8_t addressLen = isTestnet ? ADDRESS_LEN_TESTNET : ADDRESS_LEN_MAINNET; - memcpy(buffer, addr_out, addressLen); - return addressLen; + memcpy(buffer, addr_out, ADDRESS_LEN_TESTNET); + return ADDRESS_LEN_TESTNET; } zxerr_t crypto_sha256(const uint8_t *input, uint16_t inputLen, uint8_t *output, uint16_t outputLen) { @@ -130,14 +128,14 @@ zxerr_t crypto_hashExtraDataSection(const section_t *extraData, uint8_t *output, #if defined(TARGET_NANOS) || defined(TARGET_NANOS2) || defined(TARGET_NANOX) || defined(TARGET_STAX) cx_sha256_t sha256 = {0}; cx_sha256_init(&sha256); - cx_sha256_update(&sha256, &extraData->discriminant, 1); - cx_sha256_update(&sha256, extraData->salt.ptr, extraData->salt.len); - cx_sha256_update(&sha256, extraData->bytes.ptr, extraData->bytes.len); + CHECK_CX_OK(cx_sha256_update(&sha256, &extraData->discriminant, 1)); + CHECK_CX_OK(cx_sha256_update(&sha256, extraData->salt.ptr, extraData->salt.len)); + CHECK_CX_OK(cx_sha256_update(&sha256, extraData->bytes.ptr, extraData->bytes.len)); uint8_t has_tag = (extraData->tag.ptr == NULL) ? 0 : 1; - cx_sha256_update(&sha256, &has_tag, 1); - cx_sha256_update(&sha256, (uint8_t*) &extraData->tag.len, has_tag*sizeof(extraData->tag.len)); - cx_sha256_update(&sha256, extraData->tag.ptr, has_tag*extraData->tag.len); - cx_sha256_final(&sha256, output); + CHECK_CX_OK(cx_sha256_update(&sha256, &has_tag, 1)); + CHECK_CX_OK(cx_sha256_update(&sha256, (uint8_t*) &extraData->tag.len, has_tag*sizeof(extraData->tag.len))); + CHECK_CX_OK(cx_sha256_update(&sha256, extraData->tag.ptr, has_tag*extraData->tag.len)); + CHECK_CX_OK(cx_sha256_final(&sha256, output)); #else picohash_ctx_t sha256 = {0}; picohash_init_sha256(&sha256); @@ -162,11 +160,11 @@ zxerr_t crypto_hashDataSection(const section_t *data, uint8_t *output, uint32_t #if defined(TARGET_NANOS) || defined(TARGET_NANOS2) || defined(TARGET_NANOX) || defined(TARGET_STAX) cx_sha256_t sha256 = {0}; cx_sha256_init(&sha256); - cx_sha256_update(&sha256, &data->discriminant, 1); - cx_sha256_update(&sha256, data->salt.ptr, data->salt.len); - cx_sha256_update(&sha256, (uint8_t*) &data->bytes.len, sizeof(data->bytes.len)); - cx_sha256_update(&sha256, data->bytes.ptr, data->bytes.len); - cx_sha256_final(&sha256, output); + CHECK_CX_OK(cx_sha256_update(&sha256, &data->discriminant, 1)); + CHECK_CX_OK(cx_sha256_update(&sha256, data->salt.ptr, data->salt.len)); + CHECK_CX_OK(cx_sha256_update(&sha256, (uint8_t*) &data->bytes.len, sizeof(data->bytes.len))); + CHECK_CX_OK(cx_sha256_update(&sha256, data->bytes.ptr, data->bytes.len)); + CHECK_CX_OK(cx_sha256_final(&sha256, output)); #else picohash_ctx_t sha256 = {0}; picohash_init_sha256(&sha256); @@ -188,14 +186,14 @@ zxerr_t crypto_hashCodeSection(const section_t *code, uint8_t *output, uint32_t #if defined(TARGET_NANOS) || defined(TARGET_NANOS2) || defined(TARGET_NANOX) || defined(TARGET_STAX) cx_sha256_t sha256 = {0}; cx_sha256_init(&sha256); - cx_sha256_update(&sha256, &code->discriminant, 1); - cx_sha256_update(&sha256, code->salt.ptr, code->salt.len); - cx_sha256_update(&sha256, code->bytes.ptr, code->bytes.len); + CHECK_CX_OK(cx_sha256_update(&sha256, &code->discriminant, 1)); + CHECK_CX_OK(cx_sha256_update(&sha256, code->salt.ptr, code->salt.len)); + CHECK_CX_OK(cx_sha256_update(&sha256, code->bytes.ptr, code->bytes.len)); uint8_t has_tag = (code->tag.ptr == NULL) ? 0 : 1; - cx_sha256_update(&sha256, &has_tag, 1); - cx_sha256_update(&sha256, (uint8_t*) &code->tag.len, has_tag*sizeof(code->tag.len)); - cx_sha256_update(&sha256, code->tag.ptr, has_tag*code->tag.len); - cx_sha256_final(&sha256, output); + CHECK_CX_OK(cx_sha256_update(&sha256, &has_tag, 1)); + CHECK_CX_OK(cx_sha256_update(&sha256, (uint8_t*) &code->tag.len, has_tag*sizeof(code->tag.len))); + CHECK_CX_OK(cx_sha256_update(&sha256, code->tag.ptr, has_tag*code->tag.len)); + CHECK_CX_OK(cx_sha256_final(&sha256, output)); #else picohash_ctx_t sha256 = {0}; picohash_init_sha256(&sha256); diff --git a/app/src/crypto_helper.h b/app/src/crypto_helper.h index ae158518..dc147a20 100644 --- a/app/src/crypto_helper.h +++ b/app/src/crypto_helper.h @@ -30,8 +30,7 @@ extern "C" { #define CODE_HASH_INFO_SIZE 2 -uint8_t crypto_encodePubkey_ed25519(uint8_t *buffer, uint16_t bufferLen, - const uint8_t *pubkey, bool isTestnet); +uint8_t crypto_encodePubkey_ed25519(uint8_t *buffer, uint16_t bufferLen, const uint8_t *pubkey); zxerr_t crypto_sha256(const uint8_t *input, uint16_t inputLen, uint8_t *output, uint16_t outputLen); diff --git a/app/src/leb128.c b/app/src/leb128.c index 1b5ab2a3..d6c1fdd3 100644 --- a/app/src/leb128.c +++ b/app/src/leb128.c @@ -14,6 +14,7 @@ * limitations under the License. ******************************************************************************* */ #include "leb128.h" +#include zxerr_t encodeLEB128(uint64_t number, uint8_t *encoded, uint8_t encodedLen, uint8_t *encodedBytes) { if (encoded == NULL || encodedBytes == NULL) { diff --git a/app/src/leb128.h b/app/src/leb128.h index f5da34f9..922f3773 100644 --- a/app/src/leb128.h +++ b/app/src/leb128.h @@ -20,6 +20,7 @@ extern "C" { #endif #include +#include #define MAX_LEB128_OUTPUT 10 diff --git a/app/src/parser_impl.c b/app/src/parser_impl.c index ad4d7b93..46f3b04e 100644 --- a/app/src/parser_impl.c +++ b/app/src/parser_impl.c @@ -79,16 +79,15 @@ parser_error_t getNumItems(const parser_context_t *ctx, uint8_t *numItems) { *numItems = (app_mode_expert() ? COMMISSION_CHANGE_EXPERT_PARAMS : COMMISSION_CHANGE_NORMAL_PARAMS); break; - case InitValidator: { - const uint32_t accounts = ctx->tx_obj->initValidator.number_of_account_keys; - *numItems = (uint8_t) ((app_mode_expert() ? INIT_VALIDATOR_EXPERT_PARAMS : INIT_VALIDATOR_NORMAL_PARAMS) + accounts); - if(ctx->tx_obj->initValidator.description.ptr) { + case BecomeValidator: { + *numItems = (app_mode_expert() ? BECOME_VALIDATOR_EXPERT_PARAMS : BECOME_VALIDATOR_NORMAL_PARAMS); + if(ctx->tx_obj->becomeValidator.description.ptr) { (*numItems)++; } - if(ctx->tx_obj->initValidator.discord_handle.ptr) { + if(ctx->tx_obj->becomeValidator.discord_handle.ptr) { (*numItems)++; } - if(ctx->tx_obj->initValidator.website.ptr) { + if(ctx->tx_obj->becomeValidator.website.ptr) { (*numItems)++; } break; diff --git a/app/src/parser_impl_common.h b/app/src/parser_impl_common.h index 410feaaa..b6888808 100644 --- a/app/src/parser_impl_common.h +++ b/app/src/parser_impl_common.h @@ -39,8 +39,8 @@ extern "C" { #define VOTE_PROPOSAL_NORMAL_PARAMS 4 #define VOTE_PROPOSAL_EXPERT_PARAMS 9 -#define INIT_VALIDATOR_NORMAL_PARAMS 10 -#define INIT_VALIDATOR_EXPERT_PARAMS 15 +#define BECOME_VALIDATOR_NORMAL_PARAMS 9 +#define BECOME_VALIDATOR_EXPERT_PARAMS 14 #define REVEAL_PUBKEY_NORMAL_PARAMS 2 #define REVEAL_PUBKEY_EXPERT_PARAMS 7 diff --git a/app/src/parser_impl_txn.c b/app/src/parser_impl_txn.c index b70d4230..d2328dc7 100644 --- a/app/src/parser_impl_txn.c +++ b/app/src/parser_impl_txn.c @@ -37,7 +37,7 @@ static const txn_types_t allowed_txn[] = { {"tx_init_account.wasm", InitAccount}, {"tx_init_proposal.wasm", InitProposal}, {"tx_vote_proposal.wasm", VoteProposal}, - {"tx_init_validator.wasm", InitValidator}, + {"tx_become_validator.wasm", BecomeValidator}, {"tx_reveal_pk.wasm", RevealPubkey}, {"tx_transfer.wasm", Transfer}, {"tx_update_account.wasm", UpdateVP}, @@ -173,111 +173,68 @@ static parser_error_t readTransactionType(bytes_t *codeTag, transaction_type_e * return parser_ok; } -static parser_error_t readInitValidatorTxn(bytes_t *data, const section_t *extra_data, const uint32_t extraDataLen, parser_tx_t *v) { +static parser_error_t readBecomeValidatorTxn(bytes_t *data, const section_t *extra_data, const uint32_t extraDataLen, parser_tx_t *v) { if (data == NULL || extra_data == NULL || v == NULL || extraDataLen >= MAX_EXTRA_DATA_SECS) { return parser_unexpected_value; } parser_context_t ctx = {.buffer = data->ptr, .bufferLen = data->len, .offset = 0, .tx_obj = NULL}; - v->initValidator.number_of_account_keys = 0; - CHECK_ERROR(readUint32(&ctx, &v->initValidator.number_of_account_keys)) - if (v->initValidator.number_of_account_keys == 0) { - return parser_unexpected_number_items; - } - v->initValidator.account_keys.len = PK_LEN_25519_PLUS_TAG * v->initValidator.number_of_account_keys; - CHECK_ERROR(readBytes(&ctx, &v->initValidator.account_keys.ptr, v->initValidator.account_keys.len)) - - CHECK_ERROR(readByte(&ctx, &v->initValidator.threshold)) + v->becomeValidator.address.len = ADDRESS_LEN_BYTES; + CHECK_ERROR(readBytes(&ctx, &v->becomeValidator.address.ptr, v->becomeValidator.address.len)) - v->initValidator.consensus_key.len = PK_LEN_25519_PLUS_TAG; - CHECK_ERROR(readBytes(&ctx, &v->initValidator.consensus_key.ptr, v->initValidator.consensus_key.len)) + v->becomeValidator.consensus_key.len = PK_LEN_25519_PLUS_TAG; + CHECK_ERROR(readBytes(&ctx, &v->becomeValidator.consensus_key.ptr, v->becomeValidator.consensus_key.len)) - v->initValidator.eth_cold_key.len = PK_LEN_25519_PLUS_TAG; - CHECK_ERROR(readBytes(&ctx, &v->initValidator.eth_cold_key.ptr, v->initValidator.eth_cold_key.len)) + v->becomeValidator.eth_cold_key.len = PK_LEN_25519_PLUS_TAG; + CHECK_ERROR(readBytes(&ctx, &v->becomeValidator.eth_cold_key.ptr, v->becomeValidator.eth_cold_key.len)) - v->initValidator.eth_hot_key.len = PK_LEN_25519_PLUS_TAG; - CHECK_ERROR(readBytes(&ctx, &v->initValidator.eth_hot_key.ptr, v->initValidator.eth_hot_key.len)) + v->becomeValidator.eth_hot_key.len = PK_LEN_25519_PLUS_TAG; + CHECK_ERROR(readBytes(&ctx, &v->becomeValidator.eth_hot_key.ptr, v->becomeValidator.eth_hot_key.len)) - v->initValidator.protocol_key.len = PK_LEN_25519_PLUS_TAG; - CHECK_ERROR(readBytes(&ctx, &v->initValidator.protocol_key.ptr, v->initValidator.protocol_key.len)) + v->becomeValidator.protocol_key.len = PK_LEN_25519_PLUS_TAG; + CHECK_ERROR(readBytes(&ctx, &v->becomeValidator.protocol_key.ptr, v->becomeValidator.protocol_key.len)) // Commission rate - CHECK_ERROR(readUint256(&ctx, &v->initValidator.commission_rate)); + CHECK_ERROR(readUint256(&ctx, &v->becomeValidator.commission_rate)); // Max commission rate change - CHECK_ERROR(readUint256(&ctx, &v->initValidator.max_commission_rate_change)); + CHECK_ERROR(readUint256(&ctx, &v->becomeValidator.max_commission_rate_change)); // The validator email - CHECK_ERROR(readUint32(&ctx, &v->initValidator.email.len)) - CHECK_ERROR(readBytes(&ctx, &v->initValidator.email.ptr, v->initValidator.email.len)) + CHECK_ERROR(readUint32(&ctx, &v->becomeValidator.email.len)) + CHECK_ERROR(readBytes(&ctx, &v->becomeValidator.email.ptr, v->becomeValidator.email.len)) /// The validator description - v->initValidator.description.ptr = NULL; - v->initValidator.description.len = 0; + v->becomeValidator.description.ptr = NULL; + v->becomeValidator.description.len = 0; uint8_t has_description = 0; CHECK_ERROR(readByte(&ctx, &has_description)) if (has_description) { - CHECK_ERROR(readUint32(&ctx, &v->initValidator.description.len)) - CHECK_ERROR(readBytes(&ctx, &v->initValidator.description.ptr, v->initValidator.description.len)) + CHECK_ERROR(readUint32(&ctx, &v->becomeValidator.description.len)) + CHECK_ERROR(readBytes(&ctx, &v->becomeValidator.description.ptr, v->becomeValidator.description.len)) } /// The validator website - v->initValidator.website.ptr = NULL; - v->initValidator.website.len = 0; + v->becomeValidator.website.ptr = NULL; + v->becomeValidator.website.len = 0; uint8_t has_website; CHECK_ERROR(readByte(&ctx, &has_website)) if (has_website) { - CHECK_ERROR(readUint32(&ctx, &v->initValidator.website.len)) - CHECK_ERROR(readBytes(&ctx, &v->initValidator.website.ptr, v->initValidator.website.len)) + CHECK_ERROR(readUint32(&ctx, &v->becomeValidator.website.len)) + CHECK_ERROR(readBytes(&ctx, &v->becomeValidator.website.ptr, v->becomeValidator.website.len)) } /// The validator's discord handle - v->initValidator.discord_handle.ptr = NULL; - v->initValidator.discord_handle.len = 0; + v->becomeValidator.discord_handle.ptr = NULL; + v->becomeValidator.discord_handle.len = 0; uint8_t has_discord_handle; CHECK_ERROR(readByte(&ctx, &has_discord_handle)) if (has_discord_handle) { - CHECK_ERROR(readUint32(&ctx, &v->initValidator.discord_handle.len)) - CHECK_ERROR(readBytes(&ctx, &v->initValidator.discord_handle.ptr, v->initValidator.discord_handle.len)) - } - - // VP code hash - v->initValidator.vp_type_sechash.len = HASH_LEN; - CHECK_ERROR(readBytes(&ctx, &v->initValidator.vp_type_sechash.ptr, v->initValidator.vp_type_sechash.len)) - - bool found_vp_code = false; - // Load the linked to data from the extra data sections - for (uint32_t i = 0; i < extraDataLen; i++) { - parser_context_t extra_data_ctx = { - .buffer = extra_data[i].bytes.ptr, - .bufferLen = extra_data[i].bytes.len, - .offset = 0, - .tx_obj = NULL}; - - // Read the hash inside the extra data section - bytes_t commitment = { .ptr = NULL, .len = HASH_LEN }; - CHECK_ERROR(readBytes(&extra_data_ctx, &commitment.ptr, commitment.len)) - - uint8_t extraDataHash[HASH_LEN] = {0}; - if (crypto_hashExtraDataSection(&extra_data[i], extraDataHash, sizeof(extraDataHash)) != zxerr_ok) { - return parser_unexpected_error; - } - - if (!memcmp(extraDataHash, v->initValidator.vp_type_sechash.ptr, HASH_LEN)) { - // If this section contains the VP code hash - v->initValidator.vp_type_secidx = extra_data[i].idx; - v->initValidator.vp_type_hash = commitment; - CHECK_ERROR(readVPType(&extra_data[i].tag, &v->initValidator.vp_type_text)) - found_vp_code = true; - } - if (extra_data_ctx.offset != extra_data_ctx.bufferLen) { - return parser_unexpected_characters; - } + CHECK_ERROR(readUint32(&ctx, &v->becomeValidator.discord_handle.len)) + CHECK_ERROR(readBytes(&ctx, &v->becomeValidator.discord_handle.ptr, v->becomeValidator.discord_handle.len)) } - if (!found_vp_code) { - return parser_missing_field; - } else if (ctx.offset != ctx.bufferLen) { + if (ctx.offset != ctx.bufferLen) { return parser_unexpected_characters; } return parser_ok; @@ -1177,8 +1134,8 @@ parser_error_t validateTransactionParams(parser_tx_t *txObj) { case CommissionChange: CHECK_ERROR(readCommissionChangeTxn(&txObj->transaction.sections.data.bytes, txObj)) break; - case InitValidator: - CHECK_ERROR(readInitValidatorTxn(&txObj->transaction.sections.data.bytes, txObj->transaction.sections.extraData, txObj->transaction.sections.extraDataLen, txObj)) + case BecomeValidator: + CHECK_ERROR(readBecomeValidatorTxn(&txObj->transaction.sections.data.bytes, txObj->transaction.sections.extraData, txObj->transaction.sections.extraDataLen, txObj)) break; case UpdateVP: CHECK_ERROR(readUpdateVPTxn(&txObj->transaction.sections.data.bytes, txObj->transaction.sections.extraData, txObj->transaction.sections.extraDataLen, txObj)) diff --git a/app/src/parser_print_txn.c b/app/src/parser_print_txn.c index 718b8fc3..a1769d89 100644 --- a/app/src/parser_print_txn.c +++ b/app/src/parser_print_txn.c @@ -548,30 +548,23 @@ static parser_error_t printUpdateVPTxn(const parser_context_t *ctx, return parser_ok; } -static parser_error_t printInitValidatorTxn( const parser_context_t *ctx, +static parser_error_t printBecomeValidatorTxn( const parser_context_t *ctx, uint8_t displayIdx, char *outKey, uint16_t outKeyLen, char *outVal, uint16_t outValLen, uint8_t pageIdx, uint8_t *pageCount) { - - const tx_init_validator_t *initValidator = &ctx->tx_obj->initValidator; - const uint32_t account_keys = initValidator->number_of_account_keys; - - uint8_t adjustedDisplayIdx = (displayIdx == 0) ? displayIdx : \ - (displayIdx < account_keys + 1) ? 1 : displayIdx - account_keys + 1; - - if(adjustedDisplayIdx >= 10 && ctx->tx_obj->initValidator.description.ptr == NULL) { - adjustedDisplayIdx++; + if(displayIdx >= 9 && ctx->tx_obj->becomeValidator.description.ptr == NULL) { + displayIdx++; } - if(adjustedDisplayIdx >= 11 && ctx->tx_obj->initValidator.website.ptr == NULL) { - adjustedDisplayIdx++; + if(displayIdx >= 10 && ctx->tx_obj->becomeValidator.website.ptr == NULL) { + displayIdx++; } - if(adjustedDisplayIdx >= 12 && ctx->tx_obj->initValidator.discord_handle.ptr == NULL) { - adjustedDisplayIdx++; + if(displayIdx >= 11 && ctx->tx_obj->becomeValidator.discord_handle.ptr == NULL) { + displayIdx++; } - switch (adjustedDisplayIdx) { + switch (displayIdx) { case 0: snprintf(outKey, outKeyLen, "Type"); snprintf(outVal, outValLen, "Init Validator"); @@ -581,97 +574,69 @@ static parser_error_t printInitValidatorTxn( const parser_context_t *ctx, } break; case 1: { - snprintf(outKey, outKeyLen, "Account key"); - const uint8_t key_index = displayIdx - 1; - const bytes_t key = { - .ptr = initValidator->account_keys.ptr + PK_LEN_25519_PLUS_TAG * key_index, - .len = PK_LEN_25519_PLUS_TAG - }; - CHECK_ERROR(printPublicKey(&key, outVal, outValLen, pageIdx, pageCount)); + snprintf(outKey, outKeyLen, "Address"); + CHECK_ERROR(printAddress(ctx->tx_obj->becomeValidator.address, outVal, outValLen, pageIdx, pageCount)) break; } case 2: { - *pageCount = 1; - snprintf(outKey, outKeyLen, "Threshold"); - snprintf(outVal, outValLen, "%d", initValidator->threshold); - break; - } - case 3: { snprintf(outKey, outKeyLen, "Consensus key"); - const bytes_t *consensusKey = &ctx->tx_obj->initValidator.consensus_key; + const bytes_t *consensusKey = &ctx->tx_obj->becomeValidator.consensus_key; CHECK_ERROR(printPublicKey(consensusKey, outVal, outValLen, pageIdx, pageCount)); break; } - case 4: { + case 3: { snprintf(outKey, outKeyLen, "Ethereum cold key"); - const bytes_t *ethColdKey = &ctx->tx_obj->initValidator.eth_cold_key; + const bytes_t *ethColdKey = &ctx->tx_obj->becomeValidator.eth_cold_key; pageStringHex(outVal, outValLen, (const char*) ethColdKey->ptr, ethColdKey->len, pageIdx, pageCount); break; } - case 5: { + case 4: { snprintf(outKey, outKeyLen, "Ethereum hot key"); - const bytes_t *ethHotKey = &ctx->tx_obj->initValidator.eth_hot_key; + const bytes_t *ethHotKey = &ctx->tx_obj->becomeValidator.eth_hot_key; pageStringHex(outVal, outValLen, (const char*) ethHotKey->ptr, ethHotKey->len, pageIdx, pageCount); break; } - case 6: { + case 5: { snprintf(outKey, outKeyLen, "Protocol key"); - const bytes_t *protocolKey = &ctx->tx_obj->initValidator.protocol_key; + const bytes_t *protocolKey = &ctx->tx_obj->becomeValidator.protocol_key; CHECK_ERROR(printPublicKey(protocolKey, outVal, outValLen, pageIdx, pageCount)); break; } - case 7: { + case 6: { snprintf(outKey, outKeyLen, "Commission rate"); - CHECK_ERROR(printAmount(&ctx->tx_obj->initValidator.commission_rate, POS_DECIMAL_PRECISION, "", outVal, outValLen, pageIdx, pageCount)) + CHECK_ERROR(printAmount(&ctx->tx_obj->becomeValidator.commission_rate, POS_DECIMAL_PRECISION, "", outVal, outValLen, pageIdx, pageCount)) break; } - case 8: { + case 7: { snprintf(outKey, outKeyLen, "Maximum commission rate change"); - CHECK_ERROR(printAmount(&ctx->tx_obj->initValidator.max_commission_rate_change, POS_DECIMAL_PRECISION, "", outVal, outValLen, pageIdx, pageCount)) + CHECK_ERROR(printAmount(&ctx->tx_obj->becomeValidator.max_commission_rate_change, POS_DECIMAL_PRECISION, "", outVal, outValLen, pageIdx, pageCount)) break; } - case 9: { + case 8: { snprintf(outKey, outKeyLen, "Email"); - pageStringExt(outVal, outValLen, (const char*)ctx->tx_obj->initValidator.email.ptr, ctx->tx_obj->initValidator.email.len, pageIdx, pageCount); + pageStringExt(outVal, outValLen, (const char*)ctx->tx_obj->becomeValidator.email.ptr, ctx->tx_obj->becomeValidator.email.len, pageIdx, pageCount); break; } - case 10: { + case 9: { snprintf(outKey, outKeyLen, "Description"); - pageStringExt(outVal, outValLen, (const char*)ctx->tx_obj->initValidator.description.ptr, ctx->tx_obj->initValidator.description.len, pageIdx, pageCount); + pageStringExt(outVal, outValLen, (const char*)ctx->tx_obj->becomeValidator.description.ptr, ctx->tx_obj->becomeValidator.description.len, pageIdx, pageCount); break; } - case 11: { + case 10: { snprintf(outKey, outKeyLen, "Website"); - pageStringExt(outVal, outValLen, (const char*)ctx->tx_obj->initValidator.website.ptr, ctx->tx_obj->initValidator.website.len, pageIdx, pageCount); + pageStringExt(outVal, outValLen, (const char*)ctx->tx_obj->becomeValidator.website.ptr, ctx->tx_obj->becomeValidator.website.len, pageIdx, pageCount); break; } - case 12: { + case 11: { snprintf(outKey, outKeyLen, "Discord handle"); - pageStringExt(outVal, outValLen, (const char*)ctx->tx_obj->initValidator.discord_handle.ptr, ctx->tx_obj->initValidator.discord_handle.len, pageIdx, pageCount); - break; - } - case 13: { - snprintf(outKey, outKeyLen, "Validator VP type"); - pageString(outVal, outValLen,ctx->tx_obj->initValidator.vp_type_text, pageIdx, pageCount); - if (app_mode_expert()) { - pageStringHex(outVal, outValLen, (const char*)ctx->tx_obj->initValidator.vp_type_hash.ptr, ctx->tx_obj->initValidator.vp_type_hash.len, pageIdx, pageCount); - } + pageStringExt(outVal, outValLen, (const char*)ctx->tx_obj->becomeValidator.discord_handle.ptr, ctx->tx_obj->becomeValidator.discord_handle.len, pageIdx, pageCount); break; } default: { if (!app_mode_expert()) { return parser_display_idx_out_of_range; } - displayIdx -= INIT_VALIDATOR_NORMAL_PARAMS + account_keys; - if (initValidator->description.ptr != NULL) { - displayIdx--; - } - if (initValidator->discord_handle.ptr != NULL) { - displayIdx--; - } - if (initValidator->website.ptr != NULL) { - displayIdx--; - } + displayIdx -= 12; return printExpert(ctx, displayIdx, outKey, outKeyLen, outVal, outValLen, pageIdx, pageCount); } } @@ -868,8 +833,8 @@ parser_error_t printTxnFields(const parser_context_t *ctx, case CommissionChange: return printCommissionChangeTxn(ctx, displayIdx, outKey, outKeyLen, outVal, outValLen, pageIdx, pageCount); - case InitValidator: - return printInitValidatorTxn(ctx, displayIdx, outKey, outKeyLen, outVal, outValLen, pageIdx, pageCount); + case BecomeValidator: + return printBecomeValidatorTxn(ctx, displayIdx, outKey, outKeyLen, outVal, outValLen, pageIdx, pageCount); case UpdateVP: return printUpdateVPTxn(ctx, displayIdx, outKey, outKeyLen, outVal, outValLen, pageIdx, pageCount); diff --git a/app/src/parser_txdef.h b/app/src/parser_txdef.h index 7951f6db..aacaf239 100644 --- a/app/src/parser_txdef.h +++ b/app/src/parser_txdef.h @@ -184,7 +184,7 @@ typedef struct{ tx_unjail_validator_t unjailValidator; tx_withdraw_t withdraw; tx_commission_change_t commissionChange; - tx_init_validator_t initValidator; + tx_become_validator_t becomeValidator; tx_update_vp_t updateVp; tx_ibc_t ibc; }; diff --git a/app/src/parser_types.h b/app/src/parser_types.h index 4d530058..5ecaaab2 100644 --- a/app/src/parser_types.h +++ b/app/src/parser_types.h @@ -36,7 +36,7 @@ typedef enum { InitAccount, InitProposal, VoteProposal, - InitValidator, + BecomeValidator, RevealPubkey, UpdateVP, Custom, @@ -170,9 +170,7 @@ typedef struct { } tx_commission_change_t; typedef struct { - uint32_t number_of_account_keys; - bytes_t account_keys; - uint8_t threshold; + bytes_t address; bytes_t consensus_key; bytes_t eth_cold_key; bytes_t eth_hot_key; @@ -183,11 +181,7 @@ typedef struct { bytes_t description; bytes_t website; bytes_t discord_handle; - uint8_t vp_type_secidx; - bytes_t vp_type_sechash; - bytes_t vp_type_hash; - const char* vp_type_text; -} tx_init_validator_t; +} tx_become_validator_t; typedef struct { bytes_t address; diff --git a/deps/ledger-secure-sdk b/deps/ledger-secure-sdk index 80309475..00e153de 160000 --- a/deps/ledger-secure-sdk +++ b/deps/ledger-secure-sdk @@ -1 +1 @@ -Subproject commit 803094754f77f23c556b065317bceda3b6d2c002 +Subproject commit 00e153de17b5f2be271aa09518358b5412d63a18 diff --git a/deps/ledger-zxlib b/deps/ledger-zxlib index 7f80d18a..0a865227 160000 --- a/deps/ledger-zxlib +++ b/deps/ledger-zxlib @@ -1 +1 @@ -Subproject commit 7f80d18afcf509f5028d226e36bc206624601229 +Subproject commit 0a865227e4ea08a035cfacb255d5cbb1cad61bfd diff --git a/deps/nanos-secure-sdk b/deps/nanos-secure-sdk index 30189cfd..0532bf20 160000 --- a/deps/nanos-secure-sdk +++ b/deps/nanos-secure-sdk @@ -1 +1 @@ -Subproject commit 30189cfd070040e5c144d4dab103d549302dcfff +Subproject commit 0532bf20fbbb11dd08dada62060f8337097b6078 diff --git a/js/package.json b/js/package.json index 67a6773f..b8e278b4 100644 --- a/js/package.json +++ b/js/package.json @@ -36,22 +36,22 @@ }, "devDependencies": { "@types/ledgerhq__hw-transport": "^4.21.8", - "@typescript-eslint/eslint-plugin": "^6.13.1", - "@typescript-eslint/parser": "^6.13.1", + "@typescript-eslint/eslint-plugin": "^6.14.0", + "@typescript-eslint/parser": "^6.14.0", "bip32": "^4.0.0", "bip39": "^3.1.0", - "core-js": "^3.33.3", + "core-js": "^3.34.0", "crypto-js": "4.2.0", - "eslint": "^8.54.0", - "eslint-config-prettier": "^9.0.0", + "eslint": "^8.55.0", + "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.0", "eslint-plugin-jest": "^27.6.0", "eslint-plugin-prettier": "^5.0.1", "jest": "^29.7.0", "leb128": "^0.0.5", - "prettier": "^3.1.0", + "prettier": "^3.1.1", "secp256k1": "^5.0.0", - "typescript": "^5.3.2" + "typescript": "^5.3.3" }, "moduleDirectories": [ "node_modules", diff --git a/ledger_app.toml b/ledger_app.toml new file mode 100644 index 00000000..3e4cbb1f --- /dev/null +++ b/ledger_app.toml @@ -0,0 +1,7 @@ +[app] +build_directory = "./app/" +sdk = "C" +devices = ["nanos", "nanox", "nanos+", "stax"] + +[tests] +unit_directory = "./tests/" diff --git a/rs/Cargo.toml b/rs/Cargo.toml index 094da46b..1d9c61ee 100644 --- a/rs/Cargo.toml +++ b/rs/Cargo.toml @@ -28,7 +28,7 @@ prost-types = "0.11.6" leb128 = "0.2.5" sha2 = "0.10.6" -ed25519-dalek = "1.0.1" +ed25519-dalek = "2.1.0" bincode = "1.3.3" [dev-dependencies] diff --git a/rs/src/lib.rs b/rs/src/lib.rs index ed29a676..a06d2be2 100644 --- a/rs/src/lib.rs +++ b/rs/src/lib.rs @@ -255,13 +255,15 @@ where section_hashes: HashMap>, pubkey: &[u8], ) -> bool { - use ed25519_dalek::{PublicKey, Signature}; + use ed25519_dalek::{Signature, VerifyingKey}; if pubkey != &signature.pubkey { return false; } - let public_key = PublicKey::from_bytes(&signature.pubkey[1..]).unwrap(); + let mut public_key_bytes = [0u8; 32]; + public_key_bytes.copy_from_slice(&signature.pubkey[1..33]); + let public_key = VerifyingKey::from_bytes(&public_key_bytes).unwrap(); let unsigned_raw_sig_hash = self.hash_signature_sec( vec![], §ion_hashes, @@ -269,7 +271,9 @@ where None, None, ); - let raw_signature = Signature::from_bytes(&signature.raw_signature[1..]).unwrap(); + let mut raw_signature_bytes = [0u8; 64]; + raw_signature_bytes.copy_from_slice(&signature.raw_signature[1..65]); + let raw_signature = Signature::from_bytes(&raw_signature_bytes); let raw_sig = public_key .verify(&unsigned_raw_sig_hash, &raw_signature) .is_ok(); @@ -295,7 +299,9 @@ where None, ); - let wrapper_signature = Signature::from_bytes(&signature.wrapper_signature[1..]).unwrap(); + let mut wrapper_signature_bytes = [0u8; 64]; + wrapper_signature_bytes.copy_from_slice(&signature.wrapper_signature[1..65]); + let wrapper_signature = Signature::from_bytes(&wrapper_signature_bytes); let wrapper_sig = public_key .verify(&unsigned_wrapper_sig_hash, &wrapper_signature) .is_ok(); diff --git a/tests/parser_impl.cpp b/tests/parser_impl.cpp index 251c7403..b6a71256 100644 --- a/tests/parser_impl.cpp +++ b/tests/parser_impl.cpp @@ -66,7 +66,7 @@ TEST(Address, NamadaEncoding) { testcase.pubkey.c_str()); uint8_t actualAddress[ADDRESS_LEN_TESTNET] = {0}; - const uint8_t address_len = crypto_encodePubkey_ed25519(actualAddress, sizeof(actualAddress), pubkey, true); + const uint8_t address_len = crypto_encodePubkey_ed25519(actualAddress, sizeof(actualAddress), pubkey); EXPECT_EQ(address_len, ADDRESS_LEN_TESTNET); const string namada_address(actualAddress, actualAddress + ADDRESS_LEN_TESTNET); diff --git a/tests/testvectors.json b/tests/testvectors.json index 9ca45f51..4acd41f6 100644 --- a/tests/testvectors.json +++ b/tests/testvectors.json @@ -1197,214 +1197,6 @@ ], "valid": true }, - { - "blob": "1d0000006c6f63616c6e65742e6664633665356661643365356535326433662d300023000000323032332d31312d31365431343a33333a31302e3636383135373431372b30303a3030b22ee9c99e4872bab5ba08de9ca303e91752467dfff0f9c553e48fd59710dd25f19e162831bc6d5727ccc116dffc00e7a8a63e70c7b839a8d8c88c411bf7cc470101000000000000000000000000000000000000000000000000000000000000000032fdd4e57f56519541491312d4e9089032244eca0048998ffa0340c473b72dad3604abd76581e71e4a334d0708ef754a0adcec66d81500000000000000a8610000000000000003000000010cd78cd88b0100000053e9023f2edc55e90bdcf6024760140a91a7904cb4a529cb1707ea3d34ee685a010c00000076705f757365722e7761736d020cd78cd88b01000000aa3b3dd227cd3199b3cef164b679fc62a4e6531ffce547eadb766c050d5fabfd011600000074785f696e69745f76616c696461746f722e7761736d000cd78cd88b0100001a010000010000000048998ffa0340c473b72dad3604abd76581e71e4a334d0708ef754a0adcec66d80100b8a1bde0e03a61c147c6f1213e0951e8947c3eabc7a81940bdb9a46da2575df1034f85391fb1d43071b7e020c2709923df792661f6436f0ee88790dd5564238fdf02ea1b59f3111bac9ec7715f569299bfd384d701d405734d7a7514df86bf5e993500bfce4de74239e46afaec08bbd6157d082a21554220a1d9e3a470d7a346aa7d5a00743ba40b00000000000000000000000000000000000000000000000000000000e40b5402000000000000000000000000000000000000000000000000000000090000006d65406d652e636f6d000000832542bf65dcc5e4846a4e9e539946ce7c81f566337c25bb4adb33c0ee16dcbe", - "index": 0, - "name": "Init_Validator_0", - "output": [ - "0 | Type : Init Validator", - "1 | Account key [1/2] : tpknam1qpyfnrl6qdqvguah9kknvp9t6ajcrec", - "1 | Account key [2/2] : 7fge56pcgaa655zkua3nds48x83t", - "2 | Threshold : 1", - "3 | Consensus key [1/2] : tpknam1qzu2r00quqaxrs28cmcjz0sf285fglp", - "3 | Consensus key [2/2] : 740r6sx2qhku6gmdz2awlzqd62jw", - "4 | Ethereum cold key [1/2] : 034f85391fb1d43071b7e020c2709923df7926", - "4 | Ethereum cold key [2/2] : 61f6436f0ee88790dd5564238fdf", - "5 | Ethereum hot key [1/2] : 02ea1b59f3111bac9ec7715f569299bfd384d7", - "5 | Ethereum hot key [2/2] : 01d405734d7a7514df86bf5e9935", - "6 | Protocol key [1/2] : tpknam1qzluun08ggu7g6h6asyth4s405yz5g2", - "6 | Protocol key [2/2] : 4ggs2rk0r53cd0g6x4f745yxzzk2", - "7 | Commission rate : 0.05", - "8 | Maximum commission rate change : 0.01", - "9 | Email : me@me.com", - "10 | Validator VP type : User" - ], - "output_expert": [ - "0 | Code hash [1/2] : aa3b3dd227cd3199b3cef164b679fc62a4e653", - "0 | Code hash [2/2] : 1ffce547eadb766c050d5fabfd", - "1 | Account key [1/2] : tpknam1qpyfnrl6qdqvguah9kknvp9t6ajcrec", - "1 | Account key [2/2] : 7fge56pcgaa655zkua3nds48x83t", - "2 | Threshold : 1", - "3 | Consensus key [1/2] : tpknam1qzu2r00quqaxrs28cmcjz0sf285fglp", - "3 | Consensus key [2/2] : 740r6sx2qhku6gmdz2awlzqd62jw", - "4 | Ethereum cold key [1/2] : 034f85391fb1d43071b7e020c2709923df7926", - "4 | Ethereum cold key [2/2] : 61f6436f0ee88790dd5564238fdf", - "5 | Ethereum hot key [1/2] : 02ea1b59f3111bac9ec7715f569299bfd384d7", - "5 | Ethereum hot key [2/2] : 01d405734d7a7514df86bf5e9935", - "6 | Protocol key [1/2] : tpknam1qzluun08ggu7g6h6asyth4s405yz5g2", - "6 | Protocol key [2/2] : 4ggs2rk0r53cd0g6x4f745yxzzk2", - "7 | Commission rate : 0.05", - "8 | Maximum commission rate change : 0.01", - "9 | Email : me@me.com", - "10 | Validator VP type [1/2] : 53e9023f2edc55e90bdcf6024760140a91a790", - "10 | Validator VP type [2/2] : 4cb4a529cb1707ea3d34ee685a", - "11 | Timestamp : 2023-11-16 14:33:10.668157417 UTC", - "12 | Pubkey [1/2] : tpknam1qpyfnrl6qdqvguah9kknvp9t6ajcrec", - "12 | Pubkey [2/2] : 7fge56pcgaa655zkua3nds48x83t", - "13 | Epoch : 21", - "14 | Gas limit : 0.025", - "15 | Fees/gas unit : NAM 0.000001" - ], - "valid": true - }, - { - "blob": "1d0000006c6f63616c6e65742e6664633665356661643365356535326433662d300023000000323032332d31312d31365431343a33333a31302e3636383135373431372b30303a3030b22ee9c99e4872bab5ba08de9ca303e91752467dfff0f9c553e48fd59710dd25f19e162831bc6d5727ccc116dffc00e7a8a63e70c7b839a8d8c88c411bf7cc470101000000000000000000000000000000000000000000000000000000000000000032fdd4e57f56519541491312d4e9089032244eca0048998ffa0340c473b72dad3604abd76581e71e4a334d0708ef754a0adcec66d81500000000000000a8610000000000000004000000010cd78cd88b0100000053e9023f2edc55e90bdcf6024760140a91a7904cb4a529cb1707ea3d34ee685a010c00000076705f757365722e7761736d020cd78cd88b01000000aa3b3dd227cd3199b3cef164b679fc62a4e6531ffce547eadb766c050d5fabfd011600000074785f696e69745f76616c696461746f722e7761736d000cd78cd88b0100001a010000010000000048998ffa0340c473b72dad3604abd76581e71e4a334d0708ef754a0adcec66d80100b8a1bde0e03a61c147c6f1213e0951e8947c3eabc7a81940bdb9a46da2575df1034f85391fb1d43071b7e020c2709923df792661f6436f0ee88790dd5564238fdf02ea1b59f3111bac9ec7715f569299bfd384d701d405734d7a7514df86bf5e993500bfce4de74239e46afaec08bbd6157d082a21554220a1d9e3a470d7a346aa7d5a00743ba40b00000000000000000000000000000000000000000000000000000000e40b5402000000000000000000000000000000000000000000000000000000090000006d65406d652e636f6d000000832542bf65dcc5e4846a4e9e539946ce7c81f566337c25bb4adb33c0ee16dcbe03040000001d050abff007fa2a0d4b9d133f65f6dd6c5a8334ea927a666581265267a436ce832542bf65dcc5e4846a4e9e539946ce7c81f566337c25bb4adb33c0ee16dcbeb22ee9c99e4872bab5ba08de9ca303e91752467dfff0f9c553e48fd59710dd25f19e162831bc6d5727ccc116dffc00e7a8a63e70c7b839a8d8c88c411bf7cc4701010000000048998ffa0340c473b72dad3604abd76581e71e4a334d0708ef754a0adcec66d8010000000000bcfb3e7c51dce264917b86c2784a3e793b0b2f01fbedda43fed5f21cc15b94cb950de6f28e85f3466d85f80b90fec6786690af83af6e0e3dcb8fc59438c18509", - "index": 0, - "name": "Init_Validator_1", - "output": [ - "0 | Type : Init Validator", - "1 | Account key [1/2] : tpknam1qpyfnrl6qdqvguah9kknvp9t6ajcrec", - "1 | Account key [2/2] : 7fge56pcgaa655zkua3nds48x83t", - "2 | Threshold : 1", - "3 | Consensus key [1/2] : tpknam1qzu2r00quqaxrs28cmcjz0sf285fglp", - "3 | Consensus key [2/2] : 740r6sx2qhku6gmdz2awlzqd62jw", - "4 | Ethereum cold key [1/2] : 034f85391fb1d43071b7e020c2709923df7926", - "4 | Ethereum cold key [2/2] : 61f6436f0ee88790dd5564238fdf", - "5 | Ethereum hot key [1/2] : 02ea1b59f3111bac9ec7715f569299bfd384d7", - "5 | Ethereum hot key [2/2] : 01d405734d7a7514df86bf5e9935", - "6 | Protocol key [1/2] : tpknam1qzluun08ggu7g6h6asyth4s405yz5g2", - "6 | Protocol key [2/2] : 4ggs2rk0r53cd0g6x4f745yxzzk2", - "7 | Commission rate : 0.05", - "8 | Maximum commission rate change : 0.01", - "9 | Email : me@me.com", - "10 | Validator VP type : User" - ], - "output_expert": [ - "0 | Code hash [1/2] : aa3b3dd227cd3199b3cef164b679fc62a4e653", - "0 | Code hash [2/2] : 1ffce547eadb766c050d5fabfd", - "1 | Account key [1/2] : tpknam1qpyfnrl6qdqvguah9kknvp9t6ajcrec", - "1 | Account key [2/2] : 7fge56pcgaa655zkua3nds48x83t", - "2 | Threshold : 1", - "3 | Consensus key [1/2] : tpknam1qzu2r00quqaxrs28cmcjz0sf285fglp", - "3 | Consensus key [2/2] : 740r6sx2qhku6gmdz2awlzqd62jw", - "4 | Ethereum cold key [1/2] : 034f85391fb1d43071b7e020c2709923df7926", - "4 | Ethereum cold key [2/2] : 61f6436f0ee88790dd5564238fdf", - "5 | Ethereum hot key [1/2] : 02ea1b59f3111bac9ec7715f569299bfd384d7", - "5 | Ethereum hot key [2/2] : 01d405734d7a7514df86bf5e9935", - "6 | Protocol key [1/2] : tpknam1qzluun08ggu7g6h6asyth4s405yz5g2", - "6 | Protocol key [2/2] : 4ggs2rk0r53cd0g6x4f745yxzzk2", - "7 | Commission rate : 0.05", - "8 | Maximum commission rate change : 0.01", - "9 | Email : me@me.com", - "10 | Validator VP type [1/2] : 53e9023f2edc55e90bdcf6024760140a91a790", - "10 | Validator VP type [2/2] : 4cb4a529cb1707ea3d34ee685a", - "11 | Timestamp : 2023-11-16 14:33:10.668157417 UTC", - "12 | Pubkey [1/2] : tpknam1qpyfnrl6qdqvguah9kknvp9t6ajcrec", - "12 | Pubkey [2/2] : 7fge56pcgaa655zkua3nds48x83t", - "13 | Epoch : 21", - "14 | Gas limit : 0.025", - "15 | Fees/gas unit : NAM 0.000001" - ], - "valid": true - }, - { - "blob": "1d0000006c6f63616c6e65742e6664633665356661643365356535326433662d300023000000323032332d31312d31365431343a33333a31332e3939313039383337302b30303a3030d2b4e2878956046502918062b8c80a5658f8f3431701c65da3eabef09dd2a9ba96c52b83086ec1af23e808f056f800644c4acec51817a07be92bea6e0ad97a600101000000000000000000000000000000000000000000000000000000000000000032fdd4e57f56519541491312d4e9089032244eca009fd0df101ba3e91d24f555893ae1bf0b271bd98363d6d4c659876731fe4a75171600000000000000a86100000000000000030000000107e48cd88b0100000053e9023f2edc55e90bdcf6024760140a91a7904cb4a529cb1707ea3d34ee685a010c00000076705f757365722e7761736d0207e48cd88b01000000aa3b3dd227cd3199b3cef164b679fc62a4e6531ffce547eadb766c050d5fabfd011600000074785f696e69745f76616c696461746f722e7761736d0007e48cd88b0100003b01000002000000009fd0df101ba3e91d24f555893ae1bf0b271bd98363d6d4c659876731fe4a75170048998ffa0340c473b72dad3604abd76581e71e4a334d0708ef754a0adcec66d80200ba6efc26f606b037a6c2fcf29ee4ff749620ca86ada7b629131f9946acebaa7003e25cb70ec981f27c465a3a8a35694950f2b0c9d747aa1e23aeb69dffe029abb703136e3f80ffcd087f6016f17398b14cbf07369b7af9cec264da4799f09e0b5b620011db6c2c277c4ece00ba8ece62910edc6aebd17d352b35a8e8a0f8251695977000743ba40b00000000000000000000000000000000000000000000000000000000e40b5402000000000000000000000000000000000000000000000000000000090000006d65406d652e636f6d00000087899a8f69a341d669bdd2baaad2db9c4e302559df5bb0dfc63684b1339102b2", - "index": 0, - "name": "Init_Validator_2", - "output": [ - "0 | Type : Init Validator", - "1 | Account key [1/2] : tpknam1qz0aphcsrw37j8fy742cjwhphu9jwx7", - "1 | Account key [2/2] : esd3ad4xxtxrkwv07ff63we33t3r", - "2 | Account key [1/2] : tpknam1qpyfnrl6qdqvguah9kknvp9t6ajcrec", - "2 | Account key [2/2] : 7fge56pcgaa655zkua3nds48x83t", - "3 | Threshold : 2", - "4 | Consensus key [1/2] : tpknam1qzaxalpx7crtqdaxct7098hyla6fvgx", - "4 | Consensus key [2/2] : 2s6k60d3fzv0ej34vaw48qr49atq", - "5 | Ethereum cold key [1/2] : 03e25cb70ec981f27c465a3a8a35694950f2b0", - "5 | Ethereum cold key [2/2] : c9d747aa1e23aeb69dffe029abb7", - "6 | Ethereum hot key [1/2] : 03136e3f80ffcd087f6016f17398b14cbf0736", - "6 | Ethereum hot key [2/2] : 9b7af9cec264da4799f09e0b5b62", - "7 | Protocol key [1/2] : tpknam1qqgakmpvya7yansqh28vuc53pmwx467", - "7 | Protocol key [2/2] : 3056jkddgazs0sfgkjkthqm688hw", - "8 | Commission rate : 0.05", - "9 | Maximum commission rate change : 0.01", - "10 | Email : me@me.com", - "11 | Validator VP type : User" - ], - "output_expert": [ - "0 | Code hash [1/2] : aa3b3dd227cd3199b3cef164b679fc62a4e653", - "0 | Code hash [2/2] : 1ffce547eadb766c050d5fabfd", - "1 | Account key [1/2] : tpknam1qz0aphcsrw37j8fy742cjwhphu9jwx7", - "1 | Account key [2/2] : esd3ad4xxtxrkwv07ff63we33t3r", - "2 | Account key [1/2] : tpknam1qpyfnrl6qdqvguah9kknvp9t6ajcrec", - "2 | Account key [2/2] : 7fge56pcgaa655zkua3nds48x83t", - "3 | Threshold : 2", - "4 | Consensus key [1/2] : tpknam1qzaxalpx7crtqdaxct7098hyla6fvgx", - "4 | Consensus key [2/2] : 2s6k60d3fzv0ej34vaw48qr49atq", - "5 | Ethereum cold key [1/2] : 03e25cb70ec981f27c465a3a8a35694950f2b0", - "5 | Ethereum cold key [2/2] : c9d747aa1e23aeb69dffe029abb7", - "6 | Ethereum hot key [1/2] : 03136e3f80ffcd087f6016f17398b14cbf0736", - "6 | Ethereum hot key [2/2] : 9b7af9cec264da4799f09e0b5b62", - "7 | Protocol key [1/2] : tpknam1qqgakmpvya7yansqh28vuc53pmwx467", - "7 | Protocol key [2/2] : 3056jkddgazs0sfgkjkthqm688hw", - "8 | Commission rate : 0.05", - "9 | Maximum commission rate change : 0.01", - "10 | Email : me@me.com", - "11 | Validator VP type [1/2] : 53e9023f2edc55e90bdcf6024760140a91a790", - "11 | Validator VP type [2/2] : 4cb4a529cb1707ea3d34ee685a", - "12 | Timestamp : 2023-11-16 14:33:13.991098370 UTC", - "13 | Pubkey [1/2] : tpknam1qz0aphcsrw37j8fy742cjwhphu9jwx7", - "13 | Pubkey [2/2] : esd3ad4xxtxrkwv07ff63we33t3r", - "14 | Epoch : 22", - "15 | Gas limit : 0.025", - "16 | Fees/gas unit : NAM 0.000001" - ], - "valid": true - }, - { - "blob": "1d0000006c6f63616c6e65742e6664633665356661643365356535326433662d300023000000323032332d31312d31365431343a33333a31332e3939313039383337302b30303a3030d2b4e2878956046502918062b8c80a5658f8f3431701c65da3eabef09dd2a9ba96c52b83086ec1af23e808f056f800644c4acec51817a07be92bea6e0ad97a600101000000000000000000000000000000000000000000000000000000000000000032fdd4e57f56519541491312d4e9089032244eca009fd0df101ba3e91d24f555893ae1bf0b271bd98363d6d4c659876731fe4a75171600000000000000a86100000000000000040000000107e48cd88b0100000053e9023f2edc55e90bdcf6024760140a91a7904cb4a529cb1707ea3d34ee685a010c00000076705f757365722e7761736d0207e48cd88b01000000aa3b3dd227cd3199b3cef164b679fc62a4e6531ffce547eadb766c050d5fabfd011600000074785f696e69745f76616c696461746f722e7761736d0007e48cd88b0100003b01000002000000009fd0df101ba3e91d24f555893ae1bf0b271bd98363d6d4c659876731fe4a75170048998ffa0340c473b72dad3604abd76581e71e4a334d0708ef754a0adcec66d80200ba6efc26f606b037a6c2fcf29ee4ff749620ca86ada7b629131f9946acebaa7003e25cb70ec981f27c465a3a8a35694950f2b0c9d747aa1e23aeb69dffe029abb703136e3f80ffcd087f6016f17398b14cbf07369b7af9cec264da4799f09e0b5b620011db6c2c277c4ece00ba8ece62910edc6aebd17d352b35a8e8a0f8251695977000743ba40b00000000000000000000000000000000000000000000000000000000e40b5402000000000000000000000000000000000000000000000000000000090000006d65406d652e636f6d00000087899a8f69a341d669bdd2baaad2db9c4e302559df5bb0dfc63684b1339102b2030400000025676c53c757a2ec370de469a011ea69211d72452e7b0879713dd82a6c3b8d7687899a8f69a341d669bdd2baaad2db9c4e302559df5bb0dfc63684b1339102b2d2b4e2878956046502918062b8c80a5658f8f3431701c65da3eabef09dd2a9ba96c52b83086ec1af23e808f056f800644c4acec51817a07be92bea6e0ad97a600101000000009fd0df101ba3e91d24f555893ae1bf0b271bd98363d6d4c659876731fe4a7517010000000000f19e5fe0b241065e6c04cb0d2c552a976754b84f0db584ca18f2cb8c7539a1c4afd007908f5478be9c4ceff4ca2055549b6061c9dc74f623f87ea1f1689c1c07", - "index": 0, - "name": "Init_Validator_3", - "output": [ - "0 | Type : Init Validator", - "1 | Account key [1/2] : tpknam1qz0aphcsrw37j8fy742cjwhphu9jwx7", - "1 | Account key [2/2] : esd3ad4xxtxrkwv07ff63we33t3r", - "2 | Account key [1/2] : tpknam1qpyfnrl6qdqvguah9kknvp9t6ajcrec", - "2 | Account key [2/2] : 7fge56pcgaa655zkua3nds48x83t", - "3 | Threshold : 2", - "4 | Consensus key [1/2] : tpknam1qzaxalpx7crtqdaxct7098hyla6fvgx", - "4 | Consensus key [2/2] : 2s6k60d3fzv0ej34vaw48qr49atq", - "5 | Ethereum cold key [1/2] : 03e25cb70ec981f27c465a3a8a35694950f2b0", - "5 | Ethereum cold key [2/2] : c9d747aa1e23aeb69dffe029abb7", - "6 | Ethereum hot key [1/2] : 03136e3f80ffcd087f6016f17398b14cbf0736", - "6 | Ethereum hot key [2/2] : 9b7af9cec264da4799f09e0b5b62", - "7 | Protocol key [1/2] : tpknam1qqgakmpvya7yansqh28vuc53pmwx467", - "7 | Protocol key [2/2] : 3056jkddgazs0sfgkjkthqm688hw", - "8 | Commission rate : 0.05", - "9 | Maximum commission rate change : 0.01", - "10 | Email : me@me.com", - "11 | Validator VP type : User" - ], - "output_expert": [ - "0 | Code hash [1/2] : aa3b3dd227cd3199b3cef164b679fc62a4e653", - "0 | Code hash [2/2] : 1ffce547eadb766c050d5fabfd", - "1 | Account key [1/2] : tpknam1qz0aphcsrw37j8fy742cjwhphu9jwx7", - "1 | Account key [2/2] : esd3ad4xxtxrkwv07ff63we33t3r", - "2 | Account key [1/2] : tpknam1qpyfnrl6qdqvguah9kknvp9t6ajcrec", - "2 | Account key [2/2] : 7fge56pcgaa655zkua3nds48x83t", - "3 | Threshold : 2", - "4 | Consensus key [1/2] : tpknam1qzaxalpx7crtqdaxct7098hyla6fvgx", - "4 | Consensus key [2/2] : 2s6k60d3fzv0ej34vaw48qr49atq", - "5 | Ethereum cold key [1/2] : 03e25cb70ec981f27c465a3a8a35694950f2b0", - "5 | Ethereum cold key [2/2] : c9d747aa1e23aeb69dffe029abb7", - "6 | Ethereum hot key [1/2] : 03136e3f80ffcd087f6016f17398b14cbf0736", - "6 | Ethereum hot key [2/2] : 9b7af9cec264da4799f09e0b5b62", - "7 | Protocol key [1/2] : tpknam1qqgakmpvya7yansqh28vuc53pmwx467", - "7 | Protocol key [2/2] : 3056jkddgazs0sfgkjkthqm688hw", - "8 | Commission rate : 0.05", - "9 | Maximum commission rate change : 0.01", - "10 | Email : me@me.com", - "11 | Validator VP type [1/2] : 53e9023f2edc55e90bdcf6024760140a91a790", - "11 | Validator VP type [2/2] : 4cb4a529cb1707ea3d34ee685a", - "12 | Timestamp : 2023-11-16 14:33:13.991098370 UTC", - "13 | Pubkey [1/2] : tpknam1qz0aphcsrw37j8fy742cjwhphu9jwx7", - "13 | Pubkey [2/2] : esd3ad4xxtxrkwv07ff63we33t3r", - "14 | Epoch : 22", - "15 | Gas limit : 0.025", - "16 | Fees/gas unit : NAM 0.000001" - ], - "valid": true - }, { "blob": "1d0000006c6f63616c6e65742e6664633665356661643365356535326433662d300023000000323032332d31312d31365431343a33333a31372e3834313638383233332b30303a30306943dc8a11a05cbff27316dce3c6a08d54eefe52dc9979b80fff004e34f806a32e476b56bf1e13f1ef69ef9e4ee6960a74c14fda797869d7f81d65c859bc41b30101000000000000000000000000000000000000000000000000000000000000000032fdd4e57f56519541491312d4e9089032244eca009fd0df101ba3e91d24f555893ae1bf0b271bd98363d6d4c659876731fe4a75171600000000000000a8610000000000000002000000023cf38cd88b01000000225af750859bdb467eeacea9845744d073be9da3719215b036876572d81b5e0d011000000074785f77697468647261772e7761736d003cf38cd88b0100001600000000282bcb6a66c770f23e7b2f068ae0ba025eccb2ec00", "index": 0, @@ -2889,222 +2681,6 @@ ], "valid": true }, - { - "blob": "1d0000006c6f63616c6e65742e3365383337383738643834623534613430662d300023000000323032332d31312d32325430363a32343a31302e3839373531333337382b30303a30307735a6d7322f816b68777c338596eecae34e2350c7accced992730172467adcecf10617ed92096431f119ecd3b72d4a980ac3a2ea6f54f2b66aa02a5f30bf0a001010000000000000000000000000000000000000000000000000000000000000000d8490ed49c5ec486fdeab4cf0476b9f72654696d0048998ffa0340c473b72dad3604abd76581e71e4a334d0708ef754a0adcec66d81e00000000000000a861000000000000000300000001914eb3f58b01000000d66a3a289c9c9e6353a2741335775eab1487e2e7ee4b8baa69d32e73083363d3010c00000076705f757365722e7761736d02914eb3f58b0100000053fefa66ce6351d6b3e7de7a2c993bd4435fbd478b66caecf5c588b5efdcf669011600000074785f696e69745f76616c696461746f722e7761736d00914eb3f58b0100001a010000010000000048998ffa0340c473b72dad3604abd76581e71e4a334d0708ef754a0adcec66d801009650a56834c300cce5ebeda7ce7d67e0ed9d4c2a264e7547ace86eec75e4f8170362eacfeb7faa1d381014d8bd517b0d76f1e1257a6233cef1567610d7904f4ad203d7656a05635f4ea1fc0848125fb370d8415f4cf47bb45313f10c4b88176f949e00781a1cb7045582d3af069647ec4b5ed1c6ee64d3572600ab4e77d61a25a4caf700743ba40b00000000000000000000000000000000000000000000000000000000e40b5402000000000000000000000000000000000000000000000000000000090000006d65406d652e636f6d000000a7d3c244e474ab9ea29c125fc8bd88c998e63b92ad9a2a0b04d97e3356f0da11", - "index": 0, - "name": "Init_Validator_4", - "output": [ - "0 | Type : Init Validator", - "1 | Account key [1/2] : tpknam1qpyfnrl6qdqvguah9kknvp9t6ajcrec", - "1 | Account key [2/2] : 7fge56pcgaa655zkua3nds48x83t", - "2 | Threshold : 1", - "3 | Consensus key [1/2] : tpknam1qzt9pftgxnpspn89a0k60nnavlswm82", - "3 | Consensus key [2/2] : v9gnyua284n5xamr4unupw5c8d3c", - "4 | Ethereum cold key [1/2] : 0362eacfeb7faa1d381014d8bd517b0d76f1e1", - "4 | Ethereum cold key [2/2] : 257a6233cef1567610d7904f4ad2", - "5 | Ethereum hot key [1/2] : 03d7656a05635f4ea1fc0848125fb370d8415f", - "5 | Ethereum hot key [2/2] : 4cf47bb45313f10c4b88176f949e", - "6 | Protocol key [1/2] : tpknam1qpup589hq32c95a0q6ty0mzttmgudmn", - "6 | Protocol key [2/2] : y6dtjvq9tfemavx395n90we9qhrj", - "7 | Commission rate : 0.05", - "8 | Maximum commission rate change : 0.01", - "9 | Email : me@me.com", - "10 | Validator VP type : User" - ], - "output_expert": [ - "0 | Code hash [1/2] : 53fefa66ce6351d6b3e7de7a2c993bd4435fbd", - "0 | Code hash [2/2] : 478b66caecf5c588b5efdcf669", - "1 | Account key [1/2] : tpknam1qpyfnrl6qdqvguah9kknvp9t6ajcrec", - "1 | Account key [2/2] : 7fge56pcgaa655zkua3nds48x83t", - "2 | Threshold : 1", - "3 | Consensus key [1/2] : tpknam1qzt9pftgxnpspn89a0k60nnavlswm82", - "3 | Consensus key [2/2] : v9gnyua284n5xamr4unupw5c8d3c", - "4 | Ethereum cold key [1/2] : 0362eacfeb7faa1d381014d8bd517b0d76f1e1", - "4 | Ethereum cold key [2/2] : 257a6233cef1567610d7904f4ad2", - "5 | Ethereum hot key [1/2] : 03d7656a05635f4ea1fc0848125fb370d8415f", - "5 | Ethereum hot key [2/2] : 4cf47bb45313f10c4b88176f949e", - "6 | Protocol key [1/2] : tpknam1qpup589hq32c95a0q6ty0mzttmgudmn", - "6 | Protocol key [2/2] : y6dtjvq9tfemavx395n90we9qhrj", - "7 | Commission rate : 0.05", - "8 | Maximum commission rate change : 0.01", - "9 | Email : me@me.com", - "10 | Validator VP type [1/2] : d66a3a289c9c9e6353a2741335775eab1487e2", - "10 | Validator VP type [2/2] : e7ee4b8baa69d32e73083363d3", - "11 | Timestamp : 2023-11-22 06:24:10.897513378 UTC", - "12 | Pubkey [1/2] : tpknam1qpyfnrl6qdqvguah9kknvp9t6ajcrec", - "12 | Pubkey [2/2] : 7fge56pcgaa655zkua3nds48x83t", - "13 | Epoch : 30", - "14 | Gas limit : 0.025", - "15 | Fee token [1/2] : tnam1q8vyjrk5n30vfphaa26v7prkh8mjv4rfd", - "15 | Fee token [2/2] : 5fkxh80", - "16 | Fees/gas unit : 0.000001" - ], - "valid": true - }, - { - "blob": "1d0000006c6f63616c6e65742e3365383337383738643834623534613430662d300023000000323032332d31312d32325430363a32343a31302e3839373531333337382b30303a30307735a6d7322f816b68777c338596eecae34e2350c7accced992730172467adcecf10617ed92096431f119ecd3b72d4a980ac3a2ea6f54f2b66aa02a5f30bf0a001010000000000000000000000000000000000000000000000000000000000000000d8490ed49c5ec486fdeab4cf0476b9f72654696d0048998ffa0340c473b72dad3604abd76581e71e4a334d0708ef754a0adcec66d81e00000000000000a861000000000000000500000001914eb3f58b01000000d66a3a289c9c9e6353a2741335775eab1487e2e7ee4b8baa69d32e73083363d3010c00000076705f757365722e7761736d02914eb3f58b0100000053fefa66ce6351d6b3e7de7a2c993bd4435fbd478b66caecf5c588b5efdcf669011600000074785f696e69745f76616c696461746f722e7761736d00914eb3f58b0100001a010000010000000048998ffa0340c473b72dad3604abd76581e71e4a334d0708ef754a0adcec66d801009650a56834c300cce5ebeda7ce7d67e0ed9d4c2a264e7547ace86eec75e4f8170362eacfeb7faa1d381014d8bd517b0d76f1e1257a6233cef1567610d7904f4ad203d7656a05635f4ea1fc0848125fb370d8415f4cf47bb45313f10c4b88176f949e00781a1cb7045582d3af069647ec4b5ed1c6ee64d3572600ab4e77d61a25a4caf700743ba40b00000000000000000000000000000000000000000000000000000000e40b5402000000000000000000000000000000000000000000000000000000090000006d65406d652e636f6d000000a7d3c244e474ab9ea29c125fc8bd88c998e63b92ad9a2a0b04d97e3356f0da110301000000033782959e45833f65ca43872da235c840f40daa26633f8501a255027d147db001050000000048998ffa0340c473b72dad3604abd76581e71e4a334d0708ef754a0adcec66d8009650a56834c300cce5ebeda7ce7d67e0ed9d4c2a264e7547ace86eec75e4f817010362eacfeb7faa1d381014d8bd517b0d76f1e1257a6233cef1567610d7904f4ad20103d7656a05635f4ea1fc0848125fb370d8415f4cf47bb45313f10c4b88176f949e00781a1cb7045582d3af069647ec4b5ed1c6ee64d3572600ab4e77d61a25a4caf705000000000024c572048f05f2da243b6a6b8d5c405bc6ab80e149eb522019aa71e489fc7faf02bf6c8b2c685aa8a6c01ee90fc3bcfb9fdfbe1b9ef3ad11b40bd5db5af5a30e0100ec68da60d9af285164ed9d4466107516fcdc1c3843c5a094f66f0a2dc6769cafbcd0026dd34bac210ca85bff42bc708dc4b3bc2309ce3199d072a289dafd1b0d0201e4f9cb9ac9d1b51fa3db27d491172c94009f71304bfdebb66d0ed310260a00ce67406e0b367a53c2431079da0e33241c94bde00133695c545e5845b3067b50b30003019f44e603a313c0d6bf7ab479a9ae81197626190b906022eec301d6844a4de16e28d513f382fd18b6b83da4e45181337442551ff6ecc08d1f6f162d868ec6b40f000400d37c656473fd2742b93d46bc8944310611a7e34a3f63aed3a6d4ce66189a08ef355b8bd8ec8809c3e036f4536922378131fa5f952b7dbb485793dc2f9ffbf402030500000082dc8f4a859aabaf2d9aa7bfd1c80f4cb3e70b783977dab4f29e0aa4664f6283a7d3c244e474ab9ea29c125fc8bd88c998e63b92ad9a2a0b04d97e3356f0da117735a6d7322f816b68777c338596eecae34e2350c7accced992730172467adcecf10617ed92096431f119ecd3b72d4a980ac3a2ea6f54f2b66aa02a5f30bf0a0bd2dc886161175a8b0719028cc34535319672d91f4403a49fefaf0bf308e9f3e01010000000048998ffa0340c473b72dad3604abd76581e71e4a334d0708ef754a0adcec66d80100000000004340d639289bf46f33b7f3c26a71a369d910a94b1a7a8f1c1580cbd948f2fbdac7fcf4af979a466f30c2cb266c063386e314ddd68a67ed5c36d60489f5cd0307", - "index": 0, - "name": "Init_Validator_5", - "output": [ - "0 | Type : Init Validator", - "1 | Account key [1/2] : tpknam1qpyfnrl6qdqvguah9kknvp9t6ajcrec", - "1 | Account key [2/2] : 7fge56pcgaa655zkua3nds48x83t", - "2 | Threshold : 1", - "3 | Consensus key [1/2] : tpknam1qzt9pftgxnpspn89a0k60nnavlswm82", - "3 | Consensus key [2/2] : v9gnyua284n5xamr4unupw5c8d3c", - "4 | Ethereum cold key [1/2] : 0362eacfeb7faa1d381014d8bd517b0d76f1e1", - "4 | Ethereum cold key [2/2] : 257a6233cef1567610d7904f4ad2", - "5 | Ethereum hot key [1/2] : 03d7656a05635f4ea1fc0848125fb370d8415f", - "5 | Ethereum hot key [2/2] : 4cf47bb45313f10c4b88176f949e", - "6 | Protocol key [1/2] : tpknam1qpup589hq32c95a0q6ty0mzttmgudmn", - "6 | Protocol key [2/2] : y6dtjvq9tfemavx395n90we9qhrj", - "7 | Commission rate : 0.05", - "8 | Maximum commission rate change : 0.01", - "9 | Email : me@me.com", - "10 | Validator VP type : User" - ], - "output_expert": [ - "0 | Code hash [1/2] : 53fefa66ce6351d6b3e7de7a2c993bd4435fbd", - "0 | Code hash [2/2] : 478b66caecf5c588b5efdcf669", - "1 | Account key [1/2] : tpknam1qpyfnrl6qdqvguah9kknvp9t6ajcrec", - "1 | Account key [2/2] : 7fge56pcgaa655zkua3nds48x83t", - "2 | Threshold : 1", - "3 | Consensus key [1/2] : tpknam1qzt9pftgxnpspn89a0k60nnavlswm82", - "3 | Consensus key [2/2] : v9gnyua284n5xamr4unupw5c8d3c", - "4 | Ethereum cold key [1/2] : 0362eacfeb7faa1d381014d8bd517b0d76f1e1", - "4 | Ethereum cold key [2/2] : 257a6233cef1567610d7904f4ad2", - "5 | Ethereum hot key [1/2] : 03d7656a05635f4ea1fc0848125fb370d8415f", - "5 | Ethereum hot key [2/2] : 4cf47bb45313f10c4b88176f949e", - "6 | Protocol key [1/2] : tpknam1qpup589hq32c95a0q6ty0mzttmgudmn", - "6 | Protocol key [2/2] : y6dtjvq9tfemavx395n90we9qhrj", - "7 | Commission rate : 0.05", - "8 | Maximum commission rate change : 0.01", - "9 | Email : me@me.com", - "10 | Validator VP type [1/2] : d66a3a289c9c9e6353a2741335775eab1487e2", - "10 | Validator VP type [2/2] : e7ee4b8baa69d32e73083363d3", - "11 | Timestamp : 2023-11-22 06:24:10.897513378 UTC", - "12 | Pubkey [1/2] : tpknam1qpyfnrl6qdqvguah9kknvp9t6ajcrec", - "12 | Pubkey [2/2] : 7fge56pcgaa655zkua3nds48x83t", - "13 | Epoch : 30", - "14 | Gas limit : 0.025", - "15 | Fee token [1/2] : tnam1q8vyjrk5n30vfphaa26v7prkh8mjv4rfd", - "15 | Fee token [2/2] : 5fkxh80", - "16 | Fees/gas unit : 0.000001" - ], - "valid": true - }, - { - "blob": "1d0000006c6f63616c6e65742e3365383337383738643834623534613430662d300023000000323032332d31312d32325430363a32343a31362e3237303636333932382b30303a3030fcf16551c36fa3b04a1436a504fb732489d6285488f933cac9a2c8db7e6db5a2cda6d2e252a8b546646f6e4272ddf8eadca55adc06d6e1c997d274e76100dd9401010000000000000000000000000000000000000000000000000000000000000000d8490ed49c5ec486fdeab4cf0476b9f72654696d009fd0df101ba3e91d24f555893ae1bf0b271bd98363d6d4c659876731fe4a75171f00000000000000a8610000000000000003000000018e63b3f58b01000000d66a3a289c9c9e6353a2741335775eab1487e2e7ee4b8baa69d32e73083363d3010c00000076705f757365722e7761736d028f63b3f58b0100000053fefa66ce6351d6b3e7de7a2c993bd4435fbd478b66caecf5c588b5efdcf669011600000074785f696e69745f76616c696461746f722e7761736d008f63b3f58b0100003b01000002000000009fd0df101ba3e91d24f555893ae1bf0b271bd98363d6d4c659876731fe4a75170048998ffa0340c473b72dad3604abd76581e71e4a334d0708ef754a0adcec66d80200ce2ca0a0871e3ae9e432eff8fd0ee5c53954cd04e543fe98f15dc412c384171f0254a3da9c35cac089aab32735905b1cd95da221f07c8dca01d8074e8817707f2a02a7c7587bd18b2588e69db623954d98269f1285f1b4bf7c5b0ed500c4c3125c3800955688503de0d9a2f149404f7ebaca8590a10b6f63356f4ee283530c4df323cc00743ba40b00000000000000000000000000000000000000000000000000000000e40b5402000000000000000000000000000000000000000000000000000000090000006d65406d652e636f6d000000713e908d2219767486d4e1737aa5461ed36fe7da6834dcc2379168cfa3b43387", - "index": 0, - "name": "Init_Validator_6", - "output": [ - "0 | Type : Init Validator", - "1 | Account key [1/2] : tpknam1qz0aphcsrw37j8fy742cjwhphu9jwx7", - "1 | Account key [2/2] : esd3ad4xxtxrkwv07ff63we33t3r", - "2 | Account key [1/2] : tpknam1qpyfnrl6qdqvguah9kknvp9t6ajcrec", - "2 | Account key [2/2] : 7fge56pcgaa655zkua3nds48x83t", - "3 | Threshold : 2", - "4 | Consensus key [1/2] : tpknam1qr8zeg9qsu0r460yxthl3lgwuhznj4x", - "4 | Consensus key [2/2] : dqnj58l5c79wugykrsst379untlr", - "5 | Ethereum cold key [1/2] : 0254a3da9c35cac089aab32735905b1cd95da2", - "5 | Ethereum cold key [2/2] : 21f07c8dca01d8074e8817707f2a", - "6 | Ethereum hot key [1/2] : 02a7c7587bd18b2588e69db623954d98269f12", - "6 | Ethereum hot key [2/2] : 85f1b4bf7c5b0ed500c4c3125c38", - "7 | Protocol key [1/2] : tpknam1qz24dzzs8hsdngh3f9qy7l46e2zepgg", - "7 | Protocol key [2/2] : tda3n2m6wu2p4xrzd7v3ucpq3d7e", - "8 | Commission rate : 0.05", - "9 | Maximum commission rate change : 0.01", - "10 | Email : me@me.com", - "11 | Validator VP type : User" - ], - "output_expert": [ - "0 | Code hash [1/2] : 53fefa66ce6351d6b3e7de7a2c993bd4435fbd", - "0 | Code hash [2/2] : 478b66caecf5c588b5efdcf669", - "1 | Account key [1/2] : tpknam1qz0aphcsrw37j8fy742cjwhphu9jwx7", - "1 | Account key [2/2] : esd3ad4xxtxrkwv07ff63we33t3r", - "2 | Account key [1/2] : tpknam1qpyfnrl6qdqvguah9kknvp9t6ajcrec", - "2 | Account key [2/2] : 7fge56pcgaa655zkua3nds48x83t", - "3 | Threshold : 2", - "4 | Consensus key [1/2] : tpknam1qr8zeg9qsu0r460yxthl3lgwuhznj4x", - "4 | Consensus key [2/2] : dqnj58l5c79wugykrsst379untlr", - "5 | Ethereum cold key [1/2] : 0254a3da9c35cac089aab32735905b1cd95da2", - "5 | Ethereum cold key [2/2] : 21f07c8dca01d8074e8817707f2a", - "6 | Ethereum hot key [1/2] : 02a7c7587bd18b2588e69db623954d98269f12", - "6 | Ethereum hot key [2/2] : 85f1b4bf7c5b0ed500c4c3125c38", - "7 | Protocol key [1/2] : tpknam1qz24dzzs8hsdngh3f9qy7l46e2zepgg", - "7 | Protocol key [2/2] : tda3n2m6wu2p4xrzd7v3ucpq3d7e", - "8 | Commission rate : 0.05", - "9 | Maximum commission rate change : 0.01", - "10 | Email : me@me.com", - "11 | Validator VP type [1/2] : d66a3a289c9c9e6353a2741335775eab1487e2", - "11 | Validator VP type [2/2] : e7ee4b8baa69d32e73083363d3", - "12 | Timestamp : 2023-11-22 06:24:16.270663928 UTC", - "13 | Pubkey [1/2] : tpknam1qz0aphcsrw37j8fy742cjwhphu9jwx7", - "13 | Pubkey [2/2] : esd3ad4xxtxrkwv07ff63we33t3r", - "14 | Epoch : 31", - "15 | Gas limit : 0.025", - "16 | Fee token [1/2] : tnam1q8vyjrk5n30vfphaa26v7prkh8mjv4rfd", - "16 | Fee token [2/2] : 5fkxh80", - "17 | Fees/gas unit : 0.000001" - ], - "valid": true - }, - { - "blob": "1d0000006c6f63616c6e65742e3365383337383738643834623534613430662d300023000000323032332d31312d32325430363a32343a31362e3237303636333932382b30303a3030fcf16551c36fa3b04a1436a504fb732489d6285488f933cac9a2c8db7e6db5a2cda6d2e252a8b546646f6e4272ddf8eadca55adc06d6e1c997d274e76100dd9401010000000000000000000000000000000000000000000000000000000000000000d8490ed49c5ec486fdeab4cf0476b9f72654696d009fd0df101ba3e91d24f555893ae1bf0b271bd98363d6d4c659876731fe4a75171f00000000000000a8610000000000000005000000018e63b3f58b01000000d66a3a289c9c9e6353a2741335775eab1487e2e7ee4b8baa69d32e73083363d3010c00000076705f757365722e7761736d028f63b3f58b0100000053fefa66ce6351d6b3e7de7a2c993bd4435fbd478b66caecf5c588b5efdcf669011600000074785f696e69745f76616c696461746f722e7761736d008f63b3f58b0100003b01000002000000009fd0df101ba3e91d24f555893ae1bf0b271bd98363d6d4c659876731fe4a75170048998ffa0340c473b72dad3604abd76581e71e4a334d0708ef754a0adcec66d80200ce2ca0a0871e3ae9e432eff8fd0ee5c53954cd04e543fe98f15dc412c384171f0254a3da9c35cac089aab32735905b1cd95da221f07c8dca01d8074e8817707f2a02a7c7587bd18b2588e69db623954d98269f1285f1b4bf7c5b0ed500c4c3125c3800955688503de0d9a2f149404f7ebaca8590a10b6f63356f4ee283530c4df323cc00743ba40b00000000000000000000000000000000000000000000000000000000e40b5402000000000000000000000000000000000000000000000000000000090000006d65406d652e636f6d000000713e908d2219767486d4e1737aa5461ed36fe7da6834dcc2379168cfa3b43387030100000090d034ce7f2ddcdea6e51402aee4ba72be360d6b2405b44f01c715355de28b3b0106000000009fd0df101ba3e91d24f555893ae1bf0b271bd98363d6d4c659876731fe4a75170048998ffa0340c473b72dad3604abd76581e71e4a334d0708ef754a0adcec66d800ce2ca0a0871e3ae9e432eff8fd0ee5c53954cd04e543fe98f15dc412c384171f010254a3da9c35cac089aab32735905b1cd95da221f07c8dca01d8074e8817707f2a0102a7c7587bd18b2588e69db623954d98269f1285f1b4bf7c5b0ed500c4c3125c3800955688503de0d9a2f149404f7ebaca8590a10b6f63356f4ee283530c4df323cc060000000000eedd2acb8747775e14f6c77e01fa0cd90adba5c743d69f2cac488ded9c5e76d3cf059cb2a8b45d177fd2e744d2038def501116b79043c7f07fe567ce1433e50401001dc4cb52daec90911292fb7f7e968c9f65990f1403342f3f18b0dee11fa709e4711f61f3ed0a8929421917999124755a82ed36b863003ed8ec8eca60f0e1e4030200126dedf59e685496d172cbfa6da41c2c78223c2d4a44f2ddad19cd0933e8970d2d33eafabb0d28f9b1e0c21741b50bf6730c939b127f8ef42465442481aed5000301a51f40992662c3b16f1ff9a1dabe7ffdecb8ed9197876bf5def86e48d790b85a3ef9aef1ec3390dbbc005783d5f88c695f84e7f0ec622b914d8ce558e7487d0c01040190928a58c5a6a61138a2e6647be884f2d9028a850a643ce99eb4acab1a5213c620ab4cb6edf4a662578a550097aeee1f45db3f00836c841ec4bef4a78f1c59830105007273e71fec95b74dc7ed5cb3f53399c2b604e057896e437366a09de3379d3998737919a6d9bdf1c7dcac59571481febad9aadac7d052a38f79ecef7712380b050305000000cfd3aab486550d58662ac795bcb533da6540eb5e07a5473de1481dc0ebe97dce713e908d2219767486d4e1737aa5461ed36fe7da6834dcc2379168cfa3b43387fcf16551c36fa3b04a1436a504fb732489d6285488f933cac9a2c8db7e6db5a2cda6d2e252a8b546646f6e4272ddf8eadca55adc06d6e1c997d274e76100dd94aa456d77025e9d4a3023d41515d05b11cb4debb0fccfdc4926159c6eb34a28730101000000009fd0df101ba3e91d24f555893ae1bf0b271bd98363d6d4c659876731fe4a7517010000000000655a64e70aee52261ba04543868b935135efb40da41a641cce4c8e70c70859c4e6ed98892f748d6e2ba3feb67f72cb8144b50596fa60eed5bf4edf1364407505", - "index": 0, - "name": "Init_Validator_7", - "output": [ - "0 | Type : Init Validator", - "1 | Account key [1/2] : tpknam1qz0aphcsrw37j8fy742cjwhphu9jwx7", - "1 | Account key [2/2] : esd3ad4xxtxrkwv07ff63we33t3r", - "2 | Account key [1/2] : tpknam1qpyfnrl6qdqvguah9kknvp9t6ajcrec", - "2 | Account key [2/2] : 7fge56pcgaa655zkua3nds48x83t", - "3 | Threshold : 2", - "4 | Consensus key [1/2] : tpknam1qr8zeg9qsu0r460yxthl3lgwuhznj4x", - "4 | Consensus key [2/2] : dqnj58l5c79wugykrsst379untlr", - "5 | Ethereum cold key [1/2] : 0254a3da9c35cac089aab32735905b1cd95da2", - "5 | Ethereum cold key [2/2] : 21f07c8dca01d8074e8817707f2a", - "6 | Ethereum hot key [1/2] : 02a7c7587bd18b2588e69db623954d98269f12", - "6 | Ethereum hot key [2/2] : 85f1b4bf7c5b0ed500c4c3125c38", - "7 | Protocol key [1/2] : tpknam1qz24dzzs8hsdngh3f9qy7l46e2zepgg", - "7 | Protocol key [2/2] : tda3n2m6wu2p4xrzd7v3ucpq3d7e", - "8 | Commission rate : 0.05", - "9 | Maximum commission rate change : 0.01", - "10 | Email : me@me.com", - "11 | Validator VP type : User" - ], - "output_expert": [ - "0 | Code hash [1/2] : 53fefa66ce6351d6b3e7de7a2c993bd4435fbd", - "0 | Code hash [2/2] : 478b66caecf5c588b5efdcf669", - "1 | Account key [1/2] : tpknam1qz0aphcsrw37j8fy742cjwhphu9jwx7", - "1 | Account key [2/2] : esd3ad4xxtxrkwv07ff63we33t3r", - "2 | Account key [1/2] : tpknam1qpyfnrl6qdqvguah9kknvp9t6ajcrec", - "2 | Account key [2/2] : 7fge56pcgaa655zkua3nds48x83t", - "3 | Threshold : 2", - "4 | Consensus key [1/2] : tpknam1qr8zeg9qsu0r460yxthl3lgwuhznj4x", - "4 | Consensus key [2/2] : dqnj58l5c79wugykrsst379untlr", - "5 | Ethereum cold key [1/2] : 0254a3da9c35cac089aab32735905b1cd95da2", - "5 | Ethereum cold key [2/2] : 21f07c8dca01d8074e8817707f2a", - "6 | Ethereum hot key [1/2] : 02a7c7587bd18b2588e69db623954d98269f12", - "6 | Ethereum hot key [2/2] : 85f1b4bf7c5b0ed500c4c3125c38", - "7 | Protocol key [1/2] : tpknam1qz24dzzs8hsdngh3f9qy7l46e2zepgg", - "7 | Protocol key [2/2] : tda3n2m6wu2p4xrzd7v3ucpq3d7e", - "8 | Commission rate : 0.05", - "9 | Maximum commission rate change : 0.01", - "10 | Email : me@me.com", - "11 | Validator VP type [1/2] : d66a3a289c9c9e6353a2741335775eab1487e2", - "11 | Validator VP type [2/2] : e7ee4b8baa69d32e73083363d3", - "12 | Timestamp : 2023-11-22 06:24:16.270663928 UTC", - "13 | Pubkey [1/2] : tpknam1qz0aphcsrw37j8fy742cjwhphu9jwx7", - "13 | Pubkey [2/2] : esd3ad4xxtxrkwv07ff63we33t3r", - "14 | Epoch : 31", - "15 | Gas limit : 0.025", - "16 | Fee token [1/2] : tnam1q8vyjrk5n30vfphaa26v7prkh8mjv4rfd", - "16 | Fee token [2/2] : 5fkxh80", - "17 | Fees/gas unit : 0.000001" - ], - "valid": true - }, { "blob": "1d0000006c6f63616c6e65742e3365383337383738643834623534613430662d300023000000323032332d31312d32325430363a32343a32302e3536303437393138302b30303a30301c2a5f85ea1852fee3c91bb89fc4d7bc913b38fab8a3e4bb39ef5b0051c437ab411a66910a6cfbf0af61114c2cc06cb741f8f1c559fe594fb8547bae04cd7e7f01010000000000000000000000000000000000000000000000000000000000000000d8490ed49c5ec486fdeab4cf0476b9f72654696d009fd0df101ba3e91d24f555893ae1bf0b271bd98363d6d4c659876731fe4a75172000000000000000a8610000000000000002000000027f74b3f58b010000002f6bf8c3cafbd5d987849db1583bd63e10bbe06193f619859caa80ab10f2e2a9011000000074785f77697468647261772e7761736d007f74b3f58b010000160000000037e4a5897b3f469bddf4ffa4dda00c49d245324500", "index": 0, @@ -3524,5 +3100,19 @@ "13 | Fees/gas unit : 0.000001" ], "valid": true - } + }, + {"blob":"1e0000006c6f63616c6e65742e6434313134643634383861656637663266363866360023000000323032332d31322d30385431353a34333a30302e3930323935383832342b30303a3030967af0fe27dade46cd0387a3a8ae4ae61208bc245d681d79f0e7a882c370f13906a4039b5a80329248ec945af132d8539f32f4fb48cca9c55bd60687516506db01010000000000000000000000000000000000000000000000000000000000000000772601b5a73cea56d9caba0e710b67993f5e261e00e6e3ecc407e5a7ec9646593fb712a6d0a493be4c29d3980db354872cd7ca5e220800000000000000a86100000000000000020000000238af184a8c010000000354f82d478f674a24e566f8c9490be6e15800c720558edf7c9c3ed9e742ac71011100000074785f72657665616c5f706b2e7761736d0038af184a8c0100002100000000e6e3ecc407e5a7ec9646593fb712a6d0a493be4c29d3980db354872cd7ca5e22","index":0,"name":"Reveal_Pubkey_4","output":["0 | Type : Reveal Pubkey","1 | Public key [1/2] : tpknam1qrnw8mxyqlj60mykgevnldcj5mg2fya","1 | Public key [2/2] : 7fs5a8xqdkd2gwtxhef0zy8a2wha"],"output_expert":["0 | Code hash [1/2] : 0354f82d478f674a24e566f8c9490be6e15800","0 | Code hash [2/2] : c720558edf7c9c3ed9e742ac71","1 | Public key [1/2] : tpknam1qrnw8mxyqlj60mykgevnldcj5mg2fya","1 | Public key [2/2] : 7fs5a8xqdkd2gwtxhef0zy8a2wha","2 | Timestamp : 2023-12-08 15:43:00.902958824 UTC","3 | Pubkey [1/2] : tpknam1qrnw8mxyqlj60mykgevnldcj5mg2fya","3 | Pubkey [2/2] : 7fs5a8xqdkd2gwtxhef0zy8a2wha","4 | Epoch : 8","5 | Gas limit : 0.025","6 | Fee token [1/2] : tnam1q9mjvqd45u7w54kee2aquugtv7vn7h3xr","6 | Fee token [2/2] : crau7xy","7 | Fees/gas unit : 0.000001"],"valid":true}, +{"blob":"1e0000006c6f63616c6e65742e6434313134643634383861656637663266363866360023000000323032332d31322d30385431353a34333a30302e3930323935383832342b30303a3030967af0fe27dade46cd0387a3a8ae4ae61208bc245d681d79f0e7a882c370f13906a4039b5a80329248ec945af132d8539f32f4fb48cca9c55bd60687516506db01010000000000000000000000000000000000000000000000000000000000000000772601b5a73cea56d9caba0e710b67993f5e261e00e6e3ecc407e5a7ec9646593fb712a6d0a493be4c29d3980db354872cd7ca5e220800000000000000a86100000000000000030000000238af184a8c010000000354f82d478f674a24e566f8c9490be6e15800c720558edf7c9c3ed9e742ac71011100000074785f72657665616c5f706b2e7761736d0038af184a8c0100002100000000e6e3ecc407e5a7ec9646593fb712a6d0a493be4c29d3980db354872cd7ca5e2203030000001f8110d7457fc3f3cadc18643bd79f1ac8f311dc18d095f3bfbaf9e16fbefe08967af0fe27dade46cd0387a3a8ae4ae61208bc245d681d79f0e7a882c370f13906a4039b5a80329248ec945af132d8539f32f4fb48cca9c55bd60687516506db010100000000e6e3ecc407e5a7ec9646593fb712a6d0a493be4c29d3980db354872cd7ca5e22010000000000fbaac19434472d462896bb37086a5f2429db2a74de31ef888ff9aa337813734895c03a3d8d0cf16f0463da953fb9db2e55422aa5bd3f91a57de299ab4a9c350a","index":0,"name":"Reveal_Pubkey_5","output":["0 | Type : Reveal Pubkey","1 | Public key [1/2] : tpknam1qrnw8mxyqlj60mykgevnldcj5mg2fya","1 | Public key [2/2] : 7fs5a8xqdkd2gwtxhef0zy8a2wha"],"output_expert":["0 | Code hash [1/2] : 0354f82d478f674a24e566f8c9490be6e15800","0 | Code hash [2/2] : c720558edf7c9c3ed9e742ac71","1 | Public key [1/2] : tpknam1qrnw8mxyqlj60mykgevnldcj5mg2fya","1 | Public key [2/2] : 7fs5a8xqdkd2gwtxhef0zy8a2wha","2 | Timestamp : 2023-12-08 15:43:00.902958824 UTC","3 | Pubkey [1/2] : tpknam1qrnw8mxyqlj60mykgevnldcj5mg2fya","3 | Pubkey [2/2] : 7fs5a8xqdkd2gwtxhef0zy8a2wha","4 | Epoch : 8","5 | Gas limit : 0.025","6 | Fee token [1/2] : tnam1q9mjvqd45u7w54kee2aquugtv7vn7h3xr","6 | Fee token [2/2] : crau7xy","7 | Fees/gas unit : 0.000001"],"valid":true}, +{"blob":"1e0000006c6f63616c6e65742e6434313134643634383861656637663266363866360023000000323032332d31322d30385431353a34333a30372e3735313336383536372b30303a30304358e3b11d87db813249f723cdb0c3ef7387b4f647ccc46d1e6cfa6710cf189eaba4bd20a8aaa1c70da781796927ae620f8f8cc14df1b9c52b6e60402632297a01010000000000000000000000000000000000000000000000000000000000000000772601b5a73cea56d9caba0e710b67993f5e261e0028a69a99515ee25fd34357a771ab2368f57d1afcea523111608bec9e4a1f386a0a00000000000000a86100000000000000030000000114ca184a8c010000001851d91372bdcf58180f79f30dfd1d2b7f509a779e3e2e798bf68a24739d780a010c00000076705f757365722e7761736d0214ca184a8c01000000b7653a7a854c9036d884bd3ce0315acd604c7a61e0f86b8c04dcd41d96c8e917011400000074785f696e69745f6163636f756e742e7761736d0014ca184a8c01000046000000010000000028a69a99515ee25fd34357a771ab2368f57d1afcea523111608bec9e4a1f386ae36b841ef8d9474445c3f400d6fe09fc4fcaa44fe4428f6e58162067fb8453ad01","index":0,"name":"Init_Account_8","output":["0 | Type : Init Account","1 | Public key [1/2] : tpknam1qq52dx5e290wyh7ngdt6wudtyd502lg","1 | Public key [2/2] : 6ln49yvg3vz97e8j2ruux5e3yewq","2 | Threshold : 1","3 | VP type : User"],"output_expert":["0 | Code hash [1/2] : b7653a7a854c9036d884bd3ce0315acd604c7a","0 | Code hash [2/2] : 61e0f86b8c04dcd41d96c8e917","1 | Public key [1/2] : tpknam1qq52dx5e290wyh7ngdt6wudtyd502lg","1 | Public key [2/2] : 6ln49yvg3vz97e8j2ruux5e3yewq","2 | Threshold : 1","3 | VP type [1/2] : 1851d91372bdcf58180f79f30dfd1d2b7f509a","3 | VP type [2/2] : 779e3e2e798bf68a24739d780a","4 | Timestamp : 2023-12-08 15:43:07.751368567 UTC","5 | Pubkey [1/2] : tpknam1qq52dx5e290wyh7ngdt6wudtyd502lg","5 | Pubkey [2/2] : 6ln49yvg3vz97e8j2ruux5e3yewq","6 | Epoch : 10","7 | Gas limit : 0.025","8 | Fee token [1/2] : tnam1q9mjvqd45u7w54kee2aquugtv7vn7h3xr","8 | Fee token [2/2] : crau7xy","9 | Fees/gas unit : 0.000001"],"valid":true}, +{"blob":"1e0000006c6f63616c6e65742e6434313134643634383861656637663266363866360023000000323032332d31322d30385431353a34333a30372e3735313336383536372b30303a30304358e3b11d87db813249f723cdb0c3ef7387b4f647ccc46d1e6cfa6710cf189eaba4bd20a8aaa1c70da781796927ae620f8f8cc14df1b9c52b6e60402632297a01010000000000000000000000000000000000000000000000000000000000000000772601b5a73cea56d9caba0e710b67993f5e261e0028a69a99515ee25fd34357a771ab2368f57d1afcea523111608bec9e4a1f386a0a00000000000000a86100000000000000040000000114ca184a8c010000001851d91372bdcf58180f79f30dfd1d2b7f509a779e3e2e798bf68a24739d780a010c00000076705f757365722e7761736d0214ca184a8c01000000b7653a7a854c9036d884bd3ce0315acd604c7a61e0f86b8c04dcd41d96c8e917011400000074785f696e69745f6163636f756e742e7761736d0014ca184a8c01000046000000010000000028a69a99515ee25fd34357a771ab2368f57d1afcea523111608bec9e4a1f386ae36b841ef8d9474445c3f400d6fe09fc4fcaa44fe4428f6e58162067fb8453ad01030400000046e3aadf521d9d237dd3e13e15af8f0f4e24328f7efa2fc45dbd38661bba7c6de36b841ef8d9474445c3f400d6fe09fc4fcaa44fe4428f6e58162067fb8453ad4358e3b11d87db813249f723cdb0c3ef7387b4f647ccc46d1e6cfa6710cf189eaba4bd20a8aaa1c70da781796927ae620f8f8cc14df1b9c52b6e60402632297a01010000000028a69a99515ee25fd34357a771ab2368f57d1afcea523111608bec9e4a1f386a0100000000001b0370088a971d8317330d2d0b6e816f38957ba489a7796a8b4d21440057f615efdfaf70bdf22068076a57fc219ed5a9d2351d202730be0a311976dd8936d506","index":0,"name":"Init_Account_9","output":["0 | Type : Init Account","1 | Public key [1/2] : tpknam1qq52dx5e290wyh7ngdt6wudtyd502lg","1 | Public key [2/2] : 6ln49yvg3vz97e8j2ruux5e3yewq","2 | Threshold : 1","3 | VP type : User"],"output_expert":["0 | Code hash [1/2] : b7653a7a854c9036d884bd3ce0315acd604c7a","0 | Code hash [2/2] : 61e0f86b8c04dcd41d96c8e917","1 | Public key [1/2] : tpknam1qq52dx5e290wyh7ngdt6wudtyd502lg","1 | Public key [2/2] : 6ln49yvg3vz97e8j2ruux5e3yewq","2 | Threshold : 1","3 | VP type [1/2] : 1851d91372bdcf58180f79f30dfd1d2b7f509a","3 | VP type [2/2] : 779e3e2e798bf68a24739d780a","4 | Timestamp : 2023-12-08 15:43:07.751368567 UTC","5 | Pubkey [1/2] : tpknam1qq52dx5e290wyh7ngdt6wudtyd502lg","5 | Pubkey [2/2] : 6ln49yvg3vz97e8j2ruux5e3yewq","6 | Epoch : 10","7 | Gas limit : 0.025","8 | Fee token [1/2] : tnam1q9mjvqd45u7w54kee2aquugtv7vn7h3xr","8 | Fee token [2/2] : crau7xy","9 | Fees/gas unit : 0.000001"],"valid":true}, +{"blob":"1e0000006c6f63616c6e65742e6434313134643634383861656637663266363866360023000000323032332d31322d30385431353a34333a31322e3339393531393533302b30303a3030ef933cfef179c1c4442159ffae90f5696cfda66974e0af22ba12b0053bab7a3e8500689f9764cfd7d09149fe38b4ea57938787173b1bedd5064f759a26dd167301010000000000000000000000000000000000000000000000000000000000000000772601b5a73cea56d9caba0e710b67993f5e261e0028a69a99515ee25fd34357a771ab2368f57d1afcea523111608bec9e4a1f386a0a00000000000000a8610000000000000002000000023edc184a8c010000007fc17af22a18d7af5ec9ee1328bc78abf4be95f2e0460f2c13d937c7edcca864011800000074785f6265636f6d655f76616c696461746f722e7761736d003edc184a8c010000e900000000641917940eb88913fd1d9db9157030de197d019d00c253a8fd913eb32a8ebe7a6d09a2842c8b041564afbe43a8df717811e05c3cb303ef994e6d954450634ba03bdd5258dc17f5605022d7a9ad5b92e49417ad538de902a8dfaefd846d1e9a29b83af89af753d8c0eb75fd2b68137a22bd9cefb4125bdb00afd95c15bdc3c1aac4929718033194cd7a52d80e9856fafec2365df15d82438400743ba40b00000000000000000000000000000000000000000000000000000000e40b5402000000000000000000000000000000000000000000000000000000090000006d65406d652e636f6d000000","index":0,"name":"Init_Validator_8","output":["0 | Type : Init Validator","1 | Address [1/2] : tnam1q9jpj9u5p6ugjylarkwmj9tsxr0pjlgpn","1 | Address [2/2] : 5wa8ff0","2 | Consensus key [1/2] : tpknam1qrp9828ajyltx25wheax6zdzsskgkpq","2 | Consensus key [2/2] : 4vjhmusagmachsy0qts7txdyqp34","3 | Ethereum cold key [1/2] : 03ef994e6d954450634ba03bdd5258dc17f560","3 | Ethereum cold key [2/2] : 5022d7a9ad5b92e49417ad538de9","4 | Ethereum hot key [1/2] : 02a8dfaefd846d1e9a29b83af89af753d8c0eb","4 | Ethereum hot key [2/2] : 75fd2b68137a22bd9cefb4125bdb","5 | Protocol key [1/2] : tpknam1qzhajhq4hhpur2kyj2t3sqe3jnxh55k","5 | Protocol key [2/2] : cp6v9d7h7cgm9mu2asfpcg5nc7fz","6 | Commission rate : 0.05","7 | Maximum commission rate change : 0.01","8 | Email : me@me.com"],"output_expert":["0 | Code hash [1/2] : 7fc17af22a18d7af5ec9ee1328bc78abf4be95","0 | Code hash [2/2] : f2e0460f2c13d937c7edcca864","1 | Address [1/2] : tnam1q9jpj9u5p6ugjylarkwmj9tsxr0pjlgpn","1 | Address [2/2] : 5wa8ff0","2 | Consensus key [1/2] : tpknam1qrp9828ajyltx25wheax6zdzsskgkpq","2 | Consensus key [2/2] : 4vjhmusagmachsy0qts7txdyqp34","3 | Ethereum cold key [1/2] : 03ef994e6d954450634ba03bdd5258dc17f560","3 | Ethereum cold key [2/2] : 5022d7a9ad5b92e49417ad538de9","4 | Ethereum hot key [1/2] : 02a8dfaefd846d1e9a29b83af89af753d8c0eb","4 | Ethereum hot key [2/2] : 75fd2b68137a22bd9cefb4125bdb","5 | Protocol key [1/2] : tpknam1qzhajhq4hhpur2kyj2t3sqe3jnxh55k","5 | Protocol key [2/2] : cp6v9d7h7cgm9mu2asfpcg5nc7fz","6 | Commission rate : 0.05","7 | Maximum commission rate change : 0.01","8 | Email : me@me.com","9 | Timestamp : 2023-12-08 15:43:12.399519530 UTC","10 | Pubkey [1/2] : tpknam1qq52dx5e290wyh7ngdt6wudtyd502lg","10 | Pubkey [2/2] : 6ln49yvg3vz97e8j2ruux5e3yewq","11 | Epoch : 10","12 | Gas limit : 0.025","13 | Fee token [1/2] : tnam1q9mjvqd45u7w54kee2aquugtv7vn7h3xr","13 | Fee token [2/2] : crau7xy","14 | Fees/gas unit : 0.000001"],"valid":true}, +{"blob":"1e0000006c6f63616c6e65742e6434313134643634383861656637663266363866360023000000323032332d31322d30385431353a34333a31322e3339393531393533302b30303a3030ef933cfef179c1c4442159ffae90f5696cfda66974e0af22ba12b0053bab7a3e8500689f9764cfd7d09149fe38b4ea57938787173b1bedd5064f759a26dd167301010000000000000000000000000000000000000000000000000000000000000000772601b5a73cea56d9caba0e710b67993f5e261e0028a69a99515ee25fd34357a771ab2368f57d1afcea523111608bec9e4a1f386a0a00000000000000a8610000000000000004000000023edc184a8c010000007fc17af22a18d7af5ec9ee1328bc78abf4be95f2e0460f2c13d937c7edcca864011800000074785f6265636f6d655f76616c696461746f722e7761736d003edc184a8c010000e900000000641917940eb88913fd1d9db9157030de197d019d00c253a8fd913eb32a8ebe7a6d09a2842c8b041564afbe43a8df717811e05c3cb303ef994e6d954450634ba03bdd5258dc17f5605022d7a9ad5b92e49417ad538de902a8dfaefd846d1e9a29b83af89af753d8c0eb75fd2b68137a22bd9cefb4125bdb00afd95c15bdc3c1aac4929718033194cd7a52d80e9856fafec2365df15d82438400743ba40b00000000000000000000000000000000000000000000000000000000e40b5402000000000000000000000000000000000000000000000000000000090000006d65406d652e636f6d00000003010000006adfa8d9d36f0829a3ceee3f833b384f0ceb29af7549935a8387095030ed96da01050000000028a69a99515ee25fd34357a771ab2368f57d1afcea523111608bec9e4a1f386a00c253a8fd913eb32a8ebe7a6d09a2842c8b041564afbe43a8df717811e05c3cb30103ef994e6d954450634ba03bdd5258dc17f5605022d7a9ad5b92e49417ad538de90102a8dfaefd846d1e9a29b83af89af753d8c0eb75fd2b68137a22bd9cefb4125bdb00afd95c15bdc3c1aac4929718033194cd7a52d80e9856fafec2365df15d824384050000000000401f5da268476bfa78b34c2aa0e2058bd89103c5f0660a923146820ed81a25281d6ed35d3ebd6dfc68d4710456a56682817c9139673329973e94f8cdb0e5f6000100b95d05195ae857281e471a7b0136c91caf792bf6f9de367b5000146f0ebcd1ca3767b27b897eba852e12554efe572c49fb34cc907d5b4448b0b1fb8ef874fb0a0201735b9337aff054caa3be4b9bce12b9d91c301b0149e74d9376ea057e3c23b9122d7eb22b7506f913800b4473e0bb7ad752fc9efe9371b6953a4b75883f92340a010301023b1b88432b621513af392685bdcff33b8318ba931a23952248954957b8449d69ff599fa728d374b97b765601ec55ffbfd1ba288688eb5c7993c2c72c73856c000400e1a8ed01f87ada41089af1cae84b374d3c1cecabd269310b51add47dadfb74d9773155da2842ebd74ca29dc42055f916e19b86b888804d5f779c3f7c5ef2f60503040000003a736848f280c54b03baf2026a6bc2aca0a8b6fff84c5d663a4aa284bef00890ef933cfef179c1c4442159ffae90f5696cfda66974e0af22ba12b0053bab7a3e8500689f9764cfd7d09149fe38b4ea57938787173b1bedd5064f759a26dd16732cee4cdf8ecb10c71e1ee4367d68a790a4af84256f9c5d048a303b0c8c4b947701010000000028a69a99515ee25fd34357a771ab2368f57d1afcea523111608bec9e4a1f386a010000000000463fd180b5b36529a16ceae3cd4d5ca069c6a0dda99106c29885a396f7407e1c844d29fa48c673b23b626dbbbb7154bdd69928005a4431dc19d656879f93270a","index":0,"name":"Init_Validator_9","output":["0 | Type : Init Validator","1 | Address [1/2] : tnam1q9jpj9u5p6ugjylarkwmj9tsxr0pjlgpn","1 | Address [2/2] : 5wa8ff0","2 | Consensus key [1/2] : tpknam1qrp9828ajyltx25wheax6zdzsskgkpq","2 | Consensus key [2/2] : 4vjhmusagmachsy0qts7txdyqp34","3 | Ethereum cold key [1/2] : 03ef994e6d954450634ba03bdd5258dc17f560","3 | Ethereum cold key [2/2] : 5022d7a9ad5b92e49417ad538de9","4 | Ethereum hot key [1/2] : 02a8dfaefd846d1e9a29b83af89af753d8c0eb","4 | Ethereum hot key [2/2] : 75fd2b68137a22bd9cefb4125bdb","5 | Protocol key [1/2] : tpknam1qzhajhq4hhpur2kyj2t3sqe3jnxh55k","5 | Protocol key [2/2] : cp6v9d7h7cgm9mu2asfpcg5nc7fz","6 | Commission rate : 0.05","7 | Maximum commission rate change : 0.01","8 | Email : me@me.com"],"output_expert":["0 | Code hash [1/2] : 7fc17af22a18d7af5ec9ee1328bc78abf4be95","0 | Code hash [2/2] : f2e0460f2c13d937c7edcca864","1 | Address [1/2] : tnam1q9jpj9u5p6ugjylarkwmj9tsxr0pjlgpn","1 | Address [2/2] : 5wa8ff0","2 | Consensus key [1/2] : tpknam1qrp9828ajyltx25wheax6zdzsskgkpq","2 | Consensus key [2/2] : 4vjhmusagmachsy0qts7txdyqp34","3 | Ethereum cold key [1/2] : 03ef994e6d954450634ba03bdd5258dc17f560","3 | Ethereum cold key [2/2] : 5022d7a9ad5b92e49417ad538de9","4 | Ethereum hot key [1/2] : 02a8dfaefd846d1e9a29b83af89af753d8c0eb","4 | Ethereum hot key [2/2] : 75fd2b68137a22bd9cefb4125bdb","5 | Protocol key [1/2] : tpknam1qzhajhq4hhpur2kyj2t3sqe3jnxh55k","5 | Protocol key [2/2] : cp6v9d7h7cgm9mu2asfpcg5nc7fz","6 | Commission rate : 0.05","7 | Maximum commission rate change : 0.01","8 | Email : me@me.com","9 | Timestamp : 2023-12-08 15:43:12.399519530 UTC","10 | Pubkey [1/2] : tpknam1qq52dx5e290wyh7ngdt6wudtyd502lg","10 | Pubkey [2/2] : 6ln49yvg3vz97e8j2ruux5e3yewq","11 | Epoch : 10","12 | Gas limit : 0.025","13 | Fee token [1/2] : tnam1q9mjvqd45u7w54kee2aquugtv7vn7h3xr","13 | Fee token [2/2] : crau7xy","14 | Fees/gas unit : 0.000001"],"valid":true}, +{"blob":"1e0000006c6f63616c6e65742e6434313134643634383861656637663266363866360023000000323032332d31322d30385431353a34333a31352e3532343332333330332b30303a3030d1b2366a64912255b9747c9971f43a5bd70176e011795f376f652d3b504c93ee7e222003bd01da19e4226e68a3c318bac9ef814099e8dfd1744a3f326bb78c6e01010000000000000000000000000000000000000000000000000000000000000000772601b5a73cea56d9caba0e710b67993f5e261e00e6e3ecc407e5a7ec9646593fb712a6d0a493be4c29d3980db354872cd7ca5e220b00000000000000a86100000000000000030000000171e8184a8c010000001851d91372bdcf58180f79f30dfd1d2b7f509a779e3e2e798bf68a24739d780a010c00000076705f757365722e7761736d0271e8184a8c01000000b7653a7a854c9036d884bd3ce0315acd604c7a61e0f86b8c04dcd41d96c8e917011400000074785f696e69745f6163636f756e742e7761736d0071e8184a8c010000670000000200000000e6e3ecc407e5a7ec9646593fb712a6d0a493be4c29d3980db354872cd7ca5e220028a69a99515ee25fd34357a771ab2368f57d1afcea523111608bec9e4a1f386ac97b17ba099fe4245a57e2dab631e2703d52148c01f5ec6ce92cdb965300d90a02","index":0,"name":"Init_Account_10","output":["0 | Type : Init Account","1 | Public key [1/2] : tpknam1qrnw8mxyqlj60mykgevnldcj5mg2fya","1 | Public key [2/2] : 7fs5a8xqdkd2gwtxhef0zy8a2wha","2 | Public key [1/2] : tpknam1qq52dx5e290wyh7ngdt6wudtyd502lg","2 | Public key [2/2] : 6ln49yvg3vz97e8j2ruux5e3yewq","3 | Threshold : 2","4 | VP type : User"],"output_expert":["0 | Code hash [1/2] : b7653a7a854c9036d884bd3ce0315acd604c7a","0 | Code hash [2/2] : 61e0f86b8c04dcd41d96c8e917","1 | Public key [1/2] : tpknam1qrnw8mxyqlj60mykgevnldcj5mg2fya","1 | Public key [2/2] : 7fs5a8xqdkd2gwtxhef0zy8a2wha","2 | Public key [1/2] : tpknam1qq52dx5e290wyh7ngdt6wudtyd502lg","2 | Public key [2/2] : 6ln49yvg3vz97e8j2ruux5e3yewq","3 | Threshold : 2","4 | VP type [1/2] : 1851d91372bdcf58180f79f30dfd1d2b7f509a","4 | VP type [2/2] : 779e3e2e798bf68a24739d780a","5 | Timestamp : 2023-12-08 15:43:15.524323303 UTC","6 | Pubkey [1/2] : tpknam1qrnw8mxyqlj60mykgevnldcj5mg2fya","6 | Pubkey [2/2] : 7fs5a8xqdkd2gwtxhef0zy8a2wha","7 | Epoch : 11","8 | Gas limit : 0.025","9 | Fee token [1/2] : tnam1q9mjvqd45u7w54kee2aquugtv7vn7h3xr","9 | Fee token [2/2] : crau7xy","10 | Fees/gas unit : 0.000001"],"valid":true}, +{"blob":"1e0000006c6f63616c6e65742e6434313134643634383861656637663266363866360023000000323032332d31322d30385431353a34333a31352e3532343332333330332b30303a3030d1b2366a64912255b9747c9971f43a5bd70176e011795f376f652d3b504c93ee7e222003bd01da19e4226e68a3c318bac9ef814099e8dfd1744a3f326bb78c6e01010000000000000000000000000000000000000000000000000000000000000000772601b5a73cea56d9caba0e710b67993f5e261e00e6e3ecc407e5a7ec9646593fb712a6d0a493be4c29d3980db354872cd7ca5e220b00000000000000a86100000000000000040000000171e8184a8c010000001851d91372bdcf58180f79f30dfd1d2b7f509a779e3e2e798bf68a24739d780a010c00000076705f757365722e7761736d0271e8184a8c01000000b7653a7a854c9036d884bd3ce0315acd604c7a61e0f86b8c04dcd41d96c8e917011400000074785f696e69745f6163636f756e742e7761736d0071e8184a8c010000670000000200000000e6e3ecc407e5a7ec9646593fb712a6d0a493be4c29d3980db354872cd7ca5e220028a69a99515ee25fd34357a771ab2368f57d1afcea523111608bec9e4a1f386ac97b17ba099fe4245a57e2dab631e2703d52148c01f5ec6ce92cdb965300d90a020304000000b1495c583bb0df6afa13a3b46b8d9b1b45d626a76f134a45ee3b4f87835ed707c97b17ba099fe4245a57e2dab631e2703d52148c01f5ec6ce92cdb965300d90ad1b2366a64912255b9747c9971f43a5bd70176e011795f376f652d3b504c93ee7e222003bd01da19e4226e68a3c318bac9ef814099e8dfd1744a3f326bb78c6e010100000000e6e3ecc407e5a7ec9646593fb712a6d0a493be4c29d3980db354872cd7ca5e220100000000007ac75d6beca00d0fdd94aa743c93437bb3c4020feb0586b09e62e124918721d0458d8692e0ad5205a92da0b671293f6f6a9d45d92ddb7e5ab998258d7992680a","index":0,"name":"Init_Account_11","output":["0 | Type : Init Account","1 | Public key [1/2] : tpknam1qrnw8mxyqlj60mykgevnldcj5mg2fya","1 | Public key [2/2] : 7fs5a8xqdkd2gwtxhef0zy8a2wha","2 | Public key [1/2] : tpknam1qq52dx5e290wyh7ngdt6wudtyd502lg","2 | Public key [2/2] : 6ln49yvg3vz97e8j2ruux5e3yewq","3 | Threshold : 2","4 | VP type : User"],"output_expert":["0 | Code hash [1/2] : b7653a7a854c9036d884bd3ce0315acd604c7a","0 | Code hash [2/2] : 61e0f86b8c04dcd41d96c8e917","1 | Public key [1/2] : tpknam1qrnw8mxyqlj60mykgevnldcj5mg2fya","1 | Public key [2/2] : 7fs5a8xqdkd2gwtxhef0zy8a2wha","2 | Public key [1/2] : tpknam1qq52dx5e290wyh7ngdt6wudtyd502lg","2 | Public key [2/2] : 6ln49yvg3vz97e8j2ruux5e3yewq","3 | Threshold : 2","4 | VP type [1/2] : 1851d91372bdcf58180f79f30dfd1d2b7f509a","4 | VP type [2/2] : 779e3e2e798bf68a24739d780a","5 | Timestamp : 2023-12-08 15:43:15.524323303 UTC","6 | Pubkey [1/2] : tpknam1qrnw8mxyqlj60mykgevnldcj5mg2fya","6 | Pubkey [2/2] : 7fs5a8xqdkd2gwtxhef0zy8a2wha","7 | Epoch : 11","8 | Gas limit : 0.025","9 | Fee token [1/2] : tnam1q9mjvqd45u7w54kee2aquugtv7vn7h3xr","9 | Fee token [2/2] : crau7xy","10 | Fees/gas unit : 0.000001"],"valid":true}, +{"blob":"1e0000006c6f63616c6e65742e6434313134643634383861656637663266363866360023000000323032332d31322d30385431353a34333a31382e3133333135323239352b30303a3030102bd849ba6029f6b2d95001410049bea334c14b19e33c8c3fa57729e5445fad768bb06e4937fd5dc6f754434c090931777bc8bf4bc37a6f02b5058ce2d186a601010000000000000000000000000000000000000000000000000000000000000000772601b5a73cea56d9caba0e710b67993f5e261e00e6e3ecc407e5a7ec9646593fb712a6d0a493be4c29d3980db354872cd7ca5e220b00000000000000a861000000000000000200000002a3f2184a8c010000007fc17af22a18d7af5ec9ee1328bc78abf4be95f2e0460f2c13d937c7edcca864011800000074785f6265636f6d655f76616c696461746f722e7761736d00a3f2184a8c010000e900000000b30ba2bce951416a9148ad272f0167c715fb437f0078269435f2885745d1a0d0cd1d02f443026c2b2b482b1536f4c97e8b7b47dadc02e83aace29fc4272fa7fbd68db586075859d85a952f2068bbb272886e67b4b96f03c9346007e2ca3766247b7082717a9453908f6ab1cd65abc761073a6751d9e0cc006409276dc103a92dafc88d678d357b35cde3bbe17ff7d219f9e2f54463b1da5200743ba40b00000000000000000000000000000000000000000000000000000000e40b5402000000000000000000000000000000000000000000000000000000090000006d65406d652e636f6d000000","index":0,"name":"Init_Validator_10","output":["0 | Type : Init Validator","1 | Address [1/2] : tnam1qxeshg4ua9g5z653fzkjwtcpvlr3t76r0","1 | Address [2/2] : u5e7g7w","2 | Consensus key [1/2] : tpknam1qpuzd9p472y9w3w35rgv68gz73psymp","2 | Consensus key [2/2] : t9dyzk9fk7nyhazmmglddcnuvqcx","3 | Ethereum cold key [1/2] : 02e83aace29fc4272fa7fbd68db586075859d8","3 | Ethereum cold key [2/2] : 5a952f2068bbb272886e67b4b96f","4 | Ethereum hot key [1/2] : 03c9346007e2ca3766247b7082717a9453908f","4 | Ethereum hot key [2/2] : 6ab1cd65abc761073a6751d9e0cc","5 | Protocol key [1/2] : tpknam1qpjqjfmdcyp6jtd0ezxk0rf40v6umca","5 | Protocol key [2/2] : mu9ll05sel83023rrk8d9y4z5hup","6 | Commission rate : 0.05","7 | Maximum commission rate change : 0.01","8 | Email : me@me.com"],"output_expert":["0 | Code hash [1/2] : 7fc17af22a18d7af5ec9ee1328bc78abf4be95","0 | Code hash [2/2] : f2e0460f2c13d937c7edcca864","1 | Address [1/2] : tnam1qxeshg4ua9g5z653fzkjwtcpvlr3t76r0","1 | Address [2/2] : u5e7g7w","2 | Consensus key [1/2] : tpknam1qpuzd9p472y9w3w35rgv68gz73psymp","2 | Consensus key [2/2] : t9dyzk9fk7nyhazmmglddcnuvqcx","3 | Ethereum cold key [1/2] : 02e83aace29fc4272fa7fbd68db586075859d8","3 | Ethereum cold key [2/2] : 5a952f2068bbb272886e67b4b96f","4 | Ethereum hot key [1/2] : 03c9346007e2ca3766247b7082717a9453908f","4 | Ethereum hot key [2/2] : 6ab1cd65abc761073a6751d9e0cc","5 | Protocol key [1/2] : tpknam1qpjqjfmdcyp6jtd0ezxk0rf40v6umca","5 | Protocol key [2/2] : mu9ll05sel83023rrk8d9y4z5hup","6 | Commission rate : 0.05","7 | Maximum commission rate change : 0.01","8 | Email : me@me.com","9 | Timestamp : 2023-12-08 15:43:18.133152295 UTC","10 | Pubkey [1/2] : tpknam1qrnw8mxyqlj60mykgevnldcj5mg2fya","10 | Pubkey [2/2] : 7fs5a8xqdkd2gwtxhef0zy8a2wha","11 | Epoch : 11","12 | Gas limit : 0.025","13 | Fee token [1/2] : tnam1q9mjvqd45u7w54kee2aquugtv7vn7h3xr","13 | Fee token [2/2] : crau7xy","14 | Fees/gas unit : 0.000001"],"valid":true}, +{"blob":"1e0000006c6f63616c6e65742e6434313134643634383861656637663266363866360023000000323032332d31322d30385431353a34333a31382e3133333135323239352b30303a3030102bd849ba6029f6b2d95001410049bea334c14b19e33c8c3fa57729e5445fad768bb06e4937fd5dc6f754434c090931777bc8bf4bc37a6f02b5058ce2d186a601010000000000000000000000000000000000000000000000000000000000000000772601b5a73cea56d9caba0e710b67993f5e261e00e6e3ecc407e5a7ec9646593fb712a6d0a493be4c29d3980db354872cd7ca5e220b00000000000000a861000000000000000400000002a3f2184a8c010000007fc17af22a18d7af5ec9ee1328bc78abf4be95f2e0460f2c13d937c7edcca864011800000074785f6265636f6d655f76616c696461746f722e7761736d00a3f2184a8c010000e900000000b30ba2bce951416a9148ad272f0167c715fb437f0078269435f2885745d1a0d0cd1d02f443026c2b2b482b1536f4c97e8b7b47dadc02e83aace29fc4272fa7fbd68db586075859d85a952f2068bbb272886e67b4b96f03c9346007e2ca3766247b7082717a9453908f6ab1cd65abc761073a6751d9e0cc006409276dc103a92dafc88d678d357b35cde3bbe17ff7d219f9e2f54463b1da5200743ba40b00000000000000000000000000000000000000000000000000000000e40b5402000000000000000000000000000000000000000000000000000000090000006d65406d652e636f6d00000003010000003fcf69c8b56365cc4dee02de298f68d5c4c73a6350aa32f9206e892cc8839688010600000000e6e3ecc407e5a7ec9646593fb712a6d0a493be4c29d3980db354872cd7ca5e220028a69a99515ee25fd34357a771ab2368f57d1afcea523111608bec9e4a1f386a0078269435f2885745d1a0d0cd1d02f443026c2b2b482b1536f4c97e8b7b47dadc0102e83aace29fc4272fa7fbd68db586075859d85a952f2068bbb272886e67b4b96f0103c9346007e2ca3766247b7082717a9453908f6ab1cd65abc761073a6751d9e0cc006409276dc103a92dafc88d678d357b35cde3bbe17ff7d219f9e2f54463b1da52060000000000071e7a7059ffb042b29b0b26c73b7a8f6cd2cb3760f8590c9d2ae6967aaeee4f99cd2952d253069cf27a558d7513f40dd1897c8e6a7941a1d4d650ef7a80fb080100c5556803d209a47a57d25750c2c71e6c6c1aed8a3739de7031002c8db9f1565f1cf27a1d973f3325d85398f575aa802f357f961d4d3577daf786f3e7e559450d0200fd8dc259a4d43e3a39d34e7bc816cfddeb2db94276364b335f0c661c21854bb6229cf28264ba729d5494e62016523e9158ecaabd3df9c3d745830e12e0aae50e030160bed7ca56a0b2ffb31eba1b1d648c6dbcca9b63ac5877a14861cebbfdfc490e04651aca5631dc8c43c63531e23cb3b157ed0f9e29eb5f89f4b769fb2c4b38280104017706ab91000526eb66006304653bbeccb96f0c88296b11b4ed8e3605765c9fb43e3776787279eb1a20b7ef2af872cdba01d7aa794ad5bfbf2ff64f94e9d37aff0105003c0335fd6035e58be48989aec81d7a862b7d5ea8b6607c341a573d9f3fbf3783adea8e88bb602a0ff40ea017cbc1fbc26be3938014a73dd7ee95758f7ef42a040304000000db83affee3f4c9a02c007ee4ff75b47c3d219943da73ec90a01d3887d9cc1fd2102bd849ba6029f6b2d95001410049bea334c14b19e33c8c3fa57729e5445fad768bb06e4937fd5dc6f754434c090931777bc8bf4bc37a6f02b5058ce2d186a6d694ecb6aa98d61b0ef30575866db9294a447a27465adc6b47877c3879d59835010100000000e6e3ecc407e5a7ec9646593fb712a6d0a493be4c29d3980db354872cd7ca5e22010000000000ff4ca13ffb88921a8989de85a749631874a856b6a640e58ba994cbdbb6a8bb74eb7de7b81ba846e6abbd14a8b32943026533a4794cc2e6579e2f537b369a7c0e","index":0,"name":"Init_Validator_11","output":["0 | Type : Init Validator","1 | Address [1/2] : tnam1qxeshg4ua9g5z653fzkjwtcpvlr3t76r0","1 | Address [2/2] : u5e7g7w","2 | Consensus key [1/2] : tpknam1qpuzd9p472y9w3w35rgv68gz73psymp","2 | Consensus key [2/2] : t9dyzk9fk7nyhazmmglddcnuvqcx","3 | Ethereum cold key [1/2] : 02e83aace29fc4272fa7fbd68db586075859d8","3 | Ethereum cold key [2/2] : 5a952f2068bbb272886e67b4b96f","4 | Ethereum hot key [1/2] : 03c9346007e2ca3766247b7082717a9453908f","4 | Ethereum hot key [2/2] : 6ab1cd65abc761073a6751d9e0cc","5 | Protocol key [1/2] : tpknam1qpjqjfmdcyp6jtd0ezxk0rf40v6umca","5 | Protocol key [2/2] : mu9ll05sel83023rrk8d9y4z5hup","6 | Commission rate : 0.05","7 | Maximum commission rate change : 0.01","8 | Email : me@me.com"],"output_expert":["0 | Code hash [1/2] : 7fc17af22a18d7af5ec9ee1328bc78abf4be95","0 | Code hash [2/2] : f2e0460f2c13d937c7edcca864","1 | Address [1/2] : tnam1qxeshg4ua9g5z653fzkjwtcpvlr3t76r0","1 | Address [2/2] : u5e7g7w","2 | Consensus key [1/2] : tpknam1qpuzd9p472y9w3w35rgv68gz73psymp","2 | Consensus key [2/2] : t9dyzk9fk7nyhazmmglddcnuvqcx","3 | Ethereum cold key [1/2] : 02e83aace29fc4272fa7fbd68db586075859d8","3 | Ethereum cold key [2/2] : 5a952f2068bbb272886e67b4b96f","4 | Ethereum hot key [1/2] : 03c9346007e2ca3766247b7082717a9453908f","4 | Ethereum hot key [2/2] : 6ab1cd65abc761073a6751d9e0cc","5 | Protocol key [1/2] : tpknam1qpjqjfmdcyp6jtd0ezxk0rf40v6umca","5 | Protocol key [2/2] : mu9ll05sel83023rrk8d9y4z5hup","6 | Commission rate : 0.05","7 | Maximum commission rate change : 0.01","8 | Email : me@me.com","9 | Timestamp : 2023-12-08 15:43:18.133152295 UTC","10 | Pubkey [1/2] : tpknam1qrnw8mxyqlj60mykgevnldcj5mg2fya","10 | Pubkey [2/2] : 7fs5a8xqdkd2gwtxhef0zy8a2wha","11 | Epoch : 11","12 | Gas limit : 0.025","13 | Fee token [1/2] : tnam1q9mjvqd45u7w54kee2aquugtv7vn7h3xr","13 | Fee token [2/2] : crau7xy","14 | Fees/gas unit : 0.000001"],"valid":true}, +{"blob":"1e0000006c6f63616c6e65742e6434313134643634383861656637663266363866360023000000323032332d31322d30385431353a34333a32322e3332383139343136332b30303a3030fa016ee954544baef9bfda442da79ddbdf3e35904d574457301e7ba75bf80288e0a549a455ed3c77cd1a887858117579f81aae3c8527fa1deba65834ae5d1b3001010000000000000000000000000000000000000000000000000000000000000000772601b5a73cea56d9caba0e710b67993f5e261e00e6e3ecc407e5a7ec9646593fb712a6d0a493be4c29d3980db354872cd7ca5e220c00000000000000a8610000000000000003000000010403194a8c010000001851d91372bdcf58180f79f30dfd1d2b7f509a779e3e2e798bf68a24739d780a010c00000076705f757365722e7761736d020503194a8c01000000b7653a7a854c9036d884bd3ce0315acd604c7a61e0f86b8c04dcd41d96c8e917011400000074785f696e69745f6163636f756e742e7761736d000503194a8c010000460000000100000000e6e3ecc407e5a7ec9646593fb712a6d0a493be4c29d3980db354872cd7ca5e22aa24641356ae4470057177df74f683db83c70c6dd18adecbf14d1346bc62e35a01","index":0,"name":"Init_Account_12","output":["0 | Type : Init Account","1 | Public key [1/2] : tpknam1qrnw8mxyqlj60mykgevnldcj5mg2fya","1 | Public key [2/2] : 7fs5a8xqdkd2gwtxhef0zy8a2wha","2 | Threshold : 1","3 | VP type : User"],"output_expert":["0 | Code hash [1/2] : b7653a7a854c9036d884bd3ce0315acd604c7a","0 | Code hash [2/2] : 61e0f86b8c04dcd41d96c8e917","1 | Public key [1/2] : tpknam1qrnw8mxyqlj60mykgevnldcj5mg2fya","1 | Public key [2/2] : 7fs5a8xqdkd2gwtxhef0zy8a2wha","2 | Threshold : 1","3 | VP type [1/2] : 1851d91372bdcf58180f79f30dfd1d2b7f509a","3 | VP type [2/2] : 779e3e2e798bf68a24739d780a","4 | Timestamp : 2023-12-08 15:43:22.328194163 UTC","5 | Pubkey [1/2] : tpknam1qrnw8mxyqlj60mykgevnldcj5mg2fya","5 | Pubkey [2/2] : 7fs5a8xqdkd2gwtxhef0zy8a2wha","6 | Epoch : 12","7 | Gas limit : 0.025","8 | Fee token [1/2] : tnam1q9mjvqd45u7w54kee2aquugtv7vn7h3xr","8 | Fee token [2/2] : crau7xy","9 | Fees/gas unit : 0.000001"],"valid":true}, +{"blob":"1e0000006c6f63616c6e65742e6434313134643634383861656637663266363866360023000000323032332d31322d30385431353a34333a32322e3332383139343136332b30303a3030fa016ee954544baef9bfda442da79ddbdf3e35904d574457301e7ba75bf80288e0a549a455ed3c77cd1a887858117579f81aae3c8527fa1deba65834ae5d1b3001010000000000000000000000000000000000000000000000000000000000000000772601b5a73cea56d9caba0e710b67993f5e261e00e6e3ecc407e5a7ec9646593fb712a6d0a493be4c29d3980db354872cd7ca5e220c00000000000000a8610000000000000004000000010403194a8c010000001851d91372bdcf58180f79f30dfd1d2b7f509a779e3e2e798bf68a24739d780a010c00000076705f757365722e7761736d020503194a8c01000000b7653a7a854c9036d884bd3ce0315acd604c7a61e0f86b8c04dcd41d96c8e917011400000074785f696e69745f6163636f756e742e7761736d000503194a8c010000460000000100000000e6e3ecc407e5a7ec9646593fb712a6d0a493be4c29d3980db354872cd7ca5e22aa24641356ae4470057177df74f683db83c70c6dd18adecbf14d1346bc62e35a010304000000f23ceae660cb29043314bb7484f65258878b49220429bf625aa7e77bd00bee55aa24641356ae4470057177df74f683db83c70c6dd18adecbf14d1346bc62e35afa016ee954544baef9bfda442da79ddbdf3e35904d574457301e7ba75bf80288e0a549a455ed3c77cd1a887858117579f81aae3c8527fa1deba65834ae5d1b30010100000000e6e3ecc407e5a7ec9646593fb712a6d0a493be4c29d3980db354872cd7ca5e22010000000000f1412cca33c14d3e429142e0d679d9a15f4f365ee807ae96d3b799dd900a7b5776909ab01e86369bf587f87a5b0455000aab5b67f14217064012e85d9a3cca09","index":0,"name":"Init_Account_13","output":["0 | Type : Init Account","1 | Public key [1/2] : tpknam1qrnw8mxyqlj60mykgevnldcj5mg2fya","1 | Public key [2/2] : 7fs5a8xqdkd2gwtxhef0zy8a2wha","2 | Threshold : 1","3 | VP type : User"],"output_expert":["0 | Code hash [1/2] : b7653a7a854c9036d884bd3ce0315acd604c7a","0 | Code hash [2/2] : 61e0f86b8c04dcd41d96c8e917","1 | Public key [1/2] : tpknam1qrnw8mxyqlj60mykgevnldcj5mg2fya","1 | Public key [2/2] : 7fs5a8xqdkd2gwtxhef0zy8a2wha","2 | Threshold : 1","3 | VP type [1/2] : 1851d91372bdcf58180f79f30dfd1d2b7f509a","3 | VP type [2/2] : 779e3e2e798bf68a24739d780a","4 | Timestamp : 2023-12-08 15:43:22.328194163 UTC","5 | Pubkey [1/2] : tpknam1qrnw8mxyqlj60mykgevnldcj5mg2fya","5 | Pubkey [2/2] : 7fs5a8xqdkd2gwtxhef0zy8a2wha","6 | Epoch : 12","7 | Gas limit : 0.025","8 | Fee token [1/2] : tnam1q9mjvqd45u7w54kee2aquugtv7vn7h3xr","8 | Fee token [2/2] : crau7xy","9 | Fees/gas unit : 0.000001"],"valid":true}, +{"blob":"1e0000006c6f63616c6e65742e6434313134643634383861656637663266363866360023000000323032332d31322d30385431353a34333a32352e3333373131393737322b30303a3030435a2dbe9816c9a7b9636df315bea6d66ce6bff9daa6109a612154cd4884232e12574e7e42f41ae13b7e20bba996ab7f5307e194afd3e48c9b15a401d63e9bff01010000000000000000000000000000000000000000000000000000000000000000772601b5a73cea56d9caba0e710b67993f5e261e00e6e3ecc407e5a7ec9646593fb712a6d0a493be4c29d3980db354872cd7ca5e220c00000000000000a861000000000000000300000001c30e194a8c010000001851d91372bdcf58180f79f30dfd1d2b7f509a779e3e2e798bf68a24739d780a010c00000076705f757365722e7761736d02c30e194a8c01000000b7653a7a854c9036d884bd3ce0315acd604c7a61e0f86b8c04dcd41d96c8e917011400000074785f696e69745f6163636f756e742e7761736d00c30e194a8c010000880000000300000000e6e3ecc407e5a7ec9646593fb712a6d0a493be4c29d3980db354872cd7ca5e220028a69a99515ee25fd34357a771ab2368f57d1afcea523111608bec9e4a1f386a001c90f19339bc402c1cccae10e535635ac2a2fc8670a1dba6eb227eefbb374c14a0e3f152813a64ec20dee37a3d666e6dc38ea30b4959c044180aa4f45e3290b202","index":0,"name":"Init_Account_14","output":["0 | Type : Init Account","1 | Public key [1/2] : tpknam1qrnw8mxyqlj60mykgevnldcj5mg2fya","1 | Public key [2/2] : 7fs5a8xqdkd2gwtxhef0zy8a2wha","2 | Public key [1/2] : tpknam1qq52dx5e290wyh7ngdt6wudtyd502lg","2 | Public key [2/2] : 6ln49yvg3vz97e8j2ruux5e3yewq","3 | Public key [1/2] : tpknam1qqwfpuvn8x7yqtquejhppef4vddv9gh","3 | Public key [2/2] : usec2rkaxav38amamxaxpgj9cs79","4 | Threshold : 2","5 | VP type : User"],"output_expert":["0 | Code hash [1/2] : b7653a7a854c9036d884bd3ce0315acd604c7a","0 | Code hash [2/2] : 61e0f86b8c04dcd41d96c8e917","1 | Public key [1/2] : tpknam1qrnw8mxyqlj60mykgevnldcj5mg2fya","1 | Public key [2/2] : 7fs5a8xqdkd2gwtxhef0zy8a2wha","2 | Public key [1/2] : tpknam1qq52dx5e290wyh7ngdt6wudtyd502lg","2 | Public key [2/2] : 6ln49yvg3vz97e8j2ruux5e3yewq","3 | Public key [1/2] : tpknam1qqwfpuvn8x7yqtquejhppef4vddv9gh","3 | Public key [2/2] : usec2rkaxav38amamxaxpgj9cs79","4 | Threshold : 2","5 | VP type [1/2] : 1851d91372bdcf58180f79f30dfd1d2b7f509a","5 | VP type [2/2] : 779e3e2e798bf68a24739d780a","6 | Timestamp : 2023-12-08 15:43:25.337119772 UTC","7 | Pubkey [1/2] : tpknam1qrnw8mxyqlj60mykgevnldcj5mg2fya","7 | Pubkey [2/2] : 7fs5a8xqdkd2gwtxhef0zy8a2wha","8 | Epoch : 12","9 | Gas limit : 0.025","10 | Fee token [1/2] : tnam1q9mjvqd45u7w54kee2aquugtv7vn7h3xr","10 | Fee token [2/2] : crau7xy","11 | Fees/gas unit : 0.000001"],"valid":true}, +{"blob":"1e0000006c6f63616c6e65742e6434313134643634383861656637663266363866360023000000323032332d31322d30385431353a34333a32352e3333373131393737322b30303a3030435a2dbe9816c9a7b9636df315bea6d66ce6bff9daa6109a612154cd4884232e12574e7e42f41ae13b7e20bba996ab7f5307e194afd3e48c9b15a401d63e9bff01010000000000000000000000000000000000000000000000000000000000000000772601b5a73cea56d9caba0e710b67993f5e261e00e6e3ecc407e5a7ec9646593fb712a6d0a493be4c29d3980db354872cd7ca5e220c00000000000000a861000000000000000400000001c30e194a8c010000001851d91372bdcf58180f79f30dfd1d2b7f509a779e3e2e798bf68a24739d780a010c00000076705f757365722e7761736d02c30e194a8c01000000b7653a7a854c9036d884bd3ce0315acd604c7a61e0f86b8c04dcd41d96c8e917011400000074785f696e69745f6163636f756e742e7761736d00c30e194a8c010000880000000300000000e6e3ecc407e5a7ec9646593fb712a6d0a493be4c29d3980db354872cd7ca5e220028a69a99515ee25fd34357a771ab2368f57d1afcea523111608bec9e4a1f386a001c90f19339bc402c1cccae10e535635ac2a2fc8670a1dba6eb227eefbb374c14a0e3f152813a64ec20dee37a3d666e6dc38ea30b4959c044180aa4f45e3290b2020304000000589ffbc8169f1439386635b94dd20e89c7e453cd9b0f8b570565861bb31c0414a0e3f152813a64ec20dee37a3d666e6dc38ea30b4959c044180aa4f45e3290b2435a2dbe9816c9a7b9636df315bea6d66ce6bff9daa6109a612154cd4884232e12574e7e42f41ae13b7e20bba996ab7f5307e194afd3e48c9b15a401d63e9bff010100000000e6e3ecc407e5a7ec9646593fb712a6d0a493be4c29d3980db354872cd7ca5e2201000000000007f1848dff5135192e7673ba720bce170cd48094a7fa63cb1b28e4692d44d914f875a9e0dc5d8eea6268373985fa0188659b7686e37cee284f7ccd231af78905","index":0,"name":"Init_Account_15","output":["0 | Type : Init Account","1 | Public key [1/2] : tpknam1qrnw8mxyqlj60mykgevnldcj5mg2fya","1 | Public key [2/2] : 7fs5a8xqdkd2gwtxhef0zy8a2wha","2 | Public key [1/2] : tpknam1qq52dx5e290wyh7ngdt6wudtyd502lg","2 | Public key [2/2] : 6ln49yvg3vz97e8j2ruux5e3yewq","3 | Public key [1/2] : tpknam1qqwfpuvn8x7yqtquejhppef4vddv9gh","3 | Public key [2/2] : usec2rkaxav38amamxaxpgj9cs79","4 | Threshold : 2","5 | VP type : User"],"output_expert":["0 | Code hash [1/2] : b7653a7a854c9036d884bd3ce0315acd604c7a","0 | Code hash [2/2] : 61e0f86b8c04dcd41d96c8e917","1 | Public key [1/2] : tpknam1qrnw8mxyqlj60mykgevnldcj5mg2fya","1 | Public key [2/2] : 7fs5a8xqdkd2gwtxhef0zy8a2wha","2 | Public key [1/2] : tpknam1qq52dx5e290wyh7ngdt6wudtyd502lg","2 | Public key [2/2] : 6ln49yvg3vz97e8j2ruux5e3yewq","3 | Public key [1/2] : tpknam1qqwfpuvn8x7yqtquejhppef4vddv9gh","3 | Public key [2/2] : usec2rkaxav38amamxaxpgj9cs79","4 | Threshold : 2","5 | VP type [1/2] : 1851d91372bdcf58180f79f30dfd1d2b7f509a","5 | VP type [2/2] : 779e3e2e798bf68a24739d780a","6 | Timestamp : 2023-12-08 15:43:25.337119772 UTC","7 | Pubkey [1/2] : tpknam1qrnw8mxyqlj60mykgevnldcj5mg2fya","7 | Pubkey [2/2] : 7fs5a8xqdkd2gwtxhef0zy8a2wha","8 | Epoch : 12","9 | Gas limit : 0.025","10 | Fee token [1/2] : tnam1q9mjvqd45u7w54kee2aquugtv7vn7h3xr","10 | Fee token [2/2] : crau7xy","11 | Fees/gas unit : 0.000001"],"valid":true} ] diff --git a/tests_zemu/package.json b/tests_zemu/package.json index fe851026..165402ab 100644 --- a/tests_zemu/package.json +++ b/tests_zemu/package.json @@ -19,18 +19,18 @@ }, "dependencies": { "@zondax/ledger-namada": "../js", - "@zondax/zemu": "^0.45.0" + "@zondax/zemu": "^0.46.0" }, "devDependencies": { - "@types/jest": "^29.5.6", + "@types/jest": "^29.5.11", "@types/ledgerhq__hw-transport": "^4.21.6", - "@typescript-eslint/eslint-plugin": "^6.13.1", - "@typescript-eslint/parser": "^6.13.1", + "@typescript-eslint/eslint-plugin": "^6.14.0", + "@typescript-eslint/parser": "^6.14.0", "blakejs": "^1.1.1", "crypto-js": "4.2.0", "ed25519-supercop": "^2.0.1", - "eslint": "^8.52.0", - "eslint-config-prettier": "^9.0.0", + "eslint": "^8.55.0", + "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.0", "eslint-plugin-jest": "^27.4.3", "eslint-plugin-prettier": "^5.0.1", @@ -38,9 +38,9 @@ "js-sha256": "0.10.1", "jssha": "^3.3.1", "leb128": "^0.0.5", - "prettier": "^3.0.3", + "prettier": "^3.1.1", "ts-jest": "^29.1.1", - "ts-node": "^10.9.1", - "typescript": "^5.2.2" + "ts-node": "^10.9.2", + "typescript": "^5.3.3" } } diff --git a/tests_zemu/snapshots/s-mainmenu/00004.png b/tests_zemu/snapshots/s-mainmenu/00004.png index 743f8dd4..176b46df 100644 Binary files a/tests_zemu/snapshots/s-mainmenu/00004.png and b/tests_zemu/snapshots/s-mainmenu/00004.png differ diff --git a/tests_zemu/snapshots/s-mainmenu/00010.png b/tests_zemu/snapshots/s-mainmenu/00010.png index 743f8dd4..176b46df 100644 Binary files a/tests_zemu/snapshots/s-mainmenu/00010.png and b/tests_zemu/snapshots/s-mainmenu/00010.png differ diff --git a/tests_zemu/snapshots/s-sign-init_validator/00000.png b/tests_zemu/snapshots/s-sign-init_validator/00000.png deleted file mode 100644 index ab641537..00000000 Binary files a/tests_zemu/snapshots/s-sign-init_validator/00000.png and /dev/null differ diff --git a/tests_zemu/snapshots/s-sign-init_validator/00001.png b/tests_zemu/snapshots/s-sign-init_validator/00001.png deleted file mode 100644 index 6580ea96..00000000 Binary files a/tests_zemu/snapshots/s-sign-init_validator/00001.png and /dev/null differ diff --git a/tests_zemu/snapshots/s-sign-init_validator/00002.png b/tests_zemu/snapshots/s-sign-init_validator/00002.png deleted file mode 100644 index 325fa9e5..00000000 Binary files a/tests_zemu/snapshots/s-sign-init_validator/00002.png and /dev/null differ diff --git a/tests_zemu/snapshots/s-sign-init_validator/00003.png b/tests_zemu/snapshots/s-sign-init_validator/00003.png deleted file mode 100644 index 1de499d5..00000000 Binary files a/tests_zemu/snapshots/s-sign-init_validator/00003.png and /dev/null differ diff --git a/tests_zemu/snapshots/s-sign-init_validator/00004.png b/tests_zemu/snapshots/s-sign-init_validator/00004.png deleted file mode 100644 index 7ea845a8..00000000 Binary files a/tests_zemu/snapshots/s-sign-init_validator/00004.png and /dev/null differ diff --git a/tests_zemu/snapshots/s-sign-init_validator/00005.png b/tests_zemu/snapshots/s-sign-init_validator/00005.png deleted file mode 100644 index b9340cbf..00000000 Binary files a/tests_zemu/snapshots/s-sign-init_validator/00005.png and /dev/null differ diff --git a/tests_zemu/snapshots/s-sign-init_validator/00006.png b/tests_zemu/snapshots/s-sign-init_validator/00006.png deleted file mode 100644 index 61273f0b..00000000 Binary files a/tests_zemu/snapshots/s-sign-init_validator/00006.png and /dev/null differ diff --git a/tests_zemu/snapshots/s-sign-init_validator/00007.png b/tests_zemu/snapshots/s-sign-init_validator/00007.png deleted file mode 100644 index d68e4dd8..00000000 Binary files a/tests_zemu/snapshots/s-sign-init_validator/00007.png and /dev/null differ diff --git a/tests_zemu/snapshots/s-sign-init_validator/00008.png b/tests_zemu/snapshots/s-sign-init_validator/00008.png deleted file mode 100644 index bc3a6aa3..00000000 Binary files a/tests_zemu/snapshots/s-sign-init_validator/00008.png and /dev/null differ diff --git a/tests_zemu/snapshots/s-sign-init_validator/00009.png b/tests_zemu/snapshots/s-sign-init_validator/00009.png deleted file mode 100644 index 3db2a5b2..00000000 Binary files a/tests_zemu/snapshots/s-sign-init_validator/00009.png and /dev/null differ diff --git a/tests_zemu/snapshots/s-sign-init_validator/00010.png b/tests_zemu/snapshots/s-sign-init_validator/00010.png deleted file mode 100644 index b208a890..00000000 Binary files a/tests_zemu/snapshots/s-sign-init_validator/00010.png and /dev/null differ diff --git a/tests_zemu/snapshots/s-sign-init_validator/00011.png b/tests_zemu/snapshots/s-sign-init_validator/00011.png deleted file mode 100644 index 57e5ac47..00000000 Binary files a/tests_zemu/snapshots/s-sign-init_validator/00011.png and /dev/null differ diff --git a/tests_zemu/snapshots/s-sign-init_validator/00012.png b/tests_zemu/snapshots/s-sign-init_validator/00012.png deleted file mode 100644 index 2bfccdb0..00000000 Binary files a/tests_zemu/snapshots/s-sign-init_validator/00012.png and /dev/null differ diff --git a/tests_zemu/snapshots/s-sign-init_validator/00013.png b/tests_zemu/snapshots/s-sign-init_validator/00013.png deleted file mode 100644 index 2c49c978..00000000 Binary files a/tests_zemu/snapshots/s-sign-init_validator/00013.png and /dev/null differ diff --git a/tests_zemu/snapshots/s-sign-init_validator/00014.png b/tests_zemu/snapshots/s-sign-init_validator/00014.png deleted file mode 100644 index a31b1e7e..00000000 Binary files a/tests_zemu/snapshots/s-sign-init_validator/00014.png and /dev/null differ diff --git a/tests_zemu/snapshots/s-sign-init_validator/00015.png b/tests_zemu/snapshots/s-sign-init_validator/00015.png deleted file mode 100644 index a3a4c055..00000000 Binary files a/tests_zemu/snapshots/s-sign-init_validator/00015.png and /dev/null differ diff --git a/tests_zemu/snapshots/s-sign-init_validator/00016.png b/tests_zemu/snapshots/s-sign-init_validator/00016.png deleted file mode 100644 index 006c26ab..00000000 Binary files a/tests_zemu/snapshots/s-sign-init_validator/00016.png and /dev/null differ diff --git a/tests_zemu/snapshots/s-sign-init_validator/00017.png b/tests_zemu/snapshots/s-sign-init_validator/00017.png deleted file mode 100644 index 8bc7c88d..00000000 Binary files a/tests_zemu/snapshots/s-sign-init_validator/00017.png and /dev/null differ diff --git a/tests_zemu/snapshots/s-sign-init_validator/00018.png b/tests_zemu/snapshots/s-sign-init_validator/00018.png deleted file mode 100644 index 2bfccdb0..00000000 Binary files a/tests_zemu/snapshots/s-sign-init_validator/00018.png and /dev/null differ diff --git a/tests_zemu/snapshots/s-sign-init_validator/00019.png b/tests_zemu/snapshots/s-sign-init_validator/00019.png deleted file mode 100644 index 2c49c978..00000000 Binary files a/tests_zemu/snapshots/s-sign-init_validator/00019.png and /dev/null differ diff --git a/tests_zemu/snapshots/s-sign-init_validator/00020.png b/tests_zemu/snapshots/s-sign-init_validator/00020.png deleted file mode 100644 index a3a4c055..00000000 Binary files a/tests_zemu/snapshots/s-sign-init_validator/00020.png and /dev/null differ diff --git a/tests_zemu/snapshots/s-sign-init_validator/00021.png b/tests_zemu/snapshots/s-sign-init_validator/00021.png deleted file mode 100644 index 006c26ab..00000000 Binary files a/tests_zemu/snapshots/s-sign-init_validator/00021.png and /dev/null differ diff --git a/tests_zemu/snapshots/s-sign-init_validator/00022.png b/tests_zemu/snapshots/s-sign-init_validator/00022.png deleted file mode 100644 index 9eeb1e0e..00000000 Binary files a/tests_zemu/snapshots/s-sign-init_validator/00022.png and /dev/null differ diff --git a/tests_zemu/snapshots/s-sign-init_validator/00023.png b/tests_zemu/snapshots/s-sign-init_validator/00023.png deleted file mode 100644 index 006c26ab..00000000 Binary files a/tests_zemu/snapshots/s-sign-init_validator/00023.png and /dev/null differ diff --git a/tests_zemu/snapshots/s-sign-init_validator/00024.png b/tests_zemu/snapshots/s-sign-init_validator/00024.png deleted file mode 100644 index 9eeb1e0e..00000000 Binary files a/tests_zemu/snapshots/s-sign-init_validator/00024.png and /dev/null differ diff --git a/tests_zemu/snapshots/sp-mainmenu/00004.png b/tests_zemu/snapshots/sp-mainmenu/00004.png index 83c56bd0..0dfb566a 100644 Binary files a/tests_zemu/snapshots/sp-mainmenu/00004.png and b/tests_zemu/snapshots/sp-mainmenu/00004.png differ diff --git a/tests_zemu/snapshots/sp-mainmenu/00010.png b/tests_zemu/snapshots/sp-mainmenu/00010.png index 83c56bd0..0dfb566a 100644 Binary files a/tests_zemu/snapshots/sp-mainmenu/00010.png and b/tests_zemu/snapshots/sp-mainmenu/00010.png differ diff --git a/tests_zemu/snapshots/sp-sign-init_validator/00000.png b/tests_zemu/snapshots/sp-sign-init_validator/00000.png deleted file mode 100644 index ca62a34a..00000000 Binary files a/tests_zemu/snapshots/sp-sign-init_validator/00000.png and /dev/null differ diff --git a/tests_zemu/snapshots/sp-sign-init_validator/00001.png b/tests_zemu/snapshots/sp-sign-init_validator/00001.png deleted file mode 100644 index d556b266..00000000 Binary files a/tests_zemu/snapshots/sp-sign-init_validator/00001.png and /dev/null differ diff --git a/tests_zemu/snapshots/sp-sign-init_validator/00002.png b/tests_zemu/snapshots/sp-sign-init_validator/00002.png deleted file mode 100644 index 7e154610..00000000 Binary files a/tests_zemu/snapshots/sp-sign-init_validator/00002.png and /dev/null differ diff --git a/tests_zemu/snapshots/sp-sign-init_validator/00003.png b/tests_zemu/snapshots/sp-sign-init_validator/00003.png deleted file mode 100644 index 4386b7c1..00000000 Binary files a/tests_zemu/snapshots/sp-sign-init_validator/00003.png and /dev/null differ diff --git a/tests_zemu/snapshots/sp-sign-init_validator/00004.png b/tests_zemu/snapshots/sp-sign-init_validator/00004.png deleted file mode 100644 index 791bb362..00000000 Binary files a/tests_zemu/snapshots/sp-sign-init_validator/00004.png and /dev/null differ diff --git a/tests_zemu/snapshots/sp-sign-init_validator/00005.png b/tests_zemu/snapshots/sp-sign-init_validator/00005.png deleted file mode 100644 index 457857ea..00000000 Binary files a/tests_zemu/snapshots/sp-sign-init_validator/00005.png and /dev/null differ diff --git a/tests_zemu/snapshots/sp-sign-init_validator/00006.png b/tests_zemu/snapshots/sp-sign-init_validator/00006.png deleted file mode 100644 index 81dec174..00000000 Binary files a/tests_zemu/snapshots/sp-sign-init_validator/00006.png and /dev/null differ diff --git a/tests_zemu/snapshots/sp-sign-init_validator/00007.png b/tests_zemu/snapshots/sp-sign-init_validator/00007.png deleted file mode 100644 index 35c050e1..00000000 Binary files a/tests_zemu/snapshots/sp-sign-init_validator/00007.png and /dev/null differ diff --git a/tests_zemu/snapshots/sp-sign-init_validator/00008.png b/tests_zemu/snapshots/sp-sign-init_validator/00008.png deleted file mode 100644 index 215cd541..00000000 Binary files a/tests_zemu/snapshots/sp-sign-init_validator/00008.png and /dev/null differ diff --git a/tests_zemu/snapshots/sp-sign-init_validator/00009.png b/tests_zemu/snapshots/sp-sign-init_validator/00009.png deleted file mode 100644 index 951e2771..00000000 Binary files a/tests_zemu/snapshots/sp-sign-init_validator/00009.png and /dev/null differ diff --git a/tests_zemu/snapshots/sp-sign-init_validator/00010.png b/tests_zemu/snapshots/sp-sign-init_validator/00010.png deleted file mode 100644 index a518f01b..00000000 Binary files a/tests_zemu/snapshots/sp-sign-init_validator/00010.png and /dev/null differ diff --git a/tests_zemu/snapshots/sp-sign-init_validator/00011.png b/tests_zemu/snapshots/sp-sign-init_validator/00011.png deleted file mode 100644 index 99d93958..00000000 Binary files a/tests_zemu/snapshots/sp-sign-init_validator/00011.png and /dev/null differ diff --git a/tests_zemu/snapshots/sp-sign-init_validator/00012.png b/tests_zemu/snapshots/sp-sign-init_validator/00012.png deleted file mode 100644 index 2f448f6c..00000000 Binary files a/tests_zemu/snapshots/sp-sign-init_validator/00012.png and /dev/null differ diff --git a/tests_zemu/snapshots/sp-sign-init_validator/00013.png b/tests_zemu/snapshots/sp-sign-init_validator/00013.png deleted file mode 100644 index 8b7fd56b..00000000 Binary files a/tests_zemu/snapshots/sp-sign-init_validator/00013.png and /dev/null differ diff --git a/tests_zemu/snapshots/sp-sign-init_validator/00014.png b/tests_zemu/snapshots/sp-sign-init_validator/00014.png deleted file mode 100644 index 9eb73546..00000000 Binary files a/tests_zemu/snapshots/sp-sign-init_validator/00014.png and /dev/null differ diff --git a/tests_zemu/snapshots/sp-sign-init_validator/00015.png b/tests_zemu/snapshots/sp-sign-init_validator/00015.png deleted file mode 100644 index 9160fc91..00000000 Binary files a/tests_zemu/snapshots/sp-sign-init_validator/00015.png and /dev/null differ diff --git a/tests_zemu/snapshots/sp-sign-init_validator/00016.png b/tests_zemu/snapshots/sp-sign-init_validator/00016.png deleted file mode 100644 index f79b80c7..00000000 Binary files a/tests_zemu/snapshots/sp-sign-init_validator/00016.png and /dev/null differ diff --git a/tests_zemu/snapshots/sp-sign-init_validator/00017.png b/tests_zemu/snapshots/sp-sign-init_validator/00017.png deleted file mode 100644 index 1e4be699..00000000 Binary files a/tests_zemu/snapshots/sp-sign-init_validator/00017.png and /dev/null differ diff --git a/tests_zemu/snapshots/sp-sign-init_validator/00018.png b/tests_zemu/snapshots/sp-sign-init_validator/00018.png deleted file mode 100644 index 7e7f71bd..00000000 Binary files a/tests_zemu/snapshots/sp-sign-init_validator/00018.png and /dev/null differ diff --git a/tests_zemu/snapshots/sp-sign-init_validator/00019.png b/tests_zemu/snapshots/sp-sign-init_validator/00019.png deleted file mode 100644 index f79b80c7..00000000 Binary files a/tests_zemu/snapshots/sp-sign-init_validator/00019.png and /dev/null differ diff --git a/tests_zemu/snapshots/sp-sign-init_validator/00020.png b/tests_zemu/snapshots/sp-sign-init_validator/00020.png deleted file mode 100644 index 1e4be699..00000000 Binary files a/tests_zemu/snapshots/sp-sign-init_validator/00020.png and /dev/null differ diff --git a/tests_zemu/snapshots/sp-sign-init_validator/00021.png b/tests_zemu/snapshots/sp-sign-init_validator/00021.png deleted file mode 100644 index 8d9abd01..00000000 Binary files a/tests_zemu/snapshots/sp-sign-init_validator/00021.png and /dev/null differ diff --git a/tests_zemu/snapshots/sp-sign-init_validator/00022.png b/tests_zemu/snapshots/sp-sign-init_validator/00022.png deleted file mode 100644 index 1e4be699..00000000 Binary files a/tests_zemu/snapshots/sp-sign-init_validator/00022.png and /dev/null differ diff --git a/tests_zemu/snapshots/sp-sign-init_validator/00023.png b/tests_zemu/snapshots/sp-sign-init_validator/00023.png deleted file mode 100644 index 8d9abd01..00000000 Binary files a/tests_zemu/snapshots/sp-sign-init_validator/00023.png and /dev/null differ diff --git a/tests_zemu/snapshots/st-mainmenu/00001.png b/tests_zemu/snapshots/st-mainmenu/00001.png index 92f14394..6d966217 100644 Binary files a/tests_zemu/snapshots/st-mainmenu/00001.png and b/tests_zemu/snapshots/st-mainmenu/00001.png differ diff --git a/tests_zemu/snapshots/st-sign-init_validator/00000.png b/tests_zemu/snapshots/st-sign-init_validator/00000.png deleted file mode 100644 index f6907fb5..00000000 Binary files a/tests_zemu/snapshots/st-sign-init_validator/00000.png and /dev/null differ diff --git a/tests_zemu/snapshots/st-sign-init_validator/00001.png b/tests_zemu/snapshots/st-sign-init_validator/00001.png deleted file mode 100644 index f89c155f..00000000 Binary files a/tests_zemu/snapshots/st-sign-init_validator/00001.png and /dev/null differ diff --git a/tests_zemu/snapshots/st-sign-init_validator/00002.png b/tests_zemu/snapshots/st-sign-init_validator/00002.png deleted file mode 100644 index 61f40639..00000000 Binary files a/tests_zemu/snapshots/st-sign-init_validator/00002.png and /dev/null differ diff --git a/tests_zemu/snapshots/st-sign-init_validator/00003.png b/tests_zemu/snapshots/st-sign-init_validator/00003.png deleted file mode 100644 index bbe48384..00000000 Binary files a/tests_zemu/snapshots/st-sign-init_validator/00003.png and /dev/null differ diff --git a/tests_zemu/snapshots/st-sign-init_validator/00004.png b/tests_zemu/snapshots/st-sign-init_validator/00004.png deleted file mode 100644 index 216be0a2..00000000 Binary files a/tests_zemu/snapshots/st-sign-init_validator/00004.png and /dev/null differ diff --git a/tests_zemu/snapshots/st-sign-init_validator/00005.png b/tests_zemu/snapshots/st-sign-init_validator/00005.png deleted file mode 100644 index 5ed0df99..00000000 Binary files a/tests_zemu/snapshots/st-sign-init_validator/00005.png and /dev/null differ diff --git a/tests_zemu/snapshots/st-sign-init_validator/00006.png b/tests_zemu/snapshots/st-sign-init_validator/00006.png deleted file mode 100644 index 9b66a37a..00000000 Binary files a/tests_zemu/snapshots/st-sign-init_validator/00006.png and /dev/null differ diff --git a/tests_zemu/snapshots/st-sign-init_validator/00007.png b/tests_zemu/snapshots/st-sign-init_validator/00007.png deleted file mode 100644 index 84110ba2..00000000 Binary files a/tests_zemu/snapshots/st-sign-init_validator/00007.png and /dev/null differ diff --git a/tests_zemu/snapshots/st-sign-init_validator/00008.png b/tests_zemu/snapshots/st-sign-init_validator/00008.png deleted file mode 100644 index ce7389e2..00000000 Binary files a/tests_zemu/snapshots/st-sign-init_validator/00008.png and /dev/null differ diff --git a/tests_zemu/snapshots/x-mainmenu/00004.png b/tests_zemu/snapshots/x-mainmenu/00004.png index 83c56bd0..0dfb566a 100644 Binary files a/tests_zemu/snapshots/x-mainmenu/00004.png and b/tests_zemu/snapshots/x-mainmenu/00004.png differ diff --git a/tests_zemu/snapshots/x-mainmenu/00010.png b/tests_zemu/snapshots/x-mainmenu/00010.png index 83c56bd0..0dfb566a 100644 Binary files a/tests_zemu/snapshots/x-mainmenu/00010.png and b/tests_zemu/snapshots/x-mainmenu/00010.png differ diff --git a/tests_zemu/snapshots/x-sign-init_validator/00000.png b/tests_zemu/snapshots/x-sign-init_validator/00000.png deleted file mode 100644 index ca62a34a..00000000 Binary files a/tests_zemu/snapshots/x-sign-init_validator/00000.png and /dev/null differ diff --git a/tests_zemu/snapshots/x-sign-init_validator/00001.png b/tests_zemu/snapshots/x-sign-init_validator/00001.png deleted file mode 100644 index bf1301d9..00000000 Binary files a/tests_zemu/snapshots/x-sign-init_validator/00001.png and /dev/null differ diff --git a/tests_zemu/snapshots/x-sign-init_validator/00002.png b/tests_zemu/snapshots/x-sign-init_validator/00002.png deleted file mode 100644 index 7ef6b90f..00000000 Binary files a/tests_zemu/snapshots/x-sign-init_validator/00002.png and /dev/null differ diff --git a/tests_zemu/snapshots/x-sign-init_validator/00003.png b/tests_zemu/snapshots/x-sign-init_validator/00003.png deleted file mode 100644 index 950efbdf..00000000 Binary files a/tests_zemu/snapshots/x-sign-init_validator/00003.png and /dev/null differ diff --git a/tests_zemu/snapshots/x-sign-init_validator/00004.png b/tests_zemu/snapshots/x-sign-init_validator/00004.png deleted file mode 100644 index 791bb362..00000000 Binary files a/tests_zemu/snapshots/x-sign-init_validator/00004.png and /dev/null differ diff --git a/tests_zemu/snapshots/x-sign-init_validator/00005.png b/tests_zemu/snapshots/x-sign-init_validator/00005.png deleted file mode 100644 index bd7187f8..00000000 Binary files a/tests_zemu/snapshots/x-sign-init_validator/00005.png and /dev/null differ diff --git a/tests_zemu/snapshots/x-sign-init_validator/00006.png b/tests_zemu/snapshots/x-sign-init_validator/00006.png deleted file mode 100644 index 8b043438..00000000 Binary files a/tests_zemu/snapshots/x-sign-init_validator/00006.png and /dev/null differ diff --git a/tests_zemu/snapshots/x-sign-init_validator/00007.png b/tests_zemu/snapshots/x-sign-init_validator/00007.png deleted file mode 100644 index 35c050e1..00000000 Binary files a/tests_zemu/snapshots/x-sign-init_validator/00007.png and /dev/null differ diff --git a/tests_zemu/snapshots/x-sign-init_validator/00008.png b/tests_zemu/snapshots/x-sign-init_validator/00008.png deleted file mode 100644 index 215cd541..00000000 Binary files a/tests_zemu/snapshots/x-sign-init_validator/00008.png and /dev/null differ diff --git a/tests_zemu/snapshots/x-sign-init_validator/00009.png b/tests_zemu/snapshots/x-sign-init_validator/00009.png deleted file mode 100644 index 629ef11e..00000000 Binary files a/tests_zemu/snapshots/x-sign-init_validator/00009.png and /dev/null differ diff --git a/tests_zemu/snapshots/x-sign-init_validator/00010.png b/tests_zemu/snapshots/x-sign-init_validator/00010.png deleted file mode 100644 index d78b8464..00000000 Binary files a/tests_zemu/snapshots/x-sign-init_validator/00010.png and /dev/null differ diff --git a/tests_zemu/snapshots/x-sign-init_validator/00011.png b/tests_zemu/snapshots/x-sign-init_validator/00011.png deleted file mode 100644 index 99d93958..00000000 Binary files a/tests_zemu/snapshots/x-sign-init_validator/00011.png and /dev/null differ diff --git a/tests_zemu/snapshots/x-sign-init_validator/00012.png b/tests_zemu/snapshots/x-sign-init_validator/00012.png deleted file mode 100644 index 2f448f6c..00000000 Binary files a/tests_zemu/snapshots/x-sign-init_validator/00012.png and /dev/null differ diff --git a/tests_zemu/snapshots/x-sign-init_validator/00013.png b/tests_zemu/snapshots/x-sign-init_validator/00013.png deleted file mode 100644 index 8b7fd56b..00000000 Binary files a/tests_zemu/snapshots/x-sign-init_validator/00013.png and /dev/null differ diff --git a/tests_zemu/snapshots/x-sign-init_validator/00014.png b/tests_zemu/snapshots/x-sign-init_validator/00014.png deleted file mode 100644 index 9eb73546..00000000 Binary files a/tests_zemu/snapshots/x-sign-init_validator/00014.png and /dev/null differ diff --git a/tests_zemu/snapshots/x-sign-init_validator/00015.png b/tests_zemu/snapshots/x-sign-init_validator/00015.png deleted file mode 100644 index 9160fc91..00000000 Binary files a/tests_zemu/snapshots/x-sign-init_validator/00015.png and /dev/null differ diff --git a/tests_zemu/snapshots/x-sign-init_validator/00016.png b/tests_zemu/snapshots/x-sign-init_validator/00016.png deleted file mode 100644 index f79b80c7..00000000 Binary files a/tests_zemu/snapshots/x-sign-init_validator/00016.png and /dev/null differ diff --git a/tests_zemu/snapshots/x-sign-init_validator/00017.png b/tests_zemu/snapshots/x-sign-init_validator/00017.png deleted file mode 100644 index 1e4be699..00000000 Binary files a/tests_zemu/snapshots/x-sign-init_validator/00017.png and /dev/null differ diff --git a/tests_zemu/snapshots/x-sign-init_validator/00018.png b/tests_zemu/snapshots/x-sign-init_validator/00018.png deleted file mode 100644 index 7e7f71bd..00000000 Binary files a/tests_zemu/snapshots/x-sign-init_validator/00018.png and /dev/null differ diff --git a/tests_zemu/snapshots/x-sign-init_validator/00019.png b/tests_zemu/snapshots/x-sign-init_validator/00019.png deleted file mode 100644 index f79b80c7..00000000 Binary files a/tests_zemu/snapshots/x-sign-init_validator/00019.png and /dev/null differ diff --git a/tests_zemu/snapshots/x-sign-init_validator/00020.png b/tests_zemu/snapshots/x-sign-init_validator/00020.png deleted file mode 100644 index 1e4be699..00000000 Binary files a/tests_zemu/snapshots/x-sign-init_validator/00020.png and /dev/null differ diff --git a/tests_zemu/snapshots/x-sign-init_validator/00021.png b/tests_zemu/snapshots/x-sign-init_validator/00021.png deleted file mode 100644 index 8d9abd01..00000000 Binary files a/tests_zemu/snapshots/x-sign-init_validator/00021.png and /dev/null differ diff --git a/tests_zemu/snapshots/x-sign-init_validator/00022.png b/tests_zemu/snapshots/x-sign-init_validator/00022.png deleted file mode 100644 index 1e4be699..00000000 Binary files a/tests_zemu/snapshots/x-sign-init_validator/00022.png and /dev/null differ diff --git a/tests_zemu/snapshots/x-sign-init_validator/00023.png b/tests_zemu/snapshots/x-sign-init_validator/00023.png deleted file mode 100644 index 8d9abd01..00000000 Binary files a/tests_zemu/snapshots/x-sign-init_validator/00023.png and /dev/null differ diff --git a/tests_zemu/tests/transactions.test.ts b/tests_zemu/tests/transactions.test.ts index aa9de01f..4279a016 100644 --- a/tests_zemu/tests/transactions.test.ts +++ b/tests_zemu/tests/transactions.test.ts @@ -82,17 +82,6 @@ const TEST_DATA = [ 0xff: Buffer.from('039a4d90beb2ead23ef48cecc0039104f865dd3c6c89ee12b90defbe8205c319', 'hex'), } as { [index: number]: Buffer }, }, - { - name: 'init_validator', - blob: Buffer.from('1d0000006c6f63616c6e65742e6664633665356661643365356535326433662d300023000000323032332d31312d31365431343a33333a31302e3636383135373431372b30303a3030b22ee9c99e4872bab5ba08de9ca303e91752467dfff0f9c553e48fd59710dd25f19e162831bc6d5727ccc116dffc00e7a8a63e70c7b839a8d8c88c411bf7cc470101000000000000000000000000000000000000000000000000000000000000000032fdd4e57f56519541491312d4e9089032244eca0048998ffa0340c473b72dad3604abd76581e71e4a334d0708ef754a0adcec66d81500000000000000a8610000000000000003000000010cd78cd88b0100000053e9023f2edc55e90bdcf6024760140a91a7904cb4a529cb1707ea3d34ee685a010c00000076705f757365722e7761736d020cd78cd88b01000000aa3b3dd227cd3199b3cef164b679fc62a4e6531ffce547eadb766c050d5fabfd011600000074785f696e69745f76616c696461746f722e7761736d000cd78cd88b0100001a010000010000000048998ffa0340c473b72dad3604abd76581e71e4a334d0708ef754a0adcec66d80100b8a1bde0e03a61c147c6f1213e0951e8947c3eabc7a81940bdb9a46da2575df1034f85391fb1d43071b7e020c2709923df792661f6436f0ee88790dd5564238fdf02ea1b59f3111bac9ec7715f569299bfd384d701d405734d7a7514df86bf5e993500bfce4de74239e46afaec08bbd6157d082a21554220a1d9e3a470d7a346aa7d5a00743ba40b00000000000000000000000000000000000000000000000000000000e40b5402000000000000000000000000000000000000000000000000000000090000006d65406d652e636f6d000000832542bf65dcc5e4846a4e9e539946ce7c81f566337c25bb4adb33c0ee16dcbe', 'hex'), - sectionHashes: { - 0: Buffer.from('1d050abff007fa2a0d4b9d133f65f6dd6c5a8334ea927a666581265267a436ce', 'hex'), - 1: Buffer.from('832542bf65dcc5e4846a4e9e539946ce7c81f566337c25bb4adb33c0ee16dcbe', 'hex'), - 2: Buffer.from('b22ee9c99e4872bab5ba08de9ca303e91752467dfff0f9c553e48fd59710dd25', 'hex'), - 3: Buffer.from('f19e162831bc6d5727ccc116dffc00e7a8a63e70c7b839a8d8c88c411bf7cc47', 'hex'), - 0xff: Buffer.from('777d23250a5436e408a1843f14477b1219bb2db05f5ec439badcfb4f6a70448b', 'hex'), - } as { [index: number]: Buffer }, - }, { name: 'update_vp', blob: Buffer.from('1d0000006c6f63616c6e65742e6664633665356661643365356535326433662d300023000000323032332d31312d31365431343a33333a30352e3139313137373835302b30303a30305df9287d1f3b893eef4643c47a4d40a8838c9fc6a39bbda275e20c308f6bb0a290f781fd267026dfd1335d092f0a46d9cf00b8816c5997e55eaf88e0e5cbf3dc0101000000000000000000000000000000000000000000000000000000000000000032fdd4e57f56519541491312d4e9089032244eca009fd0df101ba3e91d24f555893ae1bf0b271bd98363d6d4c659876731fe4a75171400000000000000a861000000000000000500000001d2c18cd88b0100000053e9023f2edc55e90bdcf6024760140a91a7904cb4a529cb1707ea3d34ee685a010c00000076705f757365722e7761736d02d3c18cd88b0100000049a9b2023b4858255845bfa3949e314f241858949214950471b0b598febd7248011600000074785f7570646174655f6163636f756e742e7761736d00d3c18cd88b0100009f00000000ba4c9645a23343896227110a902af84e7b4a4bb301a911dbc336d7feab85e374e331542d94155fe25219bad6d7f497a2e5d9d6a41703000000009fd0df101ba3e91d24f555893ae1bf0b271bd98363d6d4c659876731fe4a75170048998ffa0340c473b72dad3604abd76581e71e4a334d0708ef754a0adcec66d80075c251407a7ed91b8114f90b6f454db9071a290458e2db36106b99daf4bf83b101020301000000ae19fb14011c761f61ea480a4d9fffd1abb049be4715f5344d6f60093470c0800000ba4c9645a23343896227110a902af84e7b4a4bb30100000000000d1cfc74bd04c329f14c466b7b17ac72b00818db85bb1069415a898bfa95cd21ae416cfc38e190ff2a631f1f9dd700556d5ad25eef92a5f5dffa5af3a723390c03050000009ac0dfc46072a5736aa2257015d54ecb5490f6811bf9ffee38662c38cecb1ea8a911dbc336d7feab85e374e331542d94155fe25219bad6d7f497a2e5d9d6a4175df9287d1f3b893eef4643c47a4d40a8838c9fc6a39bbda275e20c308f6bb0a290f781fd267026dfd1335d092f0a46d9cf00b8816c5997e55eaf88e0e5cbf3dc66f097755345c31d1ccf8b764bbbd8ff8b8496f7ac88a32f4967b98138b642aa0101000000009fd0df101ba3e91d24f555893ae1bf0b271bd98363d6d4c659876731fe4a7517010000000000e7c0e073a254bccce92bb5d6b35da86f6ee1b300fa6d3f54d1414a06745a895d32d5b86fe029e0ab456d2ade56f79d066f3e9c6dd80088c9fdc6e00a4a472f0a', 'hex'),