Description of @Rod Vagg ‘s E2E local testing set up, current as of September 5, 2025

Components:

  1. Curio - pdpv0rename branch
  2. Filecoin Services contracts - ”WarmStorage” contract and its friends linked as submodules to specific commits
  3. Synapse SDK

Tools and Wallets

Foundry tools (including forge and cast) are used variously in this process. You can install them from here and keep them updated with foundryup: https://github.com/foundry-rs/foundry?tab=readme-ov-file#installation

The Curio setup will require 2 BLS wallets, described below. It will also require an Ethereum style wallet (delegated) which is funded. This is also described below. But since you need two of them, they could be made with Metamask, Lotus or even cast wallet new. Either way, you should import them into Foundry keystores, you can use cast wallet import <name> --private-key to set up a keystore. Password optional (password-less is fine for testing accounts on Calibnet). You should remember the names of them, one is for your PDP miner, and the other is for your contract deployment and client interactions. The keystores will be located in ~/.foundry/keystores/ and you can recover private keys when you need them, e.g. with cast wallet private-key --keystore ~/.foundry/keystores/key-alias.

Use the calibnet faucet to put some tFIL in your wallets: https://faucet.calibnet.chainsafe-fil.io/

Obtaining USDFC

Your client wallet will need USDFC tokens in order to make deals. This can be done in one of two ways:

  1. Use the calibnet USDFC faucet (small amounts): https://forest-explorer.chainsafe.dev/faucet/calibnet_usdfc
  2. Mint USDFC for yourself in larger volume: https://stg.usdfc.net/#/ (how this works is beyond the scope of this doc but this is worth figuring out so you’re not limited by the faucet’s rate limiting)

Curio Setup

Thankfully this is mostly a one-off process, once set up, Curio can be recompiled, cleared out and restarted with new contracts (mostly).

James’ Curio setup guides are a useful step-wise process to setting up a fresh Curio node just for running PDP: