Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

rusk-wallet: crash with confusing error message and stack trace when trying to shield part of public balance in profile 2 #3446

Open
hughsw opened this issue Jan 29, 2025 · 2 comments
Labels
fix:bug Something isn't working

Comments

@hughsw
Copy link

hughsw commented Jan 29, 2025

Describe the bug
Using cli rusk-wallet, trying to shield a small amount of Dusk, I get reproducible crash with a stack failure.

To Reproduce
All command line with rusk-wallet.

  • Create a wallet with one profile.
  • Transfer some Dusk into it.
  • Don't use the wallet for a couple of weeks.
  • Start it up.
  • Make a second profile.
  • Transfer some Dusk from first to second profile.
  • Start it up and use the second profile.
  • Try to shield some of the Dusk in the second profile.
  • Crash with error and stack trace. Rusk error occurred: 500 Internal Server Error: this transaction is invalid Value spent larger than account holds
  • Note that the balance is almost double the amount trying to be shielded, so error message is confusing.
  • Start it up again.
  • Notice that it always seems to say [Waiting for Sync to complete..] even after waiting 5 hours.
  • Try to shield some Dusk in the second profile.
  • Same crash with stack trace.

From the terminal:

...

Public Balance   - Total:     2.225

> What would you like to do? Convert Public Dusk to Shielded Dusk
> Introduce dusk amount for convert: 1.125 DUSK
> Introduce the gas limit for this transaction: 2000000000
> Introduce the gas price for this transaction: 1 LUX
Rusk error occurred: 500 Internal Server Error: this transaction is invalid Value spent larger than account holds

Stack backtrace:
   0: anyhow::error::<impl anyhow::Error>::msg
   1: rusk::node::vm::<impl node::vm::VMExecution for rusk::node::Rusk>::preverify
   2: rusk::http::chain::<impl rusk::node::RuskNode>::handle_preverify::{{closure}}
   3: rusk::http::chain::<impl rusk::http::HandleRequest for rusk::node::RuskNode>::handle_rues::{{closure}}
   4: <rusk::http::DataSources as rusk::http::HandleRequest>::handle_rues::{{closure}}
   5: rusk::http::handle_request_rues::{{closure}}
   6: <rusk::http::ExecutionService<H> as hyper::service::service::Service<http::request::Request<hyper::body::incoming::Incoming>>>::call::{{closure}}
   7: hyper::proto::h1::dispatch::Dispatcher<D,Bs,I,T>::poll_catch
   8: <hyper::server::conn::http1::UpgradeableConnection<I,S> as core::future::future::Future>::poll
   9: <hyper_util::server::conn::auto::UpgradeableConnection<I,S,E> as core::future::future::Future>::poll
  10: rusk::http::listening_loop::{{closure}}::{{closure}}
  11: tokio::runtime::task::core::Core<T,S>::poll
  12: tokio::runtime::task::harness::Harness<T,S>::poll
  13: tokio::runtime::scheduler::multi_thread::worker::Context::run_task
  14: tokio::runtime::scheduler::multi_thread::worker::Context::run
  15: tokio::runtime::context::runtime::enter_runtime
  16: tokio::runtime::scheduler::multi_thread::worker::run
  17: <tokio::runtime::blocking::task::BlockingTask<T> as core::future::future::Future>::poll
  18: tokio::runtime::task::core::Core<T,S>::poll
  19: tokio::runtime::task::harness::Harness<T,S>::poll
  20: tokio::runtime::blocking::pool::Inner::run
  21: std::sys_common::backtrace::__rust_begin_short_backtrace
  22: core::ops::function::FnOnce::call_once{{vtable.shim}}
  23: <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once
             at /rustc/0f44eb32f1123ac93ab404d74c295263ce468343/library/alloc/src/boxed.rs:2007:9
  24: <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once
             at /rustc/0f44eb32f1123ac93ab404d74c295263ce468343/library/alloc/src/boxed.rs:2007:9
  25: std::sys::unix::thread::Thread::new::thread_start
             at /rustc/0f44eb32f1123ac93ab404d74c295263ce468343/library/std/src/sys/unix/thread.rs:108:17
  26: <unknown>
  27: <unknown>

Expected behaviour
I would expect to be able to shield Dusk that shows in my public balance.
If the wallet knows it will be unable to complete the transaction, it should say what's wrong and how to fix it instead of crashing.

Platform
Fill as appropriate

  • Architecture: x64
  • OS: Linux
  • $ rusk-wallet --version rusk-wallet 0.1.0-rc.0

Additional context
The note from rusk-wallet about syncing is confusing. It let me do things, create a profile, and transfer Dusk between profiles... Not sure if that's a factor in the failure.

Update 1: See below that the failure occurs even after syncing is complete.

Update 2: See below: Now that I have been able to execute a shield transaction (after adding a further small amount to the public balance of profile 2), I'm guessing that there's a mismatch between various bits of logic that do checks prior to the transaction, and they somehow get tripped up on small balances...

@hughsw hughsw added the fix:bug Something isn't working label Jan 29, 2025
@hughsw
Copy link
Author

hughsw commented Jan 29, 2025

The rusk-wallet finally finished syncing (after about 6 hours). I restarted it and tried to shield some Dusk in profile 2. I get the same crash and stack trace.

@hughsw
Copy link
Author

hughsw commented Jan 29, 2025

By adding more Dusk to profile 2 I was able to shield as desired. The transaction used a fraction of a Dusk for gas, 0.025613175 DUSK. Not nearly enough to have drained the balance on the attempts that failed.

https://apps.dusk.network/explorer/transactions/transaction/?id=1c3dcd5cbd98329def267de0e245151aa7f21605e304baef44569523602c626f

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
fix:bug Something isn't working
Projects
None yet
Development

No branches or pull requests

1 participant