Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
7792fda
Fix address resolution for pending map lookups
sudo-shashank Mar 24, 2026
a6a4b89
Add test
sudo-shashank Mar 24, 2026
9101620
MaxNonceGap check
sudo-shashank Mar 24, 2026
701d468
Fix get_state_sequence to scan tipset messages
sudo-shashank Mar 24, 2026
c6f94eb
Fix delegated address signing in MpoolPushMessage
sudo-shashank Mar 24, 2026
66e0fa8
Impl per sender lock and nonce tracker
sudo-shashank Mar 25, 2026
f048bb5
Balance early check
sudo-shashank Mar 25, 2026
716c39b
Impl state nonce cache
sudo-shashank Mar 25, 2026
eca4e4b
Include nonce column in wallet list cmd
sudo-shashank Mar 25, 2026
53a5e8b
enable wallet test
sudo-shashank Mar 25, 2026
2d08e5b
Add nonce handling doc
sudo-shashank Mar 25, 2026
50af62b
lint fix
sudo-shashank Mar 25, 2026
2325d1f
Update changelog
sudo-shashank Mar 25, 2026
55d55b9
fix spellcheck error
sudo-shashank Mar 25, 2026
e25fabd
more lint fix
sudo-shashank Mar 25, 2026
0358f1f
minor corrections
sudo-shashank Mar 25, 2026
b5359fc
fmt
sudo-shashank Mar 25, 2026
4139058
Merge branch 'main' into shashank/revamp-mpool-nonce-calc
sudo-shashank Mar 25, 2026
08afa94
fix fallback
sudo-shashank Mar 25, 2026
de77141
Merge branch 'main' into shashank/revamp-mpool-nonce-calc
sudo-shashank Mar 25, 2026
5b3bf8b
Merge branch 'main' into shashank/revamp-mpool-nonce-calc
sudo-shashank Mar 30, 2026
ea8c94c
Merge branch 'main' into shashank/revamp-mpool-nonce-calc
sudo-shashank Mar 30, 2026
856be21
Merge branch 'main' into shashank/revamp-mpool-nonce-calc
sudo-shashank Mar 30, 2026
6369aed
Merge branch 'main' into shashank/revamp-mpool-nonce-calc
sudo-shashank Mar 31, 2026
a5f884a
refactor tests
sudo-shashank Mar 31, 2026
635a6bd
inline docs
sudo-shashank Mar 31, 2026
75eaf71
Merge branch 'main' into shashank/revamp-mpool-nonce-calc
sudo-shashank Mar 31, 2026
c27efaf
fix spellcheck
sudo-shashank Mar 31, 2026
94ad892
avoid nonce collision in CI
sudo-shashank Mar 31, 2026
8294ad5
set required fund for delegated wallet test
sudo-shashank Mar 31, 2026
98c2e07
fix
sudo-shashank Mar 31, 2026
eb773d1
Merge branch 'main' into shashank/revamp-mpool-nonce-calc
sudo-shashank Mar 31, 2026
490ddc1
fix addr resolution
sudo-shashank Mar 31, 2026
fa255e3
more fix
sudo-shashank Mar 31, 2026
b562bc8
Merge branch 'main' into shashank/revamp-mpool-nonce-calc
sudo-shashank Mar 31, 2026
126e297
minor corrections
sudo-shashank Mar 31, 2026
1e57f38
Merge branch 'main' into shashank/revamp-mpool-nonce-calc
sudo-shashank Mar 31, 2026
b50ae11
Merge branch 'main' into shashank/revamp-mpool-nonce-calc
sudo-shashank Apr 2, 2026
ad73d83
Merge branch 'main' into shashank/revamp-mpool-nonce-calc
sudo-shashank Apr 2, 2026
8465992
Merge branch 'main' into shashank/revamp-mpool-nonce-calc
sudo-shashank Apr 3, 2026
8e8f72d
Merge branch 'main' into shashank/revamp-mpool-nonce-calc
sudo-shashank Apr 6, 2026
5f5eb36
address comments
sudo-shashank Apr 6, 2026
af7b1d5
remove nonce persistence logic
sudo-shashank Apr 6, 2026
28a2068
add more test
sudo-shashank Apr 6, 2026
8bc95f4
increase delegated wallet fund for check
sudo-shashank Apr 6, 2026
e076276
Merge branch 'main' into shashank/revamp-mpool-nonce-calc
sudo-shashank Apr 6, 2026
d202570
Merge branch 'main' into shashank/revamp-mpool-nonce-calc
sudo-shashank Apr 6, 2026
ede1736
Merge branch 'main' into shashank/revamp-mpool-nonce-calc
sudo-shashank Apr 7, 2026
903907b
fix codeql error
sudo-shashank Apr 7, 2026
2923b6f
fmt
sudo-shashank Apr 7, 2026
127e560
Merge branch 'main' into shashank/revamp-mpool-nonce-calc
sudo-shashank Apr 8, 2026
8272bfc
update desc
sudo-shashank Apr 8, 2026
3369920
Merge branch 'main' into shashank/revamp-mpool-nonce-calc
sudo-shashank Apr 8, 2026
3780bd4
Merge branch 'main' into shashank/revamp-mpool-nonce-calc
sudo-shashank Apr 8, 2026
ac7e11d
bad merge
sudo-shashank Apr 9, 2026
ce3b308
use StrictnessPolicy instead of bool
sudo-shashank Apr 9, 2026
71da149
refactor
sudo-shashank Apr 9, 2026
969728c
Merge branch 'main' into shashank/revamp-mpool-nonce-calc
sudo-shashank Apr 9, 2026
0e9e629
fmt
sudo-shashank Apr 9, 2026
ce16746
Merge branch 'main' into shashank/revamp-mpool-nonce-calc
sudo-shashank Apr 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 8 additions & 2 deletions .github/workflows/forest.yml
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,9 @@ jobs:
run: ./scripts/tests/calibnet_migration_regression_tests.sh
timeout-minutes: ${{ fromJSON(env.SCRIPT_TIMEOUT_MINUTES) }}
calibnet-wallet-check:
concurrency:
group: calibnet-wallet-tests
cancel-in-progress: false
needs:
- build-ubuntu
name: Wallet tests
Expand All @@ -244,10 +247,12 @@ jobs:
fi
timeout-minutes: ${{ fromJSON(env.SCRIPT_TIMEOUT_MINUTES) }}
calibnet-delegated-wallet-check:
# Disabling this job until message pool nonce calculation is fixed. See: https://github.com/ChainSafe/forest/issues/4899
if: false
concurrency:
group: calibnet-wallet-tests
cancel-in-progress: false
needs:
- build-ubuntu
- calibnet-wallet-check
Comment thread
coderabbitai[bot] marked this conversation as resolved.
name: Delegated wallet tests
runs-on: ubuntu-24.04
steps:
Expand Down Expand Up @@ -629,6 +634,7 @@ jobs:
- calibnet-stateless-rpc-check
- state-migrations-check
- calibnet-wallet-check
- calibnet-delegated-wallet-check
- calibnet-no-discovery-checks
- calibnet-kademlia-checks
- calibnet-eth-mapping-check
Expand Down
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,8 @@

### Fixed

- [#6788](https://github.com/ChainSafe/forest/pull/6788): Fixed message pool nonce calculation to align with Lotus.
Comment thread
sudo-shashank marked this conversation as resolved.

- [#6707](https://github.com/ChainSafe/forest/issues/6707): Added missing `GoldenWeek` network upgrade entry in `Filecoin.StateGetNetworkParams` RPC method.

- [#6817](https://github.com/ChainSafe/forest/pull/6817): Fixed `StateSearchMsg` to return null instead of error when not found to match Lotus behaviour.
Expand Down
35 changes: 33 additions & 2 deletions scripts/tests/calibnet_delegated_wallet_check.sh
Comment thread
sudo-shashank marked this conversation as resolved.
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ FIL_AMT="500 atto FIL"
FIL_ZERO="0 FIL"

# The preloaded address
ADDR_ONE=$($FOREST_WALLET_PATH list | tail -1 | cut -d ' ' -f1)
ADDR_ONE=$($FOREST_WALLET_PATH list | tail -1 | cut -d ' ' -f2)

sleep 5s

Expand All @@ -30,7 +30,7 @@ $FOREST_WALLET_PATH export "$DELEGATE_ADDR_ONE" > delegated_wallet.key
$FOREST_WALLET_PATH --remote-wallet import delegated_wallet.key

# Fund delegated wallet from preloaded wallet
DELEGATE_FUND_AMT="2 micro FIL"
DELEGATE_FUND_AMT="3 micro FIL"
$FOREST_WALLET_PATH set-default "$ADDR_ONE"
MSG_DELEGATE_FUND=$($FOREST_WALLET_PATH send "$DELEGATE_ADDR_ONE" "$DELEGATE_FUND_AMT")
: "$MSG_DELEGATE_FUND"
Expand All @@ -43,6 +43,10 @@ while [[ $i != 20 && $DELEGATE_ADDR_ONE_BALANCE == "$FIL_ZERO" ]]; do
sleep 30s
DELEGATE_ADDR_ONE_BALANCE=$($FOREST_WALLET_PATH balance "$DELEGATE_ADDR_ONE" --exact-balance)
done
if [[ $DELEGATE_ADDR_ONE_BALANCE == "$FIL_ZERO" ]]; then
echo "Timed out waiting for $DELEGATE_ADDR_ONE balance to update after 20 retries"
exit 1
fi

echo "Creating delegated wallet DELEGATE_ADDR_TWO"
DELEGATE_ADDR_TWO=$($FOREST_WALLET_PATH new delegated)
Expand Down Expand Up @@ -71,6 +75,10 @@ while [[ $i != 20 && $DELEGATE_ADDR_TWO_BALANCE == "$FIL_ZERO" ]]; do
sleep 30s
DELEGATE_ADDR_TWO_BALANCE=$($FOREST_WALLET_PATH balance "$DELEGATE_ADDR_TWO" --exact-balance)
done
if [[ $DELEGATE_ADDR_TWO_BALANCE == "$FIL_ZERO" ]]; then
echo "Timed out waiting for $DELEGATE_ADDR_TWO balance to update after 20 retries"
exit 1
fi

DELEGATE_ADDR_THREE_BALANCE=$FIL_ZERO
i=0
Expand All @@ -80,6 +88,29 @@ while [[ $i != 20 && $DELEGATE_ADDR_THREE_BALANCE == "$FIL_ZERO" ]]; do
sleep 30s
DELEGATE_ADDR_THREE_BALANCE=$($FOREST_WALLET_PATH --remote-wallet balance "$DELEGATE_ADDR_THREE" --exact-balance)
done
if [[ $DELEGATE_ADDR_THREE_BALANCE == "$FIL_ZERO" ]]; then
echo "Timed out waiting for $DELEGATE_ADDR_THREE balance to update after 20 retries"
exit 1
fi

$FOREST_WALLET_PATH list
$FOREST_WALLET_PATH --remote-wallet list

MSG_DELEGATE_FOUR=$($FOREST_WALLET_PATH --remote-wallet send "$DELEGATE_ADDR_THREE" "$FIL_AMT")
: "$MSG_DELEGATE_FOUR"

DELEGATE_ADDR_REMOTE_THREE_BALANCE=$DELEGATE_ADDR_THREE_BALANCE
i=0
while [[ $i != 20 && $DELEGATE_ADDR_REMOTE_THREE_BALANCE == "$DELEGATE_ADDR_THREE_BALANCE" ]]; do
i=$((i+1))
: "Checking DELEGATE_ADDR_THREE balance $i/20"
sleep 30s
DELEGATE_ADDR_REMOTE_THREE_BALANCE=$($FOREST_WALLET_PATH --remote-wallet balance "$DELEGATE_ADDR_THREE" --exact-balance)
done
if [[ $DELEGATE_ADDR_REMOTE_THREE_BALANCE == "$DELEGATE_ADDR_THREE_BALANCE" ]]; then
echo "Timed out waiting for $DELEGATE_ADDR_THREE balance to update after 20 retries"
exit 1
fi

$FOREST_WALLET_PATH list
$FOREST_WALLET_PATH --remote-wallet list
Comment thread
sudo-shashank marked this conversation as resolved.
Expand Down
94 changes: 54 additions & 40 deletions scripts/tests/calibnet_wallet_check.sh
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ forest_wallet_init "$@"
# MARKET_FIL_AMT="23"
#
# # The preloaded address
# REMOTE_ADDR=$($FOREST_WALLET_PATH --remote-wallet list | tail -1 | cut -d ' ' -f1)
# REMOTE_ADDR=$($FOREST_WALLET_PATH --remote-wallet list | tail -1 | cut -d ' ' -f2)
#
# JSON=$(curl -s -X POST "$FOREST_URL" \
# --header 'Accept: application/json' \
Expand Down Expand Up @@ -73,7 +73,7 @@ FIL_AMT="500 atto FIL"
FIL_ZERO="0 FIL"

# The preloaded address
ADDR_ONE=$($FOREST_WALLET_PATH list | tail -1 | cut -d ' ' -f1)
ADDR_ONE=$($FOREST_WALLET_PATH list | tail -1 | cut -d ' ' -f2)

sleep 5s

Expand Down Expand Up @@ -124,11 +124,14 @@ ADDR_TWO_BALANCE=$FIL_ZERO
i=0
while [[ $i != 20 && $ADDR_TWO_BALANCE == "$FIL_ZERO" ]]; do
i=$((i+1))

: "Checking balance $i/20"
sleep 30s
ADDR_TWO_BALANCE=$($FOREST_WALLET_PATH balance "$ADDR_TWO" --exact-balance)
done
if [[ $ADDR_TWO_BALANCE == "$FIL_ZERO" ]]; then
echo "Timed out waiting for $ADDR_TWO balance to update after 20 retries"
exit 1
fi

ADDR_THREE_BALANCE=$FIL_ZERO
i=0
Expand All @@ -139,47 +142,58 @@ while [[ $i != 20 && $ADDR_THREE_BALANCE == "$FIL_ZERO" ]]; do
sleep 30s
ADDR_THREE_BALANCE=$($FOREST_WALLET_PATH --remote-wallet balance "$ADDR_THREE" --exact-balance)
done
if [[ $ADDR_THREE_BALANCE == "$FIL_ZERO" ]]; then
echo "Timed out waiting for $ADDR_THREE balance to update after 20 retries"
exit 1
fi

ETH_ADDR_TWO=$(curl -s -X POST "$FOREST_URL" \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer $ADMIN_TOKEN" \
--data "$(jq -n --arg addr "$ADDR_TWO" '{jsonrpc: "2.0", id: 1, method: "Filecoin.FilecoinAddressToEthAddress", params: [$addr, "pending"]}')" \
| jq -r '.result')
echo "ETH address: $ETH_ADDR_TWO"

ETH_ADDR_THREE=$(curl -s -X POST "$FOREST_URL" \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer $ADMIN_TOKEN" \
--data "$(jq -n --arg addr "$ADDR_THREE" '{jsonrpc: "2.0", id: 1, method: "Filecoin.FilecoinAddressToEthAddress", params: [$addr, "pending"]}')" \
| jq -r '.result')
echo "ETH address: $ETH_ADDR_THREE"

MSG_ETH=$($FOREST_WALLET_PATH send "$ETH_ADDR_TWO" "$FIL_AMT")
: "$MSG_ETH"

# Test commented out due to it being flaky. See the tracking issue: https://github.com/ChainSafe/forest/issues/4899
# ETH_ADDR_TWO=$(curl -s -X POST "$FOREST_URL" \
# -H 'Content-Type: application/json' \
# -H "Authorization: Bearer $ADMIN_TOKEN" \
# --data "$(jq -n --arg addr "$ADDR_TWO" '{jsonrpc: "2.0", id: 1, method: "Filecoin.FilecoinAddressToEthAddress", params: [$addr, "pending"]}')" \
# | jq -r '.result')
# echo "ETH address: $ETH_ADDR_TWO"

# ETH_ADDR_THREE=$(curl -s -X POST "$FOREST_URL" \
# -H 'Content-Type: application/json' \
# -H "Authorization: Bearer $ADMIN_TOKEN" \
# --data "$(jq -n --arg addr "$ADDR_THREE" '{jsonrpc: "2.0", id: 1, method: "Filecoin.FilecoinAddressToEthAddress", params: [$addr, "pending"]}')" \
# | jq -r '.result')
# echo "ETH address: $ETH_ADDR_THREE"

# MSG_ETH=$($FOREST_WALLET_PATH send "$ETH_ADDR_TWO" "$FIL_AMT")
# : "$MSG_ETH"

# MSG_ETH_REMOTE=$($FOREST_WALLET_PATH --remote-wallet send "$ETH_ADDR_THREE" "$FIL_AMT")
# : "$MSG_ETH_REMOTE"

# ETH_ADDR_TWO_BALANCE=$ADDR_TWO_BALANCE
# i=0
# while [[ $i != 20 && $ETH_ADDR_TWO_BALANCE == "$ADDR_TWO_BALANCE" ]]; do
# i=$((i+1))
MSG_ETH_REMOTE=$($FOREST_WALLET_PATH --remote-wallet send "$ETH_ADDR_THREE" "$FIL_AMT")
: "$MSG_ETH_REMOTE"

ETH_ADDR_TWO_BALANCE=$ADDR_TWO_BALANCE
i=0
while [[ $i != 20 && $ETH_ADDR_TWO_BALANCE == "$ADDR_TWO_BALANCE" ]]; do
i=$((i+1))

# : "Checking balance $i/20"
# sleep 30s
# ETH_ADDR_TWO_BALANCE=$($FOREST_WALLET_PATH balance "$ADDR_TWO" --exact-balance)
# done
: "Checking balance $i/20"
sleep 30s
ETH_ADDR_TWO_BALANCE=$($FOREST_WALLET_PATH balance "$ADDR_TWO" --exact-balance)
done
if [[ $ETH_ADDR_TWO_BALANCE == "$ADDR_TWO_BALANCE" ]]; then
echo "Timed out waiting for $ETH_ADDR_TWO balance to update after 20 retries"
exit 1
fi

# ETH_ADDR_THREE_BALANCE=$ADDR_THREE_BALANCE
# i=0
# while [[ $i != 20 && $ETH_ADDR_THREE_BALANCE == "$ADDR_THREE_BALANCE" ]]; do
# i=$((i+1))
ETH_ADDR_THREE_BALANCE=$ADDR_THREE_BALANCE
i=0
while [[ $i != 20 && $ETH_ADDR_THREE_BALANCE == "$ADDR_THREE_BALANCE" ]]; do
i=$((i+1))

# : "Checking balance $i/20"
# sleep 30s
# ETH_ADDR_THREE_BALANCE=$($FOREST_WALLET_PATH --remote-wallet balance "$ADDR_THREE" --exact-balance)
# done
: "Checking balance $i/20"
sleep 30s
ETH_ADDR_THREE_BALANCE=$($FOREST_WALLET_PATH --remote-wallet balance "$ADDR_THREE" --exact-balance)
done
Comment thread
sudo-shashank marked this conversation as resolved.
if [[ $ETH_ADDR_THREE_BALANCE == "$ADDR_THREE_BALANCE" ]]; then
echo "Timed out waiting for $ETH_ADDR_THREE balance to update after 20 retries"
exit 1
fi

# wallet list should contain address two with transferred FIL amount
$FOREST_WALLET_PATH list
Expand Down
6 changes: 5 additions & 1 deletion src/daemon/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ use crate::daemon::{
use crate::db::gc::SnapshotGarbageCollector;
use crate::db::ttl::EthMappingCollector;
use crate::libp2p::{Libp2pService, PeerManager};
use crate::message_pool::{MessagePool, MpoolConfig};
use crate::message_pool::{MessagePool, MpoolConfig, MpoolLocker, NonceTracker};
use crate::networks::{self, ChainConfig};
use crate::rpc::RPCState;
use crate::rpc::eth::filter::EthEventHandler;
Expand Down Expand Up @@ -399,6 +399,8 @@ fn maybe_start_rpc_service(
let tipset_send = chain_follower.tipset_sender.clone();
let keystore = ctx.keystore.clone();
let snapshot_progress_tracker = ctx.snapshot_progress_tracker.clone();
let nonce_tracker = NonceTracker::new();
let mpool_locker = MpoolLocker::new();
async move {
let rpc_listener = tokio::net::TcpListener::bind(rpc_address)
.await
Expand All @@ -419,6 +421,8 @@ fn maybe_start_rpc_service(
shutdown,
tipset_send,
snapshot_progress_tracker,
mpool_locker,
nonce_tracker,
},
rpc_listener,
rpc_stop_handle,
Expand Down
Loading
Loading