diff --git a/commands/station.js b/commands/station.js index efcc78de..d139b30e 100644 --- a/commands/station.js +++ b/commands/station.js @@ -141,7 +141,12 @@ export const station = async ({ json, experimental }) => { }), runPingLoop({ STATION_ID }), runMachinesLoop({ STATION_ID }), - runUpdateContractsLoop({ provider, abi, contracts }), + runUpdateContractsLoop({ + provider, + abi, + contracts, + onActivity: (activity) => activities.submit(activity) + }), runUpdateRewardsLoop({ contracts, ethAddress, diff --git a/lib/contracts.js b/lib/contracts.js index e6450b9b..f2196f44 100644 --- a/lib/contracts.js +++ b/lib/contracts.js @@ -8,9 +8,10 @@ const { CONTRACT_ADDRESSES_IPNS_KEY = 'k51qzi5uqu5dmaqrefqazad0ca8b24fb79zlacfjw2awdt5gjf2cr6jto5jyqe' } = process.env -export const runUpdateContractsLoop = async ({ provider, abi, contracts }) => { +export const runUpdateContractsLoop = async ({ provider, abi, contracts, onActivity }) => { while (true) { - const delay = 10 * 60 * 1000 // 10 minutes + const delayInMinutes = 10 + const delay = delayInMinutes * 60 * 1000 // 10 minutes const jitter = Math.random() * 20_000 - 10_000 // +- 10 seconds try { await timers.setTimeout(delay + jitter) @@ -18,9 +19,17 @@ export const runUpdateContractsLoop = async ({ provider, abi, contracts }) => { if (err.name === 'AbortError') return throw err } - const newContracts = await getContractsWithRetry({ provider, abi }) - contracts.splice(0) - contracts.push(...newContracts) + try { + const newContracts = await getContractsWithRetry({ provider, abi }) + contracts.splice(0) + contracts.push(...newContracts) + } catch (err) { + console.error('Failed to update the list of contract addresses. Will retry later.', err) + onActivity({ + type: 'error', + message: `Cannot update scheduled rewards. Will retry in ${delayInMinutes} minutes.` + }) + } } }