{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":858163853,"defaultBranch":"main","name":"indexer","ownerLogin":"thirdweb-dev","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2024-09-16T12:25:34.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/79496167?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1726784385.0","currentOid":""},"activityList":{"items":[{"before":null,"after":"d9588e554d6cd5b28aa4e32f67956ac50a18d290","ref":"refs/heads/iuwqyir/docker","pushedAt":"2024-09-19T22:19:45.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"iuwqyir","name":"Toomas Oosalu","path":"/iuwqyir","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16590638?s=80&v=4"},"commit":{"message":"docker file for deployment","shortMessageHtmlLink":"docker file for deployment"}},{"before":"4597f695c6da96ddc737817d257bffcf13501ee1","after":"b321d9ff7b9d256f5a36b877ac69715fcb81cc21","ref":"refs/heads/iuwqyir/custom-logger","pushedAt":"2024-09-19T22:13:10.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"iuwqyir","name":"Toomas Oosalu","path":"/iuwqyir","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16590638?s=80&v=4"},"commit":{"message":"custom logger","shortMessageHtmlLink":"custom logger"}},{"before":"d92184235f6bc32f7903065ca44b083dbf9e2595","after":"4597f695c6da96ddc737817d257bffcf13501ee1","ref":"refs/heads/iuwqyir/custom-logger","pushedAt":"2024-09-19T19:08:26.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"iuwqyir","name":"Toomas Oosalu","path":"/iuwqyir","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16590638?s=80&v=4"},"commit":{"message":"custom logger","shortMessageHtmlLink":"custom logger"}},{"before":null,"after":"d92184235f6bc32f7903065ca44b083dbf9e2595","ref":"refs/heads/iuwqyir/custom-logger","pushedAt":"2024-09-19T18:26:37.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"iuwqyir","name":"Toomas Oosalu","path":"/iuwqyir","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16590638?s=80&v=4"},"commit":{"message":"custom logger","shortMessageHtmlLink":"custom logger"}},{"before":"ccf890e238d3af27c0604e6aa131a6a8135059f7","after":"d07d8d9d0050e4b102df16fe39eccc8ebdc477c2","ref":"refs/heads/Implement_committer_logic_for_sequential_block_processing","pushedAt":"2024-09-19T15:16:40.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"iuwqyir","name":"Toomas Oosalu","path":"/iuwqyir","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16590638?s=80&v=4"},"commit":{"message":"Implement committer logic for sequential block processing","shortMessageHtmlLink":"Implement committer logic for sequential block processing"}},{"before":null,"after":"ccf890e238d3af27c0604e6aa131a6a8135059f7","ref":"refs/heads/Implement_committer_logic_for_sequential_block_processing","pushedAt":"2024-09-19T14:22:45.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"iuwqyir","name":"Toomas Oosalu","path":"/iuwqyir","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16590638?s=80&v=4"},"commit":{"message":"Implement committer logic for sequential block processing","shortMessageHtmlLink":"Implement committer logic for sequential block processing"}},{"before":"a09c36f9fac3467b796eed7ec111a4004ae39e29","after":"dee98433a5ca269ba747ef63894d23a6c8a7c5bc","ref":"refs/heads/main","pushedAt":"2024-09-19T14:06:37.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"iuwqyir","name":"Toomas Oosalu","path":"/iuwqyir","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16590638?s=80&v=4"},"commit":{"message":"Refactor storage interface and implement query filtering (#20)\n\n### TL;DR\n\nRefactored storage system to support multiple storage instances and improved query filtering.\n\nNote that intellisense won't show it if a storageConnector is not implementing the needed interface. But it will throw at runtime. This change was made to not have the switch clause duplicated. If that's not important, we can create multiple functions (one for each interface) so that editors can understand type inference\n\n### What changed?\n\n- Introduced `StorageConfig` with separate configurations for Main, Staging, and Orchestrator storage.\n- Added `QueryFilter` struct for more flexible querying of blocks, transactions, and events.\n- Updated `IStorage` interface to include separate storage instances for different purposes.\n- Modified `NewStorageConnector` to create multiple storage instances based on the new config.\n- Implemented `newConnector` function for type-safe connector creation.\n- Updated `MemoryConnector` and `ClickHouseConnector` to use the new `QueryFilter` in their query methods.\n- Added helper functions in `memory.go` for handling query filters and key matching.\n- Updated `Commiter` to accept a storage instance in its constructor.\n\n\n### Why make this change?\n\nThis refactoring improves the flexibility and scalability of the storage system by:\n\n1. Allowing separate storage configurations for different purposes (Main, Staging, Orchestrator).\n2. Providing more granular control over queries with the `QueryFilter` struct.\n3. Enhancing type safety and reducing potential runtime errors with the new connector creation process.\n4. Improving the overall structure and maintainability of the storage-related code.","shortMessageHtmlLink":"Refactor storage interface and implement query filtering (#20)"}},{"before":null,"after":"700e72c01b04935f29ebe5373a1208c4022505d8","ref":"refs/heads/amine/ttt","pushedAt":"2024-09-19T13:55:06.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"AmineAfia","name":"Amine Afia","path":"/AmineAfia","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/9674012?s=80&v=4"},"commit":{"message":"clickhouse-storage","shortMessageHtmlLink":"clickhouse-storage"}},{"before":null,"after":"7c513c138856b96d6a99b0227daf9b6fff39aad7","ref":"refs/heads/iuwqyir/separate-storage-configs","pushedAt":"2024-09-19T13:40:14.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"iuwqyir","name":"Toomas Oosalu","path":"/iuwqyir","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16590638?s=80&v=4"},"commit":{"message":"Separate config for each storage and add query filters","shortMessageHtmlLink":"Separate config for each storage and add query filters"}},{"before":"6a4bbca65910b095a82cb3c7240231849bdfc052","after":"a09c36f9fac3467b796eed7ec111a4004ae39e29","ref":"refs/heads/main","pushedAt":"2024-09-19T09:11:25.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"iuwqyir","name":"Toomas Oosalu","path":"/iuwqyir","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16590638?s=80&v=4"},"commit":{"message":"Add debug logging and enhance block polling logic (#19)\n\n### TL;DR\n\nAdded ability to set block limit for polling. Added additional logging for RPC method support checks and added safeguards for block data serialization.\n\n### What changed?\n\n- Added logging for RPC method support checks in `rpc.go`\n- Introduced `POLL_UNTIL_BLOCK` environment variable to limit polling\n- Modified block range calculation to prevent skipping the genesis block\n- Updated `GetLatestPolledBlockNumber` to return `math.MaxUint64` when no block is found so next block polled will overflow to genesis\n- Added a null check for `WithdrawalsHash` in block serialization\n\n### How to test?\n\n1. Set the `POLL_UNTIL_BLOCK` environment variable to test polling limits\n2. Verify logging output for RPC method support checks\n3. Ensure polling starts from genesis when no last polled block is found\n4. Test block serialization with and without `WithdrawalsHash` data","shortMessageHtmlLink":"Add debug logging and enhance block polling logic (#19)"}},{"before":"e2ad09d44dba2d6d06d484e7aca073bf4b63c5fd","after":"33c51ba08025b3604a3395d7485954fb073130fd","ref":"refs/heads/09-19-block_number_limit_and_bug_fixes","pushedAt":"2024-09-19T09:09:27.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"iuwqyir","name":"Toomas Oosalu","path":"/iuwqyir","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16590638?s=80&v=4"},"commit":{"message":"block number limit and bug fixes","shortMessageHtmlLink":"block number limit and bug fixes"}},{"before":"9697103aed8604bc376d5c168382a1841fe4031b","after":"6a4bbca65910b095a82cb3c7240231849bdfc052","ref":"refs/heads/main","pushedAt":"2024-09-19T09:08:27.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"iuwqyir","name":"Toomas Oosalu","path":"/iuwqyir","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16590638?s=80&v=4"},"commit":{"message":"Implement memory storage for blocks, transactions, and events (#18)\n\n### TL;DR\n\nImplemented DBStorage interface for MemoryConnector and updated NewStorageConnector function.\n\n### What changed?\n\n- Added DBStorage interface implementation to MemoryConnector\n- Implemented methods for inserting and retrieving blocks, transactions, and events\n- Added a method to get the maximum block number\n- Updated NewStorageConnector to use MemoryConnector for both OrchestratorStorage and DBStorage\n\n\n### Why make this change?\n\nThis change extends the functionality of the MemoryConnector to support both OrchestratorStorage and DBStorage interfaces. It allows for in-memory storage and retrieval of blockchain data, which can be useful for testing and development purposes without the need for a separate database.","shortMessageHtmlLink":"Implement memory storage for blocks, transactions, and events (#18)"}},{"before":"d6b9387538e08e2ce984c985885df409e95fcdcb","after":"215244704437eb6b54bf7c98f51e068c3670b1df","ref":"refs/heads/iuwqyir/memory-storage","pushedAt":"2024-09-19T09:06:31.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"iuwqyir","name":"Toomas Oosalu","path":"/iuwqyir","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16590638?s=80&v=4"},"commit":{"message":"implement db storage in memory connector for testing","shortMessageHtmlLink":"implement db storage in memory connector for testing"}},{"before":null,"after":"d6b9387538e08e2ce984c985885df409e95fcdcb","ref":"refs/heads/graphite-base/19","pushedAt":"2024-09-19T09:06:27.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"iuwqyir","name":"Toomas Oosalu","path":"/iuwqyir","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16590638?s=80&v=4"},"commit":{"message":"implement db storage in memory connector for testing","shortMessageHtmlLink":"implement db storage in memory connector for testing"}},{"before":"3f63b7e0cec3129237e3ad90c661adea4442caf2","after":"9697103aed8604bc376d5c168382a1841fe4031b","ref":"refs/heads/main","pushedAt":"2024-09-19T09:05:25.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"iuwqyir","name":"Toomas Oosalu","path":"/iuwqyir","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16590638?s=80&v=4"},"commit":{"message":"Refactor worker to process multiple blocks concurrently (#17)\n\n### TL;DR\n\nRefactored the worker, poller, and failure recoverer to improve concurrency and error handling.\n\n### What changed?\n\n- Introduced a new `Worker.Run()` method that processes multiple blocks concurrently.\n- Updated `Poller` and `FailureRecoverer` to use the new `Worker.Run()` method.\n- Removed individual goroutines for each block in favor of a more efficient batch processing approach.\n- Introduced a `BlockResult` struct to encapsulate the results of processing a block.\n- Improved error handling and reporting for block processing failures.\n- Refactored `getBlockRange()` to return a slice of block numbers instead of start and end blocks.\n- Removed the `triggerWorker()` method from both `Poller` and `FailureRecoverer`.\n- Updated the `handleBlockFailures()` and `handleBlockResults()` methods to process batch results.\n\n### Why make this change?\n\nThis refactoring aims to improve the efficiency and reliability of the indexer by:\n\n1. Allowing storage to do batch inserts\n2. Improving error handling and reporting, making it easier to identify and debug issues.\n3. Simplifying the code structure, making it more maintainable and easier to understand.\n4. Enhancing the ability to process blocks in batches, which should lead to better overall performance.\n\nThese changes should result in a more robust and scalable indexer that can handle high volumes of blocks more efficiently.","shortMessageHtmlLink":"Refactor worker to process multiple blocks concurrently (#17)"}},{"before":"418d2a0bc08240174e48bab288ee5c660e3d4134","after":"84873584062913a547d0826b2e1d3255e069d08d","ref":"refs/heads/iuwqyir/worker-batch","pushedAt":"2024-09-19T09:03:27.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"iuwqyir","name":"Toomas Oosalu","path":"/iuwqyir","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16590638?s=80&v=4"},"commit":{"message":"handle batch of blocks per worker","shortMessageHtmlLink":"handle batch of blocks per worker"}},{"before":null,"after":"418d2a0bc08240174e48bab288ee5c660e3d4134","ref":"refs/heads/graphite-base/18","pushedAt":"2024-09-19T09:03:24.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"iuwqyir","name":"Toomas Oosalu","path":"/iuwqyir","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16590638?s=80&v=4"},"commit":{"message":"handle batch of blocks per worker","shortMessageHtmlLink":"handle batch of blocks per worker"}},{"before":"243a3e49f039bb73b875ac56f9502ccdd7093097","after":"3f63b7e0cec3129237e3ad90c661adea4442caf2","ref":"refs/heads/main","pushedAt":"2024-09-19T09:02:20.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"iuwqyir","name":"Toomas Oosalu","path":"/iuwqyir","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16590638?s=80&v=4"},"commit":{"message":"Add common data structures and serialization logic (#16)\n\n### TL;DR\n\nIntroduced new data structures and serialization logic for blockchain data.\n\n### What changed?\n\n- Added new data structures in the `common` package:\n - `Block`\n - `Log`\n - `Trace`\n - `Transaction`\n- Implemented a `SerializeBlockResult` function in the `worker` package to convert blockchain data into these new structures.\n- Created helper functions to serialize individual components:\n - `serializeBlock`\n - `serializeTransaction`\n - `serializeLogs`\n - `serializeTraces`\n\n\n### Why make this change?\n\nThis change provides a standardized way to represent blockchain data within the application. By introducing these new structures and serialization functions, we can remove arbitrary data transformations and ensure consistent data handling across different parts of the system. This will improve code readability, maintainability, and make it easier to process and analyze blockchain data in subsequent operations.","shortMessageHtmlLink":"Add common data structures and serialization logic (#16)"}},{"before":null,"after":"e40c409ba160a9a6191d8f2853696ae97e674503","ref":"refs/heads/graphite-base/17","pushedAt":"2024-09-19T09:02:17.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"iuwqyir","name":"Toomas Oosalu","path":"/iuwqyir","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16590638?s=80&v=4"},"commit":{"message":"add serializers for block data","shortMessageHtmlLink":"add serializers for block data"}},{"before":null,"after":"e2ad09d44dba2d6d06d484e7aca073bf4b63c5fd","ref":"refs/heads/09-19-block_number_limit_and_bug_fixes","pushedAt":"2024-09-19T00:21:10.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"iuwqyir","name":"Toomas Oosalu","path":"/iuwqyir","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16590638?s=80&v=4"},"commit":{"message":"block number limit and bug fixes","shortMessageHtmlLink":"block number limit and bug fixes"}},{"before":null,"after":"d6b9387538e08e2ce984c985885df409e95fcdcb","ref":"refs/heads/iuwqyir/memory-storage","pushedAt":"2024-09-19T00:21:06.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"iuwqyir","name":"Toomas Oosalu","path":"/iuwqyir","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16590638?s=80&v=4"},"commit":{"message":"implement db storage in memory connector for testing","shortMessageHtmlLink":"implement db storage in memory connector for testing"}},{"before":"45283baf58d8d6c9aa5927b7be3aeb5a0e76ed78","after":"418d2a0bc08240174e48bab288ee5c660e3d4134","ref":"refs/heads/iuwqyir/worker-batch","pushedAt":"2024-09-18T23:29:05.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"iuwqyir","name":"Toomas Oosalu","path":"/iuwqyir","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16590638?s=80&v=4"},"commit":{"message":"handle batch of blocks per worker","shortMessageHtmlLink":"handle batch of blocks per worker"}},{"before":null,"after":"45283baf58d8d6c9aa5927b7be3aeb5a0e76ed78","ref":"refs/heads/iuwqyir/worker-batch","pushedAt":"2024-09-18T19:00:20.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"iuwqyir","name":"Toomas Oosalu","path":"/iuwqyir","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16590638?s=80&v=4"},"commit":{"message":"handle batch of blocks per worker","shortMessageHtmlLink":"handle batch of blocks per worker"}},{"before":null,"after":"e40c409ba160a9a6191d8f2853696ae97e674503","ref":"refs/heads/iuwqyir/block-data-serializers","pushedAt":"2024-09-18T19:00:17.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"iuwqyir","name":"Toomas Oosalu","path":"/iuwqyir","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16590638?s=80&v=4"},"commit":{"message":"add serializers for block data","shortMessageHtmlLink":"add serializers for block data"}},{"before":"d71bb795d8108b07832deba1e1c82c5d6583062c","after":"243a3e49f039bb73b875ac56f9502ccdd7093097","ref":"refs/heads/main","pushedAt":"2024-09-18T10:25:24.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"iuwqyir","name":"Toomas Oosalu","path":"/iuwqyir","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16590638?s=80&v=4"},"commit":{"message":"Refactor storage interface and implementation (#13)\n\n### TL;DR\n\nRefactored storage implementation and integrated it with the orchestrator and worker components.\n\n### What changed?\n\n- Consolidated storage interfaces into a single `IStorage` interface\n- Removed separate orchestrator storage package and integrated it into the main storage package\n- Updated `ClickHouseConnector` and `MemoryConnector` to implement both `IOrchestratorStorage` and `IDBStorage` interfaces\n- Modified `Orchestrator`, `Poller`, `FailureRecoverer`, and `Worker` to use the new unified storage interface\n- Simplified storage initialization in the `Orchestrator`\n- Updated `Worker` to use the new storage interface for data processing\n- Removed unused `queryRows` function from `Worker`\n- Adjusted import statements and function signatures throughout the codebase to reflect the new storage structure","shortMessageHtmlLink":"Refactor storage interface and implementation (#13)"}},{"before":"5ce9ab0bc79ddcb8f182285fade8a4f7307855b9","after":"cf3e8bf89c666a07fcc63af40ab89924602bc461","ref":"refs/heads/09-18-implement_in_memory_blockchain_storage","pushedAt":"2024-09-18T10:23:26.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"iuwqyir","name":"Toomas Oosalu","path":"/iuwqyir","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16590638?s=80&v=4"},"commit":{"message":"implement in memory blockchain storage","shortMessageHtmlLink":"implement in memory blockchain storage"}},{"before":"63889a91094e23d9d57901c87730bec8b281e7d4","after":"d71bb795d8108b07832deba1e1c82c5d6583062c","ref":"refs/heads/main","pushedAt":"2024-09-18T10:22:23.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"iuwqyir","name":"Toomas Oosalu","path":"/iuwqyir","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16590638?s=80&v=4"},"commit":{"message":"Refactor orchestrator storage and block failure handling (#12)\n\n### TL;DR\n\nRefactored orchestrator storage and introduced a new BlockFailure type for improved error handling and recovery.\n\n### What changed?\n\n- Created a new `BlockFailure` type in `internal/common/block_failures.go` with JSON marshaling/unmarshaling functions.\n- Refactored the orchestrator storage interface and implementation:\n - Moved storage-related code to `internal/storage/orchestrator/`.\n - Created a new `OrchestratorStorage` interface with specific methods for block failures and latest polled block number.\n - Implemented a `MemoryOrchestratorStorage` that uses an LRU cache.\n- Updated `Poller`, `FailureRecoverer`, and `Orchestrator` to use the new storage interface.\n- Removed the generic storage connector and memory implementation.","shortMessageHtmlLink":"Refactor orchestrator storage and block failure handling (#12)"}},{"before":null,"after":"611b361762c39e2267d45d9a3098a1455d1f046c","ref":"refs/heads/graphite-base/13","pushedAt":"2024-09-18T10:22:20.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"iuwqyir","name":"Toomas Oosalu","path":"/iuwqyir","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16590638?s=80&v=4"},"commit":{"message":"use separate orchestrator storage interface","shortMessageHtmlLink":"use separate orchestrator storage interface"}},{"before":"889ff7610451033a3232191624219c88ca3c9b92","after":"5ce9ab0bc79ddcb8f182285fade8a4f7307855b9","ref":"refs/heads/09-18-implement_in_memory_blockchain_storage","pushedAt":"2024-09-18T10:08:51.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"iuwqyir","name":"Toomas Oosalu","path":"/iuwqyir","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16590638?s=80&v=4"},"commit":{"message":"implement in memory blockchain storage","shortMessageHtmlLink":"implement in memory blockchain storage"}},{"before":"a5c02bb484c72d41539206c1eccb4c43f3242cf1","after":"611b361762c39e2267d45d9a3098a1455d1f046c","ref":"refs/heads/09-18-use_separate_orchestrator_storage_interface","pushedAt":"2024-09-18T10:08:46.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"iuwqyir","name":"Toomas Oosalu","path":"/iuwqyir","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/16590638?s=80&v=4"},"commit":{"message":"use separate orchestrator storage interface","shortMessageHtmlLink":"use separate orchestrator storage interface"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEu12jxAA","startCursor":null,"endCursor":null}},"title":"Activity ยท thirdweb-dev/indexer"}