diff --git a/CHANGELOG.md b/CHANGELOG.md index 1f721db9378..669129d5af5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,8 @@ ## Improvements +- Reduce size of embedded genesis CAR files by removing WASM actor blocks and compressing with zstd. This reduces the `lotus` binary size by approximately 10 MiB. ([filecoin-project/lotus#12439](https://github.com/filecoin-project/lotus/pull/12439)) + # Node v1.29.0 / 2024-09-02 This is a Lotus Node only release, which includes a variety of new features, improvements, and fixes, particularly focused on enhancing ETH RPC functionality. Key highlights of this release include: diff --git a/build/bootstrap/butterflynet.pi b/build/bootstrap/butterflynet.pi index 7289b5d95f8..06129878d59 100644 --- a/build/bootstrap/butterflynet.pi +++ b/build/bootstrap/butterflynet.pi @@ -1,2 +1,2 @@ -/dns4/bootstrap-0.butterfly.fildev.network/tcp/1347/p2p/12D3KooWGW6xMTpjEBqndYkqytbu8PWfJmpK4wKLLLNSkXL2QZtD -/dns4/bootstrap-1.butterfly.fildev.network/tcp/1347/p2p/12D3KooWFGz9HegR3Rjrtm8b9WXTM6E3kN1sdd6X1JztuCgQaZSB +/dns4/bootstrap-0.butterfly.fildev.network/tcp/1347/p2p/12D3KooWF76a8Avv74CV55noqKd5rHsM8uwFYhaW4PhMhuE4PQsP +/dns4/bootstrap-1.butterfly.fildev.network/tcp/1347/p2p/12D3KooWCN1G8gK5HXQNDFKxAVmF6bpg436uVyNYFgiX94ZHCPjj diff --git a/build/buildconstants/params_butterfly.go b/build/buildconstants/params_butterfly.go index afcad287cae..e976e01f94a 100644 --- a/build/buildconstants/params_butterfly.go +++ b/build/buildconstants/params_butterfly.go @@ -22,7 +22,7 @@ var NetworkBundle = "butterflynet" var ActorDebugging = false const BootstrappersFile = "butterflynet.pi" -const GenesisFile = "butterflynet.car" +const GenesisFile = "butterflynet.car.zst" const UpgradeBreezeHeight = -1 const BreezeGasTampingDuration = 120 diff --git a/build/buildconstants/params_calibnet.go b/build/buildconstants/params_calibnet.go index ee6cbbb168c..65603274854 100644 --- a/build/buildconstants/params_calibnet.go +++ b/build/buildconstants/params_calibnet.go @@ -26,7 +26,7 @@ var NetworkBundle = "calibrationnet" var ActorDebugging = false const BootstrappersFile = "calibnet.pi" -const GenesisFile = "calibnet.car" +const GenesisFile = "calibnet.car.zst" const UpgradeBreezeHeight = -1 const BreezeGasTampingDuration = 120 diff --git a/build/buildconstants/params_interop.go b/build/buildconstants/params_interop.go index 91245dbe669..d45e8ef3532 100644 --- a/build/buildconstants/params_interop.go +++ b/build/buildconstants/params_interop.go @@ -19,7 +19,7 @@ var NetworkBundle = "caterpillarnet" var ActorDebugging = false const BootstrappersFile = "interopnet.pi" -const GenesisFile = "interopnet.car" +const GenesisFile = "interopnet.car.zst" const GenesisNetworkVersion = network.Version22 diff --git a/build/buildconstants/params_mainnet.go b/build/buildconstants/params_mainnet.go index 2f61cad511f..3486279dba2 100644 --- a/build/buildconstants/params_mainnet.go +++ b/build/buildconstants/params_mainnet.go @@ -30,7 +30,7 @@ const ActorDebugging = false const GenesisNetworkVersion = network.Version0 const BootstrappersFile = "mainnet.pi" -const GenesisFile = "mainnet.car" +const GenesisFile = "mainnet.car.zst" const UpgradeBreezeHeight abi.ChainEpoch = 41280 diff --git a/build/genesis.go b/build/genesis.go index 43a1dba3d80..b32bef6d755 100644 --- a/build/genesis.go +++ b/build/genesis.go @@ -2,9 +2,11 @@ package build import ( "embed" + "io" "path" logging "github.com/ipfs/go-log/v2" + "github.com/klauspost/compress/zstd" "github.com/filecoin-project/lotus/build/buildconstants" ) @@ -12,14 +14,29 @@ import ( // moved from now-defunct build/paramfetch.go var log = logging.Logger("build") -//go:embed genesis -var genesisfs embed.FS +//go:embed genesis/*.car.zst +var genesisCars embed.FS func MaybeGenesis() []byte { - genBytes, err := genesisfs.ReadFile(path.Join("genesis", buildconstants.GenesisFile)) + file, err := genesisCars.Open(path.Join("genesis", buildconstants.GenesisFile)) if err != nil { - log.Warnf("loading built-in genesis: %s", err) + log.Warnf("opening built-in genesis: %s", err) return nil } - return genBytes + defer file.Close() //nolint + + decoder, err := zstd.NewReader(file) + if err != nil { + log.Warnf("creating zstd decoder: %s", err) + return nil + } + defer decoder.Close() //nolint + + decompressedBytes, err := io.ReadAll(decoder) + if err != nil { + log.Warnf("reading decompressed genesis file: %s", err) + return nil + } + + return decompressedBytes } diff --git a/build/genesis/butterflynet.car b/build/genesis/butterflynet.car deleted file mode 100644 index 910e7629156..00000000000 Binary files a/build/genesis/butterflynet.car and /dev/null differ diff --git a/build/genesis/butterflynet.car.zst b/build/genesis/butterflynet.car.zst new file mode 100644 index 00000000000..db55bd8cc47 Binary files /dev/null and b/build/genesis/butterflynet.car.zst differ diff --git a/build/genesis/calibnet.car b/build/genesis/calibnet.car deleted file mode 100644 index 775cdf7907e..00000000000 Binary files a/build/genesis/calibnet.car and /dev/null differ diff --git a/build/genesis/calibnet.car.zst b/build/genesis/calibnet.car.zst new file mode 100644 index 00000000000..06dad61bb4b Binary files /dev/null and b/build/genesis/calibnet.car.zst differ diff --git a/build/genesis/interopnet.car b/build/genesis/interopnet.car deleted file mode 100644 index 2dadae61eb3..00000000000 Binary files a/build/genesis/interopnet.car and /dev/null differ diff --git a/build/genesis/interopnet.car.zst b/build/genesis/interopnet.car.zst new file mode 100644 index 00000000000..6acd1263a4a Binary files /dev/null and b/build/genesis/interopnet.car.zst differ diff --git a/build/genesis/mainnet.car b/build/genesis/mainnet.car deleted file mode 100644 index f1b3f342a6c..00000000000 Binary files a/build/genesis/mainnet.car and /dev/null differ diff --git a/build/genesis/mainnet.car.zst b/build/genesis/mainnet.car.zst new file mode 100644 index 00000000000..cd64349e297 Binary files /dev/null and b/build/genesis/mainnet.car.zst differ