Skip to content

feat: v1.1.0 FWSS upgrade scripts and documentation#384

Open
rjan90 wants to merge 32 commits intomainfrom
phi/document-upgrade
Open

feat: v1.1.0 FWSS upgrade scripts and documentation#384
rjan90 wants to merge 32 commits intomainfrom
phi/document-upgrade

Conversation

@rjan90
Copy link
Collaborator

@rjan90 rjan90 commented Jan 12, 2026

Closes: #346, #358, #393, #394

Kind of a large PR, that expanded in size due to encountering issues with scripts along the way. But high-level changes are:

Version updates

  • FilecoinWarmStorageService: 1.0.0 → 1.1.0
  • ServiceProviderRegistry: 1.0.0 → 1.1.0
  • Updated test assertions to match new version

Deployment infrastructure

  • Added automatic deployments.json integration to a couple of deployment scripts I used during the contract deployment
  • Added loading defaults from deployments.json and persist new addresses to some scripts I used during the upgrade.

Script enhancements

  • deploy-warm-storage-implementation-only.sh:
    • Network-specific USDFC token address handling (devnet/calibnet/mainnet)
    • Automatic SignatureVerificationLib deployment tracking
    • Deployment address persistence
  • deploy-warm-storage-view.sh:
    • Added deployments.json integration
    • Automatic address persistence
  • set-warm-storage-view.sh:
    • Added deployments.json integration
    • Updates view address in deployments file
  • deploy-registry.sh
    • Updated to be network agnostic (removed the deploy-registry-calibnet.sh)
    • Supports implementation-only or full proxy deployment modes
    • deployments.json integration

GitHub workflow

  • New workflow: .github/workflows/upgrade-announcement.yml
    • Creates upgrade announcement issues automatically
    • Supports multiple contract selection (FWSS, Registry, StateView)
    • Calculates estimated execution time from epoch
    • Formats changes summary from pipe-separated input
    • Generates issues matching the template in UPGRADE-PROCESS.md

Documentation

  • Changelog
    • Added v1.1.0 entry with:
    • Added features (ProviderIdSet, upgrade flows, devnet support)
    • Breaking changes (deployment key renames, rail settlement requirements)
    • Bug fixes and documentation updates

@FilOzzy FilOzzy added this to FOC Jan 12, 2026
@github-project-automation github-project-automation bot moved this to 📌 Triage in FOC Jan 12, 2026
@rjan90 rjan90 moved this from 📌 Triage to ⌨️ In Progress in FOC Jan 12, 2026
@rjan90 rjan90 added this to the M4: Filecoin Service Liftoff milestone Jan 12, 2026
@rjan90 rjan90 changed the title [WIP] feat: document FWSS upgrade process [WIP] feat: FWSS upgrade to v1.1.0 and documentation Jan 15, 2026
@rjan90 rjan90 changed the title [WIP] feat: FWSS upgrade to v1.1.0 and documentation [WIP] feat: v1.1.0 FWSS upgrade and documentation Jan 15, 2026
@rjan90
Copy link
Collaborator Author

rjan90 commented Jan 15, 2026

I´m going to attempt following UPGRADE_PROCESS.md and writing down notes here while going through the upgrade process to lurk out initial holes in the documentation.

@rjan90 rjan90 mentioned this pull request Jan 16, 2026
7 tasks
@rjan90
Copy link
Collaborator Author

rjan90 commented Jan 16, 2026

Steps taken:

  1. Prepared changelog changes for FWSS v1.1.0
  2. Bumped FWSS version in:
    string public constant VERSION = "1.0.0";
  3. Bumped ServiceProviderRegistry version:
    string public constant VERSION = "1.1.0";
    since announceUpgradeFlow landed after the previous version: https://github.com/FilOzone/filecoin-services/commits/main/service_contracts/src/ServiceProviderRegistry.sol
  4. Create example "FilecoinWarmStorageService Upgrade Announcement" issue ticket based on the GHA-workflow created in this PR. Example: FWSS GA Contract Upgrade #358 (comment)

@rjan90
Copy link
Collaborator Author

rjan90 commented Jan 16, 2026

Deploying new ServiceProviderRegistry implementation

First setting these:

Then run the ./tools/deploy-registry-calibnet.sh :

Deploying Service Provider Registry Contract
Mode: implementation-only deployment (upgrade-first)
📖 Loading deployment addresses from deployments.json for chain 314159
  ✓ Loaded FILECOIN_PAY_ADDRESS=0x09a0fDc2723fAd1A7b8e3e00eE5DF73841df55a0
  ✓ Loaded PDP_VERIFIER_PROXY_ADDRESS=0x85e366Cf9DD2c0aE37E963d9556F5f4718d6417C
  ✓ Loaded PDP_VERIFIER_IMPLEMENTATION_ADDRESS=0x2355Cb19BA1eFF51673562E1a5fc5eE292AF9D42
  ✓ Loaded SESSION_KEY_REGISTRY_ADDRESS=0x518411c2062E119Aaf7A8B12A2eDf9a939347655
  ✓ Loaded SERVICE_PROVIDER_REGISTRY_PROXY_ADDRESS=0x839e5c9988e4e9977d40708d0094103c0839Ac9D
  ✓ Loaded SERVICE_PROVIDER_REGISTRY_IMPLEMENTATION_ADDRESS=0xb32Bb530638d20f1B59B40CDD2Ce4208430f7DE3
  ✓ Loaded SIGNATURE_VERIFICATION_LIB_ADDRESS=0x3fD7BFFAcAfdf35083d1424c1feC6481c85087F6
  ✓ Loaded FWSS_PROXY_ADDRESS=0x02925630df557F957f70E112bA06e50965417CA0
  ✓ Loaded FWSS_IMPLEMENTATION_ADDRESS=0x1cAeE5EfCfc3681C2bBF689Ccb30d70c6e45F49f
  ✓ Loaded FWSS_VIEW_ADDRESS=0xA5D87b04086B1d591026cCE10255351B5AA4689B
  ✓ Loaded ENDORSEMENT_SET_ADDRESS=0xAA2f7CfC7ecAc616EC9C1f6d700fAd19087FAC84
  Deploying contracts from address 0xe7D1b14eAC0dcE3d6867C2Ef06b5bdFF52362C84
  Deployer balance: 20400109072077004779662
  Starting nonce: 335

=== STEP 1: Deploying ServiceProviderRegistry Implementation ===
✓ ServiceProviderRegistry implementation deployed at: 0x0A2E79efFC7DB1D15912E4F6722F527F493F18Ef

=== STEP 2: Skipping Proxy Deployment ===
Use --with-proxy to deploy and initialize a new proxy.

==========================================
=== DEPLOYMENT SUMMARY ===
==========================================
ServiceProviderRegistry Implementation: 0x0A2E79efFC7DB1D15912E4F6722F527F493F18Ef
==========================================
💾 Updating deployments.json: chain=314159, contract=SERVICE_PROVIDER_REGISTRY_IMPLEMENTATION_ADDRESS, address=0x0A2E79efFC7DB1D15912E4F6722F527F493F18Ef
  ✓ Updated SERVICE_PROVIDER_REGISTRY_IMPLEMENTATION_ADDRESS=0x0A2E79efFC7DB1D15912E4F6722F527F493F18Ef for chain 314159
  ✓ Updated metadata: commit=fc4a972a644b0e9c6a4e603bd0b4b0d493fe2774, deployed_at=2026-01-16T15:01:02Z

Contract Details:
  - Version: n/a
  - Registration Fee: n/a (burned)
  - Burn Actor: n/a
  - Chain: Calibration testnet (314159)

Next steps:
1. Save the implementation address for upgrade announcement
2. Proceed with announce-planned-upgrade-registry.sh

---
🔍 Starting automatic contract verification...
Starting batch verification of 1 contracts on chain ID: 314159...

Processing: ServiceProviderRegistry (0x0A2E79efFC7DB1D15912E4F6722F527F493F18Ef)
Verifying ServiceProviderRegistry on Filfox (chain ID: 314159)...
⠙ Verifying contract on Filfox..
Filfox verification failed: TypeError: fetch failed
-----
Verifying ServiceProviderRegistry on Blockscout...
Start verifying contract `0x0A2E79efFC7DB1D15912E4F6722F527F493F18Ef` deployed on filecoin-calibration-testnet

Contract [src/ServiceProviderRegistry.sol:ServiceProviderRegistry] "0x0A2E79efFC7DB1D15912E4F6722F527F493F18Ef" is already verified. Skipping verification.
Blockscout verification successful for ServiceProviderRegistry
-----
Verifying ServiceProviderRegistry on Sourcify (chain ID: 314159)...
Start verifying contract `0x0A2E79efFC7DB1D15912E4F6722F527F493F18Ef` deployed on filecoin-calibration-testnet
Attempting to verify on Sourcify. Pass the --etherscan-api-key <API_KEY> to verify on Etherscan, or use the --verifier flag to verify on another provider.
Sourcify verification failed for ServiceProviderRegistry
Verification Summary for 1 contracts:
----------------------------------------
Sourcify verification failed for (1):
 - ServiceProviderRegistry (0x0A2E79efFC7DB1D15912E4F6722F527F493F18Ef)
----------------------------------------
1 out of 1 contracts had verification failures
==========================================

@rjan90
Copy link
Collaborator Author

rjan90 commented Jan 19, 2026

Struggled for a while to get it verified on Sourcify, but this finally worked after retrying multiple times for some reason:

cd /Users/phi/filecoin-services/service_contracts && forge verify-contract --verifier sourcify --chain 314159 --compiler-version 0.8.30 --optimizer-runs 1 --via-ir 0x0A2E79efFC7DB1D15912E4F6722F527F493F18Ef src/ServiceProviderRegistry.sol:ServiceProviderRegistry

FilFox verification also worked after brute-force trying it:

cd /Users/phi/filecoin-services/service_contracts && FOUNDRY_SOLC_VERSION=0.8.30 FOUNDRY_OPTIMIZER=true FOUNDRY_OPTIMIZER_RUNS=1 FOUNDRY_VIA_IR=true npm exec -y -- filfox-verifier@v1.4.4 forge --chain 314159 0x0A2E79efFC7DB1D15912E4F6722F527F493F18Ef src/ServiceProviderRegistry.sol:ServiceProviderRegistry

@rjan90
Copy link
Collaborator Author

rjan90 commented Jan 20, 2026

Deploying new FWSS implementation

First setting these:

Note: please note that we are using the new SERVICE_PROVIDER_REGISTRY_IMPLEMENTATION_ADDRESS here.

Then run the: /tools/deploy-warm-storage-implementation-only.sh script:

Deploying FilecoinWarmStorageService Implementation Only (no proxy)
📖 Loading deployment addresses from deployments.json for chain 314159
  ⊘ Skipped FILECOIN_PAY_ADDRESS (already set to 0x09a0fDc2723fAd1A7b8e3e00eE5DF73841df55a0)
  ⊘ Skipped PDP_VERIFIER_PROXY_ADDRESS (already set to 0x85e366Cf9DD2c0aE37E963d9556F5f4718d6417C)
  ✓ Loaded PDP_VERIFIER_IMPLEMENTATION_ADDRESS=0x2355Cb19BA1eFF51673562E1a5fc5eE292AF9D42
  ⊘ Skipped SESSION_KEY_REGISTRY_ADDRESS (already set to 0x518411c2062E119Aaf7A8B12A2eDf9a939347655)
  ⊘ Skipped SERVICE_PROVIDER_REGISTRY_PROXY_ADDRESS (already set to 0x839e5c9988e4e9977d40708d0094103c0839Ac9D)
  ✓ Loaded SERVICE_PROVIDER_REGISTRY_IMPLEMENTATION_ADDRESS=0x0A2E79efFC7DB1D15912E4F6722F527F493F18Ef
  ✓ Loaded SIGNATURE_VERIFICATION_LIB_ADDRESS=0x3fD7BFFAcAfdf35083d1424c1feC6481c85087F6
  ✓ Loaded FWSS_PROXY_ADDRESS=0x02925630df557F957f70E112bA06e50965417CA0
  ✓ Loaded FWSS_IMPLEMENTATION_ADDRESS=0x1cAeE5EfCfc3681C2bBF689Ccb30d70c6e45F49f
  ✓ Loaded FWSS_VIEW_ADDRESS=0xA5D87b04086B1d591026cCE10255351B5AA4689B
  ✓ Loaded ENDORSEMENT_SET_ADDRESS=0xAA2f7CfC7ecAc616EC9C1f6d700fAd19087FAC84
  Deploying from address: 0xe7D1b14eAC0dcE3d6867C2Ef06b5bdFF52362C84
  
 Warning: FILBEAM_BENEFICIARY_ADDRESS not set, using default
Using SignatureVerificationLib at: 0x3fD7BFFAcAfdf35083d1424c1feC6481c85087F6

Deploying FilecoinWarmStorageService implementation...
Constructor arguments:
  PDPVerifier: 0x85e366Cf9DD2c0aE37E963d9556F5f4718d6417C
  FilecoinPayV1: 0x09a0fDc2723fAd1A7b8e3e00eE5DF73841df55a0
  USDFC Token: 0xb3042734b608a1B16e9e86B374A3f3e389B4cDf0
  FilBeam Beneficiary Address: 0x1D60d2F5960Af6341e842C539985FA297E10d6eA
  ServiceProviderRegistry: 0x839e5c9988e4e9977d40708d0094103c0839Ac9D
  SessionKeyRegistry: 0x518411c2062E119Aaf7A8B12A2eDf9a939347655
  
# DEPLOYMENT COMPLETE
SignatureVerificationLib deployed at: 0x3fD7BFFAcAfdf35083d1424c1feC6481c85087F6
FilecoinWarmStorageService Implementation deployed at: 0x83d370296eEc984C6eD7C26f2D26729fd039B680

💾 Updating deployments.json: chain=314159, contract=FWSS_IMPLEMENTATION_ADDRESS, address=0x83d370296eEc984C6eD7C26f2D26729fd039B680
  ✓ Updated FWSS_IMPLEMENTATION_ADDRESS=0x83d370296eEc984C6eD7C26f2D26729fd039B680 for chain 314159
  ✓ Updated metadata: commit=01686da3da590937804c1033f79a43069c7923ea, deployed_at=2026-01-20T07:53:01Z

🔍 Starting automatic contract verification...
Starting batch verification of 1 contracts on chain ID: 314159...

-----

FilFox failed:
Verification Result:
✖ ⚠️  Unknown verification error occurred.
Filfox verification successful for FilecoinWarmStorageService

------

Verifying FilecoinWarmStorageService on Blockscout...
Start verifying contract `0x83d370296eEc984C6eD7C26f2D26729fd039B680` deployed on filecoin-calibration-testnet
Blockscout verification successful for FilecoinWarmStorageService

-----

Sourcify:

Submitting verification for [FilecoinWarmStorageService] "0x83d370296eEc984C6eD7C26f2D26729fd039B680".
The recompiled contract partially matches the deployed version
Sourcify verification successful for FilecoinWarmStorageService
Verification Summary for 1 contracts:
----------------------------------------
Successfully verified on all platforms (1/1):
 - FilecoinWarmStorageService
----------------------------------------
All contracts verified successfully on all platforms!

Verification on FilFox is constantly failing due to an error in FF

@rjan90
Copy link
Collaborator Author

rjan90 commented Jan 20, 2026

Announcing planned upgrade of the FWSS contract:

Since this is a breaking change, I´m going to set the ability to upgrade the contract (AFTER_EPOCH) to 7 days from now:

CURRENT_EPOCH=$(cast block-number --rpc-url "$ETH_RPC_URL"); AFTER_EPOCH=$((CURRENT_EPOCH + 20160)); echo "Current: $CURRENT_EPOCH, Upgrade after: $AFTER_EPOCH"
Current: 3385871, Upgrade after: 3406031

Then setting these env-vars:

  • export ETH_RPC_URL="https://api.calibration.node.glif.io/rpc/v1"
  • export FWSS_PROXY_ADDRESS="0x02925630df557F957f70E112bA06e50965417CA0"
  • export NEW_FWSS_IMPLEMENTATION_ADDRESS="0x83d370296eEc984C6eD7C26f2D26729fd039B680"
  • export AFTER_EPOCH="3406031"

Then running the announce-planned-upgrade.sh script:

./tools/announce-planned-upgrade.sh
Announcing planned upgrade after 20159 epochs
Sending announcement from owner address: 0xe7D1b14eAC0dcE3d6867C2Ef06b5bdFF52362C84
announcePlannedUpgrade transaction sent: 0xea107801f4ab568f005fba0ec5ef9b85a7d5c9c442e0b78f0912ca7e268459f9

Countdown timer to the AFTER_EPOCH for which the Calibration FWSS Contract can be upgraded: https://filecoin-testnet.blockscout.com/block/countdown/3406031

@rjan90
Copy link
Collaborator Author

rjan90 commented Jan 21, 2026

Mainnet contract deployments:

Deploying new ServiceProviderRegistry implementation to Mainnet

Exporting env-vars:

Then run the `./tools/deploy-registry.sh`
 ./deploy-registry.sh
  Deploying Service Provider Registry Contract
  Mode: implementation-only deployment (upgrade-first)
  Please use [profile.lint] instead or run `forge config --fix`.
📖 Loading deployment addresses from deployments.json for chain 314
 ✓ Loaded FILECOIN_PAY_ADDRESS=0x23b1e018F08BB982348b15a86ee926eEBf7F4DAa
 ✓ Loaded PDP_VERIFIER_PROXY_ADDRESS=0xBADd0B92C1c71d02E7d520f64c0876538fa2557F
 ✓ Loaded PDP_VERIFIER_IMPLEMENTATION_ADDRESS=0xe2Dc211BffcA499761570E04e8143Be2BA66095f
 ✓ Loaded SESSION_KEY_REGISTRY_ADDRESS=0x74FD50525A958aF5d484601E252271f9625231aB
 ✓ Loaded SERVICE_PROVIDER_REGISTRY_PROXY_ADDRESS=0xf55dDbf63F1b55c3F1D4FA7e339a68AB7b64A5eB
 ✓ Loaded SERVICE_PROVIDER_REGISTRY_IMPLEMENTATION_ADDRESS=0xe255D3a89D6B326b48bc0fC94a472A839471D6B0
 ✓ Loaded SIGNATURE_VERIFICATION_LIB_ADDRESS=0x7BdDF92aaBA8a578C3F494729BfAC5190d84acda
 ✓ Loaded FWSS_PROXY_ADDRESS=0x8408502033C418E1bbC97cE9ac48E5528F371A9f
 ✓ Loaded FWSS_IMPLEMENTATION_ADDRESS=0xd60b90f6D3C42B26a246E141ec701a20Dde2fA61
 ✓ Loaded FWSS_VIEW_ADDRESS=0x9e4e6699d8F67dFc883d6b0A7344Bd56F7E80B46
 ✓ Loaded ENDORSEMENT_SET_ADDRESS=0x59eFa2e8324E1551d46010d7B0B140eE2F5c726b
Deploying contracts from address 0x2127C3a31F54B81B5E9AD1e29C36c420d3D6ecC5
Deployer balance: 27005404137459268685
Starting nonce: 37

=== STEP 1: Deploying ServiceProviderRegistry Implementation ===
✓ ServiceProviderRegistry implementation deployed at: 0x01293CaFdE24DE89fF26d1A19Bfc4E36CBF74F9B

=== STEP 2: Skipping Proxy Deployment ===
Use --with-proxy to deploy and initialize a new proxy.

==========================================
=== DEPLOYMENT SUMMARY ===
==========================================
ServiceProviderRegistry Implementation: 0x01293CaFdE24DE89fF26d1A19Bfc4E36CBF74F9B
==========================================
💾 Updating deployments.json: chain=314, contract=SERVICE_PROVIDER_REGISTRY_IMPLEMENTATION_ADDRESS, address=0x01293CaFdE24DE89fF26d1A19Bfc4E36CBF74F9B
 ✓ Updated SERVICE_PROVIDER_REGISTRY_IMPLEMENTATION_ADDRESS=0x01293CaFdE24DE89fF26d1A19Bfc4E36CBF74F9B for chain 314
 ✓ Updated metadata: commit=80aa10dd9ef06e0e2417d8769cb7537420f2ccf2, deployed_at=2026-01-21T10:08:00Z

Contract Details:
 - Version: n/a
 - Registration Fee: n/a (burned)
 - Burn Actor: n/a
 - Chain: Filecoin mainnet (314)
 
 🔍 Starting automatic contract verification...
Starting batch verification of 1 contracts on chain ID: 314...
Filfox verification successful for ServiceProviderRegistry
Verifying ServiceProviderRegistry on Blockscout...
Start verifying contract `0x01293CaFdE24DE89fF26d1A19Bfc4E36CBF74F9B` deployed on filecoin-mainnet

Contract [src/ServiceProviderRegistry.sol:ServiceProviderRegistry] "0x01293CaFdE24DE89fF26d1A19Bfc4E36CBF74F9B" is already verified. Skipping verification.
Blockscout verification successful for ServiceProviderRegistry
Verifying ServiceProviderRegistry on Sourcify (chain ID: 314)...
Start verifying contract `0x01293CaFdE24DE89fF26d1A19Bfc4E36CBF74F9B` deployed on filecoin-mainnet
Verification Summary for 1 contracts:
----------------------------------------
Sourcify verification failed for (1):
- ServiceProviderRegistry (0x01293CaFdE24DE89fF26d1A19Bfc4E36CBF74F9B)
----------------------------------------
1 out of 1 contracts had verification failures
==========================================

- https://repo.sourcify.dev/314/0x01293CaFdE24DE89fF26d1A19Bfc4E36CBF74F9B
- https://filecoin.blockscout.com/address/0x01293CaFdE24DE89fF26d1A19Bfc4E36CBF74F9B?tab=contract
Deploying FWSS implementation to Mainnet First setting these: - export ETH_KEYSTORE="/path/to/keystore.json" - export PASSWORD="your-password" - export ETH_RPC_URL=https://api.node.glif.io/rpc/v1

Note: please note that we are using the new SERVICE_PROVIDER_REGISTRY_IMPLEMENTATION_ADDRESS here.

Then run the: /tools/deploy-warm-storage-implementation-only.sh script:

   ./deploy-warm-storage-implementation-only.sh
Deploying FilecoinWarmStorageService Implementation Only (no proxy)
📖 Loading deployment addresses from deployments.json for chain 314
  ✓ Loaded FILECOIN_PAY_ADDRESS=0x23b1e018F08BB982348b15a86ee926eEBf7F4DAa
  ✓ Loaded PDP_VERIFIER_PROXY_ADDRESS=0xBADd0B92C1c71d02E7d520f64c0876538fa2557F
  ✓ Loaded PDP_VERIFIER_IMPLEMENTATION_ADDRESS=0xe2Dc211BffcA499761570E04e8143Be2BA66095f
  ✓ Loaded SESSION_KEY_REGISTRY_ADDRESS=0x74FD50525A958aF5d484601E252271f9625231aB
  ✓ Loaded SERVICE_PROVIDER_REGISTRY_PROXY_ADDRESS=0xf55dDbf63F1b55c3F1D4FA7e339a68AB7b64A5eB
  ✓ Loaded SERVICE_PROVIDER_REGISTRY_IMPLEMENTATION_ADDRESS=0x01293CaFdE24DE89fF26d1A19Bfc4E36CBF74F9B
  ✓ Loaded SIGNATURE_VERIFICATION_LIB_ADDRESS=0x7BdDF92aaBA8a578C3F494729BfAC5190d84acda
  ✓ Loaded FWSS_PROXY_ADDRESS=0x8408502033C418E1bbC97cE9ac48E5528F371A9f
  ✓ Loaded FWSS_IMPLEMENTATION_ADDRESS=0xd60b90f6D3C42B26a246E141ec701a20Dde2fA61
  ✓ Loaded FWSS_VIEW_ADDRESS=0x9e4e6699d8F67dFc883d6b0A7344Bd56F7E80B46
  ✓ Loaded ENDORSEMENT_SET_ADDRESS=0x59eFa2e8324E1551d46010d7B0B140eE2F5c726b
Deploying from address: 0x2127C3a31F54B81B5E9AD1e29C36c420d3D6ecC5
# DEPLOYMENT COMPLETE
SignatureVerificationLib deployed at: 0x7BdDF92aaBA8a578C3F494729BfAC5190d84acda
FilecoinWarmStorageService Implementation deployed at: 0x9BeDc56f547223C1CC37c0187B27676921af875c

💾 Updating deployments.json: chain=314, contract=FWSS_IMPLEMENTATION_ADDRESS, address=0x9BeDc56f547223C1CC37c0187B27676921af875c
  ✓ Updated FWSS_IMPLEMENTATION_ADDRESS=0x9BeDc56f547223C1CC37c0187B27676921af875c for chain 314
  ✓ Updated metadata: commit=c5065eadff437f4d60c69d8ceab7a88f1c95a68f, deployed_at=2026-01-21T12:11:30Z

-----

🔍 Starting automatic contract verification...
Starting batch verification of 1 contracts on chain ID: 314...

Processing: FilecoinWarmStorageService (0x9BeDc56f547223C1CC37c0187B27676921af875c)
Verifying FilecoinWarmStorageService on Filfox (chain ID: 314)...
⠋ Starting verification process...
Verification Result:
✖ ⚠️  Error: Verification failed - bytecode mismatch.

-----

Verifying FilecoinWarmStorageService on Blockscout...
Start verifying contract `0x9BeDc56f547223C1CC37c0187B27676921af875c` deployed on filecoin-mainnet

Submitting verification for [src/FilecoinWarmStorageService.sol:FilecoinWarmStorageService] 0x9BeDc56f547223C1CC37c0187B27676921af875c.
Submitted contract for verification:
        Response: `OK`
        GUID: `9bedc56f547223c1cc37c0187b27676921af875c6970c32b`
        URL: https://filecoin.blockscout.com/address/0x9bedc56f547223c1cc37c0187b27676921af875c
Blockscout verification successful for FilecoinWarmStorageService

-----

Verifying FilecoinWarmStorageService on Sourcify (chain ID: 314)...
Start verifying contract `0x9BeDc56f547223C1CC37c0187B27676921af875c` deployed on filecoin-mainnet
Attempting to verify on Sourcify. Pass the --etherscan-api-key <API_KEY> to verify on Etherscan, or use the --verifier flag to verify on another provider.

Submitting verification for [FilecoinWarmStorageService] "0x9BeDc56f547223C1CC37c0187B27676921af875c".
The recompiled contract partially matches the deployed version
Sourcify verification successful for FilecoinWarmStorageService
Verification Summary for 1 contracts:
----------------------------------------
Successfully verified on all platforms (1/1):
 - FilecoinWarmStorageService
----------------------------------------
All contracts verified successfully on all platforms!
Deploying new FWSS View to Mainnet Setting: - export ETH_KEYSTORE="/path/to/keystore.json" - export PASSWORD="your-password" - export ETH_RPC_URL=https://api.node.glif.io/rpc/v1 - export FWSS_PROXY_ADDRESS="0x8408502033C418E1bbC97cE9ac48E5528F371A9f"

Then running ./deploy-warm-storage-view.sh

  📖 Loading deployment addresses from deployments.json for chain 314
  ✓ Loaded FILECOIN_PAY_ADDRESS=0x23b1e018F08BB982348b15a86ee926eEBf7F4DAa
  ✓ Loaded PDP_VERIFIER_PROXY_ADDRESS=0xBADd0B92C1c71d02E7d520f64c0876538fa2557F
  ✓ Loaded PDP_VERIFIER_IMPLEMENTATION_ADDRESS=0xe2Dc211BffcA499761570E04e8143Be2BA66095f
  ✓ Loaded SESSION_KEY_REGISTRY_ADDRESS=0x74FD50525A958aF5d484601E252271f9625231aB
  ✓ Loaded SERVICE_PROVIDER_REGISTRY_PROXY_ADDRESS=0xf55dDbf63F1b55c3F1D4FA7e339a68AB7b64A5eB
  ✓ Loaded SERVICE_PROVIDER_REGISTRY_IMPLEMENTATION_ADDRESS=0x01293CaFdE24DE89fF26d1A19Bfc4E36CBF74F9B
  ✓ Loaded SIGNATURE_VERIFICATION_LIB_ADDRESS=0x7BdDF92aaBA8a578C3F494729BfAC5190d84acda
  ⊘ Skipped FWSS_PROXY_ADDRESS (already set to 0x8408502033C418E1bbC97cE9ac48E5528F371A9f)
  ✓ Loaded FWSS_IMPLEMENTATION_ADDRESS=0x9BeDc56f547223C1CC37c0187B27676921af875c
  ✓ Loaded FWSS_VIEW_ADDRESS=0x9e4e6699d8F67dFc883d6b0A7344Bd56F7E80B46
  ✓ Loaded ENDORSEMENT_SET_ADDRESS=0x59eFa2e8324E1551d46010d7B0B140eE2F5c726b
Deploying FilecoinWarmStorageServiceStateView from address 0x2127C3a31F54B81B5E9AD1e29C36c420d3D6ecC5...

FilecoinWarmStorageServiceStateView deployed at 0x638a4986332bF9B889E5D7435B966C5ecdE077Fa
💾 Updating deployments.json: chain=314, contract=FWSS_VIEW_ADDRESS, address=0x638a4986332bF9B889E5D7435B966C5ecdE077Fa
  ✓ Updated FWSS_VIEW_ADDRESS=0x638a4986332bF9B889E5D7435B966C5ecdE077Fa for chain 314
  ✓ Updated metadata: commit=d704385279bae88a10e359b26ee048fc6fc8486c, deployed_at=2026-01-21T12:33:00Z
  
 -----
  
  🔍 Starting automatic contract verification...
Starting batch verification of 1 contracts on chain ID: 314...

Processing: FilecoinWarmStorageServiceStateView (0x638a4986332bF9B889E5D7435B966C5ecdE077Fa)
Verifying FilecoinWarmStorageServiceStateView on Filfox (chain ID: 314)...
⠦ Verifying contract on Filfox...
Verification Result:
✖ ⚠️  Unknown verification error occurred.

-----

Verifying FilecoinWarmStorageServiceStateView on Blockscout...
Start verifying contract `0x638a4986332bF9B889E5D7435B966C5ecdE077Fa` deployed on filecoin-mainnet

Submitting verification for [src/FilecoinWarmStorageServiceStateView.sol:FilecoinWarmStorageServiceStateView] 0x638a4986332bF9B889E5D7435B966C5ecdE077Fa.
Submitted contract for verification:
        Response: `OK`
        GUID: `638a4986332bf9b889e5d7435b966c5ecde077fa6970c7e1`
        URL: https://filecoin.blockscout.com/address/0x638a4986332bf9b889e5d7435b966c5ecde077fa
Blockscout verification successful for FilecoinWarmStorageServiceStateView

-----

Start verifying contract `0x638a4986332bF9B889E5D7435B966C5ecdE077Fa` deployed on filecoin-mainnet
Attempting to verify on Sourcify. Pass the --etherscan-api-key <API_KEY> to verify on Etherscan, or use the --verifier flag to verify on another provider.

Submitting verification for [FilecoinWarmStorageServiceStateView] "0x638a4986332bF9B889E5D7435B966C5ecdE077Fa".
Contract successfully verified
Sourcify verification successful for FilecoinWarmStorageServiceStateView
Verification Summary for 1 contracts:
----------------------------------------
Successfully verified on all platforms (1/1):
 - FilecoinWarmStorageServiceStateView
----------------------------------------
All contracts verified successfully on all platforms!

-----
Announcing planned upgrade of the FWSS Contract on Mainnet Since this is a breaking change, I´m going to set the ability to upgrade the contract (AFTER_EPOCH) to 7 days from now:
 CURRENT_EPOCH=$(cast block-number --rpc-url "$ETH_RPC_URL"); AFTER_EPOCH=$((CURRENT_EPOCH + 20160)); echo "Current: $CURRENT_EPOCH, Upgrade after: $AFTER_EPOCH"
 Current: 5689760, Upgrade after: 5709920

Setting these:

  • FWSS_PROXY_ADDRESS=0x8408502033C418E1bbC97cE9ac48E5528F371A9f
  • NEW_FWSS_IMPLEMENTATION_ADDRESS=0x9BeDc56f547223C1CC37c0187B27676921af875c
  • ETH_RPC_URL=https://api.node.glif.io/rpc/v1

Then running ./announce-planned-upgrade.sh

Announcing planned upgrade after 20148 epochs
Sending announcement from owner address: 0x2127C3a31F54B81B5E9AD1e29C36c420d3D6ecC5
announcePlannedUpgrade transaction sent: 0x5b761b719fdc3aec5f698b3d9f47fa74873890802c2e4b4636489b760fe257fb

Countdown timer to the AFTER_EPOCH for which the Mainnet FWSS Contract can be upgraded: https://filecoin.blockscout.com/block/countdown/5709920

@rjan90 rjan90 changed the title [WIP] feat: v1.1.0 FWSS upgrade and documentation feat: v1.1.0 FWSS upgrade and documentation Jan 21, 2026
@rjan90 rjan90 marked this pull request as ready for review January 21, 2026 14:20
@rjan90 rjan90 moved this from ⌨️ In Progress to 🔎 Awaiting review in FOC Jan 21, 2026
@rjan90 rjan90 requested a review from BigLep January 21, 2026 14:20
@BigLep BigLep requested a review from Copilot January 21, 2026 22:13
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR upgrades the FilecoinWarmStorageService and ServiceProviderRegistry contracts to version 1.1.0, along with significant improvements to deployment infrastructure and documentation.

Changes:

  • Bumped contract versions from 1.0.0 to 1.1.0 for FWSS and ServiceProviderRegistry with corresponding test updates
  • Enhanced deployment scripts with automatic deployments.json integration, network-agnostic chain ID detection, and address persistence
  • Added comprehensive upgrade documentation (UPGRADE-PROCESS.md), automated upgrade announcement GitHub workflow, and updated CHANGELOG.md

Reviewed changes

Copilot reviewed 15 out of 15 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
service_contracts/src/FilecoinWarmStorageService.sol Updated VERSION constant from "1.0.0" to "1.1.0"
service_contracts/src/ServiceProviderRegistry.sol Updated VERSION constant from "1.0.0" to "1.1.0"
service_contracts/test/FilecoinWarmStorageService.t.sol Updated version assertion in test from "1.0.0" to "1.1.0"
service_contracts/test/ServiceProviderRegistry.t.sol Updated version assertion in test from "1.0.0" to "1.1.0"
service_contracts/test/ServiceProviderRegistryFull.t.sol Updated version assertion in test from "1.0.0" to "1.1.0"
service_contracts/tools/deploy-warm-storage-implementation-only.sh Added deployments.json integration, network-specific USDFC token handling, and automatic address persistence
service_contracts/tools/deploy-warm-storage-view.sh Added deployments.json integration and automatic address/metadata persistence
service_contracts/tools/set-warm-storage-view.sh Added deployments.json loading and automatic address/metadata updates
service_contracts/tools/deploy-registry.sh New network-agnostic registry deployment script with implementation-only and full proxy deployment modes
service_contracts/tools/deploy-registry-calibnet.sh Updated to be network-agnostic with auto-detect chain ID and conditional proxy deployment
service_contracts/tools/UPGRADE-PROCESS.md New comprehensive documentation for the two-step upgrade process with phase-based runbook
service_contracts/tools/README.md Updated documentation to reference UPGRADE-PROCESS.md and describe two-step upgrade workflow
CHANGELOG.md Added v1.1.0 release entry with features, breaking changes, bug fixes, and documentation updates
.github/workflows/upgrade-announcement.yml New GitHub Action workflow for automated upgrade announcement issue creation
service_contracts/deployments.json Updated deployment addresses for mainnet (314) and calibnet (314159) with new metadata
Comments suppressed due to low confidence (1)

service_contracts/tools/deploy-registry-calibnet.sh:219

  • The deploy-registry-calibnet.sh file now appears to be a duplicate of deploy-registry.sh. According to the PR description, this file was supposed to be removed since deploy-registry.sh is now network-agnostic. Consider removing this file to avoid confusion and maintenance burden of having two identical scripts.
#!/bin/bash
# deploy-registry-calibnet deploys the Service Provider Registry contract to a target network
# Assumption: ETH_KEYSTORE, PASSWORD, ETH_RPC_URL env vars are set to an appropriate eth keystore path and password
# and to a valid ETH_RPC_URL for the target network.
# Assumption: forge, cast, jq are in the PATH
# Assumption: called from contracts directory so forge paths work out
#

# Get script directory and source deployments.sh
SCRIPT_DIR="$(dirname "${BASH_SOURCE[0]}")"
source "$SCRIPT_DIR/deployments.sh"

echo "Deploying Service Provider Registry Contract"

WITH_PROXY=false
for arg in "$@"; do
  case "$arg" in
    --with-proxy)
      WITH_PROXY=true
      ;;
    -h|--help)
      echo "Usage: $(basename "$0") [--with-proxy]"
      echo ""
      echo "Default: deploy implementation only (upgrade-first)."
      echo "  --with-proxy  Also deploy a new proxy and initialize it."
      exit 0
      ;;
    *)
      echo "Error: Unknown option '$arg'"
      echo "Run with --help for usage."
      exit 1
      ;;
  esac
done

if [ "$WITH_PROXY" = "true" ]; then
  echo "Mode: implementation + proxy deployment"
else
  echo "Mode: implementation-only deployment (upgrade-first)"
fi

if [ -z "$ETH_RPC_URL" ]; then
  echo "Error: ETH_RPC_URL is not set"
  exit 1
fi

# Auto-detect chain ID from RPC if not already set
if [ -z "$CHAIN" ]; then
  export CHAIN=$(cast chain-id)
  if [ -z "$CHAIN" ]; then
    echo "Error: Failed to detect chain ID from RPC"
    exit 1
  fi
fi

# Load deployment addresses from deployments.json
load_deployment_addresses "$CHAIN"

if [ -z "$ETH_KEYSTORE" ]; then
  echo "Error: ETH_KEYSTORE is not set"
  exit 1
fi

# Optional: Check if PASSWORD is set (some users might use empty password)
if [ -z "$PASSWORD" ]; then
  echo "Warning: PASSWORD is not set, using empty password"
fi

ADDR=$(cast wallet address --password "$PASSWORD")
echo "Deploying contracts from address $ADDR"

# Get current balance and nonce (cast will use ETH_RPC_URL)
BALANCE=$(cast balance "$ADDR")
echo "Deployer balance: $BALANCE"

NONCE="$(cast nonce "$ADDR")"
echo "Starting nonce: $NONCE"

# Deploy ServiceProviderRegistry implementation
echo ""
echo "=== STEP 1: Deploying ServiceProviderRegistry Implementation ==="
SERVICE_PROVIDER_REGISTRY_IMPLEMENTATION_ADDRESS=$(forge create --password "$PASSWORD" --broadcast --nonce $NONCE src/ServiceProviderRegistry.sol:ServiceProviderRegistry --optimizer-runs 1 --via-ir | grep "Deployed to" | awk '{print $3}')
if [ -z "$SERVICE_PROVIDER_REGISTRY_IMPLEMENTATION_ADDRESS" ]; then
  echo "Error: Failed to extract ServiceProviderRegistry implementation address"
  exit 1
fi
echo "✓ ServiceProviderRegistry implementation deployed at: $SERVICE_PROVIDER_REGISTRY_IMPLEMENTATION_ADDRESS"
NONCE=$(expr $NONCE + "1")

if [ "$WITH_PROXY" = "true" ]; then
  # Deploy ServiceProviderRegistry proxy
  echo ""
  echo "=== STEP 2: Deploying ServiceProviderRegistry Proxy ==="
  # Initialize with no parameters for basic initialization
  INIT_DATA=$(cast calldata "initialize()")
  echo "Initialization calldata: $INIT_DATA"

  REGISTRY_PROXY_ADDRESS=$(forge create --password "$PASSWORD" --broadcast --nonce $NONCE lib/pdp/src/ERC1967Proxy.sol:MyERC1967Proxy --constructor-args $SERVICE_PROVIDER_REGISTRY_IMPLEMENTATION_ADDRESS $INIT_DATA --optimizer-runs 1 --via-ir | grep "Deployed to" | awk '{print $3}')
  if [ -z "$REGISTRY_PROXY_ADDRESS" ]; then
    echo "Error: Failed to extract ServiceProviderRegistry proxy address"
    exit 1
  fi
  echo "✓ ServiceProviderRegistry proxy deployed at: $REGISTRY_PROXY_ADDRESS"

  # Verify deployment by calling version() on the proxy
  echo ""
  echo "=== STEP 3: Verifying Deployment ==="
  VERSION=$(cast call $REGISTRY_PROXY_ADDRESS "version()(string)")
  if [ -z "$VERSION" ]; then
    echo "Warning: Could not verify contract version"
  else
    echo "✓ Contract version: $VERSION"
  fi

  # Get registration fee
  FEE=$(cast call $REGISTRY_PROXY_ADDRESS "REGISTRATION_FEE()(uint256)")
  if [ -z "$FEE" ]; then
      echo "Warning: Could not retrieve registration fee"
      FEE_IN_FIL="unknown"
  else
      echo "✓ Registration fee: $FEE attoFIL"
      FEE_IN_FIL="$FEE attoFIL"
  fi

  # Get burn actor address
  BURN_ACTOR=$(cast call $REGISTRY_PROXY_ADDRESS "BURN_ACTOR()(address)")
  if [ -z "$BURN_ACTOR" ]; then
    echo "Warning: Could not retrieve burn actor address"
  else
    echo "✓ Burn actor address: $BURN_ACTOR"
  fi

  # Get contract version (this should be used instead of hardcoded version)
  CONTRACT_VERSION=$(cast call $REGISTRY_PROXY_ADDRESS "VERSION()(string)")
  if [ -z "$CONTRACT_VERSION" ]; then
      echo "Warning: Could not retrieve contract version"
      CONTRACT_VERSION="Unknown"
  fi
else
  echo ""
  echo "=== STEP 2: Skipping Proxy Deployment ==="
  echo "Use --with-proxy to deploy and initialize a new proxy."
  CONTRACT_VERSION="n/a"
  FEE_IN_FIL="n/a"
  BURN_ACTOR="n/a"
fi

# Summary of deployed contracts
echo ""
echo "=========================================="
echo "=== DEPLOYMENT SUMMARY ==="
echo "=========================================="
echo "ServiceProviderRegistry Implementation: $SERVICE_PROVIDER_REGISTRY_IMPLEMENTATION_ADDRESS"
if [ "$WITH_PROXY" = "true" ]; then
  echo "ServiceProviderRegistry Proxy: $REGISTRY_PROXY_ADDRESS"
fi
echo "=========================================="

# Update deployments.json
if [ -n "$SERVICE_PROVIDER_REGISTRY_IMPLEMENTATION_ADDRESS" ]; then
    update_deployment_address "$CHAIN" "SERVICE_PROVIDER_REGISTRY_IMPLEMENTATION_ADDRESS" "$SERVICE_PROVIDER_REGISTRY_IMPLEMENTATION_ADDRESS"
fi
if [ "$WITH_PROXY" = "true" ] && [ -n "$REGISTRY_PROXY_ADDRESS" ]; then
    update_deployment_address "$CHAIN" "SERVICE_PROVIDER_REGISTRY_PROXY_ADDRESS" "$REGISTRY_PROXY_ADDRESS"
fi
if [ -n "$SERVICE_PROVIDER_REGISTRY_IMPLEMENTATION_ADDRESS" ] || [ -n "$REGISTRY_PROXY_ADDRESS" ]; then
    update_deployment_metadata "$CHAIN"
fi
echo ""
echo "Contract Details:"
echo "  - Version: $CONTRACT_VERSION"
echo "  - Registration Fee: $FEE_IN_FIL (burned)"
echo "  - Burn Actor: $BURN_ACTOR"
CHAIN_LABEL="unknown"
if [ "$CHAIN" = "314159" ]; then
  CHAIN_LABEL="Calibration testnet (314159)"
elif [ "$CHAIN" = "314" ]; then
  CHAIN_LABEL="Filecoin mainnet (314)"
else
  CHAIN_LABEL="Chain ID $CHAIN"
fi
echo "  - Chain: $CHAIN_LABEL"
echo ""
echo "Next steps:"
if [ "$WITH_PROXY" = "true" ]; then
  echo "1. Save the proxy address: export REGISTRY_ADDRESS=$REGISTRY_PROXY_ADDRESS"
  echo "2. Verify the deployment by calling getProviderCount() - should return 0"
  echo "3. Test registration with: cast send --value <registration_fee>attoFIL ..."
  echo "4. Transfer ownership if needed using transferOwnership()"
  echo "5. The registry is ready for provider registrations"
else
  echo "1. Save the implementation address for upgrade announcement"
  echo "2. Proceed with announce-planned-upgrade-registry.sh"
fi
echo ""
if [ "$WITH_PROXY" = "true" ]; then
  echo "To interact with the registry:"
  echo "  View functions:"
  echo "    cast call $REGISTRY_PROXY_ADDRESS \"getProviderCount()(uint256)\""
  echo "    cast call $REGISTRY_PROXY_ADDRESS \"getAllActiveProviders()(uint256[])\""
  echo "  State changes (requires registration fee):"
  echo "    Register as provider (requires proper encoding of PDPData)"
  echo ""
fi

# Automatic contract verification
if [ "${AUTO_VERIFY:-true}" = "true" ]; then
  echo
  echo "🔍 Starting automatic contract verification..."

  pushd "$(dirname $0)/.." >/dev/null
  source tools/verify-contracts.sh
  verify_contracts_batch "$SERVICE_PROVIDER_REGISTRY_IMPLEMENTATION_ADDRESS,src/ServiceProviderRegistry.sol:ServiceProviderRegistry"
  popd >/dev/null
else
  echo
  echo "⏭️  Skipping automatic verification (export AUTO_VERIFY=true to enable)"
fi
echo "=========================================="

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@rvagg
Copy link
Collaborator

rvagg commented Jan 22, 2026

@rjan90 we seem to be missing a step - you deployed a new view contract but FWSS still points to the old:

cast call 0x8408502033C418E1bbC97cE9ac48E5528F371A9f "viewContractAddress()(address)" --rpc-url https://api.node.glif.io/rpc/v1
0x9e4e6699d8F67dFc883d6b0A7344Bd56F7E80B46

You need to set it on FWSS:

cast send 0x8408502033C418E1bbC97cE9ac48E5528F371A9f "setViewContract(address)" 0x638a4986332bF9B889E5D7435B966C5ecdE077Fa --rpc-url https://api.node.glif.io/rpc/v1 --keystore ...

Same for calib.

The new one just removes some methods so this isn't critical or fatal, we're just tightening up the workflow.

Also puts the pressure on us to tag a new synapse because we expose some utility versions of the removed methods, I just don't know if anyone actually uses them anywhere.

@rjan90
Copy link
Collaborator Author

rjan90 commented Jan 22, 2026

@rjan90 we seem to be missing a step - you deployed a new view contract but FWSS still points to the old:

I was planning to set it after the upgrade, since it is a breaking change: #395 (reply in thread). At least from what I could see in the set-warm-storage-view.sh script it asks for the FWSS-proxy, so I did not want to update the view-contract before we had switched to the new implementation

Copy link
Contributor

@BigLep BigLep left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for working all this through @rjan90 and cleaning stuff up. You don't need to incorporate all my comments. These were the things that came to mind in trying to understand the process. It would probably be useful for me to look at a fresh head, but wanted to get some initial thoughts out in case it helps with 2026-01-22 conversation.

See [`service_contracts/deployments.json`](./service_contracts/deployments.json) for current Mainnet (chain 314) and Calibnet (chain 314159) contract addresses.

### Added
- `ProviderIdSet` contract for efficient provider ID management ([#386](https://github.com/FilOzone/filecoin-services/pull/386))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we should talk more about how this is being used within FOC (i.e., "endorsed SP to meet GA durability story"). Basically we have a generic contract for storing a set of ids and we've blessed one particular instance of the contract to be the "endorsed set of provider ids".


See [`service_contracts/deployments.json`](./service_contracts/deployments.json) for current Mainnet (chain 314) and Calibnet (chain 314159) contract addresses.

### Added
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not required, but it might be useful to separate which things are useful for consumers vs. maintainers.

- `WARM_STORAGE_PROXY_ADDRESS` → `FWSS_PROXY_ADDRESS`
- `WARM_STORAGE_VIEW_ADDRESS` → `FWSS_VIEW_ADDRESS`
- Added `SIGNATURE_VERIFICATION_LIB_ADDRESS`
- **BREAKING**: Rail settlement required before dataset deletion ([#377](https://github.com/FilOzone/filecoin-services/pull/377))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Given we fundamentally changed an API, should this be a major version bump? (Maybe this gets to documenting how we're mapping semver to this...)

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah .. good point; but what is the scope that we have to consider for this? since we have separate repos we're going to have to tag the ones not in here separately and then lump everything else together for a semver

I'm fine with proper semver for this but it's going to come as a surprise to people, we'll just have to tell them we're following semver so any breaking change is going to get a semver-major and feature addition a minor. In this change set we have two breakages from this repo, you could argue 3:

  • Settlement required before deletion, breakage signal matters here for downstream clients that want to perform deletion - in practice it's entirely manageable by us but it's a reasonable signal
  • Removal of the unnecessary methods off the view contract - in this case the SDK has accessors for them and those won't work anymore, so it's real breakage
  • Moving the modifyRail into AddPieces - this one's not clearly breakage, but you could make the argument for it because the user has to start paying at a different point and maybe there's some person or software out there that makes assumptions about rail state that this impacts (very doubtful, but possible)

So, if you want to pull the 2.0.0 trigger I'm behind that, but it'll require communication.

@BigLep
Copy link
Contributor

BigLep commented Jan 23, 2026

Other 2026-01-22 things that either came up in conversation or slack...

  1. In as much as we're creating the checklist of things to do with a contract upgrade, we need to have a step to update filecoin.cloud addresses (unless that process gets fully automated, but even if we automate, I assume we're still going to have a human approve the PR, at which point the checklist here needs to go make sure the filecion-cloud PR gets merged).
  2. Unless we have a strong reason, lets maybe keep simple with just having a release issue, which like lotus includes the user-focused information (e.g., what's in scope, addresses, changelog link, etc) and then the release engineer checklist can be below.

@BigLep BigLep linked an issue Jan 26, 2026 that may be closed by this pull request
rjan90 and others added 21 commits January 30, 2026 10:10
…atibility and chain ID handling

refactor: enhance deploy-registry-calibnet.sh for better network compatibility and chain ID handling
docs: update upgrade-process document
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Integrated into deploy-registry.sh which is network agnositc
chore: make implementation "mode" wording clearer
chore: rename workflow to `create-upgrade-announcement-issue.yml`
fix: address `UPGRADE-PROCESS` comments
Co-authored-by: Steve Loeppky <biglep@filoz.org>
Co-authored-by: Steve Loeppky <biglep@filoz.org>
fix: update migrate data handling in upgrade script
fix: incorporate PR feedback in UPGRADE-PROCESS.md
fix: notify stakeholders
@rjan90 rjan90 force-pushed the phi/document-upgrade branch from 593e57a to 4191992 Compare January 30, 2026 18:14
@BigLep BigLep changed the title feat: v1.1.0 FWSS upgrade and documentation feat: v1.1.0 FWSS upgrade documentation Jan 30, 2026
@BigLep BigLep changed the title feat: v1.1.0 FWSS upgrade documentation feat: v1.1.0 FWSS upgrade scripts and documentation Jan 30, 2026
Move the issue creation logic from inline workflow JavaScript to a separate script at .github/scripts/create-upgrade-announcement.js.
@BigLep
Copy link
Contributor

BigLep commented Feb 2, 2026

Until FilOzone/synapse-sdk#567 is implemented, we'll need to have a manual step about updating Synapse after a contract release.

- Update script to generate combined release issue with user-facing
  info at top and release engineer checklist below (Lotus-style)
- Simplify UPGRADE-PROCESS.md to focus on FWSS as the primary path
- Move ServiceProviderRegistry and StateView to separate "Upgrading
  Other Contracts" section since they are rarely upgraded
- Remove upgrade_fwss workflow input (FWSS always included)
- Mark Registry/StateView inputs as "(Rare)" in workflow
- Align script section headers with UPGRADE-PROCESS.md

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Copy link
Contributor

@BigLep BigLep left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it would be useful to look at what sucessful script or github action run for mainnet and calibration look like (without having to parse the JS logic). I didn't see a successful run at https://github.com/FilOzone/filecoin-services/actions/workflows/create-upgrade-announcement-issue.yml

I did a quick pass through previous comments. This one still seemed relevant: #384 (comment)

### Available Scripts
### Deployment Scripts

- `deploy-warm-storage-calibnet.sh` - Deploy FilecoinWarmStorageService only (requires existing PDPVerifier and FilecoinPayV1 contracts)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Clarify if this only deploys to calbiration?
Make clear if this is deploying a proxy and implementation?

(Side: this is where the table idea from https://github.com/FilOzone/filecoin-services/pull/384/changes#r2715169096 I think could be helpful.)

### Deployment Scripts

- `deploy-warm-storage-calibnet.sh` - Deploy FilecoinWarmStorageService only (requires existing PDPVerifier and FilecoinPayV1 contracts)
- `deploy-warm-storage-implementation-only.sh` - Deploy FWSS implementation only; loads defaults from `deployments.json` and writes back new implementation + metadata (reuses existing signature lib unless redeployed)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What networks does it deploy to? I'm asking given some scripts specify a network name in the file name.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It can deploy to both. I´m fixing up a lot of the naming issues with regards to the scripts in a PR ontop of this: #414

chore: address PR review comments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: ✔️ Approved by reviewer

3 participants