forked from FilOzone/filecoin-services
-
Notifications
You must be signed in to change notification settings - Fork 0
chore: sync upstream #8
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
alanshaw
wants to merge
17
commits into
main
Choose a base branch
from
ash/chore/sync-upstream-2026-01-14
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Reviewer @rvagg @ZenGround0 Fixes a few things with the deploy-warm-storage-implementation-only script #### Context Toward FilOzone#346 #### Changes * remove unused FILBEAM_CONTROLLER_ADDRESS * use existing SIGNATURE_VERIFICATION_LIB_ADDRESS if provided * fix `--libraries` arg * use `-f 0x000000000000000000000000000000000000000000` with `cast call` to skip password prompt
…ilOzone#349) # Fixes FilOzone#347 - Replaced the filfox to blockscout as the default block explorer --------- Co-authored-by: Phi <[email protected]>
…lOzone#356) ## Summary This PR covers the `ServiceProviderRegistry` side of [FS FilOzone#355](FilOzone#355) by adopting the `announcePlannedUpgrade` pattern already used by `FilecoinWarmStorageService`. PDPVerifier changes are implemented in a separate PR in [`pdp`](FilOzone/pdp#234) and are not included here. ## Changes ### ServiceProviderRegistry contract - Add `PlannedUpgrade` struct and `nextUpgrade` storage field - Add `UpgradeAnnounced(PlannedUpgrade)` event - Implement: - `announcePlannedUpgrade(PlannedUpgrade plannedUpgrade)` — owner-only, validates code size and `afterEpoch > block.number`, stores the plan and emits `UpgradeAnnounced` - `getNextUpgrade() returns (address nextImplementation, uint96 afterEpoch)` — exposes the planned upgrade via the proxy - Update `_authorizeUpgrade(address newImplementation)` to: - Require `newImplementation == nextUpgrade.nextImplementation` - Require `block.number >= nextUpgrade.afterEpoch` - Clear the stored plan on successful upgrade - Update `migrate(string newVersion)` to: - `public onlyProxy onlyOwner reinitializer(2)` - Emit `ContractUpgraded(newVersion, ERC1967Utils.getImplementation())` ### Upgrade scripts - Add `tools/announce-planned-upgrade-registry.sh` - Announces a planned upgrade for a `ServiceProviderRegistry` proxy using `announcePlannedUpgrade((address,uint96))` - Add `tools/upgrade-registry.sh` - Reads `getNextUpgrade()` from the registry proxy - Verifies the planned implementation and `afterEpoch` - Calls `upgradeToAndCall(address,bytes)` with `migrate(string)` and the desired version - Verifies the final implementation using the standard ERC-1967 implementation slot (`0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`) ### Tests - Extend `ServiceProviderRegistryTest` to cover: - `testAnnouncePlannedUpgrade` — happy-path announce and gated upgrade flow - `testAnnouncePlannedUpgradeOnlyOwner` — only the owner can announce - `testAnnouncePlannedUpgradeInvalidImplementation` — revert on non-contract implementation - `testAnnouncePlannedUpgradeInvalidEpoch` — revert when `afterEpoch <= block.number` - `testOnlyOwnerCanUpgrade` — validates that: - Non-owner upgrades revert - Owner can upgrade after a valid announcement and epoch gating Closes : FilOzone#355
…ilOzone#364) ## Summary This PR implements automatic deployment address management using `deployments.json`, addressing issue FilOzone#354. Scripts now automatically load and update contract addresses from a JSON file keyed by chain-id, eliminating the need for manual environment variable management. ## Changes - **Added `tools/deployments.sh`**: Shared script with functions to: - Load deployment addresses from `deployments.json` for a given chain-id - Update addresses in JSON after deployment - Track metadata (commit hash, deployment timestamp) - Handle missing chains gracefully - **Created `deployments.json`**: JSON structure for storing addresses organized by chain-id - **Updated deployment scripts** to use the shared system: - `deploy-all-warm-storage.sh` - `deploy-session-key-registry.sh` - `deploy-registry-calibnet.sh` - `deploy-warm-storage-calibnet.sh` - `upgrade.sh` - `upgrade-registry.sh` - **Updated documentation**: Added section to `tools/README.md` explaining the system ## Features - Addresses automatically loaded from JSON (no need to set env vars) - Addresses automatically updated after deployment - Chain-id based organization (e.g., `jq '.["314"]' deployments.json`) - Environment variables can still override JSON values - Control flags: `SKIP_LOAD_DEPLOYMENTS` and `SKIP_UPDATE_DEPLOYMENTS` - Metadata tracking for commit hash and deployment timestamp ## Usage # Addresses are automatically loaded from deployments.json ./tools/deploy-all-warm-storage.sh # Query addresses jq '.["314159"].WARM_STORAGE_PROXY_ADDRESS' deployments.json # Skip loading/updating if needed SKIP_LOAD_DEPLOYMENTS=true ./tools/deploy-all-warm-storage.sh## Testing - Tested with calibnet deployment - Verified addresses are correctly loaded and updated - Confirmed backward compatibility (env vars still work) Closes FilOzone#354 --------- Co-authored-by: Phi-rjan <[email protected]>
Supersedes FilOzone#246. We are GA-launching with static rail pricing, so documenting that in a SPEC.md --------- Co-authored-by: Rod Vagg <[email protected]>
…e#372) Remove challengeWindow(), getChallengesPerProof(), and getMaxProvingPeriod() from external API. Use getPDPConfig() instead per IPDPProvingSchedule interface. Closes: FilOzone#336
Co-authored-by: Rod Vagg <[email protected]>
…#377) Block dataSetDeleted until settledUpTo >= endEpoch, preventing SPs from deleting datasets before clients can settle. Allow settlement to advance past unproven periods once their deadlines pass (with zero payment). Closes: FilOzone#375
…e#381) * Payment rate updates now only occur during piecesAdded or when pieces are removed in nextProvingPeriod. * Owner pricing changes now only apply on next piece operation. * RailRateUpdated events only emit when rates actually change. Prompted by 2 things: * We rely on `FilecoinPayV1#modifyRailPayment` being a noop when we're not changing rate. But it's not free, and we know the two points at which the rate changes, so why not use that? The side effect here is as above, owner pricing changes don't take effect until the user modifies the data set in some way. * Noticing that `RailRateUpdated` is emitted every time that `updatePaymentRates` gets called, even if there are no rate changes, and it gets called every `nextProvingPeriod`, so we have one of these events per proving period.
…Ozone#388) BREAKING change because it renames keys here but they are very inconsistent and confusing and the PDP ones don't even show you what the proxy is. --- I had to go use this today and was a bit frustrated it was less useful than I imagined. @rjan90 I got `SIGNATURE_VERIFICATION_LIB_ADDRESS` off a message in Slack from you for calibnet but had to go hunting on the chain for the mainnet one, I'm pretty sure that's it by the bytecode match but you might just want to see if you have a record of that being the right address for mainnet.
Closes FilOzone#382 Reviewer @rvagg ProviderIdSet is an Ownable arrayset of provider ids. It uses less space than a bitset if the selected providerIds are sparse. It uses 1/16 as much space as an [OpenZeppelin EnumerableSet](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/structs/EnumerableSet.sol). If we want to reuse this data structure in another smart contract, it can be converted into a library, but I do not do that here. #### Interface * `getProviderIds` * `containsProviderId` * `addProviderId` * `removeProviderId` #### Changes * add ProviderIdSet * test ProviderIdSet * add deployment script * deploy on mainnet and testnet
Reviewer @rvagg @ZenGround0 This is needed for wagmi in synapse. #### Changes * add ProviderIdSet abi
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Particularly interested in receiving these:
Note: these commits ARE NOT currently in a released version of the upstream.