Skip to content

Commit b08d697

Browse files
committed
Merge tag 'v1.35.1' into streaming
# Conflicts: # CHANGELOG.md # build/openrpc/full.json # build/openrpc/gateway.json # build/openrpc/miner.json # build/openrpc/v0/gateway.json # build/openrpc/v2/full.json # build/openrpc/v2/gateway.json # build/openrpc/worker.json # build/version.go # documentation/en/cli-lotus-miner.md # documentation/en/cli-lotus-worker.md # documentation/en/cli-lotus.md
2 parents b6a66a7 + baaf988 commit b08d697

83 files changed

Lines changed: 4163 additions & 485 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CHANGELOG.md

Lines changed: 65 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,70 @@
99
1010
# UNRELEASED
1111

12+
## ☢️ Upgrade Warnings ☢️
13+
14+
## ⭐ New Features
15+
16+
## 🐛 Bug Fixes
17+
18+
## 👌 Improvements
19+
20+
# Node v1.35.1 / 2026-03-31
21+
22+
This is the stable release of Lotus node v1.35.1, a patch release that extends EC finality tooling into the v2 API, Eth RPC, and `lotus-shed`, improves Ethereum RPC and gas estimation behavior, lowers several CLI batch defaults to reduce out-of-gas failures, and raises the minimum supported Golang version to `1.25.0`. The final release also includes late backports for Ethereum RLP hardening, proof-parameter fetch robustness, indexed `StateSearchMsg` lookback handling, tightened Ethereum filter block-range enforcement, and null-round-aware EC finality chain walks.
23+
24+
## ☢️ Upgrade Warnings ☢️
25+
26+
- The minimum supported Golang version is now `1.25.0`. ([filecoin-project/lotus#13538](https://github.com/filecoin-project/lotus/pull/13538))
27+
28+
## ⭐ New Features
29+
30+
- feat(api): integrate [FRC-0089](https://github.com/filecoin-project/FIPs/blob/master/FRCs/frc-0089.md) EC finality calculator into v2 API and Eth RPC, so `"finalized"` and `"safe"` tags reflect actual chain health (~20-30 epochs) rather than worst-case static 900-epoch fallback. Adds `ChainGetTipSetFinalityStatus` v2 endpoint for finality diagnostics. ([filecoin-project/lotus#13547](https://github.com/filecoin-project/lotus/pull/13547))
31+
- feat(shed): add `lotus-shed finality-calculator` for EC finality probability computation per FRC-0089 ([filecoin-project/lotus#12093](https://github.com/filecoin-project/lotus/pull/12093))
32+
1233
## 🐛 Bug Fixes
1334

35+
- fix(rlp): modernize and harden Ethereum RLP decoding with tighter canonical-encoding validation, explicit nesting and input bounds, and expanded roundtrip coverage for transaction parsing ([filecoin-project/lotus#13555](https://github.com/filecoin-project/lotus/pull/13555))
36+
- fix(gateway): return `ErrFilterNotFound` instead of an empty result for unknown filter IDs in `EthGetFilterLogs` ([filecoin-project/lotus#13519](https://github.com/filecoin-project/lotus/pull/13519))
37+
- fix(eth): handle failed contract creates with nil result addresses in `trace_filter` ([filecoin-project/lotus#13549](https://github.com/filecoin-project/lotus/pull/13549))
38+
- fix(chainstore): remove expected CBOR decode warnings in `GetCMessage` for Ethereum-style transactions, reducing log spam on busy nodes ([filecoin-project/lotus#13524](https://github.com/filecoin-project/lotus/pull/13524))
39+
- fix(net): update FIL DevTTY WebTransport certhashes in the mainnet bootstrap list ([filecoin-project/lotus#13530](https://github.com/filecoin-project/lotus/pull/13530))
40+
- fix(gas): stricter bounds for `GasEstimateGasPremium` lookback ([filecoin-project/lotus#13556](https://github.com/filecoin-project/lotus/pull/13556))
41+
- fix: remove duplicate SQL statement entries from `preparedStatementMapping` ([filecoin-project/lotus#13545](https://github.com/filecoin-project/lotus/pull/13545))
42+
- fix(api): make `StateSearchMsg` respect `lookbackLimit` when returning indexed results ([filecoin-project/lotus#13562](https://github.com/filecoin-project/lotus/pull/13562))
43+
- fix(eth): tighten block range handling for `trace_filter` and `eth_getLogs`, including consistent `-32005` limit-exceeded errors and gateway range enforcement for `trace_filter` ([filecoin-project/lotus#13561](https://github.com/filecoin-project/lotus/pull/13561))
44+
- fix(ecfinality): account for null rounds in EC finality calculator chain walk, aligning with FRC-0089 theoretical model and fixing depth-to-height conversion ([filecoin-project/lotus#13565](https://github.com/filecoin-project/lotus/pull/13565))
45+
1446
## 👌 Improvements
1547

48+
- perf(MessagePool): cache `Pending()` snapshots to reduce repeated message pool reconstruction work ([filecoin-project/lotus#13542](https://github.com/filecoin-project/lotus/pull/13542))
49+
- chore(cli): lower default batch sizes for claim extension, deal settlement, and sector extension commands to reduce out-of-gas failures ([filecoin-project/lotus#13537](https://github.com/filecoin-project/lotus/pull/13537))
50+
- chore(paramfetch): bump `go-paramfetch` to `v0.0.5`, improving parameter downloads by rejecting unexpected HTTP responses and avoiding redundant concurrent fetches ([filecoin-project/lotus#13559](https://github.com/filecoin-project/lotus/pull/13559))
51+
- build(deps): bump `github.com/ipfs/boxo` to `0.37.0`, `github.com/drand/drand/v2` to `2.1.4`, `github.com/drand/kyber` to `1.3.2`, and `github.com/libp2p/go-libp2p-kad-dht` to `0.38.0` ([filecoin-project/lotus#13541](https://github.com/filecoin-project/lotus/pull/13541), [filecoin-project/lotus#13510](https://github.com/filecoin-project/lotus/pull/13510), [filecoin-project/lotus#13516](https://github.com/filecoin-project/lotus/pull/13516), [filecoin-project/lotus#13502](https://github.com/filecoin-project/lotus/pull/13502))
52+
53+
## 📝 Changelog
54+
55+
For the set of changes since the last stable release:
56+
57+
- Node: https://github.com/filecoin-project/lotus/compare/release/v1.35.0...release/v1.35.1
58+
59+
## 👨‍👩‍👧‍👦 Contributors
60+
61+
| Contributor | Commits | Lines ± | Files Changed |
62+
|-------------|---------|---------|---------------|
63+
| Rod Vagg | 10 | +3670/-595 | 63 |
64+
| Phi-rjan | 6 | +485/-159 | 49 |
65+
| dependabot[bot] | 4 | +98/-89 | 8 |
66+
| William Morriss | 3 | +351/-15 | 18 |
67+
| beck | 1 | +6/-6 | 5 |
68+
| eroderust | 1 | +7/-7 | 5 |
69+
| hanabi1224 | 1 | +0/-17 | 1 |
70+
| Hubert | 1 | +0/-1 | 1 |
71+
| relotnek | 1 | +1/-1 | 1 |
72+
| Shashank | 1 | +3/-2 | 3 |
73+
| stringsbuilder | 1 | +2/-2 | 1 |
74+
| TippyFlits | 1 | +0/-5 | 1 |
75+
1676
# Node and Miner v1.35.0 / 2026-02-19
1777

1878
The Lotus and Lotus-Miner v1.35.0 release includes Ethereum RPC compatibility improvements, CLI enhancements, and numerous dependency updates. Highlights include FRC-0102 signing envelope support, an Ethereum RPC error code correction for tooling compatibility, and updated OpenTelemetry tracing.
@@ -23,22 +83,23 @@ The Lotus and Lotus-Miner v1.35.0 release includes Ethereum RPC compatibility im
2383

2484
## ⭐ New Features
2585

26-
- feat(cli): implement FRC-0102 signing envelope for `wallet sign` and `wallet verify` ([filecoin-project/lotus#13471](https://github.com/filecoin-project/lotus/pull/13471))
86+
- feat(cli): implement FRC-0102 signing envelope for `wallet sign` and `wallet verify` ([filecoin-project/lotus#13388](https://github.com/filecoin-project/lotus/pull/13388))
2787
- feat(cli): add `--order-by-nonce` flag to list messages sequentially when filtering by sender ([filecoin-project/lotus#13394](https://github.com/filecoin-project/lotus/pull/13394))
28-
- feat: add slog integration for libp2p log level control ([filecoin-project/lotus#13497](https://github.com/filecoin-project/lotus/pull/13497))
88+
- feat: add slog integration for libp2p log level control ([filecoin-project/lotus#13422](https://github.com/filecoin-project/lotus/pull/13422))
2989

3090
## 🐛 Bug Fixes
3191

3292
- fix(eth): use error code 3 for `EExecutionReverted` for Ethereum RPC tooling compatibility ([filecoin-project/lotus#13467](https://github.com/filecoin-project/lotus/pull/13467))
3393
- fix(eth): fix `eth_syncing` result property casing & implement `UnmarshalJSON` for `EthSyncingResult` ([filecoin-project/lotus#13484](https://github.com/filecoin-project/lotus/pull/13484))
34-
- fix(f3): set initial power table CID in calibnet F3 manifest ([filecoin-project/lotus#13495](https://github.com/filecoin-project/lotus/pull/13495))
94+
- fix(f3): set initial power table CID in calibnet F3 manifest ([filecoin-project/lotus#13496](https://github.com/filecoin-project/lotus/pull/13496))
3595
- fix(itests): prevent wdPostLoop deadline skip race condition ([filecoin-project/lotus#13464](https://github.com/filecoin-project/lotus/pull/13464))
3696

3797
## 👌 Improvements
3898

39-
- chore(tracing): update OpenTelemetry semconv from v1.7.0 to v1.39.0 ([filecoin-project/lotus#13497](https://github.com/filecoin-project/lotus/pull/13497))
99+
- chore(tracing): update OpenTelemetry semconv from v1.7.0 to v1.39.0 ([filecoin-project/lotus#13511](https://github.com/filecoin-project/lotus/pull/13511))
40100
- chore(deps): replace `golang.org/x/crypto/sha3` with go-keccak, upgrade x/crypto ([filecoin-project/lotus#13477](https://github.com/filecoin-project/lotus/pull/13477))
41101
- chore: bump FFI to v1.34.6 ([filecoin-project/lotus#13521](https://github.com/filecoin-project/lotus/pull/13521))
102+
- perf: MessagePool Pending() snapshot ([filecoin-project/lotus#13542](https://github.com/filecoin-project/lotus/pull/13542))
42103

43104
## 📝 Changelog
44105

CONTRIBUTING.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -126,8 +126,8 @@ When updating the Go version (either patch or minor), the following files must b
126126
#### Step-by-Step Process
127127

128128
```bash
129-
OLD_GO_VERSION="1.23.7"
130-
NEW_GO_VERSION="1.23.10"
129+
OLD_GO_VERSION="1.24.7"
130+
NEW_GO_VERSION="1.25.0"
131131

132132
# Update go.mod
133133
sed -i "s/go $OLD_GO_VERSION/go $NEW_GO_VERSION/" go.mod
@@ -139,7 +139,7 @@ echo "$NEW_GO_VERSION" > GO_VERSION_MIN
139139
sed -i "s/$OLD_GO_VERSION/$NEW_GO_VERSION/g" README.md
140140

141141
# Update Dockerfile
142-
sed -i "s/FROM golang:$OLD_GO_VERSION-bullseye/FROM golang:$NEW_GO_VERSION-bullseye/" Dockerfile
142+
sed -i "s/FROM golang:$OLD_GO_VERSION-bookworm/FROM golang:$NEW_GO_VERSION-bookworm/" Dockerfile
143143

144144
# Add a changelog entry
145145

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#####################################
2-
FROM golang:1.24.7-bookworm AS lotus-builder
2+
FROM golang:1.25.0-bookworm AS lotus-builder
33
MAINTAINER Lotus Development Team
44

55
RUN apt-get update && apt-get install -y ca-certificates build-essential clang ocl-icd-opencl-dev ocl-icd-libopencl1 jq libhwloc-dev

GO_VERSION_MIN

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.24.7
1+
1.25.0

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
<a href="https://github.com/filecoin-project/lotus/actions/workflows/check.yml"><img src="https://github.com/filecoin-project/lotus/actions/workflows/check.yml/badge.svg"></a>
1212
<a href="https://github.com/filecoin-project/lotus/actions/workflows/test.yml"><img src="https://github.com/filecoin-project/lotus/actions/workflows/test.yml/badge.svg"></a>
1313
<a href="https://goreportcard.com/report/github.com/filecoin-project/lotus"><img src="https://goreportcard.com/badge/github.com/filecoin-project/lotus" /></a>
14-
<a href=""><img src="https://img.shields.io/badge/golang-%3E%3D1.24.7-blue.svg" /></a>
14+
<a href=""><img src="https://img.shields.io/badge/golang-%3E%3D1.25.0-blue.svg" /></a>
1515
<br>
1616
</p>
1717

@@ -58,10 +58,10 @@ For other distributions you can find the required dependencies [here.](https://l
5858

5959
#### Go
6060

61-
To build Lotus, you need a working installation of [Go 1.24.7 or higher](https://golang.org/dl/):
61+
To build Lotus, you need a working installation of [Go 1.25.0 or higher](https://golang.org/dl/):
6262

6363
```bash
64-
wget -c https://golang.org/dl/go1.24.7.linux-amd64.tar.gz -O - | sudo tar -xz -C /usr/local
64+
wget -c https://golang.org/dl/go1.25.0.linux-amd64.tar.gz -O - | sudo tar -xz -C /usr/local
6565
```
6666

6767
**TIP:**

api/api_errors.go

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@ const (
3232
EPaymentChannelDisabled
3333
)
3434

35+
// ELimitExceeded is the standard Ethereum JSON-RPC error code for request limit
36+
// violations (EIP-1474). Used when a block range exceeds the configured maximum.
37+
const ELimitExceeded jsonrpc.ErrorCode = -32005
38+
3539
var (
3640
RPCErrors = jsonrpc.NewErrors()
3741

@@ -67,6 +71,8 @@ var (
6771
_ error = (*ErrNullRound)(nil)
6872
_ jsonrpc.RPCErrorCodec = (*ErrNullRound)(nil)
6973
_ error = (*errPaymentChannelDisabled)(nil)
74+
_ error = (*ErrBlockRangeExceeded)(nil)
75+
_ jsonrpc.RPCErrorCodec = (*ErrBlockRangeExceeded)(nil)
7076
)
7177

7278
func init() {
@@ -82,6 +88,7 @@ func init() {
8288
RPCErrors.Register(EExecutionReverted, new(*ErrExecutionReverted))
8389
RPCErrors.Register(ENullRound, new(*ErrNullRound))
8490
RPCErrors.Register(EPaymentChannelDisabled, new(*errPaymentChannelDisabled))
91+
RPCErrors.Register(ELimitExceeded, new(*ErrBlockRangeExceeded))
8592
}
8693

8794
func ErrorIsIn(err error, errorTypes []error) bool {
@@ -246,3 +253,40 @@ type errPaymentChannelDisabled struct{}
246253
func (errPaymentChannelDisabled) Error() string {
247254
return "payment channels disabled (EnablePaymentChannelManager=false)"
248255
}
256+
257+
// ErrBlockRangeExceeded signals that a request's block range exceeds the configured
258+
// maximum. Returned with the standard Ethereum JSON-RPC -32005 "limit exceeded" code.
259+
type ErrBlockRangeExceeded struct {
260+
Message string
261+
}
262+
263+
func NewErrBlockRangeExceeded(maxBlockRange, given uint64) *ErrBlockRangeExceeded {
264+
return &ErrBlockRangeExceeded{
265+
Message: fmt.Sprintf("block range exceeds maximum of %d (got %d)", maxBlockRange, given),
266+
}
267+
}
268+
269+
func (e *ErrBlockRangeExceeded) Error() string {
270+
return e.Message
271+
}
272+
273+
func (e *ErrBlockRangeExceeded) FromJSONRPCError(jerr jsonrpc.JSONRPCError) error {
274+
if jerr.Code != ELimitExceeded {
275+
return fmt.Errorf("unexpected error code: %d", jerr.Code)
276+
}
277+
e.Message = jerr.Message
278+
return nil
279+
}
280+
281+
func (e *ErrBlockRangeExceeded) ToJSONRPCError() (jsonrpc.JSONRPCError, error) {
282+
return jsonrpc.JSONRPCError{
283+
Code: ELimitExceeded,
284+
Message: e.Error(),
285+
}, nil
286+
}
287+
288+
// Is performs a non-strict type check so errors.Is works regardless of field values.
289+
func (e *ErrBlockRangeExceeded) Is(target error) bool {
290+
_, ok := target.(*ErrBlockRangeExceeded)
291+
return ok
292+
}

api/api_full.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -968,7 +968,7 @@ type FullNode interface {
968968
// Implements OpenEthereum-compatible API method trace_filter
969969
EthTraceFilter(ctx context.Context, filter ethtypes.EthTraceFilterCriteria) ([]*ethtypes.EthTraceFilterResult, error) //perm:read
970970

971-
// CreateBackup creates node backup onder the specified file name. The
971+
// CreateBackup creates node backup under the specified file name. The
972972
// method requires that the lotus daemon is running with the
973973
// LOTUS_BACKUP_BASE_PATH environment variable set to some path, and that
974974
// the path specified when calling CreateBackup is within the base path

api/docgen/docgen.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -481,6 +481,13 @@ func init() {
481481
Input: ecchain,
482482
})
483483
addExample(types.TipSetSelectors.Finalized)
484+
addExample(&types.FinalityStatus{
485+
ECFinalityThresholdDepth: 30,
486+
ECFinalizedTipSet: &ts,
487+
F3FinalizedTipSet: &ts,
488+
FinalizedTipSet: &ts,
489+
Head: &ts,
490+
})
484491
}
485492

486493
func GetAPIType(name, pkg string) (i interface{}, t reflect.Type, permStruct []reflect.Type) {

api/v2api/full.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,16 @@ type FullNode interface {
6565
//
6666
ChainGetTipSet(context.Context, types.TipSetSelector) (*types.TipSet, error) //perm:read
6767

68+
// ChainGetTipSetFinalityStatus returns a breakdown of how the node is
69+
// currently determining finality. The result includes the EC probabilistic
70+
// finality depth (based on observed chain health), the F3-finalized tipset
71+
// (if available), and the overall finalized tipset the node is using.
72+
//
73+
// Useful for monitoring chain health and diagnosing finality lag.
74+
//
75+
// Experimental: This API is experimental and may change without notice.
76+
ChainGetTipSetFinalityStatus(context.Context) (*types.FinalityStatus, error) //perm:read
77+
6878
// MethodGroup: State
6979
// The State method group contains methods for interacting with the Filecoin
7080
// blockchain state, including actor information, addresses, and chain data.

api/v2api/gateway.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ var _ FullNode = (Gateway)(nil)
1818

1919
type Gateway interface {
2020
ChainGetTipSet(context.Context, types.TipSetSelector) (*types.TipSet, error)
21+
ChainGetTipSetFinalityStatus(context.Context) (*types.FinalityStatus, error)
2122
StateGetActor(context.Context, address.Address, types.TipSetSelector) (*types.Actor, error)
2223
StateGetID(context.Context, address.Address, types.TipSetSelector) (*address.Address, error)
2324
EthAddressToFilecoinAddress(ctx context.Context, ethAddress ethtypes.EthAddress) (address.Address, error)

0 commit comments

Comments
 (0)