Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update make transformations logs and contextualizations #407

Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions src/contextualizers/bridges/acrossProtocol/destination.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import {
ACROSS_PROTOCOL_RELAYER_ABI,
ACROSS_PROTOCOL_RELAYERS,
} from './constants';
import { decodeLog } from '../../../helpers/utils';
import { decodeLog, grabLogsFromTransaction } from '../../../helpers/utils';

export function contextualize(transaction: Transaction): Transaction {
const isAcrossProtocol = detect(transaction);
Expand All @@ -28,7 +28,7 @@ export function detect(transaction: Transaction): boolean {
* and it also serves to decouple the logic, thereby simplifying the testing process
*/
const originChainId = transaction.chainId ?? 1;
const logs = transaction.logs ?? [];
const logs = grabLogsFromTransaction(transaction);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ponyjackal I worry that future contributors may not remember to use this helper when writing new contextualizations. This isn't blocking feedback for this PR, but can we make this change somewhere upstream, to ensure that it works even if people use transaction.logs without the helper?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I created a Linear issue to track this as a separate task

const filledRelayLog = logs.find((log: Log) => {
if (log.address !== ACROSS_PROTOCOL_RELAYERS[originChainId]) return false;

Expand All @@ -50,7 +50,7 @@ export function detect(transaction: Transaction): boolean {

export function generate(transaction: Transaction): Transaction {
const originChainId = transaction.chainId ?? 1;
const logs = transaction.logs ?? [];
const logs = grabLogsFromTransaction(transaction);
let filledRelayEvent;
const filledRelayLog = logs.find((log: Log) => {
if (log.address !== ACROSS_PROTOCOL_RELAYERS[originChainId]) return false;
Expand Down
6 changes: 3 additions & 3 deletions src/contextualizers/bridges/acrossProtocol/source.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import {
ACROSS_PROTOCOL_RELAYER_ABI,
ACROSS_PROTOCOL_RELAYERS,
} from './constants';
import { decodeLog } from '../../../helpers/utils';
import { decodeLog, grabLogsFromTransaction } from '../../../helpers/utils';

export function contextualize(transaction: Transaction): Transaction {
const isAcrossProtocol = detect(transaction);
Expand All @@ -28,7 +28,7 @@ export function detect(transaction: Transaction): boolean {
* and it also serves to decouple the logic, thereby simplifying the testing process
*/
const originChainId = transaction.chainId ?? 1;
const logs = transaction.logs ?? [];
const logs = grabLogsFromTransaction(transaction);
const fundsDepositedLog = logs.find((log: Log) => {
if (log.address !== ACROSS_PROTOCOL_RELAYERS[originChainId]) return false;

Expand All @@ -51,7 +51,7 @@ export function detect(transaction: Transaction): boolean {

export function generate(transaction: Transaction): Transaction {
const originChainId = transaction.chainId ?? 1;
const logs = transaction.logs ?? [];
const logs = grabLogsFromTransaction(transaction);
let fundsDepositedEvent;
const fundsDepositedLog = logs.find((log: Log) => {
if (log.address !== ACROSS_PROTOCOL_RELAYERS[originChainId]) return false;
Expand Down
6 changes: 3 additions & 3 deletions src/contextualizers/bridges/hopTransferToL1/destination.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import {
Transaction,
} from '../../../types';
import { HOP_WITHDRAWAL_BONDED_EVENT_ABI, HOP_RELAYERS } from './constants';
import { decodeLog } from '../../../helpers/utils';
import { decodeLog, grabLogsFromTransaction } from '../../../helpers/utils';

export function contextualize(transaction: Transaction): Transaction {
const isHopTransferToL1 = detect(transaction);
Expand All @@ -24,7 +24,7 @@ export function detect(transaction: Transaction): boolean {
* and it also serves to decouple the logic, thereby simplifying the testing process
*/
const originChainId = transaction.chainId ?? 1;
const logs = transaction.logs ?? [];
const logs = grabLogsFromTransaction(transaction);
const withdrawalBondedLog = logs.find((log: any) => {
if (log.address !== HOP_RELAYERS[originChainId]) return false;

Expand All @@ -49,7 +49,7 @@ export function generate(transaction: Transaction): Transaction {
const chainId = transaction.chainId;
if (!chainId) return transaction;

const logs = transaction.logs ?? [];
const logs = grabLogsFromTransaction(transaction);
let decodedWithdrawalBondedLog;
for (const log of logs) {
if (log.address !== HOP_RELAYERS[originChainId]) continue;
Expand Down
6 changes: 3 additions & 3 deletions src/contextualizers/bridges/hopTransferToL1/source.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import {
Transaction,
} from '../../../types';
import { HOP_TRANSFER_SENT_EVENT_ABI, HOP_RELAYERS } from './constants';
import { decodeLog } from '../../../helpers/utils';
import { decodeLog, grabLogsFromTransaction } from '../../../helpers/utils';

export function contextualize(transaction: Transaction): Transaction {
const isHopTransferToL1 = detect(transaction);
Expand All @@ -24,7 +24,7 @@ export function detect(transaction: Transaction): boolean {
* and it also serves to decouple the logic, thereby simplifying the testing process
*/
const originChainId = transaction.chainId ?? 1;
const logs = transaction.logs ?? [];
const logs = grabLogsFromTransaction(transaction);
const transferSentLog = logs.find((log: any) => {
if (log.address !== HOP_RELAYERS[originChainId]) return false;

Expand All @@ -46,7 +46,7 @@ export function detect(transaction: Transaction): boolean {

export function generate(transaction: Transaction): Transaction {
const originChainId = transaction.chainId ?? 1;
const logs = transaction.logs ?? [];
const logs = grabLogsFromTransaction(transaction);
let decodedTransferSentLog;
for (const log of logs) {
if (log.address !== HOP_RELAYERS[originChainId]) continue;
Expand Down
6 changes: 3 additions & 3 deletions src/contextualizers/bridges/hopTransferToL2/destination.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import {
HOP_TRANSFER_FROM_L1_COMPLETED_EVENT_ABI,
HOP_RELAYERS,
} from './constants';
import { decodeLog } from '../../../helpers/utils';
import { decodeLog, grabLogsFromTransaction } from '../../../helpers/utils';

export function contextualize(transaction: Transaction): Transaction {
const isHopTransferToL1 = detect(transaction);
Expand All @@ -27,7 +27,7 @@ export function detect(transaction: Transaction): boolean {
* and it also serves to decouple the logic, thereby simplifying the testing process
*/
const originChainId = transaction.chainId ?? 1;
const logs = transaction.logs ?? [];
const logs = grabLogsFromTransaction(transaction);
const transferFromL1CompletedLog = logs.find((log: any) => {
if (log.address !== HOP_RELAYERS[originChainId]) return false;

Expand All @@ -51,7 +51,7 @@ export function generate(transaction: Transaction): Transaction {
const chainId = transaction.chainId;
if (!chainId) return transaction;

const logs = transaction.logs ?? [];
const logs = grabLogsFromTransaction(transaction);
let decodedTransferFromL1CompletedLog;
for (const log of logs) {
if (log.address !== HOP_RELAYERS[chainId]) continue;
Expand Down
6 changes: 3 additions & 3 deletions src/contextualizers/bridges/hopTransferToL2/source.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import {
Transaction,
} from '../../../types';
import { HOP_TRANSFER_SENT_TO_L2_EVENT_ABI, HOP_RELAYERS } from './constants';
import { decodeLog } from '../../../helpers/utils';
import { decodeLog, grabLogsFromTransaction } from '../../../helpers/utils';

export function contextualize(transaction: Transaction): Transaction {
const isHopTransferToL1 = detect(transaction);
Expand All @@ -24,7 +24,7 @@ export function detect(transaction: Transaction): boolean {
* and it also serves to decouple the logic, thereby simplifying the testing process
*/
const originChainId = transaction.chainId ?? 1;
const logs = transaction.logs ?? [];
const logs = grabLogsFromTransaction(transaction);
const transferSentToL2Log = logs.find((log: any) => {
if (log.address !== HOP_RELAYERS[originChainId]) return false;

Expand All @@ -46,7 +46,7 @@ export function detect(transaction: Transaction): boolean {

export function generate(transaction: Transaction): Transaction {
const originChainId = transaction.chainId ?? 1;
const logs = transaction.logs ?? [];
const logs = grabLogsFromTransaction(transaction);
let decodedTransferSentToL2Log;
for (const log of logs) {
if (log.address !== HOP_RELAYERS[originChainId]) continue;
Expand Down
6 changes: 3 additions & 3 deletions src/contextualizers/bridges/opStack/source.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import {
TRANSACTION_DEPOSITED_EVENT_ABI,
TRANSACTION_DEPOSITED_EVENT_HASH,
} from './constants';
import { decodeLog } from '../../../helpers/utils';
import { decodeLog, grabLogsFromTransaction } from '../../../helpers/utils';

export function contextualize(transaction: Transaction): Transaction {
const isOpStack = detect(transaction);
Expand All @@ -36,7 +36,7 @@ export function detect(transaction: Transaction): boolean {
* and it also serves to decouple the logic, thereby simplifying the testing process
*/
if (transaction.chainId === 1) {
const logs = transaction.logs ?? [];
const logs = grabLogsFromTransaction(transaction);
const transactionDepositedLog = logs.find((log: any) => {
return log.topic0 === TRANSACTION_DEPOSITED_EVENT_HASH;
});
Expand All @@ -58,7 +58,7 @@ export function generate(transaction: Transaction): Transaction {
}
const assetTransfer: Asset = assetSent[0];

const logs = transaction.logs ?? [];
const logs = grabLogsFromTransaction(transaction);
const transactionDepositedLog = logs.find((log: any) => {
return log.topic0 === TRANSACTION_DEPOSITED_EVENT_HASH;
});
Expand Down
6 changes: 3 additions & 3 deletions src/contextualizers/bridges/starGate/destination.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import {
STAR_GATE_PACKET_RECEIVED_EVENT_ABI,
STAR_GATE_CHAIN_IDS,
} from './constants';
import { decodeLog } from '../../../helpers/utils';
import { decodeLog, grabLogsFromTransaction } from '../../../helpers/utils';

export function contextualize(transaction: Transaction): Transaction {
const isStarGate = detect(transaction);
Expand All @@ -34,7 +34,7 @@ export function detect(transaction: Transaction): boolean {
* and it also serves to decouple the logic, thereby simplifying the testing process
*/
const originChainId = transaction.chainId ?? 1;
const logs = transaction.logs ?? [];
const logs = grabLogsFromTransaction(transaction);

const packetReceivedLog = logs.find((log: Log) => {
if (log.address !== STAR_GATE_RELAYERS[originChainId]) return false;
Expand All @@ -58,7 +58,7 @@ export function detect(transaction: Transaction): boolean {

export function generate(transaction: Transaction): Transaction {
const originChainId = transaction.chainId ?? 1;
const logs = transaction.logs ?? [];
const logs = grabLogsFromTransaction(transaction);
let decodedPacketReceivedLog;

for (const log of logs) {
Expand Down
6 changes: 3 additions & 3 deletions src/contextualizers/bridges/starGate/source.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import {
STAR_GATE_PACKET_EVENT_ABI,
STAR_GATE_CHAIN_IDS,
} from './constants';
import { decodeLog } from '../../../helpers/utils';
import { decodeLog, grabLogsFromTransaction } from '../../../helpers/utils';

export function contextualize(transaction: Transaction): Transaction {
const isStarGate = detect(transaction);
Expand All @@ -33,7 +33,7 @@ export function detect(transaction: Transaction): boolean {
* and it also serves to decouple the logic, thereby simplifying the testing process
*/
const originChainId = transaction.chainId ?? 1;
const logs = transaction.logs ?? [];
const logs = grabLogsFromTransaction(transaction);
const sendMsgLog = logs.find((log: Log) => {
if (log.address !== STAR_GATE_BRIDGES[originChainId]) return false;
const decoded = decodeLog(
Expand Down Expand Up @@ -79,7 +79,7 @@ export function detect(transaction: Transaction): boolean {

export function generate(transaction: Transaction): Transaction {
const originChainId = transaction.chainId ?? 1;
const logs = transaction.logs ?? [];
const logs = grabLogsFromTransaction(transaction);
let decodedSwapLog;

for (const log of logs) {
Expand Down
21 changes: 21 additions & 0 deletions src/contextualizers/contextualizer.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,10 @@ import ensBulkRenew0x25add712 from './test/transactions/ensBulkRenew-0x25add712.
import skyoneerPlotAction0x9436b659 from './test/transactions/skyoneerPlotAction-0x9436b659.json';
import skyoneerPlotAction0x9bb5a737 from './test/transactions/skyoneerPlotAction-0x9bb5a737.json';
import skyoneerPlotAction0x496c6309 from './test/transactions/skyoneerPlotAction-0x496c6309.json';
// untransformed transactions
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice, thanks for adding this

import registrarWithConfigRaw0x5d31a49e from './test/transactions/registrarWithConfig-raw-0x5d31a49e.json';
import ensRegistrarRaw0xb14b4771 from './test/transactions/ensRegistrar-raw-0xb14b4771.json';
import nftMintRaw0xf264bbc2685 from './test/transactions/nft-mint-raw-0xf264bbc2685.json';

describe('ContextualizerService', () => {
describe('Detect transactions correctly', () => {
Expand Down Expand Up @@ -255,5 +259,22 @@ describe('ContextualizerService', () => {
);
expect(plotAction3.context?.summaries?.en.title).toBe('Skyoneer');
});

it('Should detect raw transactions', () => {
const ens1 = contextualizer.contextualize(
ensRegistrarRaw0xb14b4771 as unknown as Transaction,
);
expect(ens1.context?.summaries?.en.title).toBe('ENS');

const ens2 = contextualizer.contextualize(
registrarWithConfigRaw0x5d31a49e as unknown as Transaction,
);
expect(ens2.context?.summaries?.en.title).toBe('ENS');

const nftMint1 = contextualizer.contextualize(
nftMintRaw0xf264bbc2685 as unknown as Transaction,
);
expect(nftMint1.context?.summaries?.en.title).toBe('NFT Mint');
});
});
});
4 changes: 3 additions & 1 deletion src/contextualizers/heuristics/ethTransfer/ethTransfer.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { grabLogsFromTransaction } from '../../../helpers/utils';
import {
AssetType,
HeuristicContextActionEnum,
Expand All @@ -12,12 +13,13 @@ export function contextualize(transaction: Transaction): Transaction {
}

export function detect(transaction: Transaction): boolean {
const logs = grabLogsFromTransaction(transaction);
// TODO; check logs from transaction
if (
transaction.to &&
transaction.input === '0x' &&
transaction.value !== BigInt(0) &&
transaction.logs?.length === 0
logs.length === 0
) {
return true;
}
Expand Down
10 changes: 5 additions & 5 deletions src/contextualizers/protocol/boombox/boombox.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import {
import {
decodeEVMAddress,
decodeTransactionInput,
grabLogsFromTransaction,
} from '../../../helpers/utils';
import { CHAIN_IDS } from '../../../helpers/constants';

Expand Down Expand Up @@ -123,12 +124,11 @@ export const generate = (transaction: Transaction): Transaction => {
case 'distribute':
const distributeArtistId =
decoded.args && decoded.args.length > 0 ? decoded.args[0] : '';
const logs = grabLogsFromTransaction(transaction);
// decode logs
const distributeLogs = transaction.logs
? transaction.logs.filter(
(log) => log.topic0 === EVENT_DISTRIBUTE_TOPIC,
)
: [];
const distributeLogs = logs.filter(
(log) => log.topic0 === EVENT_DISTRIBUTE_TOPIC,
);
const recipients = distributeLogs.map((log) =>
decodeEVMAddress(log.topic2),
);
Expand Down
8 changes: 6 additions & 2 deletions src/contextualizers/protocol/cryptopunks/cryptopunks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,10 @@ import {
Transaction,
} from '../../../types';
import { CryptopunksContracts, CRYPTOPUNK_ABIS } from './constants';
import { decodeTransactionInput } from '../../../helpers/utils';
import {
decodeTransactionInput,
grabLogsFromTransaction,
} from '../../../helpers/utils';

export const contextualize = (transaction: Transaction): Transaction => {
const isENS = detect(transaction);
Expand Down Expand Up @@ -357,7 +360,8 @@ export const generate = (transaction: Transaction): Transaction => {
unit: 'wei',
};
if (transaction.receipt?.status) {
const transferTopic = transaction.logs?.filter(
const logs = grabLogsFromTransaction(transaction);
const transferTopic = logs.filter(
(log) =>
log.topic0 ===
'0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',
Expand Down
9 changes: 7 additions & 2 deletions src/contextualizers/protocol/eas/eas.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,11 @@ import {
EventLogTopics,
EASContextActionEnum,
} from '../../../types';
import { decodeTransactionInput, decodeLog } from '../../../helpers/utils';
import {
decodeTransactionInput,
decodeLog,
grabLogsFromTransaction,
} from '../../../helpers/utils';
import { ABIs, EAS_LINKS } from './constants';

export const contextualize = (transaction: Transaction): Transaction => {
Expand Down Expand Up @@ -70,7 +74,8 @@ const getAttestationID = (transaction: Transaction): string | null => {
return null;
}
// TODO: Confirm that the event matches the expected name
const transactionLog = transaction?.logs?.[0];
const logs = grabLogsFromTransaction(transaction);
const transactionLog = logs?.[0];
const decoded = decodeLog(
ABIs.EAS,
transactionLog?.data as Hex,
Expand Down
10 changes: 8 additions & 2 deletions src/contextualizers/protocol/eas/schemaRegistry.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,11 @@ import {
EventLogTopics,
Transaction,
} from '../../../types';
import { decodeTransactionInput, decodeLog } from '../../../helpers/utils';
import {
decodeTransactionInput,
decodeLog,
grabLogsFromTransaction,
} from '../../../helpers/utils';
import { ABIs, EAS_LINKS } from './constants';

export const contextualize = (transaction: Transaction): Transaction => {
Expand Down Expand Up @@ -54,11 +58,13 @@ export const generate = (transaction: Transaction): Transaction => {
}
if (!transaction.chainId) return transaction;

const logs = grabLogsFromTransaction(transaction);

switch (decoded.functionName) {
case 'register': {
let id = '';
if (transaction.receipt?.status) {
const registerLog = transaction.logs?.find((log) => {
const registerLog = logs.find((log) => {
const decoded = decodeLog(
ABIs.SchemaRegistry,
log.data as Hex,
Expand Down
Loading
Loading