Skip to content

Commit

Permalink
Don't return error with custom remainder address and ledger nano
Browse files Browse the repository at this point in the history
  • Loading branch information
Thoralf-M committed Sep 20, 2023
1 parent 64413fa commit d244b82
Show file tree
Hide file tree
Showing 11 changed files with 57 additions and 20 deletions.
2 changes: 1 addition & 1 deletion bindings/nodejs-old/examples/ledger_nano.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ require('dotenv').config({ path: path.resolve(__dirname, '.env') });
const { AccountManager, CoinType } = require('@iota/wallet');

// In this example we will create addresses with a ledger nano hardware wallet
// To use the ledger nano simulator clone https://github.com/iotaledger/ledger-shimmer-app, run `git submodule init && git submodule update --recursive`,
// To use the ledger nano simulator clone https://github.com/iotaledger/ledger-iota-app, run `git submodule init && git submodule update --recursive`,
// then `./build.sh -m nanos|nanox|nanosplus -s` and use `true` for `LedgerNano`.

async function run() {
Expand Down
10 changes: 10 additions & 0 deletions bindings/nodejs/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Security -->

## 1.0.12 - 2023-09-DD

### Changed

- Made `TransactionOptions.allowMicroAmount` optional;

### Fixed

- Don't error if custom remainder address is provided with ledger nano;

## 1.0.11 - 2023-09-14

### Fixed
Expand Down
2 changes: 1 addition & 1 deletion bindings/nodejs/examples/secret_manager/ledger-nano.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ require('dotenv').config({ path: '.env' });
// yarn run-example ./secret_manager/ledger-nano.ts

// In this example we will get the ledger status and generate an address
// To use the ledger nano simulator clone https://github.com/iotaledger/ledger-shimmer-app, run `git submodule init && git submodule update --recursive`,
// To use the ledger nano simulator clone https://github.com/iotaledger/ledger-iota-app, run `git submodule init && git submodule update --recursive`,
// then `./build.sh -m nanos|nanox|nanosplus -s` and use `true` in `LedgerSecretManager::new(true)`.
async function run() {
initLogger();
Expand Down
2 changes: 1 addition & 1 deletion bindings/nodejs/lib/types/wallet/transaction-options.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ export interface TransactionOptions {
/** Optional note, that is only stored locally. */
note?: string;
/** Whether to allow sending a micro amount. */
allowMicroAmount: boolean;
allowMicroAmount?: boolean;
}

/** The possible remainder value strategies. */
Expand Down
2 changes: 1 addition & 1 deletion bindings/python/examples/secret_manager/ledger_nano.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
load_dotenv()

# In this example we will get the ledger status and generate an address
# To use the ledger nano simulator clone https://github.com/iotaledger/ledger-shimmer-app, run `git submodule init && git submodule update --recursive`,
# To use the ledger nano simulator clone https://github.com/iotaledger/ledger-iota-app, run `git submodule init && git submodule update --recursive`,
# then `./build.sh -m nanos|nanox|nanosplus -s` and use `True` in
# `LedgerNanoSecretManager(True)`.

Expand Down
4 changes: 4 additions & 0 deletions sdk/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

- `migrate_db_chrysalis_to_stardust()` returns an error if no chrysalis data was found;

### Fixed

- Don't error if custom remainder address is provided with ledger nano;

## 1.0.3 - 2023-09-07

### Added
Expand Down
2 changes: 1 addition & 1 deletion sdk/examples/client/ledger_nano.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
//! In this example we will create testnet addresses with a simulated ledger nano hardware wallet.
//!
//! To use the ledger nano simulator, run the following commands:
//! 1. `clone https://github.com/iotaledger/ledger-shimmer-app`
//! 1. `clone https://github.com/iotaledger/ledger-iota-app`
//! 2. `cd ledger-shimmer-app`
//! 3. `git submodule init && git submodule update --recursive`
//! 4. `./build.sh -m nanos|nanox|nanosplus -s`
Expand Down
2 changes: 1 addition & 1 deletion sdk/examples/client/ledger_nano_transaction.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
//! In this example we will create a testnet transaction with a simulated ledger nano hardware wallet.
//!
//! To use the ledger nano simulator, run the following commands:
//! 1. `clone https://github.com/iotaledger/ledger-shimmer-app`
//! 1. `clone https://github.com/iotaledger/ledger-iota-app`
//! 2. `cd ledger-shimmer-app`
//! 3. `git submodule init && git submodule update --recursive`
//! 4. `./build.sh -m nanos|nanox|nanosplus -s`
Expand Down
2 changes: 1 addition & 1 deletion sdk/examples/wallet/ledger_nano.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
//! In this example we will create addresses with a ledger nano hardware wallet.
//!
//! To use the ledger nano simulator
//! * clone https://github.com/iotaledger/ledger-shimmer-app,
//! * clone https://github.com/iotaledger/ledger-iota-app,
//! * run `git submodule init && git submodule update --recursive`,
//! * run `./build.sh -m nanos|nanox|nanosplus -s`, and
//! * use `true` in `LedgerSecretManager::new(true)`.
Expand Down
23 changes: 21 additions & 2 deletions sdk/src/client/api/block_builder/input_selection/core/remainder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,27 @@ use crate::{
impl InputSelection {
// Gets the remainder address from configuration of finds one from the inputs.
fn get_remainder_address(&self) -> Option<(Address, Option<Bip44>)> {
if self.remainder_address.is_some() {
return self.remainder_address.map(|address| (address, None));
if let Some(remainder_address) = self.remainder_address {
// Search in inputs for the Bip44 chain for the remainder address, so the ledger can regenerate it
#[cfg(feature = "ledger_nano")]
for input in self.available_inputs.iter().chain(self.selected_inputs.iter()) {
let alias_transition = is_alias_transition(
&input.output,
*input.output_id(),
self.outputs.as_slice(),
self.burn.as_ref(),
);
// PANIC: safe to unwrap as treasury outputs can't be used as input.
let required_address = input
.output
.required_and_unlocked_address(self.timestamp, input.output_id(), alias_transition)
.unwrap()
.0;
if remainder_address == required_address {
return Some((remainder_address, input.chain));
}
}
return Some((remainder_address, None));
}

for input in &self.selected_inputs {
Expand Down
26 changes: 15 additions & 11 deletions sdk/src/client/secret/ledger_nano.rs
Original file line number Diff line number Diff line change
Expand Up @@ -296,19 +296,23 @@ impl SecretManage for LedgerSecretManager {
} else {
// figure out the remainder address and bip32 index (if there is one)
let (remainder_address, remainder_bip32): (Option<&Address>, LedgerBIP32Index) =
match &prepared_transaction.remainder {
Some(a) => {
let chain = a.chain.ok_or(Error::MissingBip32Chain)?;
(
Some(&a.address),
LedgerBIP32Index {
bip32_change: chain.change.harden().into(),
bip32_index: chain.address_index.harden().into(),
prepared_transaction.remainder.as_ref().map_or_else(
|| (None, LedgerBIP32Index::default()),
|a| {
a.chain.map_or_else(
|| (None, LedgerBIP32Index::default()),
|chain| {
(
Some(&a.address),
LedgerBIP32Index {
bip32_change: chain.change.harden().into(),
bip32_index: chain.address_index.harden().into(),
},
)
},
)
}
None => (None, LedgerBIP32Index::default()),
};
},
);

let mut remainder_index = 0u16;
if let Some(remainder_address) = remainder_address {
Expand Down

0 comments on commit d244b82

Please sign in to comment.