Skip to content

Commit

Permalink
📚 add apibara scripts
Browse files Browse the repository at this point in the history
  • Loading branch information
EvolveArt committed Dec 18, 2023
1 parent 34f546c commit b40a8e6
Show file tree
Hide file tree
Showing 7 changed files with 412 additions and 156 deletions.
82 changes: 82 additions & 0 deletions examples/pragma/mainnet/mainnet-script-future.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
import { hash, shortString } from "https://esm.run/[email protected]";

const filter = {
// Only request header if any event matches.
header: {
weak: true,
},
events: [
{
fromAddress:
"0x2a85bd616f912537c50a49a4076db02c00b29b2cdc8a197ce92ed1837fa875b",
keys: [hash.getSelectorFromName("SubmittedFutureEntry")],
},
],
};

function escapeInvalidCharacters(str) {
return str.replace(/^[\x00-\x1F]+/, "");
}

function decodeTransfersInBlock({ header, events }) {
const { blockNumber, blockHash, timestamp } = header;
return events.map(({ event, receipt }) => {
const { transactionHash } = receipt;
const dataId = `${transactionHash}_${event.index}`;

const [
entryTimestamp,
source,
publisher,
price,
pairId,
volume,
expirationTimestamp,
] = event.data;

// Convert felts to string
const publisherName = escapeInvalidCharacters(
shortString.decodeShortString(publisher)
);
const sourceName = escapeInvalidCharacters(
shortString.decodeShortString(source)
);
const pairIdName = escapeInvalidCharacters(
shortString.decodeShortString(pairId)
);

// Convert to snake_case because it works better with postgres.
return {
network: "starknet-mainnet",
pair_id: pairIdName,
data_id: dataId,
block_hash: blockHash,
block_number: +blockNumber,
block_timestamp: timestamp,
transaction_hash: transactionHash,
price: +price,
timestamp: new Date(Number(entryTimestamp) * 1000).toISOString(),
publisher: publisherName,
source: sourceName,
volume: +volume,
expiration_timestamp: new Date(Number(expirationTimestamp)).toISOString(),
};
});
}

// Configure indexer for streaming Starknet Goerli data starting at the specified block.
export const config = {
streamUrl: "https://pragma-mainnet.starknet.a5a.ch",
startingBlock: 416000,
network: "starknet",
filter,
sinkType: "postgres",
sinkOptions: {
// Send data as returned by `transform`.
// When `raw = false`, the data is sent together with the starting and end cursor.
raw: true,
},
};

// Transform each block using the function defined in starknet.js.
export default decodeTransfersInBlock;
74 changes: 74 additions & 0 deletions examples/pragma/mainnet/mainnet-script-spot.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
import { hash, shortString } from "https://esm.run/[email protected]";

const filter = {
// Only request header if any event matches.
header: {
weak: true,
},
events: [
{
fromAddress:
"0x2a85bd616f912537c50a49a4076db02c00b29b2cdc8a197ce92ed1837fa875b",
keys: [hash.getSelectorFromName("SubmittedSpotEntry")],
},
],
};

function escapeInvalidCharacters(str) {
return str.replace(/^[\x00-\x1F]+/, "");
}

function decodeTransfersInBlock({ header, events }) {
const { blockNumber, blockHash, timestamp } = header;
return events.map(({ event, receipt }) => {
const { transactionHash } = receipt;
const dataId = `${transactionHash}_${event.index}`;

const [entryTimestamp, source, publisher, price, pairId, volume] =
event.data;

// Convert felts to string
const publisherName = escapeInvalidCharacters(
shortString.decodeShortString(publisher)
);
const sourceName = escapeInvalidCharacters(
shortString.decodeShortString(source)
);
const pairIdName = escapeInvalidCharacters(
shortString.decodeShortString(pairId)
);

// Convert to snake_case because it works better with postgres.
return {
network: "starknet-mainnet",
pair_id: pairIdName,
data_id: dataId,
block_hash: blockHash,
block_number: +blockNumber,
block_timestamp: timestamp,
transaction_hash: transactionHash,
price: +price,
timestamp: new Date(Number(entryTimestamp) * 1000).toISOString(),
publisher: publisherName,
source: sourceName,
volume: +volume,
};
});
}

// Configure indexer for streaming Starknet Goerli data starting at the specified block.
export const config = {
streamUrl: "https://pragma-mainnet.starknet.a5a.ch",
startingBlock: 416000,
network: "starknet",
filter,
sinkType: "postgres",
sinkOptions: {
// Send data as returned by `transform`.
// When `raw = false`, the data is sent together with the starting and end cursor.
raw: true,
},
};

// Transform each block using the function defined in starknet.js.
export default decodeTransfersInBlock;
82 changes: 0 additions & 82 deletions examples/pragma/testnet/future_entry.js

This file was deleted.

82 changes: 82 additions & 0 deletions examples/pragma/testnet/goerli-script-future.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
import { hash, shortString } from "https://esm.run/[email protected]";

const filter = {
// Only request header if any event matches.
header: {
weak: true,
},
events: [
{
fromAddress:
"0x6df335982dddce41008e4c03f2546fa27276567b5274c7d0c1262f3c2b5d167",
keys: [hash.getSelectorFromName("SubmittedFutureEntry")],
},
],
};

function escapeInvalidCharacters(str) {
return str.replace(/^[\x00-\x1F]+/, "");
}

function decodeTransfersInBlock({ header, events }) {
const { blockNumber, blockHash, timestamp } = header;
return events.map(({ event, receipt }) => {
const { transactionHash } = receipt;
const dataId = `${transactionHash}_${event.index}`;

const [
entryTimestamp,
source,
publisher,
price,
pairId,
volume,
expirationTimestamp,
] = event.data;

// Convert felts to string
const publisherName = escapeInvalidCharacters(
shortString.decodeShortString(publisher)
);
const sourceName = escapeInvalidCharacters(
shortString.decodeShortString(source)
);
const pairIdName = escapeInvalidCharacters(
shortString.decodeShortString(pairId)
);

// Convert to snake_case because it works better with postgres.
return {
network: "starknet-goerli",
pair_id: pairIdName,
data_id: dataId,
block_hash: blockHash,
block_number: +blockNumber,
block_timestamp: timestamp,
transaction_hash: transactionHash,
price: +price,
timestamp: new Date(Number(entryTimestamp) * 1000).toISOString(),
publisher: publisherName,
source: sourceName,
volume: +volume,
expiration_timestamp: new Date(Number(expirationTimestamp)).toISOString(),
};
});
}

// Configure indexer for streaming Starknet Goerli data starting at the specified block.
export const config = {
streamUrl: "https://goerli.starknet.a5a.ch",
startingBlock: 881742,
network: "starknet",
filter,
sinkType: "postgres",
sinkOptions: {
// Send data as returned by `transform`.
// When `raw = false`, the data is sent together with the starting and end cursor.
raw: true,
},
};

// Transform each block using the function defined in starknet.js.
export default decodeTransfersInBlock;
74 changes: 74 additions & 0 deletions examples/pragma/testnet/goerli-script-spot.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
import { hash, shortString } from "https://esm.run/[email protected]";

const filter = {
// Only request header if any event matches.
header: {
weak: true,
},
events: [
{
fromAddress:
"0x6df335982dddce41008e4c03f2546fa27276567b5274c7d0c1262f3c2b5d167",
keys: [hash.getSelectorFromName("SubmittedSpotEntry")],
},
],
};

function escapeInvalidCharacters(str) {
return str.replace(/^[\x00-\x1F]+/, "");
}

function decodeTransfersInBlock({ header, events }) {
const { blockNumber, blockHash, timestamp } = header;
return events.map(({ event, receipt }) => {
const { transactionHash } = receipt;
const dataId = `${transactionHash}_${event.index}`;

const [entryTimestamp, source, publisher, price, pairId, volume] =
event.data;

// Convert felts to string
const publisherName = escapeInvalidCharacters(
shortString.decodeShortString(publisher)
);
const sourceName = escapeInvalidCharacters(
shortString.decodeShortString(source)
);
const pairIdName = escapeInvalidCharacters(
shortString.decodeShortString(pairId)
);

// Convert to snake_case because it works better with postgres.
return {
network: "starknet-goerli",
pair_id: pairIdName,
data_id: dataId,
block_hash: blockHash,
block_number: +blockNumber,
block_timestamp: timestamp,
transaction_hash: transactionHash,
price: +price,
timestamp: new Date(Number(entryTimestamp) * 1000).toISOString(),
publisher: publisherName,
source: sourceName,
volume: +volume,
};
});
}

// Configure indexer for streaming Starknet Goerli data starting at the specified block.
export const config = {
streamUrl: "https://goerli.starknet.a5a.ch",
startingBlock: 881742,
network: "starknet",
filter,
sinkType: "postgres",
sinkOptions: {
// Send data as returned by `transform`.
// When `raw = false`, the data is sent together with the starting and end cursor.
raw: true,
},
};

// Transform each block using the function defined in starknet.js.
export default decodeTransfersInBlock;
Loading

0 comments on commit b40a8e6

Please sign in to comment.