Skip to content

Add SIGNER_APPROVAL_THRESHOLD env var for lowering threshold on testnet #6375

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

Open
wants to merge 4 commits into
base: develop
Choose a base branch
from

Conversation

jferrant
Copy link
Contributor

Closes #6368

Originally did this as two configuration options. One in signer, one in node. but it ended up touching more than 40 diff files in a very janky way. Even this change required more modifications than I would like, but I think its better.

@jferrant jferrant requested review from kantai, obycode and wileyj August 12, 2025 21:45
@jferrant jferrant requested review from a team as code owners August 12, 2025 21:45
@wileyj
Copy link
Collaborator

wileyj commented Aug 14, 2025

testing a 3 miner/signer network with this env var set panics (see below).
the env var was set at 51, and the defined network mode was nakamoto-neon, but it appears that it assumed it was running as mainnet.

ERRO [2025-08-14 19:12:53] [stacks-node/src/main.rs:255] [p2p:(20444,20443)] Process abort due to thread panic: panicked at stacks-common/src/util/mod.rs:179:9:
Cannot use SIGNER_APPROVAL_THRESHOLD env variable with Mainnet.
ERRO [2025-08-14 19:12:53] [stacks-node/src/main.rs:257] [p2p:(20444,20443)] Panic backtrace:    0: stacks_node::main::{{closure}}
             at /code/stacks-core/stacks-node/src/main.rs:256:18
   1: <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call
             at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library/alloc/src/boxed.rs:1980:9
      std::panicking::rust_panic_with_hook
             at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library/std/src/panicking.rs:841:13
   2: std::panicking::begin_panic_handler::{{closure}}
             at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library/std/src/panicking.rs:699:13
   3: std::sys::backtrace::__rust_end_short_backtrace
             at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library/std/src/sys/backtrace.rs:168:18
   4: __rustc::rust_begin_unwind
             at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library/std/src/panicking.rs:697:5
   5: core::panicking::panic_fmt
             at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library/core/src/panicking.rs:75:14
   6: stacks_common::util::determine_signer_approval_threshold_percentage
   7: stacks_common::util::compute_voting_weight_threshold
             at /code/stacks-core/stacks-common/src/util/mod.rs:211:21
   8: blockstack_lib::chainstate::nakamoto::NakamotoBlockHeader::verify_signer_signatures
             at /code/stacks-core/stackslib/src/chainstate/nakamoto/mod.rs:897:34
   9: blockstack_lib::net::unsolicited::<impl blockstack_lib::net::p2p::PeerNetwork>::check_nakamoto_block_signer_signature
             at /code/stacks-core/stackslib/src/net/unsolicited.rs:828:47
      blockstack_lib::net::unsolicited::<impl blockstack_lib::net::p2p::PeerNetwork>::is_nakamoto_block_bufferable
             at /code/stacks-core/stackslib/src/net/unsolicited.rs:922:18
      blockstack_lib::net::unsolicited::<impl blockstack_lib::net::p2p::PeerNetwork>::inner_handle_unsolicited_NakamotoBlocksData
             at /code/stacks-core/stackslib/src/net/unsolicited.rs:956:21
      blockstack_lib::net::unsolicited::<impl blockstack_lib::net::p2p::PeerNetwork>::handle_unsolicited_NakamotoBlocksData
             at /code/stacks-core/stackslib/src/net/unsolicited.rs:992:14
      blockstack_lib::net::unsolicited::<impl blockstack_lib::net::p2p::PeerNetwork>::handle_unsolicited_sortition_message
             at /code/stacks-core/stackslib/src/net/unsolicited.rs:1077:26
  10: blockstack_lib::net::unsolicited::<impl blockstack_lib::net::p2p::PeerNetwork>::handle_unsolicited_sortition_messages::{{closure}}::{{closure}}
             at /code/stacks-core/stackslib/src/net/unsolicited.rs:1238:47
      alloc::vec::Vec<T,A>::retain::{{closure}}
             at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library/alloc/src/vec/mod.rs:2157:32
  11: alloc::vec::Vec<T,A>::retain_mut::process_loop
             at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library/alloc/src/vec/mod.rs:2243:21
      alloc::vec::Vec<T,A>::retain_mut
             at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library/alloc/src/vec/mod.rs:2269:9
  12: alloc::vec::Vec<T,A>::retain
             at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library/alloc/src/vec/mod.rs:2157:14
      blockstack_lib::net::unsolicited::<impl blockstack_lib::net::p2p::PeerNetwork>::handle_unsolicited_sortition_messages::{{closure}}
             at /code/stacks-core/stackslib/src/net/unsolicited.rs:1217:22
      hashbrown::map::HashMap<K,V,S,A>::retain
             at /rust/deps/hashbrown-0.15.4/src/map.rs:925:21
  13: std::collections::hash::map::HashMap<K,V,S>::retain
             at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library/std/src/collections/hash/map.rs:720:19
      blockstack_lib::net::unsolicited::<impl blockstack_lib::net::p2p::PeerNetwork>::handle_unsolicited_sortition_messages
             at /code/stacks-core/stackslib/src/net/unsolicited.rs:1215:21
      blockstack_lib::net::p2p::PeerNetwork::dispatch_network
             at /code/stacks-core/stackslib/src/net/p2p.rs:5075:39
  14: blockstack_lib::net::p2p::PeerNetwork::run
             at /code/stacks-core/stackslib/src/net/p2p.rs:5589:14
  15: stacks_node::nakamoto_node::peer::PeerThread::run_one_pass
             at /code/stacks-core/stacks-node/src/nakamoto_node/peer.rs:278:22
  16: stacks_node::nakamoto_node::peer::PeerThread::main
             at /code/stacks-core/stacks-node/src/nakamoto_node/peer.rs:112:22
  17: stacks_node::nakamoto_node::StacksNode::spawn::{{closure}}
             at /code/stacks-core/stacks-node/src/nakamoto_node.rs:279:28
      std::sys::backtrace::__rust_begin_short_backtrace
             at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library/std/src/sys/backtrace.rs:152:18
  18: std::thread::Builder::spawn_unchecked_::{{closure}}::{{closure}}
             at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library/std/src/thread/mod.rs:559:17
      <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once
             at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library/core/src/panic/unwind_safe.rs:272:9
      std::panicking::catch_unwind::do_call
             at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library/std/src/panicking.rs:589:40
      std::panicking::catch_unwind
             at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library/std/src/panicking.rs:552:19
      std::panic::catch_unwind
             at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library/std/src/panic.rs:359:14
      std::thread::Builder::spawn_unchecked_::{{closure}}
             at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library/std/src/thread/mod.rs:557:30
      core::ops::function::FnOnce::call_once{{vtable.shim}}
             at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library/core/src/ops/function.rs:250:5
  19: <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once
             at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library/alloc/src/boxed.rs:1966:9
      std::sys::pal::unix::thread::Thread::new::thread_start
             at /rustc/29483883eed69d5fb4db01964cdf2af4d86e9cb2/library/std/src/sys/pal/unix/thread.rs:107:17
  20: <unknown>
  21: __clone

Dumping core for pid 1

@wileyj
Copy link
Collaborator

wileyj commented Aug 14, 2025

https://github.com/stacks-network/stacks-core/pull/6375/files#diff-fa401a6f5cd0b77011fc893a6d4cdd2f9d5a69f83df307b0f28885aadbe09d5dR176-R195

i'm not sure here why mainnet is true. CHAIN_ID is also set to 0x80000000 which matches testnet

@jferrant
Copy link
Contributor Author

https://github.com/stacks-network/stacks-core/pull/6375/files#diff-fa401a6f5cd0b77011fc893a6d4cdd2f9d5a69f83df307b0f28885aadbe09d5dR176-R195

i'm not sure here why mainnet is true. CHAIN_ID is also set to 0x80000000 which matches testnet

Was an accidental != vs == I think. Hopefully that is the only spot. Give it a go now and let me know how it goes :D

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants