Skip to content

Commit fc86fac

Browse files
author
web3blind
committed
Store thinned archive blocks only
1 parent 5de2170 commit fc86fac

2 files changed

Lines changed: 33 additions & 5 deletions

File tree

tools/archive-node/archive-node.test.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,8 @@ async function run() {
130130
assert.strictEqual(block.status, 200);
131131
assert.strictEqual(block.body.block.block_id, TEST_BLOCK.block_id);
132132
assert.strictEqual(block.body.eventCount, 3);
133+
assert.strictEqual(block.body.block.transactions[0].operations.length, 3);
134+
assert.ok(JSON.stringify(block.body.block).indexOf('dice.id') === -1, 'served block must be thinned to game operations');
133135

134136
var range = await getJson(port, '/archive-mirror/v1/range?start=100&end=200&protocol=VM,V,VE,award');
135137
assert.strictEqual(range.status, 200);

tools/archive-node/storage.js

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,35 @@ ArchiveStore.prototype.getBlockRecord = function(blockNum) {
153153
};
154154
};
155155

156+
ArchiveStore.prototype.eventKey = function(event) {
157+
return [event.blockNum, event.txIndex, event.opIndex, event.protocol, event.type, event.sender || event.account || ''].join(':');
158+
};
159+
160+
ArchiveStore.prototype._thinBlock = function(block, events) {
161+
var thin = {
162+
previous: block && (block.previous || block.previous_block_id || '') || '',
163+
timestamp: block && block.timestamp || '',
164+
block_id: block && (block.block_id || block.id || '') || '',
165+
transactions: []
166+
};
167+
var byTx = {};
168+
events = events || [];
169+
for (var i = 0; i < events.length; i += 1) {
170+
var ev = events[i];
171+
var txIndex = Number(ev.txIndex) || 0;
172+
if (!byTx[txIndex]) {
173+
byTx[txIndex] = { operations: [] };
174+
thin.transactions.push(byTx[txIndex]);
175+
}
176+
if (ev.opType === 'custom') {
177+
byTx[txIndex].operations.push(['custom', ev.raw || {}]);
178+
} else if (ev.opType === 'award') {
179+
byTx[txIndex].operations.push(['award', ev.raw || {}]);
180+
}
181+
}
182+
return thin;
183+
};
184+
156185
ArchiveStore.prototype.putBlock = function(blockNum, block, sourceNode, events) {
157186
var now = new Date().toISOString();
158187
var bn = Number(blockNum);
@@ -163,21 +192,18 @@ ArchiveStore.prototype.putBlock = function(blockNum, block, sourceNode, events)
163192
try {
164193
this.db.prepare('DELETE FROM event_accounts WHERE block_num = ?').run(bn);
165194
this.db.prepare('DELETE FROM events WHERE block_num = ?').run(bn);
195+
var storedBlock = this._thinBlock(block, events || []);
166196
this.db.prepare([
167197
'INSERT OR REPLACE INTO blocks(block_num, block_id, previous, timestamp, source_node, indexed_at, event_count, raw_json)',
168198
'VALUES(?, ?, ?, ?, ?, ?, ?, ?)'
169-
].join(' ')).run(bn, blockId, previous, timestamp, sourceNode || '', now, events ? events.length : 0, JSON.stringify(block || {}));
199+
].join(' ')).run(bn, blockId, previous, timestamp, sourceNode || '', now, events ? events.length : 0, JSON.stringify(storedBlock));
170200
this.db.exec('COMMIT');
171201
} catch (err) {
172202
this.db.exec('ROLLBACK');
173203
throw err;
174204
}
175205
};
176206

177-
ArchiveStore.prototype.eventKey = function(event) {
178-
return [event.blockNum, event.txIndex, event.opIndex, event.protocol, event.type, event.sender || event.account || ''].join(':');
179-
};
180-
181207
ArchiveStore.prototype.putEventsForBlock = function(events) {
182208
var insertEvent = this.db.prepare([
183209
'INSERT OR REPLACE INTO events(id, block_num, block_id, previous, timestamp, tx_index, op_index, op_type, protocol, type, sender, account, accounts_json, payload_json, raw_json)',

0 commit comments

Comments
 (0)