diff --git a/backend/bin/deal-observer-backend.js b/backend/bin/deal-observer-backend.js index 8359c0b..831e51f 100644 --- a/backend/bin/deal-observer-backend.js +++ b/backend/bin/deal-observer-backend.js @@ -8,7 +8,9 @@ import '../lib/instrument.js' import { createInflux } from '../lib/telemetry.js' import { getChainHead, rpcRequest } from '../lib/rpc-service/service.js' import { fetchDealWithHighestActivatedEpoch, countStoredActiveDeals, observeBuiltinActorEvents } from '../lib/deal-observer.js' +import { indexPieces } from '../lib/piece-indexer.js' import { findAndSubmitUnsubmittedDeals, submitDealsToSparkApi } from '../lib/spark-api-submit-deals.js' +import { getDealPayloadCid } from '../lib/piece-indexer-service.js' const { INFLUXDB_TOKEN, @@ -23,8 +25,7 @@ if (!INFLUXDB_TOKEN) { assert(SPARK_API_BASE_URL, 'SPARK_API_BASE_URL required') assert(SPARK_API_TOKEN, 'SPARK_API_TOKEN required') -const OBSERVE_ACTOR_EVENTS_LOOP_INTERVAL = 10 * 1000 -const SPARK_API_SUBMIT_DEALS_LOOP_INTERVAL = 10 * 1000 +const LOOP_INTERVAL = 10 * 1000 // Filecoin will need some epochs to reach finality. // We do not want to fetch deals that are newer than the current chain head - 940 epochs. @@ -69,12 +70,12 @@ const observeActorEventsLoop = async (makeRpcRequest, pgPool) => { if (INFLUXDB_TOKEN) { recordTelemetry(`loop_${slug(LOOP_NAME, '_')}`, point => { - point.intField('interval_ms', OBSERVE_ACTOR_EVENTS_LOOP_INTERVAL) + point.intField('interval_ms', LOOP_INTERVAL) point.intField('duration_ms', dt) }) } - if (dt < OBSERVE_ACTOR_EVENTS_LOOP_INTERVAL) { - await timers.setTimeout(OBSERVE_ACTOR_EVENTS_LOOP_INTERVAL - dt) + if (dt < LOOP_INTERVAL) { + await timers.setTimeout(LOOP_INTERVAL - dt) } } } @@ -108,20 +109,49 @@ const sparkApiSubmitDealsLoop = async (pgPool, { sparkApiBaseUrl, sparkApiToken, if (INFLUXDB_TOKEN) { recordTelemetry(`loop_${slug(LOOP_NAME, '_')}`, point => { - point.intField('interval_ms', SPARK_API_SUBMIT_DEALS_LOOP_INTERVAL) + point.intField('interval_ms', LOOP_INTERVAL) point.intField('duration_ms', dt) }) recordTelemetry('submitted_deals_stats', point => { point.intField('submitted_deals', numberOfSubmittedDeals) }) } - if (dt < OBSERVE_ACTOR_EVENTS_LOOP_INTERVAL) { - await timers.setTimeout(SPARK_API_SUBMIT_DEALS_LOOP_INTERVAL - dt) + if (dt < LOOP_INTERVAL) { + await timers.setTimeout(LOOP_INTERVAL - dt) + } + } +} + +export const pieceIndexerLoop = async (makeRpcRequest, getDealPayloadCid, pgPool) => { + const LOOP_NAME = 'Piece Indexer' + while (true) { + const start = Date.now() + // Maximum number of deals to index in one loop iteration + const maxDeals = 1000 + try { + indexPieces(makeRpcRequest, getDealPayloadCid, pgPool, maxDeals) + } catch (e) { + console.error(e) + Sentry.captureException(e) + } + const dt = Date.now() - start + console.log(`Loop "${LOOP_NAME}" took ${dt}ms`) + + // For local monitoring and debugging, we can omit sending data to InfluxDB + if (INFLUXDB_TOKEN) { + recordTelemetry(`loop_${slug(LOOP_NAME, '_')}`, point => { + point.intField('interval_ms', LOOP_INTERVAL) + point.intField('duration_ms', dt) + }) + } + if (dt < LOOP_INTERVAL) { + await timers.setTimeout(LOOP_INTERVAL - dt) } } } await Promise.all([ + pieceIndexerLoop(rpcRequest, getDealPayloadCid, pgPool), observeActorEventsLoop(rpcRequest, pgPool), sparkApiSubmitDealsLoop(pgPool, { sparkApiBaseUrl: SPARK_API_BASE_URL, diff --git a/backend/lib/config.js b/backend/lib/config.js index 9f01b37..9073b5b 100644 --- a/backend/lib/config.js +++ b/backend/lib/config.js @@ -1,5 +1,6 @@ const { RPC_URLS = 'https://api.node.glif.io/rpc/v0', + PIECE_INDEXER_URL = 'https://pix.filspark.com', GLIF_TOKEN } = process.env @@ -15,5 +16,6 @@ if (RPC_URL.includes('glif') && GLIF_TOKEN) { export { RPC_URL, - rpcHeaders + rpcHeaders, + PIECE_INDEXER_URL } diff --git a/backend/lib/deal-observer.js b/backend/lib/deal-observer.js index f3da522..6299c1d 100644 --- a/backend/lib/deal-observer.js +++ b/backend/lib/deal-observer.js @@ -1,11 +1,10 @@ /** @import {Queryable} from '@filecoin-station/deal-observer-db' */ -/** @import { BlockEvent } from './rpc-service/data-types.js' */ /** @import { Static } from '@sinclair/typebox' */ -import assert from 'node:assert' import { getActorEvents, getActorEventsFilter } from './rpc-service/service.js' import { ActiveDealDbEntry } from '@filecoin-station/deal-observer-db/lib/types.js' import { Value } from '@sinclair/typebox/value' +import { convertBlockEventToActiveDealDbEntry } from './utils.js' /** * @param {number} blockHeight @@ -15,10 +14,9 @@ import { Value } from '@sinclair/typebox/value' */ export async function observeBuiltinActorEvents (blockHeight, pgPool, makeRpcRequest) { const eventType = 'claim' - const activeDeals = await getActorEvents(getActorEventsFilter(blockHeight, eventType), makeRpcRequest) - assert(activeDeals !== undefined, `No ${eventType} events found in block ${blockHeight}`) - console.log(`Observed ${activeDeals.length} ${eventType} events in block ${blockHeight}`) - await storeActiveDeals(activeDeals, pgPool) + const blockEvents = await getActorEvents(getActorEventsFilter(blockHeight, eventType), makeRpcRequest) + console.log(`Observed ${blockEvents.length} ${eventType} events in block ${blockHeight}`) + await storeActiveDeals(blockEvents.map((event) => convertBlockEventToActiveDealDbEntry(event)), pgPool) } /** @@ -42,26 +40,14 @@ export async function countStoredActiveDeals (pgPool) { } /** - * @param {Static[]} activeDeals + * @param {Static[]} activeDeals * @param {Queryable} pgPool * @returns {Promise} * */ export async function storeActiveDeals (activeDeals, pgPool) { - const transformedDeals = activeDeals.map((deal) => ( - { - activated_at_epoch: deal.height, - miner_id: deal.event.provider, - client_id: deal.event.client, - piece_cid: deal.event.pieceCid, - piece_size: deal.event.pieceSize, - term_start_epoch: deal.event.termStart, - term_min: deal.event.termMin, - term_max: deal.event.termMax, - sector_id: deal.event.sector, - payload_cid: null - })) - - const startInserting = Date.now() + if (activeDeals.length === 0) { + return + } try { // Insert deals in a batch const insertQuery = ` @@ -89,34 +75,36 @@ export async function storeActiveDeals (activeDeals, pgPool) { ) ` await pgPool.query(insertQuery, [ - transformedDeals.map(deal => deal.activated_at_epoch), - transformedDeals.map(deal => deal.miner_id), - transformedDeals.map(deal => deal.client_id), - transformedDeals.map(deal => deal.piece_cid), - transformedDeals.map(deal => deal.piece_size), - transformedDeals.map(deal => deal.term_start_epoch), - transformedDeals.map(deal => deal.term_min), - transformedDeals.map(deal => deal.term_max), - transformedDeals.map(deal => deal.sector_id) + activeDeals.map(deal => deal.activated_at_epoch), + activeDeals.map(deal => deal.miner_id), + activeDeals.map(deal => deal.client_id), + activeDeals.map(deal => deal.piece_cid), + activeDeals.map(deal => deal.piece_size), + activeDeals.map(deal => deal.term_start_epoch), + activeDeals.map(deal => deal.term_min), + activeDeals.map(deal => deal.term_max), + activeDeals.map(deal => deal.sector_id) ]) - - // Commit the transaction if all inserts are successful - console.log(`Inserting ${activeDeals.length} deals took ${Date.now() - startInserting}ms`) } catch (error) { // If any error occurs, roll back the transaction - // TODO: Add sentry entry for this error - // https://github.com/filecoin-station/deal-observer/issues/28 - console.error('Error inserting deals:', error.message) + throw Error('Error inserting deals', { cause: error }) } } /** - * @param {Queryable} pgPool - * @param {string} query - * @returns {Promise>>} - */ -async function loadDeals (pgPool, query) { - const result = (await pgPool.query(query)).rows.map(deal => { + * @param {Queryable} pgPool + * @param {string} query + * @param {Array} args + * @returns {Promise>>} + */ +export async function loadDeals (pgPool, query, args = []) { + const result = (await pgPool.query(query, args)).rows.map(deal => { + // SQL used null, typebox needs undefined for null values + Object.keys(deal).forEach(key => { + if (deal[key] === null) { + deal[key] = undefined + } + }) return Value.Parse(ActiveDealDbEntry, deal) } ) diff --git a/backend/lib/piece-indexer-service.js b/backend/lib/piece-indexer-service.js new file mode 100644 index 0000000..68c566b --- /dev/null +++ b/backend/lib/piece-indexer-service.js @@ -0,0 +1,34 @@ +import { Type } from '@sinclair/typebox' +import { Value } from '@sinclair/typebox/value' +import { PIECE_INDEXER_URL } from './config.js' +import pRetry from 'p-retry' + +const PieceIndexerResponse = Type.Object({ + samples: Type.Array(Type.String()) +}) + +/** + * @param {string} providerId + * @param {string} pieceCid + * @returns {Promise} + */ +export const getDealPayloadCid = async (providerId, pieceCid) => { + const url = PIECE_INDEXER_URL + '/sample/' + providerId + '/' + pieceCid + try { + const response = await pRetry(async () => await fetch(url, { + method: 'GET', + headers: { 'content-type': 'application/json' } + }), { retries: 5 }) + const json = await response.json() + try { + const parsedPixResponse = Value.Parse(PieceIndexerResponse, json) + return parsedPixResponse.samples.length === 0 + ? null + : parsedPixResponse.samples[0] + } catch (e) { + throw new Error(`Failed to parse response from piece indexer. The response was : ${JSON.stringify(json)}`, { cause: e }) + } + } catch (e) { + throw new Error('Failed to make RPC request.', { cause: e }) + } +} diff --git a/backend/lib/piece-indexer.js b/backend/lib/piece-indexer.js new file mode 100644 index 0000000..ab774d7 --- /dev/null +++ b/backend/lib/piece-indexer.js @@ -0,0 +1,65 @@ +import { loadDeals } from './deal-observer.js' +import * as util from 'node:util' +import { getMinerPeerId } from './rpc-service/service.js' + +/** @import {Queryable} from '@filecoin-station/deal-observer-db' */ +/** @import { Static } from '@sinclair/typebox' */ +/** @import { ActiveDealDbEntry } from '@filecoin-station/deal-observer-db/lib/types.js' */ + +/** + * + * @param {function} makeRpcRequest + * @param {function} getDealPayloadCid + * @param {Queryable} pgPool + * @param {number} maxDeals + * @returns {Promise} + */ +export const indexPieces = async (makeRpcRequest, getDealPayloadCid, pgPool, maxDeals) => { + for (const deal of await fetchDealsWithNoPayloadCid(pgPool, maxDeals)) { + const minerPeerId = await getMinerPeerId(deal.miner_id, makeRpcRequest) + const payloadCid = await getDealPayloadCid(minerPeerId, deal.piece_cid) + if (payloadCid) { + deal.payload_cid = payloadCid + await updatePayloadInActiveDeal(pgPool, deal) + } + } +} + +/** + * @param {Queryable} pgPool + * @param {number} maxDeals + * @returns {Promise>>} + */ +export async function fetchDealsWithNoPayloadCid (pgPool, maxDeals) { + const query = 'SELECT * FROM active_deals WHERE payload_cid IS NULL ORDER BY activated_at_epoch ASC LIMIT $1' + return await loadDeals(pgPool, query, [maxDeals]) +} + +/** + * @param {Queryable} pgPool + * @param {Static} deal + * @returns { Promise} + */ +async function updatePayloadInActiveDeal (pgPool, deal) { + const updateQuery = ` + UPDATE active_deals + SET payload_cid = $1 + WHERE activated_at_epoch = $2 AND miner_id = $3 AND client_id = $4 AND piece_cid = $5 AND piece_size = $6 AND term_start_epoch = $7 AND term_min = $8 AND term_max = $9 AND sector_id = $10 + ` + try { + await pgPool.query(updateQuery, [ + deal.payload_cid, + deal.activated_at_epoch, + deal.miner_id, + deal.client_id, + deal.piece_cid, + deal.piece_size, + deal.term_start_epoch, + deal.term_min, + deal.term_max, + deal.sector_id + ]) + } catch (error) { + throw Error(util.format('Error updating payload of deal: ', deal), { cause: error }) + } +} diff --git a/backend/lib/rpc-service/service.js b/backend/lib/rpc-service/service.js index 0505d29..cd5e37d 100644 --- a/backend/lib/rpc-service/service.js +++ b/backend/lib/rpc-service/service.js @@ -3,6 +3,7 @@ import { base64pad } from 'multiformats/bases/base64' import { encode as cborEncode } from '@ipld/dag-cbor' import { rawEventEntriesToEvent } from './utils.js' import { Value } from '@sinclair/typebox/value' +import * as util from 'node:util' import { ClaimEvent, RawActorEvent, BlockEvent, RpcRespone } from './data-types.js' import pRetry from 'p-retry' /** @import { Static } from '@sinclair/typebox' */ @@ -32,12 +33,10 @@ export const rpcRequest = async (method, params) => { const parsedRpcResponse = Value.Parse(RpcRespone, json).result return parsedRpcResponse } catch (error) { - error.message = `Failed to parse RPC response: ${error.message}. Json Response: ${JSON.stringify(json)}` - throw error + throw Error(util.format('Failed to parse RPC response: %o', json), { cause: error }) } } catch (error) { - error.message = `Failed to make RPC request ${method}: ${error.message}\nRequest was: ${JSON.stringify(reqBody)}.` - throw error + throw Error(`Failed to make RPC request ${method}\nRequest was: ${JSON.stringify(reqBody)}.`, { cause: error }) } } /** @@ -48,7 +47,7 @@ export const rpcRequest = async (method, params) => { export async function getActorEvents (actorEventFilter, makeRpcRequest) { const rawEvents = await makeRpcRequest('Filecoin.GetActorEventsRaw', [actorEventFilter]) if (!rawEvents || rawEvents.length === 0) { - console.log(`No actor events found in the height range ${actorEventFilter.fromHeight} - ${actorEventFilter.toHeight}.`) + console.debug(`No actor events found in the height range ${actorEventFilter.fromHeight} - ${actorEventFilter.toHeight}.`) return [] } // TODO: handle reverted events @@ -73,8 +72,7 @@ export async function getActorEvents (actorEventFilter, makeRpcRequest) { continue } default: { - console.error(`Unknown event type: ${eventType}`) - break + throw Error(`Unknown event type: ${eventType}`) } } } @@ -89,6 +87,24 @@ export async function getChainHead (makeRpcRequest) { return await makeRpcRequest('Filecoin.ChainHead', []) } +/** + * @param {number} minerId + * @param {function} makeRpcRequest + * @returns {Promise} + */ +export async function getMinerPeerId (minerId, makeRpcRequest) { + try { + const params = getMinerInfoCallParams(minerId) + const res = await makeRpcRequest('Filecoin.StateMinerInfo', params) + if (!res || !res.PeerId) { + throw Error(`Failed to get peer ID for miner ${minerId}, result: ${res}`) + } + return res.PeerId + } catch (err) { + throw Error(`Failed to get peer ID for miner ${minerId}.`, { cause: err }) + } +} + /** * @param {number} blockHeight * @param {string} eventTypeString @@ -105,3 +121,13 @@ export function getActorEventsFilter (blockHeight, eventTypeString) { } } } + +/** + * @param {number} minerId + */ +export function getMinerInfoCallParams (minerId) { + return [ + 'f0' + minerId.toString(), + null + ] +} diff --git a/backend/lib/rpc-service/utils.js b/backend/lib/rpc-service/utils.js index e15afa8..3d54b8e 100644 --- a/backend/lib/rpc-service/utils.js +++ b/backend/lib/rpc-service/utils.js @@ -1,5 +1,6 @@ import { base64pad } from 'multiformats/bases/base64' import { decode as cborDecode } from '@ipld/dag-cbor' +import * as util from 'node:util' const decodeCborInBase64 = (data) => { return cborDecode(base64pad.baseDecode(data)) @@ -30,19 +31,18 @@ const rawEventEntriesToEvent = (rawEventEntries) => { if (value[Symbol.toStringTag] === 'CID') { value = value.toString() } else if (typeof value !== 'number') { - console.error( - 'Unsupported type %s found in the raw event entries. Key: %s Value: %o', + throw new Error(util.format( + 'Unsupported type %s found in the raw event entries. Key: %s Value: ', typeof value, key, - value + value) ) - continue } event[key] = value } if (!eventType) { - console.error(`No event type found in the raw event entries. Event entries: ${JSON.stringify(event)}`) + throw new Error(util.format('No event type found in the raw event entries. Event entries: %o', event)) } return { event, eventType } } diff --git a/backend/lib/utils.js b/backend/lib/utils.js new file mode 100644 index 0000000..3d5318a --- /dev/null +++ b/backend/lib/utils.js @@ -0,0 +1,24 @@ +/** @import { BlockEvent } from './rpc-service/data-types.js' */ +import { ActiveDealDbEntry } from '@filecoin-station/deal-observer-db/lib/types.js' +import { Value } from '@sinclair/typebox/value' +/** @import { Static } from '@sinclair/typebox' */ + +/** + * + * @param {Static } blockEvent + * @returns { Static < typeof ActiveDealDbEntry> } + */ +export function convertBlockEventToActiveDealDbEntry (blockEvent) { + return Value.Parse(ActiveDealDbEntry, { + activated_at_epoch: blockEvent.height, + miner_id: blockEvent.event.provider, + client_id: blockEvent.event.client, + piece_cid: blockEvent.event.pieceCid, + piece_size: blockEvent.event.pieceSize, + term_start_epoch: blockEvent.event.termStart, + term_min: blockEvent.event.termMin, + term_max: blockEvent.event.termMax, + sector_id: blockEvent.event.sector, + payload_cid: undefined + }) +} diff --git a/backend/package.json b/backend/package.json index d2e3b93..791fc23 100644 --- a/backend/package.json +++ b/backend/package.json @@ -6,7 +6,7 @@ "migrate": "node ../db/bin/migrate.js", "start": "node bin/deal-observer-backend.js", "lint": "standard", - "test": "node --test --test-reporter=spec" + "test": "node --test --test-reporter=spec --test-concurrency=1" }, "devDependencies": { "standard": "^17.1.2" diff --git a/backend/test/deal-observer.test.js b/backend/test/deal-observer.test.js index 620019c..e9f3261 100644 --- a/backend/test/deal-observer.test.js +++ b/backend/test/deal-observer.test.js @@ -1,10 +1,10 @@ import assert from 'node:assert' import { after, before, beforeEach, describe, it } from 'node:test' import { createPgPool, migrateWithPgClient } from '@filecoin-station/deal-observer-db' -import { fetchDealWithHighestActivatedEpoch, countStoredActiveDeals, storeActiveDeals } from '../lib/deal-observer.js' -import { ActiveDealDbEntry } from '@filecoin-station/deal-observer-db/lib/types.js' +import { fetchDealWithHighestActivatedEpoch, countStoredActiveDeals, loadDeals, storeActiveDeals } from '../lib/deal-observer.js' import { Value } from '@sinclair/typebox/value' import { BlockEvent } from '../lib/rpc-service/data-types.js' +import { convertBlockEventToActiveDealDbEntry } from '../lib/utils.js' describe('deal-observer-backend', () => { let pgPool @@ -32,12 +32,12 @@ describe('deal-observer-backend', () => { termMin: 12340, termMax: 12340, sector: 6n, - payload_cid: null // not present in event data + payload_cid: undefined } const event = Value.Parse(BlockEvent, { height: 1, event: eventData, emitter: 'f06' }) - - await storeActiveDeals([event], pgPool) - const result = await pgPool.query('SELECT * FROM active_deals') + const dbEntry = convertBlockEventToActiveDealDbEntry(event) + await storeActiveDeals([dbEntry], pgPool) + const actualData = await loadDeals(pgPool, 'SELECT * FROM active_deals') const expectedData = { activated_at_epoch: event.height, miner_id: eventData.provider, @@ -47,11 +47,9 @@ describe('deal-observer-backend', () => { term_start_epoch: eventData.termStart, term_min: eventData.termMin, term_max: eventData.termMax, - sector_id: eventData.sector + sector_id: eventData.sector, + payload_cid: undefined } - const actualData = result.rows.map((record) => { - return Value.Parse(ActiveDealDbEntry, record) - }) assert.deepStrictEqual(actualData, [expectedData]) }) it('check retrieval of last stored deal', async () => { @@ -64,20 +62,22 @@ describe('deal-observer-backend', () => { termStart: 5, termMin: 12340, termMax: 12340, - sector: 6n + sector: 6n, + payload_cid: undefined } const event = Value.Parse(BlockEvent, { height: 1, event: eventData, emitter: 'f06' }) - - await storeActiveDeals([event], pgPool) - const expected = Value.Parse(ActiveDealDbEntry, (await pgPool.query('SELECT * FROM active_deals')).rows[0]) + const dbEntry = convertBlockEventToActiveDealDbEntry(event) + await storeActiveDeals([dbEntry], pgPool) + const expected = await loadDeals(pgPool, 'SELECT * FROM active_deals') const actual = await fetchDealWithHighestActivatedEpoch(pgPool) - assert.deepStrictEqual(expected, actual) + assert.deepStrictEqual(expected, [actual]) }) it('check number of stored deals', async () => { const storeBlockEvent = async (eventData) => { const event = Value.Parse(BlockEvent, { height: 1, event: eventData, emitter: 'f06' }) - await storeActiveDeals([event], pgPool) + const dbEntry = convertBlockEventToActiveDealDbEntry(event) + await storeActiveDeals([dbEntry], pgPool) } const data = { id: 1, diff --git a/backend/test/piece-indexer.test.js b/backend/test/piece-indexer.test.js new file mode 100644 index 0000000..aa285d1 --- /dev/null +++ b/backend/test/piece-indexer.test.js @@ -0,0 +1,66 @@ +import { createPgPool, migrateWithPgClient } from '@filecoin-station/deal-observer-db' +import { before, beforeEach, it, describe, after } from 'node:test' +import { rawActorEventTestData } from './test_data/rawActorEvent.js' +import { chainHeadTestData } from './test_data/chainHead.js' +import { parse } from '@ipld/dag-json' +import { observeBuiltinActorEvents } from '../lib/deal-observer.js' +import assert from 'assert' +import { minerPeerIds } from './test_data/minerInfo.js' +import { payloadCIDs } from './test_data/payloadCIDs.js' +import { indexPieces } from '../lib/piece-indexer.js' + +describe('deal-observer-backend piece indexer', () => { + const makeRpcRequest = async (method, params) => { + switch (method) { + case 'Filecoin.ChainHead': + return parse(JSON.stringify(chainHeadTestData)) + case 'Filecoin.GetActorEventsRaw': + return parse(JSON.stringify(rawActorEventTestData)).filter(e => e.height >= params[0].fromHeight && e.height <= params[0].toHeight) + case 'Filecoin.StateMinerInfo': + return minerPeerIds.get(params[0]) + default: + console.error('Unknown method') + } + } + let pgPool + before(async () => { + pgPool = await createPgPool() + await migrateWithPgClient(pgPool) + }) + + after(async () => { + await pgPool.end() + }) + + beforeEach(async () => { + await pgPool.query('DELETE FROM active_deals') + const startEpoch = 4622129 + for (let blockHeight = startEpoch; blockHeight < startEpoch + 10; blockHeight++) { + await observeBuiltinActorEvents(blockHeight, pgPool, makeRpcRequest) + } + assert.strictEqual( + (await pgPool.query('SELECT * FROM active_deals')).rows.length, + 336 + ) + }) + + it('piece indexer loop function fetches deals where there exists no payload yet and updates the database entry', async (t) => { + const getDealPayloadCidCalls = [] + const getDealPayloadCid = async (providerId, pieceCid) => { + getDealPayloadCidCalls.push({ providerId, pieceCid }) + const payloadCid = payloadCIDs.get(JSON.stringify({ minerId: providerId, pieceCid })) + return payloadCid?.payloadCid + } + + assert.strictEqual( + (await pgPool.query('SELECT * FROM active_deals WHERE payload_cid IS NULL')).rows.length, + 336 + ) + await indexPieces(makeRpcRequest, getDealPayloadCid, pgPool, 10000) + assert.strictEqual(getDealPayloadCidCalls.length, 336) + assert.strictEqual( + (await pgPool.query('SELECT * FROM active_deals WHERE payload_cid IS NULL')).rows.length, + 85 // Not all deals have a payload CID in the test data + ) + }) +}) diff --git a/backend/test/test_data/minerInfo.js b/backend/test/test_data/minerInfo.js new file mode 100644 index 0000000..d1ce3ee --- /dev/null +++ b/backend/test/test_data/minerInfo.js @@ -0,0 +1,131 @@ +export const minerPeerIds = new Map([ + ['f00', + { PeerId: '12D3KooWFAcH5f2JW56APsYttGksxsUV8CnVYeg4zFBtp22zyDhz' } + ], + ['f01531188', + { PeerId: '12D3KooWFAcH5f2JW56APsYttGksxsUV8CnVYeg4zFBtp22zyDhz' } + ], + ['f03254063', + { PeerId: '12D3KooWL5FGicDPs5BoTRAAeidCb9fPSgHMULvi1YR7usSv4huP' } + ], + ['f01518369', + { PeerId: '12D3KooWGcWttoCPEZUqhp7YJPbnRBUrqvJSpA6xzUN5tPPZs2CM' } + ], + ['f01912298', + { PeerId: '12D3KooWBvkgo2qtHEciCK5ozEfoA8CTvvzzfggYNYaaebwq5rFS' } + ], + ['f01084413', + { PeerId: '12D3KooWDZ5FcheyrjdfZB1H6XNF7p4VdDM3TWXea4x6picU96xJ' } + ], + ['f01909705', + { PeerId: '12D3KooWPXMj5jBxR4AezWRXF5yRnVnEN2VhhmaearRqBoG2VfAm' } + ], + ['f03241413', + { PeerId: '12D3KooWA9zrKfscXkHycZTcaBguqxQEwxVftDenW8PwSmiubdfH' } + ], + ['f03230423', + { PeerId: '12D3KooWEp79NaL4iGk4cVH6aEpjxK8f7Roj6f7RkDpCZEmdGLaX' } + ], + ['f03254061', + { PeerId: '12D3KooWMfYLM4trWfT6AuXVAZLApaE7wYVjop2AdBiA9f4QSdU6' } + ], + ['f02029742', + { PeerId: '12D3KooWFrsQanytSSCBvqoKfx5q461XXoJhTKuztc9FQcg8iZdN' } + ], + ['f03298672', + { PeerId: '12D3KooWRpU7v3Q39C12z3MsqpsrDfGjsLFf173awaMJZBomF3wk' } + ], + ['f03253435', + { PeerId: '12D3KooWPpva16CUyW2nwoBZ85Q2PyVhGpy7RPYSHf8c96qgnNPu' } + ], + ['f03226958', + { PeerId: '12D3KooW9stmqV7MzK6oYJVfBAjbKGUNx78arLBYFKfBT4Y5sNQp' } + ], + ['f01999119', + { PeerId: '12D3KooWHuK15dwCZ8LDTZdFMR4AmQFRaHynYZb648dGotPCmQQ7' } + ], + ['f02252023', + { PeerId: '12D3KooWK5CGgW8qYyEjLQw5MG1P9bDjJPnF5YjCtCyuDjFLLrdT' } + ], + ['f03308922', + { PeerId: '12D3KooWP4ZuvyAiC5DjZZnLq4EfexYPyY8zcbdDX5z6bpe8W72Y' } + ], + ['f02002233', + { PeerId: '12D3KooWErNcDzy2wPore9ZAHKDZ1m9v5Nz1zudCMZo4SUJRT1XG' } + ], + ['f03260592', + { PeerId: '12D3KooWMwSpQADiT1BPXwCY3tqto7VsqMzSNMurdy1kX6pwh4ai' } + ], + ['f03238633', + { PeerId: '12D3KooWNswHm1CX3DtYMe6qUfoRVo3a5ESGQtnLUGz287Vu2TUL' } + ], + ['f03300963', + { PeerId: '12D3KooWLA5UX4y5gqskf1fnjRXTvn97KZWRw7rzDqWUMj9EHQhN' } + ], + ['f03286667', + { PeerId: '12D3KooWPkghN7vdSyB3jqJBfV9hVEZhwpHTiPFRowU85SGyWW8E' } + ], + ['f02003000', + { PeerId: '12D3KooWCai7tbjbtMSwu8nQoP9f37wUnW48mUvBwGnpHfiPD7NR' } + ], + ['f02002218', + { PeerId: '12D3KooWGMbiob6tJTNEyCj564k9xrYGDABp4HjHRoZmbX2hBTZt' } + ], + ['f03156722', + { PeerId: '12D3KooWQ95CVQW113b45n55iyvqiSD8Qj3bbwy9qsurxrEibdJX' } + ], + ['f03241759', + { PeerId: '12D3KooWHXPKWUqx9cyag239D7qDGFxHGzxszTs3j1rJzhRYhpzV' } + ], + ['f01111110', + { PeerId: '12D3KooWFVVJSLqAZVPcpvVFZk5ZZt9eKifsdm4DKF8oqpLJ7XkB' } + ], + ['f03275917', + { PeerId: '12D3KooWRnFC6mcf6P7uQgSyR28D5o2rz6NEwXMGjA23DpgEMdi1' } + ], + ['f03099987', + { PeerId: '12D3KooWLMqPzzX29eR865oQyBzh1kYA5ZVADR1u4Z8u3WUeZYLc' } + ], + ['f0811822', + { PeerId: '12D3KooWFWXbQG9x44JVauFnG7zqzfuR4eDo9iGbXUm9rTLvW7kv' } + ], + ['f0832944', + { PeerId: '12D3KooWPwmecs5kYYxBKGGeAM2hSNMKBWhzPcxeoUhomwQvkmc5' } + ], + ['f02982293', + { PeerId: '12D3KooWRu4BCdVnH2pxu8ykgxKp3Nm435CVgUZLGimAAMdsCP1w' } + ], + ['f02192588', + { PeerId: '12D3KooWAJoCWQAf1H3Up8LHvg5JJymDgPNLEcSPLahC34stpxDg' } + ], + ['f01422327', + { PeerId: '12D3KooWJ2RJBxFJyFEQVQ9qguqG8WcTWFnBddgWNqaNZ1ckaigP' } + ], + ['f02808877', + { PeerId: '12D3KooWBmhUE7xC9x1fgYoYzuaU2xt78AsoqUn8Qx7AW615gFXF' } + ], + ['f03308933', + { PeerId: '12D3KooWHEwyy4wvkFAAjXVXKPqvwpTZgguKJUEZUEESaCFL2xqN' } + ], + ['f02001818', + { PeerId: '12D3KooWPpTopGGDvXsUYTBveszRXoodi6G37ZEMyv8sENrebYue' } + ], + ['f03281237', + { PeerId: '12D3KooWFm7TPDKB9Gni5ziSarVGFq4SJEfpebNe8f74LCDt79a2' } + ], + ['f03220172', + { PeerId: '12D3KooWMqMTa6TPh8K4fdWpLYX7dzqsBSZY5dLoWzm4KQENbJWD' } + ], + ['f01824405', + { PeerId: '12D3KooWMKYzDUpr82u4YFKHzJxHY7pHECoCMxgzBbvFiWtMb3ok' } + ], + ['f01996719', + { PeerId: '12D3KooWSbaHysCouYi2K6A8Fa6zaTfdyvGwxPQoMERuTZhwu8MQ' } + ], + ['f0866468', + { PeerId: '12D3KooWCxV85UqvqCweW1X8cGMYY6UBsjmVsm9TdXP2HXR8YoEE' } + ], + ['f02252024', + { PeerId: '12D3KooWA2Z6CdYER2omRX2KBxvEwyEmqcBNYFNrVQeN6wF9e7qS' } + ] +]) diff --git a/backend/test/test_data/payloadCIDs.js b/backend/test/test_data/payloadCIDs.js new file mode 100644 index 0000000..19f1903 --- /dev/null +++ b/backend/test/test_data/payloadCIDs.js @@ -0,0 +1 @@ +export const payloadCIDs = new Map([['{"minerId":"12D3KooWFAcH5f2JW56APsYttGksxsUV8CnVYeg4zFBtp22zyDhz","pieceCid":"baga6ea4seaqepbqg7dxrdphrvusy3pmc5lelcczwwi5nydduyog655wgnby4ijq"}', { payloadCid: 'bafkreiapsxaux4tltu6pyheuuo2skvxgjd747on5fo2bii7ycit5wxu65y' }], ['{"minerId":"12D3KooWL5FGicDPs5BoTRAAeidCb9fPSgHMULvi1YR7usSv4huP","pieceCid":"baga6ea4seaqgzvtv5wg2bq3liakssjoiikmiucwpsywba3fo2wmvool3hjaukda"}', { payloadCid: 'bafkreifg3g5pw6nkmplivwjinefqntbsbslcdo7kvozuvvbtu7bzs6i2i4' }], ['{"minerId":"12D3KooWGcWttoCPEZUqhp7YJPbnRBUrqvJSpA6xzUN5tPPZs2CM","pieceCid":"baga6ea4seaqbzsj4xcffii7fqryooct3k6evqkueq62rmyrjms4o2w3gvtei2iq"}', { payloadCid: 'bafkreifc3b2526a72mluephm4aiwjyki5qenq6nobnbxazi5ltwtbr6tgm' }], ['{"minerId":"12D3KooWGcWttoCPEZUqhp7YJPbnRBUrqvJSpA6xzUN5tPPZs2CM","pieceCid":"baga6ea4seaqbxscp24bi6vxlkzfmvkznl4bitepkhunjsj3ntwefwlefkiookia"}', { payloadCid: 'bafkreib37touhdptw4rufmwruqnw6n2xhreptdbd2vyajclvuybtrqidu4' }], ['{"minerId":"12D3KooWGcWttoCPEZUqhp7YJPbnRBUrqvJSpA6xzUN5tPPZs2CM","pieceCid":"baga6ea4seaqj3jlq6a4omarmmpduexlcl25w43w3ym3f7bbionz6acxzntqckni"}', { payloadCid: 'bafkreieg5n5ssjyvyfn5dsncbu4xyvefy2tlomiekybic77ctorqzqouee' }], ['{"minerId":"12D3KooWGcWttoCPEZUqhp7YJPbnRBUrqvJSpA6xzUN5tPPZs2CM","pieceCid":"baga6ea4seaqotfsvbg3b7bf72ffm7rbc6tm2qlqu5f77le7vzuwkisnu7db4gaq"}', { payloadCid: 'bafkreicmbzkvvuh2d3ar6l6ysdzyypvkggeiffspnfimpjwhnfmgqx2eou' }], ['{"minerId":"12D3KooWGcWttoCPEZUqhp7YJPbnRBUrqvJSpA6xzUN5tPPZs2CM","pieceCid":"baga6ea4seaqlvy5isb64pydwivlrfxb733tsps2443bobjgcj7be6tjtssxxwoi"}', { payloadCid: 'bafkreihrx6pap6qdbndky44c66hbubmee6rl4answqnjikmtkqw2t6crqi' }], ['{"minerId":"12D3KooWBvkgo2qtHEciCK5ozEfoA8CTvvzzfggYNYaaebwq5rFS","pieceCid":"baga6ea4seaqcs4kdgvw5gumqzu2ilq2ebrnhtrwodq5uik75xsuhsie2qe2a4bi"}', { payloadCid: 'bafkreigt7cr7xocj7bfzkxhiocjumnp4is6ry4sqdal4chstdjsdymcpdy' }], ['{"minerId":"12D3KooWBvkgo2qtHEciCK5ozEfoA8CTvvzzfggYNYaaebwq5rFS","pieceCid":"baga6ea4seaqo5qdtjvezojimnsnc75t4xthszwfpd3vznafblhnyyg5j4ah7aji"}', { payloadCid: 'bafkreihffvi5c7rsdrrkhh7ek4p43ilcojke3o7adfihy6v5brixyvn234' }], ['{"minerId":"12D3KooWPXMj5jBxR4AezWRXF5yRnVnEN2VhhmaearRqBoG2VfAm","pieceCid":"baga6ea4seaql2ex7h6imhjtscip7hb5u6e7jwhg7drl6cyo4k35us66bk5rs6bi"}', { payloadCid: 'bafkreibagyqvdmsz6row3a3ynv5a5viqfl6xwhqhub5nqietei5r2cwxmy' }], ['{"minerId":"12D3KooWA9zrKfscXkHycZTcaBguqxQEwxVftDenW8PwSmiubdfH","pieceCid":"baga6ea4seaqchozzzsafazwje4sruemamoff56kr7d4hir3cbwu2fdbqvisfsoi"}', { payloadCid: 'bafkreihj2ccbiiunntruvm5eo7ceuvu5dcsgxmh6qj4tn27q34qvwgdn2u' }], ['{"minerId":"12D3KooWMfYLM4trWfT6AuXVAZLApaE7wYVjop2AdBiA9f4QSdU6","pieceCid":"baga6ea4seaqaxlydyflazfaamhl46a4oa4arnrfbofrpsd3qoxgcbsxmjrlkigq"}', { payloadCid: 'bafkreig7sqpp7ohrrfvdse47fucfegx6nfqmcmaby6blpjk6kvil35a43y' }], ['{"minerId":"12D3KooWMfYLM4trWfT6AuXVAZLApaE7wYVjop2AdBiA9f4QSdU6","pieceCid":"baga6ea4seaqmuisoymw3fsfzszltkuxz7haauuljqoe2qfq2oocsotfeiqvakji"}', { payloadCid: 'bafkreidpz6zfeosvnjbmhguzc2744f2u4dk37zgs3mupkw7vzmzw5pdksy' }], ['{"minerId":"12D3KooWMfYLM4trWfT6AuXVAZLApaE7wYVjop2AdBiA9f4QSdU6","pieceCid":"baga6ea4seaqbdzrild53zvvi2554k32e53rdipzqdfnaswetzbfc3pkqguf5iii"}', { payloadCid: 'bafkreihdmet5gj7puerpyiz3lrcyiq2evzenlvfvtldtt6dxfxshkdn7wu' }], ['{"minerId":"12D3KooWFrsQanytSSCBvqoKfx5q461XXoJhTKuztc9FQcg8iZdN","pieceCid":"baga6ea4seaqh6bfvf5vkspy5qvbwapgne4ovljztburflwjymcgz2cywfhauqjy"}', { payloadCid: 'bafk2bzacecfirkv3r43xjb6z5gn33qixp4dvyz5cwgogyc73tjzccivx72dao' }], ['{"minerId":"12D3KooWRpU7v3Q39C12z3MsqpsrDfGjsLFf173awaMJZBomF3wk","pieceCid":"baga6ea4seaqbfozvlshyu74hdwtim4abkcguszzdvwwcumskqbu42jotncjzgba"}', { payloadCid: 'bafkreidtcfrakdczuz22pskgqevhorexdmvyajeelfvh6ctkpkgqp6qhjy' }], ['{"minerId":"12D3KooWRpU7v3Q39C12z3MsqpsrDfGjsLFf173awaMJZBomF3wk","pieceCid":"baga6ea4seaqdpqx4xmmy2uszvgai7l37sfiqxwyfrwox5b4ycxcb5lqkq5uaeda"}', { payloadCid: 'bafkreidr6kcs4njm4ljacnwa42vu74u7rbkyzcoqqbjvgpni33pqchmowa' }], ['{"minerId":"12D3KooWL5FGicDPs5BoTRAAeidCb9fPSgHMULvi1YR7usSv4huP","pieceCid":"baga6ea4seaqa476t57ue3dr36swxue56n5ceuczccb7ow4u4a45kepd4cdwhwba"}', { payloadCid: 'bafkreibhixs2i2hdjrsjjtrq35vzmfckww5wbkwr43n4atuy7ch4mt4nz4' }], ['{"minerId":"12D3KooWL5FGicDPs5BoTRAAeidCb9fPSgHMULvi1YR7usSv4huP","pieceCid":"baga6ea4seaqefwutci7mvcgtaurwfkkfv5vidlxkuxvkszmjzbplffaupv4lmiq"}', { payloadCid: 'bafkreihwnkvptnwzrivaym2nyhux74yn2fbtn3sq4k6z5r5oq4vkta5m2i' }], ['{"minerId":"12D3KooWFrsQanytSSCBvqoKfx5q461XXoJhTKuztc9FQcg8iZdN","pieceCid":"baga6ea4seaqcyeogrj3zqml66yae3g7kkknwx64ihslaoeiogf2akpptjsv2ifa"}', { payloadCid: 'bafk2bzaceavs2cnto4obtadurvsl4rrebnmexd6q4es732gbrvdiyhwupnyt2' }], ['{"minerId":"12D3KooWFAcH5f2JW56APsYttGksxsUV8CnVYeg4zFBtp22zyDhz","pieceCid":"baga6ea4seaqizef4jgvfeyuaaxw7wwprz37fodnezrgv6ccbtwy4ydk3mvt4eja"}', { payloadCid: 'bafkreiese7twxmf5vrejxip337p3wvttrkv6emadprn67koihs2d6goybe' }], ['{"minerId":"12D3KooWFAcH5f2JW56APsYttGksxsUV8CnVYeg4zFBtp22zyDhz","pieceCid":"baga6ea4seaqmvuxijtnkxkcg5fvo232lm7qqhyozrijen2m3xijt4yprf5k5gca"}', { payloadCid: 'bafkreiafx6sxnyexqlttj4jigav422m666jik4vjb635muq5qy3p2cwnji' }], ['{"minerId":"12D3KooW9stmqV7MzK6oYJVfBAjbKGUNx78arLBYFKfBT4Y5sNQp","pieceCid":"baga6ea4seaqo6zohw6sjhxinmq6b52dtqczl5ogzwcimemklljd2yt7k73ckopa"}', { payloadCid: 'bafk2bzacea2n7xb6y27ppt377kdnmryx6lidjx2zroc4nuugwqbwqzm452vhk' }], ['{"minerId":"12D3KooW9stmqV7MzK6oYJVfBAjbKGUNx78arLBYFKfBT4Y5sNQp","pieceCid":"baga6ea4seaqf3azcii4adrmsexus5guxurboo5ylc24bknmfippi5ncn65m7cfa"}', { payloadCid: 'bafk2bzacea2n7xb6y27ppt377kdnmryx6lidjx2zroc4nuugwqbwqzm452vhk' }], ['{"minerId":"12D3KooWHuK15dwCZ8LDTZdFMR4AmQFRaHynYZb648dGotPCmQQ7","pieceCid":"baga6ea4seaqpgtcz2sy5ftfr47fnihjc3ea3nccn2rudjmscskrmv3rupwpqoki"}', { payloadCid: 'bafk2bzaceapgs2itt66giis6zvsrbcppxvdnellpqsbr7chymzufijplfjegc' }], ['{"minerId":"12D3KooWK5CGgW8qYyEjLQw5MG1P9bDjJPnF5YjCtCyuDjFLLrdT","pieceCid":"baga6ea4seaqj3rcizgdn3wll6s427hw3lh36z2hggi6ms3klb2gw3wwdmpej6by"}', { payloadCid: 'bafkreido46fy36w3iogy2zkxjppx2nz25vmpjf6tlcj3kcgh7thn32gpvu' }], ['{"minerId":"12D3KooWP4ZuvyAiC5DjZZnLq4EfexYPyY8zcbdDX5z6bpe8W72Y","pieceCid":"baga6ea4seaqbhxfjmmktny7kxehca5llw2pdzvvlsdr42felot2hxnjmcrvcifa"}', { payloadCid: 'bafkreicgctv66xeaamna53fb2ahmz6ejx6iv2rs3cvemq22umwsn7ypqhm' }], ['{"minerId":"12D3KooWP4ZuvyAiC5DjZZnLq4EfexYPyY8zcbdDX5z6bpe8W72Y","pieceCid":"baga6ea4seaqd6taemocmgkcph3af753cnrtd65orpjkqwjsyi66ijwmjwdspyoa"}', { payloadCid: 'bafkreifgzejdheiekut4iid4exo5l5naq7ml6imt6cyxt3kryqvsq54uxy' }], ['{"minerId":"12D3KooWP4ZuvyAiC5DjZZnLq4EfexYPyY8zcbdDX5z6bpe8W72Y","pieceCid":"baga6ea4seaqi2iwkjs6fbf2m6t663jnvyl45hxxk3jpgoqer7sginr5w3ihaeja"}', { payloadCid: 'bafkreid4id6lagwc2susxvegepu6nnicvjtdidh3v3qml7itvm5liayqta' }], ['{"minerId":"12D3KooWP4ZuvyAiC5DjZZnLq4EfexYPyY8zcbdDX5z6bpe8W72Y","pieceCid":"baga6ea4seaqoicomp4pqmms72vpnofmuhhroozcokbvyyino3khsjemgi3yf2di"}', { payloadCid: 'bafkreif5wqrwbyfigd6ahkzomtkadd4zamobbntg6d6mfazzslujntkcx4' }], ['{"minerId":"12D3KooWA9zrKfscXkHycZTcaBguqxQEwxVftDenW8PwSmiubdfH","pieceCid":"baga6ea4seaqdqeqv7nm7kmltxe3udwm2ld2qbrg5sythh7lil4hpwgbqlnjbuka"}', { payloadCid: 'bafkreiaxz6muk2hmrfs4t4vcg24y3yok6gx22r4ex4innk6s3aysmc6ure' }], ['{"minerId":"12D3KooWA9zrKfscXkHycZTcaBguqxQEwxVftDenW8PwSmiubdfH","pieceCid":"baga6ea4seaqerabq2u7qkuf2dhqd2sg4ysz3xlrhww7iiie4qdakwlfi5yb34ny"}', { payloadCid: 'bafkreifxs652x44p4oit3myzowen2lem5kuwqzhtzlbfj67irvqr3xhzwa' }], ['{"minerId":"12D3KooWMfYLM4trWfT6AuXVAZLApaE7wYVjop2AdBiA9f4QSdU6","pieceCid":"baga6ea4seaqoxfnrdml4wnnxxk5hhriqhcq4hx6ybyyuanmmddqpgwx5gtfpapq"}', { payloadCid: 'bafkreiccvi2uahorg2pyoyr5kawridevyusslinzbblwlxfe5x2pvqzsxy' }], ['{"minerId":"12D3KooWMfYLM4trWfT6AuXVAZLApaE7wYVjop2AdBiA9f4QSdU6","pieceCid":"baga6ea4seaqemwqqhf5cppt7sggy2xfupvewmwu5uhc4cio4k33w3hqbrj2nabi"}', { payloadCid: 'bafkreihkkrvdmlw6n5p5hznlzrpgviititte2ayv4jy3jjxn5h3xd5amba' }], ['{"minerId":"12D3KooWMfYLM4trWfT6AuXVAZLApaE7wYVjop2AdBiA9f4QSdU6","pieceCid":"baga6ea4seaqaj4uuuobs2gjsoncbws4kh5ktsvkbuictexjanej3dvu6utuqmdi"}', { payloadCid: 'bafkreiflh7w6z5xhudmzn2rhw2xovil34hfgqkt53rogr3rl7mcq2p77se' }], ['{"minerId":"12D3KooWMfYLM4trWfT6AuXVAZLApaE7wYVjop2AdBiA9f4QSdU6","pieceCid":"baga6ea4seaqoolxx7uusq2k2deniorl6dxr7yobcf5halwpywg5gubw5hdxfqcq"}', { payloadCid: 'bafkreiaqnc5yvd4agtou3shy5tzg7sjz3yfarpeqmhg5xfwhnkw6qy7bwy' }], ['{"minerId":"12D3KooWMfYLM4trWfT6AuXVAZLApaE7wYVjop2AdBiA9f4QSdU6","pieceCid":"baga6ea4seaqgdav3f7ocgn3m67rc4lryykwqfa6qgawyd3pirqrrpjd3ub4q2dy"}', { payloadCid: 'bafkreibwyxehcnoi46vmchjq3ndna3xlzerjhckrtnx5utxtiyp5acasmy' }], ['{"minerId":"12D3KooWMwSpQADiT1BPXwCY3tqto7VsqMzSNMurdy1kX6pwh4ai","pieceCid":"baga6ea4seaql2phkstq64s7gpjayqa7gujv2rn55bitcu6vkkj6ftnmsdqugwci"}', { payloadCid: 'bafk2bzacebexjcvmvhqmd2omlo66h7qwyufuahffvodfkq5qx4aao3qu3l6co' }], ['{"minerId":"12D3KooWNswHm1CX3DtYMe6qUfoRVo3a5ESGQtnLUGz287Vu2TUL","pieceCid":"baga6ea4seaqavq2kkol6ztiqy2gqisajocgs4pajmg3j3fv2v2yi327m46uzogi"}', { payloadCid: 'bafkreidtrrig33bjdmycrd5ga5rz7cu2vupgligilrgx4qwsbzrttmsztm' }], ['{"minerId":"12D3KooWLA5UX4y5gqskf1fnjRXTvn97KZWRw7rzDqWUMj9EHQhN","pieceCid":"baga6ea4seaqlqtqfmi4utbra4ofhncebuoewwttuadrouenfkcecfftujmbq2cq"}', { payloadCid: 'bafkreie4iovzwzy4ifc7axh7ufcnnvnycs2zkq535tntnztm3onjf4idiu' }], ['{"minerId":"12D3KooWLA5UX4y5gqskf1fnjRXTvn97KZWRw7rzDqWUMj9EHQhN","pieceCid":"baga6ea4seaqohdugqvjwmcmyozfd3hr2x6px6fzjok6jnkxja6ylgy6nmnlbapq"}', { payloadCid: 'bafkreiboritksl4els36zioa5twlsr4lm744s44csbdvsudfam2esikqje' }], ['{"minerId":"12D3KooWMfYLM4trWfT6AuXVAZLApaE7wYVjop2AdBiA9f4QSdU6","pieceCid":"baga6ea4seaqijbjhrpz4f6z3h2zg23e4pzzd5oi4cenfl4lqlwinrhxidnbvuly"}', { payloadCid: 'bafkreigm7z577grepuoj2b2j66g7pv6r4ycxsm66wdr6l522litbpkerfe' }], ['{"minerId":"12D3KooWMfYLM4trWfT6AuXVAZLApaE7wYVjop2AdBiA9f4QSdU6","pieceCid":"baga6ea4seaqmuyj7sjhvmana77uwuihbb37r4qnlq3eu4bbja3eciufsr27kmny"}', { payloadCid: 'bafkreiahyxgz3bxubb2v5i6jwaaqg7lzfe6xpzqrv2jvgzkb5upuahrb4i' }], ['{"minerId":"12D3KooWMfYLM4trWfT6AuXVAZLApaE7wYVjop2AdBiA9f4QSdU6","pieceCid":"baga6ea4seaqcuwyyooibwt6csz3lahmmw6eyhlwoixju3zuymsyqbqce6kn3oey"}', { payloadCid: 'bafkreib2slw2utlbzl47cx3aw7sycmwnha7hcrxlxqjimhpmpwo34ymoje' }], ['{"minerId":"12D3KooWPkghN7vdSyB3jqJBfV9hVEZhwpHTiPFRowU85SGyWW8E","pieceCid":"baga6ea4seaqbfe5cd6bwl6kuu7svyb4jnvxv4uhutj53krvs6thgsif7jy3q4ga"}', { payloadCid: 'bafk2bzacebxmwxssjvxgsyimvlof7fmukfko2xepkqjax5kc6tbdiocz3svw6' }], ['{"minerId":"12D3KooWMfYLM4trWfT6AuXVAZLApaE7wYVjop2AdBiA9f4QSdU6","pieceCid":"baga6ea4seaqofjgtq44gxl5r7ghj64o5xuw5d2h7lw27e2munrdmut3qtlrfupy"}', { payloadCid: 'bafkreih5in6ee3melp6raqolg3s2e7ryicpm7vi5ajnjrcul56i3nzdczi' }], ['{"minerId":"12D3KooWHXPKWUqx9cyag239D7qDGFxHGzxszTs3j1rJzhRYhpzV","pieceCid":"baga6ea4seaqkxb23pyaez77zihfembypwl7pqli7obr35luvjdlxd24kyxqkihq"}', { payloadCid: 'bafkreicfj3773o3innfr74wvavuxgm62mmqokgisddnmktfqtzw4vynf4m' }], ['{"minerId":"12D3KooWHXPKWUqx9cyag239D7qDGFxHGzxszTs3j1rJzhRYhpzV","pieceCid":"baga6ea4seaqkqfdeoetly3ayxxrdu6xuw45sijicsmzjjkrumllyxbadekvp6kq"}', { payloadCid: 'bafkreiee5v73ndvk4t2gehlgqigtusgfen6ovc4cd7svul4cixtnowfgea' }], ['{"minerId":"12D3KooWL5FGicDPs5BoTRAAeidCb9fPSgHMULvi1YR7usSv4huP","pieceCid":"baga6ea4seaqmyoy7k4cjfncwoyxbwfwl6savuqs5dz32cjpjesn4cirprkvi4ny"}', { payloadCid: 'bafkreibjmwmqtg2ulmooqbwjyh3kr32yh6u34iyvhc2sbc52mo446y63hy' }], ['{"minerId":"12D3KooWFrsQanytSSCBvqoKfx5q461XXoJhTKuztc9FQcg8iZdN","pieceCid":"baga6ea4seaqlzinsu7z6gapdjusqdsmb2wg3kvznkrmugbaggfc5dfd5u2um2iy"}', { payloadCid: 'bafk2bzaceb4d3m4vqctphbf7nbnmvjfk2ivlkgbxvqvtwom4otq25oebbiut2' }], ['{"minerId":"12D3KooWFrsQanytSSCBvqoKfx5q461XXoJhTKuztc9FQcg8iZdN","pieceCid":"baga6ea4seaqn6pu62jujvtbc6fxwnmxmsso6mj7muxzx2pb4ukygecwqizwfkfi"}', { payloadCid: 'bafk2bzacecniuzwpy4rbepnat2nqrwc44teexlf7yqh2cp7u5vx3uw4ih4fpc' }], ['{"minerId":"12D3KooWFVVJSLqAZVPcpvVFZk5ZZt9eKifsdm4DKF8oqpLJ7XkB","pieceCid":"baga6ea4seaqbrj7mkpzwypnjb7p5u3f4voflgt54twwxcda52nfnxe7fk4ahsky"}', { payloadCid: 'bafkreicsqs75f7ufwf77flzu3crsbqdn5oudy2os3fcz7g3heb2jvrx6ji' }], ['{"minerId":"12D3KooWL5FGicDPs5BoTRAAeidCb9fPSgHMULvi1YR7usSv4huP","pieceCid":"baga6ea4seaqcm4vft7ecwpgp2ykn6pt7p2zanji5pfdxybrzsbgqzgbmwk4cefy"}', { payloadCid: 'bafkreiafx3thnd3hoc3sffow57kygwdepbqwn2jcol75k7dkx6oowzv444' }], ['{"minerId":"12D3KooWL5FGicDPs5BoTRAAeidCb9fPSgHMULvi1YR7usSv4huP","pieceCid":"baga6ea4seaqetr2dvmctk46hvnmy6xw5fq2iqnophz6yfbjeueqa5zfnf4rk4hi"}', { payloadCid: 'bafkreifupmme7p5wntdp5r7haewapinzowrakomsq63r4qnt3ht7izf6ue' }], ['{"minerId":"12D3KooWL5FGicDPs5BoTRAAeidCb9fPSgHMULvi1YR7usSv4huP","pieceCid":"baga6ea4seaqglqkamyvdzbo27ir5xyil2d6kwh23bkkic2fxumlykbqvwdhh2dq"}', { payloadCid: 'bafkreiftciwrrpxg5j7uta3w2va4ylubi533uaaunjmb34sydjpbhlrw3u' }], ['{"minerId":"12D3KooWL5FGicDPs5BoTRAAeidCb9fPSgHMULvi1YR7usSv4huP","pieceCid":"baga6ea4seaqjt4ohzcv24bnuueunk6rhinwuhzjwhj5nvxn2to7thpprmfgjapi"}', { payloadCid: 'bafkreihwtvb65zuq5kuz4ar6vu3dcg664ftsylxyrop34m3xktpntbioxm' }], ['{"minerId":"12D3KooWL5FGicDPs5BoTRAAeidCb9fPSgHMULvi1YR7usSv4huP","pieceCid":"baga6ea4seaqg6gvoovtbs26h6svgmax7x26nfiatyoyccgln2vqj4crvv2vxgda"}', { payloadCid: 'bafkreiglnpdjxcfn252zjjqhzfafmbrqbk4h7dwpza4cd4lkmjvf2b43h4' }], ['{"minerId":"12D3KooWL5FGicDPs5BoTRAAeidCb9fPSgHMULvi1YR7usSv4huP","pieceCid":"baga6ea4seaqnlgj27qdf6k6wa7gtst6k3wiqnsqa23aeyudibrg7bwjb5lhc6na"}', { payloadCid: 'bafkreicokuzuigkwlrytbo2nzyi7lg2ljv4j6q5m33zux2x5nnmcnc4hna' }], ['{"minerId":"12D3KooWL5FGicDPs5BoTRAAeidCb9fPSgHMULvi1YR7usSv4huP","pieceCid":"baga6ea4seaqc43zel6auxwwtqombt3nofsalnitwdmm7rrrk4mkxj25ggoctcla"}', { payloadCid: 'bafkreihoxfaxyw6s2hpwoahzen5nfiksusosbsab7smpe354pxzir3zjwa' }], ['{"minerId":"12D3KooWL5FGicDPs5BoTRAAeidCb9fPSgHMULvi1YR7usSv4huP","pieceCid":"baga6ea4seaqfvgbmif2dzqgzr565npqpyjgqxdyuqbzbbw26ytqvyhfjbb7pcby"}', { payloadCid: 'bafkreie7etnjpbgunbm4dbphhwlazqqlgtfg2w4p6z3wwznk63rpw6axse' }], ['{"minerId":"12D3KooWFAcH5f2JW56APsYttGksxsUV8CnVYeg4zFBtp22zyDhz","pieceCid":"baga6ea4seaqljrvnxllcxf7ewffpgukvohpibparb4mj74ucwam6yvpeq4gauci"}', { payloadCid: 'bafkreifxnxkpcluxvspoaulofppo6hfigyvfpypu6uaxfbvqqlbdgowmwm' }], ['{"minerId":"12D3KooWHXPKWUqx9cyag239D7qDGFxHGzxszTs3j1rJzhRYhpzV","pieceCid":"baga6ea4seaqi7nrvmhabyo6tc7o4g2aah5jaf3q6xmlsvpqdf3nhqnqo33b4sjy"}', { payloadCid: 'bafkreicm2soepgldt4mlx6a3u36nl5v45bu6am4ryhpffbbumluzree5m4' }], ['{"minerId":"12D3KooWNswHm1CX3DtYMe6qUfoRVo3a5ESGQtnLUGz287Vu2TUL","pieceCid":"baga6ea4seaqlrwpsnjc643ut6wgwonpjloa3c4kn3g2qca34bdvwayuv6n44uoy"}', { payloadCid: 'bafkreiez66ng53p4mwy7vvasrjyxkwplkzmcdcofpyh7dj2qucub7ifvim' }], ['{"minerId":"12D3KooWNswHm1CX3DtYMe6qUfoRVo3a5ESGQtnLUGz287Vu2TUL","pieceCid":"baga6ea4seaqn4t6hnj4pm6f34ztkqceor4nvqx4lttyia56oieuuhn4tpvczaha"}', { payloadCid: 'bafkreibu2crjpgykjtpfbqulwrqz7brr4kbjsugohjevkil6vnrb7t3kme' }], ['{"minerId":"12D3KooW9stmqV7MzK6oYJVfBAjbKGUNx78arLBYFKfBT4Y5sNQp","pieceCid":"baga6ea4seaqf5quwxoc3spakryb34rqmp3txsqinmztjdejbktils3chs3ucgjq"}', { payloadCid: 'bafk2bzacea2n7xb6y27ppt377kdnmryx6lidjx2zroc4nuugwqbwqzm452vhk' }], ['{"minerId":"12D3KooW9stmqV7MzK6oYJVfBAjbKGUNx78arLBYFKfBT4Y5sNQp","pieceCid":"baga6ea4seaqgzxz46cyree34ks5mtu6aob52u35zmckxdldcynyuejl3phwvagi"}', { payloadCid: 'bafk2bzacea2n7xb6y27ppt377kdnmryx6lidjx2zroc4nuugwqbwqzm452vhk' }], ['{"minerId":"12D3KooW9stmqV7MzK6oYJVfBAjbKGUNx78arLBYFKfBT4Y5sNQp","pieceCid":"baga6ea4seaqawltxv6qfse5sheao5rposxcktbjfzm7vq4hyuukplkezkkq6qli"}', { payloadCid: 'bafk2bzacea2n7xb6y27ppt377kdnmryx6lidjx2zroc4nuugwqbwqzm452vhk' }], ['{"minerId":"12D3KooWFrsQanytSSCBvqoKfx5q461XXoJhTKuztc9FQcg8iZdN","pieceCid":"baga6ea4seaqnpgm4ulqaemakhy5lal5mjv75ehj3plv2ixidcxm4im3pptjkiaa"}', { payloadCid: 'bafk2bzacedmry6h5q3khe3mhyjrr5iwgnh4nekxq4oaknfalvby7mtz32ava4' }], ['{"minerId":"12D3KooWHXPKWUqx9cyag239D7qDGFxHGzxszTs3j1rJzhRYhpzV","pieceCid":"baga6ea4seaqbnl73yjg3vo4owtzqje7fbv3akmrxe2r3arc5jvnpdkrjx7sfkei"}', { payloadCid: 'bafkreidyh2767d3hv5wqcttpkp65ke6n23xhrm4uu4xs2zu3nk4rqdhwau' }], ['{"minerId":"12D3KooWP4ZuvyAiC5DjZZnLq4EfexYPyY8zcbdDX5z6bpe8W72Y","pieceCid":"baga6ea4seaqfulpuw7p2njkdlzzshru4toevnp3b62bsijmkame556oym4b7mai"}', { payloadCid: 'bafkreibwa33hhej2ebvzzezr2hn3rtcj3biyvcvaivjs2do3esspej5cgy' }], ['{"minerId":"12D3KooWP4ZuvyAiC5DjZZnLq4EfexYPyY8zcbdDX5z6bpe8W72Y","pieceCid":"baga6ea4seaqlq2l265hsw66uyzbxnxnringnl2kqjoe32lb5shtbmfjzhjhzkgq"}', { payloadCid: 'bafkreieuni46ubxkpc7pyjov7d6b7sjm2w7h2pysdnovo2doxmyksrqjya' }], ['{"minerId":"12D3KooWL5FGicDPs5BoTRAAeidCb9fPSgHMULvi1YR7usSv4huP","pieceCid":"baga6ea4seaqnsolsy7agebia3dlnlpm6kmdhim6g5p44dirufrxtda6j5s7b6iy"}', { payloadCid: 'bafkreifmrn2uikzsohzfrlz5lzraps5ufo3klq3vxzism3himv4s55kliq' }], ['{"minerId":"12D3KooWL5FGicDPs5BoTRAAeidCb9fPSgHMULvi1YR7usSv4huP","pieceCid":"baga6ea4seaqnluuvrd7dxl7mkkgyzy3o4yytsq5ods5pmi4q77trajjpthtnkbi"}', { payloadCid: 'bafkreigvabzmlpilphqq332j26skag4ufky5f2g7bnkkbc6inn6y6ohv74' }], ['{"minerId":"12D3KooWL5FGicDPs5BoTRAAeidCb9fPSgHMULvi1YR7usSv4huP","pieceCid":"baga6ea4seaqkwgi5uz2idgrnq4fymboc5u3urlket3jhvoipaunor5majobmuly"}', { payloadCid: 'bafkreigmaxt5n2aiagygxie452qyeg6ztxkdmkkq7xsjjw2xnqchvngsba' }], ['{"minerId":"12D3KooWL5FGicDPs5BoTRAAeidCb9fPSgHMULvi1YR7usSv4huP","pieceCid":"baga6ea4seaqjwhnq6fyaakmqvwllpwyxscnxf32gsv2ep6wr4jpu6nm5ijh6yoa"}', { payloadCid: 'bafkreiddzlb5hdpatr2tb7jsmkwqdc4jluis5e7nsivxmoffuwwwjtacwm' }], ['{"minerId":"12D3KooWFAcH5f2JW56APsYttGksxsUV8CnVYeg4zFBtp22zyDhz","pieceCid":"baga6ea4seaqesximxwwzihco24xn7jmclllhcqx7bpazrayqo63vs2bdoyqwqay"}', { payloadCid: 'bafkreibyk6pr52iylo56iqoqa2npc2gfqp26uzn3hhb3wje55p36u27dki' }], ['{"minerId":"12D3KooWLMqPzzX29eR865oQyBzh1kYA5ZVADR1u4Z8u3WUeZYLc","pieceCid":"baga6ea4seaqf3fsl7jx5ifgxwdi3hxxuyyfekdae7z726ogowncs35ztemnieli"}', { payloadCid: 'bafk2bzacedwijqctovxwicnnzanepiunhch6gx54wsgiwprvhrisvlwunhjsa' }], ['{"minerId":"12D3KooWLMqPzzX29eR865oQyBzh1kYA5ZVADR1u4Z8u3WUeZYLc","pieceCid":"baga6ea4seaqdr7pzeagxe46k7jelj55nxzvxo32qajipmgraama22cygieyi4lq"}', { payloadCid: 'bafk2bzaceard2x6ae7kmqcayur2ou4x54xmxaisfuwtqwr6d2cnrre4oci6da' }], ['{"minerId":"12D3KooWLMqPzzX29eR865oQyBzh1kYA5ZVADR1u4Z8u3WUeZYLc","pieceCid":"baga6ea4seaqh3uuzfwqu3t4b6fnzgeray4khn76to7yu6743uy6c3u6bq4g2aky"}', { payloadCid: 'bafk2bzaceawwunk5kvxuitxt2wi4bhxaar32f7eao77vtoglgoivs2ndwtp6q' }], ['{"minerId":"12D3KooWLMqPzzX29eR865oQyBzh1kYA5ZVADR1u4Z8u3WUeZYLc","pieceCid":"baga6ea4seaqdmc5ji5l3xtkgw2uyqyet4j4ox7u65xhbdjyrsnl3zuttcob34eq"}', { payloadCid: 'bafk2bzacedwz2rwhxawjocabhlw7dvkvmrc6jc4r5t7zm5iiwk35idtow3qri' }], ['{"minerId":"12D3KooWLMqPzzX29eR865oQyBzh1kYA5ZVADR1u4Z8u3WUeZYLc","pieceCid":"baga6ea4seaqme5o4aaaucbcj36eki7wbazlcfj764sucgaqfqpezmcvnbmrwsiy"}', { payloadCid: 'bafk2bzaceanjy6cifufyiupd4wybdsmtigsjysaqb5lkxn4a22krxj7r4hucg' }], ['{"minerId":"12D3KooWLMqPzzX29eR865oQyBzh1kYA5ZVADR1u4Z8u3WUeZYLc","pieceCid":"baga6ea4seaqjkhejx3ykiw5mfxuwrbtncelohvs34myxnx6k6b6qb7cyfohwyja"}', { payloadCid: 'bafk2bzaced2cn6vzgobtsrzpqvww44nxwaxz7naz3q2n2a3htugpladmwal5g' }], ['{"minerId":"12D3KooWLMqPzzX29eR865oQyBzh1kYA5ZVADR1u4Z8u3WUeZYLc","pieceCid":"baga6ea4seaqopyklkmzaocml6ac23ayfqyzjmp6tozzeijaqmjjiurdrli6siea"}', { payloadCid: 'bafk2bzacedutntwnpado7ro7on6vng5hz47ppaonh5gks3qdvwuuw7lk7ilyq' }], ['{"minerId":"12D3KooWLMqPzzX29eR865oQyBzh1kYA5ZVADR1u4Z8u3WUeZYLc","pieceCid":"baga6ea4seaqlcjglepky2yup22eljfvztnx4ufvqlrw5wxkbxv6lqkz64w5wgna"}', { payloadCid: 'bafk2bzacebjvojzlxizyxlb4lb73ewqyj3siddcwsyosigiavcgbb6feh44bo' }], ['{"minerId":"12D3KooWLMqPzzX29eR865oQyBzh1kYA5ZVADR1u4Z8u3WUeZYLc","pieceCid":"baga6ea4seaqhdqtf4tsp4tsciv7pxkg74hvvbvuv5q4gbqqo45leceraicknigy"}', { payloadCid: 'bafk2bzacech5yvq2hcdrimlm2geak7f5qiqor42cn53ay3sv5bpe7am3hlbtq' }], ['{"minerId":"12D3KooWLMqPzzX29eR865oQyBzh1kYA5ZVADR1u4Z8u3WUeZYLc","pieceCid":"baga6ea4seaqf6ntn5ecw2drg4grwuc6xfozqyjzgtgyuqra5egmacjtyv5r74pa"}', { payloadCid: 'bafk2bzacea2tzvszylayln5vkxr6zrqrb7joooqxviitl25udarma2uupyof2' }], ['{"minerId":"12D3KooWLMqPzzX29eR865oQyBzh1kYA5ZVADR1u4Z8u3WUeZYLc","pieceCid":"baga6ea4seaqmbaot42i2ir7v6eaorzy6dqmq25e7rfrsvylasct77dcf2wd52oy"}', { payloadCid: 'bafk2bzacebtceu6thfyqyrj4gtrc747cv2sdkfy7zzqmyhjqgme5fjpu2d5pi' }], ['{"minerId":"12D3KooWLMqPzzX29eR865oQyBzh1kYA5ZVADR1u4Z8u3WUeZYLc","pieceCid":"baga6ea4seaqo3lq6pjlmam32qwz5qexjmxu2dekgta2lf7xuwnnymw7uacw2ojq"}', { payloadCid: 'bafk2bzacecb6mwj7ppvmzecp4ys22wlo477ealn6boogyefld7ejp2c5ogafs' }], ['{"minerId":"12D3KooWLMqPzzX29eR865oQyBzh1kYA5ZVADR1u4Z8u3WUeZYLc","pieceCid":"baga6ea4seaqjp2t6cri4ivzxrbvb6p3jgsl5g6ijxqx26g4beozoko5hrsrmgla"}', { payloadCid: 'bafk2bzacedezb3sv5kipso3eh43tl5xvqp4gxh7h56jg6uq2xnrj64jto5eto' }], ['{"minerId":"12D3KooWNswHm1CX3DtYMe6qUfoRVo3a5ESGQtnLUGz287Vu2TUL","pieceCid":"baga6ea4seaqe74rzeutrjpqkkf754n3twaaln5ol5ws2byoech772ufhurh26ha"}', { payloadCid: 'bafkreiennl7rxg5n3w7cg7h4etxqj2zwjhvexhqzdexa7kp5qqhz4g4emu' }], ['{"minerId":"12D3KooWFrsQanytSSCBvqoKfx5q461XXoJhTKuztc9FQcg8iZdN","pieceCid":"baga6ea4seaqptbn6mqynri5hj2ncmgwphwvvzlvqs6tfrqkbdnlljucpkiamigi"}', { payloadCid: 'bafk2bzaceduetlaama5dafusfcjukrqd4y5xlaoj6t4az4seiji7nkrswikqm' }], ['{"minerId":"12D3KooWFWXbQG9x44JVauFnG7zqzfuR4eDo9iGbXUm9rTLvW7kv","pieceCid":"baga6ea4seaqnbutajbdapcrerkrviw2ipkqjcnuoww6f52nu5uverpbr27pt2by"}', { payloadCid: 'bafkreih5la5ft7vqwulwdzltunqxxt3cilqfmgikr62vfhn54g3mdvos5m' }], ['{"minerId":"12D3KooWPwmecs5kYYxBKGGeAM2hSNMKBWhzPcxeoUhomwQvkmc5","pieceCid":"baga6ea4seaqhbmjizhodhzsssyoxbwt6qqktolr7oweidenacfrtypizs3avama"}', { payloadCid: 'bafkreia6skmrwozwtgyjplr7xa5u3tgog32v7b4wp6qjdj3cerpfezy4me' }], ['{"minerId":"12D3KooWPwmecs5kYYxBKGGeAM2hSNMKBWhzPcxeoUhomwQvkmc5","pieceCid":"baga6ea4seaqgnvcwuaymshmpdrjwibt5nfm5nlq74c4dehumlpzntny4nf7g4ny"}', { payloadCid: 'bafkreifvi3ceprmecwi4i6kii7tldz4qpai3socuduxv5cnnygcn2x3usq' }], ['{"minerId":"12D3KooWMfYLM4trWfT6AuXVAZLApaE7wYVjop2AdBiA9f4QSdU6","pieceCid":"baga6ea4seaqnvssgq3x7gsud6dvbmb6mrhlhnz2sidm3iqudma5shyvssjuyanq"}', { payloadCid: 'bafkreid2f2jchyftbay4oevp5aui3t2aosky4brq65kz3fidrcutob7agq' }], ['{"minerId":"12D3KooWRu4BCdVnH2pxu8ykgxKp3Nm435CVgUZLGimAAMdsCP1w","pieceCid":"baga6ea4seaqex6umy2mef2sy4ksxlrj6id6czkiscdw5mr47c3kvdxl6uxqkuma"}', { payloadCid: 'bafkreifsdxtf3k42z3rsygwuszs34iwurjglq4rfi6zumsp5b66tcmzcku' }], ['{"minerId":"12D3KooW9stmqV7MzK6oYJVfBAjbKGUNx78arLBYFKfBT4Y5sNQp","pieceCid":"baga6ea4seaqj7c5rk642zi3uaxtkat32mvb23cga4ahoh3727fhqlsqlhoqm6by"}', { payloadCid: 'bafk2bzacea2n7xb6y27ppt377kdnmryx6lidjx2zroc4nuugwqbwqzm452vhk' }], ['{"minerId":"12D3KooW9stmqV7MzK6oYJVfBAjbKGUNx78arLBYFKfBT4Y5sNQp","pieceCid":"baga6ea4seaqojfzusijwxo4w7t4lsuyi3etvndaea7v4hhdqmy22ganvbhj3woq"}', { payloadCid: 'bafk2bzacea2n7xb6y27ppt377kdnmryx6lidjx2zroc4nuugwqbwqzm452vhk' }], ['{"minerId":"12D3KooWJ2RJBxFJyFEQVQ9qguqG8WcTWFnBddgWNqaNZ1ckaigP","pieceCid":"baga6ea4seaqooosjwcv7zp6dudje46r2cc7zhw4f6cicgu4dstmicsmjghdsslq"}', { payloadCid: 'bafkreifpn3haohicqp3iywkzeqfghfr55pyudlqfrg7ilhzk2xlva3vx2q' }], ['{"minerId":"12D3KooWL5FGicDPs5BoTRAAeidCb9fPSgHMULvi1YR7usSv4huP","pieceCid":"baga6ea4seaqg62mztv2kpxklocr63rliwhogk3k5mr5f3nfahodadpxucu2iqnq"}', { payloadCid: 'bafkreigcq5d2wlxckxudkz2frwdhsj63tjhdytzfjzqxqbp53uirkfw2jy' }], ['{"minerId":"12D3KooWL5FGicDPs5BoTRAAeidCb9fPSgHMULvi1YR7usSv4huP","pieceCid":"baga6ea4seaqayhr7rab33xmo62bkbu75n3bcqsiwo5zbeh4uk3ofw3hctqn7gma"}', { payloadCid: 'bafkreictaj7c2o2322n4yd5fklmqqgpcrp3h5bjrnuld7z3reh3bcr6ndy' }], ['{"minerId":"12D3KooWBmhUE7xC9x1fgYoYzuaU2xt78AsoqUn8Qx7AW615gFXF","pieceCid":"baga6ea4seaqmresrmiooaloi7vbdpgc6iekjbz3cj44dpfs3v6eg6gmcoh5qkii"}', { payloadCid: 'bafkreicpz367w2xvuaiktd7euzflc65wh3xnofmkgak7ro3ztfvwwybkqa' }], ['{"minerId":"12D3KooWPXMj5jBxR4AezWRXF5yRnVnEN2VhhmaearRqBoG2VfAm","pieceCid":"baga6ea4seaqgjh5ja3s44y6avfbn7yozv3d2vsv7mveaoanr7fjit7vaoyqu6my"}', { payloadCid: 'bafkreihmlyy74fyev5n37vlz3k6tq4mpfyuvs64rqr3u3fln7wmyeasvvu' }], ['{"minerId":"12D3KooWPkghN7vdSyB3jqJBfV9hVEZhwpHTiPFRowU85SGyWW8E","pieceCid":"baga6ea4seaqi55dauatahlbsl2ekebiligxg4q36s5whca4e7jtgga6myno7umq"}', { payloadCid: 'bafk2bzacecfxanlicttor5qvjirgcmap5q7z7jswekb7e2ybx2lw5ambpt4by' }], ['{"minerId":"12D3KooWA9zrKfscXkHycZTcaBguqxQEwxVftDenW8PwSmiubdfH","pieceCid":"baga6ea4seaqgl3iho7ql6lkilwz7e7j5bnu4rz476wtxqnjp62uy65r2zurw2dy"}', { payloadCid: 'bafkreifukxd7rgpzpkyejbyek3k24gtchal5dum3uo5wy6n257c2ga4gp4' }], ['{"minerId":"12D3KooWA9zrKfscXkHycZTcaBguqxQEwxVftDenW8PwSmiubdfH","pieceCid":"baga6ea4seaqbupwheo5vwum2i5zzdsw4baq2jbak622dgrk4ugu22upce7f76pq"}', { payloadCid: 'bafkreidifongb7yknp7s3y52uwxeqkhy73nw4ejcmtljki7vpx2a5nixcu' }], ['{"minerId":"12D3KooWA9zrKfscXkHycZTcaBguqxQEwxVftDenW8PwSmiubdfH","pieceCid":"baga6ea4seaqgw6dqe5fshyppy6aopexcccr7lumu2bl5rt4j5ryi5uh5jmwoahq"}', { payloadCid: 'bafkreifzhgo6arlefxq6ygtxpxo4nr3ubjrr4tgzhkmfxvmbnynvnjl5vi' }], ['{"minerId":"12D3KooWHEwyy4wvkFAAjXVXKPqvwpTZgguKJUEZUEESaCFL2xqN","pieceCid":"baga6ea4seaqp7pkyaxgajr2fpmgfbnuinwlpici25anruk7fb5lprjnqlusucca"}', { payloadCid: 'bafkreidagqeydmorctv4e3unqv3u6g4hzi6uf32ymd67ubluyjuanilwfm' }], ['{"minerId":"12D3KooWHEwyy4wvkFAAjXVXKPqvwpTZgguKJUEZUEESaCFL2xqN","pieceCid":"baga6ea4seaqhxy2ejtcjjsstmfqs5ztrrjpne2mp4w2wwzecxnwwjg5lkamronq"}', { payloadCid: 'bafkreicnhdsjm7b46yqfjms6mirxxuu4eqpg4qr7sih4amluhhse3p5xza' }], ['{"minerId":"12D3KooWFAcH5f2JW56APsYttGksxsUV8CnVYeg4zFBtp22zyDhz","pieceCid":"baga6ea4seaqog5sjsas7seo54luk35kgv25yaoqaa5c2ccrbsvm3pnhg5v2zwca"}', { payloadCid: 'bafkreiadxph7awbsc43ddckb5dtmflr55b4oz2iv3ecpfwwuhfn22tnclq' }], ['{"minerId":"12D3KooWNswHm1CX3DtYMe6qUfoRVo3a5ESGQtnLUGz287Vu2TUL","pieceCid":"baga6ea4seaqcnayfzvapy53vbk6keje3kvho2y6m4pc7ks2xdr3u4tysmqkvsna"}', { payloadCid: 'bafkreifeix5isv6nt4nvw2kusaukwjztlmqanzynojqrydkulh46olf6wq' }], ['{"minerId":"12D3KooWP4ZuvyAiC5DjZZnLq4EfexYPyY8zcbdDX5z6bpe8W72Y","pieceCid":"baga6ea4seaqpftpnrp7tmwzz2h6hs6u57ky5kvzpfo5mlid7x4jm3jphplioecq"}', { payloadCid: 'bafkreibwckbowpzaezpqgwgikdgbjmullnzynj23ljs4mb6tjzuws2t7ea' }], ['{"minerId":"12D3KooWMfYLM4trWfT6AuXVAZLApaE7wYVjop2AdBiA9f4QSdU6","pieceCid":"baga6ea4seaqa32zgo7twhtpi62quq3mcggvjnl5wdh76xb6wns6kyw6zxxcb6jy"}', { payloadCid: 'bafkreif3kemxj4s7ef6k7j3vemfzwb27uxg66pjcjapuk3hevq6b5bkam4' }], ['{"minerId":"12D3KooWMfYLM4trWfT6AuXVAZLApaE7wYVjop2AdBiA9f4QSdU6","pieceCid":"baga6ea4seaqduczflmcblgcosglltka6jqqiyxfbtq2pw3nfelmhsjlwz6m46mi"}', { payloadCid: 'bafkreigjfergabelpa7fsbubixt674oh7bawjxemtiw5k6cij5mcefei6e' }], ['{"minerId":"12D3KooWMfYLM4trWfT6AuXVAZLApaE7wYVjop2AdBiA9f4QSdU6","pieceCid":"baga6ea4seaqoerkq5arm2qlj3qzrdl7pxgm5oxrnetcjmluw6vm4wm63n2wyomi"}', { payloadCid: 'bafkreidjs5ltb6vtpl6z7ba4zvi65z43raowppxuemzueguexj75htlplm' }], ['{"minerId":"12D3KooWMfYLM4trWfT6AuXVAZLApaE7wYVjop2AdBiA9f4QSdU6","pieceCid":"baga6ea4seaqh2xl27kipodslrzgfex2sq7jibrzw4f53nscte5gkoxq4v57sohq"}', { payloadCid: 'bafkreigucj55y2m63tsyvywahpgu5qljhgmaiza7q6bmypqelj2iq27emm' }], ['{"minerId":"12D3KooWFAcH5f2JW56APsYttGksxsUV8CnVYeg4zFBtp22zyDhz","pieceCid":"baga6ea4seaqbp3eroljrlqxamujrmaat6t4dkqpx73elhzbeilnr5r2thbvh6jq"}', { payloadCid: 'bafkreiad3jlpwppkzgxfx3d5as2rwhidihczid6g3tvafnxhjld2dg6zbi' }], ['{"minerId":"12D3KooWMfYLM4trWfT6AuXVAZLApaE7wYVjop2AdBiA9f4QSdU6","pieceCid":"baga6ea4seaqkurfwxiz5qhk2qqdzovtwmvyp6rukh2p6v2eie6rfazkcc6u5cki"}', { payloadCid: 'bafkreiccs3w2o7nkmjcd43j4ecwjhpg2e3qt44kgzdkjzbvxp7xyho2iay' }], ['{"minerId":"12D3KooWMfYLM4trWfT6AuXVAZLApaE7wYVjop2AdBiA9f4QSdU6","pieceCid":"baga6ea4seaqcwp4mgxffmjcqqy3rgpzgxrh3dcxyw7kbl3mweyvnsit2kwykefq"}', { payloadCid: 'bafkreifceycwkr5fr4f35vsb6uakpurbterzshmvmrlt7fudw5inaysrti' }], ['{"minerId":"12D3KooWMfYLM4trWfT6AuXVAZLApaE7wYVjop2AdBiA9f4QSdU6","pieceCid":"baga6ea4seaqbslbooajvukcnmke7n2p2bbbf23swlq3xpdn4iouzv7gybfnoqny"}', { payloadCid: 'bafkreidisjo534pqpbojijnk42lzcvjlahqx2qje5nxvidczgwkv75agde' }], ['{"minerId":"12D3KooWHEwyy4wvkFAAjXVXKPqvwpTZgguKJUEZUEESaCFL2xqN","pieceCid":"baga6ea4seaqhkztpfcl7yltl63osbx4n4gflzbj5k6th2evea4epeitvjwe62pq"}', { payloadCid: 'bafkreihajwuyqtwtqsowlmmloqhwalacukchyzsqgcmrq7pr3yxi2nnbvi' }], ['{"minerId":"12D3KooWMfYLM4trWfT6AuXVAZLApaE7wYVjop2AdBiA9f4QSdU6","pieceCid":"baga6ea4seaqpmpapwcd5eapvnm5mtzojfc2jb3ya42eaob2s7s5a3ltedxtgepq"}', { payloadCid: 'bafkreig2leslspivlvbwozp76myjvtwtkfyortmqv3riheo2op7fxhxsym' }], ['{"minerId":"12D3KooWP4ZuvyAiC5DjZZnLq4EfexYPyY8zcbdDX5z6bpe8W72Y","pieceCid":"baga6ea4seaqckvw4tfxesxypyvnx3mrjyhbskkrfkd2zsb54kibnp5hvpgwuufa"}', { payloadCid: 'bafkreibqunts5ips3jxisvdecgqhtfg4i2hqvoadsu7je37tswl6aeujye' }], ['{"minerId":"12D3KooWP4ZuvyAiC5DjZZnLq4EfexYPyY8zcbdDX5z6bpe8W72Y","pieceCid":"baga6ea4seaqnes3kufdrykkclfdvvn45oo7kxdsrkib2minfvgotqgp3godyohq"}', { payloadCid: 'bafkreicnhdsjm7b46yqfjms6mirxxuu4eqpg4qr7sih4amluhhse3p5xza' }], ['{"minerId":"12D3KooWP4ZuvyAiC5DjZZnLq4EfexYPyY8zcbdDX5z6bpe8W72Y","pieceCid":"baga6ea4seaqlbogvurlutjjumtwuyrihit4z6hzdjoumndyo7ctb2ps62yjyuoq"}', { payloadCid: 'bafkreiazouzb7cq3mabxd6iackebb4aekubvxvoplo2zmog4vui7qoexje' }], ['{"minerId":"12D3KooWA9zrKfscXkHycZTcaBguqxQEwxVftDenW8PwSmiubdfH","pieceCid":"baga6ea4seaqd53wfw6itzn5kibstkrmgqcyjwrijb7bckfvdap2r4vlwbap4cjy"}', { payloadCid: 'bafkreigakmakwvvoev7fkts7njlkuay2pctsd4wivns324vb7njj2rydnq' }], ['{"minerId":"12D3KooWA9zrKfscXkHycZTcaBguqxQEwxVftDenW8PwSmiubdfH","pieceCid":"baga6ea4seaqjac767obhgvxckmbzdgr2ng6p4ajqchuvq7jxsbn3cveqynjj6jq"}', { payloadCid: 'bafkreichrgcvmcebvdwvleosw5jehfgfh6um4m46jizds65tl6jh5zc7wm' }], ['{"minerId":"12D3KooWK5CGgW8qYyEjLQw5MG1P9bDjJPnF5YjCtCyuDjFLLrdT","pieceCid":"baga6ea4seaqi3ozc6nokqm2gtxuhizsap4uuy6rcwibuq5fqv473jdu5q7poqai"}', { payloadCid: 'bafkreidjxss5bvynnuwngvdafkeid3xzuf5xdjbhd3uhkkvlu44lflezbi' }], ['{"minerId":"12D3KooWA9zrKfscXkHycZTcaBguqxQEwxVftDenW8PwSmiubdfH","pieceCid":"baga6ea4seaqjs6pevmhanhop52ef2tlwbd5oso2hh3dbjjk2yitmjhwcdvvuami"}', { payloadCid: 'bafkreibcjrtxtmwkbjmtsfijzh7iafryvvypntvpea7kems5mcbph3beo4' }], ['{"minerId":"12D3KooWFAcH5f2JW56APsYttGksxsUV8CnVYeg4zFBtp22zyDhz","pieceCid":"baga6ea4seaqpjjfv6r3j7doucyo3fn56vykzpqcmw3pofy4lmsabkew564ej4ci"}', { payloadCid: 'bafkreifdegnpbmbidewlmlbw6bb54kk66wljv3m47hc6sxcfq37oiioqb4' }], ['{"minerId":"12D3KooWL5FGicDPs5BoTRAAeidCb9fPSgHMULvi1YR7usSv4huP","pieceCid":"baga6ea4seaqdqkfpwcoiu7exmafddavnhgm3ykp7idh62ycyii7quqraddjgwfq"}', { payloadCid: 'bafkreibokfikpyp2ivderj3ciua62xqlczgpexu7vcz53kbqttbkw6bbnq' }], ['{"minerId":"12D3KooWMfYLM4trWfT6AuXVAZLApaE7wYVjop2AdBiA9f4QSdU6","pieceCid":"baga6ea4seaqlyol3yndrtin3mz3jn3r7cio7v3nrbrftjefbe5cyp6wnip7rsja"}', { payloadCid: 'bafkreihn7u72pnqkrswyph27nu4mfgqu2uq7dftrkghkhxxjqzgwower4u' }], ['{"minerId":"12D3KooWMfYLM4trWfT6AuXVAZLApaE7wYVjop2AdBiA9f4QSdU6","pieceCid":"baga6ea4seaqmvlplifq7tcew5w6udzcdsiesy4uyhysbmoc4cbrlt46wz57yqbi"}', { payloadCid: 'bafkreiexauvczm2d2benotx6humnxidmulj4inawwh5sej3bp2s76ur4iy' }], ['{"minerId":"12D3KooWMfYLM4trWfT6AuXVAZLApaE7wYVjop2AdBiA9f4QSdU6","pieceCid":"baga6ea4seaqeahxlhiihyorfqfjopat5qao2uocp32pbqmy5lqvj7uqi5cofcha"}', { payloadCid: 'bafkreif2jmxcvmov4sjd6oec646flss4vf274nopdigvoo2t4ygqk623wu' }], ['{"minerId":"12D3KooW9stmqV7MzK6oYJVfBAjbKGUNx78arLBYFKfBT4Y5sNQp","pieceCid":"baga6ea4seaqcwdhklaxbrmyh6tnubr4r3tzmzqpkrhyy3tswn3zxu5cc3dg3upa"}', { payloadCid: 'bafk2bzacea2n7xb6y27ppt377kdnmryx6lidjx2zroc4nuugwqbwqzm452vhk' }], ['{"minerId":"12D3KooWMqMTa6TPh8K4fdWpLYX7dzqsBSZY5dLoWzm4KQENbJWD","pieceCid":"baga6ea4seaql3lrohsdcqlhjgprdcadi3zl34feb2v4bdnmmavop4yafglegccy"}', { payloadCid: 'bafk2bzacebexjcvmvhqmd2omlo66h7qwyufuahffvodfkq5qx4aao3qu3l6co' }], ['{"minerId":"12D3KooWMqMTa6TPh8K4fdWpLYX7dzqsBSZY5dLoWzm4KQENbJWD","pieceCid":"baga6ea4seaqjfomzgrtrmwjzsud6btqk7s6oknkr7pzuixfv4jxor6plhzcssmq"}', { payloadCid: 'bafk2bzaceaqowoiegip6lsajhn4yuav53cklojet2fkwoe7gzjdrfsmr6vcwq' }], ['{"minerId":"12D3KooWMqMTa6TPh8K4fdWpLYX7dzqsBSZY5dLoWzm4KQENbJWD","pieceCid":"baga6ea4seaqgd3zw4za5isbrmus7h6vz5ovto24mg66yv2oxovxyn5ujh4z56pq"}', { payloadCid: 'bafk2bzacedemb45am2oteokwnvts63pf5w75jmubhhquw4dzc5swxg5rqfv3k' }], ['{"minerId":"12D3KooWMqMTa6TPh8K4fdWpLYX7dzqsBSZY5dLoWzm4KQENbJWD","pieceCid":"baga6ea4seaqganfz6lmaz7iazivtsxpzn2azvyifrtfc3mdlux4b4jyap2p2qga"}', { payloadCid: 'bafk2bzacecstapb6up7lkvmjogsejaflnyr6btmcik4ittucgxk3aw2fp5l6a' }], ['{"minerId":"12D3KooWMqMTa6TPh8K4fdWpLYX7dzqsBSZY5dLoWzm4KQENbJWD","pieceCid":"baga6ea4seaqpp6ghntuzwozobfr23bwd63p23ic6rx7dyn4mu4qdufpq6uxqefq"}', { payloadCid: 'bafk2bzacedemb45am2oteokwnvts63pf5w75jmubhhquw4dzc5swxg5rqfv3k' }], ['{"minerId":"12D3KooWMqMTa6TPh8K4fdWpLYX7dzqsBSZY5dLoWzm4KQENbJWD","pieceCid":"baga6ea4seaqpf2prrgdlxcznnavga5oj7uue7nn76g55sse6dn2wdlxl526reca"}', { payloadCid: 'bafk2bzaceaqowoiegip6lsajhn4yuav53cklojet2fkwoe7gzjdrfsmr6vcwq' }], ['{"minerId":"12D3KooWMqMTa6TPh8K4fdWpLYX7dzqsBSZY5dLoWzm4KQENbJWD","pieceCid":"baga6ea4seaqmczyfnwz7htthfgp6zz2u4okzgsdxfgtewol5766agcxb5l6nglq"}', { payloadCid: 'bafk2bzacedbntajeic2aoqxsjpiozn3wacpo4s6imc7pa4ke73ku2vn2jb4lq' }], ['{"minerId":"12D3KooWMqMTa6TPh8K4fdWpLYX7dzqsBSZY5dLoWzm4KQENbJWD","pieceCid":"baga6ea4seaqpbe64hyfldv3qhswhbwvqn2yixr7jt6cs6d6uurw3ue5ratuyypa"}', { payloadCid: 'bafk2bzaceaqowoiegip6lsajhn4yuav53cklojet2fkwoe7gzjdrfsmr6vcwq' }], ['{"minerId":"12D3KooWMqMTa6TPh8K4fdWpLYX7dzqsBSZY5dLoWzm4KQENbJWD","pieceCid":"baga6ea4seaqopk2i3ukx544q7zstcwqpgm5flpgrj24h7olvx7cpjmvamwyfofy"}', { payloadCid: 'bafk2bzacedemb45am2oteokwnvts63pf5w75jmubhhquw4dzc5swxg5rqfv3k' }], ['{"minerId":"12D3KooWMqMTa6TPh8K4fdWpLYX7dzqsBSZY5dLoWzm4KQENbJWD","pieceCid":"baga6ea4seaqktzsyfwbyzrzrorgmyzu3rqkotvswivxsikb2vstgzls257ifmmi"}', { payloadCid: 'bafk2bzacebexjcvmvhqmd2omlo66h7qwyufuahffvodfkq5qx4aao3qu3l6co' }], ['{"minerId":"12D3KooWMqMTa6TPh8K4fdWpLYX7dzqsBSZY5dLoWzm4KQENbJWD","pieceCid":"baga6ea4seaqhbmzopdae76jslfcasghc4myq4g4socwxd2dolwugr2csaeyykka"}', { payloadCid: 'bafk2bzacebexjcvmvhqmd2omlo66h7qwyufuahffvodfkq5qx4aao3qu3l6co' }], ['{"minerId":"12D3KooWMqMTa6TPh8K4fdWpLYX7dzqsBSZY5dLoWzm4KQENbJWD","pieceCid":"baga6ea4seaqcc32c4d6wyjiryoblehrexre3ijfdzv2ckskivnzyq3dz5u3osda"}', { payloadCid: 'bafk2bzacecstapb6up7lkvmjogsejaflnyr6btmcik4ittucgxk3aw2fp5l6a' }], ['{"minerId":"12D3KooWMqMTa6TPh8K4fdWpLYX7dzqsBSZY5dLoWzm4KQENbJWD","pieceCid":"baga6ea4seaqctwtqflxz3icrfxl3uqxnfsgecywwwlt2o3heokeotf3oyt5cchy"}', { payloadCid: 'bafk2bzacecstapb6up7lkvmjogsejaflnyr6btmcik4ittucgxk3aw2fp5l6a' }], ['{"minerId":"12D3KooWMqMTa6TPh8K4fdWpLYX7dzqsBSZY5dLoWzm4KQENbJWD","pieceCid":"baga6ea4seaqmmydebqkp57gwztpem5jcady2aclg6q3cdmfhpb62by5wdxgaqnq"}', { payloadCid: 'bafk2bzacebexjcvmvhqmd2omlo66h7qwyufuahffvodfkq5qx4aao3qu3l6co' }], ['{"minerId":"12D3KooWMqMTa6TPh8K4fdWpLYX7dzqsBSZY5dLoWzm4KQENbJWD","pieceCid":"baga6ea4seaqbmt6khyihj2ysjqchqivwmliy5nn5xebtuubqxnxc3q4whlq4eky"}', { payloadCid: 'bafk2bzacebexjcvmvhqmd2omlo66h7qwyufuahffvodfkq5qx4aao3qu3l6co' }], ['{"minerId":"12D3KooWMqMTa6TPh8K4fdWpLYX7dzqsBSZY5dLoWzm4KQENbJWD","pieceCid":"baga6ea4seaqhdehay7rsbelmbwrue6gn2fnygdsfomsgbpabvlymhm5yqzqhmma"}', { payloadCid: 'bafk2bzacecstapb6up7lkvmjogsejaflnyr6btmcik4ittucgxk3aw2fp5l6a' }], ['{"minerId":"12D3KooWMqMTa6TPh8K4fdWpLYX7dzqsBSZY5dLoWzm4KQENbJWD","pieceCid":"baga6ea4seaqjaxwbqrflpx4do64m75a32kacpdr7jepeyjxsmkiisjvjgwxj6aa"}', { payloadCid: 'bafk2bzacedemb45am2oteokwnvts63pf5w75jmubhhquw4dzc5swxg5rqfv3k' }], ['{"minerId":"12D3KooWMqMTa6TPh8K4fdWpLYX7dzqsBSZY5dLoWzm4KQENbJWD","pieceCid":"baga6ea4seaqjayvwvetgzvifqmfzakijdtlgnhvsa6wesacvmlsbwguiv22dscq"}', { payloadCid: 'bafk2bzacebexjcvmvhqmd2omlo66h7qwyufuahffvodfkq5qx4aao3qu3l6co' }], ['{"minerId":"12D3KooWMqMTa6TPh8K4fdWpLYX7dzqsBSZY5dLoWzm4KQENbJWD","pieceCid":"baga6ea4seaqce24e4mjrn7mbdjaptug5locz6u3nuauek4cf6lbuy6u5mxqkeba"}', { payloadCid: 'bafk2bzacedemb45am2oteokwnvts63pf5w75jmubhhquw4dzc5swxg5rqfv3k' }], ['{"minerId":"12D3KooWMqMTa6TPh8K4fdWpLYX7dzqsBSZY5dLoWzm4KQENbJWD","pieceCid":"baga6ea4seaqmj7v5x6dumfg6qrb2d4prmonlz5bhvta4ca4k3auadqloukgeiba"}', { payloadCid: 'bafk2bzacedemb45am2oteokwnvts63pf5w75jmubhhquw4dzc5swxg5rqfv3k' }], ['{"minerId":"12D3KooWMqMTa6TPh8K4fdWpLYX7dzqsBSZY5dLoWzm4KQENbJWD","pieceCid":"baga6ea4seaqbqmme67nfqyc6jnvecfucefoqbnehk4balqmhgsx5kbudh3yjwli"}', { payloadCid: 'bafk2bzacebexjcvmvhqmd2omlo66h7qwyufuahffvodfkq5qx4aao3qu3l6co' }], ['{"minerId":"12D3KooWMqMTa6TPh8K4fdWpLYX7dzqsBSZY5dLoWzm4KQENbJWD","pieceCid":"baga6ea4seaqkwjn3anehnmkpyxunpehgxu7ahcyxugor3armolebdhkshpznoly"}', { payloadCid: 'bafk2bzacedemb45am2oteokwnvts63pf5w75jmubhhquw4dzc5swxg5rqfv3k' }], ['{"minerId":"12D3KooWMqMTa6TPh8K4fdWpLYX7dzqsBSZY5dLoWzm4KQENbJWD","pieceCid":"baga6ea4seaqoweorhk5syca6pbgfwu36ywaldfw6wo2yt36g5notbjyd2ulpeli"}', { payloadCid: 'bafk2bzaceaqowoiegip6lsajhn4yuav53cklojet2fkwoe7gzjdrfsmr6vcwq' }], ['{"minerId":"12D3KooWMqMTa6TPh8K4fdWpLYX7dzqsBSZY5dLoWzm4KQENbJWD","pieceCid":"baga6ea4seaqmcmia2v2yizub23pbwljg3rjwknqler5thz3fwrtwghostbndamq"}', { payloadCid: 'bafk2bzacecstapb6up7lkvmjogsejaflnyr6btmcik4ittucgxk3aw2fp5l6a' }], ['{"minerId":"12D3KooWMqMTa6TPh8K4fdWpLYX7dzqsBSZY5dLoWzm4KQENbJWD","pieceCid":"baga6ea4seaqem7vyppni3id3kg5kc7mv6adfhjh46o2qn26eqgdpwq4nnfs4aky"}', { payloadCid: 'bafk2bzacebexjcvmvhqmd2omlo66h7qwyufuahffvodfkq5qx4aao3qu3l6co' }], ['{"minerId":"12D3KooWMqMTa6TPh8K4fdWpLYX7dzqsBSZY5dLoWzm4KQENbJWD","pieceCid":"baga6ea4seaqass26drmg6i23stqsaupuboqt3sp37zdmpjedeszig5uawisgkaq"}', { payloadCid: 'bafk2bzacecstapb6up7lkvmjogsejaflnyr6btmcik4ittucgxk3aw2fp5l6a' }], ['{"minerId":"12D3KooWMqMTa6TPh8K4fdWpLYX7dzqsBSZY5dLoWzm4KQENbJWD","pieceCid":"baga6ea4seaqeeazkysgdr57mi4lekspdzwdboxffyqyirefpodmhs7obqusxuca"}', { payloadCid: 'bafk2bzacedemb45am2oteokwnvts63pf5w75jmubhhquw4dzc5swxg5rqfv3k' }], ['{"minerId":"12D3KooWMqMTa6TPh8K4fdWpLYX7dzqsBSZY5dLoWzm4KQENbJWD","pieceCid":"baga6ea4seaqerv4iossnvikngl5k74ovnixjdef5fozmkmuvrtbufxrpbysraaq"}', { payloadCid: 'bafk2bzacebexjcvmvhqmd2omlo66h7qwyufuahffvodfkq5qx4aao3qu3l6co' }], ['{"minerId":"12D3KooWMqMTa6TPh8K4fdWpLYX7dzqsBSZY5dLoWzm4KQENbJWD","pieceCid":"baga6ea4seaqnd4y7okm4inq7mhg5surnv77dksmdcg7dhxqagsvt7yrj3urdsoi"}', { payloadCid: 'bafk2bzaceaqowoiegip6lsajhn4yuav53cklojet2fkwoe7gzjdrfsmr6vcwq' }], ['{"minerId":"12D3KooWMqMTa6TPh8K4fdWpLYX7dzqsBSZY5dLoWzm4KQENbJWD","pieceCid":"baga6ea4seaqfmz7ffcnf7kmd2fd4qvv5vlfgyon3eco6miubjmozy2yhsqv2uiy"}', { payloadCid: 'bafk2bzacedemb45am2oteokwnvts63pf5w75jmubhhquw4dzc5swxg5rqfv3k' }], ['{"minerId":"12D3KooWMqMTa6TPh8K4fdWpLYX7dzqsBSZY5dLoWzm4KQENbJWD","pieceCid":"baga6ea4seaqkvmkugrtmus2sztjfaatif57hdp7mo6dmypzpnorfpytx4ac6edy"}', { payloadCid: 'bafk2bzaceaqowoiegip6lsajhn4yuav53cklojet2fkwoe7gzjdrfsmr6vcwq' }], ['{"minerId":"12D3KooWMqMTa6TPh8K4fdWpLYX7dzqsBSZY5dLoWzm4KQENbJWD","pieceCid":"baga6ea4seaqkbknazbbk4hcl6l2k3dcozozgupzcnmaamixlhz6pfyjjzkqaeaa"}', { payloadCid: 'bafk2bzacebexjcvmvhqmd2omlo66h7qwyufuahffvodfkq5qx4aao3qu3l6co' }], ['{"minerId":"12D3KooWNswHm1CX3DtYMe6qUfoRVo3a5ESGQtnLUGz287Vu2TUL","pieceCid":"baga6ea4seaqiszpg5ebrbhh3clmkgdnd6t42ozxmswylvsmx4j5fsu3fsow7qoy"}', { payloadCid: 'bafkreiggypz4t4l5n23tbh5fnun24jfstky56ffamvi2l7gvsyyiou6pua' }], ['{"minerId":"12D3KooWFAcH5f2JW56APsYttGksxsUV8CnVYeg4zFBtp22zyDhz","pieceCid":"baga6ea4seaqcx3vaadxhkawtnvupp2drvzvipddsi7y26w3zmoq3kq5v6nqviiy"}', { payloadCid: 'bafkreidsak65ji2no22hw6mfzh22hbrvk3ztnhkcmrlg5rs3xekg2xoeje' }], ['{"minerId":"12D3KooWL5FGicDPs5BoTRAAeidCb9fPSgHMULvi1YR7usSv4huP","pieceCid":"baga6ea4seaqgoowoohzxczihp5udvqc4o5lf2mojxesfcch6pbo44o4aqonmipy"}', { payloadCid: 'bafkreib7ba5mc245e7ia66y6h37j6hlwrpzu5b7kyduhovugo56lvfmr6y' }], ['{"minerId":"12D3KooWL5FGicDPs5BoTRAAeidCb9fPSgHMULvi1YR7usSv4huP","pieceCid":"baga6ea4seaqjybgy7fuhctwjnpl7ezdlrfhyo3b2aw3q3mbahqho6zu6ribrkli"}', { payloadCid: 'bafkreihb6wrluy3lznxtz3eqpt5hl5dhjc6hwebpw5vzsenato5t4vol5i' }], ['{"minerId":"12D3KooWHXPKWUqx9cyag239D7qDGFxHGzxszTs3j1rJzhRYhpzV","pieceCid":"baga6ea4seaqo6p55ghwnuot2phe3uqkfqxx66nesohycochakv4bgefvdfyukiq"}', { payloadCid: 'bafkreibofx3fff3ydpocrllf2qz4xxmshcko3ufw6vmf5qtlzd7mlpyng4' }], ['{"minerId":"12D3KooWHXPKWUqx9cyag239D7qDGFxHGzxszTs3j1rJzhRYhpzV","pieceCid":"baga6ea4seaqi5lqanoe5r7pwtv7f6il2unj4s6orjf6jucrvzntf6sx6oqlxuha"}', { payloadCid: 'bafkreido6yi6zsrnsuw5qsii54q57gtqz2vclisyqj5s2dssvjj5cxalza' }], ['{"minerId":"12D3KooWL5FGicDPs5BoTRAAeidCb9fPSgHMULvi1YR7usSv4huP","pieceCid":"baga6ea4seaqeblmbg5z3i6nhnily7czad2pr6ytzn76cj3bez6gexedlez7lwni"}', { payloadCid: 'bafkreidkkmdnfsqxvzmubtpguw357tswcxagqw4zw62txz4xpgberhzhse' }], ['{"minerId":"12D3KooWL5FGicDPs5BoTRAAeidCb9fPSgHMULvi1YR7usSv4huP","pieceCid":"baga6ea4seaqbxpryohruxzam7k3fwlfdeaheag43yolxoqxug62jp7xncse3cki"}', { payloadCid: 'bafkreifxm6b5skqvklfmik7jzxxeglyjy73n2g7u777cnasyzope24nspu' }], ['{"minerId":"12D3KooWL5FGicDPs5BoTRAAeidCb9fPSgHMULvi1YR7usSv4huP","pieceCid":"baga6ea4seaqjn4flkfnb5luyrkarokwhcadkfrrl6jsdvmytie2qn3amn7clspq"}', { payloadCid: 'bafkreihlewsrqt3xqzuh2sykufggviupwkxzhu2wq5ppff4xgtcdto2yny' }], ['{"minerId":"12D3KooWMfYLM4trWfT6AuXVAZLApaE7wYVjop2AdBiA9f4QSdU6","pieceCid":"baga6ea4seaqhpru4cqnjt4qcokbje43srekmukmxrnoaulf5guzgn6etyandgdi"}', { payloadCid: 'bafkreiabnw32l6wzvo5dosfbouyz3tvky7pkaeqn46dbskw2mpnosarfm4' }], ['{"minerId":"12D3KooWMfYLM4trWfT6AuXVAZLApaE7wYVjop2AdBiA9f4QSdU6","pieceCid":"baga6ea4seaqiy7arj2ee4u6kzr4iqh6nnatsu5yvnsl36y2vjnmxmmc55qs4coi"}', { payloadCid: 'bafkreiha3iyhhszl6i33yvetlkjrm7aao6gxxw2lfpvepeplpmshufdpd4' }], ['{"minerId":"12D3KooWPXMj5jBxR4AezWRXF5yRnVnEN2VhhmaearRqBoG2VfAm","pieceCid":"baga6ea4seaqmnq74ql6wk2b7iuz5dzaxn3kf26pirrt53xjqzrtkbatbpi4dgoy"}', { payloadCid: 'bafkreihjacxfnkrefm7nrk67h6bjecbffc322vthiro4lceah6du4yye6a' }], ['{"minerId":"12D3KooWSbaHysCouYi2K6A8Fa6zaTfdyvGwxPQoMERuTZhwu8MQ","pieceCid":"baga6ea4seaqg6urtdesoxgrbvlil4ypumvgxi3gmjyobxhcqljwp2hepxon3miq"}', { payloadCid: 'bafk2bzacedoleyqgvezv25porlsltcyq75ehnp5br7vt6mxrtpnm7uycwvbe2' }], ['{"minerId":"12D3KooWMfYLM4trWfT6AuXVAZLApaE7wYVjop2AdBiA9f4QSdU6","pieceCid":"baga6ea4seaqarxqtagfenjqytqgsbtndzarh6gvklswekqo5irx4sbaw5xtokha"}', { payloadCid: 'bafkreifncht4gp6auxd57mvcjsingcixqfnfx7gd7oliq45l6ghzchmsym' }], ['{"minerId":"12D3KooWA9zrKfscXkHycZTcaBguqxQEwxVftDenW8PwSmiubdfH","pieceCid":"baga6ea4seaqdosryrd4hkzyxfnkpvynpb7xqy4yvkqrwigpe7j53l7aggb4caai"}', { payloadCid: 'bafkreihihnflxujtepv2fcx75drtv4gpzeb3dq7bmpfqfkondri7v2g7na' }], ['{"minerId":"12D3KooWRu4BCdVnH2pxu8ykgxKp3Nm435CVgUZLGimAAMdsCP1w","pieceCid":"baga6ea4seaqjq6pdmnr6wjqcg2fzgg3noueoyoyp3eeqffqy2gwvmxqhviqqeci"}', { payloadCid: 'bafkreicvr4ko2hh4flb5sczgwy2cgah35ze66h2r2l7xpehzj4bipmrmxi' }], ['{"minerId":"12D3KooWPkghN7vdSyB3jqJBfV9hVEZhwpHTiPFRowU85SGyWW8E","pieceCid":"baga6ea4seaqnlu2oihj7diy6cqiuyuajor4ey3vcb4osfs3v3abssirnpk66kpq"}', { payloadCid: 'bafk2bzacebss43kqspsucwpchbg6z4fst7ab2h473suvlv3yhwp3h3ggupo6i' }], ['{"minerId":"12D3KooWMfYLM4trWfT6AuXVAZLApaE7wYVjop2AdBiA9f4QSdU6","pieceCid":"baga6ea4seaqgjaynodkfziplwpiorj7f3udylmu6lpbb4exkh4rq2ftcl6s4kly"}', { payloadCid: 'bafkreigzfnwvpc3cniyaf7syeykvrx6awqjhxw5of2sluix2a5ek3dnq3a' }], ['{"minerId":"12D3KooWNswHm1CX3DtYMe6qUfoRVo3a5ESGQtnLUGz287Vu2TUL","pieceCid":"baga6ea4seaqp2my7zqiccfy62smpofj5vzdgmiftmorx4umdxp2je6us5iueaoa"}', { payloadCid: 'bafkreibfm5gmpusj2krqflj4bqa4anccxqsxoa7bxvbqstxfhww7nztlmi' }], ['{"minerId":"12D3KooWNswHm1CX3DtYMe6qUfoRVo3a5ESGQtnLUGz287Vu2TUL","pieceCid":"baga6ea4seaqp2zte7ngayweghudgt5eartopx4u3427qumxasoued3cm6t4k6da"}', { payloadCid: 'bafkreig7poajrkxxewnnn5dljv743rydl2whqdxpphngagank2r4dazawu' }], ['{"minerId":"12D3KooWP4ZuvyAiC5DjZZnLq4EfexYPyY8zcbdDX5z6bpe8W72Y","pieceCid":"baga6ea4seaqmi2doeexphufu2mt5lsbrpqm3q42ouwhtxmpao3fdqlq5z4gssia"}', { payloadCid: 'bafkreig3bj75pvfkx4lclqhcirzrxyx5audhyfravuhh4nnjvnflv2fmqm' }], ['{"minerId":"12D3KooWP4ZuvyAiC5DjZZnLq4EfexYPyY8zcbdDX5z6bpe8W72Y","pieceCid":"baga6ea4seaqoeyitqixxpjqpdrxdvwx5acpk4gsgavdouorgpdmdodswqlgqcci"}', { payloadCid: 'bafkreicnhdsjm7b46yqfjms6mirxxuu4eqpg4qr7sih4amluhhse3p5xza' }], ['{"minerId":"12D3KooWP4ZuvyAiC5DjZZnLq4EfexYPyY8zcbdDX5z6bpe8W72Y","pieceCid":"baga6ea4seaqi6f7yz6rex6pwjl5yodq3ngo35ckkwkrkx35mie3wiv6s5lbfgfq"}', { payloadCid: 'bafkreifpl2bujxkk2ltjk54tmixflc23rbillvujj5vouzumu7tuodqvoa' }], ['{"minerId":"12D3KooWP4ZuvyAiC5DjZZnLq4EfexYPyY8zcbdDX5z6bpe8W72Y","pieceCid":"baga6ea4seaqjhzam6qgpiadhp3cvkgm6ukcowyrivbh4jzik4ejmzqgcffqzcgi"}', { payloadCid: 'bafkreihykchjtf2hy7h3fbsvfnkudeetlrr6sxv757irorgylrbbpfhpya' }], ['{"minerId":"12D3KooWP4ZuvyAiC5DjZZnLq4EfexYPyY8zcbdDX5z6bpe8W72Y","pieceCid":"baga6ea4seaqmhva53apa4yyfbsuknz5u7345wledqfleqyp7ulh6usmw3k3pefq"}', { payloadCid: 'bafkreifigouzz2ymrvvdwceimcc6rarpfng72pltfgegm5dgvlwr6ovbk4' }], ['{"minerId":"12D3KooWMfYLM4trWfT6AuXVAZLApaE7wYVjop2AdBiA9f4QSdU6","pieceCid":"baga6ea4seaqgqr3sdtogp2gkrhavi5lxahgpetyqgcof2pqvdefbttua2rjguiq"}', { payloadCid: 'bafkreidaxrl2mgdbuw5te5etctxkovuhdzhw4lovnflkyqlek3hjnmhbfy' }], ['{"minerId":"12D3KooWL5FGicDPs5BoTRAAeidCb9fPSgHMULvi1YR7usSv4huP","pieceCid":"baga6ea4seaqmr62bruieii3itpvljvsyuxztlvwwfcm66rqmqx6xn2jnugzhqea"}', { payloadCid: 'bafkreiai7swvonnb4lc2ahnxrg373arqz6elmgebj6ygbug5zuem64fai4' }], ['{"minerId":"12D3KooWL5FGicDPs5BoTRAAeidCb9fPSgHMULvi1YR7usSv4huP","pieceCid":"baga6ea4seaqdao76rwaagexwcyfeclxsbzv4uddjdz5trhpvgwohnumwuma7gpq"}', { payloadCid: 'bafkreif5sa4gbylxj3x7nprielsfdpmwfwhjt7arvlk5tfdiagzfjgwulm' }], ['{"minerId":"12D3KooWMfYLM4trWfT6AuXVAZLApaE7wYVjop2AdBiA9f4QSdU6","pieceCid":"baga6ea4seaqkppavrj23np3mxoi5llf2haweizfqsb7lddvwdopgmineqcdd6iq"}', { payloadCid: 'bafkreiaskquhs7dmr2hdc4hb7244dxsxqaus4lsqc3n2qnibpes6mgt2uu' }], ['{"minerId":"12D3KooW9stmqV7MzK6oYJVfBAjbKGUNx78arLBYFKfBT4Y5sNQp","pieceCid":"baga6ea4seaqlizcrp5qovuco6rejqcm4ljiwb7watnknfzein6gynbsudfe3caq"}', { payloadCid: 'bafk2bzacea2n7xb6y27ppt377kdnmryx6lidjx2zroc4nuugwqbwqzm452vhk' }], ['{"minerId":"12D3KooWL5FGicDPs5BoTRAAeidCb9fPSgHMULvi1YR7usSv4huP","pieceCid":"baga6ea4seaqkli4xil4g2ssnzfqg23sp5opmzw77eh7onqtk5psbd6x53tk7cia"}', { payloadCid: 'bafkreieyrkz5hiuvlpcsmyty3qb7ks7q5rrqrrmjtofxocm6biocvkj2fy' }], ['{"minerId":"12D3KooWL5FGicDPs5BoTRAAeidCb9fPSgHMULvi1YR7usSv4huP","pieceCid":"baga6ea4seaqnamwh7nlzkathlhxei5mve4ldcxsty4ujmsxld5344rt224ndmfa"}', { payloadCid: 'bafkreidjr5ybkvu3qh35r3hipj75hzvcffamqqwetqg32z7cgfp4kk4qyq' }], ['{"minerId":"12D3KooWFrsQanytSSCBvqoKfx5q461XXoJhTKuztc9FQcg8iZdN","pieceCid":"baga6ea4seaql2a3q74cooqn2pcktpu5ppa2cwichz25wvacnwa4bavafzklfeea"}', { payloadCid: 'bafk2bzaceauaze7v2syvzjnexxw7rx5ivdrmlb43xn5ojyyi2jgciezvd554w' }], ['{"minerId":"12D3KooWMfYLM4trWfT6AuXVAZLApaE7wYVjop2AdBiA9f4QSdU6","pieceCid":"baga6ea4seaqdqnkmgbxhlvos6aomqgvwlaoj3iuyteeetnfgk6fofwbl2xf62pa"}', { payloadCid: 'bafkreid742ugkyxvgya5fk57cykxqcei3rbxwzoss36dfjujhxltcdjzbe' }], ['{"minerId":"12D3KooWMfYLM4trWfT6AuXVAZLApaE7wYVjop2AdBiA9f4QSdU6","pieceCid":"baga6ea4seaqc5efntvalscbzy425sy7tl5tymvvfml6odyfpdaulnu2eka3d6py"}', { payloadCid: 'bafkreicrlfk5ajk7njg2ch7wmxwg2zwjwli2wdqj6hik6k7en3j5ng767i' }], ['{"minerId":"12D3KooWFAcH5f2JW56APsYttGksxsUV8CnVYeg4zFBtp22zyDhz","pieceCid":"baga6ea4seaqmnvjsnkvweczzbgd5lvryjnyfhrwcwyzv4mdswjnrev6q7m7ssmy"}', { payloadCid: 'bafkreifcgncmwemkw72bhg2fdeszsvg5ktm6p3x3coltoc6yr4iuj2ji7m' }], ['{"minerId":"12D3KooWCxV85UqvqCweW1X8cGMYY6UBsjmVsm9TdXP2HXR8YoEE","pieceCid":"baga6ea4seaqhbmjizhodhzsssyoxbwt6qqktolr7oweidenacfrtypizs3avama"}', { payloadCid: 'bafkreia6skmrwozwtgyjplr7xa5u3tgog32v7b4wp6qjdj3cerpfezy4me' }], ['{"minerId":"12D3KooWCxV85UqvqCweW1X8cGMYY6UBsjmVsm9TdXP2HXR8YoEE","pieceCid":"baga6ea4seaqgnvcwuaymshmpdrjwibt5nfm5nlq74c4dehumlpzntny4nf7g4ny"}', { payloadCid: 'bafkreifvi3ceprmecwi4i6kii7tldz4qpai3socuduxv5cnnygcn2x3usq' }], ['{"minerId":"12D3KooWMfYLM4trWfT6AuXVAZLApaE7wYVjop2AdBiA9f4QSdU6","pieceCid":"baga6ea4seaqcdl4inxews3dcdt4gdkt7hqcbaczldcui4bglsgfu4fvzcwghgkq"}', { payloadCid: 'bafkreidgsc7ddp75cjs2fqijazmmlpkdts4zedyy5tmprnrt47bgcczpv4' }], ['{"minerId":"12D3KooWL5FGicDPs5BoTRAAeidCb9fPSgHMULvi1YR7usSv4huP","pieceCid":"baga6ea4seaqhz5vu2z4qggml3zuvtyuvui75lg2xdjr6nwyiq3tuilcr7kxfcoa"}', { payloadCid: 'bafkreicg4phofn3akrb7p6rxe7llrn45bnaipk7zbxty6wu7jajygkgrcy' }], ['{"minerId":"12D3KooWL5FGicDPs5BoTRAAeidCb9fPSgHMULvi1YR7usSv4huP","pieceCid":"baga6ea4seaqbfe5eazi34ehi7tqhpygnzmxhk4wzp2bhqnndoosztjjm3yvw2fy"}', { payloadCid: 'bafkreif6qn3ist3vo3dlgbwpv3lxrqsr2dlkwdwsmwlj3jjbludtm27hum' }], ['{"minerId":"12D3KooWCxV85UqvqCweW1X8cGMYY6UBsjmVsm9TdXP2HXR8YoEE","pieceCid":"baga6ea4seaqbr2okr6mmks3ov5squqiq7iosmbncy75ugipzlxgql6demtjjkna"}', { payloadCid: 'bafkreih4gxxfz2crlkee2g5qduynxev5axidyvbegjlqlsvaem7pbfbm7y' }], ['{"minerId":"12D3KooWCxV85UqvqCweW1X8cGMYY6UBsjmVsm9TdXP2HXR8YoEE","pieceCid":"baga6ea4seaqjen4wfpx54e2bx4ozflldayvhumnkadnw3kozuxo4tr3sb2riopq"}', { payloadCid: 'bafkreiebq5tcmiczs73mh46adv3eygr34ugjwwtgkwfc2jlicx3iz6qgr4' }], ['{"minerId":"12D3KooWHXPKWUqx9cyag239D7qDGFxHGzxszTs3j1rJzhRYhpzV","pieceCid":"baga6ea4seaqboh7zdccmpxf2n37dkuuhh5x24euocs777kcob6vllrqq3zdv6la"}', { payloadCid: 'bafkreig76nki5rgrb6y4m6ni7tvdizl6myzbzxoltpbxsu4asnkzxp22vm' }], ['{"minerId":"12D3KooWL5FGicDPs5BoTRAAeidCb9fPSgHMULvi1YR7usSv4huP","pieceCid":"baga6ea4seaqmsada2kwbfmsqsxub5kpyvyxy6ewyhbgmygsfcnnrbr73m56qaai"}', { payloadCid: 'bafkreic3mnknihvhse2cj222324remrxrg3mjxg4o7aurmmviardtzre3e' }], ['{"minerId":"12D3KooWMfYLM4trWfT6AuXVAZLApaE7wYVjop2AdBiA9f4QSdU6","pieceCid":"baga6ea4seaqkeq36gvm3yonhhlsi2rgp4fr4bo2yqsiram36ezqpybr56qciiaq"}', { payloadCid: 'bafkreih5i64hlmmm2twzgfybyhllmkbbu7f5veell77246ec3febkjg33m' }], ['{"minerId":"12D3KooWMfYLM4trWfT6AuXVAZLApaE7wYVjop2AdBiA9f4QSdU6","pieceCid":"baga6ea4seaqb5jlfitdddmyfjfao4qjrtabwimcaz5iml4wdfiubnw6gvfnhsmi"}', { payloadCid: 'bafkreie5x7ihaosjax5ndwm2x3nxx5eepxn3cmafwzznrj4hhklfvet6ma' }], ['{"minerId":"12D3KooWMfYLM4trWfT6AuXVAZLApaE7wYVjop2AdBiA9f4QSdU6","pieceCid":"baga6ea4seaqjmnvx2ccme5qe5j7nnqhww6hvxt3sfn76rvz5p2ofbh63xfjioey"}', { payloadCid: 'bafkreib5lc3ell5vbvfrmcssnhbwbosjiawhqfwcgt5r2o5iaqhafmqr4m' }], ['{"minerId":"12D3KooWRu4BCdVnH2pxu8ykgxKp3Nm435CVgUZLGimAAMdsCP1w","pieceCid":"baga6ea4seaqld7t7zp47uoa5kbn5b7re2pgmqcaxccnmmbla4rspqo6wrvzyica"}', { payloadCid: 'bafkreidmxzlhiuwk6uyvm6s5fyyn6f5dudlmho5m5g3quz5if4mmtsxnsm' }], ['{"minerId":"12D3KooWRpU7v3Q39C12z3MsqpsrDfGjsLFf173awaMJZBomF3wk","pieceCid":"baga6ea4seaqgh7cacxtsyedftd2dagtqdkr4pdakzfll46efacrnogi2wdcfsly"}', { payloadCid: 'bafkreicnhdsjm7b46yqfjms6mirxxuu4eqpg4qr7sih4amluhhse3p5xza' }], ['{"minerId":"12D3KooWRpU7v3Q39C12z3MsqpsrDfGjsLFf173awaMJZBomF3wk","pieceCid":"baga6ea4seaqp26rwpzabp5ts5nyl3wcyvb3pyrp3sa7nr6hzplh3h46ro3lhyly"}', { payloadCid: 'bafkreiavmtnn2lsnedengql6z6ity4onvdcar2f2pkdjqwghhliv2hs6dy' }], ['{"minerId":"12D3KooWMfYLM4trWfT6AuXVAZLApaE7wYVjop2AdBiA9f4QSdU6","pieceCid":"baga6ea4seaqaum3hpbluyltrawm7rzqbi3rbhandzgnfb4vy2mrpbv2o5wxegga"}', { payloadCid: 'bafkreif6ru3tkmwl3jshn64543hzc5iml54uo47xhky27syj4b3aysprcm' }], ['{"minerId":"12D3KooWHEwyy4wvkFAAjXVXKPqvwpTZgguKJUEZUEESaCFL2xqN","pieceCid":"baga6ea4seaqosxpbs4akufawlf5inwvr256wfxqginm5xucjktxap3hmj2w66nq"}', { payloadCid: 'bafkreicnhdsjm7b46yqfjms6mirxxuu4eqpg4qr7sih4amluhhse3p5xza' }], ['{"minerId":"12D3KooWNswHm1CX3DtYMe6qUfoRVo3a5ESGQtnLUGz287Vu2TUL","pieceCid":"baga6ea4seaqn3ps6p4ujdd5zj5aqjdqzygkbeujkakiz6m7jh3lnt4r3j5w3kgq"}', { payloadCid: 'bafkreibbmjw6txtqnh45wvunoizymrijzhws2rpdrgjn6tjrgsvhtzebyq' }], ['{"minerId":"12D3KooWL5FGicDPs5BoTRAAeidCb9fPSgHMULvi1YR7usSv4huP","pieceCid":"baga6ea4seaqnksrdkv7ovxe2ja5w7u6mkwnf3msff6vtcyex2xhv7ky6bvfm6cy"}', { payloadCid: 'bafkreidfm4zugbp7sz2h2waxq6wx2ectgoragr63tzmfq2rmj34wwo5wby' }], ['{"minerId":"12D3KooW9stmqV7MzK6oYJVfBAjbKGUNx78arLBYFKfBT4Y5sNQp","pieceCid":"baga6ea4seaqj2iuo6bcal7o24ey6ylmbppa6fgj234nv5mlhvzrjbsyoukl2qhy"}', { payloadCid: 'bafk2bzacea2n7xb6y27ppt377kdnmryx6lidjx2zroc4nuugwqbwqzm452vhk' }], ['{"minerId":"12D3KooWMfYLM4trWfT6AuXVAZLApaE7wYVjop2AdBiA9f4QSdU6","pieceCid":"baga6ea4seaqdrtskirnc4m6fzom7keecgsjpvz3fmf5p6osmxdaupvxwursfqpq"}', { payloadCid: 'bafkreidrkqhqq4m5uudzrwocqhr7c5s3kzpgyydxtwx2j6lpgct4ihfzwe' }], ['{"minerId":"12D3KooWMfYLM4trWfT6AuXVAZLApaE7wYVjop2AdBiA9f4QSdU6","pieceCid":"baga6ea4seaqjowknae7flfxngoy5dubrfln7adyo6ax4hxzpusiubp3qvfo3kkq"}', { payloadCid: 'bafkreicf7ifq3eeg5pizq443423jodmyeqkyw2hhxdnrk3ozknoovhl734' }], ['{"minerId":"12D3KooWHXPKWUqx9cyag239D7qDGFxHGzxszTs3j1rJzhRYhpzV","pieceCid":"baga6ea4seaql7kdaozlxmhz3wodeet33c6qhzausrf6n52ilawsc4ncos45ryha"}', { payloadCid: 'bafkreicbvwvkv5qlblvtk3tdwdrrakzgeflyb627nsvlyh5vzmrs4gplti' }], ['{"minerId":"12D3KooWL5FGicDPs5BoTRAAeidCb9fPSgHMULvi1YR7usSv4huP","pieceCid":"baga6ea4seaqhsiexlmkongmnnfkearwo22yn3tyxcfiylfnmoexjydvodosdiaa"}', { payloadCid: 'bafkreia5spbfufft6rgx43mdkwjyhrfpedwhjhwtu3m3x4vlqu5ekhbwq4' }], ['{"minerId":"12D3KooWL5FGicDPs5BoTRAAeidCb9fPSgHMULvi1YR7usSv4huP","pieceCid":"baga6ea4seaqj2adrr6fl5gxqlr3c7q4ox7rtzbxlysjhou32wasqxsny2yzommq"}', { payloadCid: 'bafkreiahixrom7d57r5eq34etxc3s456xa6h5l2pqtdp6lhxjukzpx2fwq' }], ['{"minerId":"12D3KooWL5FGicDPs5BoTRAAeidCb9fPSgHMULvi1YR7usSv4huP","pieceCid":"baga6ea4seaqowx4kzjisrfhn4vukn3piun7hq56vyaey3zel2awi4mg2uwibeiy"}', { payloadCid: 'bafkreiew6ut2ru4v3ykusxlul2mxcqj6olwsda2vcohl3h3tditbjg2zc4' }], ['{"minerId":"12D3KooWL5FGicDPs5BoTRAAeidCb9fPSgHMULvi1YR7usSv4huP","pieceCid":"baga6ea4seaqlu3zp56egfjo4xpvh3inzsjpphbut7q5sxjhg2oesersyhk5calq"}', { payloadCid: 'bafkreic45ntqt2swnhfyepbc3k7l3wem3hdvwts7u3ftjvg3dy4ix7m3au' }], ['{"minerId":"12D3KooWL5FGicDPs5BoTRAAeidCb9fPSgHMULvi1YR7usSv4huP","pieceCid":"baga6ea4seaqco55a66kuubhs2zx3tg5qqvmgokgevsymelqzqe5jk6thakjeafq"}', { payloadCid: 'bafkreiaxji4s7uj237ogrhkek7ktshbipxl66ajsnt4y7x4p5z7skhsff4' }], ['{"minerId":"12D3KooWL5FGicDPs5BoTRAAeidCb9fPSgHMULvi1YR7usSv4huP","pieceCid":"baga6ea4seaqgk7im7ldhvkzp45djexury2ugvvq2eithkv2ba74ltdwnsbiekly"}', { payloadCid: 'bafkreihi7msqpwq6uvt6girvskxdzdecf6s7bdgu4sddsgk6lzfplbui3y' }], ['{"minerId":"12D3KooWLMqPzzX29eR865oQyBzh1kYA5ZVADR1u4Z8u3WUeZYLc","pieceCid":"baga6ea4seaqkpwber2cfl6t7rosmvqnjfcitl67wbcghnv7lmn5yiczq7jhpaiy"}', { payloadCid: 'bafk2bzacedsjuzipimhqshfuupguub6ssbdllkhmoembwpqt5giahd7763kpe' }], ['{"minerId":"12D3KooWLMqPzzX29eR865oQyBzh1kYA5ZVADR1u4Z8u3WUeZYLc","pieceCid":"baga6ea4seaqjbqqcqfxmnsujty7ozpa6xsrfruvqv352tohfcp7xrj7kpqgcwaq"}', { payloadCid: 'bafk2bzaceakgjyjuzn2crmgorstaryssew4ssvrvdxi2wi3jnms4y7vn2pbgo' }], ['{"minerId":"12D3KooWLMqPzzX29eR865oQyBzh1kYA5ZVADR1u4Z8u3WUeZYLc","pieceCid":"baga6ea4seaqbh5kzztlew5tz6f6oxpp5vgjzupiu4ldtrjl6mpxzo5up46fhama"}', { payloadCid: 'bafk2bzacedt5u6srl2fnhqngpoxh7vogtxsr4zazqs4uy36xow6cqef3yv52c' }], ['{"minerId":"12D3KooWLMqPzzX29eR865oQyBzh1kYA5ZVADR1u4Z8u3WUeZYLc","pieceCid":"baga6ea4seaqbs7u2lu46jyohdedje477xrd6hzlbfami2t7xhhdloqnudchpchy"}', { payloadCid: 'bafk2bzaceajumb7y4geexihnsljhpfyzt62dpu2mztnh3y7dsrni4xzf2d3ai' }], ['{"minerId":"12D3KooWLMqPzzX29eR865oQyBzh1kYA5ZVADR1u4Z8u3WUeZYLc","pieceCid":"baga6ea4seaqkopams7n7aitbl3abzbise6qazla2tw4fzoi4fr6odt5lltt7cki"}', { payloadCid: 'bafk2bzacedkex6gbte5rjkxituuixdpczg5n33ycat5lsve4j3bffrn3e7zdm' }], ['{"minerId":"12D3KooWLMqPzzX29eR865oQyBzh1kYA5ZVADR1u4Z8u3WUeZYLc","pieceCid":"baga6ea4seaqaoymb6lchohxzbupv24skolw4vmnoeumun3q5d6ecjmo2xkgpkay"}', { payloadCid: 'bafk2bzaceai4istpeomgxkmb56i6ymegca6qblak5lg5gorry45hbpitkrksc' }], ['{"minerId":"12D3KooWLMqPzzX29eR865oQyBzh1kYA5ZVADR1u4Z8u3WUeZYLc","pieceCid":"baga6ea4seaqfnxbfcrp7pylifhn4u3knc53vy36dewbc2jw6tp5tf7vobv7doji"}', { payloadCid: 'bafk2bzacedvcue2t2x34d3tq3z5si5657wnyz6jpmntcntwkua3awii742j7q' }], ['{"minerId":"12D3KooWLMqPzzX29eR865oQyBzh1kYA5ZVADR1u4Z8u3WUeZYLc","pieceCid":"baga6ea4seaqlfjufw2bfxm4vmtqmp2raw34rds5mxy3d4yc5wvmmxudnwkmr4ca"}', { payloadCid: 'bafk2bzacedzel6lg2ak2pueehgh2auwawl23tgvnkerhma2s2inuyppm5yai4' }], ['{"minerId":"12D3KooWLMqPzzX29eR865oQyBzh1kYA5ZVADR1u4Z8u3WUeZYLc","pieceCid":"baga6ea4seaqmgd7y45knncmgbgckjujero2dv32kyikhjjqflsvoyql5v2ruefq"}', { payloadCid: 'bafk2bzaceby6segtkjb2f2igrip2vt7j22phv4zf6v6bjcpotvwanlblxlsqu' }], ['{"minerId":"12D3KooWLMqPzzX29eR865oQyBzh1kYA5ZVADR1u4Z8u3WUeZYLc","pieceCid":"baga6ea4seaqon52dw7pppz2ikcm27nsxgbkeivalebqrvlf7i52hemqdbbbdogi"}', { payloadCid: 'bafk2bzacearislygoiuvcmn5hx7qa6cnvsbof6wnwmkuug6jmpw7r35ysfsl6' }], ['{"minerId":"12D3KooWLMqPzzX29eR865oQyBzh1kYA5ZVADR1u4Z8u3WUeZYLc","pieceCid":"baga6ea4seaqma4znrcnzqfos465ml52pwys7sryuytp7piwvuul7jfqvhiua2lq"}', { payloadCid: 'bafk2bzaceartw4jzteuitf6y4filhcd4ajc2chms22l3pfbrkfsycl5kz6pl4' }], ['{"minerId":"12D3KooWLMqPzzX29eR865oQyBzh1kYA5ZVADR1u4Z8u3WUeZYLc","pieceCid":"baga6ea4seaqhxrjxxawma42np2hmwdiwhcgmih5s5sbjsvy6fo5xu6ehqdrbaci"}', { payloadCid: 'bafk2bzacec5qodjfiaolf5patnq2yk5z3xszidrwbzwnipk5p3zcqk3kf7xpq' }], ['{"minerId":"12D3KooWLMqPzzX29eR865oQyBzh1kYA5ZVADR1u4Z8u3WUeZYLc","pieceCid":"baga6ea4seaqeuvzuagbjceumjwli3lsn7wbfp4wbsx6utkdzcsy65lxlk65uylq"}', { payloadCid: 'bafk2bzacec5lgth2mnuvkd6drqhdycv7qtfpfzeqwpxk4t6gm7em446pq7h3a' }], ['{"minerId":"12D3KooWHXPKWUqx9cyag239D7qDGFxHGzxszTs3j1rJzhRYhpzV","pieceCid":"baga6ea4seaqdtahskdhe2q76ktcy3hclqjsjlikjsz72qkjfgmgasuvggc6k4pa"}', { payloadCid: 'bafkreicpvqe6jxkg7u63vqqmor6kugjxaxglprzqfqmzjy5o2ll7f2ds3a' }], ['{"minerId":"12D3KooWL5FGicDPs5BoTRAAeidCb9fPSgHMULvi1YR7usSv4huP","pieceCid":"baga6ea4seaqbto3o5k7zhzpebgmjcr63tt3z5imd5tzuklmy3dvo4t7rhevfymy"}', { payloadCid: 'bafkreihktz6if6isccrwzt4uljx5lmupchrs5bgwgq2jo32gaf2ghrkxai' }], ['{"minerId":"12D3KooWL5FGicDPs5BoTRAAeidCb9fPSgHMULvi1YR7usSv4huP","pieceCid":"baga6ea4seaqnxo7gbggxvea2wtbgkv7vesz7qabgreemghmzdndcnj5ipetyuia"}', { payloadCid: 'bafkreib7szvomhf6tyfvnntabbhgj3qbemj7r4wvfwxmqjpswae44wv5bm' }], ['{"minerId":"12D3KooWP4ZuvyAiC5DjZZnLq4EfexYPyY8zcbdDX5z6bpe8W72Y","pieceCid":"baga6ea4seaqfuou2gilw4mrt6iv4sdmtu2qbpjsz3elk3y3gdouva7zvmtjl4jy"}', { payloadCid: 'bafkreicnhdsjm7b46yqfjms6mirxxuu4eqpg4qr7sih4amluhhse3p5xza' }], ['{"minerId":"12D3KooWL5FGicDPs5BoTRAAeidCb9fPSgHMULvi1YR7usSv4huP","pieceCid":"baga6ea4seaqmzdyftgee6asgytnxxmha7ev3sm7mpkx4dlovqbqn4ko6vx4n2ni"}', { payloadCid: 'bafkreiciiuk5czjbagyt522wndzivlz3vdvfllbntjsilvtbvtipnygxc4' }], ['{"minerId":"12D3KooWFrsQanytSSCBvqoKfx5q461XXoJhTKuztc9FQcg8iZdN","pieceCid":"baga6ea4seaqhzrfy4erhhjl5hksmcx4uz2pscy5pzlqqqg3tynig3cr2kb4euba"}', { payloadCid: 'bafk2bzaceb74llsmga4vssllkajr474ktnyssnx7t47r3utb6mzrcnl6es74k' }], ['{"minerId":"12D3KooWL5FGicDPs5BoTRAAeidCb9fPSgHMULvi1YR7usSv4huP","pieceCid":"baga6ea4seaqjkrlbc5enpxkpp5ljptvh4e7jgmsalc4dzjcugo3m3mmqq5bcydi"}', { payloadCid: 'bafkreiex7zpzcv7yufeqz2edi3pan2vhozdcrs5mnqsc2jwpv4cc4hjyru' }], ['{"minerId":"12D3KooWFAcH5f2JW56APsYttGksxsUV8CnVYeg4zFBtp22zyDhz","pieceCid":"baga6ea4seaqcevxfgmlq6hlmsuzkslfbscgtr7fchzvi6vsnwnpakjgmaj376ca"}', { payloadCid: 'bafkreigi6rmz7v7cn6cpzqcnp7o2jv764pdzohahtctylni6kxngxdtide' }], ['{"minerId":"12D3KooWJ2RJBxFJyFEQVQ9qguqG8WcTWFnBddgWNqaNZ1ckaigP","pieceCid":"baga6ea4seaqe3icnxs3uhl2labdjoiphkreesayguv5aury3mw6vlv4pqmc7opi"}', { payloadCid: 'bafkreidla7bxopkoejdv645agn25eo54oqtsgvmf22zbi7a5kf2u675dn4' }], ['{"minerId":"12D3KooWK5CGgW8qYyEjLQw5MG1P9bDjJPnF5YjCtCyuDjFLLrdT","pieceCid":"baga6ea4seaqbwivlc32mydk3q7c2jssbl5ti36bicr3i7ogkcpyrlb2hloghkiy"}', { payloadCid: 'bafkreibe3y4xezreqcail5anufyqyngr6snmqelfcmblxz7tmqva645jzy' }], ['{"minerId":"12D3KooWFrsQanytSSCBvqoKfx5q461XXoJhTKuztc9FQcg8iZdN","pieceCid":"baga6ea4seaqhtl4d66hkwdwsw3rh6rugisxwmiei5v7g3gn6mq4pqap7sxwtcdq"}', { payloadCid: 'bafk2bzacedjkpduo44g7x7jhpfhmvbcnpb664d7peedjidwpwua7ywejffuwi' }], ['{"minerId":"12D3KooWA2Z6CdYER2omRX2KBxvEwyEmqcBNYFNrVQeN6wF9e7qS","pieceCid":"baga6ea4seaqei6ymur4ej43rmvaigkxkn5nz6s5u4mudzf7nwtittaknis5jqka"}', { payloadCid: 'bafkreia7kc3mw7jzphwpwti6vmcm4pjxpna5grbhdekprsd4iwgbelrphm' }], ['{"minerId":"12D3KooWA2Z6CdYER2omRX2KBxvEwyEmqcBNYFNrVQeN6wF9e7qS","pieceCid":"baga6ea4seaqhp64fskpvwvhdjeeizsjzroulddejwsqszkuzd66hmwkt3ynrcoy"}', { payloadCid: 'bafkreifodxttaal6wpfymmfc32vkbexnhqerdhm7qwkjsttgzkkhckjpaa' }], ['{"minerId":"12D3KooWFAcH5f2JW56APsYttGksxsUV8CnVYeg4zFBtp22zyDhz","pieceCid":"baga6ea4seaqpg54td4dvpexkqefyx7zahptegyn3d5qaztx2ayyoed7mz43amha"}', { payloadCid: 'bafkreiglvmzwdxwgititqsagrphaejpmclnogjadrw637u5fho3trj23me' }], ['{"minerId":"12D3KooWP4ZuvyAiC5DjZZnLq4EfexYPyY8zcbdDX5z6bpe8W72Y","pieceCid":"baga6ea4seaqanr34s7m2cf72fjymljs4lfstm6zk2sjijcj7zs2v2le4u62qqkq"}', { payloadCid: 'bafkreicnhdsjm7b46yqfjms6mirxxuu4eqpg4qr7sih4amluhhse3p5xza' }], ['{"minerId":"12D3KooWMfYLM4trWfT6AuXVAZLApaE7wYVjop2AdBiA9f4QSdU6","pieceCid":"baga6ea4seaqczb6bwy3zc7xgyp66febiclavksu6ndfkxmscvrpoqmfzdakvily"}', { payloadCid: 'bafkreiap2bcepg6putcvztivemqijtitmw47ptwafueagncycut5qyri6q' }], ['{"minerId":"12D3KooWL5FGicDPs5BoTRAAeidCb9fPSgHMULvi1YR7usSv4huP","pieceCid":"baga6ea4seaqc3ijnba63b3mnbunwpngkc7sso2thke23iewq7psc5voxjjaioka"}', { payloadCid: 'bafkreictu5ywwivvqws3se5v37ufxmokol6tnfysptpmzrt6t5omqowu4a' }], ['{"minerId":"12D3KooWPkghN7vdSyB3jqJBfV9hVEZhwpHTiPFRowU85SGyWW8E","pieceCid":"baga6ea4seaqjddkjbhiesrs4qcoajti4c72r4kz6qavcq4j5lych7endsykoady"}', { payloadCid: 'bafk2bzacebxmwxssjvxgsyimvlof7fmukfko2xepkqjax5kc6tbdiocz3svw6' }], ['{"minerId":"12D3KooW9stmqV7MzK6oYJVfBAjbKGUNx78arLBYFKfBT4Y5sNQp","pieceCid":"baga6ea4seaqnyslc24d6pqaszburvn7uzwrr4x244nui2awkotwtqe22vjbwimq"}', { payloadCid: 'bafk2bzacea2n7xb6y27ppt377kdnmryx6lidjx2zroc4nuugwqbwqzm452vhk' }], ['{"minerId":"12D3KooWA9zrKfscXkHycZTcaBguqxQEwxVftDenW8PwSmiubdfH","pieceCid":"baga6ea4seaqavcvtpmvd43xhajbfgmnum4mwcwq4zx22a7vuhzxlpywyy6n3yjq"}', { payloadCid: 'bafkreic7a6gt6vstmyyxpqurd5oso7rohsmg6lz2bzg3vcsezcea7hszdm' }], ['{"minerId":"12D3KooWA9zrKfscXkHycZTcaBguqxQEwxVftDenW8PwSmiubdfH","pieceCid":"baga6ea4seaqeqovjtdygy4dlfwip3zgzjlmzo55powpldmyrujqo72goqdqkcaq"}', { payloadCid: 'bafkreiagflc4cdg44iclf6px3jajcpun5heev2bue32er4rkrkpyhd737q' }], ['{"minerId":"12D3KooWL5FGicDPs5BoTRAAeidCb9fPSgHMULvi1YR7usSv4huP","pieceCid":"baga6ea4seaqmmataclq2q5pis3qp7yx4twfpuwrl7ov4v6er6nfniaks65vwuka"}', { payloadCid: 'bafkreigewmh3ymd5hklf3aslxm35w4b5t2yexsgjg6lq45f7hyrinca7pi' }], ['{"minerId":"12D3KooWFAcH5f2JW56APsYttGksxsUV8CnVYeg4zFBtp22zyDhz","pieceCid":"baga6ea4seaql5xx2ql3jaoxjzst5izlurdplalc7ulmp27ukawzthgpstbaiuoy"}', { payloadCid: 'bafkreictosbzcwoemp4voituqkp5wunllntux7itu6b453t6kaityykfde' }], ['{"minerId":"12D3KooWP4ZuvyAiC5DjZZnLq4EfexYPyY8zcbdDX5z6bpe8W72Y","pieceCid":"baga6ea4seaqlxqvvkd3es5c3czdrm6vbnb3ehhmiikaxpkwkqjuwiy6yqdurqdy"}', { payloadCid: 'bafkreicnhdsjm7b46yqfjms6mirxxuu4eqpg4qr7sih4amluhhse3p5xza' }], ['{"minerId":"12D3KooWMfYLM4trWfT6AuXVAZLApaE7wYVjop2AdBiA9f4QSdU6","pieceCid":"baga6ea4seaqcadg6hsogsp2xoejlo4wj6vjvqiligdogkharxnb2alrdydfusbi"}', { payloadCid: 'bafkreielvjib43ishahftl6vkcstgonglyrgp7ckpglarulkb4unllioxe' }]]) diff --git a/db/lib/types.js b/db/lib/types.js index e293d09..6434843 100644 --- a/db/lib/types.js +++ b/db/lib/types.js @@ -8,7 +8,8 @@ const ActiveDealDbEntry = Type.Object({ term_start_epoch: Type.Number(), term_min: Type.Number(), term_max: Type.Number(), - sector_id: Type.BigInt() + sector_id: Type.BigInt(), + payload_cid: Type.Optional(Type.String()) }) export { ActiveDealDbEntry } diff --git a/db/migrations/008.do.unique-constraint.sql b/db/migrations/008.do.unique-constraint.sql new file mode 100644 index 0000000..43046af --- /dev/null +++ b/db/migrations/008.do.unique-constraint.sql @@ -0,0 +1,13 @@ +ALTER TABLE active_deals +ADD CONSTRAINT unique_active_deals +UNIQUE ( + activated_at_epoch, + miner_id, + client_id, + piece_cid, + piece_size, + term_start_epoch, + term_min, + term_max, + sector_id +); \ No newline at end of file