From 322728035dd01c7dd7c5fa3be825b4b2f611c942 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dami=C3=A1n=20Parrino?= Date: Thu, 31 Aug 2023 18:38:39 -0300 Subject: [PATCH 1/3] Update cli-rs.md (#1473) --- docs/4.tools/cli-rs.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/4.tools/cli-rs.md b/docs/4.tools/cli-rs.md index 31b8d7bbe35..3e258ea2e6d 100644 --- a/docs/4.tools/cli-rs.md +++ b/docs/4.tools/cli-rs.md @@ -30,7 +30,7 @@ To utilize the commands that involve transactions, sending tokens, deploying con Run... ``` -near-cli +near ``` Using the arrow keys navigate to... @@ -78,7 +78,7 @@ Now you can use `near-cli-rs` to it's full capacity. To use the `near-cli-rs` simply run the following in your terminal. ```bash -$ near-cli +$ near ``` You should then see the following. Use the arrow keys and hit `enter` or simply type out one of the available options to select an option From df55d36b234387f5c03e7ee0f316ce5c972c7efe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dami=C3=A1n=20Parrino?= Date: Fri, 1 Sep 2023 19:23:33 -0300 Subject: [PATCH 2/3] query data/indexing content re-org (#1471) * Update sidebars.json * Update indexer4explorer.md * add primitives * Update lake-primitives.md * Update indexers.md --- docs/2.develop/lake/lake-primitives.md | 369 +++++++++++++++++++++++++ docs/4.tools/events.md | 67 ----- docs/4.tools/indexer4explorer.md | 59 +++- docs/4.tools/near-lake.md | 71 +++++ docs/bos/community/indexers.md | 15 +- website/sidebars.json | 129 ++++++--- 6 files changed, 590 insertions(+), 120 deletions(-) create mode 100644 docs/2.develop/lake/lake-primitives.md create mode 100644 docs/4.tools/near-lake.md diff --git a/docs/2.develop/lake/lake-primitives.md b/docs/2.develop/lake/lake-primitives.md new file mode 100644 index 00000000000..392027584a0 --- /dev/null +++ b/docs/2.develop/lake/lake-primitives.md @@ -0,0 +1,369 @@ +--- +id: primitives +title: NEAR Lake Primitive Types +sidebar_label: Lake Primitive Types +--- + +# NEAR Lake Primitive Types + +This article contains the primitive types used by the [NEAR Lake Framework package](https://www.npmjs.com/package/@near-lake/framework). These types are used to define the data structures used by the framework as well as provide some popular helper functions. + +## `Block` + +:::info Important Notes on `Block` + +- All the entities located on different shards were merged into one single list without differentiation. +- `Block` is not the fairest name for this structure either. NEAR Protocol is a sharded blockchain, so its block is actually an ephemeral structure that represents a collection of real blocks called chunks in NEAR Protocol. + +::: + +### `Block` Structure Definition + +The `Block` type is used to represent a block in the NEAR Lake Framework. It is comprised by the following structure: + +```ts +export class Block { + constructor( + readonly streamerMessage: StreamerMessage, + private executedReceipts: Receipt[], + readonly postponedReceipts: Receipt[], + readonly transactions: Transaction[], + private _actions: Map, + private _events: Map, + private _stateChanges: StateChange[]) { + + } + ... // helper methods and getters omitted for brevity +} +``` + +#### `streamerMessage` + +Low-level structure for backward compatibility. As implemented in previous versions of [`near-lake-framework`](https://www.npmjs.com/package/near-lake-framework). + +#### `postponedReceipts` + +Receipts included on the chain but not executed yet marked as “postponed”: they are represented by the same structure `Receipt` (see the corresponding section in this doc for more details). + +#### `transactions` + +List of included `Transactions`, converted into `Receipts`. + +:::info Heads up! + +**Note:** You might want to know about `Transactions` to know where the action chain has begun. Unlike Ethereum, where a Transaction contains everything you may want to know about a particular interaction on the Ethereum blockchain, Near Protocol because of its asynchronous nature converts a `Transaction` into a `Receipt` before executing it. Thus, On NEAR, `Receipts` are more important for figuring out what happened on-chain as a result of a Transaction signed by a user. Read more about [Transactions on Near](https://nomicon.io/RuntimeSpec/Transactions) here. + +::: + +### `Block` Helper Methods + +```ts +export class Block { + ... // constructor omitted for brevity + get blockHash(): string {} + get prevBlockHash(): string {} + get blockHeight(): number {} + + header(): BlockHeader {} + receipts(): Receipt[] {} + actions(): Action[] {} + events(): Event[] {} + stateChanges(): StateChange[] {} + + actionByReceiptId(receipt_id: string): Action | undefined {} + eventsByReceiptId(receipt_id: string): Event[] {} + eventsByAccountId(account_id: string): Event[] {} + + private buildActionsHashmap() {} + private buildEventsHashmap(): Map {} + + static fromStreamerMessage(streamerMessage: StreamerMessage): Block {} +} +``` + +#### `blockHash` + +Returns the block hash. A shortcut to get the data from the block header. + +#### `prevBlockHash` + +Returns the previous block hash. A shortcut to get the data from the block header. + +#### `blockHeight` + +Returns the block height. A shortcut to get the data from the block header. + +#### `header(): BlockHeader` + +Returns a `BlockHeader` structure of the block + +See `BlockHeader` structure sections for details. + +#### `receipts(): Receipt[]` + +Returns a slice of `Receipts` executed in the block. + +Basically is a getter for the `executedReceipts` field. + +#### `actions(): Action[]` + +Returns an Array of `Actions` executed in the block. + +#### `events(): Event[]` + +Returns `Events` emitted in the block. + +#### `stateChanges(): StateChange[]` + +Returns an Array of `StateChange` occurred in the block. + +#### `actionByReceiptId(receipt_id: string): Action | undefined` + +Returns `Action`s of the provided `receipt_id` from the block if any. Returns `undefined` if there is no corresponding `Action`. + +This method uses the internal `Block` `action` field which is empty by default and will be filled with the block’s actions on the first call to optimize memory usage. + +The result is either `Action | undefined` since there might be a request for an `Action` by `receipt_id` from another block, in which case this method will be unable to find the `Action` in the current block. In the other case, the request might be for an `Action` for a `receipt_id` that belongs to a `DataReceipt` where an action does not exist. + +#### `eventsByReceiptId(receipt_id: string): Event[]` + +Returns an Array of Events emitted by `ExecutionOutcome` for the given `receipt_id`. There might be more than one `Event` for the `Receipt` or there might be none of them. In the latter case, this method returns an empty Array. + +#### `eventsByAccountId(account_id: string): Event[]` + +Returns an Array of Events emitted by `ExecutionOutcome` for the given `account_id`. There might be more than one `Event` for the `Receipt` or there might be none of them. In the latter case, this method returns an empty Array. + +--- + +## `BlockHeader` + +Replacement for `BlockHeaderView` from `near-primitives`. Shrunken and simplified. + +:::note +The original `BlockHeaderView` is still accessible via the `.streamerMessage` attribute. +::: + +### `BlockHeader` Structure Definition + +```ts +export class BlockHeader { + constructor( + readonly height: number, + readonly hash: string, + readonly prevHash: string, + readonly author: string, + readonly timestampNanosec: string, + readonly epochId: string, + readonly nextEpochId: string, + readonly gasPrice: string, + readonly totalSupply: string, + readonly latestProtocolVersion: number, + readonly randomValue: string, + readonly chunksIncluded: number, + readonly validatorProposals: ValidatorStakeView[]) { + } + ... // helper method omitted for brevity +} +``` + +--- + +## `Receipt` + +This field is a simplified representation of the `ReceiptView` structure from `near-primitives`. + +### `Receipt` Structure Definition + +```ts +export class Receipt implements Events { + constructor( + readonly receiptKind: ReceiptKind, + readonly receiptId: string, + readonly receiverId: string, + readonly predecessorId: string, + readonly status: ExecutionStatus, + readonly executionOutcomeId?: string | undefined, + readonly logs: string[] = []) { + } + ... // helper methods omitted for brevity +} +``` + +### `Receipt` Fields + +#### `receiptKind` + +Defined the type of the `Receipt`: `Action` or `Data` representing the `ActionReceipt` and `DataReceipt`. + +#### `receiptId` + +The ID of the `Receipt` of the `CryptoHash` type. + +#### `receiverId` + +The receiver account id of the `Receipt`. + +#### `predecessorId` + +The predecessor account id of the `Receipt`. + +#### `status` + +Represents the status of `ExecutionOutcome` of the `Receipt`. + +See the `ExecutionStatus` enum section for the details. + +#### `executionOutcomeId` + +The id of the `ExecutionOutcome` for the `Receipt`. Returns `null` if the `Receipt` isn’t executed yet and has a postponed status. + +#### `logs` + +The original logs of the corresponding `ExecutionOutcome` of the `Receipt`. + +Note: not all of the logs might be parsed as JSON Events (`Events`). + +### `Receipt` Helper Methods + +```ts +export class Receipt { + ... // constructor omitted for brevity + get events(): Event[] {} + + static fromOutcomeWithReceipt(outcomeWithReceipt: OutcomeWithReceipt): Receipt {} +} +``` + +#### `Receipt.events(): Events[]` + +Returns an Array of `Events` for the `Receipt`, if any. This might be empty if the `logs` field is empty or doesn’t contain JSON Events compatible log records. + +--- + +## `Event` + +This structure is an ephemeral entity to provide access to the [Events Standard](https://github.com/near/NEPs/blob/master/neps/nep-0297.md) structure and keep data about the related `Receipt` for convenience. + +### Interface for Capturing Data About an Event in `handleStreamerMessage()` + +The interface to capture data about an event has the following arguments: + +- `standard`: name of standard, e.g. nep171 +- `version`: e.g. 1.0.0 +- `event`: type of the event, e.g. nft_mint +- `data`: associate event data. Strictly typed for each set {standard, version, event} inside corresponding NEP + +### `Event` Structure Definition + +```ts +export class Event { + constructor( + readonly relatedReceiptId: string, + readonly rawEvent: RawEvent) { + } + ... // helper methods omitted for brevity +} +``` + +### `Event` Methods + +```ts +export class Event { + ... // constructor omitted for brevity + static fromLog(log: string): Event {} +} +``` + +--- + +## `Transaction` + +A representation of the `IndexerTransactionWithOutcome` from `near-indexer-primitives` which is an ephemeral structure combining `SignedTransactionView` from `near-primitives` and `IndexerExecutionOutcomeWithOptionalReceipt` from `near-indexer-primitives`. + +This structure is very similar to `Receipt`. Unlike `Receipt`, a `Transaction` has a few additional fields like `signerId`, `signature`, and `operations`. + +### `Transaction` Structure Definition + +```ts +export class Transaction { + constructor( + readonly transactionHash: string, + readonly signerId: string, + readonly signerPublicKey: string, + readonly signature: string, + readonly receiverId: string, + readonly status: ExecutionStatus, + readonly executionOutcomeId: string, + readonly operations: Operation[]) { + } +} +``` + +#### `Transaction.transactionHash` + +Returns the hash of the `Transaction` in `CryptoHash`. + +#### `Transaction.signerId` + +Returns the signer account id of the `Transaction`. + +#### `Transaction.signerPublicKey` + +Returns the `PublicKey` of the signer of the `Transaction`. + +#### `Transaction.signature` + +Returns the `Signature` the `Transaction` was signed with. + +#### `Transaction.receiverId` + +Returns the receiver account id of the `Transaction`. + +#### `Transaction.status` + +Returns the status of the `Transaction` as `ExecutionStatus`. + +#### `Transaction.executionOutcomeId` + +Returns the id of the `ExecutionOutcome` for the `Transaction`. + +#### `Transaction.operations` + +Returns an Array of `Operation` for the `Transaction`. + +--- + +## `StateChange` + +This structure is almost an identical copy of the `StateChangeWithCauseView` from `near-primitives` with a propagated additional field `affectedAccountId`. + +### `StateChange` Structure Definition + +```ts +export class StateChange { + constructor( + readonly cause: StateChangeCause, + readonly value: StateChangeValue + ) {} + + get affectedAccountId(): string {} + + static fromStateChangeView(stateChangeView: StateChangeWithCauseView) {} +} +``` + +#### `StateChange.cause` + +Returns the `cause` of the `StateChange`. + +#### `StateChange.value` + +Returns the `value` of the `StateChange`. + +#### `StateChange.affectedAccountId(): string` + +Returns the account id of the `StateChange`. + +#### `StateChange.fromStateChangeView(stateChangeView: StateChangeWithCauseView): StateChange` + +Returns the `StateChange` from the `StateChangeWithCauseView`. Created for backward compatibility. diff --git a/docs/4.tools/events.md b/docs/4.tools/events.md index e05906c3d37..7d471847040 100644 --- a/docs/4.tools/events.md +++ b/docs/4.tools/events.md @@ -69,70 +69,3 @@ that listens for **all** `nft_mint` and `nft_transfer` events in the NEAR networ ::: --- - -## NEAR Lake Indexer - -NEAR Lake is an indexer built on top of [NEAR Indexer Framework](https://near-indexers.io/docs/projects/near-indexer-framework) to watch the network and store all the events as JSON files on AWS S3. - -:::info GitHub repo - -You can find the Lake Indexer source code in [this GitHub repository](https://github.com/near/near-lake-indexer/). - -::: - -### How it works - -:::tip - -[Pagoda Inc.](https://pagoda.co) runs NEAR Lake nodes to store the data in JSON format on AWS S3. -There is no need to run your own NEAR Lake unless you have specific reasons to do that. - -::: - -There are AWS S3 buckets created: - -- `near-lake-data-testnet` (`eu-central-1` region) -- `near-lake-data-mainnet` (`eu-central-1` region) - -All the buckets are set up the way the requester pays for the access. Anyone can read from these buckets by connecting to them with their own AWS credentials to be charged by Amazon. - -### Data structure - -The data structure used by Lake Indexer is the following: - -``` - / - block.json - shard_0.json - shard_1.json - ... - shard_N.json -``` - -`` is a 12-character-long [`u64`](https://doc.rust-lang.org/std/primitive.u64.html) string with leading zeros (e.g "000042839521"). See [this issue for reasoning](https://github.com/near/near-lake/issues/23). - -`block_json` contains JSON-serialized `BlockView` struct. **NB!** this struct might change in the future, we will announce it - -`shard_N.json` where N is [`u64`](https://doc.rust-lang.org/std/primitive.u64.html) starting from `0`. Represents the index number of the shard. In order to find out the expected number of shards in the block you can look in `block.json` at `.header.chunks_included` - - -### How to use it - -We have created the [NEAR Lake Framework](https://near-indexers.io/docs/projects/near-lake-framework) to have a simple straightforward way to create an indexer on top of the data stored by NEAR Lake itself. - -:::info NEAR Lake Framework - -You can check the NEAR Lake Framework release announcement on the [NEAR Governance Forum](https://gov.near.org/t/announcement-near-lake-framework-brand-new-word-in-indexer-building-approach/17668). - -::: - -We have prepared this video tutorial with a simple example to give you an overview and some practical ideas. - - diff --git a/docs/4.tools/indexer4explorer.md b/docs/4.tools/indexer4explorer.md index b3ab4ebbd97..626eb6faac3 100644 --- a/docs/4.tools/indexer4explorer.md +++ b/docs/4.tools/indexer4explorer.md @@ -1,7 +1,7 @@ --- id: indexer-for-explorer title: NEAR Indexer for Explorer -sidebar_label: Query the Blockchain History +sidebar_label: Indexer for Explorer --- import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; @@ -13,7 +13,6 @@ While developing a decentralized app you might want to query usage information f 3. Which transactions failed? In order to simplify asking these questions is that we developed the [NEAR Indexer for Explorer](https://github.com/near/near-indexer-for-explorer). -The NEAR Indexer for Explorer is a **public-access** **read-only** PostgreSQL database where **all** blockchain actions are stored. Both `testnet` and `mainnet` networks have active instances that fill the database with all the data from the network starting from the genesis as [Explorer](https://explorer.near.org/) requires. @@ -24,15 +23,10 @@ You can find the source code on [this GitHub repository](https://github.com/near ::: - -:::warning -The database could go down or take time to reflect the most current blockchain info. Do not use it in production. -For a reliable source of real-time and past information, please run your own [indexer](https://near-indexers.io/). -::: - --- ## Example Queries + ### Transactions Calling a Method Query for all transactions that called `contribute` in the `v1.faucet.nonofficial.testnet` testnet account. @@ -72,3 +66,52 @@ from receipts r, action_receipt_actions ara where r.predecessor_account_id ='v1.faucet.nonofficial.testnet' and ara.receipt_id = r.receipt_id and ara.action_kind = 'TRANSFER' ``` + +--- + +## NEAR Explorer sunsetting + +Pagoda made a decision to sunset NEAR Explorer as a product. This means that `explorer.near.org` (and `explorer.testnet.near.org`) will become a landing page with a list of available alternatives, and the existing [explorer.near.org](https://explorer.near.org) will be hosted under a new domain name and will be transitioned to the community through DevHub. [Read more here](https://near.social/devgovgigs.near/widget/gigs-board.pages.Post?id=635). + + +### What exactly is being shut down? + +You will lose access to databases with these URLs, or other Replicas you might have been given access to: +* `testnet.db.explorer.indexer.near.dev/testnet_explorer` +* `mainnet.db.explorer.indexer.near.dev/mainnet_explorer` + + +There is no plan to shut down any other data products, such as [NEAR Lake](https://docs.near.org/concepts/advanced/near-lake-framework) or [EnhancedAPI](https://www.pagoda.co/enhanced-api) at the moment. + +### What is the timeline? + +Postgres users will lose access to data on the 30th of November, Thursday (12:00 pm Pacific Time Zone). Please migrate to one of the options listed below instead. + +### What does this mean for me? + +If you are using the public Postgres Explorer Database, you will need to migrate to other solutions, depending on your use-case. You should start planning for it right now and reach out to [this Telegram group](https://nearbuilders.com/tg-data) to get help. + +### What are the alternatives? + +There are two major use-cases that you might be using Explorer DB for: analytics and real-time queries from web user interfaces. + +#### Analytics Use-Case + +This is if you use Explorer DB to build internal or external dashboards. Pagoda is working with Google Web3 team to enable BigQuery public dataset that has a compatible schema with Explorer DB. This will be enabled early September 2023. Please follow the announcements on [near.org](https://near.org) and in [Telegram chat](https://nearbuilders.com/tg-data). + +#### Web or API usage + +This is if you make queries to Explorer DB in response to API requests that your users make on your application. There are various options that you can explore: +1. If you are working with token balances, including $NEAR, fungible or non-fungible tokens, consider using [Enhanced API](https://www.pagoda.co/enhanced-api) hosted by Pagoda, or run it yourself using https://github.com/near/near-enhanced-api-server and https://github.com/near/near-microindexers +2. Use NEAR QueryAPI – serverless indexers and GraphQL endpoints: https://near.org/s/p?a=nearpavel.near&b=97029570 +3. Use NEAR Lake Indexer. Create an indexer using [Rust](https://github.com/near/near-lake-framework-rs), [JavaScript](https://github.com/near/near-lake-framework-js). There are other languages supported by community, try this search: https://github.com/search?q=near-lake-framework&type=repositories +4. Consider other indexer solutions built by the community + +### Can I still continue using Explorer Database? + +No, you won’t be able to continue using Public Explorer Database after the sunset. However you can start your own instance of https://github.com/near/near-indexer-for-explorer and reindex the history from scratch or use a latest backup. We will share a backup of Explorer DB in September if you want to run your own instance. + + +To run your own infra, you will need: +* **Indexer services:** We use two e2-medium instances on GCP for redundancy, with 2 vCPUs and 4GB of RAM. +* **A database:** We use Postgres version 11, with 8+ vCPUs, 52GB+ RAM and ~8TB of SSD storage. In addition, we recommend running an extra read-replica on a similar or more powerful machine. diff --git a/docs/4.tools/near-lake.md b/docs/4.tools/near-lake.md new file mode 100644 index 00000000000..9e2891f7c62 --- /dev/null +++ b/docs/4.tools/near-lake.md @@ -0,0 +1,71 @@ +--- +id: near-lake +sidebar_label: Lake Overview +title: NEAR Lake Indexer +--- + + +NEAR Lake is an indexer built on top of [NEAR Indexer Framework](https://near-indexers.io/docs/projects/near-indexer-framework) to watch the network and store all the [events](events.md) as JSON files on AWS S3. + +:::info GitHub repo + +You can find the Lake Indexer source code in [this GitHub repository](https://github.com/near/near-lake-indexer/). + +::: + +### How it works + +:::tip + +[Pagoda Inc.](https://pagoda.co) runs NEAR Lake nodes to store the data in JSON format on AWS S3. +There is no need to run your own NEAR Lake unless you have specific reasons to do that. + +::: + +There are AWS S3 buckets created: + +- `near-lake-data-testnet` (`eu-central-1` region) +- `near-lake-data-mainnet` (`eu-central-1` region) + +All the buckets are set up the way the requester pays for the access. Anyone can read from these buckets by connecting to them with their own AWS credentials to be charged by Amazon. + +### Data structure + +The data structure used by Lake Indexer is the following: + +``` + / + block.json + shard_0.json + shard_1.json + ... + shard_N.json +``` + +`` is a 12-character-long [`u64`](https://doc.rust-lang.org/std/primitive.u64.html) string with leading zeros (e.g "000042839521"). See [this issue for reasoning](https://github.com/near/near-lake/issues/23). + +`block_json` contains JSON-serialized `BlockView` struct. **NB!** this struct might change in the future, we will announce it + +`shard_N.json` where N is [`u64`](https://doc.rust-lang.org/std/primitive.u64.html) starting from `0`. Represents the index number of the shard. In order to find out the expected number of shards in the block you can look in `block.json` at `.header.chunks_included` + + +### How to use it + +We have created the [NEAR Lake Framework](/concepts/advanced/near-lake-framework) to have a simple straightforward way to create an indexer on top of the data stored by NEAR Lake itself. + +:::info NEAR Lake Framework + +You can check the NEAR Lake Framework release announcement on the [NEAR Governance Forum](https://gov.near.org/t/announcement-near-lake-framework-brand-new-word-in-indexer-building-approach/17668). + +::: + +We have prepared this video tutorial with a simple example to give you an overview and some practical ideas. + + diff --git a/docs/bos/community/indexers.md b/docs/bos/community/indexers.md index 7585a5349a6..993be808f48 100644 --- a/docs/bos/community/indexers.md +++ b/docs/bos/community/indexers.md @@ -1,7 +1,7 @@ --- id: indexers title: QueryAPI Indexing Example -sidebar_label: QueryAPI Example +sidebar_label: Getting Started --- With QueryAPI you can quickly create your own indexer by: @@ -26,7 +26,7 @@ You can request access through [this link](https://near.org/dev-queryapi.datapla ## How it Works -This works by: +QueryAPI works by: 1. Writing the indexer name to the blockchain, registering its creation; 2. Creating the tables as specified in the schema to the GraphQL database, exposing a GraphQL endpoint to query the data; @@ -58,6 +58,17 @@ This is the interface through which you can create a new Indexer. On here you ca * the indexer name on Indexer Name * from which block to start indexing on Specific Block Height or From Latest Block Height (selected by default) +### Design Workflow + +To design and create your indexer, you can follow this recommended workflow: + +1. Using [nearblocks.io](https://nearblocks.io), find transactions to smart contracts that you want to index +2. Take the block `height` and put it into the [Debug Mode filter](../queryapi/index-function.md#local-debug-mode), open your browser's _Developer Console_, and hit Play +4. Inspect the block and write JavaScript code using [NEAR Lake Primitives](../../2.develop/lake/lake-primitives.md) to extract data from a `block` object. (This JS code will be your [`IndexingLogic.js`](#indexinglogicjs)) + > **Tip:** Use `context.log` for debugging to ensure you are getting the right results +4. Add more blocks for debugging, or start following the blockchain to see how new blocks are handled +5. Create tables that you need to store the data using Postgres [CREATE table syntax](https://www.postgresql.org/docs/current/sql-createtable.html). (This SQL code will be your [`schema.sql`](#schemasql)) + :::tip Video Walkthrough diff --git a/website/sidebars.json b/website/sidebars.json index 6be0fda1f2d..b1fa0c100da 100644 --- a/website/sidebars.json +++ b/website/sidebars.json @@ -33,7 +33,10 @@ ] }, { - "Data Flow": ["concepts/data-flow/data-storage", "concepts/data-flow/near-data-flow", "concepts/data-flow/token-transfer-flow"] + "Data Flow": [ + "concepts/data-flow/near-data-flow", + "concepts/data-flow/token-transfer-flow" + ] }, { "Tokens": ["concepts/basics/tokens", "concepts/basics/token-loss"] @@ -50,16 +53,27 @@ }, { "type": "html", - "value": " Advanced Topics " + "value": " Blockchain Data & Indexing " }, [ + "concepts/data-flow/data-storage", { - "Indexers": [ + "Data Indexing": [ "concepts/advanced/indexers", "concepts/advanced/near-indexer-framework", "concepts/advanced/near-lake-framework" ] - }, + } + ], + { + "type": "html", + "value": "
" + }, + { + "type": "html", + "value": " Advanced Topics " + }, + [ "concepts/basics/runtime", "concepts/advanced/specification", "concepts/advanced/papers" @@ -169,7 +183,70 @@ ] }, { - "Monitor User Activity": ["tools/realtime", "tools/indexer-for-explorer", "tutorials/indexer/migrating-to-near-lake-framework"] + "Monitor User Activity": [ + "tools/realtime" + ] + }, + { + "type": "html", + "value": "
" + }, + { + "type": "html", + "value": " Data Indexing & Queries " + }, + { + "Data Analytics": [ + "tools/indexer-for-explorer" + ] + }, + { + "QueryAPI Indexing": [ + "bos/queryapi/intro", + "bos/queryapi/index-functions", + "bos/community/indexers", + { "Examples": [ + "bos/tutorial/indexer-tutorials/posts-indexer", + "bos/tutorial/indexer-tutorials/hype-indexer", + "bos/tutorial/indexer-tutorials/feed-indexer" + ] } + ] + }, + { + "NEAR Lake Framework": [ + "tools/near-lake", + "tutorials/indexer/near-lake-state-changes-indexer", + "tutorials/indexer/migrating-to-near-lake-framework", + { "Building Indexers": [ + "develop/lake/primitives", + "tutorials/indexer/js-lake-indexer", + "tutorials/indexer/python-lake-indexer", + "tutorials/indexer/nft-indexer", + "tutorials/indexer/python-nft-indexer" + ] }, + { "Running NEAR Lake": [ + "tutorials/indexer/run-lake-indexer", + "tutorials/indexer/lake-start-options", + "tutorials/indexer/credentials" + ] }, + { + "Lake Data Structures": [ + "develop/lake/structures/toc", + "develop/lake/structures/block", + "develop/lake/structures/chunk", + "develop/lake/structures/shard", + "develop/lake/structures/transaction", + "develop/lake/structures/receipt", + "develop/lake/structures/execution-outcome", + "develop/lake/structures/state-change" + ] + } + ] + }, + { + "Community Tools": [ + "tools/indexing" + ] }, { "type": "html", @@ -220,18 +297,6 @@ } ] }, - { - "Lake Indexer": [ - "develop/lake/structures/toc", - "develop/lake/structures/block", - "develop/lake/structures/chunk", - "develop/lake/structures/shard", - "develop/lake/structures/transaction", - "develop/lake/structures/receipt", - "develop/lake/structures/execution-outcome", - "develop/lake/structures/state-change" - ] - }, { "type": "link", "label": "RPC API ↗", @@ -252,8 +317,7 @@ "label": "👛 Wallets", "href": "https://awesomenear.com/categories/wallets" }, - "tools/explorer", - "tools/indexing" + "tools/explorer" ] }, { @@ -378,18 +442,6 @@ ] }, "develop/relevant-contracts/dao", - { - "NEAR Lake Indexer": [ - "tutorials/indexer/near-lake-state-changes-indexer", - "tutorials/indexer/run-lake-indexer", - "tutorials/indexer/js-lake-indexer", - "tutorials/indexer/lake-start-options", - "tutorials/indexer/python-lake-indexer", - "tutorials/indexer/nft-indexer", - "tutorials/indexer/python-nft-indexer", - "tutorials/indexer/credentials" - ] - }, { "type": "html", "value": "
" @@ -598,11 +650,9 @@ ] }, { - "QueryAPI Indexing": [ - "bos/queryapi/intro", - "bos/queryapi/index-functions", - "bos/community/indexers" - ] + "type": "link", + "label": "QueryAPI Indexing ↗", + "href": "/bos/queryapi/intro" }, { "type": "html", @@ -619,13 +669,6 @@ "bos/tutorial/bos-gateway", "bos/tutorial/ethers-js", "bos/tutorial/lido", - { - "Indexer Tutorials": [ - "bos/tutorial/indexer-tutorials/posts-indexer", - "bos/tutorial/indexer-tutorials/hype-indexer", - "bos/tutorial/indexer-tutorials/feed-indexer" - ] - }, { "type": "html", "value": "
" From cfed94dd8b746ef184f6dab2c67b64fe08511258 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dami=C3=A1n=20Parrino?= Date: Tue, 5 Sep 2023 15:19:48 -0300 Subject: [PATCH 3/3] Add big query article (#1474) * big query * fix links --- docs/2.develop/lake/structures/chunk.mdx | 6 +- .../lake/structures/execution_outcome.mdx | 2 +- docs/2.develop/lake/structures/shard.mdx | 6 +- .../2.develop/lake/structures/transaction.mdx | 2 +- docs/bos/queryapi/big-query.md | 104 ++++++++++++++++++ website/sidebars.json | 1 + website/static/docs/Architecture.png | Bin 0 -> 54153 bytes website/static/docs/BQ_Query_Cost.png | Bin 0 -> 31075 bytes 8 files changed, 113 insertions(+), 8 deletions(-) create mode 100644 docs/bos/queryapi/big-query.md create mode 100644 website/static/docs/Architecture.png create mode 100644 website/static/docs/BQ_Query_Cost.png diff --git a/docs/2.develop/lake/structures/chunk.mdx b/docs/2.develop/lake/structures/chunk.mdx index c569d4fbb0f..35a2cc712ef 100644 --- a/docs/2.develop/lake/structures/chunk.mdx +++ b/docs/2.develop/lake/structures/chunk.mdx @@ -10,11 +10,11 @@ import TabItem from '@theme/TabItem'; ## Definition -`Chunk` of a [`Block`](./block.mdx) is a part of a [`Block`](./block.mdx) from a [Shard](./shard.mdx). The collection of Chunks of the Block forms the NEAR Protocol [`Block`](./block.mdx) +`Chunk` of a [`Block`](block.mdx) is a part of a [`Block`](block.mdx) from a [Shard](shard.mdx). The collection of Chunks of the Block forms the NEAR Protocol [`Block`](block.mdx) Chunk contains all the structures that make the Block: -- [Transactions](./transaction.mdx) -- [Receipts](./receipt.mdx) +- [Transactions](transaction.mdx) +- [Receipts](receipt.mdx) - [ChunkHeader](#chunkheaderview) ## `IndexerChunkView` diff --git a/docs/2.develop/lake/structures/execution_outcome.mdx b/docs/2.develop/lake/structures/execution_outcome.mdx index 8af9b9b1a6f..c43a2878c9b 100644 --- a/docs/2.develop/lake/structures/execution_outcome.mdx +++ b/docs/2.develop/lake/structures/execution_outcome.mdx @@ -11,7 +11,7 @@ import TabItem from '@theme/TabItem'; ## Definition -ExecutionOutcome is the result of execution of [Transaction](./transaction.mdx) or [Receipt](./receipt.mdx) +ExecutionOutcome is the result of execution of [Transaction](transaction.mdx) or [Receipt](receipt.mdx) :::info Transaction's ExecutionOutcome diff --git a/docs/2.develop/lake/structures/shard.mdx b/docs/2.develop/lake/structures/shard.mdx index 4b6223854b1..fe169faed5e 100644 --- a/docs/2.develop/lake/structures/shard.mdx +++ b/docs/2.develop/lake/structures/shard.mdx @@ -13,9 +13,9 @@ import TabItem from '@theme/TabItem'; `IndexerShard` struct is ephemeral structure, there is no such entity in `nearcore`. We've introduces it as a container in [`near-indexer-primitives`](https://crates.io/crates/near-indexer-primitives). This container includes: - shard ID -- [Chunk](./chunk.mdx) that might be absent -- [ExecutionOutcomes](./execution_outcome.mdx) for [Receipts](./receipt.mdx) (these belong to a Shard not to a [Chunk](./chunk.mdx) or a [Block](./block.mdx)) -- [StateChanges](./state_change.mdx) for a Shard +- [Chunk](chunk.mdx) that might be absent +- [ExecutionOutcomes](execution_outcome.mdx) for [Receipts](receipt.mdx) (these belong to a Shard not to a [Chunk](chunk.mdx) or a [Block](block.mdx)) +- [StateChanges](state_change.mdx) for a Shard ## `IndexerShard` diff --git a/docs/2.develop/lake/structures/transaction.mdx b/docs/2.develop/lake/structures/transaction.mdx index 5c0b8b72261..093fec57137 100644 --- a/docs/2.develop/lake/structures/transaction.mdx +++ b/docs/2.develop/lake/structures/transaction.mdx @@ -55,7 +55,7 @@ export type Transaction = { ## `ActionView` -`ActionView` is an Enum with possible actions along with parameters. This structure is used in Transactions and in [Receipts](./receipt.mdx) +`ActionView` is an Enum with possible actions along with parameters. This structure is used in Transactions and in [Receipts](receipt.mdx) diff --git a/docs/bos/queryapi/big-query.md b/docs/bos/queryapi/big-query.md new file mode 100644 index 00000000000..8d4b3deb8ba --- /dev/null +++ b/docs/bos/queryapi/big-query.md @@ -0,0 +1,104 @@ +--- +id: big-query +title: BigQuery Public Dataset +sidebar_label: BigQuery +--- + +Blockchain data indexing in NEAR Public Lakehouse is for anyone wanting to understand blockchain data. This includes: + +- **Users**: create queries to track NEAR assets, monitor transactions, or analyze on-chain events at a massive scale. +- **Researchers**: use indexed data for data science tasks, including on-chain activities, identifying trends, or feeding AI/ML pipelines for predictive analysis. +- **Startups**: can use NEAR's indexed data for deep insights on user engagement, smart contract utilization, or insights across tokens and NFT adoption. + +Benefits: + +- **NEAR instant insights**: Historical on-chain data queried at scale. +- **Cost-effective**: eliminate the need to store and process bulk NEAR protocol data; query as little or as much data as preferred. +- **Easy to use**: no prior experience with blockchain technology is required; bring a general knowledge of SQL to unlock insights. + + +## Getting started + +1. Login into your [Google Cloud Account](https://console.cloud.google.com/). +2. Open the [NEAR Protocol BigQuery Public Dataset](https://console.cloud.google.com/marketplace/product/bigquery-public-data/crypto-near-mainnet). +3. Click in the [VIEW DATASET](https://console.cloud.google.com/bigquery?p=bigquery-public-data&d=crypto_near_mainnet_us&page=dataset) button. +4. Click in the + to create a new tab and write your query, click in the RUN button, and check the `Query results` below the query. +5. Done :) + +:::info + +The [NEAR Public Lakehouse repository](https://github.com/near/near-public-lakehouse) contains the source code for ingesting NEAR Protocol data stored as JSON files in AWS S3 by [NEAR Lake Indexer](https://github.com/near/near-lake-indexer). + +::: + +### Example Queries + +- _How many unique users do I have for my smart contract per day?_ + +```sql +SELECT + r.block_date collected_for_day, + COUNT(DISTINCT r.transaction_signer_account_id) +FROM `bigquery-public-data.crypto_near_mainnet_us.receipt_actions` ra + INNER JOIN `bigquery-public-data.crypto_near_mainnet_us.receipts` r ON r.receipt_id = ra.receipt_id +WHERE ra.action_kind = 'FUNCTION_CALL' + AND ra.receipt_receiver_account_id = 'near.social' -- change to your contract +GROUP BY 1 +ORDER BY 1 DESC; +``` + +## How much it costs? + +- NEAR pays for the storage and doesn't charge you to use the public dataset. + > To learn more about BigQuery public datasets [check this page](https://cloud.google.com/bigquery/public-data). +- Google GCP charges for the queries that you perform on the data. For example, in today's price "Sep 1st, 2023" the On-demand (per TB) query pricing is $6.25 per TB where the first 1 TB per month is free. + > Check [Google's pricing page](https://cloud.google.com/bigquery/pricing#analysis_pricing_models) for detailed pricing info, options, and best practices. + +:::tip +You can check how much data it will query before running it in the BigQuery console UI. Again, since BigQuery uses a columnar data structure and partitions, it's recommended to select only the columns and partitions (`block_date`) needed to avoid unnecessary query costs. +::: + +![Query Costs](/docs/BQ_Query_Cost.png "BQ Query Costs") + +## Architecture + +The data is loaded in a streaming fashion using [Databricks Autoloader](https://docs.gcp.databricks.com/ingestion/auto-loader/index.html) into raw/bronze tables, and transformed with [Databricks Delta Live Tables](https://www.databricks.com/product/delta-live-tables) streaming jobs into cleaned/enriched/silver tables. + +The silver tables are also copied into the [GCP BigQuery Public Dataset](https://cloud.google.com/bigquery/public-data). + +![Architecture](/docs/Architecture.png "Architecture") + +:::info + +[Databricks Medallion Architecture](https://www.databricks.com/glossary/medallion-architecture). + +::: + +## Available Data + +The current data that NEAR is providing was inspired by [NEAR Indexer for Explorer](https://github.com/near/near-indexer-for-explorer/). + +:::info +NEAR plans to improve the data available in the NEAR Public Lakehouse making it easier to consume by denormalizing some tables. +::: + +The tables available in the NEAR Public Lakehouse are: + +- **blocks**: A structure that represents an entire block in the NEAR blockchain. `Block` is the main entity in NEAR Protocol blockchain. Blocks are produced in NEAR Protocol every second. +- **chunks**: A structure that represents a chunk in the NEAR blockchain. `Chunk` of a `Block` is a part of a `Block` from a `Shard`. The collection of `Chunks` of the `Block` forms the NEAR Protocol Block. `Chunk` contains all the structures that make the `Block`: `Transactions`, [`Receipts`](https://nomicon.io/RuntimeSpec/Receipts), and `Chunk Header`. +- **transactions**: [`Transaction`](../../2.develop/lake/structures/transaction.mdx#definition) is the main way of interaction between a user and a blockchain. Transaction contains: Signer account ID, Receiver account ID, and Actions. +- **execution_outcomes**: Execution outcome is the result of execution of `Transaction` or `Receipt`. In the result of the Transaction execution will always be a Receipt. +- **receipt_details**: All cross-contract (we assume that each account lives in its own shard) communication in Near happens through Receipts. Receipts are stateful in a sense that they serve not only as messages between accounts but also can be stored in the account storage to await `DataReceipts`. Each receipt has a `predecessor_id` (who sent it) and `receiver_id` the current account. +- **receipt_origin**: Tracks the transaction that originated the receipt. +- **receipt_actions**: Action Receipt represents a request to apply actions on the `receiver_id` side. It could be derived as a result of a `Transaction` execution or another `ACTION` Receipt processing. Action kind can be: `ADD_KEY`, `CREATE_ACCOUNT`, `DELEGATE_ACTION`, `DELETE_ACCOUNT`, `DELETE_KEY`, `DEPLOY_CONTRACT`, `FUNCTION_CALL`, `STAKE`, `TRANSFER`. +- **receipts (view)**: It's recommended to select only the columns and partitions (`block_date`) needed to avoid unnecessary query costs. This view join the receipt details, the transaction that originated the receipt and the receipt execution outcome. +- **account_changes**: Each account has an associated state where it stores its metadata and all the contract-related data (contract's code + storage). + +:::note References + +- [Protocol documentation](../../1.concepts/welcome.md) +- [Near Data flow](../../1.concepts/data-flow/near-data-flow.md) +- [Lake Data structures](../../2.develop/lake/structures/toc.mdx) +- [Protocol specification](https://nomicon.io/) + +::: diff --git a/website/sidebars.json b/website/sidebars.json index b1fa0c100da..7f79f9eb6de 100644 --- a/website/sidebars.json +++ b/website/sidebars.json @@ -197,6 +197,7 @@ }, { "Data Analytics": [ + "bos/queryapi/big-query", "tools/indexer-for-explorer" ] }, diff --git a/website/static/docs/Architecture.png b/website/static/docs/Architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..00c9493209ccc2b7f52d207b02d1ff4f508501f2 GIT binary patch literal 54153 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 literal 0 HcmV?d00001