Deploy a contract implementing the interface IFluidClient. Essentially the client must implement batchReward() and getUtilityVars(), with the former emitting the event Reward for each reward paid out and the latter returning your desired utility variables.
Update the registry by calling updateUtilityClients in Registry.sol. This requires the above client, an address for the relevant token, and a name for the client. This call must be made by the operator, which is currently a centralised entity, with plans in the works to decentralise this responsibility to the DAO.
Update the automation used by the offchain worker. Namely, update ENV_FLU_ETHEREUM_UTILITY_CONTRACTS in the application server for the given network (automation/<network>/application-server/mainnet.yml) to include the client name and address as set in the previous step. In the worker server and spooler automation (automation/<network>/worker-server/mainnet.yml and automation/<network>/worker-spooler/mainnet.yml respectively), update ENV_FLU_ETHEREUM_UTILITY_TOKEN_DETAILS to include the client name, token name, and token decimals. For example, adding Wombat:
Set up an instance of microservice-ethereum-track-winners in automation/<network>/track-winners/mainnet.yml, using the following template:
- TRACK_WINNERS_<TOKEN>:SERVICE_NAME:microservice-<network>-track-winners-<token>ENV_FLU_WORKER_ID:<network>-microservice-<network>-track-winners-<token>ENV_FLU_ETHEREUM_CONTRACT_ADDR:"contract address of the underlying token"ENV_FLU_ETHEREUM_UNDERLYING_TOKEN_NAME:TOKEN_NAMEENV_FLU_ETHEREUM_UNDERLYING_TOKEN_DECIMALS:6