Skip to content

FilBeamOperator Contract

Complete reference documentation for the FilBeamOperator smart contract.

The FilBeamOperator contract manages:

  • Usage recording on-chain
  • Payment rail settlement (CDN and cache-miss)
  • Service termination
NetworkAddress
Calibration0x5991E4F9fcEF4AE23959eE03638B4688A7e1EcfF
Mainnet0x9E90749D298C4ca43Bb468CA859Dfe167F9CdCf2

Records CDN and cache-miss usage on-chain.

function recordUsageRollups(
uint256 toEpoch,
uint256[] calldata dataSetIds,
uint256[] calldata cdnBytesUsed,
uint256[] calldata cacheMissBytesUsed
) external

Access: FilBeam operator controller only

Parameters:

ParameterTypeDescription
toEpochuint256Filecoin epoch up to which usage is reported
dataSetIdsuint256[]Array of dataset IDs
cdnBytesUseduint256[]Total CDN egress bytes per dataset
cacheMissBytesUseduint256[]Cache-miss bytes per dataset

Notes:

  • Called by FilBeam’s usage-reporter worker
  • Each array must have the same length
  • Epochs are 30-second intervals on Filecoin

Field Details:

FieldDescription
toEpochFilecoin epoch up to which usage is reported. Convert to timestamp: genesisTimestamp + (epoch × 30000)
dataSetIdsuint256[]
cdnBytesUsedTotal CDN egress per dataset (includes both cache hits and cache misses)
cacheMissBytesUsedCache miss bytes per dataset - basis for storage provider compensation

Epoch Conversion:

// Genesis timestamps (milliseconds)
const CALIBRATION_GENESIS = 1667326380000
const MAINNET_GENESIS = 1598306400000
const EPOCH_DURATION = 30000 // 30 seconds
function epochToDate(epoch, network = 'calibration') {
const genesis = network === 'mainnet' ? MAINNET_GENESIS : CALIBRATION_GENESIS
return new Date(genesis + (Number(epoch) * EPOCH_DURATION))
}

Settles the CDN rail for specified datasets, transferring funds to FilBeam.

function settleCDNPaymentRails(uint256[] calldata dataSetIds) external

Access: Public (anyone can call)

Parameters:

ParameterTypeDescription
dataSetIdsuint256[]Array of dataset IDs to settle

Notes:

  • Funds flow to the FilBeam operator
  • Called automatically by FilBeam’s payment-settler worker
  • Anyone can trigger settlement, but only the designated payee receives funds

Example:

import { createWalletClient, createPublicClient, http } from 'viem'
import { privateKeyToAccount } from 'viem/accounts'
import { filecoinCalibration } from 'viem/chains'
const FilBeamOperatorABI = [
{
type: 'function',
name: 'settleCDNPaymentRails',
inputs: [{ name: 'dataSetIds', type: 'uint256[]' }],
outputs: [],
stateMutability: 'nonpayable'
}
]
const FILBEAM_OPERATOR_ADDRESS = '0x5991E4F9fcEF4AE23959eE03638B4688A7e1EcfF'
const account = privateKeyToAccount(process.env.PRIVATE_KEY)
const publicClient = createPublicClient({
chain: filecoinCalibration,
transport: http()
})
const walletClient = createWalletClient({
account,
chain: filecoinCalibration,
transport: http()
})
async function settleCDNPayments(dataSetIds) {
const { request } = await publicClient.simulateContract({
account,
abi: FilBeamOperatorABI,
address: FILBEAM_OPERATOR_ADDRESS,
functionName: 'settleCDNPaymentRails',
args: [dataSetIds.map(id => BigInt(id))]
})
const hash = await walletClient.writeContract(request)
const receipt = await publicClient.waitForTransactionReceipt({ hash })
return receipt
}
// Usage
await settleCDNPayments(['12345', '67890'])

Settles cache-miss payment rails for specified datasets. Storage providers use this to claim their earnings.

function settleCacheMissPaymentRails(uint256[] calldata dataSetIds) external

Access: Public (anyone can call)

Parameters:

ParameterTypeDescription
dataSetIdsuint256[]Array of dataset IDs to settle

Notes:

  • Funds flow to the registered storage provider for each dataset
  • Anyone can trigger settlement, but only the designated storage provider receives funds
  • See Settle Payment Rails for a complete guide

Example:

import { createWalletClient, createPublicClient, http } from 'viem'
import { privateKeyToAccount } from 'viem/accounts'
import { filecoinCalibration } from 'viem/chains'
const FilBeamOperatorABI = [
{
type: 'function',
name: 'settleCacheMissPaymentRails',
inputs: [{ name: 'dataSetIds', type: 'uint256[]' }],
outputs: [],
stateMutability: 'nonpayable'
}
]
const FILBEAM_OPERATOR_ADDRESS = '0x5991E4F9fcEF4AE23959eE03638B4688A7e1EcfF'
const account = privateKeyToAccount(process.env.SP_PRIVATE_KEY)
const publicClient = createPublicClient({
chain: filecoinCalibration,
transport: http()
})
const walletClient = createWalletClient({
account,
chain: filecoinCalibration,
transport: http()
})
async function settleCacheMissPayments(dataSetIds) {
const { request } = await publicClient.simulateContract({
account,
abi: FilBeamOperatorABI,
address: FILBEAM_OPERATOR_ADDRESS,
functionName: 'settleCacheMissPaymentRails',
args: [dataSetIds.map(id => BigInt(id))]
})
const hash = await walletClient.writeContract(request)
const receipt = await publicClient.waitForTransactionReceipt({ hash })
return receipt
}
// Usage
await settleCacheMissPayments(['12345', '67890'])

Terminates CDN service for a dataset.

function terminateCDNPaymentRails(uint256 dataSetId) external

Access: FilBeam operator controller only

Parameters:

ParameterTypeDescription
dataSetIduint256Dataset ID to terminate

Notes:

  • Called by FilBeam’s terminator worker when service ends
  • Handles cleanup of payment rails and final settlement

Sets the FilBeam operator controller address.

function setFilBeamOperatorController(address _filBeamOperatorController) external

Access: Owner only

Parameters:

ParameterTypeDescription
_filBeamOperatorControlleraddressNew controller address

Transfers the FWSS FilBeam controller to a new address.

function transferFwssFilBeamController(address newController) external

Access: Owner only

Parameters:

ParameterTypeDescription
newControlleraddressNew FWSS controller address

[
{
"type": "function",
"name": "recordUsageRollups",
"inputs": [
{ "name": "toEpoch", "type": "uint256" },
{ "name": "dataSetIds", "type": "uint256[]" },
{ "name": "cdnBytesUsed", "type": "uint256[]" },
{ "name": "cacheMissBytesUsed", "type": "uint256[]" }
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "settleCDNPaymentRails",
"inputs": [
{ "name": "dataSetIds", "type": "uint256[]" }
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "settleCacheMissPaymentRails",
"inputs": [
{ "name": "dataSetIds", "type": "uint256[]" }
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "terminateCDNPaymentRails",
"inputs": [
{ "name": "dataSetId", "type": "uint256" }
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "setFilBeamOperatorController",
"inputs": [
{ "name": "_filBeamOperatorController", "type": "address" }
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "transferFwssFilBeamController",
"inputs": [
{ "name": "newController", "type": "address" }
],
"outputs": [],
"stateMutability": "nonpayable"
}
]
MethodAccess
recordUsageRollupsFilBeam operator controller
settleCDNPaymentRailsPublic
settleCacheMissPaymentRailsPublic
terminateCDNPaymentRailsFilBeam operator controller
setFilBeamOperatorControllerOwner
transferFwssFilBeamControllerOwner