Skip to content

Commit

Permalink
Upgrade the app to work with Namada v0.36.1.
Browse files Browse the repository at this point in the history
  • Loading branch information
murisi committed May 23, 2024
1 parent 71e2c21 commit 1159143
Show file tree
Hide file tree
Showing 14 changed files with 79 additions and 49,002 deletions.
3 changes: 1 addition & 2 deletions app/src/parser_impl.c
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,7 @@ parser_error_t getNumItems(const parser_context_t *ctx, uint8_t *numItems) {
break;
}
case VoteProposal: {
const uint32_t delegations = ctx->tx_obj->voteProposal.number_of_delegations;
*numItems = (uint8_t) ((app_mode_expert() ? VOTE_PROPOSAL_EXPERT_PARAMS : VOTE_PROPOSAL_NORMAL_PARAMS) + delegations);
*numItems = (uint8_t) (app_mode_expert() ? VOTE_PROPOSAL_EXPERT_PARAMS : VOTE_PROPOSAL_NORMAL_PARAMS);
break;
}
case RevealPubkey:
Expand Down
40 changes: 20 additions & 20 deletions app/src/parser_impl_common.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,64 +25,64 @@ extern "C" {
#endif

#define BOND_NORMAL_PARAMS 3
#define BOND_EXPERT_PARAMS 8
#define BOND_EXPERT_PARAMS 7

#define CUSTOM_NORMAL_PARAMS 1
#define CUSTOM_EXPERT_PARAMS 6
#define CUSTOM_EXPERT_PARAMS 5

#define INIT_ACCOUNT_NORMAL_PARAMS 3
#define INIT_ACCOUNT_EXPERT_PARAMS 8
#define INIT_ACCOUNT_EXPERT_PARAMS 7

#define INIT_PROPOSAL_NORMAL_PARAMS 7
#define INIT_PROPOSAL_EXPERT_PARAMS 12
#define INIT_PROPOSAL_EXPERT_PARAMS 11

#define VOTE_PROPOSAL_NORMAL_PARAMS 4
#define VOTE_PROPOSAL_EXPERT_PARAMS 9
#define VOTE_PROPOSAL_EXPERT_PARAMS 8

#define BECOME_VALIDATOR_NORMAL_PARAMS 9
#define BECOME_VALIDATOR_EXPERT_PARAMS 14
#define BECOME_VALIDATOR_EXPERT_PARAMS 13

#define REVEAL_PUBKEY_NORMAL_PARAMS 2
#define REVEAL_PUBKEY_EXPERT_PARAMS 7
#define REVEAL_PUBKEY_EXPERT_PARAMS 6

#define TRANSFER_NORMAL_PARAMS 4
#define TRANSFER_EXPERT_PARAMS 9
#define TRANSFER_EXPERT_PARAMS 8

#define UPDATE_VP_NORMAL_PARAMS 2
#define UPDATE_VP_EXPERT_PARAMS 7
#define UPDATE_VP_EXPERT_PARAMS 6

#define WITHDRAW_NORMAL_PARAMS 2
#define WITHDRAW_EXPERT_PARAMS 7
#define WITHDRAW_EXPERT_PARAMS 6

#define COMMISSION_CHANGE_NORMAL_PARAMS 3
#define COMMISSION_CHANGE_EXPERT_PARAMS 8
#define COMMISSION_CHANGE_EXPERT_PARAMS 7

#define UNJAIL_VALIDATOR_NORMAL_PARAMS 2
#define UNJAIL_VALIDATOR_EXPERT_PARAMS 7
#define UNJAIL_VALIDATOR_EXPERT_PARAMS 6

#define IBC_NORMAL_PARAMS 8
#define IBC_EXPERT_PARAMS 13
#define IBC_EXPERT_PARAMS 12

#define REDELEGATE_NORMAL_PARAMS 5
#define REDELEGATE_EXPERT_PARAMS 10
#define REDELEGATE_EXPERT_PARAMS 9

#define CLAIM_REWARDS_NORMAL_PARAMS 2
#define CLAIM_REWARDS_EXPERT_PARAMS 7
#define CLAIM_REWARDS_EXPERT_PARAMS 6

#define RESIGN_STEWARD_NORMAL_PARAMS 2
#define RESIGN_STEWARD_EXPERT_PARAMS 7
#define RESIGN_STEWARD_EXPERT_PARAMS 6

#define CHANGE_CONSENSUS_KEY_NORMAL_PARAMS 3
#define CHANGE_CONSENSUS_KEY_EXPERT_PARAMS 8
#define CHANGE_CONSENSUS_KEY_EXPERT_PARAMS 7

#define UPDATE_STEWARD_COMMISSION_NORMAL_PARAMS 2
#define UPDATE_STEWARD_COMMISSION_EXPERT_PARAMS 7
#define UPDATE_STEWARD_COMMISSION_EXPERT_PARAMS 6

#define CHANGE_VALIDATOR_METADATA_NORMAL_PARAMS 2
#define CHANGE_VALIDATOR_METADATA_EXPERT_PARAMS 7
#define CHANGE_VALIDATOR_METADATA_EXPERT_PARAMS 6

#define BRIDGE_POOL_TRANSFER_NORMAL_PARAMS 9
#define BRIDGE_POOL_TRANSFER_EXPERT_PARAMS 14
#define BRIDGE_POOL_TRANSFER_EXPERT_PARAMS 13

#define CTX_CHECK_AVAIL(CTX, SIZE) \
if ( (CTX) == NULL || ((CTX)->offset + (SIZE)) > (CTX)->bufferLen) { return parser_unexpected_buffer_end; }
Expand Down
65 changes: 26 additions & 39 deletions app/src/parser_impl_txn.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,8 @@
#define DISCRIMINANT_EXTRA_DATA 0x01
#define DISCRIMINANT_CODE 0x02
#define DISCRIMINANT_SIGNATURE 0x03
#define DISCRIMINANT_CIPHERTEXT 0x04
#define DISCRIMINANT_MASP_TX 0x05
#define DISCRIMINANT_MASP_BUILDER 0x06
#define DISCRIMINANT_MASP_TX 0x04
#define DISCRIMINANT_MASP_BUILDER 0x05

// Update VP types
static const vp_types_t vp_user = { "vp_user.wasm", "User"};
Expand Down Expand Up @@ -419,15 +418,6 @@ static parser_error_t readVoteProposalTxn(const bytes_t *data, parser_tx_t *v) {
v->voteProposal.voter.len = ADDRESS_LEN_BYTES;
CHECK_ERROR(readBytes(&ctx, &v->voteProposal.voter.ptr, v->voteProposal.voter.len))

// Delegators
v->voteProposal.number_of_delegations = 0;
CHECK_ERROR(readUint32(&ctx, &v->voteProposal.number_of_delegations))
v->voteProposal.delegations.len = 0;
if (v->voteProposal.number_of_delegations > 0 ){
v->voteProposal.delegations.len = ADDRESS_LEN_BYTES*v->voteProposal.number_of_delegations;
CHECK_ERROR(readBytes(&ctx, &v->voteProposal.delegations.ptr, v->voteProposal.delegations.len))
}

if ((ctx.offset != ctx.bufferLen)) {
return parser_unexpected_characters;
}
Expand Down Expand Up @@ -574,18 +564,6 @@ static parser_error_t readTransferTxn(const bytes_t *data, parser_tx_t *v) {
// Amount denomination
CHECK_ERROR(readByte(&ctx, &v->transfer.amount_denom))

uint32_t tmpValue = 0;
// Key, check if it is there
CHECK_ERROR(readByte(&ctx, &v->transfer.has_key))
if (v->transfer.has_key){
CHECK_ERROR(readUint32(&ctx, &tmpValue));
if (tmpValue > UINT16_MAX) {
return parser_value_out_of_range;
}
v->transfer.key.len = (uint16_t)tmpValue;
// we are not displaying these bytes
ctx.offset += v->transfer.key.len;
}
// shielded hash, check if it is there
CHECK_ERROR(readByte(&ctx, &v->transfer.has_shielded_hash))
if (v->transfer.has_shielded_hash){
Expand Down Expand Up @@ -738,6 +716,20 @@ static parser_error_t readChangeValidatorMetadata(const bytes_t *data, tx_metada
CHECK_ERROR(readBytes(&ctx, &metadataChange->avatar.ptr, metadataChange->avatar.len))
}

/// The validator's name
metadataChange->name.ptr = NULL;
metadataChange->name.len = 0;
uint8_t has_name;
CHECK_ERROR(readByte(&ctx, &has_name))
if (has_name) {
CHECK_ERROR(readUint32(&ctx, &tmpValue));
if (tmpValue > UINT16_MAX) {
return parser_value_out_of_range;
}
metadataChange->name.len = (uint16_t)tmpValue;
CHECK_ERROR(readBytes(&ctx, &metadataChange->name.ptr, metadataChange->name.len))
}

// Commission rate
CHECK_ERROR(readByte(&ctx, &metadataChange->has_commission_rate))
if (metadataChange->has_commission_rate) {
Expand Down Expand Up @@ -932,6 +924,13 @@ parser_error_t readHeader(parser_context_t *ctx, parser_tx_t *v) {
v->transaction.timestamp.len = (uint16_t)tmpValue;
CHECK_ERROR(readBytes(ctx, &v->transaction.timestamp.ptr, v->transaction.timestamp.len))

// Batch length
CHECK_ERROR(readUint32(ctx, &v->transaction.header.batchLen))
// Only singleton batches are supported currently
if (v->transaction.header.batchLen != 1) {
return parser_unexpected_value;
}

// Code hash
v->transaction.header.codeHash.len = HASH_LEN;
CHECK_ERROR(readBytes(ctx, &v->transaction.header.codeHash.ptr, v->transaction.header.codeHash.len))
Expand All @@ -944,6 +943,9 @@ parser_error_t readHeader(parser_context_t *ctx, parser_tx_t *v) {
v->transaction.header.memoHash.len = HASH_LEN;
CHECK_ERROR(readBytes(ctx, &v->transaction.header.memoHash.ptr, v->transaction.header.memoHash.len))

// Atomic
CHECK_ERROR(readByte(ctx, &v->transaction.header.atomic))

v->transaction.header.bytes.len = ctx->offset - tmpOffset;

CHECK_ERROR(checkTag(ctx, 0x01))
Expand All @@ -968,20 +970,9 @@ parser_error_t readHeader(parser_context_t *ctx, parser_tx_t *v) {
v->transaction.header.pubkey.len = 1 + (pkType == key_ed25519 ? PK_LEN_25519 : COMPRESSED_SECP256K1_PK_LEN);
CHECK_ERROR(readBytes(ctx, &v->transaction.header.pubkey.ptr, v->transaction.header.pubkey.len))

// Epoch
CHECK_ERROR(readUint64(ctx, &v->transaction.header.epoch))
// GasLimit
CHECK_ERROR(readUint64(ctx, &v->transaction.header.gasLimit))


// Unshielded section hash
uint8_t has_unshield_section_hash = 0;
CHECK_ERROR(readByte(ctx, &has_unshield_section_hash))
if (has_unshield_section_hash){
v->transaction.header.unshieldSectionHash.len = HASH_LEN;
CHECK_ERROR(readBytes(ctx, &v->transaction.header.unshieldSectionHash.ptr, v->transaction.header.unshieldSectionHash.len))
}

v->transaction.header.extBytes.len = ctx->offset - tmpOffset;

return parser_ok;
Expand Down Expand Up @@ -1269,10 +1260,6 @@ parser_error_t readSections(parser_context_t *ctx, parser_tx_t *v) {
break;
}
#if(0)
case DISCRIMINANT_CIPHERTEXT:
CHECK_ERROR(readCiphertext(ctx, &v->transaction.sections.ciphertext))
break;

case DISCRIMINANT_MASP_TX:
CHECK_ERROR(readMaspTx(ctx, &v->transaction.sections.maspTx))
break;
Expand Down
14 changes: 4 additions & 10 deletions app/src/parser_print_common.c
Original file line number Diff line number Diff line change
Expand Up @@ -402,7 +402,7 @@ parser_error_t printExpert( const parser_context_t *ctx,
char *outVal, uint16_t outValLen,
uint8_t pageIdx, uint8_t *pageCount) {

if(displayIdx >= 5 && ctx->tx_obj->transaction.header.fees.symbol != NULL) {
if(displayIdx >= 4 && ctx->tx_obj->transaction.header.fees.symbol != NULL) {
displayIdx++;
}

Expand All @@ -418,20 +418,14 @@ parser_error_t printExpert( const parser_context_t *ctx,
CHECK_ERROR(printPublicKey(pubkey, outVal, outValLen, pageIdx, pageCount));
break;
}
case 2:
snprintf(outKey, outKeyLen, "Epoch");
if (uint64_to_str(outVal, outValLen, ctx->tx_obj->transaction.header.epoch) != NULL) {
return parser_unexpected_error;
}
break;
case 3: {
case 2: {
snprintf(outKey, outKeyLen, "Gas limit");
if (uint64_to_str(outVal, outValLen, ctx->tx_obj->transaction.header.gasLimit) != NULL) {
return parser_unexpected_error;
}
break;
}
case 4: {
case 3: {
if(ctx->tx_obj->transaction.header.fees.symbol != NULL) {
snprintf(outKey, outKeyLen, "Fees/gas unit");
CHECK_ERROR(printAmount(&ctx->tx_obj->transaction.header.fees.amount, true, ctx->tx_obj->transaction.header.fees.denom, "", outVal, outValLen, pageIdx, pageCount))
Expand All @@ -441,7 +435,7 @@ parser_error_t printExpert( const parser_context_t *ctx,
}
break;
}
case 5: {
case 4: {
snprintf(outKey, outKeyLen, "Fees/gas unit");
CHECK_ERROR(printAmount(&ctx->tx_obj->transaction.header.fees.amount, true, ctx->tx_obj->transaction.header.fees.denom, "", outVal, outValLen, pageIdx, pageCount))
break;
Expand Down
30 changes: 4 additions & 26 deletions app/src/parser_print_txn.c
Original file line number Diff line number Diff line change
Expand Up @@ -394,21 +394,11 @@ static parser_error_t printVoteProposalTxn( const parser_context_t *ctx,
uint8_t pageIdx, uint8_t *pageCount) {
tx_vote_proposal_t *voteProposal = &ctx->tx_obj->voteProposal;

const uint32_t delegations_num = voteProposal->number_of_delegations;
const uint8_t delegations_first_field_idx = 4;
uint8_t adjustedDisplayIdx = \
(displayIdx < delegations_first_field_idx) \
? displayIdx
: ((displayIdx < delegations_first_field_idx + delegations_num) \
? delegations_first_field_idx
: displayIdx - delegations_num + 1);
*pageCount = 1;

const bool hasMemo = ctx->tx_obj->transaction.header.memoSection != NULL;
if (adjustedDisplayIdx >= 5 && !hasMemo) {
adjustedDisplayIdx++;
if (displayIdx >= 4 && !hasMemo) {
displayIdx++;
}
switch (adjustedDisplayIdx) {
switch (displayIdx) {
case 0:
snprintf(outKey, outKeyLen, "Type");
snprintf(outVal, outValLen, "Vote Proposal");
Expand Down Expand Up @@ -450,26 +440,14 @@ static parser_error_t printVoteProposalTxn( const parser_context_t *ctx,
CHECK_ERROR(printAddress(voteProposal->voter, outVal, outValLen, pageIdx, pageCount))
break;
case 4:
if (voteProposal->number_of_delegations == 0) {
return parser_unexpected_value;
}
snprintf(outKey, outKeyLen, "Delegation");
if (displayIdx - adjustedDisplayIdx >= voteProposal->number_of_delegations) {
return parser_value_out_of_range;
}
const uint16_t delegationOffset = (displayIdx - adjustedDisplayIdx) * ADDRESS_LEN_BYTES;
const bytes_t tmpProposal = {.ptr = voteProposal->delegations.ptr + delegationOffset, .len = ADDRESS_LEN_BYTES};
CHECK_ERROR(printAddress(tmpProposal, outVal, outValLen, pageIdx, pageCount))
break;
case 5:
CHECK_ERROR(printMemo(ctx, outKey, outKeyLen, outVal, outValLen, pageIdx, pageCount))
break;

default:
if (!app_mode_expert()) {
return parser_display_idx_out_of_range;
}
displayIdx -= (5 + voteProposal->number_of_delegations - (hasMemo ? 0 : 1));
displayIdx -= 5;
return printExpert(ctx, displayIdx, outKey, outKeyLen, outVal, outValLen, pageIdx, pageCount);
}

Expand Down
4 changes: 2 additions & 2 deletions app/src/parser_txdef.h
Original file line number Diff line number Diff line change
Expand Up @@ -144,13 +144,13 @@ typedef struct {
bytes_t bytes;
fees_t fees;
bytes_t pubkey;
uint64_t epoch;
uint64_t gasLimit;
bytes_t unshieldSectionHash;
uint32_t batchLen;
bytes_t dataHash;
bytes_t codeHash;
bytes_t memoHash;
const section_t *memoSection;
uint8_t atomic;
} header_t;
typedef struct {
uint32_t sectionLen;
Expand Down
7 changes: 2 additions & 5 deletions app/src/parser_types.h
Original file line number Diff line number Diff line change
Expand Up @@ -173,9 +173,6 @@ typedef struct {
bytes_t eth_bridge_signature;
// proposal author address
bytes_t voter;
// Delegator addresses
uint32_t number_of_delegations;
bytes_t delegations;
} tx_vote_proposal_t;

typedef struct {
Expand Down Expand Up @@ -238,6 +235,7 @@ typedef struct {
bytes_t website;
bytes_t discord_handle;
bytes_t avatar;
bytes_t name;
} tx_become_validator_t;

typedef struct {
Expand All @@ -263,8 +261,6 @@ typedef struct {
bytes_t amount;
uint8_t amount_denom;
const char* symbol;
uint8_t has_key;
bytes_t key;
uint8_t has_shielded_hash;
bytes_t shielded_hash;
} tx_transfer_t;
Expand Down Expand Up @@ -317,6 +313,7 @@ typedef struct {
bytes_t discord_handle;
bytes_t avatar;
uint8_t has_commission_rate;
bytes_t name;
bytes_t commission_rate;
} tx_metadata_change_t;

Expand Down
14 changes: 14 additions & 0 deletions app/src/txn_validator.c
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,20 @@ parser_error_t readBecomeValidator(const bytes_t *data, const section_t *extra_d
CHECK_ERROR(readBytes(&ctx, &v->becomeValidator.avatar.ptr, v->becomeValidator.avatar.len))
}

/// The validator's name
v->becomeValidator.name.ptr = NULL;
v->becomeValidator.name.len = 0;
uint8_t has_name;
CHECK_ERROR(readByte(&ctx, &has_name))
if (has_name) {
CHECK_ERROR(readUint32(&ctx, &tmpValue));
if (tmpValue > UINT16_MAX) {
return parser_value_out_of_range;
}
v->becomeValidator.name.len = (uint16_t)tmpValue;
CHECK_ERROR(readBytes(&ctx, &v->becomeValidator.name.ptr, v->becomeValidator.name.len))
}

if (ctx.offset != ctx.bufferLen) {
return parser_unexpected_characters;
}
Expand Down
2 changes: 1 addition & 1 deletion deps/ledger-secure-sdk
Submodule ledger-secure-sdk updated 92 files
+303 −89 .github/workflows/build_all_apps.yml
+2 −2 .github/workflows/check_clang_static_analyzer.yml
+1 −1 Makefile.app_params
+45 −13 Makefile.defines
+4 −4 Makefile.glyphs
+1 −1 Makefile.rules
+6 −13 Makefile.standard_app
+0 −63 Makefile.target
+20 −24 README.md
+0 −8 include/app_config.h
+6 −7 include/cx_errors.h
+0 −7 include/cx_stubs.h
+1 −1 include/cx_trampoline.h
+3 −2 include/os_io.h
+0 −2 include/os_io_seproxyhal.h
+0 −4 include/os_print.h
+4 −4 lib_blewbxx_impl/src/ledger_ble.c
+0 −7 lib_cxng/cx.export
+0 −29 lib_cxng/include/lcx_crc.h
+0 −129 lib_cxng/include/lcx_eddsa.h
+0 −2 lib_cxng/src/cx_aes.c
+8 −1 lib_cxng/src/cx_crc.h
+0 −2 lib_cxng/src/cx_crc16.c
+1 −1 lib_cxng/src/cx_crc32.c
+229 −321 lib_cxng/src/cx_eddsa.c
+0 −7 lib_cxng/src/cx_exported_functions.c
+0 −2 lib_cxng/src/cx_hash.c
+0 −2 lib_cxng/src/cx_rng.c
+0 −2 lib_cxng/src/cx_sha256.c
+8 −15 lib_nbgl/doc/nbgl_use_case.dox
+2 −2 lib_nbgl/doc/nbgl_use_case_nanos.dox
+0 −1 lib_nbgl/fonts/config-Inter-Medium36-1bpp.ini
+0 −1 lib_nbgl/fonts/config-Inter-Medium36.ini
+0 −1 lib_nbgl/fonts/config-Inter-Regular28-1bpp.ini
+0 −1 lib_nbgl/fonts/config-Inter-Regular28.ini
+0 −1 lib_nbgl/fonts/config-Inter-SemiBold28-1bpp.ini
+0 −1 lib_nbgl/fonts/config-Inter-SemiBold28.ini
+3 −11 lib_nbgl/include/nbgl_content.h
+0 −1 lib_nbgl/include/nbgl_debug.h
+4 −4 lib_nbgl/include/nbgl_draw.h
+2 −3 lib_nbgl/include/nbgl_flow.h
+1 −1 lib_nbgl/include/nbgl_fonts.h
+50 −136 lib_nbgl/include/nbgl_layout.h
+8 −20 lib_nbgl/include/nbgl_obj.h
+5 −7 lib_nbgl/include/nbgl_page.h
+4 −8 lib_nbgl/include/nbgl_step.h
+4 −3 lib_nbgl/include/nbgl_types.h
+63 −117 lib_nbgl/include/nbgl_use_case.h
+10 −1 lib_nbgl/serialization/nbgl_lib.py
+12 −22 lib_nbgl/src/nbgl_draw.c
+9 −48 lib_nbgl/src/nbgl_flow.c
+25 −161 lib_nbgl/src/nbgl_fonts.c
+68 −134 lib_nbgl/src/nbgl_layout.c
+8 −7 lib_nbgl/src/nbgl_layout_internal.h
+246 −613 lib_nbgl/src/nbgl_layout_keyboard.c
+36 −286 lib_nbgl/src/nbgl_layout_keypad.c
+14 −26 lib_nbgl/src/nbgl_layout_keypad_nanos.c
+9 −43 lib_nbgl/src/nbgl_layout_nanos.c
+45 −34 lib_nbgl/src/nbgl_layout_navigation.c
+39 −120 lib_nbgl/src/nbgl_obj.c
+60 −47 lib_nbgl/src/nbgl_obj_keyboard.c
+8 −8 lib_nbgl/src/nbgl_obj_keypad.c
+0 −1 lib_nbgl/src/nbgl_obj_pool.c
+34 −35 lib_nbgl/src/nbgl_page.c
+4 −13 lib_nbgl/src/nbgl_screen.c
+10 −67 lib_nbgl/src/nbgl_step.c
+15 −67 lib_nbgl/src/nbgl_touch.c
+426 −747 lib_nbgl/src/nbgl_use_case.c
+23 −54 lib_nbgl/src/nbgl_use_case_nanos.c
+4 −4 lib_nbgl/tools/generate_ledgerimg.sh
+3 −8 lib_nbgl/tools/icon2glyph.py
+0 −17 lib_standard_app/io.c
+7 −7 lib_standard_app/io.h
+1 −1 lib_stusb_impl/u2f_impl.c
+8 −6 lib_stusb_impl/usbd_impl.c
+0 −71 lib_ux_sync/include/ux_sync.h
+0 −329 lib_ux_sync/src/ux_sync.c
+0 −1 qrcode/src/qrcodegen.c
+0 −8 src/app_metadata.c
+0 −7 src/cx_stubs.S
+0 −1 src/os.c
+1 −2 src/os_io_seproxyhal.c
+0 −1 src/os_io_task.c
+0 −1 src/os_printf.c
+3 −3 target/europa/include/bolos_target.h
+0 −0 target/europa/plugin_script.ld
+0 −1 target/europa/script.ld
+0 −1 target/nanos/script.ld
+0 −1 target/nanos2/script.ld
+0 −1 target/nanox/script.ld
+0 −1 target/stax/script.ld
+18 −12 tools/ttf2inc.py
2 changes: 1 addition & 1 deletion deps/ledger-zxlib
2 changes: 1 addition & 1 deletion deps/nanosplus-secure-sdk
2 changes: 1 addition & 1 deletion deps/nanox-secure-sdk
Loading

0 comments on commit 1159143

Please sign in to comment.