> loading_
# Walkthrough: Verifying the cancel_stale_order auth fix and exploring the new p2p-proxy subcommand
# 1. Update your Tempo node binary to the latest release
# Make sure you're pulling in the fix from PR #3181
$ cargo build --release -p tempo
# 2. Verify the security fix is present — the cancel_stale_order
# extrinsic now checks recipient authority on the payout token.
# In your integration tests or a local dev chain, try cancelling
# a stale order where the caller is NOT the authorized recipient:
# // Pseudo-Rust test case (in your runtime integration test suite)
# #[test]
# fn cancel_stale_order_rejects_unauthorized_recipient() {
# // Setup: create an order with Alice as the payout recipient
# let order_id = create_test_order(alice_account, token_pair);
#
# // Fast-forward past the staleness threshold
# advance_blocks(STALE_THRESHOLD + 1);
#
# // Attempt cancellation from Bob (not the authorized recipient)
# assert_noop!(
# DexModule::cancel_stale_order(Origin::signed(bob_account), order_id),
# Error::<Runtime>::UnauthorizedRecipient // <-- This error is new
# );
# }
# 3. Try the new p2p-proxy subcommand
# This runs a P2P proxy directly from the Tempo binary:
$ ./target/release/tempo p2p-proxy --help
# Start a proxy pointing at your local or testnet node:
$ ./target/release/tempo p2p-proxy \
--listen-addr /ip4/0.0.0.0/tcp/30334 \
--bootstrap /dns/testnet-bootnode.tempo.xyz/tcp/30333/p2p/<PEER_ID>
# 4. Hardfork-gating awareness for dispatch_call precompile
# If you have Solidity contracts calling the dispatch_call precompile,
# test on a local dev chain BEFORE and AFTER the hardfork block:
# // Solidity snippet — calling dispatch_call precompile at 0x...
# (bool success, bytes memory result) = DISPATCH_PRECOMPILE.call(
# abi.encode(pallet_index, call_index, call_data)
# );
# // Before hardfork: this may revert for newly-gated calls
# // After hardfork: full dispatch surface is available
# require(success, "dispatch_call failed — check hardfork status");