Enable PDP

This section enables Proof of Data Possession (PDP) for a Storage Provider node using Curio. These steps guide you through running a standalone PDP service using Curio and pdptool.

Attach Storage Locations

With Curio running with the GUI layer:

curio run --layers=gui

Run the following commands in your Curio CLI to attach storage paths:

curio cli storage attach --init --seal /fast-storage/path
curio cli storage attach --init --store /long-term-storage/path

Your fast-storage path should point to high-performance storage media such as NVMe or SSD


Add a PDP Configuration Layer

Browse to the Configurations page of the Curio GUI.

Create a new layer named pdp. Enable and set to true the following under Subsystems:

You may find it helpful to search for the setting names in your browser.

  • EnableParkPiece

  • EnablePDP

  • EnableCommP

  • EnableMoveStorage

In the HTTP section:

  • ✅ Enable: true

  • 🌐 DomainName: your domain (e.g., pdp.mydomain.com)

  • 📡 ListenAddress: 0.0.0.0:443

You must point your domain’s A record to your server’s public IP address for Let’s Encrypt to issue a certificate.


Set Up PDP Service Keys

Build the pdptool:

cd curio/cmd/pdptool
go build .

Generate a service secret:

./pdptool create-service-secret
# Example output:

-----BEGIN PUBLIC KEY-----
LxP9MzVmHdC7KwYBvNAo1jXuIRfGXqQyo2JzE4Uctn0a5eFZbs6Wlvq3dKYgphTD
XAqRsm38LPt2iVcGb9MruZJxEkBhO71wDdNyaFMoXpCJnUqRAezvKlfbIg==
-----END PUBLIC KEY-----

Browse to the PDP page of the Curio GUI and in the Services section:

  • Select Add PDP Service

  • Input a Service Name of your choice (e.g. pdp-service)

  • Copy the previously generated public key into the Public Key field.

  • Select Add Service


Import your Filecoin Wallet Private Key:

There are several ways to obtain private keys for Ethereum addresses. For this guide, we will use a new delegated Filecoin wallet address.

Create a new delegated wallet:

lotus wallet new delegated
# Example output:

t410fuo4dghaeiqzokiqnxruzdr6e3cjktnxprrc56bi

You can display your Lotus wallets at any time by running:

lotus wallet list

Export & convert your new delegated wallet address private key:

lotus wallet export <your-delegated-wallet-address> | xxd -r -p | jq -r '.PrivateKey' | base64 -d | xxd -p -c 32
# Example output:

d4c2e3f9a716bb0e47fa91b2cf4a29870be3c5982fd6eafed71e8ac3f9c0b12

Browse to the PDP page of the Curio GUI and in the Owner Address section:

  • Select Import Key

  • Copy the previously generated private wallet key into the Private Key (Hex) field.

  • Select Import Key

Make sure to send a small amount of FIL to your 0x wallet - we recommend 5 FIL to ensure uninterrupted PDP operation during initial setup and testing.


Restart and Verify

Restart Curio with both layers:

curio run --layers=gui,pdp
sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/curio

Test the PDP service:

./pdptool ping --service-url https://your-domain.com --service-name <ServiceName>

Expected output:

Ping successful: Service is reachable and JWT token is valid.

Note: The first ping often fails. Try again after a short delay.


🎉 You’re Ready!

You’ve successfully launched a PDP-enabled Filecoin Storage Provider stack. Your system is now:

  • ✅ Syncing with the Filecoin network via Lotus

  • ✅ Recording deal and sector metadata in YugabyteDB

  • ✅ Operating Curio to manage sealing and coordination

  • ✅ Submitting Proof of Data Possession to verify storage integrity


🔜 Next Steps

  • 🚙 Take PDP for a test drive with the Use PDP guide

  • 🧭 Monitor logs and metrics

  • 💬 Join the community - Filecoin Slack - #fil-pdp

Last updated

Was this helpful?