In The Neighborhood, our goal is to meet the data where it’s at (in its raw form) and you wherever you might find yourself (with a db, webhook, etc).Transformations are how we bridge that gap. These are simple (or complex) JavaScript functions that run throughout the distributed network. We call this Just In Time Indexing.Here’s a simple example. This function simply takes in a new EVM block and returns its number and an ISO formatted timestamp.
Copy
function allEVMBlocks(block) { return { number: block.number, timestamp: new Date(block.timestamp * 1000).toISOString(), };}
Here’s a more complex example counting the number of times each Solana account is found in a block:
Copy
function solanaAccountCount(block) { const accountCounts = {}; for (const tx of block.transactions) { if (tx.meta.err) continue; const allAccounts = tx.transaction.message.accountKeys .concat(tx.meta.loadedAddresses.writable) .concat(tx.meta.loadedAddresses.readonly); for (const acc of allAccounts) { if (!accountCounts[acc]) { accountCounts[acc] = 0; } } const allInstructions = tx.transaction.message.instructions.concat( tx.meta.innerInstructions.map((ii) => ii.instructions).flat() ); for (const inst of allInstructions) { for (const accIdx of inst.accounts) { accountCounts[allAccounts[accIdx]] += 1; } } } return Object.entries(accountCounts).map(([account, count]) => ({ account, count }));}