From a24cf083cfc82d41e5783dd676cf8ba901190d8c Mon Sep 17 00:00:00 2001 From: Ori Pomerantz Date: Thu, 15 Feb 2024 13:01:34 -0600 Subject: [PATCH 01/24] docs(world/batch-calls): add the advantage vs `multicall` (#2266) --- docs/pages/world/batch-calls.mdx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/pages/world/batch-calls.mdx b/docs/pages/world/batch-calls.mdx index 0e1208d3e7..183ed87263 100644 --- a/docs/pages/world/batch-calls.mdx +++ b/docs/pages/world/batch-calls.mdx @@ -6,3 +6,6 @@ If you have the proper [delegations](/world/account-delegation), you can also us The calls take place sequentially, and after they all finish successfully you get back the return values from all of them. If any of the calls revert, so does `batchCall` / `batchCallFrom`, so all the state changes created by the previous calls are discarded. + +The advantage of using `batchCall` rather than [the standard multicall](https://github.com/mds1/multicall) is that `batchCall` is a native MUD function that lives in the `World` contract, so it does not change `msg.sender`. +As a result, when you use `batchCall` MUD can apply [access control](./namespaces-access-control), and `System`s can rely on the value of [`_msgSender()`](./systems#writing-systems). From 997286bacafa43bd997c3c752b445acc23726bde Mon Sep 17 00:00:00 2001 From: Andy Cernera Date: Fri, 16 Feb 2024 20:55:41 +0900 Subject: [PATCH 02/24] feat(store-sync): wait for idle after each chunk of logs in a block (#2254) Co-authored-by: Kevin Ingersoll Co-authored-by: yonada --- .changeset/nasty-rice-pull.md | 5 +++ e2e/packages/sync-test/syncToRecs.test.ts | 47 ++++++++++++++++++++++ packages/store-sync/src/createStoreSync.ts | 9 ++++- 3 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 .changeset/nasty-rice-pull.md create mode 100644 e2e/packages/sync-test/syncToRecs.test.ts diff --git a/.changeset/nasty-rice-pull.md b/.changeset/nasty-rice-pull.md new file mode 100644 index 0000000000..d45fe7daea --- /dev/null +++ b/.changeset/nasty-rice-pull.md @@ -0,0 +1,5 @@ +--- +"@latticexyz/store-sync": minor +--- + +`createStoreSync` now [waits for idle](https://developer.mozilla.org/en-US/docs/Web/API/Window/requestIdleCallback) between each chunk of logs in a block to allow for downstream render cycles to trigger. This means that hydrating logs from an indexer will no longer block until hydration completes, but rather allow for `onProgress` callbacks to trigger. diff --git a/e2e/packages/sync-test/syncToRecs.test.ts b/e2e/packages/sync-test/syncToRecs.test.ts new file mode 100644 index 0000000000..7a98bb1ca8 --- /dev/null +++ b/e2e/packages/sync-test/syncToRecs.test.ts @@ -0,0 +1,47 @@ +import { describe, expect, it } from "vitest"; +import { rpcHttpUrl } from "./setup/constants"; +import { deployContracts } from "./setup"; +import { createAsyncErrorHandler } from "./asyncErrors"; +import { createWorld, getComponentValueStrict } from "@latticexyz/recs"; +import { singletonEntity, syncToRecs } from "@latticexyz/store-sync/recs"; +import mudConfig from "../contracts/mud.config"; +import { transportObserver } from "@latticexyz/common"; +import { ClientConfig, createPublicClient, http, isHex } from "viem"; +import { getNetworkConfig } from "../client-vanilla/src/mud/getNetworkConfig"; + +describe("syncToRecs", () => { + const asyncErrorHandler = createAsyncErrorHandler(); + + it("has the correct sync progress percentage", async () => { + asyncErrorHandler.resetErrors(); + + const { stdout } = await deployContracts(rpcHttpUrl); + + const [, worldAddress] = stdout.match(/worldAddress: '(0x[0-9a-f]+)'/i) ?? []; + if (!isHex(worldAddress)) { + throw new Error("world address not found in output, did the deploy fail?"); + } + + const networkConfig = await getNetworkConfig(); + const clientOptions = { + chain: networkConfig.chain, + transport: transportObserver(http(rpcHttpUrl ?? undefined)), + pollingInterval: 1000, + } as const satisfies ClientConfig; + + const publicClient = createPublicClient(clientOptions); + + const world = createWorld(); + + const { components } = await syncToRecs({ + world, + config: mudConfig, + address: worldAddress, + publicClient, + }); + + expect(getComponentValueStrict(components.SyncProgress, singletonEntity).percentage).toMatchInlineSnapshot(` + 100 + `); + }); +}); diff --git a/packages/store-sync/src/createStoreSync.ts b/packages/store-sync/src/createStoreSync.ts index 5bcffb6f89..ad3e2ada04 100644 --- a/packages/store-sync/src/createStoreSync.ts +++ b/packages/store-sync/src/createStoreSync.ts @@ -29,7 +29,7 @@ import { } from "rxjs"; import { debug as parentDebug } from "./debug"; import { SyncStep } from "./SyncStep"; -import { bigIntMax, chunk, isDefined } from "@latticexyz/common/utils"; +import { bigIntMax, chunk, isDefined, waitForIdle } from "@latticexyz/common/utils"; import { getSnapshot } from "./getSnapshot"; import { fetchAndStoreLogs } from "./fetchAndStoreLogs"; @@ -145,11 +145,16 @@ export async function createStoreSync await storageAdapter({ blockNumber, logs: chunk }); onProgress?.({ step: SyncStep.SNAPSHOT, - percentage: ((i + chunk.length) / chunks.length) * 100, + percentage: ((i + 1) / chunks.length) * 100, latestBlockNumber: 0n, lastBlockNumberProcessed: blockNumber, message: "Hydrating from snapshot", }); + + // RECS is a synchronous API so hydrating in a loop like this blocks downstream render cycles + // that would display the percentage climbing up to 100. + // We wait for idle callback here to give rendering a chance to complete. + await waitForIdle(); } onProgress?.({ From fbe695ec21e752568b9631ca06bdc96b22752c0e Mon Sep 17 00:00:00 2001 From: Ori Pomerantz Date: Fri, 16 Feb 2024 06:10:26 -0600 Subject: [PATCH 03/24] docs(world/systems): add code sample for registering a `System` (#2258) --- docs/pages/world/systems.mdx | 61 ++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/docs/pages/world/systems.mdx b/docs/pages/world/systems.mdx index 84978f7ee1..58686ff9d6 100644 --- a/docs/pages/world/systems.mdx +++ b/docs/pages/world/systems.mdx @@ -1,4 +1,5 @@ import Illustration from "./world-table-illustration.mdx"; +import { CollapseCode } from "../../components/CollapseCode"; # Systems @@ -126,6 +127,66 @@ Only the [namespace owner](./namespaces-access-control#ownership) can register a `System`s can be registered once per `World`, but the same system can be registered in multiple `World`s. If you need multiple instances of a `System` in the same world, you can deploy the `System` multiple times and register the individual deployments individually. + + +```solidity filename="MessagingExtension.s.sol" showLineNumbers {20-21,30-31,38-39} +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.21; + +import { Script } from "forge-std/Script.sol"; +import { console } from "forge-std/console.sol"; +import { IBaseWorld } from "@latticexyz/world-modules/src/interfaces/IBaseWorld.sol"; +import { WorldRegistrationSystem } from "@latticexyz/world/src/modules/core/implementations/WorldRegistrationSystem.sol"; + +// Create resource identifiers (for the namespace and system) +import { ResourceId } from "@latticexyz/store/src/ResourceId.sol"; +import { WorldResourceIdLib } from "@latticexyz/world/src/WorldResourceId.sol"; +import { RESOURCE_SYSTEM } from "@latticexyz/world/src/worldResourceTypes.sol"; + +// For registering the table +import { Messages, MessagesTableId } from "../src/codegen/index.sol"; +import { IStore } from "@latticexyz/store/src/IStore.sol"; +import { StoreSwitch } from "@latticexyz/store/src/StoreSwitch.sol"; + +// For deploying MessageSystem +import { MessageSystem } from "../src/systems/MessageSystem.sol"; + +contract MessagingExtension is Script { + function run() external { + uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); + address worldAddress = vm.envAddress("WORLD_ADDRESS"); + WorldRegistrationSystem world = WorldRegistrationSystem(worldAddress); + ResourceId namespaceResource = WorldResourceIdLib.encodeNamespace(bytes14("messaging")); + ResourceId systemResource = WorldResourceIdLib.encode(RESOURCE_SYSTEM, "messaging", "MessageSystem"); + + vm.startBroadcast(deployerPrivateKey); + + world.registerNamespace(namespaceResource); + StoreSwitch.setStoreAddress(worldAddress); + Messages.register(); + MessageSystem messageSystem = new MessageSystem(); + world.registerSystem(systemResource, messageSystem, true); + world.registerFunctionSelector(systemResource, "incrementMessage(string)"); + + vm.stopBroadcast(); + } +} +``` + + + +`System` registration requires several steps: + +1. Create the resource ID for the `System`. +1. Deploy the `System` contract. +1. Use [`WorldRegistrationSystem.registerSystem`](https://github.com/latticexyz/mud/blob/main/packages/world/src/modules/init/implementations/WorldRegistrationSystem.sol#L115-L178) to register the `System`. + This function takes three parameters: + - The ResourceId for the `System`. + - The address of the `System` contract. + - Access control - whether access to the `System` is public (`true`) or limited to entities with access either to the namespace or the `System` itself (`false`). +
+1. Optionally, register [function selectors](/world/function-selectors) for the `System`. + ### Upgrading systems The namespace owner can upgrade a `System`. From 087e398b44bd2a0c6d7963822d3f2c70f901ee6c Mon Sep 17 00:00:00 2001 From: Ori Pomerantz Date: Fri, 16 Feb 2024 06:13:36 -0600 Subject: [PATCH 04/24] docs(world/tables): read/write code samples (#2269) --- docs/pages/world/tables.mdx | 224 ++++++++++++++++++++++++++++++++++++ 1 file changed, 224 insertions(+) diff --git a/docs/pages/world/tables.mdx b/docs/pages/world/tables.mdx index b4add4e142..393a182de0 100644 --- a/docs/pages/world/tables.mdx +++ b/docs/pages/world/tables.mdx @@ -1,3 +1,4 @@ +import { CollapseCode } from "../../components/CollapseCode"; import Illustration from "./world-table-illustration.mdx"; # Tables @@ -18,3 +19,226 @@ When a `System` reads or writes storage via [table libraries](/store/table-libra Additional [access can be granted](./namespaces-access-control) by the namespace owner. + +## Code samples + +### Reading from a table + +Anybody connected to the blockchain can run the `view` functions that read table content. + + + +```solidity filename="ReadTableInformation.s.sol" copy showLineNumbers {6,8-14,22-24,36-42} +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.21; + +import { Script } from "forge-std/Script.sol"; +import { console } from "forge-std/console.sol"; +import { StoreSwitch } from "@latticexyz/store/src/StoreSwitch.sol"; + +// Read and manipulate the Systems table +import { Systems, SystemsTableId } from "@latticexyz/world/src/codegen/index.sol"; + +// The key is a ResourceId +import { ResourceId } from "@latticexyz/store/src/ResourceId.sol"; +import { RESOURCE_SYSTEM } from "@latticexyz/world/src/worldResourceTypes.sol"; +import { WorldResourceIdLib } from "@latticexyz/world/src/WorldResourceId.sol"; + +contract ReadTableInformation is Script { + function run() external { + // Load the world address and specify it as the Store address + address worldAddress = vm.envAddress("WORLD_ADDRESS"); + StoreSwitch.setStoreAddress(worldAddress); + + // Table metainformation (field names) + string[] memory keyNames = Systems.getKeyNames(); + string[] memory valueNames = Systems.getFieldNames(); + + console.log("Key fields:"); + for (uint i = 0; i < keyNames.length; i++) { + console.log("\t", i, keyNames[i]); + } + + console.log("Value fields:"); + for (uint i = 0; i < valueNames.length; i++) { + console.log("\t", i, valueNames[i]); + } + + // Read information about the :AccessManagement System + ResourceId accessManagementSystem = WorldResourceIdLib.encode( + RESOURCE_SYSTEM, // System + "", // Root namespace + "AccessManagement" // Called AccessManagement + ); + (address systemAddress, bool publicAccess) = Systems.get(accessManagementSystem); + console.log("The address for the :AccessManagement System:", systemAddress); + console.log("Public access:", publicAccess); + } +} +``` + + + +
+ +Explanation + +```solidity +import { StoreSwitch } from "@latticexyz/store/src/StoreSwitch.sol"; +``` + +We need [the `StoreSwitch` library](https://github.com/latticexyz/mud/blob/main/packages/store/src/StoreSwitch.sol) library to specify the address of the `World` with the data. + +```solidity +// Read and manipulate the Systems table +import { Systems, SystemsTableId } from "@latticexyz/world/src/codegen/index.sol"; +``` + +It is easiest if we import the definitions of the table that were generated using [`mud tablegen`](./cli/tablegen). + +```solidity +// The key is a ResourceId +import { ResourceId } from "@latticexyz/store/src/ResourceId.sol"; +import { RESOURCE_SYSTEM } from "@latticexyz/world/src/worldResourceTypes.sol"; +import { WorldResourceIdLib } from "@latticexyz/world/src/WorldResourceId.sol"; +``` + +The key of the `store:Tables` table is the resource ID for the various tables. +To read the information of a specific table later we need to create the appropriate resource ID. + +```solidity + +contract ReadTableInformation is Script { + function run() external { + + // Load the world address and specify it as the Store address + address worldAddress = vm.envAddress("WORLD_ADDRESS"); + StoreSwitch.setStoreAddress(worldAddress); +``` + +[`StoreSwitch.setStoreAddress`](https://github.com/latticexyz/mud/blob/main/packages/store/src/StoreSwitch.sol#L58-L65) is the function we call to specify the `World`'s address. + +```solidity + // Table metainformation (field names) + string[] memory keyNames = Systems.getKeyNames(); + string[] memory valueNames = Systems.getFieldNames(); +``` + +These functions give us the names of the key fields and value field. + +```solidity + // Read information about the :AccessManagement System + ResourceId accessManagementSystem = WorldResourceIdLib.encode( + RESOURCE_SYSTEM, // System + "", // Root namespace + "AccessManagement" // Called AccessManagement + ); +``` + +Here we create the resource ID for the table whose information we want. + +```solidity + (address systemAddress, bool publicAccess) = Systems.get(accessManagementSystem); +``` + +And actually read the information. + +
+### Writing to table + +This code is taken from [the React template](https://github.com/latticexyz/mud/tree/main/templates/react). +Note that only [authorized addresses](/world/namespaces-access-control#access) are allowed to write directly to a table. + + + +```solidity filename="PostDeploy.s.sol" copy showLineNumbers {6,9,13-14,19-23,31} +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.24; + +import { Script } from "forge-std/Script.sol"; +import { console } from "forge-std/console.sol"; +import { StoreSwitch } from "@latticexyz/store/src/StoreSwitch.sol"; + +import { IWorld } from "../src/codegen/world/IWorld.sol"; +import { Tasks, TasksData } from "../src/codegen/index.sol"; + +contract PostDeploy is Script { + function run(address worldAddress) external { + // Specify a store so that you can use tables directly in PostDeploy + StoreSwitch.setStoreAddress(worldAddress); + + // Load the private key from the `PRIVATE_KEY` environment variable (in .env) + uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); + + // Start broadcasting transactions from the deployer account + vm.startBroadcast(deployerPrivateKey); + + // We can set table records directly + Tasks.set("1", TasksData({ description: "Walk the dog", createdAt: block.timestamp, completedAt: 0 })); + + // Or we can call our own systems + IWorld(worldAddress).addTask("Take out the trash"); + + bytes32 key = IWorld(worldAddress).addTask("Do the dishes"); + IWorld(worldAddress).completeTask(key); + + vm.stopBroadcast(); + } +} +``` + + + +
+ +Explanation + +```solidity +import { StoreSwitch } from "@latticexyz/store/src/StoreSwitch.sol"; +``` + +We need [the `StoreSwitch` library](https://github.com/latticexyz/mud/blob/main/packages/store/src/StoreSwitch.sol) library to specify the address of the `World` with the data. + +```solidity +import { Tasks, TasksData } from "../src/codegen/index.sol"; +``` + +It is easiest if we import the definitions of the table that were generated using [`mud tablegen`](./cli/tablegen). + +```solidity +contract PostDeploy is Script { + function run(address worldAddress) external { + // Specify a store so that you can use tables directly in PostDeploy + StoreSwitch.setStoreAddress(worldAddress); +``` + +[`StoreSwitch.setStoreAddress`](https://github.com/latticexyz/mud/blob/main/packages/store/src/StoreSwitch.sol#L58-L65) is the function we call to specify the `World`'s address. + +```solidity + // Start broadcasting transactions from the deployer account + vm.startBroadcast(deployerPrivateKey); +``` + +`.set` changes the state of the blockchain, so it requires an address. +This address is necessary for two reasons: + +- To spend ETH for gas. +- To [check permissions](./namespaces-access-control#access). + +```solidity + + // We can set table records directly + Tasks.set("1", TasksData({ description: "Walk the dog", createdAt: block.timestamp, completedAt: 0 })); +``` + +Create a new `TasksData` and set that value with the key `"1"` (in hex the key is `0x310...0`). + +```solidity + vm.stopBroadcast(); + } +} +``` + +Stop broadcasting transactions as the authorized address. + +
From 62d5f8102a27ad10f2f415845fcae39937e42463 Mon Sep 17 00:00:00 2001 From: Ori Pomerantz Date: Fri, 16 Feb 2024 06:20:33 -0600 Subject: [PATCH 05/24] docs(readme): update (#2245) Co-authored-by: Kevin Ingersoll Co-authored-by: alvarius --- README.md | 96 ++++++++----------------------------------------------- 1 file changed, 14 insertions(+), 82 deletions(-) diff --git a/README.md b/README.md index ec3607693f..156b08ba28 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,11 @@ # MUD
-MUD logo -

MUD - Engine for Autonomous Worlds

+ +![MUD logo](./docs/public/mud-cover-photo.png) + +
+

Battle-tested onchain framework for developers

@@ -19,36 +22,10 @@

-MUD is a framework for complex Ethereum applications. - -It adds some conventions for organizing data and logic and abstracts away low-level complexities so you can focus on the features of your app. - -It standardizes the way data is stored on-chain. -With this standard data model, MUD can provide all network code to synchronize contract and client state. This includes synchronizing state directly from an RPC node or a general-purpose MUD indexer. - -MUD is MIT-licensed, open source and free to use. - -## Features - -![MUD features](./docs/public/features.png) +MUD is a framework for ambitious Ethereum applications. +It compresses the complexity of building EVM apps with a tightly integrated software stack that handles data storage, upgrades, delegations, etc. -### Today - -- State synchronization between contracts and clients without custom networking code -- General purpose indexers (without custom indexing code) -- Seamless contract upgrades (+ automatic contract upgrades during development) -- Shared contract state -- Optimistic updates -- Automatic type generation for contracts and systems -- Query language to interact with contract state -- Data explorer to inspect and modify contract and local state -- Bitpacking utilities - -### Soon - -- Local simulation of transactions (including optimistic state) -- Built-in support for account abstraction -- Contract package manager +You can see MUD's features, both those available and those still in development, on [the development status page](https://status.mud.dev/). ## Quickstart @@ -56,60 +33,15 @@ MUD is MIT-licensed, open source and free to use. pnpm create mud@next my-project ``` -For more information on how to get started, have a look at the [MUD documentation](https://mud.dev/quick-start). - -## Talks - -
- Getting started with MUD - MUD - An Engine for Autonomous Worlds - MUD in Practice - How we built OPCraft -
- -## Packages - -MUD consists of several libraries. They can be used independently, but are best used together. +Then follow the directions onscreen. -| Package | Version | -| ----------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | -| **[@latticexyz/recs](/packages/recs)**
TypeScript Reactive Entity Component System library | [![npm version](https://img.shields.io/npm/v/@latticexyz/recs.svg)](https://www.npmjs.org/package/@latticexyz/recs) | -| **[@latticexyz/services](/packages/services)**
Go services for indexer, faucet, message relay | [![npm version](https://img.shields.io/npm/v/@latticexyz/services.svg)](https://www.npmjs.org/package/@latticexyz/services) | -| **[@latticexyz/cli](/packages/cli)**
Command line interface for types, testing, faucet, deployment and more | [![npm version](https://img.shields.io/npm/v/@latticexyz/cli.svg)](https://www.npmjs.org/package/@latticexyz/cli) | -| **[@latticexyz/noise](/packages/noise)**
Solidity and AssemblyScript implementations of Perlin noise | [![npm version](https://img.shields.io/npm/v/@latticexyz/noise.svg)](https://www.npmjs.org/package/@latticexyz/noise) | +For more information on how to get started, have a look at the [MUD documentation](https://mud.dev/templates/typescript/getting-started). ## Contribute -We'd love your support in improving MUD! This monorepo includes all of MUD's source code, and pull requests are always welcome. To discuss new features or changes [join our Discord](https://lattice.xyz/discord). - -### Local development setup - -!!! -The following steps are only necessary if you want to contribute to MUD. To use MUD in your project, install the [packages](#packages) from npm or [set up a new project with the MUD cli](#quickstart). -!!! - -1. Install the foundry toolkit (required to build and test MUD solidity packages): [https://getfoundry.sh/](https://getfoundry.sh/) - -2. Install pnpm - - ``` - npm install pnpm --global - ``` - -3. Clone the MUD monorepo - - ``` - git clone https://github.com/latticexyz/mud - ``` - -4. Install MUD dependencies and setup local environment - - ``` - cd mud && pnpm install && pnpm build - ``` - -### Pull requests - -MUD follows the [conventional commit specification](https://www.conventionalcommits.org/en/v1.0.0/) for commit messages and PR titles. Please keep the scope of your PR small (rather open multiple small PRs than one huge PR) and follow the conventional commit spec. +We'd love your support in improving MUD, [see here for instructions](https://mud.dev/contribute). +This monorepo includes all of MUD's source code, and pull requests are always welcome. +To discuss new features or changes [join our Discord](https://lattice.xyz/discord). ## Community support @@ -117,4 +49,4 @@ MUD follows the [conventional commit specification](https://www.conventionalcomm ## License -MUD is open-source software [licensed as MIT](LICENSE). +MUD is open-source software [under the MIT license](LICENSE). From fb00798c72fac1d0da26e29ff329b9582672a7b6 Mon Sep 17 00:00:00 2001 From: Ori Pomerantz Date: Fri, 16 Feb 2024 06:21:29 -0600 Subject: [PATCH 06/24] docs(world/balance): add solidity example (#2239) --- docs/pages/world/balance.mdx | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/pages/world/balance.mdx b/docs/pages/world/balance.mdx index bf692257ac..b7d5a49831 100644 --- a/docs/pages/world/balance.mdx +++ b/docs/pages/world/balance.mdx @@ -230,3 +230,11 @@ These steps assume you already transferred 1 ether to the root namespace. ``` + +If you need to transfer ETH in a `System` that has access to a namespace (for example, because it is in that namespace), you can use a function similar to this: + +```solidity +function _transfer(address to, uint amount) private { + IWorld(_world()).transferBalanceToAddress(WorldResourceIdLib.encodeNamespace(""), to, amount); +} +``` From 26dd8dcd0b8b851421d7c19104ab786ea52869e4 Mon Sep 17 00:00:00 2001 From: Ori Pomerantz Date: Fri, 16 Feb 2024 06:32:47 -0600 Subject: [PATCH 07/24] docs(guides/emojimon): update for next.16 (#2207) --- .../guides/emojimon/1-preface-the-ecs-model.mdx | 4 ++-- docs/pages/guides/emojimon/2-getting-started.mdx | 12 ++++++------ .../pages/guides/emojimon/3-players-and-movement.mdx | 2 +- docs/pages/guides/emojimon/4-map-and-terrain.mdx | 6 +++--- .../guides/emojimon/5-a-wild-emojimon-appears.mdx | 6 +++--- docs/pages/guides/emojimon/6-advanced.mdx | 2 +- 6 files changed, 16 insertions(+), 16 deletions(-) diff --git a/docs/pages/guides/emojimon/1-preface-the-ecs-model.mdx b/docs/pages/guides/emojimon/1-preface-the-ecs-model.mdx index 40120a4c8b..3196265f24 100644 --- a/docs/pages/guides/emojimon/1-preface-the-ecs-model.mdx +++ b/docs/pages/guides/emojimon/1-preface-the-ecs-model.mdx @@ -5,7 +5,7 @@ ECS is a software architectural pattern used commonly in video game development. It is a data-oriented approach to game development that creates a clean break between data and logic. It does this through the separation of Entities, Components, and Systems: - **Entities** are the basic units of a game, and they can have any number of components. - In a typical MUD implementation each entity is assigned a unique 32 byte identifier that is used as a key to the component tables (see next item). + In a typical MUD implementation each entity is assigned a unique 32-byte identifier that is used as a key to the component tables (see next item). - **Components** are small pieces of data that define an entity's behavior (such as position or health). In a typical MUD implementation components are implemented as tables. The table key is the entity identifier, and the value is the data that defines an aspect of the entity such as position. @@ -31,7 +31,7 @@ In a vacuum these components don't _do_ anything, they are just data (in this ex ### ECS in MUD -There is one last concept to understand before we begin—how to actually implement the ECS model using MUD and its mental models. +There is one last concept to understand before we begin—how to implement the ECS model using MUD and its mental models. In MUD there are tables instead of components (MUD is a general database protocol, not specific to onchain games). However, for the sake of this tutorial, these can be mostly thought of interchangeably. diff --git a/docs/pages/guides/emojimon/2-getting-started.mdx b/docs/pages/guides/emojimon/2-getting-started.mdx index 7af675b0b3..34934313a9 100644 --- a/docs/pages/guides/emojimon/2-getting-started.mdx +++ b/docs/pages/guides/emojimon/2-getting-started.mdx @@ -4,7 +4,7 @@ - git ([download](https://git-scm.com/downloads)) - foundry (forge, anvil, cast) ([download](https://book.getfoundry.sh/getting-started/installation), make sure to `foundryup` at least once) -- node.js (v17+) ([download](https://nodejs.org/en/download/)) +- node.js (v18) ([download](https://nodejs.org/en/download/)) - pnpm (`npm install pnpm --global` after installing node) ## Setup @@ -15,26 +15,26 @@ Most projects in MUD are started by running `pnpm create mud `, bu You can use the command below. ```bash copy - git clone https://github.com/latticexyz/emojimon.git -b mud-update-next-14 + git clone https://github.com/latticexyz/emojimon.git -b mud-update-next-16 ``` 1. Install the dependencies and start up the MUD services (anvil node, contracts deployer, and client). ```bash copy - cd emojimon && pnpm install && pnpm run dev + cd emojimon && pnpm install && pnpm dev ``` 1. At this point you can play the game to see the finished game. Open the game in your browser. - By default the game is at [http://localhost:3000](http://localhost:3000), but it could be on a different port if that port's taken. + By default the game is at [http://localhost:3000](http://localhost:3000). 1. Click the map to spawn at a specific location and move using the arrow keys. Note that on each block you can only move one space, and the block time on the anvil blockchain is one second. -1. Now that you've seen our end goal, reset the repository to [the starting snapshot](https://github.com/latticexyz/emojimon/tree/8520a8206929f6265609cc9166c985846fd0cd87). +1. Now that you've seen our end goal, reset the repository to [the starting snapshot](https://github.com/latticexyz/emojimon/tree/9dd3616244bc25518b06dfaa7beda51da07fb750). ```sh copy -git reset --hard 8520a8206929f6265609cc9166c985846fd0cd87 +git reset --hard 9dd3616244bc25518b06dfaa7beda51da07fb750 ``` After you do this, the game is just a green area where the map is going to be. diff --git a/docs/pages/guides/emojimon/3-players-and-movement.mdx b/docs/pages/guides/emojimon/3-players-and-movement.mdx index e12dfd36f7..d5eac88e95 100644 --- a/docs/pages/guides/emojimon/3-players-and-movement.mdx +++ b/docs/pages/guides/emojimon/3-players-and-movement.mdx @@ -405,7 +405,7 @@ export const GameBoard = () => { You can run this command to update all the files to this point in the game's development. ```sh copy -git reset --hard 025bae043c6b1f787bba13bec298dbda10d92c37 +git reset --hard 561f68112cb104ca106dcf3d79fcaa4ce72d9e66 ``` Now that we have players, movement, and a basic map, let's start making improvements to the map itself. diff --git a/docs/pages/guides/emojimon/4-map-and-terrain.mdx b/docs/pages/guides/emojimon/4-map-and-terrain.mdx index bd61d8316f..4e81e1584d 100644 --- a/docs/pages/guides/emojimon/4-map-and-terrain.mdx +++ b/docs/pages/guides/emojimon/4-map-and-terrain.mdx @@ -232,7 +232,7 @@ export const GameBoard = () => { You can run this command to update all the files to this point in the game's development. ```sh copy -git reset --hard d886c8375177bddc3a8353a3aba52f4fb71b550e +git reset --hard 6fc5590d7b660f911b757d1fb32456dee9a97d38 ``` ## Turn boulders into obstructions @@ -526,7 +526,7 @@ Now if you try moving onto a tile with a boulder you’ll see that you can’t! You can run this command to update all the files to this point in the game's development. ```sh copy -git reset --hard 54213103d54d9d7772b212b5aefbdf9a43656cb9 +git reset --hard 952cf5032af33945872a99a95eaa59379a5df536 ``` ## Wraparound movement @@ -596,5 +596,5 @@ contract MapSystem is System { You can run this command to update all the files to this point in the game's development. ```sh copy -git reset --hard 1bffe935acc047b6d3a0acb24af5bea86a750e2c +git reset --hard 11a3036da8e40ffd25d5f0098485c014d8e6c1c4 ``` diff --git a/docs/pages/guides/emojimon/5-a-wild-emojimon-appears.mdx b/docs/pages/guides/emojimon/5-a-wild-emojimon-appears.mdx index cab71a95cc..7392e1f57e 100644 --- a/docs/pages/guides/emojimon/5-a-wild-emojimon-appears.mdx +++ b/docs/pages/guides/emojimon/5-a-wild-emojimon-appears.mdx @@ -578,7 +578,7 @@ With this screen setup there are two more steps to go—enabling the player to c You can run this command to update all the files to this point in the game's development. ```sh copy -git reset --hard b8b063b330e77656485faf75bed1af5c344bdfbc +git reset --hard 384d8b1aa8e3887d76ddbedf9da4729f84bf523f ``` ## Capture emojimon @@ -814,7 +814,7 @@ When you click the button, the `EncounterScreen` creates a pending toast and kic You can run this command to update all the files to this point in the game's development. ```sh copy -git reset --hard 00bffa27dc5d369fe536e35b84e0a5d5cc466645 +git reset --hard 9bf5f8478847d90430a90a345a3868bb379a18aa ``` ## Flee encounters @@ -990,5 +990,5 @@ export function createSystemCalls( You can run this command to update all the files to this point in the game's development. ```sh copy -git reset --hard 6511b5e9aa38f02f417ed41a63c75a9217bca1b8 +git reset --hard fd388e7d57c9ef4afb17534e47385246973a8ce5 ``` diff --git a/docs/pages/guides/emojimon/6-advanced.mdx b/docs/pages/guides/emojimon/6-advanced.mdx index 9460a00a51..a4165a8dab 100644 --- a/docs/pages/guides/emojimon/6-advanced.mdx +++ b/docs/pages/guides/emojimon/6-advanced.mdx @@ -84,7 +84,7 @@ export const GameBoard = () => { You can run this command to update all the files to this point in the game's development. ```sh copy -git reset --hard f389208bb898ce81aa697be70a2de18107f93c53 +git reset --hard d2159d51d0dfa9e53d45487fa74aacf28e4f04c3 ``` All you have to do now is deploy to testnet! From d1753d08e2a36718c51e9a5bc9bf669940f44ef7 Mon Sep 17 00:00:00 2001 From: Ori Pomerantz Date: Fri, 16 Feb 2024 06:47:24 -0600 Subject: [PATCH 08/24] docs(modules/keyswithvalue): initial version (#2144) --- docs/pages/world/modules/_meta.js | 3 + docs/pages/world/modules/keyswithvalue.mdx | 170 +++++++++++++++++++++ 2 files changed, 173 insertions(+) create mode 100644 docs/pages/world/modules/_meta.js create mode 100644 docs/pages/world/modules/keyswithvalue.mdx diff --git a/docs/pages/world/modules/_meta.js b/docs/pages/world/modules/_meta.js new file mode 100644 index 0000000000..b29911016e --- /dev/null +++ b/docs/pages/world/modules/_meta.js @@ -0,0 +1,3 @@ +export default { + "keyswithvalue": "Keys with Value", +}; diff --git a/docs/pages/world/modules/keyswithvalue.mdx b/docs/pages/world/modules/keyswithvalue.mdx new file mode 100644 index 0000000000..4a9288dbe5 --- /dev/null +++ b/docs/pages/world/modules/keyswithvalue.mdx @@ -0,0 +1,170 @@ +import { CollapseCode } from "../../../components/CollapseCode"; + +# Keys with Value + +[The `KeysWithValue` module](https://github.com/latticexyz/mud/tree/main/packages/world-modules/src/modules/keyswithvalue) tracks a reverse mapping for a table that maps a value hash to a list of keys with this value. +This is useful if you need the ability to lookup keys based on the data onchain. +Note that it costs additional gas for every write to the table affected, so if you just need this functionality offchain it is best to look at the data offchain instead. + +## Deployment + +It can be deployed multiple times, each time for a different table. +For example, here is the forge script to deploy it for the `Tasks` table in [the React template](/templates/typescript/react). + + + +```solidity filename="DeployKeyWithValueModule.s.sol" copy showLineNumbers {9-12,25-29} +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.21; + +import { Script } from "forge-std/Script.sol"; +import { console } from "forge-std/console.sol"; +import { StoreSwitch } from "@latticexyz/store/src/StoreSwitch.sol"; + +import { IWorld } from "../src/codegen/world/IWorld.sol"; +import { WorldResourceIdLib, WorldResourceIdInstance } from "@latticexyz/world/src/WorldResourceId.sol"; +import { RESOURCE_TABLE } from "@latticexyz/world/src/worldResourceTypes.sol"; +import { ResourceId } from "@latticexyz/store/src/ResourceId.sol"; +import { KeysWithValueModule } from "@latticexyz/world-modules/src/modules/keyswithvalue/KeysWithValueModule.sol"; + +contract DeployKeyWithValueModule is Script { + function run() external { + uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); + address worldAddress = vm.envAddress("WORLD_ADDRESS"); + + vm.startBroadcast(deployerPrivateKey); + IWorld world = IWorld(worldAddress); + StoreSwitch.setStoreAddress(worldAddress); + + // Deploy the module + KeysWithValueModule keysWithValueModule = new KeysWithValueModule(); + ResourceId sourceTableId = WorldResourceIdLib.encode({ typeId: RESOURCE_TABLE, namespace: "", name: "Tasks" }); + world.installRootModule(keysWithValueModule, abi.encode(sourceTableId)); + + vm.stopBroadcast(); + } +} +``` + + + +
+ +Explanation + +```solidity + KeysWithValueModule keysWithValueModule = new KeysWithValueModule(); +``` + +Deploy the module. +Modules are stateless, so if there is already a copy of the contract on the blockchain you can just use that. + +```solidity + ResourceId sourceTableId = + WorldResourceIdLib.encode({ typeId: RESOURCE_TABLE, namespace: "", name: "Tasks" }); +``` + +Get the resourceID for the table that needs a reverse index. + +```solidity + world.installRootModule(keysWithValueModule, abi.encode(sourceTableId)); +``` + +Actually install the module in the `World`. +At present it is a root module to ensure it can specify a hook on the relevant table. +In the future we might add a feature to allow it to be in a namespace. + +
+ +## Usage + +Installing the module creates a table called `keywval:`. +When entries are added or modified in the source table, a hash of their values gets written to this table as a key, with the relevant key as the value. +This only applies from the time the module is installed, entries created prior to that don't get the reverse mapping. + +To get the keys you use [`getKeysWithValue`](https://github.com/latticexyz/mud/blob/main/packages/world-modules/src/modules/keyswithvalue/getKeysWithValue.sol#L18-L35) with these parameters: + +- The identifier of the source table +- The encoded static fields (the result of `
.encodeStatic`) +- The encoded lengths of the dynamic fields (the result of `
.encodeLengths`) +- The encoded dynamic fields themselves (the result of `
.encodeDynamic`) + +For example, here is the forge script to add a task to `Tasks` in [the React template](/templates/typescript/react) and then find the key from the data. + + + +```solidity filename="UseKeysWithValues.s.sol" copy showLineNumbers {10,24-33} +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.21; + +import { Script } from "forge-std/Script.sol"; +import { console } from "forge-std/console.sol"; +import { StoreSwitch } from "@latticexyz/store/src/StoreSwitch.sol"; + +import { IWorld } from "../src/codegen/world/IWorld.sol"; +import { getKeysWithValue } from "@latticexyz/world-modules/src/modules/keyswithvalue/getKeysWithValue.sol"; +import { Tasks, TasksTableId } from "../src/codegen/index.sol"; + +contract UseKeysWithValues is Script { + function run() external { + uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); + address worldAddress = vm.envAddress("WORLD_ADDRESS"); + + StoreSwitch.setStoreAddress(worldAddress); + + uint createdAt = block.timestamp; + uint completedAt = 0; + string memory description = "Test"; + + vm.startBroadcast(deployerPrivateKey); + IWorld(worldAddress).addTask(description); + vm.stopBroadcast(); + + bytes32[] memory keys = getKeysWithValue( + TasksTableId, + Tasks.encodeStatic(createdAt, completedAt), + Tasks.encodeLengths(description), + Tasks.encodeDynamic(description) + ); + + console.log("Number of keys:", keys.length); + for (uint i = 0; i < keys.length; i++) { + console.log("Key #", i, "is", uint256(keys[i])); + } + } +} +``` + + + +
+ +Explanation + +```solidity +import { Tasks, TasksTableId } from "../src/codegen/index.sol"; +``` + +It is easiest to use `getKeysWithValue` when you have the definition of the source table. + +```solidity + vm.startBroadcast(deployerPrivateKey); + IWorld(worldAddress).addTask(description); + vm.stopBroadcast(); +``` + +Create an entry with this description. +The two static fields, `createdAt` and `completedAt`, are filled by [`TasksSystem.addTask`](https://github.com/latticexyz/mud/blob/main/templates/react/packages/contracts/src/systems/TasksSystem.sol#L8-L11). + +```solidity + bytes32[] memory keys = getKeysWithValue( + TasksTableId, + Tasks.encodeStatic(createdAt,completedAt), + Tasks.encodeLengths(description), + Tasks.encodeDynamic(description) + ); +``` + +Actually get the key(s), using the encoded static fields, encoded lengths, and encoded dynamic fields. + +
From 6c615b608e73d3bdabde3ad03823f1dce87f2ac6 Mon Sep 17 00:00:00 2001 From: yonada Date: Tue, 20 Feb 2024 15:44:23 +0000 Subject: [PATCH 09/24] fix(store-sync): fix overflowing column types, bump postgres sync version (#2270) Co-authored-by: Kevin Ingersoll --- .changeset/fifty-guests-rescue.md | 5 +++++ .../src/postgres-decoded/buildColumn.ts | 20 +++++++++---------- .../src/postgres-decoded/buildTable.test.ts | 4 ++-- .../createStorageAdapter.test.ts | 2 +- .../src/postgres/createStorageAdapter.test.ts | 2 +- packages/store-sync/src/postgres/version.ts | 2 +- 6 files changed, 20 insertions(+), 15 deletions(-) create mode 100644 .changeset/fifty-guests-rescue.md diff --git a/.changeset/fifty-guests-rescue.md b/.changeset/fifty-guests-rescue.md new file mode 100644 index 0000000000..8e2c718762 --- /dev/null +++ b/.changeset/fifty-guests-rescue.md @@ -0,0 +1,5 @@ +--- +"@latticexyz/store-sync": patch +--- + +Bumped the Postgres column size for `int32`, `uint32`, `int64`, and `uint64` types to avoid overflows diff --git a/packages/store-sync/src/postgres-decoded/buildColumn.ts b/packages/store-sync/src/postgres-decoded/buildColumn.ts index 4bdc14db1f..f72c27443e 100644 --- a/packages/store-sync/src/postgres-decoded/buildColumn.ts +++ b/packages/store-sync/src/postgres-decoded/buildColumn.ts @@ -11,29 +11,28 @@ export function buildColumn(name: string, schemaAbiType: SchemaAbiType) { case "uint8": case "uint16": + case "uint24": case "int8": case "int16": - case "uint24": - case "uint32": case "int24": - case "int32": // integer = 4 bytes (https://www.postgresql.org/docs/current/datatype-numeric.html#DATATYPE-INT) return asNumber(name, "integer"); + case "uint32": case "uint40": case "uint48": + case "int32": case "int40": case "int48": // bigint = 8 bytes (https://www.postgresql.org/docs/current/datatype-numeric.html#DATATYPE-INT) return asNumber(name, "bigint"); case "uint56": - case "uint64": case "int56": - case "int64": // bigint = 8 bytes (https://www.postgresql.org/docs/current/datatype-numeric.html#DATATYPE-INT) return asBigInt(name, "bigint"); + case "uint64": case "uint72": case "uint80": case "uint88": @@ -58,6 +57,7 @@ export function buildColumn(name: string, schemaAbiType: SchemaAbiType) { case "uint240": case "uint248": case "uint256": + case "int64": case "int72": case "int80": case "int88": @@ -126,29 +126,28 @@ export function buildColumn(name: string, schemaAbiType: SchemaAbiType) { case "uint8[]": case "uint16[]": + case "uint24[]": case "int8[]": case "int16[]": - case "uint24[]": - case "uint32[]": case "int24[]": - case "int32[]": // integer = 4 bytes (https://www.postgresql.org/docs/current/datatype-numeric.html#DATATYPE-INT) return asNumberArray(name, "integer[]"); + case "uint32[]": case "uint40[]": case "uint48[]": + case "int32[]": case "int40[]": case "int48[]": // bigint = 8 bytes (https://www.postgresql.org/docs/current/datatype-numeric.html#DATATYPE-INT) return asNumberArray(name, "bigint[]"); case "uint56[]": - case "uint64[]": case "int56[]": - case "int64[]": // bigint = 8 bytes (https://www.postgresql.org/docs/current/datatype-numeric.html#DATATYPE-INT) return asBigIntArray(name, "bigint[]"); + case "uint64[]": case "uint72[]": case "uint80[]": case "uint88[]": @@ -173,6 +172,7 @@ export function buildColumn(name: string, schemaAbiType: SchemaAbiType) { case "uint240[]": case "uint248[]": case "uint256[]": + case "int64[]": case "int72[]": case "int80[]": case "int88[]": diff --git a/packages/store-sync/src/postgres-decoded/buildTable.test.ts b/packages/store-sync/src/postgres-decoded/buildTable.test.ts index 9f2e75a057..f20f846392 100644 --- a/packages/store-sync/src/postgres-decoded/buildTable.test.ts +++ b/packages/store-sync/src/postgres-decoded/buildTable.test.ts @@ -53,13 +53,13 @@ describe("buildTable", () => { "dataType": "custom", "name": "x", "notNull": true, - "sqlName": "integer", + "sqlName": "bigint", }, "y": { "dataType": "custom", "name": "y", "notNull": true, - "sqlName": "integer", + "sqlName": "bigint", }, } `); diff --git a/packages/store-sync/src/postgres-decoded/createStorageAdapter.test.ts b/packages/store-sync/src/postgres-decoded/createStorageAdapter.test.ts index 64f71e01c2..9a37fe7036 100644 --- a/packages/store-sync/src/postgres-decoded/createStorageAdapter.test.ts +++ b/packages/store-sync/src/postgres-decoded/createStorageAdapter.test.ts @@ -52,7 +52,7 @@ describe("createStorageAdapter", async () => { { "blockNumber": 20n, "chainId": 31337, - "version": "0.0.4", + "version": "0.0.5", }, ] `); diff --git a/packages/store-sync/src/postgres/createStorageAdapter.test.ts b/packages/store-sync/src/postgres/createStorageAdapter.test.ts index 9afc5b7a76..0e3249f005 100644 --- a/packages/store-sync/src/postgres/createStorageAdapter.test.ts +++ b/packages/store-sync/src/postgres/createStorageAdapter.test.ts @@ -50,7 +50,7 @@ describe("createStorageAdapter", async () => { { "blockNumber": 20n, "chainId": 31337, - "version": "0.0.4", + "version": "0.0.5", }, ] `); diff --git a/packages/store-sync/src/postgres/version.ts b/packages/store-sync/src/postgres/version.ts index 47a7432322..631eadd03d 100644 --- a/packages/store-sync/src/postgres/version.ts +++ b/packages/store-sync/src/postgres/version.ts @@ -1 +1 @@ -export const version = "0.0.4"; +export const version = "0.0.5"; From 669fa43e5adcd2b3e44a298544c62ef9e0df642a Mon Sep 17 00:00:00 2001 From: Kevin Ingersoll Date: Tue, 20 Feb 2024 15:48:13 +0000 Subject: [PATCH 10/24] docs: add missing changeset (#2282) --- .changeset/long-dots-think.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/long-dots-think.md diff --git a/.changeset/long-dots-think.md b/.changeset/long-dots-think.md new file mode 100644 index 0000000000..01466a1e42 --- /dev/null +++ b/.changeset/long-dots-think.md @@ -0,0 +1,5 @@ +--- +"@latticexyz/store-sync": patch +--- + +Moved numerical array types to use array column types (instead of JSON columns) for the Postgres decoded indexer From 4e445a1abb764de970381f5c5570ce135b712c4c Mon Sep 17 00:00:00 2001 From: yonada Date: Tue, 20 Feb 2024 16:59:09 +0000 Subject: [PATCH 11/24] feat(store-sync): bool array column types for decoded indexer (#2283) Co-authored-by: Kevin Ingersoll --- .changeset/lemon-numbers-design.md | 5 +++++ .../src/postgres-decoded/buildColumn.ts | 15 +++++++++++++-- .../postgres-decoded/createStorageAdapter.test.ts | 2 +- packages/store-sync/src/postgres/columnTypes.ts | 14 ++++++++++++++ .../src/postgres/createStorageAdapter.test.ts | 2 +- packages/store-sync/src/postgres/version.ts | 2 +- 6 files changed, 35 insertions(+), 5 deletions(-) create mode 100644 .changeset/lemon-numbers-design.md diff --git a/.changeset/lemon-numbers-design.md b/.changeset/lemon-numbers-design.md new file mode 100644 index 0000000000..4834070a8f --- /dev/null +++ b/.changeset/lemon-numbers-design.md @@ -0,0 +1,5 @@ +--- +"@latticexyz/store-sync": patch +--- + +Moved boolean array types to use array column types (instead of JSON columns) for the Postgres decoded indexer diff --git a/packages/store-sync/src/postgres-decoded/buildColumn.ts b/packages/store-sync/src/postgres-decoded/buildColumn.ts index f72c27443e..33a8925f55 100644 --- a/packages/store-sync/src/postgres-decoded/buildColumn.ts +++ b/packages/store-sync/src/postgres-decoded/buildColumn.ts @@ -1,7 +1,16 @@ import { boolean, text } from "drizzle-orm/pg-core"; import { SchemaAbiType } from "@latticexyz/schema-type"; import { assertExhaustive } from "@latticexyz/common/utils"; -import { asAddress, asBigInt, asBigIntArray, asHex, asJson, asNumber, asNumberArray } from "../postgres/columnTypes"; +import { + asAddress, + asBigInt, + asBigIntArray, + asBoolArray, + asHex, + asJson, + asNumber, + asNumberArray, +} from "../postgres/columnTypes"; // eslint-disable-next-line @typescript-eslint/explicit-function-return-type export function buildColumn(name: string, schemaAbiType: SchemaAbiType) { @@ -124,6 +133,9 @@ export function buildColumn(name: string, schemaAbiType: SchemaAbiType) { case "address": return asAddress(name); + case "bool[]": + return asBoolArray(name); + case "uint8[]": case "uint16[]": case "uint24[]": @@ -233,7 +245,6 @@ export function buildColumn(name: string, schemaAbiType: SchemaAbiType) { case "bytes30[]": case "bytes31[]": case "bytes32[]": - case "bool[]": return asJson(name); // TODO: normalize like address column type diff --git a/packages/store-sync/src/postgres-decoded/createStorageAdapter.test.ts b/packages/store-sync/src/postgres-decoded/createStorageAdapter.test.ts index 9a37fe7036..184413b0ae 100644 --- a/packages/store-sync/src/postgres-decoded/createStorageAdapter.test.ts +++ b/packages/store-sync/src/postgres-decoded/createStorageAdapter.test.ts @@ -52,7 +52,7 @@ describe("createStorageAdapter", async () => { { "blockNumber": 20n, "chainId": 31337, - "version": "0.0.5", + "version": "0.0.6", }, ] `); diff --git a/packages/store-sync/src/postgres/columnTypes.ts b/packages/store-sync/src/postgres/columnTypes.ts index 6414172709..9d130da3aa 100644 --- a/packages/store-sync/src/postgres/columnTypes.ts +++ b/packages/store-sync/src/postgres/columnTypes.ts @@ -73,6 +73,20 @@ export const asAddress = (name: string) => }, })(name); +// eslint-disable-next-line @typescript-eslint/explicit-function-return-type +export const asBoolArray = (name: string) => + customType<{ data: boolean[]; driverData: string[] }>({ + dataType() { + return "bool[]"; + }, + toDriver(data: boolean[]): string[] { + return data.map((datum) => String(datum)); + }, + fromDriver(driverData: string[]): boolean[] { + return driverData.map((datum) => Boolean(datum)); + }, + })(name); + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type export const asNumberArray = (name: string, columnType: string) => customType<{ data: number[]; driverData: string[] }>({ diff --git a/packages/store-sync/src/postgres/createStorageAdapter.test.ts b/packages/store-sync/src/postgres/createStorageAdapter.test.ts index 0e3249f005..ae98d5163b 100644 --- a/packages/store-sync/src/postgres/createStorageAdapter.test.ts +++ b/packages/store-sync/src/postgres/createStorageAdapter.test.ts @@ -50,7 +50,7 @@ describe("createStorageAdapter", async () => { { "blockNumber": 20n, "chainId": 31337, - "version": "0.0.5", + "version": "0.0.6", }, ] `); diff --git a/packages/store-sync/src/postgres/version.ts b/packages/store-sync/src/postgres/version.ts index 631eadd03d..a7f2787858 100644 --- a/packages/store-sync/src/postgres/version.ts +++ b/packages/store-sync/src/postgres/version.ts @@ -1 +1 @@ -export const version = "0.0.5"; +export const version = "0.0.6"; From 16121e8673adc72389a130cef64d73516c31d38c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 20 Feb 2024 09:01:09 -0800 Subject: [PATCH 12/24] Version Packages (next) (#2192) Co-authored-by: github-actions[bot] --- .changeset/pre.json | 20 +++++ CHANGELOG.md | 94 ++++++++++++++++++++++++ docs/pages/changelog.mdx | 94 ++++++++++++++++++++++++ packages/abi-ts/CHANGELOG.md | 2 + packages/abi-ts/package.json | 2 +- packages/block-logs-stream/CHANGELOG.md | 9 +++ packages/block-logs-stream/package.json | 2 +- packages/cli/CHANGELOG.md | 40 ++++++++++ packages/cli/package.json | 2 +- packages/common/CHANGELOG.md | 13 ++++ packages/common/package.json | 2 +- packages/config/CHANGELOG.md | 10 +++ packages/config/package.json | 2 +- packages/create-mud/CHANGELOG.md | 10 +++ packages/create-mud/package.json | 2 +- packages/dev-tools/CHANGELOG.md | 30 ++++++++ packages/dev-tools/package.json | 14 ++-- packages/ecs-browser/CHANGELOG.md | 2 + packages/ecs-browser/package.json | 2 +- packages/faucet/CHANGELOG.md | 9 +++ packages/faucet/package.json | 2 +- packages/gas-report/CHANGELOG.md | 6 ++ packages/gas-report/package.json | 2 +- packages/network/CHANGELOG.md | 2 + packages/network/package.json | 2 +- packages/noise/CHANGELOG.md | 6 ++ packages/noise/package.json | 2 +- packages/phaserx/CHANGELOG.md | 6 ++ packages/phaserx/package.json | 2 +- packages/protocol-parser/CHANGELOG.md | 10 +++ packages/protocol-parser/package.json | 2 +- packages/react/CHANGELOG.md | 13 ++++ packages/react/package.json | 2 +- packages/recs/CHANGELOG.md | 8 ++ packages/recs/package.json | 2 +- packages/schema-type/CHANGELOG.md | 6 ++ packages/schema-type/package.json | 2 +- packages/services/CHANGELOG.md | 2 + packages/services/package.json | 2 +- packages/solecs/CHANGELOG.md | 2 + packages/solecs/package.json | 2 +- packages/solhint-config-mud/CHANGELOG.md | 2 + packages/solhint-config-mud/package.json | 2 +- packages/solhint-plugin-mud/CHANGELOG.md | 2 + packages/solhint-plugin-mud/package.json | 2 +- packages/std-client/CHANGELOG.md | 2 + packages/std-client/package.json | 2 +- packages/std-contracts/CHANGELOG.md | 2 + packages/std-contracts/package.json | 2 +- packages/store-cache/CHANGELOG.md | 2 + packages/store-cache/package.json | 2 +- packages/store-indexer/CHANGELOG.md | 21 ++++++ packages/store-indexer/package.json | 2 +- packages/store-sync/CHANGELOG.md | 32 ++++++++ packages/store-sync/package.json | 2 +- packages/store/CHANGELOG.md | 20 +++++ packages/store/package.json | 2 +- packages/utils/CHANGELOG.md | 2 + packages/utils/package.json | 2 +- packages/world-modules/CHANGELOG.md | 33 +++++++++ packages/world-modules/package.json | 2 +- packages/world/CHANGELOG.md | 33 +++++++++ packages/world/package.json | 2 +- 63 files changed, 581 insertions(+), 36 deletions(-) diff --git a/.changeset/pre.json b/.changeset/pre.json index c14853d86c..6b1ef44bcb 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -44,11 +44,13 @@ "beige-rockets-return", "big-goats-prove", "blue-forks-move", + "blue-roses-listen", "blue-seals-relate", "brave-islands-wash", "brave-needles-love", "brave-rings-tickle", "breezy-cameras-switch", + "breezy-days-greet", "breezy-garlics-decide", "breezy-seahorses-prove", "bright-flies-hug", @@ -60,6 +62,7 @@ "chilled-chicken-repair", "chilled-cougars-smash", "chilled-kangaroos-dream", + "chilly-fishes-speak", "chilly-kangaroos-clap", "clean-bananas-hug", "clever-icons-cough", @@ -69,6 +72,7 @@ "cool-snakes-reply", "curly-countries-obey", "curly-numbers-talk", + "curvy-dingos-draw", "curvy-tables-melt", "cyan-baboons-breathe", "cyan-hats-try", @@ -95,10 +99,12 @@ "few-jars-turn", "few-mirrors-reflect", "few-papayas-leave", + "fifty-guests-rescue", "fifty-squids-eat", "fifty-suits-itch", "fifty-suits-shout", "five-emus-battle", + "five-vans-try", "flat-trainers-marry", "fluffy-days-carry", "fluffy-moles-march", @@ -120,6 +126,7 @@ "grumpy-icons-sleep", "happy-ants-lay", "happy-pants-try", + "happy-snails-sleep", "heavy-eyes-smile", "heavy-rings-punch", "hip-files-sin", @@ -146,11 +153,14 @@ "late-spies-cover", "lazy-foxes-applaud", "lazy-ladybugs-return", + "lemon-numbers-design", "lemon-zoos-mate", "light-bananas-deny", + "light-carrots-applaud", "little-cherries-rule", "little-cobras-yell", "little-ravens-yawn", + "long-dots-think", "long-lizards-admire", "long-tips-marry", "loud-mayflies-divide", @@ -168,6 +178,7 @@ "metal-pots-notice", "metal-wombats-judge", "mighty-eels-type", + "mighty-points-study", "mighty-years-whisper", "modern-bikes-build", "modern-brooms-rule", @@ -177,6 +188,7 @@ "modern-trains-remain", "nasty-crabs-explode", "nasty-owls-sneeze", + "nasty-rice-pull", "nasty-trains-drop", "nasty-waves-divide", "neat-tools-check", @@ -188,6 +200,7 @@ "nice-glasses-begin", "nice-moose-love", "nice-pandas-knock", + "nine-plants-carry", "ninety-lions-double", "odd-bags-compete", "olive-bugs-add", @@ -216,6 +229,7 @@ "quiet-dancers-prove", "quiet-guests-approve", "quiet-squids-share", + "rare-dragons-walk", "rare-lizards-sleep", "rare-planes-draw", "rare-trainers-fry", @@ -233,11 +247,13 @@ "rotten-cats-lay", "rude-cycles-travel", "selfish-cycles-retire", + "selfish-pears-marry", "serious-ads-trade", "serious-plants-itch", "seven-carpets-develop", "seven-flies-chew", "seven-mangos-roll", + "seven-pears-walk", "seven-points-mate", "seven-rice-dance", "shaggy-pianos-fetch", @@ -251,6 +267,7 @@ "silent-carrots-glow", "silent-rice-argue", "silly-snakes-fold", + "silver-adults-sip", "silver-dolls-shave", "silver-ligers-grin", "silver-mangos-thank", @@ -300,6 +317,7 @@ "thin-rice-trade", "thin-terms-lay", "thirty-cups-provide", + "thirty-shoes-run", "three-lizards-shave", "three-llamas-sin", "three-scissors-smile", @@ -318,11 +336,13 @@ "tricky-oranges-pump", "twelve-boats-kick", "twelve-monkeys-juggle", + "twelve-terms-lay", "twenty-birds-scream", "two-feet-jam", "unlucky-cups-fetch", "unlucky-guests-cover", "violet-insects-press", + "warm-colts-sleep", "weak-mails-cross", "weak-otters-turn", "wet-crabs-punch", diff --git a/CHANGELOG.md b/CHANGELOG.md index b6bde46943..9e3efbf55d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,97 @@ +## Version 2.0.0-next.17 + +Release date: Tue Feb 20 2024 + +### Major changes + +**[chore: upgrade to Solidity 0.8.24 (#2202)](https://github.com/latticexyz/mud/commit/aabd30767cdda7ce0c32663e7cc483db1b66d967)** (@latticexyz/world-modules, @latticexyz/schema-type, @latticexyz/gas-report, @latticexyz/common, @latticexyz/noise, @latticexyz/store, @latticexyz/world, @latticexyz/cli, create-mud) + +Bumped Solidity version to 0.8.24. + +**[feat(world): rename CoreModule to InitModule (#2227)](https://github.com/latticexyz/mud/commit/db7798be2181c1b9e55380a195a04100aab627fd)** (@latticexyz/world) + +Renamed `CoreModule` to `InitModule` and `CoreRegistrationSystem` to `RegistrationSystem`. + +**[feat(cli,world): add user defined salt in WorldFactory.deployWorld() (#2219)](https://github.com/latticexyz/mud/commit/618dd0e89232896326c30ce55f183fceb0edabdb)** (@latticexyz/cli, @latticexyz/world) + +`WorldFactory` now expects a user-provided `salt` when calling `deployWorld(...)` (instead of the previous globally incrementing counter). This enables deterministic world addresses across different chains. + +When using `mud deploy`, you can provide a `bytes32` hex-encoded salt using the `--salt` option, otherwise it defaults to a random hex value. + +**[feat(store): rename StoreCore.registerCoreTables to registerInternalTables (#2225)](https://github.com/latticexyz/mud/commit/5c52bee094fe5dad445a2d600cbea83e29302c40)** (@latticexyz/store, @latticexyz/world) + +Renamed `StoreCore`'s `registerCoreTables` method to `registerInternalTables`. + +### Minor changes + +**[fix(world-modules): `SystemSwitch` properly calls systems from root (#2205)](https://github.com/latticexyz/mud/commit/c4fc850416df72f055be9fb1eb36a0edfaa1febc)** (@latticexyz/world-modules) + +Fixed `SystemSwitch` to properly call non-root systems from root systems. + +**[feat(store-sync): wait for idle after each chunk of logs in a block (#2254)](https://github.com/latticexyz/mud/commit/997286bacafa43bd997c3c752b445acc23726bde)** (@latticexyz/store-sync) + +`createStoreSync` now [waits for idle](https://developer.mozilla.org/en-US/docs/Web/API/Window/requestIdleCallback) between each chunk of logs in a block to allow for downstream render cycles to trigger. This means that hydrating logs from an indexer will no longer block until hydration completes, but rather allow for `onProgress` callbacks to trigger. + +**[feat(world): deployment salt by msg.sender (#2210)](https://github.com/latticexyz/mud/commit/6470fe1fd1fc73104cfdd01d79793203bffe5d1c)** (@latticexyz/world) + +`WorldFactory` now derives a salt based on number of worlds deployed by `msg.sender`, which should help with predictable world deployments across chains. + +### Patch changes + +**[feat(cli): hardcode table ID with codegen (#2229)](https://github.com/latticexyz/mud/commit/a35c05ea95395e9c7da3e18030fc200c2cde1353)** (@latticexyz/cli, @latticexyz/common, @latticexyz/store, @latticexyz/world-modules, @latticexyz/world, create-mud) + +Table libraries now hardcode the `bytes32` table ID value rather than computing it in Solidity. This saves a bit of gas across all storage operations. + +**[fix(store): reorder core table registration (#2164)](https://github.com/latticexyz/mud/commit/05b3e8882ef846e26dbf18946f64533f70d3bf41)** (@latticexyz/store) + +Fixed a race condition when registering core tables, where we would set a record in the `ResourceIds` table before the table was registered. + +**[fix(world): check table exists for register store and system hook [L-09] (#2195)](https://github.com/latticexyz/mud/commit/745485cda0d3a46e3d63d05c0149b2448e578010)** (@latticexyz/world) + +Updated `WorldRegistrationSystem` to check that systems exist before registering system hooks. + +**[fix(store-sync): fix overflowing column types, bump postgres sync version (#2270)](https://github.com/latticexyz/mud/commit/6c615b608e73d3bdabde3ad03823f1dce87f2ac6)** (@latticexyz/store-sync) + +Bumped the Postgres column size for `int32`, `uint32`, `int64`, and `uint64` types to avoid overflows + +**[feat(store-sync): bool array column types for decoded indexer (#2283)](https://github.com/latticexyz/mud/commit/4e445a1abb764de970381f5c5570ce135b712c4c)** (@latticexyz/store-sync) + +Moved boolean array types to use array column types (instead of JSON columns) for the Postgres decoded indexer + +**[docs: add missing changeset (#2282)](https://github.com/latticexyz/mud/commit/669fa43e5adcd2b3e44a298544c62ef9e0df642a)** (@latticexyz/store-sync) + +Moved numerical array types to use array column types (instead of JSON columns) for the Postgres decoded indexer + +**[docs: changeset for #2187 (#2188)](https://github.com/latticexyz/mud/commit/78a837167e527511d1a03fe67f60eb1d2e80aaa2)** (@latticexyz/cli) + +Fixed registration of world signatures/selectors for namespaced systems. We changed these signatures in [#2160](https://github.com/latticexyz/mud/pull/2160), but missed updating part of the deploy step. + +**[fix(common): include only errors defined in the contract (#2194)](https://github.com/latticexyz/mud/commit/c162ad5a546a92009aafc6150d9449738234b1ef)** (@latticexyz/common) + +Prevented errors not included in the contract (but present in the file) from being included in the interface by `contractToInterface` + +**[refactor(store): push to StoreHooks with StoreCore method (#2201)](https://github.com/latticexyz/mud/commit/55a05fd7af2abe68d2a041f55bafdd03f5d68788)** (@latticexyz/store) + +Refactored `StoreCore.registerStoreHook` to use `StoreHooks._push` for gas efficiency. + +**[refactor(world,world-modules): rename module args to encodedArgs (#2199)](https://github.com/latticexyz/mud/commit/e2d089c6d3970094e0310e84b096db0487967cc9)** (@latticexyz/world-modules, @latticexyz/world) + +Renamed the Module `args` parameter to `encodedArgs` to better reflect that it is ABI-encoded arguments. + +**[feat(world): rename CoreModule to InitModule (#2227)](https://github.com/latticexyz/mud/commit/db7798be2181c1b9e55380a195a04100aab627fd)** (@latticexyz/cli) + +Updated deployer with world's new `InitModule` naming. + +**[fix(world): prevent namespace from ending with underscore [M-05] (#2182)](https://github.com/latticexyz/mud/commit/17f98720928444ce8f82639b6d1f1eb01012a1c8)** (@latticexyz/world) + +Added a check to prevent namespaces from ending with an underscore (which could cause problems with world function signatures). + +**[fix(world): check table exists for register store and system hook [L-09] (#2195)](https://github.com/latticexyz/mud/commit/745485cda0d3a46e3d63d05c0149b2448e578010)** (@latticexyz/store) + +Updated `StoreCore` to check that tables exist before registering store hooks. + +--- + ## Version 2.0.0-next.16 Release date: Tue Jan 23 2024 diff --git a/docs/pages/changelog.mdx b/docs/pages/changelog.mdx index b6bde46943..9e3efbf55d 100644 --- a/docs/pages/changelog.mdx +++ b/docs/pages/changelog.mdx @@ -1,3 +1,97 @@ +## Version 2.0.0-next.17 + +Release date: Tue Feb 20 2024 + +### Major changes + +**[chore: upgrade to Solidity 0.8.24 (#2202)](https://github.com/latticexyz/mud/commit/aabd30767cdda7ce0c32663e7cc483db1b66d967)** (@latticexyz/world-modules, @latticexyz/schema-type, @latticexyz/gas-report, @latticexyz/common, @latticexyz/noise, @latticexyz/store, @latticexyz/world, @latticexyz/cli, create-mud) + +Bumped Solidity version to 0.8.24. + +**[feat(world): rename CoreModule to InitModule (#2227)](https://github.com/latticexyz/mud/commit/db7798be2181c1b9e55380a195a04100aab627fd)** (@latticexyz/world) + +Renamed `CoreModule` to `InitModule` and `CoreRegistrationSystem` to `RegistrationSystem`. + +**[feat(cli,world): add user defined salt in WorldFactory.deployWorld() (#2219)](https://github.com/latticexyz/mud/commit/618dd0e89232896326c30ce55f183fceb0edabdb)** (@latticexyz/cli, @latticexyz/world) + +`WorldFactory` now expects a user-provided `salt` when calling `deployWorld(...)` (instead of the previous globally incrementing counter). This enables deterministic world addresses across different chains. + +When using `mud deploy`, you can provide a `bytes32` hex-encoded salt using the `--salt` option, otherwise it defaults to a random hex value. + +**[feat(store): rename StoreCore.registerCoreTables to registerInternalTables (#2225)](https://github.com/latticexyz/mud/commit/5c52bee094fe5dad445a2d600cbea83e29302c40)** (@latticexyz/store, @latticexyz/world) + +Renamed `StoreCore`'s `registerCoreTables` method to `registerInternalTables`. + +### Minor changes + +**[fix(world-modules): `SystemSwitch` properly calls systems from root (#2205)](https://github.com/latticexyz/mud/commit/c4fc850416df72f055be9fb1eb36a0edfaa1febc)** (@latticexyz/world-modules) + +Fixed `SystemSwitch` to properly call non-root systems from root systems. + +**[feat(store-sync): wait for idle after each chunk of logs in a block (#2254)](https://github.com/latticexyz/mud/commit/997286bacafa43bd997c3c752b445acc23726bde)** (@latticexyz/store-sync) + +`createStoreSync` now [waits for idle](https://developer.mozilla.org/en-US/docs/Web/API/Window/requestIdleCallback) between each chunk of logs in a block to allow for downstream render cycles to trigger. This means that hydrating logs from an indexer will no longer block until hydration completes, but rather allow for `onProgress` callbacks to trigger. + +**[feat(world): deployment salt by msg.sender (#2210)](https://github.com/latticexyz/mud/commit/6470fe1fd1fc73104cfdd01d79793203bffe5d1c)** (@latticexyz/world) + +`WorldFactory` now derives a salt based on number of worlds deployed by `msg.sender`, which should help with predictable world deployments across chains. + +### Patch changes + +**[feat(cli): hardcode table ID with codegen (#2229)](https://github.com/latticexyz/mud/commit/a35c05ea95395e9c7da3e18030fc200c2cde1353)** (@latticexyz/cli, @latticexyz/common, @latticexyz/store, @latticexyz/world-modules, @latticexyz/world, create-mud) + +Table libraries now hardcode the `bytes32` table ID value rather than computing it in Solidity. This saves a bit of gas across all storage operations. + +**[fix(store): reorder core table registration (#2164)](https://github.com/latticexyz/mud/commit/05b3e8882ef846e26dbf18946f64533f70d3bf41)** (@latticexyz/store) + +Fixed a race condition when registering core tables, where we would set a record in the `ResourceIds` table before the table was registered. + +**[fix(world): check table exists for register store and system hook [L-09] (#2195)](https://github.com/latticexyz/mud/commit/745485cda0d3a46e3d63d05c0149b2448e578010)** (@latticexyz/world) + +Updated `WorldRegistrationSystem` to check that systems exist before registering system hooks. + +**[fix(store-sync): fix overflowing column types, bump postgres sync version (#2270)](https://github.com/latticexyz/mud/commit/6c615b608e73d3bdabde3ad03823f1dce87f2ac6)** (@latticexyz/store-sync) + +Bumped the Postgres column size for `int32`, `uint32`, `int64`, and `uint64` types to avoid overflows + +**[feat(store-sync): bool array column types for decoded indexer (#2283)](https://github.com/latticexyz/mud/commit/4e445a1abb764de970381f5c5570ce135b712c4c)** (@latticexyz/store-sync) + +Moved boolean array types to use array column types (instead of JSON columns) for the Postgres decoded indexer + +**[docs: add missing changeset (#2282)](https://github.com/latticexyz/mud/commit/669fa43e5adcd2b3e44a298544c62ef9e0df642a)** (@latticexyz/store-sync) + +Moved numerical array types to use array column types (instead of JSON columns) for the Postgres decoded indexer + +**[docs: changeset for #2187 (#2188)](https://github.com/latticexyz/mud/commit/78a837167e527511d1a03fe67f60eb1d2e80aaa2)** (@latticexyz/cli) + +Fixed registration of world signatures/selectors for namespaced systems. We changed these signatures in [#2160](https://github.com/latticexyz/mud/pull/2160), but missed updating part of the deploy step. + +**[fix(common): include only errors defined in the contract (#2194)](https://github.com/latticexyz/mud/commit/c162ad5a546a92009aafc6150d9449738234b1ef)** (@latticexyz/common) + +Prevented errors not included in the contract (but present in the file) from being included in the interface by `contractToInterface` + +**[refactor(store): push to StoreHooks with StoreCore method (#2201)](https://github.com/latticexyz/mud/commit/55a05fd7af2abe68d2a041f55bafdd03f5d68788)** (@latticexyz/store) + +Refactored `StoreCore.registerStoreHook` to use `StoreHooks._push` for gas efficiency. + +**[refactor(world,world-modules): rename module args to encodedArgs (#2199)](https://github.com/latticexyz/mud/commit/e2d089c6d3970094e0310e84b096db0487967cc9)** (@latticexyz/world-modules, @latticexyz/world) + +Renamed the Module `args` parameter to `encodedArgs` to better reflect that it is ABI-encoded arguments. + +**[feat(world): rename CoreModule to InitModule (#2227)](https://github.com/latticexyz/mud/commit/db7798be2181c1b9e55380a195a04100aab627fd)** (@latticexyz/cli) + +Updated deployer with world's new `InitModule` naming. + +**[fix(world): prevent namespace from ending with underscore [M-05] (#2182)](https://github.com/latticexyz/mud/commit/17f98720928444ce8f82639b6d1f1eb01012a1c8)** (@latticexyz/world) + +Added a check to prevent namespaces from ending with an underscore (which could cause problems with world function signatures). + +**[fix(world): check table exists for register store and system hook [L-09] (#2195)](https://github.com/latticexyz/mud/commit/745485cda0d3a46e3d63d05c0149b2448e578010)** (@latticexyz/store) + +Updated `StoreCore` to check that tables exist before registering store hooks. + +--- + ## Version 2.0.0-next.16 Release date: Tue Jan 23 2024 diff --git a/packages/abi-ts/CHANGELOG.md b/packages/abi-ts/CHANGELOG.md index 7ef1deccbc..0fe9042d41 100644 --- a/packages/abi-ts/CHANGELOG.md +++ b/packages/abi-ts/CHANGELOG.md @@ -1,5 +1,7 @@ # @latticexyz/abi-ts +## 2.0.0-next.17 + ## 2.0.0-next.16 ## 2.0.0-next.15 diff --git a/packages/abi-ts/package.json b/packages/abi-ts/package.json index e80e9d631e..e0200e313c 100644 --- a/packages/abi-ts/package.json +++ b/packages/abi-ts/package.json @@ -1,6 +1,6 @@ { "name": "@latticexyz/abi-ts", - "version": "2.0.0-next.16", + "version": "2.0.0-next.17", "description": "Create TypeScript type declaration files (`.d.ts`) for your ABI JSON files.", "repository": { "type": "git", diff --git a/packages/block-logs-stream/CHANGELOG.md b/packages/block-logs-stream/CHANGELOG.md index a486f7b315..545ea08a88 100644 --- a/packages/block-logs-stream/CHANGELOG.md +++ b/packages/block-logs-stream/CHANGELOG.md @@ -1,5 +1,14 @@ # @latticexyz/block-logs-stream +## 2.0.0-next.17 + +### Patch Changes + +- Updated dependencies [a35c05ea] +- Updated dependencies [aabd3076] +- Updated dependencies [c162ad5a] + - @latticexyz/common@2.0.0-next.17 + ## 2.0.0-next.16 ### Patch Changes diff --git a/packages/block-logs-stream/package.json b/packages/block-logs-stream/package.json index 4e59b5c36d..578f9a2c7e 100644 --- a/packages/block-logs-stream/package.json +++ b/packages/block-logs-stream/package.json @@ -1,6 +1,6 @@ { "name": "@latticexyz/block-logs-stream", - "version": "2.0.0-next.16", + "version": "2.0.0-next.17", "description": "Create a stream of EVM block logs for events", "repository": { "type": "git", diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index b5cc64b5e9..0bec448c15 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -1,5 +1,45 @@ # Change Log +## 2.0.0-next.17 + +### Minor Changes + +- aabd3076: Bumped Solidity version to 0.8.24. +- 618dd0e8: `WorldFactory` now expects a user-provided `salt` when calling `deployWorld(...)` (instead of the previous globally incrementing counter). This enables deterministic world addresses across different chains. + + When using `mud deploy`, you can provide a `bytes32` hex-encoded salt using the `--salt` option, otherwise it defaults to a random hex value. + +### Patch Changes + +- a35c05ea: Table libraries now hardcode the `bytes32` table ID value rather than computing it in Solidity. This saves a bit of gas across all storage operations. +- 78a83716: Fixed registration of world signatures/selectors for namespaced systems. We changed these signatures in [#2160](https://github.com/latticexyz/mud/pull/2160), but missed updating part of the deploy step. +- db7798be: Updated deployer with world's new `InitModule` naming. +- Updated dependencies [a35c05ea] +- Updated dependencies [05b3e888] +- Updated dependencies [745485cd] +- Updated dependencies [aabd3076] +- Updated dependencies [db7798be] +- Updated dependencies [618dd0e8] +- Updated dependencies [c4fc8504] +- Updated dependencies [c162ad5a] +- Updated dependencies [55a05fd7] +- Updated dependencies [6470fe1f] +- Updated dependencies [e2d089c6] +- Updated dependencies [17f98720] +- Updated dependencies [5c52bee0] +- Updated dependencies [745485cd] + - @latticexyz/common@2.0.0-next.17 + - @latticexyz/store@2.0.0-next.17 + - @latticexyz/world-modules@2.0.0-next.17 + - @latticexyz/world@2.0.0-next.17 + - @latticexyz/schema-type@2.0.0-next.17 + - @latticexyz/gas-report@2.0.0-next.17 + - @latticexyz/config@2.0.0-next.17 + - @latticexyz/protocol-parser@2.0.0-next.17 + - @latticexyz/abi-ts@2.0.0-next.17 + - @latticexyz/services@2.0.0-next.17 + - @latticexyz/utils@2.0.0-next.17 + ## 2.0.0-next.16 ### Major Changes diff --git a/packages/cli/package.json b/packages/cli/package.json index a59f92db27..ccd00d61ae 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@latticexyz/cli", - "version": "2.0.0-next.16", + "version": "2.0.0-next.17", "description": "Command line interface for mud", "repository": { "type": "git", diff --git a/packages/common/CHANGELOG.md b/packages/common/CHANGELOG.md index ef40e2b793..042dabaa3c 100644 --- a/packages/common/CHANGELOG.md +++ b/packages/common/CHANGELOG.md @@ -1,5 +1,18 @@ # Change Log +## 2.0.0-next.17 + +### Minor Changes + +- aabd3076: Bumped Solidity version to 0.8.24. + +### Patch Changes + +- a35c05ea: Table libraries now hardcode the `bytes32` table ID value rather than computing it in Solidity. This saves a bit of gas across all storage operations. +- c162ad5a: Prevented errors not included in the contract (but present in the file) from being included in the interface by `contractToInterface` +- Updated dependencies [aabd3076] + - @latticexyz/schema-type@2.0.0-next.17 + ## 2.0.0-next.16 ### Patch Changes diff --git a/packages/common/package.json b/packages/common/package.json index 3a61a05177..e59867e710 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -1,6 +1,6 @@ { "name": "@latticexyz/common", - "version": "2.0.0-next.16", + "version": "2.0.0-next.17", "description": "Common low level logic shared between packages", "repository": { "type": "git", diff --git a/packages/config/CHANGELOG.md b/packages/config/CHANGELOG.md index 8b2ca78ebd..37b00f95a6 100644 --- a/packages/config/CHANGELOG.md +++ b/packages/config/CHANGELOG.md @@ -1,5 +1,15 @@ # Change Log +## 2.0.0-next.17 + +### Patch Changes + +- Updated dependencies [a35c05ea] +- Updated dependencies [aabd3076] +- Updated dependencies [c162ad5a] + - @latticexyz/common@2.0.0-next.17 + - @latticexyz/schema-type@2.0.0-next.17 + ## 2.0.0-next.16 ### Patch Changes diff --git a/packages/config/package.json b/packages/config/package.json index 5a6bb45837..db81380a7a 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -1,6 +1,6 @@ { "name": "@latticexyz/config", - "version": "2.0.0-next.16", + "version": "2.0.0-next.17", "description": "Config for Store and World", "repository": { "type": "git", diff --git a/packages/create-mud/CHANGELOG.md b/packages/create-mud/CHANGELOG.md index 1ac2caf09b..71ccd47861 100644 --- a/packages/create-mud/CHANGELOG.md +++ b/packages/create-mud/CHANGELOG.md @@ -1,5 +1,15 @@ # Change Log +## 2.0.0-next.17 + +### Minor Changes + +- aabd3076: Bumped Solidity version to 0.8.24. + +### Patch Changes + +- a35c05ea: Table libraries now hardcode the `bytes32` table ID value rather than computing it in Solidity. This saves a bit of gas across all storage operations. + ## 2.0.0-next.16 ## 2.0.0-next.15 diff --git a/packages/create-mud/package.json b/packages/create-mud/package.json index d0eefb5833..d0e501575b 100644 --- a/packages/create-mud/package.json +++ b/packages/create-mud/package.json @@ -1,6 +1,6 @@ { "name": "create-mud", - "version": "2.0.0-next.16", + "version": "2.0.0-next.17", "description": "Create a new MUD project", "license": "MIT", "author": "Lattice ", diff --git a/packages/dev-tools/CHANGELOG.md b/packages/dev-tools/CHANGELOG.md index b947194aec..23318d4128 100644 --- a/packages/dev-tools/CHANGELOG.md +++ b/packages/dev-tools/CHANGELOG.md @@ -1,5 +1,35 @@ # @latticexyz/dev-tools +## 2.0.0-next.17 + +### Patch Changes + +- Updated dependencies [a35c05ea] +- Updated dependencies [05b3e888] +- Updated dependencies [745485cd] +- Updated dependencies [aabd3076] +- Updated dependencies [6c615b60] +- Updated dependencies [db7798be] +- Updated dependencies [618dd0e8] +- Updated dependencies [4e445a1a] +- Updated dependencies [669fa43e] +- Updated dependencies [997286ba] +- Updated dependencies [c162ad5a] +- Updated dependencies [55a05fd7] +- Updated dependencies [6470fe1f] +- Updated dependencies [e2d089c6] +- Updated dependencies [17f98720] +- Updated dependencies [5c52bee0] +- Updated dependencies [745485cd] + - @latticexyz/common@2.0.0-next.17 + - @latticexyz/store@2.0.0-next.17 + - @latticexyz/world@2.0.0-next.17 + - @latticexyz/schema-type@2.0.0-next.17 + - @latticexyz/store-sync@2.0.0-next.17 + - @latticexyz/react@2.0.0-next.17 + - @latticexyz/recs@2.0.0-next.17 + - @latticexyz/utils@2.0.0-next.17 + ## 2.0.0-next.16 ### Patch Changes diff --git a/packages/dev-tools/package.json b/packages/dev-tools/package.json index df86f3a7c5..52ca25b39e 100644 --- a/packages/dev-tools/package.json +++ b/packages/dev-tools/package.json @@ -1,6 +1,6 @@ { "name": "@latticexyz/dev-tools", - "version": "2.0.0-next.16", + "version": "2.0.0-next.17", "description": "MUD developer tools", "repository": { "type": "git", @@ -51,12 +51,12 @@ "vitest": "0.34.6" }, "peerDependencies": { - "@latticexyz/common": "2.0.0-next.16", - "@latticexyz/recs": "2.0.0-next.16", - "@latticexyz/store": "2.0.0-next.16", - "@latticexyz/store-sync": "2.0.0-next.16", - "@latticexyz/utils": "2.0.0-next.16", - "@latticexyz/world": "2.0.0-next.16" + "@latticexyz/common": "2.0.0-next.17", + "@latticexyz/recs": "2.0.0-next.17", + "@latticexyz/store": "2.0.0-next.17", + "@latticexyz/store-sync": "2.0.0-next.17", + "@latticexyz/utils": "2.0.0-next.17", + "@latticexyz/world": "2.0.0-next.17" }, "publishConfig": { "access": "public" diff --git a/packages/ecs-browser/CHANGELOG.md b/packages/ecs-browser/CHANGELOG.md index e352e37742..a2152aac61 100644 --- a/packages/ecs-browser/CHANGELOG.md +++ b/packages/ecs-browser/CHANGELOG.md @@ -1,5 +1,7 @@ # @latticexyz/ecs-browser +## 2.0.0-next.17 + ## 2.0.0-next.16 ## 2.0.0-next.15 diff --git a/packages/ecs-browser/package.json b/packages/ecs-browser/package.json index d8b1a38079..ae7692a648 100644 --- a/packages/ecs-browser/package.json +++ b/packages/ecs-browser/package.json @@ -1,5 +1,5 @@ { "name": "@latticexyz/ecs-browser", - "version": "2.0.0-next.16", + "version": "2.0.0-next.17", "private": true } diff --git a/packages/faucet/CHANGELOG.md b/packages/faucet/CHANGELOG.md index cbccac65c1..496ab421c9 100644 --- a/packages/faucet/CHANGELOG.md +++ b/packages/faucet/CHANGELOG.md @@ -1,5 +1,14 @@ # @latticexyz/faucet +## 2.0.0-next.17 + +### Patch Changes + +- Updated dependencies [a35c05ea] +- Updated dependencies [aabd3076] +- Updated dependencies [c162ad5a] + - @latticexyz/common@2.0.0-next.17 + ## 2.0.0-next.16 ### Patch Changes diff --git a/packages/faucet/package.json b/packages/faucet/package.json index 01a2f79c30..beb31c37a2 100644 --- a/packages/faucet/package.json +++ b/packages/faucet/package.json @@ -1,6 +1,6 @@ { "name": "@latticexyz/faucet", - "version": "2.0.0-next.16", + "version": "2.0.0-next.17", "description": "Faucet API for Lattice testnet", "repository": { "type": "git", diff --git a/packages/gas-report/CHANGELOG.md b/packages/gas-report/CHANGELOG.md index b2e74e5bc8..1c1c30219e 100644 --- a/packages/gas-report/CHANGELOG.md +++ b/packages/gas-report/CHANGELOG.md @@ -1,5 +1,11 @@ # Change Log +## 2.0.0-next.17 + +### Major Changes + +- aabd3076: Bumped Solidity version to 0.8.24. + ## 2.0.0-next.16 ## 2.0.0-next.15 diff --git a/packages/gas-report/package.json b/packages/gas-report/package.json index 50bcb6ab3c..d366a4dc25 100644 --- a/packages/gas-report/package.json +++ b/packages/gas-report/package.json @@ -1,6 +1,6 @@ { "name": "@latticexyz/gas-report", - "version": "2.0.0-next.16", + "version": "2.0.0-next.17", "description": "Gas reporter for specific lines within forge tests", "repository": { "type": "git", diff --git a/packages/network/CHANGELOG.md b/packages/network/CHANGELOG.md index 7e26a657e2..85c828bf36 100644 --- a/packages/network/CHANGELOG.md +++ b/packages/network/CHANGELOG.md @@ -1,5 +1,7 @@ # @latticexyz/network +## 2.0.0-next.17 + ## 2.0.0-next.16 ## 2.0.0-next.15 diff --git a/packages/network/package.json b/packages/network/package.json index 80e98015fd..19f067b607 100644 --- a/packages/network/package.json +++ b/packages/network/package.json @@ -1,5 +1,5 @@ { "name": "@latticexyz/network", - "version": "2.0.0-next.16", + "version": "2.0.0-next.17", "private": true } diff --git a/packages/noise/CHANGELOG.md b/packages/noise/CHANGELOG.md index 790b66408c..ce434a927d 100644 --- a/packages/noise/CHANGELOG.md +++ b/packages/noise/CHANGELOG.md @@ -1,5 +1,11 @@ # Change Log +## 2.0.0-next.17 + +### Major Changes + +- aabd3076: Bumped Solidity version to 0.8.24. + ## 2.0.0-next.16 ## 2.0.0-next.15 diff --git a/packages/noise/package.json b/packages/noise/package.json index bf7ef3696a..d09d623a97 100644 --- a/packages/noise/package.json +++ b/packages/noise/package.json @@ -1,6 +1,6 @@ { "name": "@latticexyz/noise", - "version": "2.0.0-next.16", + "version": "2.0.0-next.17", "license": "MIT", "type": "module", "exports": { diff --git a/packages/phaserx/CHANGELOG.md b/packages/phaserx/CHANGELOG.md index b951e18cbd..9d739ad864 100644 --- a/packages/phaserx/CHANGELOG.md +++ b/packages/phaserx/CHANGELOG.md @@ -1,5 +1,11 @@ # Change Log +## 2.0.0-next.17 + +### Patch Changes + +- @latticexyz/utils@2.0.0-next.17 + ## 2.0.0-next.16 ### Patch Changes diff --git a/packages/phaserx/package.json b/packages/phaserx/package.json index d3719f652e..8aac974e54 100644 --- a/packages/phaserx/package.json +++ b/packages/phaserx/package.json @@ -1,6 +1,6 @@ { "name": "@latticexyz/phaserx", - "version": "2.0.0-next.16", + "version": "2.0.0-next.17", "repository": { "type": "git", "url": "https://github.com/latticexyz/mud.git", diff --git a/packages/protocol-parser/CHANGELOG.md b/packages/protocol-parser/CHANGELOG.md index 59ce694b37..8436897373 100644 --- a/packages/protocol-parser/CHANGELOG.md +++ b/packages/protocol-parser/CHANGELOG.md @@ -1,5 +1,15 @@ # @latticexyz/protocol-parser +## 2.0.0-next.17 + +### Patch Changes + +- Updated dependencies [a35c05ea] +- Updated dependencies [aabd3076] +- Updated dependencies [c162ad5a] + - @latticexyz/common@2.0.0-next.17 + - @latticexyz/schema-type@2.0.0-next.17 + ## 2.0.0-next.16 ### Patch Changes diff --git a/packages/protocol-parser/package.json b/packages/protocol-parser/package.json index cb35576d74..274a677926 100644 --- a/packages/protocol-parser/package.json +++ b/packages/protocol-parser/package.json @@ -1,6 +1,6 @@ { "name": "@latticexyz/protocol-parser", - "version": "2.0.0-next.16", + "version": "2.0.0-next.17", "description": "Parser utilities for the MUD protocol", "repository": { "type": "git", diff --git a/packages/react/CHANGELOG.md b/packages/react/CHANGELOG.md index 726c9b48ae..bb7b65527a 100644 --- a/packages/react/CHANGELOG.md +++ b/packages/react/CHANGELOG.md @@ -1,5 +1,18 @@ # Change Log +## 2.0.0-next.17 + +### Patch Changes + +- Updated dependencies [a35c05ea] +- Updated dependencies [05b3e888] +- Updated dependencies [aabd3076] +- Updated dependencies [55a05fd7] +- Updated dependencies [5c52bee0] +- Updated dependencies [745485cd] + - @latticexyz/store@2.0.0-next.17 + - @latticexyz/recs@2.0.0-next.17 + ## 2.0.0-next.16 ### Patch Changes diff --git a/packages/react/package.json b/packages/react/package.json index f05e7d5be5..c9f2be5006 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -1,6 +1,6 @@ { "name": "@latticexyz/react", - "version": "2.0.0-next.16", + "version": "2.0.0-next.17", "description": "React tools for MUD client.", "repository": { "type": "git", diff --git a/packages/recs/CHANGELOG.md b/packages/recs/CHANGELOG.md index e055f7e24c..4de2c01b38 100644 --- a/packages/recs/CHANGELOG.md +++ b/packages/recs/CHANGELOG.md @@ -1,5 +1,13 @@ # Change Log +## 2.0.0-next.17 + +### Patch Changes + +- Updated dependencies [aabd3076] + - @latticexyz/schema-type@2.0.0-next.17 + - @latticexyz/utils@2.0.0-next.17 + ## 2.0.0-next.16 ### Patch Changes diff --git a/packages/recs/package.json b/packages/recs/package.json index 3399f2ea5e..16d7c1b8b6 100644 --- a/packages/recs/package.json +++ b/packages/recs/package.json @@ -1,6 +1,6 @@ { "name": "@latticexyz/recs", - "version": "2.0.0-next.16", + "version": "2.0.0-next.17", "repository": { "type": "git", "url": "https://github.com/latticexyz/mud.git", diff --git a/packages/schema-type/CHANGELOG.md b/packages/schema-type/CHANGELOG.md index 46c5d522cc..2f3c17ae49 100644 --- a/packages/schema-type/CHANGELOG.md +++ b/packages/schema-type/CHANGELOG.md @@ -1,5 +1,11 @@ # Change Log +## 2.0.0-next.17 + +### Major Changes + +- aabd3076: Bumped Solidity version to 0.8.24. + ## 2.0.0-next.16 ## 2.0.0-next.15 diff --git a/packages/schema-type/package.json b/packages/schema-type/package.json index d7ca283538..dc4d877804 100644 --- a/packages/schema-type/package.json +++ b/packages/schema-type/package.json @@ -1,6 +1,6 @@ { "name": "@latticexyz/schema-type", - "version": "2.0.0-next.16", + "version": "2.0.0-next.17", "description": "SchemaType enum for various languages", "repository": { "type": "git", diff --git a/packages/services/CHANGELOG.md b/packages/services/CHANGELOG.md index 7edb1b1d50..f8f862c112 100644 --- a/packages/services/CHANGELOG.md +++ b/packages/services/CHANGELOG.md @@ -1,5 +1,7 @@ # Change Log +## 2.0.0-next.17 + ## 2.0.0-next.16 ## 2.0.0-next.15 diff --git a/packages/services/package.json b/packages/services/package.json index 30bfa5a347..96eccd36b8 100644 --- a/packages/services/package.json +++ b/packages/services/package.json @@ -1,6 +1,6 @@ { "name": "@latticexyz/services", - "version": "2.0.0-next.16", + "version": "2.0.0-next.17", "description": "MUD services for enhanced interactions with on-chain ECS state", "repository": { "type": "git", diff --git a/packages/solecs/CHANGELOG.md b/packages/solecs/CHANGELOG.md index b669f5248f..560aa4a722 100644 --- a/packages/solecs/CHANGELOG.md +++ b/packages/solecs/CHANGELOG.md @@ -1,5 +1,7 @@ # @latticexyz/solecs +## 2.0.0-next.17 + ## 2.0.0-next.16 ## 2.0.0-next.15 diff --git a/packages/solecs/package.json b/packages/solecs/package.json index 5a71b5d759..0b7e693df8 100644 --- a/packages/solecs/package.json +++ b/packages/solecs/package.json @@ -1,5 +1,5 @@ { "name": "@latticexyz/solecs", - "version": "2.0.0-next.16", + "version": "2.0.0-next.17", "private": true } diff --git a/packages/solhint-config-mud/CHANGELOG.md b/packages/solhint-config-mud/CHANGELOG.md index 048b83363b..dbcdf88e02 100644 --- a/packages/solhint-config-mud/CHANGELOG.md +++ b/packages/solhint-config-mud/CHANGELOG.md @@ -1,5 +1,7 @@ # Change Log +## 2.0.0-next.17 + ## 2.0.0-next.16 ## 2.0.0-next.15 diff --git a/packages/solhint-config-mud/package.json b/packages/solhint-config-mud/package.json index 07f238e97e..82d6c3e8cf 100644 --- a/packages/solhint-config-mud/package.json +++ b/packages/solhint-config-mud/package.json @@ -1,6 +1,6 @@ { "name": "solhint-config-mud", - "version": "2.0.0-next.16", + "version": "2.0.0-next.17", "repository": { "type": "git", "url": "https://github.com/latticexyz/mud.git", diff --git a/packages/solhint-plugin-mud/CHANGELOG.md b/packages/solhint-plugin-mud/CHANGELOG.md index 048b83363b..dbcdf88e02 100644 --- a/packages/solhint-plugin-mud/CHANGELOG.md +++ b/packages/solhint-plugin-mud/CHANGELOG.md @@ -1,5 +1,7 @@ # Change Log +## 2.0.0-next.17 + ## 2.0.0-next.16 ## 2.0.0-next.15 diff --git a/packages/solhint-plugin-mud/package.json b/packages/solhint-plugin-mud/package.json index 131ae4263c..826f37a866 100644 --- a/packages/solhint-plugin-mud/package.json +++ b/packages/solhint-plugin-mud/package.json @@ -1,6 +1,6 @@ { "name": "solhint-plugin-mud", - "version": "2.0.0-next.16", + "version": "2.0.0-next.17", "repository": { "type": "git", "url": "https://github.com/latticexyz/mud.git", diff --git a/packages/std-client/CHANGELOG.md b/packages/std-client/CHANGELOG.md index 30f9cae59e..4211742479 100644 --- a/packages/std-client/CHANGELOG.md +++ b/packages/std-client/CHANGELOG.md @@ -1,5 +1,7 @@ # @latticexyz/std-client +## 2.0.0-next.17 + ## 2.0.0-next.16 ## 2.0.0-next.15 diff --git a/packages/std-client/package.json b/packages/std-client/package.json index b5bc843426..5d1fa246e3 100644 --- a/packages/std-client/package.json +++ b/packages/std-client/package.json @@ -1,5 +1,5 @@ { "name": "@latticexyz/std-client", - "version": "2.0.0-next.16", + "version": "2.0.0-next.17", "private": true } diff --git a/packages/std-contracts/CHANGELOG.md b/packages/std-contracts/CHANGELOG.md index dabff6b285..5f4b08a1b4 100644 --- a/packages/std-contracts/CHANGELOG.md +++ b/packages/std-contracts/CHANGELOG.md @@ -1,5 +1,7 @@ # @latticexyz/std-contracts +## 2.0.0-next.17 + ## 2.0.0-next.16 ## 2.0.0-next.15 diff --git a/packages/std-contracts/package.json b/packages/std-contracts/package.json index 3f2f6d1413..c2364e2977 100644 --- a/packages/std-contracts/package.json +++ b/packages/std-contracts/package.json @@ -1,5 +1,5 @@ { "name": "@latticexyz/std-contracts", - "version": "2.0.0-next.16", + "version": "2.0.0-next.17", "private": true } diff --git a/packages/store-cache/CHANGELOG.md b/packages/store-cache/CHANGELOG.md index bb8e646981..5f275cb8d5 100644 --- a/packages/store-cache/CHANGELOG.md +++ b/packages/store-cache/CHANGELOG.md @@ -1,5 +1,7 @@ # @latticexyz/store-cache +## 2.0.0-next.17 + ## 2.0.0-next.16 ## 2.0.0-next.15 diff --git a/packages/store-cache/package.json b/packages/store-cache/package.json index 247d1aaa19..6d45812c9f 100644 --- a/packages/store-cache/package.json +++ b/packages/store-cache/package.json @@ -1,5 +1,5 @@ { "name": "@latticexyz/store-cache", - "version": "2.0.0-next.16", + "version": "2.0.0-next.17", "private": true } diff --git a/packages/store-indexer/CHANGELOG.md b/packages/store-indexer/CHANGELOG.md index 99864a157c..10ee41a923 100644 --- a/packages/store-indexer/CHANGELOG.md +++ b/packages/store-indexer/CHANGELOG.md @@ -1,5 +1,26 @@ # @latticexyz/store-indexer +## 2.0.0-next.17 + +### Patch Changes + +- Updated dependencies [a35c05ea] +- Updated dependencies [05b3e888] +- Updated dependencies [aabd3076] +- Updated dependencies [6c615b60] +- Updated dependencies [4e445a1a] +- Updated dependencies [669fa43e] +- Updated dependencies [997286ba] +- Updated dependencies [c162ad5a] +- Updated dependencies [55a05fd7] +- Updated dependencies [5c52bee0] +- Updated dependencies [745485cd] + - @latticexyz/common@2.0.0-next.17 + - @latticexyz/store@2.0.0-next.17 + - @latticexyz/store-sync@2.0.0-next.17 + - @latticexyz/block-logs-stream@2.0.0-next.17 + - @latticexyz/protocol-parser@2.0.0-next.17 + ## 2.0.0-next.16 ### Patch Changes diff --git a/packages/store-indexer/package.json b/packages/store-indexer/package.json index 5c5c726e6c..8ec5d4e2c3 100644 --- a/packages/store-indexer/package.json +++ b/packages/store-indexer/package.json @@ -1,6 +1,6 @@ { "name": "@latticexyz/store-indexer", - "version": "2.0.0-next.16", + "version": "2.0.0-next.17", "description": "Minimal Typescript indexer for Store", "repository": { "type": "git", diff --git a/packages/store-sync/CHANGELOG.md b/packages/store-sync/CHANGELOG.md index edde16ccf2..ea034b955d 100644 --- a/packages/store-sync/CHANGELOG.md +++ b/packages/store-sync/CHANGELOG.md @@ -1,5 +1,37 @@ # @latticexyz/store-sync +## 2.0.0-next.17 + +### Minor Changes + +- 997286ba: `createStoreSync` now [waits for idle](https://developer.mozilla.org/en-US/docs/Web/API/Window/requestIdleCallback) between each chunk of logs in a block to allow for downstream render cycles to trigger. This means that hydrating logs from an indexer will no longer block until hydration completes, but rather allow for `onProgress` callbacks to trigger. + +### Patch Changes + +- 6c615b60: Bumped the Postgres column size for `int32`, `uint32`, `int64`, and `uint64` types to avoid overflows +- 4e445a1a: Moved boolean array types to use array column types (instead of JSON columns) for the Postgres decoded indexer +- 669fa43e: Moved numerical array types to use array column types (instead of JSON columns) for the Postgres decoded indexer +- Updated dependencies [a35c05ea] +- Updated dependencies [05b3e888] +- Updated dependencies [745485cd] +- Updated dependencies [aabd3076] +- Updated dependencies [db7798be] +- Updated dependencies [618dd0e8] +- Updated dependencies [c162ad5a] +- Updated dependencies [55a05fd7] +- Updated dependencies [6470fe1f] +- Updated dependencies [e2d089c6] +- Updated dependencies [17f98720] +- Updated dependencies [5c52bee0] +- Updated dependencies [745485cd] + - @latticexyz/common@2.0.0-next.17 + - @latticexyz/store@2.0.0-next.17 + - @latticexyz/world@2.0.0-next.17 + - @latticexyz/schema-type@2.0.0-next.17 + - @latticexyz/block-logs-stream@2.0.0-next.17 + - @latticexyz/protocol-parser@2.0.0-next.17 + - @latticexyz/recs@2.0.0-next.17 + ## 2.0.0-next.16 ### Patch Changes diff --git a/packages/store-sync/package.json b/packages/store-sync/package.json index 0e334e92e3..5162e29f9c 100644 --- a/packages/store-sync/package.json +++ b/packages/store-sync/package.json @@ -1,6 +1,6 @@ { "name": "@latticexyz/store-sync", - "version": "2.0.0-next.16", + "version": "2.0.0-next.17", "description": "Utilities to sync MUD Store events with a client or cache", "repository": { "type": "git", diff --git a/packages/store/CHANGELOG.md b/packages/store/CHANGELOG.md index be1b231fe6..7d643bf934 100644 --- a/packages/store/CHANGELOG.md +++ b/packages/store/CHANGELOG.md @@ -1,5 +1,25 @@ # Change Log +## 2.0.0-next.17 + +### Major Changes + +- aabd3076: Bumped Solidity version to 0.8.24. +- 5c52bee0: Renamed `StoreCore`'s `registerCoreTables` method to `registerInternalTables`. + +### Patch Changes + +- a35c05ea: Table libraries now hardcode the `bytes32` table ID value rather than computing it in Solidity. This saves a bit of gas across all storage operations. +- 05b3e888: Fixed a race condition when registering core tables, where we would set a record in the `ResourceIds` table before the table was registered. +- 55a05fd7: Refactored `StoreCore.registerStoreHook` to use `StoreHooks._push` for gas efficiency. +- 745485cd: Updated `StoreCore` to check that tables exist before registering store hooks. +- Updated dependencies [a35c05ea] +- Updated dependencies [aabd3076] +- Updated dependencies [c162ad5a] + - @latticexyz/common@2.0.0-next.17 + - @latticexyz/schema-type@2.0.0-next.17 + - @latticexyz/config@2.0.0-next.17 + ## 2.0.0-next.16 ### Minor Changes diff --git a/packages/store/package.json b/packages/store/package.json index 9cc0f011ec..86aa4b9471 100644 --- a/packages/store/package.json +++ b/packages/store/package.json @@ -1,6 +1,6 @@ { "name": "@latticexyz/store", - "version": "2.0.0-next.16", + "version": "2.0.0-next.17", "description": "Store", "repository": { "type": "git", diff --git a/packages/utils/CHANGELOG.md b/packages/utils/CHANGELOG.md index 06eaef412c..f40f1fa377 100644 --- a/packages/utils/CHANGELOG.md +++ b/packages/utils/CHANGELOG.md @@ -1,5 +1,7 @@ # Change Log +## 2.0.0-next.17 + ## 2.0.0-next.16 ## 2.0.0-next.15 diff --git a/packages/utils/package.json b/packages/utils/package.json index b6add7f37e..8d5e0d0a30 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@latticexyz/utils", - "version": "2.0.0-next.16", + "version": "2.0.0-next.17", "repository": { "type": "git", "url": "https://github.com/latticexyz/mud.git", diff --git a/packages/world-modules/CHANGELOG.md b/packages/world-modules/CHANGELOG.md index b6ae49b739..7bd6ad0f6a 100644 --- a/packages/world-modules/CHANGELOG.md +++ b/packages/world-modules/CHANGELOG.md @@ -1,5 +1,38 @@ # Change Log +## 2.0.0-next.17 + +### Major Changes + +- aabd3076: Bumped Solidity version to 0.8.24. + +### Minor Changes + +- c4fc8504: Fixed `SystemSwitch` to properly call non-root systems from root systems. + +### Patch Changes + +- a35c05ea: Table libraries now hardcode the `bytes32` table ID value rather than computing it in Solidity. This saves a bit of gas across all storage operations. +- e2d089c6: Renamed the Module `args` parameter to `encodedArgs` to better reflect that it is ABI-encoded arguments. +- Updated dependencies [a35c05ea] +- Updated dependencies [05b3e888] +- Updated dependencies [745485cd] +- Updated dependencies [aabd3076] +- Updated dependencies [db7798be] +- Updated dependencies [618dd0e8] +- Updated dependencies [c162ad5a] +- Updated dependencies [55a05fd7] +- Updated dependencies [6470fe1f] +- Updated dependencies [e2d089c6] +- Updated dependencies [17f98720] +- Updated dependencies [5c52bee0] +- Updated dependencies [745485cd] + - @latticexyz/common@2.0.0-next.17 + - @latticexyz/store@2.0.0-next.17 + - @latticexyz/world@2.0.0-next.17 + - @latticexyz/schema-type@2.0.0-next.17 + - @latticexyz/config@2.0.0-next.17 + ## 2.0.0-next.16 ### Major Changes diff --git a/packages/world-modules/package.json b/packages/world-modules/package.json index 26e3b00a57..c8d17bdd15 100644 --- a/packages/world-modules/package.json +++ b/packages/world-modules/package.json @@ -1,6 +1,6 @@ { "name": "@latticexyz/world-modules", - "version": "2.0.0-next.16", + "version": "2.0.0-next.17", "description": "World modules", "repository": { "type": "git", diff --git a/packages/world/CHANGELOG.md b/packages/world/CHANGELOG.md index 29ce062713..d264a8e757 100644 --- a/packages/world/CHANGELOG.md +++ b/packages/world/CHANGELOG.md @@ -1,5 +1,38 @@ # Change Log +## 2.0.0-next.17 + +### Major Changes + +- aabd3076: Bumped Solidity version to 0.8.24. +- db7798be: Renamed `CoreModule` to `InitModule` and `CoreRegistrationSystem` to `RegistrationSystem`. +- 618dd0e8: `WorldFactory` now expects a user-provided `salt` when calling `deployWorld(...)` (instead of the previous globally incrementing counter). This enables deterministic world addresses across different chains. + + When using `mud deploy`, you can provide a `bytes32` hex-encoded salt using the `--salt` option, otherwise it defaults to a random hex value. + +### Minor Changes + +- 6470fe1f: `WorldFactory` now derives a salt based on number of worlds deployed by `msg.sender`, which should help with predictable world deployments across chains. + +### Patch Changes + +- a35c05ea: Table libraries now hardcode the `bytes32` table ID value rather than computing it in Solidity. This saves a bit of gas across all storage operations. +- 745485cd: Updated `WorldRegistrationSystem` to check that systems exist before registering system hooks. +- e2d089c6: Renamed the Module `args` parameter to `encodedArgs` to better reflect that it is ABI-encoded arguments. +- 17f98720: Added a check to prevent namespaces from ending with an underscore (which could cause problems with world function signatures). +- 5c52bee0: Renamed `StoreCore`'s `registerCoreTables` method to `registerInternalTables`. +- Updated dependencies [a35c05ea] +- Updated dependencies [05b3e888] +- Updated dependencies [aabd3076] +- Updated dependencies [c162ad5a] +- Updated dependencies [55a05fd7] +- Updated dependencies [5c52bee0] +- Updated dependencies [745485cd] + - @latticexyz/common@2.0.0-next.17 + - @latticexyz/store@2.0.0-next.17 + - @latticexyz/schema-type@2.0.0-next.17 + - @latticexyz/config@2.0.0-next.17 + ## 2.0.0-next.16 ### Major Changes diff --git a/packages/world/package.json b/packages/world/package.json index 7f969720de..5d2424c0af 100644 --- a/packages/world/package.json +++ b/packages/world/package.json @@ -1,6 +1,6 @@ { "name": "@latticexyz/world", - "version": "2.0.0-next.16", + "version": "2.0.0-next.17", "description": "World framework", "repository": { "type": "git", From a02da555b82b494acdef8cc5b8f58fc6760d1c07 Mon Sep 17 00:00:00 2001 From: PWR Date: Tue, 20 Feb 2024 21:56:03 +0100 Subject: [PATCH 13/24] fix(gas-report): update filename matcher (#2277) Co-authored-by: Kevin Ingersoll --- .changeset/purple-cooks-remember.md | 5 +++++ packages/gas-report/ts/index.ts | 4 +++- 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 .changeset/purple-cooks-remember.md diff --git a/.changeset/purple-cooks-remember.md b/.changeset/purple-cooks-remember.md new file mode 100644 index 0000000000..734bc468fb --- /dev/null +++ b/.changeset/purple-cooks-remember.md @@ -0,0 +1,5 @@ +--- +"@latticexyz/gas-report": patch +--- + +Fixed gas report parsing for foundry versions released after 2024-02-15. diff --git a/packages/gas-report/ts/index.ts b/packages/gas-report/ts/index.ts index a7c14bdd32..322d71bd09 100644 --- a/packages/gas-report/ts/index.ts +++ b/packages/gas-report/ts/index.ts @@ -130,7 +130,9 @@ async function runGasReport(options: Options): Promise { const lines = logs.split("\n").map(stripAnsi); const gasReportPattern = /^\s*GAS REPORT: (\d+) (.*)$/; const testFunctionPattern = /^\[(?:PASS|FAIL).*\] (\w+)\(\)/; - const testFilePattern = /^Running \d+ tests? for (.*):(.*)$/; + // Matches "Running" for forge versions before 2024-02-15 + // And "Ran" for forge versions after 2024-02-15 + const testFilePattern = /^(?:Running|Ran) \d+ tests? for (.*):(.*)$/; function nearestLine(pattern: RegExp, startIndex: number = lines.length - 1): number { for (let i = startIndex; i >= 0; i--) { From 8193136a9511d066aeebce82155d3509aa760282 Mon Sep 17 00:00:00 2001 From: yonada Date: Wed, 21 Feb 2024 14:01:57 +0000 Subject: [PATCH 14/24] feat(store): add field index to Store_SpliceDynamicData event (#2279) Co-authored-by: Kevin Ingersoll --- .changeset/rich-deers-doubt.md | 6 + docs/pages/store/reference/store-core.mdx | 18 +- docs/pages/store/reference/store.mdx | 18 +- .../createStorageAdapter.test.ts | 10 +- .../src/postgres/createStorageAdapter.test.ts | 6 +- .../src/sqlite/sqliteStorage.test.ts | 16 +- packages/store/gas-report.json | 52 +- packages/store/src/IStoreEvents.sol | 3 + packages/store/src/StoreCore.sol | 4 + packages/store/test/StoreCore.t.sol | 17 +- packages/store/test/StoreCoreDynamic.t.sol | 4 +- packages/store/ts/storeEvents.ts | 2 +- packages/world-modules/gas-report.json | 32 +- packages/world/gas-report.json | 14 +- test-data/world-logs.json | 1368 +++++++++-------- 15 files changed, 840 insertions(+), 730 deletions(-) create mode 100644 .changeset/rich-deers-doubt.md diff --git a/.changeset/rich-deers-doubt.md b/.changeset/rich-deers-doubt.md new file mode 100644 index 0000000000..e72da4e15a --- /dev/null +++ b/.changeset/rich-deers-doubt.md @@ -0,0 +1,6 @@ +--- +"@latticexyz/store": major +"@latticexyz/store-sync": major +--- + +Added `dynamicFieldIndex` to the `Store_SpliceDynamicData` event. This enables indexers to store dynamic data as a blob per dynamic field without a schema lookup. diff --git a/docs/pages/store/reference/store-core.mdx b/docs/pages/store/reference/store-core.mdx index c717e5f2b0..3ac3bf6c68 100644 --- a/docs/pages/store/reference/store-core.mdx +++ b/docs/pages/store/reference/store-core.mdx @@ -812,6 +812,7 @@ Emitted when dynamic data in the store is spliced. event Store_SpliceDynamicData( ResourceId indexed tableId, bytes32[] keyTuple, + uint8 dynamicFieldIndex, uint48 start, uint40 deleteCount, PackedCounter encodedLengths, @@ -821,14 +822,15 @@ event Store_SpliceDynamicData( **Parameters** -| Name | Type | Description | -| ---------------- | --------------- | ------------------------------------------------------------------------- | -| `tableId` | `ResourceId` | The ID of the table where the data is spliced. | -| `keyTuple` | `bytes32[]` | An array representing the composite key for the record. | -| `start` | `uint48` | The start position in bytes for the splice operation. | -| `deleteCount` | `uint40` | The number of bytes to delete in the splice operation. | -| `encodedLengths` | `PackedCounter` | The encoded lengths of the dynamic data of the record. | -| `data` | `bytes` | The data to insert into the dynamic data of the record at the start byte. | +| Name | Type | Description | +| ------------------- | --------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `tableId` | `ResourceId` | The ID of the table where the data is spliced. | +| `keyTuple` | `bytes32[]` | An array representing the composite key for the record. | +| `dynamicFieldIndex` | `uint8` | The index of the dynamic field to splice data, relative to the start of the dynamic fields. (Dynamic field index = field index - number of static fields) | +| `start` | `uint48` | The start position in bytes for the splice operation. | +| `deleteCount` | `uint40` | The number of bytes to delete in the splice operation. | +| `encodedLengths` | `PackedCounter` | The encoded lengths of the dynamic data of the record. | +| `data` | `bytes` | The data to insert into the dynamic data of the record at the start byte. | ### Store_DeleteRecord diff --git a/docs/pages/store/reference/store.mdx b/docs/pages/store/reference/store.mdx index ee22152858..115c043b7c 100644 --- a/docs/pages/store/reference/store.mdx +++ b/docs/pages/store/reference/store.mdx @@ -61,6 +61,7 @@ Emitted when dynamic data in the store is spliced. event Store_SpliceDynamicData( ResourceId indexed tableId, bytes32[] keyTuple, + uint8 dynamicFieldIndex, uint48 start, uint40 deleteCount, PackedCounter encodedLengths, @@ -70,14 +71,15 @@ event Store_SpliceDynamicData( **Parameters** -| Name | Type | Description | -| ---------------- | --------------- | ------------------------------------------------------------------------- | -| `tableId` | `ResourceId` | The ID of the table where the data is spliced. | -| `keyTuple` | `bytes32[]` | An array representing the composite key for the record. | -| `start` | `uint48` | The start position in bytes for the splice operation. | -| `deleteCount` | `uint40` | The number of bytes to delete in the splice operation. | -| `encodedLengths` | `PackedCounter` | The encoded lengths of the dynamic data of the record. | -| `data` | `bytes` | The data to insert into the dynamic data of the record at the start byte. | +| Name | Type | Description | +| ------------------- | --------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `tableId` | `ResourceId` | The ID of the table where the data is spliced. | +| `keyTuple` | `bytes32[]` | An array representing the composite key for the record. | +| `dynamicFieldIndex` | `uint8` | The index of the dynamic field to splice data, relative to the start of the dynamic fields. (Dynamic field index = field index - number of static fields) | +| `start` | `uint48` | The start position in bytes for the splice operation. | +| `deleteCount` | `uint40` | The number of bytes to delete in the splice operation. | +| `encodedLengths` | `PackedCounter` | The encoded lengths of the dynamic data of the record. | +| `data` | `bytes` | The data to insert into the dynamic data of the record at the start byte. | ### Store_DeleteRecord diff --git a/packages/store-sync/src/postgres-decoded/createStorageAdapter.test.ts b/packages/store-sync/src/postgres-decoded/createStorageAdapter.test.ts index 184413b0ae..03cbb7d616 100644 --- a/packages/store-sync/src/postgres-decoded/createStorageAdapter.test.ts +++ b/packages/store-sync/src/postgres-decoded/createStorageAdapter.test.ts @@ -50,7 +50,7 @@ describe("createStorageAdapter", async () => { expect(await db.select().from(storageAdapter.tables.configTable)).toMatchInlineSnapshot(` [ { - "blockNumber": 20n, + "blockNumber": 28n, "chainId": 31337, "version": "0.0.6", }, @@ -70,8 +70,8 @@ describe("createStorageAdapter", async () => { ).toMatchInlineSnapshot(` [ { - "address": "0x2964aF56c8aACdE425978a28b018956D21cF50f0", - "blockNumber": 20n, + "address": "0xd843FB6A5fD209344E5A1b3d5c121330c2B4a36f", + "blockNumber": 28n, "dynamicData": "0x000001a400000045", "encodedLengths": "0x0000000000000000000000000000000000000000000000000800000000000008", "isDeleted": false, @@ -89,7 +89,7 @@ describe("createStorageAdapter", async () => { expect(tables).toMatchInlineSnapshot(` [ { - "address": "0x2964aF56c8aACdE425978a28b018956D21cF50f0", + "address": "0xd843FB6A5fD209344E5A1b3d5c121330c2B4a36f", "keySchema": {}, "name": "NumberList", "namespace": "", @@ -106,7 +106,7 @@ describe("createStorageAdapter", async () => { [ { "__keyBytes": "0x", - "__lastUpdatedBlockNumber": 20n, + "__lastUpdatedBlockNumber": 28n, "value": [ 420, 69, diff --git a/packages/store-sync/src/postgres/createStorageAdapter.test.ts b/packages/store-sync/src/postgres/createStorageAdapter.test.ts index ae98d5163b..88e9ad553d 100644 --- a/packages/store-sync/src/postgres/createStorageAdapter.test.ts +++ b/packages/store-sync/src/postgres/createStorageAdapter.test.ts @@ -48,7 +48,7 @@ describe("createStorageAdapter", async () => { expect(await db.select().from(storageAdapter.tables.configTable)).toMatchInlineSnapshot(` [ { - "blockNumber": 20n, + "blockNumber": 28n, "chainId": 31337, "version": "0.0.6", }, @@ -68,8 +68,8 @@ describe("createStorageAdapter", async () => { ).toMatchInlineSnapshot(` [ { - "address": "0x2964aF56c8aACdE425978a28b018956D21cF50f0", - "blockNumber": 20n, + "address": "0xd843FB6A5fD209344E5A1b3d5c121330c2B4a36f", + "blockNumber": 28n, "dynamicData": "0x000001a400000045", "encodedLengths": "0x0000000000000000000000000000000000000000000000000800000000000008", "isDeleted": false, diff --git a/packages/store-sync/src/sqlite/sqliteStorage.test.ts b/packages/store-sync/src/sqlite/sqliteStorage.test.ts index 236d89fbe9..85214226b4 100644 --- a/packages/store-sync/src/sqlite/sqliteStorage.test.ts +++ b/packages/store-sync/src/sqlite/sqliteStorage.test.ts @@ -64,7 +64,7 @@ describe("sqliteStorage", async () => { { "chainId": 31337, "lastError": null, - "lastUpdatedBlockNumber": 20n, + "lastUpdatedBlockNumber": 28n, "schemaVersion": 1, }, ] @@ -73,11 +73,11 @@ describe("sqliteStorage", async () => { expect(db.select().from(mudStoreTables).where(eq(mudStoreTables.name, "NumberList")).all()).toMatchInlineSnapshot(` [ { - "address": "0x2964aF56c8aACdE425978a28b018956D21cF50f0", - "id": "0x2964aF56c8aACdE425978a28b018956D21cF50f0____NumberList", + "address": "0xd843FB6A5fD209344E5A1b3d5c121330c2B4a36f", + "id": "0xd843FB6A5fD209344E5A1b3d5c121330c2B4a36f____NumberList", "keySchema": {}, "lastError": null, - "lastUpdatedBlockNumber": 20n, + "lastUpdatedBlockNumber": 28n, "name": "NumberList", "namespace": "", "schemaVersion": 1, @@ -93,11 +93,11 @@ describe("sqliteStorage", async () => { expect(tables).toMatchInlineSnapshot(` [ { - "address": "0x2964aF56c8aACdE425978a28b018956D21cF50f0", - "id": "0x2964aF56c8aACdE425978a28b018956D21cF50f0____NumberList", + "address": "0xd843FB6A5fD209344E5A1b3d5c121330c2B4a36f", + "id": "0xd843FB6A5fD209344E5A1b3d5c121330c2B4a36f____NumberList", "keySchema": {}, "lastError": null, - "lastUpdatedBlockNumber": 20n, + "lastUpdatedBlockNumber": 28n, "name": "NumberList", "namespace": "", "schemaVersion": 1, @@ -117,7 +117,7 @@ describe("sqliteStorage", async () => { "__encodedLengths": "0x0000000000000000000000000000000000000000000000000800000000000008", "__isDeleted": false, "__key": "0x", - "__lastUpdatedBlockNumber": 20n, + "__lastUpdatedBlockNumber": 28n, "__staticData": null, "value": [ 420, diff --git a/packages/store/gas-report.json b/packages/store/gas-report.json index 412450e007..beec1a3c40 100644 --- a/packages/store/gas-report.json +++ b/packages/store/gas-report.json @@ -15,7 +15,7 @@ "file": "test/Callbacks.t.sol", "test": "testSetAndGet", "name": "Callbacks: set field", - "gasUsed": 55829 + "gasUsed": 56118 }, { "file": "test/Callbacks.t.sol", @@ -27,7 +27,7 @@ "file": "test/Callbacks.t.sol", "test": "testSetAndGet", "name": "Callbacks: push 1 element", - "gasUsed": 32114 + "gasUsed": 32402 }, { "file": "test/FieldLayout.t.sol", @@ -621,25 +621,25 @@ "file": "test/StoreCoreDynamic.t.sol", "test": "testPopFromSecondField", "name": "pop from field (cold, 1 slot, 1 uint32 item)", - "gasUsed": 17819 + "gasUsed": 18107 }, { "file": "test/StoreCoreDynamic.t.sol", "test": "testPopFromSecondField", "name": "pop from field (warm, 1 slot, 1 uint32 item)", - "gasUsed": 11825 + "gasUsed": 12114 }, { "file": "test/StoreCoreDynamic.t.sol", "test": "testPopFromThirdField", "name": "pop from field (cold, 2 slots, 10 uint32 items)", - "gasUsed": 15588 + "gasUsed": 15876 }, { "file": "test/StoreCoreDynamic.t.sol", "test": "testPopFromThirdField", "name": "pop from field (warm, 2 slots, 10 uint32 items)", - "gasUsed": 11594 + "gasUsed": 11883 }, { "file": "test/StoreCoreGas.t.sol", @@ -705,7 +705,7 @@ "file": "test/StoreCoreGas.t.sol", "test": "testHooks", "name": "register subscriber", - "gasUsed": 56304 + "gasUsed": 56589 }, { "file": "test/StoreCoreGas.t.sol", @@ -729,7 +729,7 @@ "file": "test/StoreCoreGas.t.sol", "test": "testHooksDynamicData", "name": "register subscriber", - "gasUsed": 56304 + "gasUsed": 56589 }, { "file": "test/StoreCoreGas.t.sol", @@ -741,7 +741,7 @@ "file": "test/StoreCoreGas.t.sol", "test": "testHooksDynamicData", "name": "set (dynamic) field on table with subscriber", - "gasUsed": 23856 + "gasUsed": 24430 }, { "file": "test/StoreCoreGas.t.sol", @@ -753,13 +753,13 @@ "file": "test/StoreCoreGas.t.sol", "test": "testPushToDynamicField", "name": "push to field (1 slot, 1 uint32 item)", - "gasUsed": 9250 + "gasUsed": 9539 }, { "file": "test/StoreCoreGas.t.sol", "test": "testPushToDynamicField", "name": "push to field (2 slots, 10 uint32 items)", - "gasUsed": 31922 + "gasUsed": 32211 }, { "file": "test/StoreCoreGas.t.sol", @@ -855,7 +855,7 @@ "file": "test/StoreCoreGas.t.sol", "test": "testSetAndGetField", "name": "set dynamic field (1 slot, first dynamic field)", - "gasUsed": 53732 + "gasUsed": 54022 }, { "file": "test/StoreCoreGas.t.sol", @@ -867,7 +867,7 @@ "file": "test/StoreCoreGas.t.sol", "test": "testSetAndGetField", "name": "set dynamic field (1 slot, second dynamic field)", - "gasUsed": 31957 + "gasUsed": 32246 }, { "file": "test/StoreCoreGas.t.sol", @@ -909,13 +909,13 @@ "file": "test/StoreCoreGas.t.sol", "test": "testUpdateInDynamicField", "name": "update in field (1 slot, 1 uint32 item)", - "gasUsed": 8610 + "gasUsed": 8899 }, { "file": "test/StoreCoreGas.t.sol", "test": "testUpdateInDynamicField", "name": "push to field (2 slots, 6 uint64 items)", - "gasUsed": 9053 + "gasUsed": 9342 }, { "file": "test/StoreHook.t.sol", @@ -945,13 +945,13 @@ "file": "test/StoreHooks.t.sol", "test": "testOneSlot", "name": "StoreHooks: set field with one elements (cold)", - "gasUsed": 57824 + "gasUsed": 58112 }, { "file": "test/StoreHooks.t.sol", "test": "testTable", "name": "StoreHooks: set field (cold)", - "gasUsed": 57824 + "gasUsed": 58112 }, { "file": "test/StoreHooks.t.sol", @@ -963,25 +963,25 @@ "file": "test/StoreHooks.t.sol", "test": "testTable", "name": "StoreHooks: push 1 element (cold)", - "gasUsed": 12202 + "gasUsed": 12491 }, { "file": "test/StoreHooks.t.sol", "test": "testTable", "name": "StoreHooks: pop 1 element (warm)", - "gasUsed": 9506 + "gasUsed": 9795 }, { "file": "test/StoreHooks.t.sol", "test": "testTable", "name": "StoreHooks: push 1 element (warm)", - "gasUsed": 10218 + "gasUsed": 10507 }, { "file": "test/StoreHooks.t.sol", "test": "testTable", "name": "StoreHooks: update 1 element (warm)", - "gasUsed": 29452 + "gasUsed": 29741 }, { "file": "test/StoreHooks.t.sol", @@ -993,19 +993,19 @@ "file": "test/StoreHooks.t.sol", "test": "testTable", "name": "StoreHooks: set field (warm)", - "gasUsed": 29965 + "gasUsed": 30255 }, { "file": "test/StoreHooks.t.sol", "test": "testThreeSlots", "name": "StoreHooks: set field with three elements (cold)", - "gasUsed": 80515 + "gasUsed": 80803 }, { "file": "test/StoreHooks.t.sol", "test": "testTwoSlots", "name": "StoreHooks: set field with two elements (cold)", - "gasUsed": 80427 + "gasUsed": 80715 }, { "file": "test/StoreHooksColdLoad.t.sol", @@ -1035,13 +1035,13 @@ "file": "test/StoreHooksColdLoad.t.sol", "test": "testPop", "name": "StoreHooks: pop 1 element (cold)", - "gasUsed": 17942 + "gasUsed": 18231 }, { "file": "test/StoreHooksColdLoad.t.sol", "test": "testUpdate", "name": "StoreHooks: update 1 element (cold)", - "gasUsed": 19906 + "gasUsed": 20194 }, { "file": "test/StoreSwitch.t.sol", diff --git a/packages/store/src/IStoreEvents.sol b/packages/store/src/IStoreEvents.sol index c94ea0963f..9d894fe7c3 100644 --- a/packages/store/src/IStoreEvents.sol +++ b/packages/store/src/IStoreEvents.sol @@ -36,6 +36,8 @@ interface IStoreEvents { * @notice Emitted when dynamic data in the store is spliced. * @param tableId The ID of the table where the data is spliced. * @param keyTuple An array representing the composite key for the record. + * @param dynamicFieldIndex The index of the dynamic field to splice data, relative to the start of the dynamic fields. + * (Dynamic field index = field index - number of static fields) * @param start The start position in bytes for the splice operation. * @param deleteCount The number of bytes to delete in the splice operation. * @param encodedLengths The encoded lengths of the dynamic data of the record. @@ -44,6 +46,7 @@ interface IStoreEvents { event Store_SpliceDynamicData( ResourceId indexed tableId, bytes32[] keyTuple, + uint8 dynamicFieldIndex, uint48 start, uint40 deleteCount, PackedCounter encodedLengths, diff --git a/packages/store/src/StoreCore.sol b/packages/store/src/StoreCore.sol index ab79c2ce9e..cfd5a23146 100644 --- a/packages/store/src/StoreCore.sol +++ b/packages/store/src/StoreCore.sol @@ -55,6 +55,8 @@ library StoreCore { * @notice Emitted when dynamic data in the store is spliced. * @param tableId The ID of the table where the data is spliced. * @param keyTuple An array representing the composite key for the record. + * @param dynamicFieldIndex The index of the dynamic field to splice data, relative to the start of the dynamic fields. + * (Dynamic field index = field index - number of static fields) * @param start The start position in bytes for the splice operation. * @param deleteCount The number of bytes to delete in the splice operation. * @param encodedLengths The encoded lengths of the dynamic data of the record. @@ -63,6 +65,7 @@ library StoreCore { event Store_SpliceDynamicData( ResourceId indexed tableId, bytes32[] keyTuple, + uint8 dynamicFieldIndex, uint48 start, uint40 deleteCount, PackedCounter encodedLengths, @@ -1086,6 +1089,7 @@ library StoreCoreInternal { emit StoreCore.Store_SpliceDynamicData({ tableId: tableId, keyTuple: keyTuple, + dynamicFieldIndex: dynamicFieldIndex, start: uint48(start), deleteCount: deleteCount, encodedLengths: updatedEncodedLengths, diff --git a/packages/store/test/StoreCore.t.sol b/packages/store/test/StoreCore.t.sol index 2f83f99ac1..d709b84003 100644 --- a/packages/store/test/StoreCore.t.sol +++ b/packages/store/test/StoreCore.t.sol @@ -539,12 +539,13 @@ contract StoreCoreTest is Test, StoreMock { _data.fourthDataBytes = EncodeArray.encode(fourthData); } - // Expect a StoreSpliceRecord event to be emitted + // Expect a Store_SpliceDynamicData event to be emitted vm.expectEmit(true, true, true, true); emit Store_SpliceDynamicData( _data.tableId, keyTuple, - uint48(0), + 0, + 0, 0, PackedCounterLib.pack(_data.thirdDataBytes.length, 0), _data.thirdDataBytes @@ -579,6 +580,7 @@ contract StoreCoreTest is Test, StoreMock { emit Store_SpliceDynamicData( _data.tableId, keyTuple, + 1, uint48(_data.thirdDataBytes.length), 0, PackedCounterLib.pack(_data.thirdDataBytes.length, _data.fourthDataBytes.length), @@ -624,6 +626,7 @@ contract StoreCoreTest is Test, StoreMock { emit Store_SpliceDynamicData( _data.tableId, keyTuple, + 1, uint48(_data.thirdDataBytes.length), uint40(_data.fourthDataBytes.length), PackedCounterLib.pack(_data.thirdDataBytes.length, _data.thirdDataBytes.length), @@ -805,6 +808,7 @@ contract StoreCoreTest is Test, StoreMock { emit Store_SpliceDynamicData( data.tableId, data.keyTuple, + 0, uint48(data.secondDataBytes.length), 0, PackedCounterLib.pack(data.newSecondDataBytes.length, data.thirdDataBytes.length), @@ -848,6 +852,7 @@ contract StoreCoreTest is Test, StoreMock { emit Store_SpliceDynamicData( data.tableId, data.keyTuple, + 1, uint48(data.newSecondDataBytes.length + data.thirdDataBytes.length), 0, PackedCounterLib.pack(data.newSecondDataBytes.length, data.newThirdDataBytes.length), @@ -953,12 +958,13 @@ contract StoreCoreTest is Test, StoreMock { data.newSecondDataBytes = abi.encodePacked(data.secondData[0], _secondDataForUpdate[0]); } - // Expect a StoreSpliceRecord event to be emitted + // Expect a Store_SpliceDynamicData event to be emitted vm.expectEmit(true, true, true, true); emit Store_SpliceDynamicData( data.tableId, data.keyTuple, - uint48(4 * 1), + 0, + 4 * 1, 4 * 1, PackedCounterLib.pack(data.newSecondDataBytes.length, data.thirdDataBytes.length), data.secondDataForUpdate @@ -1005,11 +1011,12 @@ contract StoreCoreTest is Test, StoreMock { ); } - // Expect a StoreSpliceRecord event to be emitted + // Expect a Store_SpliceDynamicData event to be emitted vm.expectEmit(true, true, true, true); emit Store_SpliceDynamicData( data.tableId, data.keyTuple, + 1, uint48(data.newSecondDataBytes.length + 8 * 1), 8 * 4, PackedCounterLib.pack(data.newSecondDataBytes.length, data.newThirdDataBytes.length), diff --git a/packages/store/test/StoreCoreDynamic.t.sol b/packages/store/test/StoreCoreDynamic.t.sol index 7af44724b3..79080a0b14 100644 --- a/packages/store/test/StoreCoreDynamic.t.sol +++ b/packages/store/test/StoreCoreDynamic.t.sol @@ -100,6 +100,7 @@ contract StoreCoreDynamicTest is Test, GasReporter, StoreMock { emit Store_SpliceDynamicData( tableId, keyTuple, + 0, uint48(secondDataBytes.length - byteLengthToPop), uint40(byteLengthToPop), PackedCounterLib.pack(newDataBytes.length, thirdDataBytes.length), @@ -143,11 +144,12 @@ contract StoreCoreDynamicTest is Test, GasReporter, StoreMock { assertEq(SliceLib.fromBytes(dataBytes).decodeArray_uint32().length, 10); assertEq(SliceLib.fromBytes(newDataBytes).decodeArray_uint32().length, 10 - 10); - // Expect a StoreSpliceRecord event to be emitted after pop + // Expect a Store_SpliceDynamicData event to be emitted after pop vm.expectEmit(true, true, true, true); emit Store_SpliceDynamicData( tableId, keyTuple, + 1, uint48(secondDataBytes.length + thirdDataBytes.length - byteLengthToPop), uint40(byteLengthToPop), PackedCounterLib.pack(secondDataBytes.length, newDataBytes.length), diff --git a/packages/store/ts/storeEvents.ts b/packages/store/ts/storeEvents.ts index a5e4a833b6..7666e8e6ba 100644 --- a/packages/store/ts/storeEvents.ts +++ b/packages/store/ts/storeEvents.ts @@ -7,7 +7,7 @@ export const storeSpliceStaticDataEvent = "event Store_SpliceStaticData(bytes32 indexed tableId, bytes32[] keyTuple, uint48 start, bytes data)"; export const storeSpliceDynamicDataEvent = - "event Store_SpliceDynamicData(bytes32 indexed tableId, bytes32[] keyTuple, uint48 start, uint40 deleteCount, bytes32 encodedLengths, bytes data)"; + "event Store_SpliceDynamicData(bytes32 indexed tableId, bytes32[] keyTuple, uint8 dynamicFieldIndex, uint48 start, uint40 deleteCount, bytes32 encodedLengths, bytes data)"; export const storeDeleteRecordEvent = "event Store_DeleteRecord(bytes32 indexed tableId, bytes32[] keyTuple)"; diff --git a/packages/world-modules/gas-report.json b/packages/world-modules/gas-report.json index daf6dd1a9b..766f0c311f 100644 --- a/packages/world-modules/gas-report.json +++ b/packages/world-modules/gas-report.json @@ -75,31 +75,31 @@ "file": "test/KeysInTableModule.t.sol", "test": "testInstallComposite", "name": "install keys in table module", - "gasUsed": 1424316 + "gasUsed": 1424604 }, { "file": "test/KeysInTableModule.t.sol", "test": "testInstallGas", "name": "install keys in table module", - "gasUsed": 1424316 + "gasUsed": 1424604 }, { "file": "test/KeysInTableModule.t.sol", "test": "testInstallGas", "name": "set a record on a table with keysInTableModule installed", - "gasUsed": 154734 + "gasUsed": 155023 }, { "file": "test/KeysInTableModule.t.sol", "test": "testInstallSingleton", "name": "install keys in table module", - "gasUsed": 1424316 + "gasUsed": 1424604 }, { "file": "test/KeysInTableModule.t.sol", "test": "testSetAndDeleteRecordHookCompositeGas", "name": "install keys in table module", - "gasUsed": 1424316 + "gasUsed": 1424604 }, { "file": "test/KeysInTableModule.t.sol", @@ -111,13 +111,13 @@ "file": "test/KeysInTableModule.t.sol", "test": "testSetAndDeleteRecordHookCompositeGas", "name": "delete a composite record on a table with keysInTableModule installed", - "gasUsed": 145764 + "gasUsed": 147495 }, { "file": "test/KeysInTableModule.t.sol", "test": "testSetAndDeleteRecordHookGas", "name": "install keys in table module", - "gasUsed": 1424316 + "gasUsed": 1424604 }, { "file": "test/KeysInTableModule.t.sol", @@ -129,13 +129,13 @@ "file": "test/KeysInTableModule.t.sol", "test": "testSetAndDeleteRecordHookGas", "name": "delete a record on a table with keysInTableModule installed", - "gasUsed": 78999 + "gasUsed": 79576 }, { "file": "test/KeysWithValueModule.t.sol", "test": "testGetKeysWithValueGas", "name": "install keys with value module", - "gasUsed": 676402 + "gasUsed": 676690 }, { "file": "test/KeysWithValueModule.t.sol", @@ -153,25 +153,25 @@ "file": "test/KeysWithValueModule.t.sol", "test": "testInstall", "name": "install keys with value module", - "gasUsed": 676402 + "gasUsed": 676690 }, { "file": "test/KeysWithValueModule.t.sol", "test": "testInstall", "name": "set a record on a table with KeysWithValueModule installed", - "gasUsed": 132557 + "gasUsed": 132846 }, { "file": "test/KeysWithValueModule.t.sol", "test": "testSetAndDeleteRecordHook", "name": "install keys with value module", - "gasUsed": 676402 + "gasUsed": 676690 }, { "file": "test/KeysWithValueModule.t.sol", "test": "testSetAndDeleteRecordHook", "name": "change a record on a table with KeysWithValueModule installed", - "gasUsed": 101222 + "gasUsed": 101800 }, { "file": "test/KeysWithValueModule.t.sol", @@ -183,19 +183,19 @@ "file": "test/KeysWithValueModule.t.sol", "test": "testSetField", "name": "install keys with value module", - "gasUsed": 676402 + "gasUsed": 676690 }, { "file": "test/KeysWithValueModule.t.sol", "test": "testSetField", "name": "set a field on a table with KeysWithValueModule installed", - "gasUsed": 143767 + "gasUsed": 144056 }, { "file": "test/KeysWithValueModule.t.sol", "test": "testSetField", "name": "change a field on a table with KeysWithValueModule installed", - "gasUsed": 108454 + "gasUsed": 108743 }, { "file": "test/query.t.sol", diff --git a/packages/world/gas-report.json b/packages/world/gas-report.json index 38c3e324a1..aca370eb35 100644 --- a/packages/world/gas-report.json +++ b/packages/world/gas-report.json @@ -57,13 +57,13 @@ "file": "test/Factories.t.sol", "test": "testCreate2Factory", "name": "deploy contract via Create2", - "gasUsed": 4609895 + "gasUsed": 4612103 }, { "file": "test/Factories.t.sol", "test": "testWorldFactoryGas", "name": "deploy world via WorldFactory", - "gasUsed": 12694691 + "gasUsed": 12696900 }, { "file": "test/World.t.sol", @@ -99,7 +99,7 @@ "file": "test/World.t.sol", "test": "testPushToDynamicField", "name": "Push data to the table", - "gasUsed": 85359 + "gasUsed": 85647 }, { "file": "test/World.t.sol", @@ -165,25 +165,25 @@ "file": "test/WorldDynamicUpdate.t.sol", "test": "testPopFromDynamicField", "name": "pop 1 address (cold)", - "gasUsed": 25146 + "gasUsed": 25434 }, { "file": "test/WorldDynamicUpdate.t.sol", "test": "testPopFromDynamicField", "name": "pop 1 address (warm)", - "gasUsed": 12292 + "gasUsed": 12580 }, { "file": "test/WorldDynamicUpdate.t.sol", "test": "testSpliceDynamicData", "name": "update in field 1 item (cold)", - "gasUsed": 25506 + "gasUsed": 25794 }, { "file": "test/WorldDynamicUpdate.t.sol", "test": "testSpliceDynamicData", "name": "update in field 1 item (warm)", - "gasUsed": 12707 + "gasUsed": 12995 }, { "file": "test/WorldResourceId.t.sol", diff --git a/test-data/world-logs.json b/test-data/world-logs.json index 0763e40b09..8a5fa36797 100644 --- a/test-data/world-logs.json +++ b/test-data/world-logs.json @@ -1,1974 +1,2058 @@ [ { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", - "0x7462776f726c64000000000000000000436f72654d6f64756c65416464726573" + "0x7462776f726c64000000000000000000496e69744d6f64756c65416464726573" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140e6f747adbb2becc90e8e059e173dbfb9770b832000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "data": "0x00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014c19519644c381abe163cab1c4ab66c3c91e508a5000000000000000000000000", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x2", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x746273746f72650000000000000000005461626c657300000000000000000000" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000022000000000a0000000000002c000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000001746273746f72650000000000000000005461626c65730000000000000000000000000000000000000000000000000000000000000000000000000000000000600060030220202000000000000000000000000000000000000000000000000000002001005f000000000000000000000000000000000000000000000000000000006003025f5f5fc4c4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000077461626c654964000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000000b6669656c644c61796f757400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096b6579536368656d610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b76616c7565536368656d610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012616269456e636f6465644b65794e616d657300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014616269456e636f6465644669656c644e616d6573000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x3", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x746273746f72650000000000000000005461626c657300000000000000000000" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000a000000000a00000000000014000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000001746273746f72650000000000000000005265736f75726365496473000000000000000000000000000000000000000000000000000000000000000000000000600001010001000000000000000000000000000000000000000000000000000000002001005f00000000000000000000000000000000000000000000000000000000010100600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000a7265736f7572636549640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000066578697374730000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x4", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001746273746f72650000000000000000005461626c65730000000000000000000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x5", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001746273746f72650000000000000000005265736f75726365496473000000000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x6", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x746273746f72650000000000000000005461626c657300000000000000000000" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000a000000000a00000000000014000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000001746273746f726500000000000000000053746f7265486f6f6b7300000000000000000000000000000000000000000000000000000000000000000000000000600000000100000000000000000000000000000000000000000000000000000000002001005f00000000000000000000000000000000000000000000000000000000000001b6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000077461626c654964000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000005686f6f6b73000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x7", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001746273746f726500000000000000000053746f7265486f6f6b7300000000000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x8", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x746273746f72650000000000000000005461626c657300000000000000000000" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000a000000000a000000000000140000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000017462776f726c640000000000000000004e616d6573706163654f776e6572000000000000000000000000000000000000000000000000000000000000000000600014010014000000000000000000000000000000000000000000000000000000002001005f00000000000000000000000000000000000000000000000000000000140100610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000b6e616d657370616365496400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000056f776e6572000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x9", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000017462776f726c640000000000000000004e616d6573706163654f776e6572000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0xa", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x746273746f72650000000000000000005461626c657300000000000000000000" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000a000000000a000000000000140000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000017462776f726c6400000000000000000042616c616e636573000000000000000000000000000000000000000000000000000000000000000000000000000000600020010020000000000000000000000000000000000000000000000000000000002001005f000000000000000000000000000000000000000000000000000000002001001f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000b6e616d6573706163654964000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000762616c616e636500000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0xb", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000017462776f726c6400000000000000000042616c616e636573000000000000000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0xc", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x746273746f72650000000000000000005461626c657300000000000000000000" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000a00000000100000000000001a0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000017462776f726c64000000000000000000496e7374616c6c65644d6f64756c65730000000000000000000000000000000000000000000000000000000000000060000101000100000000000000000000000000000000000000000000000000000000340200615f0000000000000000000000000000000000000000000000000000000101006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000d6d6f64756c654164647265737300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d617267756d656e74734861736800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000b6973496e7374616c6c6564000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0xd", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000017462776f726c64000000000000000000496e7374616c6c65644d6f64756c657300000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0xe", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x746273746f72650000000000000000005461626c657300000000000000000000" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000a00000000100000000000001a0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000017462776f726c640000000000000000005573657244656c65676174696f6e436f000000000000000000000000000000000000000000000000000000000000006000200100200000000000000000000000000000000000000000000000000000000028020061610000000000000000000000000000000000000000000000000000002001005f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000964656c656761746f720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000964656c6567617465650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001364656c65676174696f6e436f6e74726f6c496400000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0xf", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000017462776f726c640000000000000000005573657244656c65676174696f6e436f00000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x10", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x746273746f72650000000000000000005461626c657300000000000000000000" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000a000000000a000000000000140000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000017462776f726c640000000000000000004e616d65737061636544656c6567617400000000000000000000000000000000000000000000000000000000000000600020010020000000000000000000000000000000000000000000000000000000002001005f000000000000000000000000000000000000000000000000000000002001005f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000b6e616d6573706163654964000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001364656c65676174696f6e436f6e74726f6c496400000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x11", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000017462776f726c640000000000000000004e616d65737061636544656c6567617400000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x12", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x746273746f72650000000000000000005461626c657300000000000000000000" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000a00000000100000000000001a0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000017462776f726c640000000000000000005265736f75726365416363657373000000000000000000000000000000000000000000000000000000000000000000600001010001000000000000000000000000000000000000000000000000000000003402005f610000000000000000000000000000000000000000000000000000000101006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000a7265736f75726365496400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000663616c6c6572000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000066163636573730000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x13", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000017462776f726c640000000000000000005265736f75726365416363657373000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x14", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x746273746f72650000000000000000005461626c657300000000000000000000" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000010000000000a0000000000001a0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000017462776f726c6400000000000000000053797374656d7300000000000000000000000000000000000000000000000000000000000000000000000000000000600015020014010000000000000000000000000000000000000000000000000000002001005f000000000000000000000000000000000000000000000000000000001502006160000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000873797374656d49640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000673797374656d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c7075626c69634163636573730000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x15", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000017462776f726c6400000000000000000053797374656d7300000000000000000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x16", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x746273746f72650000000000000000005461626c657300000000000000000000" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000010000000000a0000000000001a0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000017462776f726c6400000000000000000046756e6374696f6e53656c6563746f72000000000000000000000000000000000000000000000000000000000000006000240200200400000000000000000000000000000000000000000000000000000004010043000000000000000000000000000000000000000000000000000000002402005f43000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001066756e6374696f6e53656c6563746f72000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000873797374656d4964000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001673797374656d46756e6374696f6e53656c6563746f7200000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x17", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000017462776f726c6400000000000000000046756e6374696f6e53656c6563746f7200000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x18", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x746273746f72650000000000000000005461626c657300000000000000000000" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000a000000000a000000000000140000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000016f74776f726c6400000000000000000046756e6374696f6e5369676e6174757200000000000000000000000000000000000000000000000000000000000000600000000100000000000000000000000000000000000000000000000000000000000401004300000000000000000000000000000000000000000000000000000000000001c50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001066756e6374696f6e53656c6563746f7200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001166756e6374696f6e5369676e6174757265000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x19", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000016f74776f726c6400000000000000000046756e6374696f6e5369676e6174757200000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x1a", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x746273746f72650000000000000000005461626c657300000000000000000000" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000a000000000a000000000000140000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000017462776f726c6400000000000000000053797374656d486f6f6b73000000000000000000000000000000000000000000000000000000000000000000000000600000000100000000000000000000000000000000000000000000000000000000002001005f00000000000000000000000000000000000000000000000000000000000001b60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000873797374656d4964000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000576616c7565000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x1b", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000017462776f726c6400000000000000000053797374656d486f6f6b73000000000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x1c", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x746273746f72650000000000000000005461626c657300000000000000000000" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000a000000000a000000000000140000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000017462776f726c6400000000000000000053797374656d52656769737472790000000000000000000000000000000000000000000000000000000000000000006000200100200000000000000000000000000000000000000000000000000000000014010061000000000000000000000000000000000000000000000000000000002001005f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000673797374656d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000873797374656d4964000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x1d", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000017462776f726c6400000000000000000053797374656d5265676973747279000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x1e", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x746273746f72650000000000000000005461626c657300000000000000000000" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000a00000000040000000000000e0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000017462776f726c64000000000000000000436f72654d6f64756c65416464726573000000000000000000000000000000000000000000000000000000000000006000140100140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001401006100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000576616c7565000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000a00000000040000000000000e0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000017462776f726c64000000000000000000496e69744d6f64756c65416464726573000000000000000000000000000000000000000000000000000000000000006000140100140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001401006100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000576616c7565000000000000000000000000000000000000000000000000000000", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x1f", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000017462776f726c64000000000000000000436f72654d6f64756c6541646472657300000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000017462776f726c64000000000000000000496e69744d6f64756c6541646472657300000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x20", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000016e7300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x21", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x7462776f726c640000000000000000004e616d6573706163654f776e65720000" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000016e730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014ab499ec7ff665f8af662bb698f993c3e4089677c000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000016e7300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140c70ac0d3dbe7ea7f0eb625c65c1092b8bb415c8000000000000000000000000", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x22", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x7462776f726c640000000000000000005265736f757263654163636573730000" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000026e73000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab499ec7ff665f8af662bb698f993c3e4089677c00000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000026e730000000000000000000000000000000000000000000000000000000000000000000000000000000000000c70ac0d3dbe7ea7f0eb625c65c1092b8bb415c800000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x23", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000016e7373746f72650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x24", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x7462776f726c640000000000000000004e616d6573706163654f776e65720000" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000016e7373746f7265000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014ab499ec7ff665f8af662bb698f993c3e4089677c000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000016e7373746f72650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140c70ac0d3dbe7ea7f0eb625c65c1092b8bb415c8000000000000000000000000", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x25", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x7462776f726c640000000000000000005265736f757263654163636573730000" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000026e7373746f726500000000000000000000000000000000000000000000000000000000000000000000000000ab499ec7ff665f8af662bb698f993c3e4089677c00000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000026e7373746f7265000000000000000000000000000000000000000000000000000000000000000000000000000c70ac0d3dbe7ea7f0eb625c65c1092b8bb415c800000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x26", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000016e73776f726c640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x27", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x7462776f726c640000000000000000004e616d6573706163654f776e65720000" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000016e73776f726c64000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014ab499ec7ff665f8af662bb698f993c3e4089677c000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000016e73776f726c640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140c70ac0d3dbe7ea7f0eb625c65c1092b8bb415c8000000000000000000000000", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x28", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x7462776f726c640000000000000000005265736f757263654163636573730000" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000026e73776f726c6400000000000000000000000000000000000000000000000000000000000000000000000000ab499ec7ff665f8af662bb698f993c3e4089677c00000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000026e73776f726c64000000000000000000000000000000000000000000000000000000000000000000000000000c70ac0d3dbe7ea7f0eb625c65c1092b8bb415c800000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x29", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001737900000000000000000000000000004163636573734d616e6167656d656e7400000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x2a", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000053797374656d73000000000000000000" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000001737900000000000000000000000000004163636573734d616e6167656d656e74000000000000000000000000000000000000000000000000000000000000001518242f933067b90541fc7579b0c68b27de12edec0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000001737900000000000000000000000000004163636573734d616e6167656d656e74000000000000000000000000000000000000000000000000000000000000001517ffdeff94ed0b80c493a179d4b3b09d6d71f6270100000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x2b", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x7462776f726c6400000000000000000053797374656d52656769737472790000" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000018242f933067b90541fc7579b0c68b27de12edec0000000000000000000000000000000000000000000000000000000000000020737900000000000000000000000000004163636573734d616e6167656d656e74", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000017ffdeff94ed0b80c493a179d4b3b09d6d71f6270000000000000000000000000000000000000000000000000000000000000020737900000000000000000000000000004163636573734d616e6167656d656e74", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x2c", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x7462776f726c640000000000000000005265736f757263654163636573730000" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000026e7300000000000000000000000000000000000000000000000000000000000000000000000000000000000018242f933067b90541fc7579b0c68b27de12edec00000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000026e7300000000000000000000000000000000000000000000000000000000000000000000000000000000000017ffdeff94ed0b80c493a179d4b3b09d6d71f62700000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x2d", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000017379000000000000000000000000000042616c616e63655472616e736665720000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x2e", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000053797374656d73000000000000000000" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000017379000000000000000000000000000042616c616e63655472616e736665720000000000000000000000000000000000000000000000000000000000000000152d66a7cfdfa67f7ecb26b7ed2796062d6e5b91b70100000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000017379000000000000000000000000000042616c616e63655472616e73666572000000000000000000000000000000000000000000000000000000000000000015a274b9a7e743cd8df3c6fd0abd47ed55fc943bc30100000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x2f", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x7462776f726c6400000000000000000053797374656d52656769737472790000" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000010000000000000000000000002d66a7cfdfa67f7ecb26b7ed2796062d6e5b91b700000000000000000000000000000000000000000000000000000000000000207379000000000000000000000000000042616c616e63655472616e7366657200", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a274b9a7e743cd8df3c6fd0abd47ed55fc943bc300000000000000000000000000000000000000000000000000000000000000207379000000000000000000000000000042616c616e63655472616e7366657200", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x30", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x7462776f726c640000000000000000005265736f757263654163636573730000" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000026e730000000000000000000000000000000000000000000000000000000000000000000000000000000000002d66a7cfdfa67f7ecb26b7ed2796062d6e5b91b700000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000026e73000000000000000000000000000000000000000000000000000000000000000000000000000000000000a274b9a7e743cd8df3c6fd0abd47ed55fc943bc300000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x31", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000173790000000000000000000000000000426174636843616c6c0000000000000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x32", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000053797374656d73000000000000000000" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000173790000000000000000000000000000426174636843616c6c000000000000000000000000000000000000000000000000000000000000000000000000000015da6286d0afa85e6fa643c2b39cfda6c5e82e50420100000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000173790000000000000000000000000000426174636843616c6c00000000000000000000000000000000000000000000000000000000000000000000000000001553e5c08d82a377167069ade46d087ab7535386080100000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x33", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x7462776f726c6400000000000000000053797374656d52656769737472790000" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000da6286d0afa85e6fa643c2b39cfda6c5e82e5042000000000000000000000000000000000000000000000000000000000000002073790000000000000000000000000000426174636843616c6c00000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000053e5c08d82a377167069ade46d087ab753538608000000000000000000000000000000000000000000000000000000000000002073790000000000000000000000000000426174636843616c6c00000000000000", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x34", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x7462776f726c640000000000000000005265736f757263654163636573730000" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000026e73000000000000000000000000000000000000000000000000000000000000000000000000000000000000da6286d0afa85e6fa643c2b39cfda6c5e82e504200000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000026e7300000000000000000000000000000000000000000000000000000000000000000000000000000000000053e5c08d82a377167069ade46d087ab75353860800000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x35", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000173790000000000000000000000000000436f7265526567697374726174696f6e00000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000173790000000000000000000000000000526567697374726174696f6e0000000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x36", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000053797374656d73000000000000000000" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000173790000000000000000000000000000436f7265526567697374726174696f6e0000000000000000000000000000000000000000000000000000000000000015b7cc2238976ea5661757b7d5bdb36114eec368d40100000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000173790000000000000000000000000000526567697374726174696f6e000000000000000000000000000000000000000000000000000000000000000000000015176906298819f6778127ad98261f778db597af560100000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x37", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x7462776f726c6400000000000000000053797374656d52656769737472790000" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000b7cc2238976ea5661757b7d5bdb36114eec368d4000000000000000000000000000000000000000000000000000000000000002073790000000000000000000000000000436f7265526567697374726174696f6e", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000176906298819f6778127ad98261f778db597af56000000000000000000000000000000000000000000000000000000000000002073790000000000000000000000000000526567697374726174696f6e00000000", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x38", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x7462776f726c640000000000000000005265736f757263654163636573730000" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000026e73000000000000000000000000000000000000000000000000000000000000000000000000000000000000b7cc2238976ea5661757b7d5bdb36114eec368d400000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000026e73000000000000000000000000000000000000000000000000000000000000000000000000000000000000176906298819f6778127ad98261f778db597af5600000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x39", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000140554c3a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024737900000000000000000000000000004163636573734d616e6167656d656e7440554c3a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x3a", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000001c0000000000001c00000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000140554c3a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c6772616e7441636365737328627974657333322c616464726573732900000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x3b", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000018d53b208000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024737900000000000000000000000000004163636573734d616e6167656d656e748d53b208000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x3c", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000001d0000000000001d00000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000018d53b208000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d7265766f6b6541636365737328627974657333322c6164647265737329000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x3d", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001ef5d6bbb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024737900000000000000000000000000004163636573734d616e6167656d656e74ef5d6bbb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x3e", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000220000000000002200000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001ef5d6bbb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000227472616e736665724f776e65727368697028627974657333322c6164647265737329000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x3f", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001219adc2e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024737900000000000000000000000000004163636573734d616e6167656d656e74219adc2e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x40", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000001a0000000000001a00000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001219adc2e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a72656e6f756e63654f776e657273686970286279746573333229000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x41", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001c9c85a600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000247379000000000000000000000000000042616c616e63655472616e7366657200c9c85a60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x42", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000330000000000003300000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001c9c85a6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000337472616e7366657242616c616e6365546f4e616d65737061636528627974657333322c627974657333322c75696e743235362900000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x43", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000145afd1990000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000247379000000000000000000000000000042616c616e63655472616e736665720045afd199000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x44", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000310000000000003100000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000145afd19900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000317472616e7366657242616c616e6365546f4164647265737328627974657333322c616464726573732c75696e7432353629000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x45", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001ce5e8dd900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002473790000000000000000000000000000426174636843616c6c00000000000000ce5e8dd9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x46", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000001c0000000000001c00000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001ce5e8dd9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c626174636843616c6c2828627974657333322c6279746573295b5d2900000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x47", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000018fc8cf7e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002473790000000000000000000000000000426174636843616c6c000000000000008fc8cf7e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x48", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000280000000000002800000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000018fc8cf7e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028626174636843616c6c46726f6d2828616464726573732c627974657333322c6279746573295b5d29000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x49", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000018da798da00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002473790000000000000000000000000000436f7265526567697374726174696f6e8da798da000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000018da798da00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002473790000000000000000000000000000526567697374726174696f6e000000008da798da000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x4a", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000001c0000000000001c00000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000018da798da000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c696e7374616c6c4d6f64756c6528616464726573732c62797465732900000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x4b", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000010ba51f4900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002473790000000000000000000000000000436f7265526567697374726174696f6e0ba51f49000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000010ba51f4900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002473790000000000000000000000000000526567697374726174696f6e000000000ba51f49000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x4c", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000400000000000004000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000010ba51f49000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004072656769737465725461626c6528627974657333322c627974657333322c627974657333322c627974657333322c737472696e675b5d2c737472696e675b5d29", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x4d", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001530f4b6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002473790000000000000000000000000000436f7265526567697374726174696f6e530f4b60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001530f4b6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002473790000000000000000000000000000526567697374726174696f6e00000000530f4b60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x4e", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000280000000000002800000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001530f4b600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028726567697374657253746f7265486f6f6b28627974657333322c616464726573732c75696e743829000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x4f", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000010560912900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002473790000000000000000000000000000436f7265526567697374726174696f6e05609129000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000010560912900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002473790000000000000000000000000000526567697374726174696f6e0000000005609129000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x50", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000240000000000002400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001056091290000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024756e726567697374657253746f7265486f6f6b28627974657333322c616464726573732900000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x51", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001b29e408900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002473790000000000000000000000000000436f7265526567697374726174696f6eb29e4089000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001b29e408900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002473790000000000000000000000000000526567697374726174696f6e00000000b29e4089000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x52", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000001a0000000000001a00000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001b29e4089000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a72656769737465724e616d657370616365286279746573333229000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x53", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001d5f8337f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002473790000000000000000000000000000436f7265526567697374726174696f6ed5f8337f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001d5f8337f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002473790000000000000000000000000000526567697374726174696f6e00000000d5f8337f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x54", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000290000000000002900000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001d5f8337f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029726567697374657253797374656d486f6f6b28627974657333322c616464726573732c75696e7438290000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x55", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001a92813ad00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002473790000000000000000000000000000436f7265526567697374726174696f6ea92813ad000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001a92813ad00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002473790000000000000000000000000000526567697374726174696f6e00000000a92813ad000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x56", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000250000000000002500000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001a92813ad0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025756e726567697374657253797374656d486f6f6b28627974657333322c6164647265737329000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x57", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000013350b6a900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002473790000000000000000000000000000436f7265526567697374726174696f6e3350b6a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000013350b6a900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002473790000000000000000000000000000526567697374726174696f6e000000003350b6a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x58", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000240000000000002400000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000013350b6a90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024726567697374657253797374656d28627974657333322c616464726573732c626f6f6c2900000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x59", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000126d9810200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002473790000000000000000000000000000436f7265526567697374726174696f6e26d98102000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000126d9810200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002473790000000000000000000000000000526567697374726174696f6e0000000026d98102000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x5a", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000280000000000002800000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000126d981020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028726567697374657246756e6374696f6e53656c6563746f7228627974657333322c737472696e6729000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x5b", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001742d611800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002473790000000000000000000000000000436f7265526567697374726174696f6e742d6118000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001742d611800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002473790000000000000000000000000000526567697374726174696f6e00000000742d6118000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x5c", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000330000000000003300000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001742d611800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000337265676973746572526f6f7446756e6374696f6e53656c6563746f7228627974657333322c737472696e672c6279746573342900000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x5d", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000011d2257ba00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002473790000000000000000000000000000436f7265526567697374726174696f6e1d2257ba000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000011d2257ba00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002473790000000000000000000000000000526567697374726174696f6e000000001d2257ba000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x5e", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000290000000000002900000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000011d2257ba0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029726567697374657244656c65676174696f6e28616464726573732c627974657333322c6279746573290000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x5f", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001cdc938c500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002473790000000000000000000000000000436f7265526567697374726174696f6ecdc938c5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001cdc938c500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002473790000000000000000000000000000526567697374726174696f6e00000000cdc938c5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x60", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000001d0000000000001d00000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001cdc938c5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d756e726567697374657244656c65676174696f6e286164647265737329000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x61", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001bfdfaff700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002473790000000000000000000000000000436f7265526567697374726174696f6ebfdfaff7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001bfdfaff700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002473790000000000000000000000000000526567697374726174696f6e00000000bfdfaff7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x62", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000320000000000003200000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001bfdfaff7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003272656769737465724e616d65737061636544656c65676174696f6e28627974657333322c627974657333322c6279746573290000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x63", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001aa66e9c800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002473790000000000000000000000000000436f7265526567697374726174696f6eaa66e9c8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001aa66e9c800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002473790000000000000000000000000000526567697374726174696f6e00000000aa66e9c8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x64", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000260000000000002600000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001aa66e9c80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026756e72656769737465724e616d65737061636544656c65676174696f6e2862797465733332290000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x65", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x7462776f726c64000000000000000000496e7374616c6c65644d6f64756c6573" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e6f747adbb2becc90e8e059e173dbfb9770b832c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c19519644c381abe163cab1c4ab66c3c91e508a5c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x66", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x7462776f726c640000000000000000004e616d6573706163654f776e65720000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000016e730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014f39fd6e51aad88f6f4ce6ab8827279cfffb92266000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x67", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x0e1f72f429eb97e64878619984a91e687ae91610348b9ff4216782cc96e49d07", "0x7462776f726c640000000000000000005265736f757263654163636573730000" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000026e73000000000000000000000000000000000000000000000000000000000000000000000000000000000000ab499ec7ff665f8af662bb698f993c3e4089677c", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "data": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000026e730000000000000000000000000000000000000000000000000000000000000000000000000000000000000c70ac0d3dbe7ea7f0eb625c65c1092b8bb415c8", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x68", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x7462776f726c640000000000000000005265736f757263654163636573730000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000026e73000000000000000000000000000000000000000000000000000000000000000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb9226600000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xed955a8c4e8b5367f863084fcd7fb1736bff1a1d986f2748c7e1ec12583d33b2", - "blockNumber": "0xa", - "transactionHash": "0x78ac8075a13cee0e6dbec92687a2e15e4245c0d8778efb176ac3d23255fc0d24", + "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", + "blockNumber": "0xe", + "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", "transactionIndex": "0x0", "logIndex": "0x69", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x746273746f72650000000000000000005461626c657300000000000000000000" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000a000000000a00000000000014000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000001746200000000000000000000000000004e756d626572000000000000000000000000000000000000000000000000000000000000000000000000000000000060000401000400000000000000000000000000000000000000000000000000000000040100030000000000000000000000000000000000000000000000000000000004010003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000036b65790000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000576616c7565000000000000000000000000000000000000000000000000000000", - "blockHash": "0xdcb1d7c4748d634acfe7bf6f28b8c8716275b518ae68151eae82c1d2c28513b4", - "blockNumber": "0xe", - "transactionHash": "0x5da77c8f3a4ac3f6d74a8ff385d0bd5e238f8a4c6049c2bd77d5e960008bf4fa", + "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", + "blockNumber": "0x13", + "transactionHash": "0x7d1ca536639b7aaa0b701a596940915d537e4cc164169a513816f540956a0231", "transactionIndex": "0x0", "logIndex": "0x0", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001746200000000000000000000000000004e756d6265720000000000000000000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xdcb1d7c4748d634acfe7bf6f28b8c8716275b518ae68151eae82c1d2c28513b4", - "blockNumber": "0xe", - "transactionHash": "0x5da77c8f3a4ac3f6d74a8ff385d0bd5e238f8a4c6049c2bd77d5e960008bf4fa", + "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", + "blockNumber": "0x13", + "transactionHash": "0x7d1ca536639b7aaa0b701a596940915d537e4cc164169a513816f540956a0231", "transactionIndex": "0x0", "logIndex": "0x1", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x746273746f72650000000000000000005461626c657300000000000000000000" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000010000000000a0000000000001a00000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000174620000000000000000000000000000566563746f7200000000000000000000000000000000000000000000000000000000000000000000000000000000006000080200040400000000000000000000000000000000000000000000000000000004010003000000000000000000000000000000000000000000000000000000000802002323000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000036b6579000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001780000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017900000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xdcb1d7c4748d634acfe7bf6f28b8c8716275b518ae68151eae82c1d2c28513b4", - "blockNumber": "0xe", - "transactionHash": "0x9d8da04c9945c877b02bbb8a92a605d31ca819c867672df81b5966c37336871a", + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000a00000000040000000000000e0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000017462000000000000000000000000000053746174696341727261790000000000000000000000000000000000000000000000000000000000000000000000006000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000576616c7565000000000000000000000000000000000000000000000000000000", + "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", + "blockNumber": "0x13", + "transactionHash": "0x502d2b54c63a72846261cac29de33096bb03bedb11dc9d159a6a3fa908522155", "transactionIndex": "0x1", "logIndex": "0x2", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000174620000000000000000000000000000566563746f720000000000000000000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xdcb1d7c4748d634acfe7bf6f28b8c8716275b518ae68151eae82c1d2c28513b4", - "blockNumber": "0xe", - "transactionHash": "0x9d8da04c9945c877b02bbb8a92a605d31ca819c867672df81b5966c37336871a", + "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001746200000000000000000000000000005374617469634172726179000000000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", + "blockNumber": "0x13", + "transactionHash": "0x502d2b54c63a72846261cac29de33096bb03bedb11dc9d159a6a3fa908522155", "transactionIndex": "0x1", "logIndex": "0x3", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x746273746f72650000000000000000005461626c657300000000000000000000" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000a00000000160000000000002000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000174620000000000000000000000000000506f736974696f6e000000000000000000000000000000000000000000000000000000000000000000000000000000600014010014000000000000000000000000000000000000000000000000000000002803005f2323000000000000000000000000000000000000000000000000000014010061000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000047a6f6e650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000179000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000006706c617965720000000000000000000000000000000000000000000000000000", - "blockHash": "0xdcb1d7c4748d634acfe7bf6f28b8c8716275b518ae68151eae82c1d2c28513b4", - "blockNumber": "0xe", - "transactionHash": "0x1db3570387c93f3fac1c2cc0aaaa38147da7705363e19da78bb22d339b569253", + "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", + "blockNumber": "0x13", + "transactionHash": "0x6a91647b45ca2c19f29665ec44637e968c7d590bddd7c0361b70ca256cf89c19", "transactionIndex": "0x2", "logIndex": "0x4", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000174620000000000000000000000000000506f736974696f6e000000000000000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xdcb1d7c4748d634acfe7bf6f28b8c8716275b518ae68151eae82c1d2c28513b4", - "blockNumber": "0xe", - "transactionHash": "0x1db3570387c93f3fac1c2cc0aaaa38147da7705363e19da78bb22d339b569253", + "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", + "blockNumber": "0x13", + "transactionHash": "0x6a91647b45ca2c19f29665ec44637e968c7d590bddd7c0361b70ca256cf89c19", "transactionIndex": "0x2", "logIndex": "0x5", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x746273746f72650000000000000000005461626c657300000000000000000000" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000010000000001c0000000000002c000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000001746200000000000000000000000000004d756c74690000000000000000000000000000000000000000000000000000000000000000000000000000000000006000210200200100000000000000000000000000000000000000000000000000000034040003601f2e000000000000000000000000000000000000000000000000002102003f60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000016100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000162000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001630000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000036e756d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000576616c7565000000000000000000000000000000000000000000000000000000", - "blockHash": "0xdcb1d7c4748d634acfe7bf6f28b8c8716275b518ae68151eae82c1d2c28513b4", - "blockNumber": "0xe", - "transactionHash": "0xc06451dfd43d3f2330a9c2c46ab19971f819682381968ba8e573375822593208", + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000010000000000a0000000000001a00000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000174620000000000000000000000000000566563746f7200000000000000000000000000000000000000000000000000000000000000000000000000000000006000080200040400000000000000000000000000000000000000000000000000000004010003000000000000000000000000000000000000000000000000000000000802002323000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000036b6579000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001780000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017900000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", + "blockNumber": "0x13", + "transactionHash": "0x8e6c2dd33f3246a73bb9f0627a91dbf8ba931b30c9eb571c7feef1a713ac85e8", "transactionIndex": "0x3", "logIndex": "0x6", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001746200000000000000000000000000004d756c7469000000000000000000000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xdcb1d7c4748d634acfe7bf6f28b8c8716275b518ae68151eae82c1d2c28513b4", - "blockNumber": "0xe", - "transactionHash": "0xc06451dfd43d3f2330a9c2c46ab19971f819682381968ba8e573375822593208", + "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000174620000000000000000000000000000566563746f720000000000000000000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", + "blockNumber": "0x13", + "transactionHash": "0x8e6c2dd33f3246a73bb9f0627a91dbf8ba931b30c9eb571c7feef1a713ac85e8", "transactionIndex": "0x3", "logIndex": "0x7", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x746273746f72650000000000000000005461626c657300000000000000000000" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000a00000000040000000000000e000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000001746200000000000000000000000000004e756d6265724c697374000000000000000000000000000000000000000000000000000000000000000000000000006000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000576616c7565000000000000000000000000000000000000000000000000000000", - "blockHash": "0xdcb1d7c4748d634acfe7bf6f28b8c8716275b518ae68151eae82c1d2c28513b4", - "blockNumber": "0xe", - "transactionHash": "0xa6b0e49f5d14bc6fb37fa566d93539790ff5ac44b243073389482a29dae67e9c", + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000010000000001c0000000000002c000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000001746200000000000000000000000000004d756c74690000000000000000000000000000000000000000000000000000000000000000000000000000000000006000210200200100000000000000000000000000000000000000000000000000000034040003601f2e000000000000000000000000000000000000000000000000002102003f60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000016100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000162000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001630000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000036e756d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000576616c7565000000000000000000000000000000000000000000000000000000", + "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", + "blockNumber": "0x13", + "transactionHash": "0x881d327384530d5e2f1cffc4b1ce431f5d1dcb2eff6610332bf39f074c67a676", "transactionIndex": "0x4", "logIndex": "0x8", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001746200000000000000000000000000004e756d6265724c69737400000000000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xdcb1d7c4748d634acfe7bf6f28b8c8716275b518ae68151eae82c1d2c28513b4", - "blockNumber": "0xe", - "transactionHash": "0xa6b0e49f5d14bc6fb37fa566d93539790ff5ac44b243073389482a29dae67e9c", + "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001746200000000000000000000000000004d756c7469000000000000000000000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", + "blockNumber": "0x13", + "transactionHash": "0x881d327384530d5e2f1cffc4b1ce431f5d1dcb2eff6610332bf39f074c67a676", "transactionIndex": "0x4", "logIndex": "0x9", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x746273746f72650000000000000000005461626c657300000000000000000000" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000a00000000040000000000000e0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000017462000000000000000000000000000053746174696341727261790000000000000000000000000000000000000000000000000000000000000000000000006000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000576616c7565000000000000000000000000000000000000000000000000000000", - "blockHash": "0xdcb1d7c4748d634acfe7bf6f28b8c8716275b518ae68151eae82c1d2c28513b4", - "blockNumber": "0xe", - "transactionHash": "0xacc4c6ca9ddcee12c3ff65b101c5dca0393e74e1fe83bbe4e035a2eb46d43ceb", + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000a00000000040000000000000e000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000001746200000000000000000000000000004e756d6265724c697374000000000000000000000000000000000000000000000000000000000000000000000000006000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000576616c7565000000000000000000000000000000000000000000000000000000", + "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", + "blockNumber": "0x13", + "transactionHash": "0xe2067ab887d342682ef22bc82da1c7b85eb0530581c8d3aef889d380d3b3e821", "transactionIndex": "0x5", "logIndex": "0xa", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001746200000000000000000000000000005374617469634172726179000000000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xdcb1d7c4748d634acfe7bf6f28b8c8716275b518ae68151eae82c1d2c28513b4", - "blockNumber": "0xe", - "transactionHash": "0xacc4c6ca9ddcee12c3ff65b101c5dca0393e74e1fe83bbe4e035a2eb46d43ceb", + "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001746200000000000000000000000000004e756d6265724c69737400000000000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", + "blockNumber": "0x13", + "transactionHash": "0xe2067ab887d342682ef22bc82da1c7b85eb0530581c8d3aef889d380d3b3e821", "transactionIndex": "0x5", "logIndex": "0xb", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000173790000000000000000000000000000437573746f6d4572726f72735379737400000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xdcb1d7c4748d634acfe7bf6f28b8c8716275b518ae68151eae82c1d2c28513b4", - "blockNumber": "0xe", - "transactionHash": "0xa4538db8c7264b403a601cb29d231c32bbc7fb480b86387d36acdcb35e2988c1", + "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", + "blockNumber": "0x13", + "transactionHash": "0x79520ebbc3d83ac78ceb9547a7e995a35258dd4561e550ff701552a1c5c5a4fc", "transactionIndex": "0x6", "logIndex": "0xc", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000053797374656d73000000000000000000" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000173790000000000000000000000000000437573746f6d4572726f72735379737400000000000000000000000000000000000000000000000000000000000000155be1b01bf5f23dfdc282ed53e25d52ce2b366ee50100000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xdcb1d7c4748d634acfe7bf6f28b8c8716275b518ae68151eae82c1d2c28513b4", - "blockNumber": "0xe", - "transactionHash": "0xa4538db8c7264b403a601cb29d231c32bbc7fb480b86387d36acdcb35e2988c1", + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000173790000000000000000000000000000437573746f6d4572726f7273537973740000000000000000000000000000000000000000000000000000000000000015fc5b03fbae0bca9422ee706687c00072475a03370100000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", + "blockNumber": "0x13", + "transactionHash": "0x79520ebbc3d83ac78ceb9547a7e995a35258dd4561e550ff701552a1c5c5a4fc", "transactionIndex": "0x6", "logIndex": "0xd", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x7462776f726c6400000000000000000053797374656d52656769737472790000" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000010000000000000000000000005be1b01bf5f23dfdc282ed53e25d52ce2b366ee5000000000000000000000000000000000000000000000000000000000000002073790000000000000000000000000000437573746f6d4572726f727353797374", - "blockHash": "0xdcb1d7c4748d634acfe7bf6f28b8c8716275b518ae68151eae82c1d2c28513b4", - "blockNumber": "0xe", - "transactionHash": "0xa4538db8c7264b403a601cb29d231c32bbc7fb480b86387d36acdcb35e2988c1", + "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fc5b03fbae0bca9422ee706687c00072475a0337000000000000000000000000000000000000000000000000000000000000002073790000000000000000000000000000437573746f6d4572726f727353797374", + "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", + "blockNumber": "0x13", + "transactionHash": "0x79520ebbc3d83ac78ceb9547a7e995a35258dd4561e550ff701552a1c5c5a4fc", "transactionIndex": "0x6", "logIndex": "0xe", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x7462776f726c640000000000000000005265736f757263654163636573730000" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000026e730000000000000000000000000000000000000000000000000000000000000000000000000000000000005be1b01bf5f23dfdc282ed53e25d52ce2b366ee500000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xdcb1d7c4748d634acfe7bf6f28b8c8716275b518ae68151eae82c1d2c28513b4", - "blockNumber": "0xe", - "transactionHash": "0xa4538db8c7264b403a601cb29d231c32bbc7fb480b86387d36acdcb35e2988c1", + "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000026e73000000000000000000000000000000000000000000000000000000000000000000000000000000000000fc5b03fbae0bca9422ee706687c00072475a033700000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", + "blockNumber": "0x13", + "transactionHash": "0x79520ebbc3d83ac78ceb9547a7e995a35258dd4561e550ff701552a1c5c5a4fc", "transactionIndex": "0x6", "logIndex": "0xf", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001737900000000000000000000000000004e756d6265724c69737453797374656d00000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xdcb1d7c4748d634acfe7bf6f28b8c8716275b518ae68151eae82c1d2c28513b4", - "blockNumber": "0xe", - "transactionHash": "0x48505fd99d65bf295a705edf837d917feab3284320e818b80e3e3b7dd95cfde0", + "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", + "blockNumber": "0x13", + "transactionHash": "0x6d38cee4bcb86cc87787166548b30a4165ad21e6a4574f7593a942b9e5ca912a", "transactionIndex": "0x7", "logIndex": "0x10", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000053797374656d73000000000000000000" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000001737900000000000000000000000000004e756d6265724c69737453797374656d00000000000000000000000000000000000000000000000000000000000000155c8f4825e5f797a97f353b4243027adb0471d01c0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xdcb1d7c4748d634acfe7bf6f28b8c8716275b518ae68151eae82c1d2c28513b4", - "blockNumber": "0xe", - "transactionHash": "0x48505fd99d65bf295a705edf837d917feab3284320e818b80e3e3b7dd95cfde0", + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000001737900000000000000000000000000004e756d6265724c69737453797374656d0000000000000000000000000000000000000000000000000000000000000015457a739febe34229495ac45d6c884e5404b7002b0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", + "blockNumber": "0x13", + "transactionHash": "0x6d38cee4bcb86cc87787166548b30a4165ad21e6a4574f7593a942b9e5ca912a", "transactionIndex": "0x7", "logIndex": "0x11", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x7462776f726c6400000000000000000053797374656d52656769737472790000" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000010000000000000000000000005c8f4825e5f797a97f353b4243027adb0471d01c0000000000000000000000000000000000000000000000000000000000000020737900000000000000000000000000004e756d6265724c69737453797374656d", - "blockHash": "0xdcb1d7c4748d634acfe7bf6f28b8c8716275b518ae68151eae82c1d2c28513b4", - "blockNumber": "0xe", - "transactionHash": "0x48505fd99d65bf295a705edf837d917feab3284320e818b80e3e3b7dd95cfde0", + "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000457a739febe34229495ac45d6c884e5404b7002b0000000000000000000000000000000000000000000000000000000000000020737900000000000000000000000000004e756d6265724c69737453797374656d", + "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", + "blockNumber": "0x13", + "transactionHash": "0x6d38cee4bcb86cc87787166548b30a4165ad21e6a4574f7593a942b9e5ca912a", "transactionIndex": "0x7", "logIndex": "0x12", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x7462776f726c640000000000000000005265736f757263654163636573730000" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000026e730000000000000000000000000000000000000000000000000000000000000000000000000000000000005c8f4825e5f797a97f353b4243027adb0471d01c00000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xdcb1d7c4748d634acfe7bf6f28b8c8716275b518ae68151eae82c1d2c28513b4", - "blockNumber": "0xe", - "transactionHash": "0x48505fd99d65bf295a705edf837d917feab3284320e818b80e3e3b7dd95cfde0", + "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000026e73000000000000000000000000000000000000000000000000000000000000000000000000000000000000457a739febe34229495ac45d6c884e5404b7002b00000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", + "blockNumber": "0x13", + "transactionHash": "0x6d38cee4bcb86cc87787166548b30a4165ad21e6a4574f7593a942b9e5ca912a", "transactionIndex": "0x7", "logIndex": "0x13", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ - "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", - "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" + "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", + "0x746273746f72650000000000000000005265736f757263654964730000000000" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000015f644e3c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002473790000000000000000000000000000437573746f6d4572726f7273537973745f644e3c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xdcb1d7c4748d634acfe7bf6f28b8c8716275b518ae68151eae82c1d2c28513b4", - "blockNumber": "0xe", - "transactionHash": "0x4e029e63dfb042aee5f8e041c000dddd834b0c26ced7f25e0bd224a7b056cd07", + "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001737900000000000000000000000000004e756d62657253797374656d0000000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", + "blockNumber": "0x13", + "transactionHash": "0x4b2bdcf02ac7c041fbba6d803b14ca319d723a12d0c740ef12e101df7c25bda4", "transactionIndex": "0x8", "logIndex": "0x14", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", - "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" + "0x7462776f726c6400000000000000000053797374656d73000000000000000000" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000d0000000000000d00000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000015f644e3c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d737475622875696e743235362900000000000000000000000000000000000000", - "blockHash": "0xdcb1d7c4748d634acfe7bf6f28b8c8716275b518ae68151eae82c1d2c28513b4", - "blockNumber": "0xe", - "transactionHash": "0x4e029e63dfb042aee5f8e041c000dddd834b0c26ced7f25e0bd224a7b056cd07", + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000001737900000000000000000000000000004e756d62657253797374656d00000000000000000000000000000000000000000000000000000000000000000000001592ac32a7704741a284881aec75dceca7f1ce117c0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", + "blockNumber": "0x13", + "transactionHash": "0x4b2bdcf02ac7c041fbba6d803b14ca319d723a12d0c740ef12e101df7c25bda4", "transactionIndex": "0x8", "logIndex": "0x15", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "topics": [ + "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", + "0x7462776f726c6400000000000000000053797374656d52656769737472790000" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000092ac32a7704741a284881aec75dceca7f1ce117c0000000000000000000000000000000000000000000000000000000000000020737900000000000000000000000000004e756d62657253797374656d00000000", + "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", + "blockNumber": "0x13", + "transactionHash": "0x4b2bdcf02ac7c041fbba6d803b14ca319d723a12d0c740ef12e101df7c25bda4", + "transactionIndex": "0x8", + "logIndex": "0x16", + "removed": false + }, + { + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "topics": [ + "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", + "0x7462776f726c640000000000000000005265736f757263654163636573730000" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000026e7300000000000000000000000000000000000000000000000000000000000000000000000000000000000092ac32a7704741a284881aec75dceca7f1ce117c00000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", + "blockNumber": "0x13", + "transactionHash": "0x4b2bdcf02ac7c041fbba6d803b14ca319d723a12d0c740ef12e101df7c25bda4", + "transactionIndex": "0x8", + "logIndex": "0x17", + "removed": false + }, + { + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001f7f0e440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024737900000000000000000000000000004e756d6265724c69737453797374656df7f0e440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xdcb1d7c4748d634acfe7bf6f28b8c8716275b518ae68151eae82c1d2c28513b4", - "blockNumber": "0xe", - "transactionHash": "0xef1f98d4e32f36b8e37fb67ff4f2e9a478d9d82da77412eaaad365d983aebb76", + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001a4ece52c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024737900000000000000000000000000004e756d6265724c69737453797374656da4ece52c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", + "blockNumber": "0x13", + "transactionHash": "0x32b09727d06b40b8e6730d80c1dffdcf3a13dfa79277e6c2c00f53b65ee69e27", "transactionIndex": "0x9", - "logIndex": "0x16", + "logIndex": "0x18", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000c0000000000000c00000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001f7f0e440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c707573682875696e743332290000000000000000000000000000000000000000", - "blockHash": "0xdcb1d7c4748d634acfe7bf6f28b8c8716275b518ae68151eae82c1d2c28513b4", - "blockNumber": "0xe", - "transactionHash": "0xef1f98d4e32f36b8e37fb67ff4f2e9a478d9d82da77412eaaad365d983aebb76", + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000050000000000000500000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001a4ece52c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005706f702829000000000000000000000000000000000000000000000000000000", + "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", + "blockNumber": "0x13", + "transactionHash": "0x32b09727d06b40b8e6730d80c1dffdcf3a13dfa79277e6c2c00f53b65ee69e27", "transactionIndex": "0x9", - "logIndex": "0x17", + "logIndex": "0x19", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001a4ece52c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024737900000000000000000000000000004e756d6265724c69737453797374656da4ece52c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xdcb1d7c4748d634acfe7bf6f28b8c8716275b518ae68151eae82c1d2c28513b4", - "blockNumber": "0xe", - "transactionHash": "0x682f257345a96ad23747196ac1628a1e780724ab5179a2426b82e7fff952d841", + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000019dc63213000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024737900000000000000000000000000004e756d62657253797374656d000000009dc63213000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", + "blockNumber": "0x13", + "transactionHash": "0x14f569a9bd3be8c07ec272cb08c7137598e56b93f045e67c8820c1ac57e5f55e", "transactionIndex": "0xa", - "logIndex": "0x18", + "logIndex": "0x1a", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000050000000000000500000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001a4ece52c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005706f702829000000000000000000000000000000000000000000000000000000", - "blockHash": "0xdcb1d7c4748d634acfe7bf6f28b8c8716275b518ae68151eae82c1d2c28513b4", - "blockNumber": "0xe", - "transactionHash": "0x682f257345a96ad23747196ac1628a1e780724ab5179a2426b82e7fff952d841", + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000180000000000001800000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000019dc6321300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000187365744e756d6265722875696e7433322c75696e743332290000000000000000", + "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", + "blockNumber": "0x13", + "transactionHash": "0x14f569a9bd3be8c07ec272cb08c7137598e56b93f045e67c8820c1ac57e5f55e", "transactionIndex": "0xa", - "logIndex": "0x19", + "logIndex": "0x1b", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001306d61a5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024737900000000000000000000000000004e756d6265724c69737453797374656d306d61a5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xdcb1d7c4748d634acfe7bf6f28b8c8716275b518ae68151eae82c1d2c28513b4", - "blockNumber": "0xe", - "transactionHash": "0x0e5357575e3a2761d4c22ca264fe515259dcca5508b076c2a7180fc8a18da4be", + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001f7f0e440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024737900000000000000000000000000004e756d6265724c69737453797374656df7f0e440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", + "blockNumber": "0x13", + "transactionHash": "0x7a7cbaae3b678038c962b4004e12464d84d7744f47a45bf76d3817ee91f7c870", "transactionIndex": "0xb", - "logIndex": "0x1a", + "logIndex": "0x1c", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000180000000000001800000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001306d61a500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000187075736852616e67652875696e7433322c75696e743332290000000000000000", - "blockHash": "0xdcb1d7c4748d634acfe7bf6f28b8c8716275b518ae68151eae82c1d2c28513b4", - "blockNumber": "0xe", - "transactionHash": "0x0e5357575e3a2761d4c22ca264fe515259dcca5508b076c2a7180fc8a18da4be", + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000c0000000000000c00000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001f7f0e440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c707573682875696e743332290000000000000000000000000000000000000000", + "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", + "blockNumber": "0x13", + "transactionHash": "0x7a7cbaae3b678038c962b4004e12464d84d7744f47a45bf76d3817ee91f7c870", "transactionIndex": "0xb", - "logIndex": "0x1b", + "logIndex": "0x1d", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001b8a44c7c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024737900000000000000000000000000004e756d6265724c69737453797374656db8a44c7c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xdcb1d7c4748d634acfe7bf6f28b8c8716275b518ae68151eae82c1d2c28513b4", - "blockNumber": "0xe", - "transactionHash": "0x5645f9c587754f37e075c6f83ec0850acc7cfde2aa9fa0ff62b2d54c15a15cdc", + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000015f644e3c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002473790000000000000000000000000000437573746f6d4572726f7273537973745f644e3c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", + "blockNumber": "0x13", + "transactionHash": "0x0ed43af0aec46dd4631f4e4613b700573028e69cc93afa16344b1747be8d82bf", "transactionIndex": "0xc", - "logIndex": "0x1c", + "logIndex": "0x1e", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000d0000000000000d00000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001b8a44c7c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d7365742875696e7433325b5d2900000000000000000000000000000000000000", - "blockHash": "0xdcb1d7c4748d634acfe7bf6f28b8c8716275b518ae68151eae82c1d2c28513b4", - "blockNumber": "0xe", - "transactionHash": "0x5645f9c587754f37e075c6f83ec0850acc7cfde2aa9fa0ff62b2d54c15a15cdc", + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000d0000000000000d00000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000015f644e3c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d737475622875696e743235362900000000000000000000000000000000000000", + "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", + "blockNumber": "0x13", + "transactionHash": "0x0ed43af0aec46dd4631f4e4613b700573028e69cc93afa16344b1747be8d82bf", "transactionIndex": "0xc", - "logIndex": "0x1d", + "logIndex": "0x1f", + "removed": false + }, + { + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "topics": [ + "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", + "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" + ], + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001306d61a5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024737900000000000000000000000000004e756d6265724c69737453797374656d306d61a5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", + "blockNumber": "0x13", + "transactionHash": "0x1a7570a37fc004baf656efcfc272d7ec1ddead95ea07f7c46e920a28a059ba63", + "transactionIndex": "0xd", + "logIndex": "0x20", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "topics": [ + "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", + "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" + ], + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000180000000000001800000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001306d61a500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000187075736852616e67652875696e7433322c75696e743332290000000000000000", + "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", + "blockNumber": "0x13", + "transactionHash": "0x1a7570a37fc004baf656efcfc272d7ec1ddead95ea07f7c46e920a28a059ba63", + "transactionIndex": "0xd", + "logIndex": "0x21", + "removed": false + }, + { + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "topics": [ + "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", + "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" + ], + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001b8a44c7c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024737900000000000000000000000000004e756d6265724c69737453797374656db8a44c7c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", + "blockNumber": "0x13", + "transactionHash": "0xa5d2aa5e3a595ac68cd53babb7a7832caa1b95157c565179a63781ea9576b116", + "transactionIndex": "0xe", + "logIndex": "0x22", + "removed": false + }, + { + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "topics": [ + "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", + "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" + ], + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000d0000000000000d00000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001b8a44c7c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d7365742875696e7433325b5d2900000000000000000000000000000000000000", + "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", + "blockNumber": "0x13", + "transactionHash": "0xa5d2aa5e3a595ac68cd53babb7a7832caa1b95157c565179a63781ea9576b116", + "transactionIndex": "0xe", + "logIndex": "0x23", + "removed": false + }, + { + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x74620000000000000000000000000000506f736974696f6e0000000000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000036d617031000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000141804c8ab1f12e6bbf3894d4083f33e07309d1f38000000000000000000000000", - "blockHash": "0x2c916ca34b2178f418539f0ba1aab1edb3f1149b71e32d84dcfa56a4bc8ec865", - "blockNumber": "0x13", - "transactionHash": "0xb5e949304f68a79ec7d8db56ecf1a4d299bf567b3da87401cf84bb17ac07fbf8", + "blockHash": "0x8015b5b9d106defc77b86bc97cd614c29a24ce0a43165d0fd451089fbfda2e3b", + "blockNumber": "0x1b", + "transactionHash": "0x7b844b045cb5b6e8a957cddec58443a744c4c2cccdfbbc8383dae1fdefe37311", "transactionIndex": "0x0", "logIndex": "0x0", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x74620000000000000000000000000000506f736974696f6e0000000000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000036d617031000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00000000000000000000000000000000000000000000000000000000000000141804c8ab1f12e6bbf3894d4083f33e07309d1f38000000000000000000000000", - "blockHash": "0x2c916ca34b2178f418539f0ba1aab1edb3f1149b71e32d84dcfa56a4bc8ec865", - "blockNumber": "0x13", - "transactionHash": "0xc9db037088a1c79b92bb19034efa6bbf85055bebd7620306236bfa73fde8b3ca", + "blockHash": "0x8015b5b9d106defc77b86bc97cd614c29a24ce0a43165d0fd451089fbfda2e3b", + "blockNumber": "0x1b", + "transactionHash": "0x2c61ec56dcafc661c8299ab4ec4a06535612ed83ecc3b6cec54d1a0f3229eb1e", "transactionIndex": "0x1", "logIndex": "0x1", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x74620000000000000000000000000000506f736974696f6e0000000000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000036d617032000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9d00000000000000000000000000000000000000000000000000000000000000141804c8ab1f12e6bbf3894d4083f33e07309d1f38000000000000000000000000", - "blockHash": "0x2c916ca34b2178f418539f0ba1aab1edb3f1149b71e32d84dcfa56a4bc8ec865", - "blockNumber": "0x13", - "transactionHash": "0x567e9141054e1dc17ee30f24d3e0414e18a1373b7cba9f904e6b2e2821db9603", + "blockHash": "0x8015b5b9d106defc77b86bc97cd614c29a24ce0a43165d0fd451089fbfda2e3b", + "blockNumber": "0x1b", + "transactionHash": "0x9ab190e1d03aeaa0b30e715905a0f246b4539af1b3e6ae306330f651c934c77d", "transactionIndex": "0x2", "logIndex": "0x2", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x74620000000000000000000000000000506f736974696f6e0000000000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000036d617032000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006300000000000000000000000000000000000000000000000000000000000000141804c8ab1f12e6bbf3894d4083f33e07309d1f38000000000000000000000000", - "blockHash": "0x2c916ca34b2178f418539f0ba1aab1edb3f1149b71e32d84dcfa56a4bc8ec865", - "blockNumber": "0x13", - "transactionHash": "0xa30804e3205d1b8ed1103c69b89df51beb5cb08d680d5ff3efa9985aa31d1b15", + "blockHash": "0x8015b5b9d106defc77b86bc97cd614c29a24ce0a43165d0fd451089fbfda2e3b", + "blockNumber": "0x1b", + "transactionHash": "0x3d66c48cec11a2506597ade7e15f31526f0928f68f47552d82dca0b6e73d53a8", "transactionIndex": "0x3", "logIndex": "0x3", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x74620000000000000000000000000000506f736974696f6e0000000000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000036d617039390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063000000000000000000000000000000000000000000000000000000000000006300000000000000000000000000000000000000000000000000000000000000141804c8ab1f12e6bbf3894d4083f33e07309d1f38000000000000000000000000", - "blockHash": "0x2c916ca34b2178f418539f0ba1aab1edb3f1149b71e32d84dcfa56a4bc8ec865", - "blockNumber": "0x13", - "transactionHash": "0x6e221fee04f29ecd27d3451f81ca94b6f1f7edeab8b2265485e9405bb4095646", + "blockHash": "0x8015b5b9d106defc77b86bc97cd614c29a24ce0a43165d0fd451089fbfda2e3b", + "blockNumber": "0x1b", + "transactionHash": "0x19b831a3a61bad0a90621268b9c1d48f85bc8b1eb17848e09c812f5670bd5cd8", "transactionIndex": "0x4", "logIndex": "0x4", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ - "0xaa63765a776145e5e6492f471ae097dfed11cd57a61bc2679dd43180422385b4", + "0xfe158a7adba34e256807c8a149028d3162918713c3838afc643ce9f96716ebfd", "0x746200000000000000000000000000004e756d6265724c697374000000000000" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000400000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000001a400000000000000000000000000000000000000000000000000000000", - "blockHash": "0x774c68d62cc74642e14d9e4bfc651d312181251c44316e82ad4f54b432d36979", - "blockNumber": "0x14", - "transactionHash": "0xf656d463f1803ae537a29fb4944182f2afeac2d131f87736169822095e4c5cab", + "data": "0x00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000400000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000001a400000000000000000000000000000000000000000000000000000000", + "blockHash": "0x5eaefdb48fb1dcb49a67b1415153803c8bec7c9a66ea94588f353a100301e079", + "blockNumber": "0x1c", + "transactionHash": "0xe43823eb35b3ef60d905de57cd3315e117765e52402935e68bfa25a7da66c398", "transactionIndex": "0x0", "logIndex": "0x0", "removed": false }, { - "address": "0x2964af56c8aacde425978a28b018956d21cf50f0", + "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", "topics": [ - "0xaa63765a776145e5e6492f471ae097dfed11cd57a61bc2679dd43180422385b4", + "0xfe158a7adba34e256807c8a149028d3162918713c3838afc643ce9f96716ebfd", "0x746200000000000000000000000000004e756d6265724c697374000000000000" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000800000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000004500000000000000000000000000000000000000000000000000000000", - "blockHash": "0x774c68d62cc74642e14d9e4bfc651d312181251c44316e82ad4f54b432d36979", - "blockNumber": "0x14", - "transactionHash": "0xbe07bb451e34bc010d1c7908c14993617bce481cc93db0d88f85c40b10a048e0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000800000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000004500000000000000000000000000000000000000000000000000000000", + "blockHash": "0x5eaefdb48fb1dcb49a67b1415153803c8bec7c9a66ea94588f353a100301e079", + "blockNumber": "0x1c", + "transactionHash": "0xd38b3443be1cb921a936e71026316f5ee0a4be69f1b43be1068d7183f2efc566", "transactionIndex": "0x1", "logIndex": "0x1", "removed": false From 15d8c6af3feee89e370c9d9b975a7531865cf359 Mon Sep 17 00:00:00 2001 From: yonada Date: Thu, 22 Feb 2024 13:48:46 +0000 Subject: [PATCH 15/24] test(store-sync): add query benchmark, refactor test data scripts (#2228) --- .gitignore | 5 +- .../src/codegen/world/IVectorSystem.sol | 12 + .../contracts/src/codegen/world/IWorld.sol | 3 +- .../contracts/src/systems/VectorSystem.sol | 11 + ...records.ts => generate-bench-data-bulk.ts} | 12 +- .../test-data/generate-bench-data-query.ts | 42 + e2e/packages/test-data/generate-test-data.ts | 88 +- e2e/packages/test-data/generateLogs.ts | 31 +- e2e/packages/test-data/package.json | 5 +- .../store-sync/benchmarks/getRecord.bench.ts | 6 +- .../store-sync/benchmarks/getRecords.bench.ts | 6 +- packages/store-sync/benchmarks/query.bench.ts | 36 + .../benchmarks/storageAdapter.bench.ts | 6 +- .../createStorageAdapter.test.ts | 10 +- .../src/postgres/createStorageAdapter.test.ts | 6 +- .../src/sqlite/sqliteStorage.test.ts | 16 +- test-data/world-logs.json | 1330 +++++++++-------- 17 files changed, 880 insertions(+), 745 deletions(-) create mode 100644 e2e/packages/contracts/src/codegen/world/IVectorSystem.sol create mode 100644 e2e/packages/contracts/src/systems/VectorSystem.sol rename e2e/packages/test-data/{generate-test-data-records.ts => generate-bench-data-bulk.ts} (70%) create mode 100644 e2e/packages/test-data/generate-bench-data-query.ts create mode 100644 packages/store-sync/benchmarks/query.bench.ts diff --git a/.gitignore b/.gitignore index fcc67061e1..635ca8f18e 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,5 @@ templates/*/pnpm-lock.yaml .env -test-data/world-logs-10.json -test-data/world-logs-100.json -test-data/world-logs-1000.json +test-data/world-logs-bulk-*.json +test-data/world-logs-query.json diff --git a/e2e/packages/contracts/src/codegen/world/IVectorSystem.sol b/e2e/packages/contracts/src/codegen/world/IVectorSystem.sol new file mode 100644 index 0000000000..6b3b91b89c --- /dev/null +++ b/e2e/packages/contracts/src/codegen/world/IVectorSystem.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.24; + +/* Autogenerated file. Do not edit manually. */ + +/** + * @title IVectorSystem + * @dev This interface is automatically generated from the corresponding system contract. Do not edit manually. + */ +interface IVectorSystem { + function setVector(uint32 key, int32 x, int32 y) external; +} diff --git a/e2e/packages/contracts/src/codegen/world/IWorld.sol b/e2e/packages/contracts/src/codegen/world/IWorld.sol index 8cb49f1164..6865aa9033 100644 --- a/e2e/packages/contracts/src/codegen/world/IWorld.sol +++ b/e2e/packages/contracts/src/codegen/world/IWorld.sol @@ -8,6 +8,7 @@ import { IBaseWorld } from "@latticexyz/world/src/codegen/interfaces/IBaseWorld. import { ICustomErrorsSystem } from "./ICustomErrorsSystem.sol"; import { INumberListSystem } from "./INumberListSystem.sol"; import { INumberSystem } from "./INumberSystem.sol"; +import { IVectorSystem } from "./IVectorSystem.sol"; /** * @title IWorld @@ -15,6 +16,6 @@ import { INumberSystem } from "./INumberSystem.sol"; * that are dynamically registered in the World during deployment. * @dev This is an autogenerated file; do not edit manually. */ -interface IWorld is IBaseWorld, ICustomErrorsSystem, INumberListSystem, INumberSystem { +interface IWorld is IBaseWorld, ICustomErrorsSystem, INumberListSystem, INumberSystem, IVectorSystem { } diff --git a/e2e/packages/contracts/src/systems/VectorSystem.sol b/e2e/packages/contracts/src/systems/VectorSystem.sol new file mode 100644 index 0000000000..09531f02ea --- /dev/null +++ b/e2e/packages/contracts/src/systems/VectorSystem.sol @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.24; + +import { System } from "@latticexyz/world/src/System.sol"; +import { Vector } from "../codegen/index.sol"; + +contract VectorSystem is System { + function setVector(uint32 key, int32 x, int32 y) public { + Vector.set(key, x, y); + } +} diff --git a/e2e/packages/test-data/generate-test-data-records.ts b/e2e/packages/test-data/generate-bench-data-bulk.ts similarity index 70% rename from e2e/packages/test-data/generate-test-data-records.ts rename to e2e/packages/test-data/generate-bench-data-bulk.ts index c6e9409365..313ad45a7d 100644 --- a/e2e/packages/test-data/generate-test-data-records.ts +++ b/e2e/packages/test-data/generate-bench-data-bulk.ts @@ -22,11 +22,19 @@ for (let i = 0; i < NUM_RECORDS.length; i++) { const rpc = `http://127.0.0.1:8545/${numRecords}`; console.log(`generating logs for ${numRecords} records`); - const logs = await generateLogs(numRecords, rpc); + const logs = await generateLogs(rpc, async (worldContract) => { + console.log("calling setNumber"); + for (let i = 0; i < numRecords - 1; i++) { + await worldContract.write.setNumber([i, i]); + } + + const lastTx = await worldContract.write.setNumber([numRecords - 1, numRecords - 1]); + return lastTx; + }); const logsFilename = path.join( path.dirname(fileURLToPath(import.meta.url)), - `../../../test-data/world-logs-${numRecords}.json` + `../../../test-data/world-logs-bulk-${numRecords}.json` ); console.log("writing", logs.length, "logs to", logsFilename); diff --git a/e2e/packages/test-data/generate-bench-data-query.ts b/e2e/packages/test-data/generate-bench-data-query.ts new file mode 100644 index 0000000000..d97a976fd4 --- /dev/null +++ b/e2e/packages/test-data/generate-bench-data-query.ts @@ -0,0 +1,42 @@ +import fs from "node:fs/promises"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import { createAnvil } from "@viem/anvil"; +import { generateLogs } from "./generateLogs"; + +const anvil = createAnvil({ + blockTime: 1, + blockBaseFeePerGas: 0, + gasLimit: 20_000_000, +}); + +console.log("starting anvil"); +await anvil.start(); +const rpc = `http://${anvil.host}:${anvil.port}`; + +const logs = await generateLogs(rpc, async (worldContract) => { + for (let i = 0; i < 100; i++) { + await worldContract.write.setNumber([i, i]); + } + + for (let i = 0; i < 50; i++) { + await worldContract.write.setVector([i, i, i]); + } + + const lastTx = await worldContract.write.set([[0]]); + + return lastTx; +}); + +const logsFilename = path.join( + path.dirname(fileURLToPath(import.meta.url)), + `../../../test-data/world-logs-query.json` +); + +console.log("writing", logs.length, "logs to", logsFilename); +await fs.writeFile(logsFilename, JSON.stringify(logs, null, 2)); + +// TODO: figure out why anvil doesn't stop immediately +// console.log("stopping anvil"); +// await anvil.stop(); +process.exit(0); diff --git a/e2e/packages/test-data/generate-test-data.ts b/e2e/packages/test-data/generate-test-data.ts index 8f4eb545ac..dd2364300c 100644 --- a/e2e/packages/test-data/generate-test-data.ts +++ b/e2e/packages/test-data/generate-test-data.ts @@ -2,23 +2,7 @@ import fs from "node:fs/promises"; import path from "node:path"; import { fileURLToPath } from "node:url"; import { createAnvil } from "@viem/anvil"; -import { execa } from "execa"; -import { - ClientConfig, - createPublicClient, - createWalletClient, - encodeEventTopics, - http, - isHex, - numberToHex, -} from "viem"; -import { mudFoundry } from "@latticexyz/common/chains"; -import { getContract } from "@latticexyz/common"; -import { storeEventsAbi } from "@latticexyz/store"; -import { privateKeyToAccount } from "viem/accounts"; -import IWorldAbi from "../contracts/out/IWorld.sol/IWorld.abi.json"; - -const logsFilename = path.join(path.dirname(fileURLToPath(import.meta.url)), `../../../test-data/world-logs.json`); +import { generateLogs } from "./generateLogs"; const anvil = createAnvil({ blockTime: 1, @@ -30,72 +14,16 @@ console.log("starting anvil"); await anvil.start(); const rpc = `http://${anvil.host}:${anvil.port}`; -console.log("deploying world"); -const { stdout, stderr } = await execa("pnpm", ["mud", "deploy", "--rpc", rpc, "--saveDeployment", "false"], { - cwd: "../contracts", - stdio: "pipe", - env: { - DEBUG: "mud:*", - }, -}); -if (stderr) console.error(stderr); -if (stdout) console.log(stdout); - -const [, worldAddress] = stdout.match(/worldAddress: '(0x[0-9a-f]+)'/i) ?? []; -if (!isHex(worldAddress)) { - throw new Error("world address not found in output, did the deploy fail?"); -} -console.log("got world address", worldAddress); - -const clientOptions = { - chain: mudFoundry, - transport: http(rpc), - pollingInterval: 1000, -} as const satisfies ClientConfig; - -const publicClient = createPublicClient(clientOptions); +const logs = await generateLogs(rpc, async (worldContract) => { + console.log("calling set"); + await worldContract.write.set([[420]]); + console.log("calling push"); + const lastTx = await worldContract.write.push([69]); -// anvil default private key -const account = privateKeyToAccount("0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80"); -const walletClient = createWalletClient({ - ...clientOptions, - account, + return lastTx; }); -const worldContract = getContract({ - address: worldAddress, - abi: IWorldAbi, - publicClient, - walletClient, -}); - -console.log("calling set"); -await worldContract.write.set([[420]]); -console.log("calling push"); -const lastTx = await worldContract.write.push([69]); - -console.log("waiting for tx"); -const receipt = await publicClient.waitForTransactionReceipt({ hash: lastTx }); - -console.log("fetching logs", receipt.blockNumber); -const logs = await publicClient.request({ - method: "eth_getLogs", - params: [ - { - address: worldAddress, - topics: [ - storeEventsAbi.flatMap((event) => - encodeEventTopics({ - abi: [event], - eventName: event.name, - }) - ), - ], - fromBlock: numberToHex(0n), - toBlock: numberToHex(receipt.blockNumber), - }, - ], -}); +const logsFilename = path.join(path.dirname(fileURLToPath(import.meta.url)), `../../../test-data/world-logs.json`); console.log("writing", logs.length, "logs to", logsFilename); await fs.writeFile(logsFilename, JSON.stringify(logs, null, 2)); diff --git a/e2e/packages/test-data/generateLogs.ts b/e2e/packages/test-data/generateLogs.ts index 81cc81f8fb..62da742de9 100644 --- a/e2e/packages/test-data/generateLogs.ts +++ b/e2e/packages/test-data/generateLogs.ts @@ -1,20 +1,38 @@ import { execa } from "execa"; import { ClientConfig, + GetContractReturnType, + Hex, + PublicClient, + RpcLog, + WalletClient, createPublicClient, createWalletClient, encodeEventTopics, - getContract, http, isHex, numberToHex, + getContract, + Transport, + Chain, } from "viem"; import { mudFoundry } from "@latticexyz/common/chains"; import { storeEventsAbi } from "@latticexyz/store"; -import { privateKeyToAccount } from "viem/accounts"; +import { Account, privateKeyToAccount } from "viem/accounts"; import IWorldAbi from "../contracts/out/IWorld.sol/IWorld.abi.json"; -export async function generateLogs(numRecords: number, rpc: string) { +type WorldAbi = typeof IWorldAbi; + +type WorldContract = GetContractReturnType< + WorldAbi, + PublicClient, + WalletClient +>; + +export async function generateLogs( + rpc: string, + transactionHook: (worldContract: WorldContract) => Promise +): Promise { console.log("deploying world"); const { stdout, stderr } = await execa("pnpm", ["mud", "deploy", "--rpc", rpc, "--saveDeployment", "false"], { cwd: "../contracts", @@ -55,12 +73,7 @@ export async function generateLogs(numRecords: number, rpc: string) { walletClient, }); - console.log("calling setNumber"); - for (let i = 0; i < numRecords - 1; i++) { - await worldContract.write.setNumber([i, i]); - } - - const lastTx = await worldContract.write.setNumber([numRecords, numRecords]); + const lastTx = await transactionHook(worldContract); console.log("waiting for tx"); const receipt = await publicClient.waitForTransactionReceipt({ hash: lastTx }); diff --git a/e2e/packages/test-data/package.json b/e2e/packages/test-data/package.json index 793ecafe78..a47a61c7b9 100644 --- a/e2e/packages/test-data/package.json +++ b/e2e/packages/test-data/package.json @@ -5,8 +5,9 @@ "license": "MIT", "type": "module", "scripts": { - "generate-test-data": "tsx generate-test-data.ts", - "generate-test-data-records": "tsx generate-test-data-records.ts" + "generate-bench-data-bulk": "tsx generate-bench-data-bulk.ts", + "generate-bench-data-query": "tsx generate-bench-data-query.ts", + "generate-test-data": "tsx generate-test-data.ts" }, "devDependencies": { "@latticexyz/block-logs-stream": "link:../../../packages/block-logs-stream", diff --git a/packages/store-sync/benchmarks/getRecord.bench.ts b/packages/store-sync/benchmarks/getRecord.bench.ts index 65b537af81..2c6a5c07d9 100644 --- a/packages/store-sync/benchmarks/getRecord.bench.ts +++ b/packages/store-sync/benchmarks/getRecord.bench.ts @@ -5,9 +5,9 @@ import { encodeEntity } from "../src/recs"; import { logsToBlocks } from "../test/logsToBlocks"; import { buildTable, getTables } from "../src/sqlite"; import { eq } from "drizzle-orm"; -import worldRpcLogs10 from "../../../test-data/world-logs-10.json"; -import worldRpcLogs100 from "../../../test-data/world-logs-100.json"; -import worldRpcLogs1000 from "../../../test-data/world-logs-1000.json"; +import worldRpcLogs10 from "../../../test-data/world-logs-bulk-10.json"; +import worldRpcLogs100 from "../../../test-data/world-logs-bulk-100.json"; +import worldRpcLogs1000 from "../../../test-data/world-logs-bulk-1000.json"; describe.each([ { numRecords: 10, logs: worldRpcLogs10 }, diff --git a/packages/store-sync/benchmarks/getRecords.bench.ts b/packages/store-sync/benchmarks/getRecords.bench.ts index 5fd68c9d9d..eb33bff8d4 100644 --- a/packages/store-sync/benchmarks/getRecords.bench.ts +++ b/packages/store-sync/benchmarks/getRecords.bench.ts @@ -3,9 +3,9 @@ import { getComponentEntities, getComponentValue } from "@latticexyz/recs"; import { buildTable, getTables } from "../src/sqlite"; import { logsToBlocks } from "../test/logsToBlocks"; import { createRecsStorage, createSqliteStorage, createZustandStorage, tables } from "../test/utils"; -import worldRpcLogs10 from "../../../test-data/world-logs-10.json"; -import worldRpcLogs100 from "../../../test-data/world-logs-100.json"; -import worldRpcLogs1000 from "../../../test-data/world-logs-1000.json"; +import worldRpcLogs10 from "../../../test-data/world-logs-bulk-10.json"; +import worldRpcLogs100 from "../../../test-data/world-logs-bulk-100.json"; +import worldRpcLogs1000 from "../../../test-data/world-logs-bulk-1000.json"; describe.each([ { numRecords: 10, logs: worldRpcLogs10 }, diff --git a/packages/store-sync/benchmarks/query.bench.ts b/packages/store-sync/benchmarks/query.bench.ts new file mode 100644 index 0000000000..550ef98ed3 --- /dev/null +++ b/packages/store-sync/benchmarks/query.bench.ts @@ -0,0 +1,36 @@ +import { bench, describe } from "vitest"; +import { Has, runQuery } from "@latticexyz/recs"; +import { createRecsStorage, createSqliteStorage, createZustandStorage, tables } from "../test/utils"; +import { logsToBlocks } from "../test/logsToBlocks"; +import worldRpcLogs from "../../../test-data/world-logs-query.json"; +import { buildTable, getTables } from "../src/sqlite"; +import { eq } from "drizzle-orm"; + +const blocks = logsToBlocks(worldRpcLogs); + +const { components, storageAdapter: recsStorageAdapter } = createRecsStorage(); +const { useStore, storageAdapter: zustandStorageAdapter } = createZustandStorage(); +const { database, storageAdapter: sqliteStorageAdapter } = await createSqliteStorage(); + +for (const block of blocks) { + await Promise.all([recsStorageAdapter(block), zustandStorageAdapter(block), sqliteStorageAdapter(block)]); +} + +describe("Get records with query", async () => { + bench("recs: `runQuery`", async () => { + runQuery([Has(components.Number), Has(components.Vector)]); + }); + + bench("zustand: `getRecords`", async () => { + const records = useStore.getState().getRecords(tables.Number); + + Object.keys(useStore.getState().getRecords(tables.Vector)).filter((id) => id in records); + }); + + bench("sqlite: `innerJoin`", async () => { + const numberTable = buildTable(getTables(database).filter((table) => table.name === "Number")[0]); + const vectorTable = buildTable(getTables(database).filter((table) => table.name === "Vector")[0]); + + await database.select().from(numberTable).innerJoin(vectorTable, eq(numberTable.key, vectorTable.key)); + }); +}); diff --git a/packages/store-sync/benchmarks/storageAdapter.bench.ts b/packages/store-sync/benchmarks/storageAdapter.bench.ts index 3964469b0a..57604a8603 100644 --- a/packages/store-sync/benchmarks/storageAdapter.bench.ts +++ b/packages/store-sync/benchmarks/storageAdapter.bench.ts @@ -1,9 +1,9 @@ import { bench, describe } from "vitest"; import { createRecsStorage, createSqliteStorage, createZustandStorage } from "../test/utils"; import { logsToBlocks } from "../test/logsToBlocks"; -import worldRpcLogs10 from "../../../test-data/world-logs-10.json"; -import worldRpcLogs100 from "../../../test-data/world-logs-100.json"; -import worldRpcLogs1000 from "../../../test-data/world-logs-1000.json"; +import worldRpcLogs10 from "../../../test-data/world-logs-bulk-10.json"; +import worldRpcLogs100 from "../../../test-data/world-logs-bulk-100.json"; +import worldRpcLogs1000 from "../../../test-data/world-logs-bulk-1000.json"; describe.each([ { numRecords: 10, logs: worldRpcLogs10 }, diff --git a/packages/store-sync/src/postgres-decoded/createStorageAdapter.test.ts b/packages/store-sync/src/postgres-decoded/createStorageAdapter.test.ts index 03cbb7d616..cf692f02a8 100644 --- a/packages/store-sync/src/postgres-decoded/createStorageAdapter.test.ts +++ b/packages/store-sync/src/postgres-decoded/createStorageAdapter.test.ts @@ -50,7 +50,7 @@ describe("createStorageAdapter", async () => { expect(await db.select().from(storageAdapter.tables.configTable)).toMatchInlineSnapshot(` [ { - "blockNumber": 28n, + "blockNumber": 21n, "chainId": 31337, "version": "0.0.6", }, @@ -70,8 +70,8 @@ describe("createStorageAdapter", async () => { ).toMatchInlineSnapshot(` [ { - "address": "0xd843FB6A5fD209344E5A1b3d5c121330c2B4a36f", - "blockNumber": 28n, + "address": "0x7C78d585F136d7247f9deA68f60CE8A2D3F311E2", + "blockNumber": 21n, "dynamicData": "0x000001a400000045", "encodedLengths": "0x0000000000000000000000000000000000000000000000000800000000000008", "isDeleted": false, @@ -89,7 +89,7 @@ describe("createStorageAdapter", async () => { expect(tables).toMatchInlineSnapshot(` [ { - "address": "0xd843FB6A5fD209344E5A1b3d5c121330c2B4a36f", + "address": "0x7C78d585F136d7247f9deA68f60CE8A2D3F311E2", "keySchema": {}, "name": "NumberList", "namespace": "", @@ -106,7 +106,7 @@ describe("createStorageAdapter", async () => { [ { "__keyBytes": "0x", - "__lastUpdatedBlockNumber": 28n, + "__lastUpdatedBlockNumber": 21n, "value": [ 420, 69, diff --git a/packages/store-sync/src/postgres/createStorageAdapter.test.ts b/packages/store-sync/src/postgres/createStorageAdapter.test.ts index 88e9ad553d..c05928640f 100644 --- a/packages/store-sync/src/postgres/createStorageAdapter.test.ts +++ b/packages/store-sync/src/postgres/createStorageAdapter.test.ts @@ -48,7 +48,7 @@ describe("createStorageAdapter", async () => { expect(await db.select().from(storageAdapter.tables.configTable)).toMatchInlineSnapshot(` [ { - "blockNumber": 28n, + "blockNumber": 21n, "chainId": 31337, "version": "0.0.6", }, @@ -68,8 +68,8 @@ describe("createStorageAdapter", async () => { ).toMatchInlineSnapshot(` [ { - "address": "0xd843FB6A5fD209344E5A1b3d5c121330c2B4a36f", - "blockNumber": 28n, + "address": "0x7C78d585F136d7247f9deA68f60CE8A2D3F311E2", + "blockNumber": 21n, "dynamicData": "0x000001a400000045", "encodedLengths": "0x0000000000000000000000000000000000000000000000000800000000000008", "isDeleted": false, diff --git a/packages/store-sync/src/sqlite/sqliteStorage.test.ts b/packages/store-sync/src/sqlite/sqliteStorage.test.ts index 85214226b4..c8afe6a3d5 100644 --- a/packages/store-sync/src/sqlite/sqliteStorage.test.ts +++ b/packages/store-sync/src/sqlite/sqliteStorage.test.ts @@ -64,7 +64,7 @@ describe("sqliteStorage", async () => { { "chainId": 31337, "lastError": null, - "lastUpdatedBlockNumber": 28n, + "lastUpdatedBlockNumber": 21n, "schemaVersion": 1, }, ] @@ -73,11 +73,11 @@ describe("sqliteStorage", async () => { expect(db.select().from(mudStoreTables).where(eq(mudStoreTables.name, "NumberList")).all()).toMatchInlineSnapshot(` [ { - "address": "0xd843FB6A5fD209344E5A1b3d5c121330c2B4a36f", - "id": "0xd843FB6A5fD209344E5A1b3d5c121330c2B4a36f____NumberList", + "address": "0x7C78d585F136d7247f9deA68f60CE8A2D3F311E2", + "id": "0x7C78d585F136d7247f9deA68f60CE8A2D3F311E2____NumberList", "keySchema": {}, "lastError": null, - "lastUpdatedBlockNumber": 28n, + "lastUpdatedBlockNumber": 21n, "name": "NumberList", "namespace": "", "schemaVersion": 1, @@ -93,11 +93,11 @@ describe("sqliteStorage", async () => { expect(tables).toMatchInlineSnapshot(` [ { - "address": "0xd843FB6A5fD209344E5A1b3d5c121330c2B4a36f", - "id": "0xd843FB6A5fD209344E5A1b3d5c121330c2B4a36f____NumberList", + "address": "0x7C78d585F136d7247f9deA68f60CE8A2D3F311E2", + "id": "0x7C78d585F136d7247f9deA68f60CE8A2D3F311E2____NumberList", "keySchema": {}, "lastError": null, - "lastUpdatedBlockNumber": 28n, + "lastUpdatedBlockNumber": 21n, "name": "NumberList", "namespace": "", "schemaVersion": 1, @@ -117,7 +117,7 @@ describe("sqliteStorage", async () => { "__encodedLengths": "0x0000000000000000000000000000000000000000000000000800000000000008", "__isDeleted": false, "__key": "0x", - "__lastUpdatedBlockNumber": 28n, + "__lastUpdatedBlockNumber": 21n, "__staticData": null, "value": [ 420, diff --git a/test-data/world-logs.json b/test-data/world-logs.json index 8a5fa36797..6910812f25 100644 --- a/test-data/world-logs.json +++ b/test-data/world-logs.json @@ -1,2058 +1,2142 @@ [ { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x7462776f726c64000000000000000000496e69744d6f64756c65416464726573" ], "data": "0x00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014c19519644c381abe163cab1c4ab66c3c91e508a5000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x2", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x746273746f72650000000000000000005461626c657300000000000000000000" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000022000000000a0000000000002c000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000001746273746f72650000000000000000005461626c65730000000000000000000000000000000000000000000000000000000000000000000000000000000000600060030220202000000000000000000000000000000000000000000000000000002001005f000000000000000000000000000000000000000000000000000000006003025f5f5fc4c4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000077461626c654964000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000000b6669656c644c61796f757400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096b6579536368656d610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b76616c7565536368656d610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012616269456e636f6465644b65794e616d657300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014616269456e636f6465644669656c644e616d6573000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x3", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x746273746f72650000000000000000005461626c657300000000000000000000" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000a000000000a00000000000014000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000001746273746f72650000000000000000005265736f75726365496473000000000000000000000000000000000000000000000000000000000000000000000000600001010001000000000000000000000000000000000000000000000000000000002001005f00000000000000000000000000000000000000000000000000000000010100600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000a7265736f7572636549640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000066578697374730000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x4", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001746273746f72650000000000000000005461626c65730000000000000000000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x5", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001746273746f72650000000000000000005265736f75726365496473000000000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x6", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x746273746f72650000000000000000005461626c657300000000000000000000" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000a000000000a00000000000014000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000001746273746f726500000000000000000053746f7265486f6f6b7300000000000000000000000000000000000000000000000000000000000000000000000000600000000100000000000000000000000000000000000000000000000000000000002001005f00000000000000000000000000000000000000000000000000000000000001b6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000077461626c654964000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000005686f6f6b73000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x7", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001746273746f726500000000000000000053746f7265486f6f6b7300000000000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x8", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x746273746f72650000000000000000005461626c657300000000000000000000" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000a000000000a000000000000140000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000017462776f726c640000000000000000004e616d6573706163654f776e6572000000000000000000000000000000000000000000000000000000000000000000600014010014000000000000000000000000000000000000000000000000000000002001005f00000000000000000000000000000000000000000000000000000000140100610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000b6e616d657370616365496400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000056f776e6572000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x9", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000017462776f726c640000000000000000004e616d6573706163654f776e6572000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0xa", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x746273746f72650000000000000000005461626c657300000000000000000000" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000a000000000a000000000000140000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000017462776f726c6400000000000000000042616c616e636573000000000000000000000000000000000000000000000000000000000000000000000000000000600020010020000000000000000000000000000000000000000000000000000000002001005f000000000000000000000000000000000000000000000000000000002001001f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000b6e616d6573706163654964000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000762616c616e636500000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0xb", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000017462776f726c6400000000000000000042616c616e636573000000000000000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0xc", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x746273746f72650000000000000000005461626c657300000000000000000000" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000a00000000100000000000001a0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000017462776f726c64000000000000000000496e7374616c6c65644d6f64756c65730000000000000000000000000000000000000000000000000000000000000060000101000100000000000000000000000000000000000000000000000000000000340200615f0000000000000000000000000000000000000000000000000000000101006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000d6d6f64756c654164647265737300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d617267756d656e74734861736800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000b6973496e7374616c6c6564000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0xd", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000017462776f726c64000000000000000000496e7374616c6c65644d6f64756c657300000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0xe", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x746273746f72650000000000000000005461626c657300000000000000000000" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000a00000000100000000000001a0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000017462776f726c640000000000000000005573657244656c65676174696f6e436f000000000000000000000000000000000000000000000000000000000000006000200100200000000000000000000000000000000000000000000000000000000028020061610000000000000000000000000000000000000000000000000000002001005f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000964656c656761746f720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000964656c6567617465650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001364656c65676174696f6e436f6e74726f6c496400000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0xf", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000017462776f726c640000000000000000005573657244656c65676174696f6e436f00000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x10", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x746273746f72650000000000000000005461626c657300000000000000000000" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000a000000000a000000000000140000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000017462776f726c640000000000000000004e616d65737061636544656c6567617400000000000000000000000000000000000000000000000000000000000000600020010020000000000000000000000000000000000000000000000000000000002001005f000000000000000000000000000000000000000000000000000000002001005f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000b6e616d6573706163654964000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001364656c65676174696f6e436f6e74726f6c496400000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x11", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000017462776f726c640000000000000000004e616d65737061636544656c6567617400000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x12", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x746273746f72650000000000000000005461626c657300000000000000000000" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000a00000000100000000000001a0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000017462776f726c640000000000000000005265736f75726365416363657373000000000000000000000000000000000000000000000000000000000000000000600001010001000000000000000000000000000000000000000000000000000000003402005f610000000000000000000000000000000000000000000000000000000101006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000a7265736f75726365496400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000663616c6c6572000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000066163636573730000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x13", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000017462776f726c640000000000000000005265736f75726365416363657373000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x14", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x746273746f72650000000000000000005461626c657300000000000000000000" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000010000000000a0000000000001a0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000017462776f726c6400000000000000000053797374656d7300000000000000000000000000000000000000000000000000000000000000000000000000000000600015020014010000000000000000000000000000000000000000000000000000002001005f000000000000000000000000000000000000000000000000000000001502006160000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000873797374656d49640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000673797374656d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c7075626c69634163636573730000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x15", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000017462776f726c6400000000000000000053797374656d7300000000000000000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x16", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x746273746f72650000000000000000005461626c657300000000000000000000" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000010000000000a0000000000001a0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000017462776f726c6400000000000000000046756e6374696f6e53656c6563746f72000000000000000000000000000000000000000000000000000000000000006000240200200400000000000000000000000000000000000000000000000000000004010043000000000000000000000000000000000000000000000000000000002402005f43000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001066756e6374696f6e53656c6563746f72000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000873797374656d4964000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001673797374656d46756e6374696f6e53656c6563746f7200000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x17", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000017462776f726c6400000000000000000046756e6374696f6e53656c6563746f7200000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x18", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x746273746f72650000000000000000005461626c657300000000000000000000" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000a000000000a000000000000140000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000016f74776f726c6400000000000000000046756e6374696f6e5369676e6174757200000000000000000000000000000000000000000000000000000000000000600000000100000000000000000000000000000000000000000000000000000000000401004300000000000000000000000000000000000000000000000000000000000001c50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001066756e6374696f6e53656c6563746f7200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001166756e6374696f6e5369676e6174757265000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x19", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000016f74776f726c6400000000000000000046756e6374696f6e5369676e6174757200000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x1a", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x746273746f72650000000000000000005461626c657300000000000000000000" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000a000000000a000000000000140000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000017462776f726c6400000000000000000053797374656d486f6f6b73000000000000000000000000000000000000000000000000000000000000000000000000600000000100000000000000000000000000000000000000000000000000000000002001005f00000000000000000000000000000000000000000000000000000000000001b60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000873797374656d4964000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000576616c7565000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x1b", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000017462776f726c6400000000000000000053797374656d486f6f6b73000000000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x1c", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x746273746f72650000000000000000005461626c657300000000000000000000" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000a000000000a000000000000140000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000017462776f726c6400000000000000000053797374656d52656769737472790000000000000000000000000000000000000000000000000000000000000000006000200100200000000000000000000000000000000000000000000000000000000014010061000000000000000000000000000000000000000000000000000000002001005f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000673797374656d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000873797374656d4964000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x1d", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000017462776f726c6400000000000000000053797374656d5265676973747279000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x1e", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x746273746f72650000000000000000005461626c657300000000000000000000" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000a00000000040000000000000e0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000017462776f726c64000000000000000000496e69744d6f64756c65416464726573000000000000000000000000000000000000000000000000000000000000006000140100140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001401006100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000576616c7565000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x1f", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000017462776f726c64000000000000000000496e69744d6f64756c6541646472657300000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x20", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000016e7300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x21", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x7462776f726c640000000000000000004e616d6573706163654f776e65720000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000016e7300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140c70ac0d3dbe7ea7f0eb625c65c1092b8bb415c8000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x22", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x7462776f726c640000000000000000005265736f757263654163636573730000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000026e730000000000000000000000000000000000000000000000000000000000000000000000000000000000000c70ac0d3dbe7ea7f0eb625c65c1092b8bb415c800000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x23", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000016e7373746f72650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x24", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x7462776f726c640000000000000000004e616d6573706163654f776e65720000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000016e7373746f72650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140c70ac0d3dbe7ea7f0eb625c65c1092b8bb415c8000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x25", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x7462776f726c640000000000000000005265736f757263654163636573730000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000026e7373746f7265000000000000000000000000000000000000000000000000000000000000000000000000000c70ac0d3dbe7ea7f0eb625c65c1092b8bb415c800000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x26", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000016e73776f726c640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x27", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x7462776f726c640000000000000000004e616d6573706163654f776e65720000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000016e73776f726c640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140c70ac0d3dbe7ea7f0eb625c65c1092b8bb415c8000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x28", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x7462776f726c640000000000000000005265736f757263654163636573730000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000026e73776f726c64000000000000000000000000000000000000000000000000000000000000000000000000000c70ac0d3dbe7ea7f0eb625c65c1092b8bb415c800000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x29", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001737900000000000000000000000000004163636573734d616e6167656d656e7400000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x2a", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000053797374656d73000000000000000000" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000001737900000000000000000000000000004163636573734d616e6167656d656e74000000000000000000000000000000000000000000000000000000000000001517ffdeff94ed0b80c493a179d4b3b09d6d71f6270100000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x2b", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x7462776f726c6400000000000000000053797374656d52656769737472790000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000017ffdeff94ed0b80c493a179d4b3b09d6d71f6270000000000000000000000000000000000000000000000000000000000000020737900000000000000000000000000004163636573734d616e6167656d656e74", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x2c", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x7462776f726c640000000000000000005265736f757263654163636573730000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000026e7300000000000000000000000000000000000000000000000000000000000000000000000000000000000017ffdeff94ed0b80c493a179d4b3b09d6d71f62700000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x2d", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000017379000000000000000000000000000042616c616e63655472616e736665720000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x2e", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000053797374656d73000000000000000000" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000017379000000000000000000000000000042616c616e63655472616e73666572000000000000000000000000000000000000000000000000000000000000000015a274b9a7e743cd8df3c6fd0abd47ed55fc943bc30100000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x2f", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x7462776f726c6400000000000000000053797374656d52656769737472790000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a274b9a7e743cd8df3c6fd0abd47ed55fc943bc300000000000000000000000000000000000000000000000000000000000000207379000000000000000000000000000042616c616e63655472616e7366657200", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x30", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x7462776f726c640000000000000000005265736f757263654163636573730000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000026e73000000000000000000000000000000000000000000000000000000000000000000000000000000000000a274b9a7e743cd8df3c6fd0abd47ed55fc943bc300000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x31", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000173790000000000000000000000000000426174636843616c6c0000000000000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x32", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000053797374656d73000000000000000000" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000173790000000000000000000000000000426174636843616c6c00000000000000000000000000000000000000000000000000000000000000000000000000001553e5c08d82a377167069ade46d087ab7535386080100000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x33", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x7462776f726c6400000000000000000053797374656d52656769737472790000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000053e5c08d82a377167069ade46d087ab753538608000000000000000000000000000000000000000000000000000000000000002073790000000000000000000000000000426174636843616c6c00000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x34", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x7462776f726c640000000000000000005265736f757263654163636573730000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000026e7300000000000000000000000000000000000000000000000000000000000000000000000000000000000053e5c08d82a377167069ade46d087ab75353860800000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x35", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000173790000000000000000000000000000526567697374726174696f6e0000000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x36", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000053797374656d73000000000000000000" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000173790000000000000000000000000000526567697374726174696f6e000000000000000000000000000000000000000000000000000000000000000000000015176906298819f6778127ad98261f778db597af560100000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x37", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x7462776f726c6400000000000000000053797374656d52656769737472790000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000176906298819f6778127ad98261f778db597af56000000000000000000000000000000000000000000000000000000000000002073790000000000000000000000000000526567697374726174696f6e00000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x38", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x7462776f726c640000000000000000005265736f757263654163636573730000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000026e73000000000000000000000000000000000000000000000000000000000000000000000000000000000000176906298819f6778127ad98261f778db597af5600000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x39", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000140554c3a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024737900000000000000000000000000004163636573734d616e6167656d656e7440554c3a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x3a", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000001c0000000000001c00000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000140554c3a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c6772616e7441636365737328627974657333322c616464726573732900000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x3b", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000018d53b208000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024737900000000000000000000000000004163636573734d616e6167656d656e748d53b208000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x3c", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000001d0000000000001d00000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000018d53b208000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d7265766f6b6541636365737328627974657333322c6164647265737329000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x3d", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001ef5d6bbb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024737900000000000000000000000000004163636573734d616e6167656d656e74ef5d6bbb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x3e", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000220000000000002200000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001ef5d6bbb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000227472616e736665724f776e65727368697028627974657333322c6164647265737329000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x3f", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001219adc2e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024737900000000000000000000000000004163636573734d616e6167656d656e74219adc2e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x40", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000001a0000000000001a00000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001219adc2e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a72656e6f756e63654f776e657273686970286279746573333229000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x41", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001c9c85a600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000247379000000000000000000000000000042616c616e63655472616e7366657200c9c85a60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x42", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000330000000000003300000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001c9c85a6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000337472616e7366657242616c616e6365546f4e616d65737061636528627974657333322c627974657333322c75696e743235362900000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x43", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000145afd1990000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000247379000000000000000000000000000042616c616e63655472616e736665720045afd199000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x44", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000310000000000003100000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000145afd19900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000317472616e7366657242616c616e6365546f4164647265737328627974657333322c616464726573732c75696e7432353629000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x45", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001ce5e8dd900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002473790000000000000000000000000000426174636843616c6c00000000000000ce5e8dd9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x46", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000001c0000000000001c00000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001ce5e8dd9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c626174636843616c6c2828627974657333322c6279746573295b5d2900000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x47", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000018fc8cf7e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002473790000000000000000000000000000426174636843616c6c000000000000008fc8cf7e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x48", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000280000000000002800000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000018fc8cf7e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028626174636843616c6c46726f6d2828616464726573732c627974657333322c6279746573295b5d29000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x49", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000018da798da00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002473790000000000000000000000000000526567697374726174696f6e000000008da798da000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x4a", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000001c0000000000001c00000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000018da798da000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c696e7374616c6c4d6f64756c6528616464726573732c62797465732900000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x4b", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000010ba51f4900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002473790000000000000000000000000000526567697374726174696f6e000000000ba51f49000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x4c", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000400000000000004000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000010ba51f49000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004072656769737465725461626c6528627974657333322c627974657333322c627974657333322c627974657333322c737472696e675b5d2c737472696e675b5d29", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x4d", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001530f4b6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002473790000000000000000000000000000526567697374726174696f6e00000000530f4b60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x4e", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000280000000000002800000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001530f4b600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028726567697374657253746f7265486f6f6b28627974657333322c616464726573732c75696e743829000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x4f", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000010560912900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002473790000000000000000000000000000526567697374726174696f6e0000000005609129000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x50", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000240000000000002400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001056091290000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024756e726567697374657253746f7265486f6f6b28627974657333322c616464726573732900000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x51", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001b29e408900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002473790000000000000000000000000000526567697374726174696f6e00000000b29e4089000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x52", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000001a0000000000001a00000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001b29e4089000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a72656769737465724e616d657370616365286279746573333229000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x53", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001d5f8337f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002473790000000000000000000000000000526567697374726174696f6e00000000d5f8337f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x54", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000290000000000002900000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001d5f8337f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029726567697374657253797374656d486f6f6b28627974657333322c616464726573732c75696e7438290000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x55", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001a92813ad00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002473790000000000000000000000000000526567697374726174696f6e00000000a92813ad000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x56", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000250000000000002500000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001a92813ad0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025756e726567697374657253797374656d486f6f6b28627974657333322c6164647265737329000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x57", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000013350b6a900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002473790000000000000000000000000000526567697374726174696f6e000000003350b6a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x58", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000240000000000002400000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000013350b6a90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024726567697374657253797374656d28627974657333322c616464726573732c626f6f6c2900000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x59", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000126d9810200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002473790000000000000000000000000000526567697374726174696f6e0000000026d98102000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x5a", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000280000000000002800000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000126d981020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028726567697374657246756e6374696f6e53656c6563746f7228627974657333322c737472696e6729000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x5b", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001742d611800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002473790000000000000000000000000000526567697374726174696f6e00000000742d6118000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x5c", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000330000000000003300000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001742d611800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000337265676973746572526f6f7446756e6374696f6e53656c6563746f7228627974657333322c737472696e672c6279746573342900000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x5d", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000011d2257ba00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002473790000000000000000000000000000526567697374726174696f6e000000001d2257ba000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x5e", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000290000000000002900000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000011d2257ba0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029726567697374657244656c65676174696f6e28616464726573732c627974657333322c6279746573290000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x5f", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001cdc938c500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002473790000000000000000000000000000526567697374726174696f6e00000000cdc938c5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x60", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000001d0000000000001d00000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001cdc938c5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d756e726567697374657244656c65676174696f6e286164647265737329000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x61", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001bfdfaff700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002473790000000000000000000000000000526567697374726174696f6e00000000bfdfaff7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x62", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000320000000000003200000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001bfdfaff7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003272656769737465724e616d65737061636544656c65676174696f6e28627974657333322c627974657333322c6279746573290000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x63", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001aa66e9c800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002473790000000000000000000000000000526567697374726174696f6e00000000aa66e9c8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x64", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000260000000000002600000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001aa66e9c80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026756e72656769737465724e616d65737061636544656c65676174696f6e2862797465733332290000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x65", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x7462776f726c64000000000000000000496e7374616c6c65644d6f64756c6573" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000c19519644c381abe163cab1c4ab66c3c91e508a5c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x66", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x7462776f726c640000000000000000004e616d6573706163654f776e65720000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000016e730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014f39fd6e51aad88f6f4ce6ab8827279cfffb92266000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x67", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x0e1f72f429eb97e64878619984a91e687ae91610348b9ff4216782cc96e49d07", "0x7462776f726c640000000000000000005265736f757263654163636573730000" ], "data": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000026e730000000000000000000000000000000000000000000000000000000000000000000000000000000000000c70ac0d3dbe7ea7f0eb625c65c1092b8bb415c8", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x68", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x7462776f726c640000000000000000005265736f757263654163636573730000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000026e73000000000000000000000000000000000000000000000000000000000000000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb9226600000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xae9971f2788fa8f7a0800e1c87a1bf2158686b36452018833e1b2614d73a5f8b", - "blockNumber": "0xe", - "transactionHash": "0x24b9a6cbb306f740c3fdfb17676a0a39185c62ad92c00cef1e2e3193be5b5210", + "blockHash": "0xd84f9ece5f142979be3b5f987edec51fb6dc57839e4cc12d78bede894a4dc312", + "blockNumber": "0xb", + "transactionHash": "0x454d10820a548c9f2c5b4dc52b43f40f0bd8d8ee6f8b1625b258a73a0d9c924a", "transactionIndex": "0x0", "logIndex": "0x69", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x746273746f72650000000000000000005461626c657300000000000000000000" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000a000000000a00000000000014000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000001746200000000000000000000000000004e756d626572000000000000000000000000000000000000000000000000000000000000000000000000000000000060000401000400000000000000000000000000000000000000000000000000000000040100030000000000000000000000000000000000000000000000000000000004010003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000036b65790000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000576616c7565000000000000000000000000000000000000000000000000000000", - "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", - "blockNumber": "0x13", - "transactionHash": "0x7d1ca536639b7aaa0b701a596940915d537e4cc164169a513816f540956a0231", + "blockHash": "0x210039ae11e7737c501408e9da37636281275a1c8be2e77a39b73708099c0c2f", + "blockNumber": "0xf", + "transactionHash": "0x29abf6b415eb7306c451f995d65eed9cb903a52c753067b60c8ff4840d74e677", "transactionIndex": "0x0", "logIndex": "0x0", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001746200000000000000000000000000004e756d6265720000000000000000000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", - "blockNumber": "0x13", - "transactionHash": "0x7d1ca536639b7aaa0b701a596940915d537e4cc164169a513816f540956a0231", + "blockHash": "0x210039ae11e7737c501408e9da37636281275a1c8be2e77a39b73708099c0c2f", + "blockNumber": "0xf", + "transactionHash": "0x29abf6b415eb7306c451f995d65eed9cb903a52c753067b60c8ff4840d74e677", "transactionIndex": "0x0", "logIndex": "0x1", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x746273746f72650000000000000000005461626c657300000000000000000000" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000a00000000040000000000000e0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000017462000000000000000000000000000053746174696341727261790000000000000000000000000000000000000000000000000000000000000000000000006000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000576616c7565000000000000000000000000000000000000000000000000000000", - "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", - "blockNumber": "0x13", - "transactionHash": "0x502d2b54c63a72846261cac29de33096bb03bedb11dc9d159a6a3fa908522155", + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000a00000000160000000000002000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000174620000000000000000000000000000506f736974696f6e000000000000000000000000000000000000000000000000000000000000000000000000000000600014010014000000000000000000000000000000000000000000000000000000002803005f2323000000000000000000000000000000000000000000000000000014010061000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000047a6f6e650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000179000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000006706c617965720000000000000000000000000000000000000000000000000000", + "blockHash": "0x210039ae11e7737c501408e9da37636281275a1c8be2e77a39b73708099c0c2f", + "blockNumber": "0xf", + "transactionHash": "0x9a77177ee386943c891709341380824990dd26373925f368f3d0eada9cb922b5", "transactionIndex": "0x1", "logIndex": "0x2", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001746200000000000000000000000000005374617469634172726179000000000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", - "blockNumber": "0x13", - "transactionHash": "0x502d2b54c63a72846261cac29de33096bb03bedb11dc9d159a6a3fa908522155", + "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000174620000000000000000000000000000506f736974696f6e000000000000000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x210039ae11e7737c501408e9da37636281275a1c8be2e77a39b73708099c0c2f", + "blockNumber": "0xf", + "transactionHash": "0x9a77177ee386943c891709341380824990dd26373925f368f3d0eada9cb922b5", "transactionIndex": "0x1", "logIndex": "0x3", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x746273746f72650000000000000000005461626c657300000000000000000000" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000a00000000160000000000002000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000174620000000000000000000000000000506f736974696f6e000000000000000000000000000000000000000000000000000000000000000000000000000000600014010014000000000000000000000000000000000000000000000000000000002803005f2323000000000000000000000000000000000000000000000000000014010061000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000047a6f6e650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000179000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000006706c617965720000000000000000000000000000000000000000000000000000", - "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", - "blockNumber": "0x13", - "transactionHash": "0x6a91647b45ca2c19f29665ec44637e968c7d590bddd7c0361b70ca256cf89c19", + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000a00000000040000000000000e0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000017462000000000000000000000000000053746174696341727261790000000000000000000000000000000000000000000000000000000000000000000000006000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000576616c7565000000000000000000000000000000000000000000000000000000", + "blockHash": "0x210039ae11e7737c501408e9da37636281275a1c8be2e77a39b73708099c0c2f", + "blockNumber": "0xf", + "transactionHash": "0xa34bce00b358b843332e5ad12db60b4a94ad4490f26fc6544f3525c8949a5308", "transactionIndex": "0x2", "logIndex": "0x4", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000174620000000000000000000000000000506f736974696f6e000000000000000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", - "blockNumber": "0x13", - "transactionHash": "0x6a91647b45ca2c19f29665ec44637e968c7d590bddd7c0361b70ca256cf89c19", + "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001746200000000000000000000000000005374617469634172726179000000000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x210039ae11e7737c501408e9da37636281275a1c8be2e77a39b73708099c0c2f", + "blockNumber": "0xf", + "transactionHash": "0xa34bce00b358b843332e5ad12db60b4a94ad4490f26fc6544f3525c8949a5308", "transactionIndex": "0x2", "logIndex": "0x5", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x746273746f72650000000000000000005461626c657300000000000000000000" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000010000000000a0000000000001a00000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000174620000000000000000000000000000566563746f7200000000000000000000000000000000000000000000000000000000000000000000000000000000006000080200040400000000000000000000000000000000000000000000000000000004010003000000000000000000000000000000000000000000000000000000000802002323000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000036b6579000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001780000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017900000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", - "blockNumber": "0x13", - "transactionHash": "0x8e6c2dd33f3246a73bb9f0627a91dbf8ba931b30c9eb571c7feef1a713ac85e8", + "blockHash": "0x210039ae11e7737c501408e9da37636281275a1c8be2e77a39b73708099c0c2f", + "blockNumber": "0xf", + "transactionHash": "0x892ccb69db6ce3edc3fb886584ffb4335e21c4389b29928c16749bbcf41267d7", "transactionIndex": "0x3", "logIndex": "0x6", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000174620000000000000000000000000000566563746f720000000000000000000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", - "blockNumber": "0x13", - "transactionHash": "0x8e6c2dd33f3246a73bb9f0627a91dbf8ba931b30c9eb571c7feef1a713ac85e8", + "blockHash": "0x210039ae11e7737c501408e9da37636281275a1c8be2e77a39b73708099c0c2f", + "blockNumber": "0xf", + "transactionHash": "0x892ccb69db6ce3edc3fb886584ffb4335e21c4389b29928c16749bbcf41267d7", "transactionIndex": "0x3", "logIndex": "0x7", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x746273746f72650000000000000000005461626c657300000000000000000000" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000010000000001c0000000000002c000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000001746200000000000000000000000000004d756c74690000000000000000000000000000000000000000000000000000000000000000000000000000000000006000210200200100000000000000000000000000000000000000000000000000000034040003601f2e000000000000000000000000000000000000000000000000002102003f60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000016100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000162000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001630000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000036e756d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000576616c7565000000000000000000000000000000000000000000000000000000", - "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", - "blockNumber": "0x13", - "transactionHash": "0x881d327384530d5e2f1cffc4b1ce431f5d1dcb2eff6610332bf39f074c67a676", + "blockHash": "0x210039ae11e7737c501408e9da37636281275a1c8be2e77a39b73708099c0c2f", + "blockNumber": "0xf", + "transactionHash": "0x0935e30c85b02fd96d488adb956f8a0981df5b44b2c5139c307b4d587b940f80", "transactionIndex": "0x4", "logIndex": "0x8", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001746200000000000000000000000000004d756c7469000000000000000000000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", - "blockNumber": "0x13", - "transactionHash": "0x881d327384530d5e2f1cffc4b1ce431f5d1dcb2eff6610332bf39f074c67a676", + "blockHash": "0x210039ae11e7737c501408e9da37636281275a1c8be2e77a39b73708099c0c2f", + "blockNumber": "0xf", + "transactionHash": "0x0935e30c85b02fd96d488adb956f8a0981df5b44b2c5139c307b4d587b940f80", "transactionIndex": "0x4", "logIndex": "0x9", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x746273746f72650000000000000000005461626c657300000000000000000000" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000a00000000040000000000000e000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000001746200000000000000000000000000004e756d6265724c697374000000000000000000000000000000000000000000000000000000000000000000000000006000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000576616c7565000000000000000000000000000000000000000000000000000000", - "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", - "blockNumber": "0x13", - "transactionHash": "0xe2067ab887d342682ef22bc82da1c7b85eb0530581c8d3aef889d380d3b3e821", + "blockHash": "0x210039ae11e7737c501408e9da37636281275a1c8be2e77a39b73708099c0c2f", + "blockNumber": "0xf", + "transactionHash": "0xdaeb26f86073c8457f0c30a56bb7774e6527b7c713ce2fc9e85e4cab37852e46", "transactionIndex": "0x5", "logIndex": "0xa", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001746200000000000000000000000000004e756d6265724c69737400000000000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", - "blockNumber": "0x13", - "transactionHash": "0xe2067ab887d342682ef22bc82da1c7b85eb0530581c8d3aef889d380d3b3e821", + "blockHash": "0x210039ae11e7737c501408e9da37636281275a1c8be2e77a39b73708099c0c2f", + "blockNumber": "0xf", + "transactionHash": "0xdaeb26f86073c8457f0c30a56bb7774e6527b7c713ce2fc9e85e4cab37852e46", "transactionIndex": "0x5", "logIndex": "0xb", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000173790000000000000000000000000000437573746f6d4572726f72735379737400000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", - "blockNumber": "0x13", - "transactionHash": "0x79520ebbc3d83ac78ceb9547a7e995a35258dd4561e550ff701552a1c5c5a4fc", + "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001737900000000000000000000000000004e756d6265724c69737453797374656d00000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x210039ae11e7737c501408e9da37636281275a1c8be2e77a39b73708099c0c2f", + "blockNumber": "0xf", + "transactionHash": "0x29b1e1d35192f146dc81eb4aa7aa238e1ba8c8860b2ad187448e2ae942921ca3", "transactionIndex": "0x6", "logIndex": "0xc", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000053797374656d73000000000000000000" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000173790000000000000000000000000000437573746f6d4572726f7273537973740000000000000000000000000000000000000000000000000000000000000015fc5b03fbae0bca9422ee706687c00072475a03370100000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", - "blockNumber": "0x13", - "transactionHash": "0x79520ebbc3d83ac78ceb9547a7e995a35258dd4561e550ff701552a1c5c5a4fc", + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000001737900000000000000000000000000004e756d6265724c69737453797374656d0000000000000000000000000000000000000000000000000000000000000015457a739febe34229495ac45d6c884e5404b7002b0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x210039ae11e7737c501408e9da37636281275a1c8be2e77a39b73708099c0c2f", + "blockNumber": "0xf", + "transactionHash": "0x29b1e1d35192f146dc81eb4aa7aa238e1ba8c8860b2ad187448e2ae942921ca3", "transactionIndex": "0x6", "logIndex": "0xd", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x7462776f726c6400000000000000000053797374656d52656769737472790000" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fc5b03fbae0bca9422ee706687c00072475a0337000000000000000000000000000000000000000000000000000000000000002073790000000000000000000000000000437573746f6d4572726f727353797374", - "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", - "blockNumber": "0x13", - "transactionHash": "0x79520ebbc3d83ac78ceb9547a7e995a35258dd4561e550ff701552a1c5c5a4fc", + "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000457a739febe34229495ac45d6c884e5404b7002b0000000000000000000000000000000000000000000000000000000000000020737900000000000000000000000000004e756d6265724c69737453797374656d", + "blockHash": "0x210039ae11e7737c501408e9da37636281275a1c8be2e77a39b73708099c0c2f", + "blockNumber": "0xf", + "transactionHash": "0x29b1e1d35192f146dc81eb4aa7aa238e1ba8c8860b2ad187448e2ae942921ca3", "transactionIndex": "0x6", "logIndex": "0xe", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x7462776f726c640000000000000000005265736f757263654163636573730000" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000026e73000000000000000000000000000000000000000000000000000000000000000000000000000000000000fc5b03fbae0bca9422ee706687c00072475a033700000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", - "blockNumber": "0x13", - "transactionHash": "0x79520ebbc3d83ac78ceb9547a7e995a35258dd4561e550ff701552a1c5c5a4fc", + "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000026e73000000000000000000000000000000000000000000000000000000000000000000000000000000000000457a739febe34229495ac45d6c884e5404b7002b00000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x210039ae11e7737c501408e9da37636281275a1c8be2e77a39b73708099c0c2f", + "blockNumber": "0xf", + "transactionHash": "0x29b1e1d35192f146dc81eb4aa7aa238e1ba8c8860b2ad187448e2ae942921ca3", "transactionIndex": "0x6", "logIndex": "0xf", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001737900000000000000000000000000004e756d6265724c69737453797374656d00000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", - "blockNumber": "0x13", - "transactionHash": "0x6d38cee4bcb86cc87787166548b30a4165ad21e6a4574f7593a942b9e5ca912a", + "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000173790000000000000000000000000000437573746f6d4572726f72735379737400000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x210039ae11e7737c501408e9da37636281275a1c8be2e77a39b73708099c0c2f", + "blockNumber": "0xf", + "transactionHash": "0x95c51a08ece42f77d2276276bec82f28aa17690ac542c2f0ad64185dae5643e7", "transactionIndex": "0x7", "logIndex": "0x10", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000053797374656d73000000000000000000" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000001737900000000000000000000000000004e756d6265724c69737453797374656d0000000000000000000000000000000000000000000000000000000000000015457a739febe34229495ac45d6c884e5404b7002b0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", - "blockNumber": "0x13", - "transactionHash": "0x6d38cee4bcb86cc87787166548b30a4165ad21e6a4574f7593a942b9e5ca912a", + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000173790000000000000000000000000000437573746f6d4572726f7273537973740000000000000000000000000000000000000000000000000000000000000015fc5b03fbae0bca9422ee706687c00072475a03370100000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x210039ae11e7737c501408e9da37636281275a1c8be2e77a39b73708099c0c2f", + "blockNumber": "0xf", + "transactionHash": "0x95c51a08ece42f77d2276276bec82f28aa17690ac542c2f0ad64185dae5643e7", "transactionIndex": "0x7", "logIndex": "0x11", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x7462776f726c6400000000000000000053797374656d52656769737472790000" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000457a739febe34229495ac45d6c884e5404b7002b0000000000000000000000000000000000000000000000000000000000000020737900000000000000000000000000004e756d6265724c69737453797374656d", - "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", - "blockNumber": "0x13", - "transactionHash": "0x6d38cee4bcb86cc87787166548b30a4165ad21e6a4574f7593a942b9e5ca912a", + "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000fc5b03fbae0bca9422ee706687c00072475a0337000000000000000000000000000000000000000000000000000000000000002073790000000000000000000000000000437573746f6d4572726f727353797374", + "blockHash": "0x210039ae11e7737c501408e9da37636281275a1c8be2e77a39b73708099c0c2f", + "blockNumber": "0xf", + "transactionHash": "0x95c51a08ece42f77d2276276bec82f28aa17690ac542c2f0ad64185dae5643e7", "transactionIndex": "0x7", "logIndex": "0x12", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x7462776f726c640000000000000000005265736f757263654163636573730000" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000026e73000000000000000000000000000000000000000000000000000000000000000000000000000000000000457a739febe34229495ac45d6c884e5404b7002b00000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", - "blockNumber": "0x13", - "transactionHash": "0x6d38cee4bcb86cc87787166548b30a4165ad21e6a4574f7593a942b9e5ca912a", + "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000026e73000000000000000000000000000000000000000000000000000000000000000000000000000000000000fc5b03fbae0bca9422ee706687c00072475a033700000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x210039ae11e7737c501408e9da37636281275a1c8be2e77a39b73708099c0c2f", + "blockNumber": "0xf", + "transactionHash": "0x95c51a08ece42f77d2276276bec82f28aa17690ac542c2f0ad64185dae5643e7", "transactionIndex": "0x7", "logIndex": "0x13", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x746273746f72650000000000000000005265736f757263654964730000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001737900000000000000000000000000004e756d62657253797374656d0000000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", - "blockNumber": "0x13", - "transactionHash": "0x4b2bdcf02ac7c041fbba6d803b14ca319d723a12d0c740ef12e101df7c25bda4", + "blockHash": "0x210039ae11e7737c501408e9da37636281275a1c8be2e77a39b73708099c0c2f", + "blockNumber": "0xf", + "transactionHash": "0x3a35206dfa4eb9cb8490da7e24cd0201e4a1535a33a7c630b1205a012e4d1f9e", "transactionIndex": "0x8", "logIndex": "0x14", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000053797374656d73000000000000000000" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000001737900000000000000000000000000004e756d62657253797374656d00000000000000000000000000000000000000000000000000000000000000000000001592ac32a7704741a284881aec75dceca7f1ce117c0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", - "blockNumber": "0x13", - "transactionHash": "0x4b2bdcf02ac7c041fbba6d803b14ca319d723a12d0c740ef12e101df7c25bda4", + "blockHash": "0x210039ae11e7737c501408e9da37636281275a1c8be2e77a39b73708099c0c2f", + "blockNumber": "0xf", + "transactionHash": "0x3a35206dfa4eb9cb8490da7e24cd0201e4a1535a33a7c630b1205a012e4d1f9e", "transactionIndex": "0x8", "logIndex": "0x15", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x7462776f726c6400000000000000000053797374656d52656769737472790000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000092ac32a7704741a284881aec75dceca7f1ce117c0000000000000000000000000000000000000000000000000000000000000020737900000000000000000000000000004e756d62657253797374656d00000000", - "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", - "blockNumber": "0x13", - "transactionHash": "0x4b2bdcf02ac7c041fbba6d803b14ca319d723a12d0c740ef12e101df7c25bda4", + "blockHash": "0x210039ae11e7737c501408e9da37636281275a1c8be2e77a39b73708099c0c2f", + "blockNumber": "0xf", + "transactionHash": "0x3a35206dfa4eb9cb8490da7e24cd0201e4a1535a33a7c630b1205a012e4d1f9e", "transactionIndex": "0x8", "logIndex": "0x16", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x7462776f726c640000000000000000005265736f757263654163636573730000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000026e7300000000000000000000000000000000000000000000000000000000000000000000000000000000000092ac32a7704741a284881aec75dceca7f1ce117c00000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", - "blockNumber": "0x13", - "transactionHash": "0x4b2bdcf02ac7c041fbba6d803b14ca319d723a12d0c740ef12e101df7c25bda4", + "blockHash": "0x210039ae11e7737c501408e9da37636281275a1c8be2e77a39b73708099c0c2f", + "blockNumber": "0xf", + "transactionHash": "0x3a35206dfa4eb9cb8490da7e24cd0201e4a1535a33a7c630b1205a012e4d1f9e", "transactionIndex": "0x8", "logIndex": "0x17", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ - "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", - "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" + "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", + "0x746273746f72650000000000000000005265736f757263654964730000000000" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001a4ece52c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024737900000000000000000000000000004e756d6265724c69737453797374656da4ece52c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", - "blockNumber": "0x13", - "transactionHash": "0x32b09727d06b40b8e6730d80c1dffdcf3a13dfa79277e6c2c00f53b65ee69e27", + "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000173790000000000000000000000000000566563746f7253797374656d0000000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x210039ae11e7737c501408e9da37636281275a1c8be2e77a39b73708099c0c2f", + "blockNumber": "0xf", + "transactionHash": "0x7b2c5099e9204bfdcccbe0bad8b1bf4f6173a9725276b27be5752f7fe9b8919c", "transactionIndex": "0x9", "logIndex": "0x18", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", - "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" + "0x7462776f726c6400000000000000000053797374656d73000000000000000000" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000050000000000000500000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001a4ece52c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005706f702829000000000000000000000000000000000000000000000000000000", - "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", - "blockNumber": "0x13", - "transactionHash": "0x32b09727d06b40b8e6730d80c1dffdcf3a13dfa79277e6c2c00f53b65ee69e27", + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000173790000000000000000000000000000566563746f7253797374656d0000000000000000000000000000000000000000000000000000000000000000000000158e82b6c00aa060d3432129c57b159d8dd10cffdc0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x210039ae11e7737c501408e9da37636281275a1c8be2e77a39b73708099c0c2f", + "blockNumber": "0xf", + "transactionHash": "0x7b2c5099e9204bfdcccbe0bad8b1bf4f6173a9725276b27be5752f7fe9b8919c", "transactionIndex": "0x9", "logIndex": "0x19", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", + "topics": [ + "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", + "0x7462776f726c6400000000000000000053797374656d52656769737472790000" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000010000000000000000000000008e82b6c00aa060d3432129c57b159d8dd10cffdc000000000000000000000000000000000000000000000000000000000000002073790000000000000000000000000000566563746f7253797374656d00000000", + "blockHash": "0x210039ae11e7737c501408e9da37636281275a1c8be2e77a39b73708099c0c2f", + "blockNumber": "0xf", + "transactionHash": "0x7b2c5099e9204bfdcccbe0bad8b1bf4f6173a9725276b27be5752f7fe9b8919c", + "transactionIndex": "0x9", + "logIndex": "0x1a", + "removed": false + }, + { + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", + "topics": [ + "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", + "0x7462776f726c640000000000000000005265736f757263654163636573730000" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000026e730000000000000000000000000000000000000000000000000000000000000000000000000000000000008e82b6c00aa060d3432129c57b159d8dd10cffdc00000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x210039ae11e7737c501408e9da37636281275a1c8be2e77a39b73708099c0c2f", + "blockNumber": "0xf", + "transactionHash": "0x7b2c5099e9204bfdcccbe0bad8b1bf4f6173a9725276b27be5752f7fe9b8919c", + "transactionIndex": "0x9", + "logIndex": "0x1b", + "removed": false + }, + { + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000019dc63213000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024737900000000000000000000000000004e756d62657253797374656d000000009dc63213000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", - "blockNumber": "0x13", - "transactionHash": "0x14f569a9bd3be8c07ec272cb08c7137598e56b93f045e67c8820c1ac57e5f55e", + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000014ac3618f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002473790000000000000000000000000000566563746f7253797374656d000000004ac3618f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x210039ae11e7737c501408e9da37636281275a1c8be2e77a39b73708099c0c2f", + "blockNumber": "0xf", + "transactionHash": "0xb2ea7b6b8c388826507ab26211c023f9ca431aba6c07c68ac1568d223fff9550", "transactionIndex": "0xa", - "logIndex": "0x1a", + "logIndex": "0x1c", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000180000000000001800000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000019dc6321300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000187365744e756d6265722875696e7433322c75696e743332290000000000000000", - "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", - "blockNumber": "0x13", - "transactionHash": "0x14f569a9bd3be8c07ec272cb08c7137598e56b93f045e67c8820c1ac57e5f55e", + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000001d0000000000001d00000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000014ac3618f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d736574566563746f722875696e7433322c696e7433322c696e74333229000000", + "blockHash": "0x210039ae11e7737c501408e9da37636281275a1c8be2e77a39b73708099c0c2f", + "blockNumber": "0xf", + "transactionHash": "0xb2ea7b6b8c388826507ab26211c023f9ca431aba6c07c68ac1568d223fff9550", "transactionIndex": "0xa", - "logIndex": "0x1b", + "logIndex": "0x1d", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001f7f0e440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024737900000000000000000000000000004e756d6265724c69737453797374656df7f0e440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", - "blockNumber": "0x13", - "transactionHash": "0x7a7cbaae3b678038c962b4004e12464d84d7744f47a45bf76d3817ee91f7c870", + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001a4ece52c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024737900000000000000000000000000004e756d6265724c69737453797374656da4ece52c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x210039ae11e7737c501408e9da37636281275a1c8be2e77a39b73708099c0c2f", + "blockNumber": "0xf", + "transactionHash": "0x0db918fecc06d98e3379101d8f46caa20073e62b4498b5d7def01dc54790bcac", "transactionIndex": "0xb", - "logIndex": "0x1c", + "logIndex": "0x1e", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000c0000000000000c00000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001f7f0e440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c707573682875696e743332290000000000000000000000000000000000000000", - "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", - "blockNumber": "0x13", - "transactionHash": "0x7a7cbaae3b678038c962b4004e12464d84d7744f47a45bf76d3817ee91f7c870", + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000050000000000000500000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001a4ece52c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005706f702829000000000000000000000000000000000000000000000000000000", + "blockHash": "0x210039ae11e7737c501408e9da37636281275a1c8be2e77a39b73708099c0c2f", + "blockNumber": "0xf", + "transactionHash": "0x0db918fecc06d98e3379101d8f46caa20073e62b4498b5d7def01dc54790bcac", "transactionIndex": "0xb", - "logIndex": "0x1d", + "logIndex": "0x1f", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000015f644e3c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002473790000000000000000000000000000437573746f6d4572726f7273537973745f644e3c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", - "blockNumber": "0x13", - "transactionHash": "0x0ed43af0aec46dd4631f4e4613b700573028e69cc93afa16344b1747be8d82bf", + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001b8a44c7c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024737900000000000000000000000000004e756d6265724c69737453797374656db8a44c7c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x210039ae11e7737c501408e9da37636281275a1c8be2e77a39b73708099c0c2f", + "blockNumber": "0xf", + "transactionHash": "0x6ea913cdec90cd2475498da850e361bb9c743ea501487182679e647c83c54eff", "transactionIndex": "0xc", - "logIndex": "0x1e", + "logIndex": "0x20", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000d0000000000000d00000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000015f644e3c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d737475622875696e743235362900000000000000000000000000000000000000", - "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", - "blockNumber": "0x13", - "transactionHash": "0x0ed43af0aec46dd4631f4e4613b700573028e69cc93afa16344b1747be8d82bf", + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000d0000000000000d00000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001b8a44c7c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d7365742875696e7433325b5d2900000000000000000000000000000000000000", + "blockHash": "0x210039ae11e7737c501408e9da37636281275a1c8be2e77a39b73708099c0c2f", + "blockNumber": "0xf", + "transactionHash": "0x6ea913cdec90cd2475498da850e361bb9c743ea501487182679e647c83c54eff", "transactionIndex": "0xc", - "logIndex": "0x1f", + "logIndex": "0x21", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001306d61a5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024737900000000000000000000000000004e756d6265724c69737453797374656d306d61a5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", - "blockNumber": "0x13", - "transactionHash": "0x1a7570a37fc004baf656efcfc272d7ec1ddead95ea07f7c46e920a28a059ba63", + "blockHash": "0x210039ae11e7737c501408e9da37636281275a1c8be2e77a39b73708099c0c2f", + "blockNumber": "0xf", + "transactionHash": "0x8eb644c2a9343a7a3f8dcd4c9305c6621b907273ab92a407c7f9f670cd3d9bf0", "transactionIndex": "0xd", - "logIndex": "0x20", + "logIndex": "0x22", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000180000000000001800000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001306d61a500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000187075736852616e67652875696e7433322c75696e743332290000000000000000", - "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", - "blockNumber": "0x13", - "transactionHash": "0x1a7570a37fc004baf656efcfc272d7ec1ddead95ea07f7c46e920a28a059ba63", + "blockHash": "0x210039ae11e7737c501408e9da37636281275a1c8be2e77a39b73708099c0c2f", + "blockNumber": "0xf", + "transactionHash": "0x8eb644c2a9343a7a3f8dcd4c9305c6621b907273ab92a407c7f9f670cd3d9bf0", "transactionIndex": "0xd", - "logIndex": "0x21", + "logIndex": "0x23", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001b8a44c7c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024737900000000000000000000000000004e756d6265724c69737453797374656db8a44c7c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", - "blockNumber": "0x13", - "transactionHash": "0xa5d2aa5e3a595ac68cd53babb7a7832caa1b95157c565179a63781ea9576b116", + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000001f7f0e440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024737900000000000000000000000000004e756d6265724c69737453797374656df7f0e440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x210039ae11e7737c501408e9da37636281275a1c8be2e77a39b73708099c0c2f", + "blockNumber": "0xf", + "transactionHash": "0xc36df888eddca8328b58de196a352a3d3df03538935ef808eb1c1c5a2bd6b683", "transactionIndex": "0xe", - "logIndex": "0x22", + "logIndex": "0x24", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" ], - "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000d0000000000000d00000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001b8a44c7c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d7365742875696e7433325b5d2900000000000000000000000000000000000000", - "blockHash": "0x34ce4088b51316a2eaa8f0e9acf9ee65f5a8b1d6fed7192b28a52966991c2c1f", - "blockNumber": "0x13", - "transactionHash": "0xa5d2aa5e3a595ac68cd53babb7a7832caa1b95157c565179a63781ea9576b116", + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000c0000000000000c00000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001f7f0e440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c707573682875696e743332290000000000000000000000000000000000000000", + "blockHash": "0x210039ae11e7737c501408e9da37636281275a1c8be2e77a39b73708099c0c2f", + "blockNumber": "0xf", + "transactionHash": "0xc36df888eddca8328b58de196a352a3d3df03538935ef808eb1c1c5a2bd6b683", "transactionIndex": "0xe", - "logIndex": "0x23", + "logIndex": "0x25", + "removed": false + }, + { + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", + "topics": [ + "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", + "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" + ], + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000015f644e3c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002473790000000000000000000000000000437573746f6d4572726f7273537973745f644e3c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x210039ae11e7737c501408e9da37636281275a1c8be2e77a39b73708099c0c2f", + "blockNumber": "0xf", + "transactionHash": "0x944d669f90af39490a63c32ea303b46e9ed63dc113f61f391714156b5473dd21", + "transactionIndex": "0xf", + "logIndex": "0x26", + "removed": false + }, + { + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", + "topics": [ + "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", + "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" + ], + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000d0000000000000d00000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000015f644e3c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d737475622875696e743235362900000000000000000000000000000000000000", + "blockHash": "0x210039ae11e7737c501408e9da37636281275a1c8be2e77a39b73708099c0c2f", + "blockNumber": "0xf", + "transactionHash": "0x944d669f90af39490a63c32ea303b46e9ed63dc113f61f391714156b5473dd21", + "transactionIndex": "0xf", + "logIndex": "0x27", + "removed": false + }, + { + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", + "topics": [ + "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", + "0x7462776f726c6400000000000000000046756e6374696f6e53656c6563746f72" + ], + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000019dc63213000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024737900000000000000000000000000004e756d62657253797374656d000000009dc63213000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x210039ae11e7737c501408e9da37636281275a1c8be2e77a39b73708099c0c2f", + "blockNumber": "0xf", + "transactionHash": "0x022a1607592af9c9a42fafd344c1719c0b6ea9c6fbaa8afe4401e9379b9119f1", + "transactionIndex": "0x10", + "logIndex": "0x28", + "removed": false + }, + { + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", + "topics": [ + "0x8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9", + "0x6f74776f726c6400000000000000000046756e6374696f6e5369676e61747572" + ], + "data": "0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000180000000000001800000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000019dc6321300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000187365744e756d6265722875696e7433322c75696e743332290000000000000000", + "blockHash": "0x210039ae11e7737c501408e9da37636281275a1c8be2e77a39b73708099c0c2f", + "blockNumber": "0xf", + "transactionHash": "0x022a1607592af9c9a42fafd344c1719c0b6ea9c6fbaa8afe4401e9379b9119f1", + "transactionIndex": "0x10", + "logIndex": "0x29", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x74620000000000000000000000000000506f736974696f6e0000000000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000036d617031000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000141804c8ab1f12e6bbf3894d4083f33e07309d1f38000000000000000000000000", - "blockHash": "0x8015b5b9d106defc77b86bc97cd614c29a24ce0a43165d0fd451089fbfda2e3b", - "blockNumber": "0x1b", - "transactionHash": "0x7b844b045cb5b6e8a957cddec58443a744c4c2cccdfbbc8383dae1fdefe37311", + "blockHash": "0x0f760dbd9f95542c21e73f9700439b6d744d1bf9401b8a5f9bd482aae60ec1a4", + "blockNumber": "0x14", + "transactionHash": "0x0b3ef3e5ab349b1837caf61c2f3f30841602847def0a6e8299b03e40483d0191", "transactionIndex": "0x0", "logIndex": "0x0", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x74620000000000000000000000000000506f736974696f6e0000000000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000036d617031000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00000000000000000000000000000000000000000000000000000000000000141804c8ab1f12e6bbf3894d4083f33e07309d1f38000000000000000000000000", - "blockHash": "0x8015b5b9d106defc77b86bc97cd614c29a24ce0a43165d0fd451089fbfda2e3b", - "blockNumber": "0x1b", - "transactionHash": "0x2c61ec56dcafc661c8299ab4ec4a06535612ed83ecc3b6cec54d1a0f3229eb1e", + "blockHash": "0x0f760dbd9f95542c21e73f9700439b6d744d1bf9401b8a5f9bd482aae60ec1a4", + "blockNumber": "0x14", + "transactionHash": "0xc4c048f523795711eed07a81778cb5153f4efea89637232584789f10e91d7b07", "transactionIndex": "0x1", "logIndex": "0x1", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x74620000000000000000000000000000506f736974696f6e0000000000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000036d617032000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9d00000000000000000000000000000000000000000000000000000000000000141804c8ab1f12e6bbf3894d4083f33e07309d1f38000000000000000000000000", - "blockHash": "0x8015b5b9d106defc77b86bc97cd614c29a24ce0a43165d0fd451089fbfda2e3b", - "blockNumber": "0x1b", - "transactionHash": "0x9ab190e1d03aeaa0b30e715905a0f246b4539af1b3e6ae306330f651c934c77d", + "blockHash": "0x0f760dbd9f95542c21e73f9700439b6d744d1bf9401b8a5f9bd482aae60ec1a4", + "blockNumber": "0x14", + "transactionHash": "0x68911826302c2cb72ee5eba95cfd4b0331924086d58f03f58987f62029bd4868", "transactionIndex": "0x2", "logIndex": "0x2", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x74620000000000000000000000000000506f736974696f6e0000000000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000036d617032000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006300000000000000000000000000000000000000000000000000000000000000141804c8ab1f12e6bbf3894d4083f33e07309d1f38000000000000000000000000", - "blockHash": "0x8015b5b9d106defc77b86bc97cd614c29a24ce0a43165d0fd451089fbfda2e3b", - "blockNumber": "0x1b", - "transactionHash": "0x3d66c48cec11a2506597ade7e15f31526f0928f68f47552d82dca0b6e73d53a8", + "blockHash": "0x0f760dbd9f95542c21e73f9700439b6d744d1bf9401b8a5f9bd482aae60ec1a4", + "blockNumber": "0x14", + "transactionHash": "0xd674b25dfba1759ccc9ccc444c47a2f594845dbc8a85f0a9b72581edc15f32f3", "transactionIndex": "0x3", "logIndex": "0x3", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0x8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be", "0x74620000000000000000000000000000506f736974696f6e0000000000000000" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000036d617039390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063000000000000000000000000000000000000000000000000000000000000006300000000000000000000000000000000000000000000000000000000000000141804c8ab1f12e6bbf3894d4083f33e07309d1f38000000000000000000000000", - "blockHash": "0x8015b5b9d106defc77b86bc97cd614c29a24ce0a43165d0fd451089fbfda2e3b", - "blockNumber": "0x1b", - "transactionHash": "0x19b831a3a61bad0a90621268b9c1d48f85bc8b1eb17848e09c812f5670bd5cd8", + "blockHash": "0x0f760dbd9f95542c21e73f9700439b6d744d1bf9401b8a5f9bd482aae60ec1a4", + "blockNumber": "0x14", + "transactionHash": "0x7681fc788d79ba97f2e86a99caa9584efe8bfaee62def781c2d71910b2629d2f", "transactionIndex": "0x4", "logIndex": "0x4", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0xfe158a7adba34e256807c8a149028d3162918713c3838afc643ce9f96716ebfd", "0x746200000000000000000000000000004e756d6265724c697374000000000000" ], "data": "0x00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000400000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000001a400000000000000000000000000000000000000000000000000000000", - "blockHash": "0x5eaefdb48fb1dcb49a67b1415153803c8bec7c9a66ea94588f353a100301e079", - "blockNumber": "0x1c", - "transactionHash": "0xe43823eb35b3ef60d905de57cd3315e117765e52402935e68bfa25a7da66c398", + "blockHash": "0x2a24cbc339bc09cf996422ff09f0a3b8f922db4ea45f49b843c141f3b0ed34b9", + "blockNumber": "0x15", + "transactionHash": "0x2395d76625e7d6da9b6809be4a9673d8e12a488a4b305a2e0e548ed46d7b2411", "transactionIndex": "0x0", "logIndex": "0x0", "removed": false }, { - "address": "0xd843fb6a5fd209344e5a1b3d5c121330c2b4a36f", + "address": "0x7c78d585f136d7247f9dea68f60ce8a2d3f311e2", "topics": [ "0xfe158a7adba34e256807c8a149028d3162918713c3838afc643ce9f96716ebfd", "0x746200000000000000000000000000004e756d6265724c697374000000000000" ], "data": "0x00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000800000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000004500000000000000000000000000000000000000000000000000000000", - "blockHash": "0x5eaefdb48fb1dcb49a67b1415153803c8bec7c9a66ea94588f353a100301e079", - "blockNumber": "0x1c", - "transactionHash": "0xd38b3443be1cb921a936e71026316f5ee0a4be69f1b43be1068d7183f2efc566", + "blockHash": "0x2a24cbc339bc09cf996422ff09f0a3b8f922db4ea45f49b843c141f3b0ed34b9", + "blockNumber": "0x15", + "transactionHash": "0x47b137df1a9e27f6f3048d17302a992d7261330ce3301dbd542a235549009b9a", "transactionIndex": "0x1", "logIndex": "0x1", "removed": false From f8af70f5bce006fa1ee7ae25f2a334d953c081cb Mon Sep 17 00:00:00 2001 From: yonada Date: Fri, 23 Feb 2024 11:22:07 +0000 Subject: [PATCH 16/24] test: add benchmark GitHub workflow (#2234) Co-authored-by: Kevin Ingersoll --- .github/workflows/bench.yml | 37 +++++++++++++++++++++++++++++++++++++ e2e/package.json | 1 + package.json | 1 + 3 files changed, 39 insertions(+) create mode 100644 .github/workflows/bench.yml diff --git a/.github/workflows/bench.yml b/.github/workflows/bench.yml new file mode 100644 index 0000000000..81733f5f13 --- /dev/null +++ b/.github/workflows/bench.yml @@ -0,0 +1,37 @@ +name: Benchmarks + +on: + workflow_dispatch: + +jobs: + benchmarks: + name: Run benchmarks + runs-on: ubuntu-latest-16-cores + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Setup + uses: ./.github/actions/setup + + - name: Build + uses: ./.github/actions/build + + - name: Install end-to-end testing dependencies + working-directory: ./e2e + run: pnpm install + + - name: Clean end-to-end project + working-directory: ./e2e + run: pnpm run clean + + - name: Build end-to-end project + working-directory: ./e2e + run: pnpm run build + + - name: Generate test data + working-directory: ./e2e + run: pnpm run generate-test-data-records + + - name: Run benchmarks + run: pnpm run bench diff --git a/e2e/package.json b/e2e/package.json index 446c64733d..c2cf63ffe7 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -4,6 +4,7 @@ "scripts": { "build": "pnpm recursive run build", "clean": "pnpm recursive run clean", + "generate-test-data-records": "pnpm run --filter=test-data generate-test-data-records", "playwright-install": "pnpx playwright@1.35.1 install --with-deps chromium", "test": "pnpm recursive run test", "test:ci": "pnpm run test" diff --git a/package.json b/package.json index 9cdf926630..17c7bc3c33 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "scripts": { "all-codegen": "for dir in packages/store packages/world packages/world-modules packages/cli e2e/packages/contracts examples/*/packages/contracts templates/*/packages/contracts; do (cd \"$dir\" && pwd && pnpm build); done", "all-install": "for dir in . docs e2e examples/* templates/*; do (cd \"$dir\" && pwd && pnpm install); done", + "bench": "pnpm run --recursive bench", "build": "turbo run build", "clean": "turbo run clean", "dev": "turbo run dev --concurrency 100", From 86736492ef2a3161731ef2213a68b1e2400a289e Mon Sep 17 00:00:00 2001 From: yonada Date: Fri, 23 Feb 2024 11:32:42 +0000 Subject: [PATCH 17/24] fix: use correct command to generate benchmark data (#2296) --- .github/workflows/bench.yml | 2 +- e2e/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/bench.yml b/.github/workflows/bench.yml index 81733f5f13..f429b41055 100644 --- a/.github/workflows/bench.yml +++ b/.github/workflows/bench.yml @@ -31,7 +31,7 @@ jobs: - name: Generate test data working-directory: ./e2e - run: pnpm run generate-test-data-records + run: pnpm run generate-bench-data-bulk - name: Run benchmarks run: pnpm run bench diff --git a/e2e/package.json b/e2e/package.json index c2cf63ffe7..e5340c0a4a 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -4,7 +4,7 @@ "scripts": { "build": "pnpm recursive run build", "clean": "pnpm recursive run clean", - "generate-test-data-records": "pnpm run --filter=test-data generate-test-data-records", + "generate-bench-data-bulk": "pnpm run --filter=test-data generate-bench-data-bulk", "playwright-install": "pnpx playwright@1.35.1 install --with-deps chromium", "test": "pnpm recursive run test", "test:ci": "pnpm run test" From 3d65968f1c8bffbc568ea368e65d0c4ac76b9da4 Mon Sep 17 00:00:00 2001 From: yonada Date: Fri, 23 Feb 2024 11:41:50 +0000 Subject: [PATCH 18/24] fix: generate query data in benchmark action (#2297) --- .github/workflows/bench.yml | 6 +++++- e2e/package.json | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/bench.yml b/.github/workflows/bench.yml index f429b41055..e6f30cf6a8 100644 --- a/.github/workflows/bench.yml +++ b/.github/workflows/bench.yml @@ -29,9 +29,13 @@ jobs: working-directory: ./e2e run: pnpm run build - - name: Generate test data + - name: Generate bench bulk data working-directory: ./e2e run: pnpm run generate-bench-data-bulk + - name: Generate bench query data + working-directory: ./e2e + run: pnpm run generate-bench-data-query + - name: Run benchmarks run: pnpm run bench diff --git a/e2e/package.json b/e2e/package.json index e5340c0a4a..2b228709d6 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -5,6 +5,7 @@ "build": "pnpm recursive run build", "clean": "pnpm recursive run clean", "generate-bench-data-bulk": "pnpm run --filter=test-data generate-bench-data-bulk", + "generate-bench-data-query": "pnpm run --filter=test-data generate-bench-data-query", "playwright-install": "pnpx playwright@1.35.1 install --with-deps chromium", "test": "pnpm recursive run test", "test:ci": "pnpm run test" From d7b1c588a73ab8d5f49165841fde3bfbe78fd981 Mon Sep 17 00:00:00 2001 From: tash-2s <81064017+tash-2s@users.noreply.github.com> Date: Fri, 23 Feb 2024 06:39:42 -0600 Subject: [PATCH 19/24] feat: upgrade viem to v2 (#2284) Co-authored-by: Kevin Ingersoll --- .changeset/twelve-gorillas-learn.md | 29 ++++++ e2e/packages/client-vanilla/package.json | 2 +- .../client-vanilla/src/mud/setupNetwork.ts | 3 +- e2e/packages/sync-test/package.json | 4 +- e2e/packages/test-data/generateLogs.ts | 3 +- e2e/packages/test-data/package.json | 2 +- e2e/pnpm-lock.yaml | 51 ++++------ .../packages/client-phaser/package.json | 2 +- .../client-phaser/src/mud/setupNetwork.ts | 3 +- .../packages/client-react/package.json | 2 +- .../client-react/src/mud/setupNetwork.ts | 3 +- .../packages/client-vanilla/package.json | 2 +- .../client-vanilla/src/mud/setupNetwork.ts | 3 +- examples/minimal/pnpm-lock.yaml | 49 ++++----- .../packages/client/package.json | 2 +- .../packages/client/src/App.tsx | 3 +- .../packages/client/src/mud/setupNetwork.ts | 3 +- examples/multiple-accounts/pnpm-lock.yaml | 37 +++---- packages/block-logs-stream/package.json | 4 +- packages/block-logs-stream/tsconfig.json | 1 + packages/cli/package.json | 2 +- packages/cli/src/deploy/ensureWorldFactory.ts | 10 +- packages/common/package.json | 2 +- packages/common/src/chains/latticeTestnet.ts | 1 - packages/common/src/getContract.ts | 38 +++++-- packages/common/src/sendTransaction.ts | 7 +- packages/common/src/writeContract.ts | 25 ++--- packages/config/package.json | 2 +- packages/dev-tools/package.json | 2 +- packages/dev-tools/tsconfig.json | 1 + packages/faucet/package.json | 2 +- packages/protocol-parser/package.json | 4 +- packages/protocol-parser/tsconfig.json | 1 + packages/schema-type/package.json | 4 +- packages/schema-type/tsconfig.json | 1 + packages/store-indexer/package.json | 2 +- packages/store-sync/package.json | 2 +- packages/store/package.json | 4 +- packages/world/package.json | 4 +- packages/world/ts/encodeSystemCall.ts | 24 ++--- packages/world/ts/encodeSystemCallFrom.ts | 16 ++- packages/world/ts/encodeSystemCalls.ts | 7 +- packages/world/ts/encodeSystemCallsFrom.ts | 7 +- pnpm-lock.yaml | 99 +++++++++---------- templates/phaser/packages/client/package.json | 2 +- .../packages/client/src/mud/setupNetwork.ts | 3 +- .../react-ecs/packages/client/package.json | 2 +- .../packages/client/src/mud/setupNetwork.ts | 3 +- templates/react/packages/client/package.json | 2 +- .../packages/client/src/mud/setupNetwork.ts | 3 +- .../threejs/packages/client/package.json | 2 +- .../packages/client/src/mud/setupNetwork.ts | 3 +- .../vanilla/packages/client/package.json | 2 +- .../packages/client/src/mud/setupNetwork.ts | 3 +- 54 files changed, 257 insertions(+), 243 deletions(-) create mode 100644 .changeset/twelve-gorillas-learn.md diff --git a/.changeset/twelve-gorillas-learn.md b/.changeset/twelve-gorillas-learn.md new file mode 100644 index 0000000000..156b854945 --- /dev/null +++ b/.changeset/twelve-gorillas-learn.md @@ -0,0 +1,29 @@ +--- +"@latticexyz/block-logs-stream": minor +"@latticexyz/cli": minor +"@latticexyz/common": minor +"@latticexyz/config": minor +"@latticexyz/dev-tools": minor +"@latticexyz/faucet": minor +"@latticexyz/protocol-parser": minor +"@latticexyz/schema-type": minor +"@latticexyz/store-indexer": minor +"@latticexyz/store-sync": minor +"@latticexyz/store": minor +"@latticexyz/world": minor +"create-mud": minor +--- + +Upgraded all packages and templates to viem v2.7.12 and abitype v1.0.0. + +Some viem APIs have changed and we've updated `getContract` to reflect those changes and keep it aligned with viem. It's one small code change: + +```diff + const worldContract = getContract({ + address: worldAddress, + abi: IWorldAbi, +- publicClient, +- walletClient, ++ client: { public: publicClient, wallet: walletClient }, + }); +``` diff --git a/e2e/packages/client-vanilla/package.json b/e2e/packages/client-vanilla/package.json index 7b36ac61e1..89bf99c5ec 100644 --- a/e2e/packages/client-vanilla/package.json +++ b/e2e/packages/client-vanilla/package.json @@ -29,7 +29,7 @@ "react": "^18.2.0", "rxjs": "7.5.5", "threads": "^1.7.0", - "viem": "1.14.0" + "viem": "2.7.12" }, "devDependencies": { "rimraf": "^3.0.2", diff --git a/e2e/packages/client-vanilla/src/mud/setupNetwork.ts b/e2e/packages/client-vanilla/src/mud/setupNetwork.ts index 34e93b7bdc..8b6fdea78e 100644 --- a/e2e/packages/client-vanilla/src/mud/setupNetwork.ts +++ b/e2e/packages/client-vanilla/src/mud/setupNetwork.ts @@ -29,8 +29,7 @@ export async function setupNetwork() { const worldContract = getContract({ address: networkConfig.worldAddress as Hex, abi: IWorldAbi, - publicClient, - walletClient: burnerWalletClient, + client: { public: publicClient, wallet: burnerWalletClient }, }); const { components, latestBlock$, storedBlockLogs$, waitForTransaction } = await syncToRecs({ diff --git a/e2e/packages/sync-test/package.json b/e2e/packages/sync-test/package.json index 7b6a0620fc..b7478f5864 100644 --- a/e2e/packages/sync-test/package.json +++ b/e2e/packages/sync-test/package.json @@ -20,7 +20,7 @@ "@latticexyz/store-sync": "link:../../../packages/store-sync", "@latticexyz/utils": "link:../../../packages/utils", "@viem/anvil": "^0.0.6", - "abitype": "0.9.8", + "abitype": "1.0.0", "chalk": "^5.2.0", "dotenv": "^16.0.3", "drizzle-orm": "^0.28.5", @@ -28,7 +28,7 @@ "happy-dom": "^12.10.3", "postgres": "3.3.5", "typescript": "5.1.6", - "viem": "1.14.0", + "viem": "2.7.12", "vite": "^4.2.1", "vitest": "0.34.6", "zod": "^3.22.2" diff --git a/e2e/packages/test-data/generateLogs.ts b/e2e/packages/test-data/generateLogs.ts index 62da742de9..fff5449b2f 100644 --- a/e2e/packages/test-data/generateLogs.ts +++ b/e2e/packages/test-data/generateLogs.ts @@ -69,8 +69,7 @@ export async function generateLogs( const worldContract = getContract({ address: worldAddress, abi: IWorldAbi, - publicClient, - walletClient, + client: { public: publicClient, wallet: walletClient }, }); const lastTx = await transactionHook(worldContract); diff --git a/e2e/packages/test-data/package.json b/e2e/packages/test-data/package.json index a47a61c7b9..f44e8e616b 100644 --- a/e2e/packages/test-data/package.json +++ b/e2e/packages/test-data/package.json @@ -18,6 +18,6 @@ "execa": "^7.1.1", "tsx": "^3.12.6", "typescript": "5.1.6", - "viem": "1.14.0" + "viem": "2.7.12" } } diff --git a/e2e/pnpm-lock.yaml b/e2e/pnpm-lock.yaml index 343f8419b6..5f0ff0d145 100644 --- a/e2e/pnpm-lock.yaml +++ b/e2e/pnpm-lock.yaml @@ -72,8 +72,8 @@ importers: specifier: ^1.7.0 version: 1.7.0 viem: - specifier: 1.14.0 - version: 1.14.0(typescript@5.1.6)(zod@3.22.2) + specifier: 2.7.12 + version: 2.7.12(typescript@5.1.6)(zod@3.22.2) devDependencies: rimraf: specifier: ^3.0.2 @@ -157,8 +157,8 @@ importers: specifier: ^0.0.6 version: 0.0.6 abitype: - specifier: 0.9.8 - version: 0.9.8(typescript@5.1.6)(zod@3.22.2) + specifier: 1.0.0 + version: 1.0.0(typescript@5.1.6)(zod@3.22.2) chalk: specifier: ^5.2.0 version: 5.2.0 @@ -181,8 +181,8 @@ importers: specifier: 5.1.6 version: 5.1.6 viem: - specifier: 1.14.0 - version: 1.14.0(typescript@5.1.6)(zod@3.22.2) + specifier: 2.7.12 + version: 2.7.12(typescript@5.1.6)(zod@3.22.2) vite: specifier: ^4.2.1 version: 4.3.5(@types/node@20.1.3) @@ -220,13 +220,13 @@ importers: specifier: 5.1.6 version: 5.1.6 viem: - specifier: 1.14.0 - version: 1.14.0(typescript@5.1.6)(zod@3.22.2) + specifier: 2.7.12 + version: 2.7.12(typescript@5.1.6)(zod@3.22.2) packages: - /@adraffy/ens-normalize@1.9.4: - resolution: {integrity: sha512-UK0bHA7hh9cR39V+4gl2/NnBBjoXIxkuWAPCaY4X7fbH4L/azIi7ilWOCjMUYfpJgraLUAqkRi2BqrjME8Rynw==} + /@adraffy/ens-normalize@1.10.0: + resolution: {integrity: sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q==} /@esbuild-kit/cjs-loader@2.4.2: resolution: {integrity: sha512-BDXFbYOJzT/NBEtp71cvsrGPwGAMGRB/349rwKuoxNSiKjPraNNnlK6MIIabViCjqZugu6j+xeMDlEkWdHHJSg==} @@ -748,9 +748,6 @@ packages: resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} dev: false - /@scure/base@1.1.1: - resolution: {integrity: sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==} - /@scure/base@1.1.3: resolution: {integrity: sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q==} @@ -765,7 +762,7 @@ packages: resolution: {integrity: sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==} dependencies: '@noble/hashes': 1.3.2 - '@scure/base': 1.1.1 + '@scure/base': 1.1.3 /@sinclair/typebox@0.27.8: resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} @@ -788,11 +785,6 @@ packages: /@types/node@20.1.3: resolution: {integrity: sha512-NP2yfZpgmf2eDRPmgGq+fjGjSwFgYbihA8/gK+ey23qT9RkxsgNTZvGOEpXgzIGqesTYkElELLgtKoMQTys5vA==} - /@types/ws@8.5.5: - resolution: {integrity: sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==} - dependencies: - '@types/node': 20.1.3 - /@viem/anvil@0.0.6: resolution: {integrity: sha512-OjKR/+FVwzuygXYFqP8MBal1SXG8bT2gbZwqqB0XuLw81LNBBvmE/Repm6+5kkBh4IUj0PhYdrqOsnayS14Gtg==} dependencies: @@ -844,11 +836,11 @@ packages: pretty-format: 29.7.0 dev: true - /abitype@0.9.8(typescript@5.1.6)(zod@3.22.2): - resolution: {integrity: sha512-puLifILdm+8sjyss4S+fsUN09obiT1g2YW6CtcQF+QDzxR0euzgEB29MZujC6zMk2a6SVmtttq1fc6+YFA7WYQ==} + /abitype@1.0.0(typescript@5.1.6)(zod@3.22.2): + resolution: {integrity: sha512-NMeMah//6bJ56H5XRj8QCV4AwuW6hB6zqz2LnhhLdcWVQOsXki6/Pn3APeqxCma62nXIcmZWdu1DlHWS74umVQ==} peerDependencies: typescript: '>=5.0.4' - zod: ^3 >=3.19.1 + zod: ^3 >=3.22.0 peerDependenciesMeta: typescript: optional: true @@ -1319,8 +1311,8 @@ packages: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true - /isomorphic-ws@5.0.0(ws@8.13.0): - resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} + /isows@1.0.3(ws@8.13.0): + resolution: {integrity: sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg==} peerDependencies: ws: '*' dependencies: @@ -1770,22 +1762,21 @@ packages: resolution: {integrity: sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==} dev: true - /viem@1.14.0(typescript@5.1.6)(zod@3.22.2): - resolution: {integrity: sha512-4d+4/H3lnbkSAbrpQ15i1nBA7hne06joLFy3L3m0ZpMc+g+Zr3D4nuSTyeiqbHAYs9m2P9Kjap0HlyGkehasgg==} + /viem@2.7.12(typescript@5.1.6)(zod@3.22.2): + resolution: {integrity: sha512-NbV+Bycw0I4X8y6A04mgJ6+Imt7xXwflgnqisR3JXoJRNc77YSaQCscFN/dmwGLESTkgegJvi+j4nZY32GTpwQ==} peerDependencies: typescript: '>=5.0.4' peerDependenciesMeta: typescript: optional: true dependencies: - '@adraffy/ens-normalize': 1.9.4 + '@adraffy/ens-normalize': 1.10.0 '@noble/curves': 1.2.0 '@noble/hashes': 1.3.2 '@scure/bip32': 1.3.2 '@scure/bip39': 1.2.1 - '@types/ws': 8.5.5 - abitype: 0.9.8(typescript@5.1.6)(zod@3.22.2) - isomorphic-ws: 5.0.0(ws@8.13.0) + abitype: 1.0.0(typescript@5.1.6)(zod@3.22.2) + isows: 1.0.3(ws@8.13.0) typescript: 5.1.6 ws: 8.13.0 transitivePeerDependencies: diff --git a/examples/minimal/packages/client-phaser/package.json b/examples/minimal/packages/client-phaser/package.json index d6835b6535..16644ea096 100644 --- a/examples/minimal/packages/client-phaser/package.json +++ b/examples/minimal/packages/client-phaser/package.json @@ -35,7 +35,7 @@ "styled-components": "^5.3.10", "threads": "^1.7.0", "use-resize-observer": "^9.1.0", - "viem": "1.14.0", + "viem": "2.7.12", "vite": "^4.2.1", "zustand": "^4.3.8" }, diff --git a/examples/minimal/packages/client-phaser/src/mud/setupNetwork.ts b/examples/minimal/packages/client-phaser/src/mud/setupNetwork.ts index 6c8e716ef3..e8348e953b 100644 --- a/examples/minimal/packages/client-phaser/src/mud/setupNetwork.ts +++ b/examples/minimal/packages/client-phaser/src/mud/setupNetwork.ts @@ -31,8 +31,7 @@ export async function setupNetwork() { const worldContract = getContract({ address: networkConfig.worldAddress as Hex, abi: IWorldAbi, - publicClient, - walletClient: burnerWalletClient, + client: { public: publicClient, wallet: burnerWalletClient }, onWrite: (write) => write$.next(write), }); diff --git a/examples/minimal/packages/client-react/package.json b/examples/minimal/packages/client-react/package.json index 4a50f1453f..9473eb0f9e 100644 --- a/examples/minimal/packages/client-react/package.json +++ b/examples/minimal/packages/client-react/package.json @@ -32,7 +32,7 @@ "react-dom": "^18.2.0", "rxjs": "7.5.5", "threads": "^1.7.0", - "viem": "1.14.0" + "viem": "2.7.12" }, "devDependencies": { "@types/react": "18.2.22", diff --git a/examples/minimal/packages/client-react/src/mud/setupNetwork.ts b/examples/minimal/packages/client-react/src/mud/setupNetwork.ts index 96f6a3f17c..9a27f78768 100644 --- a/examples/minimal/packages/client-react/src/mud/setupNetwork.ts +++ b/examples/minimal/packages/client-react/src/mud/setupNetwork.ts @@ -32,8 +32,7 @@ export async function setupNetwork() { const worldContract = getContract({ address: networkConfig.worldAddress as Hex, abi: IWorldAbi, - publicClient, - walletClient: burnerWalletClient, + client: { public: publicClient, wallet: burnerWalletClient }, onWrite: (write) => write$.next(write), }); diff --git a/examples/minimal/packages/client-vanilla/package.json b/examples/minimal/packages/client-vanilla/package.json index 33c15e3e32..a4566f54da 100644 --- a/examples/minimal/packages/client-vanilla/package.json +++ b/examples/minimal/packages/client-vanilla/package.json @@ -29,7 +29,7 @@ "react": "^18.2.0", "rxjs": "7.5.5", "threads": "^1.7.0", - "viem": "1.14.0" + "viem": "2.7.12" }, "devDependencies": { "vite": "^4.2.1", diff --git a/examples/minimal/packages/client-vanilla/src/mud/setupNetwork.ts b/examples/minimal/packages/client-vanilla/src/mud/setupNetwork.ts index 4574062b9d..2260624657 100644 --- a/examples/minimal/packages/client-vanilla/src/mud/setupNetwork.ts +++ b/examples/minimal/packages/client-vanilla/src/mud/setupNetwork.ts @@ -30,8 +30,7 @@ export async function setupNetwork() { const worldContract = getContract({ address: networkConfig.worldAddress as Hex, abi: IWorldAbi, - publicClient, - walletClient: burnerWalletClient, + client: { public: publicClient, wallet: burnerWalletClient }, onWrite: (write) => write$.next(write), }); diff --git a/examples/minimal/pnpm-lock.yaml b/examples/minimal/pnpm-lock.yaml index d05669c462..932aaf3a72 100644 --- a/examples/minimal/pnpm-lock.yaml +++ b/examples/minimal/pnpm-lock.yaml @@ -105,8 +105,8 @@ importers: specifier: ^9.1.0 version: 9.1.0(react-dom@18.2.0)(react@18.2.0) viem: - specifier: 1.14.0 - version: 1.14.0(typescript@5.1.6) + specifier: 2.7.12 + version: 2.7.12(typescript@5.1.6) vite: specifier: ^4.2.1 version: 4.2.1 @@ -208,8 +208,8 @@ importers: specifier: ^1.7.0 version: 1.7.0 viem: - specifier: 1.14.0 - version: 1.14.0(typescript@5.1.6) + specifier: 2.7.12 + version: 2.7.12(typescript@5.1.6) devDependencies: '@types/react': specifier: 18.2.22 @@ -293,8 +293,8 @@ importers: specifier: ^1.7.0 version: 1.7.0 viem: - specifier: 1.14.0 - version: 1.14.0(typescript@5.1.6) + specifier: 2.7.12 + version: 2.7.12(typescript@5.1.6) devDependencies: vite: specifier: ^4.2.1 @@ -396,8 +396,8 @@ importers: packages: - /@adraffy/ens-normalize@1.9.4: - resolution: {integrity: sha512-UK0bHA7hh9cR39V+4gl2/NnBBjoXIxkuWAPCaY4X7fbH4L/azIi7ilWOCjMUYfpJgraLUAqkRi2BqrjME8Rynw==} + /@adraffy/ens-normalize@1.10.0: + resolution: {integrity: sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q==} dev: false /@ampproject/remapping@2.2.1: @@ -1007,10 +1007,6 @@ packages: resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} dev: false - /@scure/base@1.1.1: - resolution: {integrity: sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==} - dev: false - /@scure/base@1.1.3: resolution: {integrity: sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q==} dev: false @@ -1027,7 +1023,7 @@ packages: resolution: {integrity: sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==} dependencies: '@noble/hashes': 1.3.2 - '@scure/base': 1.1.1 + '@scure/base': 1.1.3 dev: false /@solidity-parser/parser@0.16.0: @@ -1108,12 +1104,6 @@ packages: csstype: 3.1.2 dev: true - /@types/ws@8.5.5: - resolution: {integrity: sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==} - dependencies: - '@types/node': 18.15.11 - dev: false - /@typescript-eslint/eslint-plugin@5.46.1(@typescript-eslint/parser@5.46.1)(eslint@8.29.0)(typescript@5.1.6): resolution: {integrity: sha512-YpzNv3aayRBwjs4J3oz65eVLXc9xx0PDbIRisHj+dYhvBn02MjYOD96P8YGiWEIFBrojaUjxvkaUpakD82phsA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1259,11 +1249,11 @@ packages: - supports-color dev: true - /abitype@0.9.8(typescript@5.1.6): - resolution: {integrity: sha512-puLifILdm+8sjyss4S+fsUN09obiT1g2YW6CtcQF+QDzxR0euzgEB29MZujC6zMk2a6SVmtttq1fc6+YFA7WYQ==} + /abitype@1.0.0(typescript@5.1.6): + resolution: {integrity: sha512-NMeMah//6bJ56H5XRj8QCV4AwuW6hB6zqz2LnhhLdcWVQOsXki6/Pn3APeqxCma62nXIcmZWdu1DlHWS74umVQ==} peerDependencies: typescript: '>=5.0.4' - zod: ^3 >=3.19.1 + zod: ^3 >=3.22.0 peerDependenciesMeta: typescript: optional: true @@ -2442,8 +2432,8 @@ packages: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true - /isomorphic-ws@5.0.0(ws@8.13.0): - resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} + /isows@1.0.3(ws@8.13.0): + resolution: {integrity: sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg==} peerDependencies: ws: '*' dependencies: @@ -3546,22 +3536,21 @@ packages: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} dev: true - /viem@1.14.0(typescript@5.1.6): - resolution: {integrity: sha512-4d+4/H3lnbkSAbrpQ15i1nBA7hne06joLFy3L3m0ZpMc+g+Zr3D4nuSTyeiqbHAYs9m2P9Kjap0HlyGkehasgg==} + /viem@2.7.12(typescript@5.1.6): + resolution: {integrity: sha512-NbV+Bycw0I4X8y6A04mgJ6+Imt7xXwflgnqisR3JXoJRNc77YSaQCscFN/dmwGLESTkgegJvi+j4nZY32GTpwQ==} peerDependencies: typescript: '>=5.0.4' peerDependenciesMeta: typescript: optional: true dependencies: - '@adraffy/ens-normalize': 1.9.4 + '@adraffy/ens-normalize': 1.10.0 '@noble/curves': 1.2.0 '@noble/hashes': 1.3.2 '@scure/bip32': 1.3.2 '@scure/bip39': 1.2.1 - '@types/ws': 8.5.5 - abitype: 0.9.8(typescript@5.1.6) - isomorphic-ws: 5.0.0(ws@8.13.0) + abitype: 1.0.0(typescript@5.1.6) + isows: 1.0.3(ws@8.13.0) typescript: 5.1.6 ws: 8.13.0 transitivePeerDependencies: diff --git a/examples/multiple-accounts/packages/client/package.json b/examples/multiple-accounts/packages/client/package.json index 54e18b5348..bcd7943147 100644 --- a/examples/multiple-accounts/packages/client/package.json +++ b/examples/multiple-accounts/packages/client/package.json @@ -23,7 +23,7 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "rxjs": "7.5.5", - "viem": "1.14.0" + "viem": "2.7.12" }, "devDependencies": { "@types/react": "18.2.22", diff --git a/examples/multiple-accounts/packages/client/src/App.tsx b/examples/multiple-accounts/packages/client/src/App.tsx index 7a2119cd7b..d4ad3d21bf 100644 --- a/examples/multiple-accounts/packages/client/src/App.tsx +++ b/examples/multiple-accounts/packages/client/src/App.tsx @@ -31,8 +31,7 @@ const makeWorldContract = () => { world: getContract({ address: networkConfig.worldAddress as Hex, abi: IWorldAbi, - publicClient: publicClient, - walletClient: client, + client: { public: publicClient, wallet: client }, }), client, }; diff --git a/examples/multiple-accounts/packages/client/src/mud/setupNetwork.ts b/examples/multiple-accounts/packages/client/src/mud/setupNetwork.ts index 5cd26c31b1..f401de4702 100644 --- a/examples/multiple-accounts/packages/client/src/mud/setupNetwork.ts +++ b/examples/multiple-accounts/packages/client/src/mud/setupNetwork.ts @@ -60,8 +60,7 @@ export async function setupNetwork() { const worldContract = getContract({ address: networkConfig.worldAddress as Hex, abi: IWorldAbi, - publicClient, - walletClient: burnerWalletClient, + client: { public: publicClient, wallet: burnerWalletClient }, onWrite: (write) => write$.next(write), }); diff --git a/examples/multiple-accounts/pnpm-lock.yaml b/examples/multiple-accounts/pnpm-lock.yaml index 929ab649e5..7015942044 100644 --- a/examples/multiple-accounts/pnpm-lock.yaml +++ b/examples/multiple-accounts/pnpm-lock.yaml @@ -75,8 +75,8 @@ importers: specifier: 7.5.5 version: 7.5.5 viem: - specifier: 1.14.0 - version: 1.14.0(typescript@5.1.6) + specifier: 2.7.12 + version: 2.7.12(typescript@5.1.6) devDependencies: '@types/react': specifier: 18.2.22 @@ -150,8 +150,8 @@ packages: engines: {node: '>=0.10.0'} dev: true - /@adraffy/ens-normalize@1.9.4: - resolution: {integrity: sha512-UK0bHA7hh9cR39V+4gl2/NnBBjoXIxkuWAPCaY4X7fbH4L/azIi7ilWOCjMUYfpJgraLUAqkRi2BqrjME8Rynw==} + /@adraffy/ens-normalize@1.10.0: + resolution: {integrity: sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q==} dev: false /@ampproject/remapping@2.2.1: @@ -718,6 +718,7 @@ packages: resolution: {integrity: sha512-X36s5CXMrrJOs2lQCdDF68apW4Rfx9ixYMawlepwmE4Anezv/AV2LSpKD1Ub8DAc+urp5bk0BGZ6NtmBitfnsg==} dependencies: undici-types: 5.26.5 + dev: true /@types/prettier@2.7.2: resolution: {integrity: sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==} @@ -749,12 +750,6 @@ packages: resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} dev: true - /@types/ws@8.5.10: - resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} - dependencies: - '@types/node': 18.19.6 - dev: false - /@typescript-eslint/eslint-plugin@5.46.1(@typescript-eslint/parser@5.46.1)(eslint@8.29.0)(typescript@5.1.6): resolution: {integrity: sha512-YpzNv3aayRBwjs4J3oz65eVLXc9xx0PDbIRisHj+dYhvBn02MjYOD96P8YGiWEIFBrojaUjxvkaUpakD82phsA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -900,11 +895,11 @@ packages: - supports-color dev: true - /abitype@0.9.8(typescript@5.1.6): - resolution: {integrity: sha512-puLifILdm+8sjyss4S+fsUN09obiT1g2YW6CtcQF+QDzxR0euzgEB29MZujC6zMk2a6SVmtttq1fc6+YFA7WYQ==} + /abitype@1.0.0(typescript@5.1.6): + resolution: {integrity: sha512-NMeMah//6bJ56H5XRj8QCV4AwuW6hB6zqz2LnhhLdcWVQOsXki6/Pn3APeqxCma62nXIcmZWdu1DlHWS74umVQ==} peerDependencies: typescript: '>=5.0.4' - zod: ^3 >=3.19.1 + zod: ^3 >=3.22.0 peerDependenciesMeta: typescript: optional: true @@ -1950,8 +1945,8 @@ packages: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true - /isomorphic-ws@5.0.0(ws@8.13.0): - resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} + /isows@1.0.3(ws@8.13.0): + resolution: {integrity: sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg==} peerDependencies: ws: '*' dependencies: @@ -2743,6 +2738,7 @@ packages: /undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + dev: true /update-browserslist-db@1.0.13(browserslist@4.22.2): resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} @@ -2761,22 +2757,21 @@ packages: punycode: 2.3.1 dev: true - /viem@1.14.0(typescript@5.1.6): - resolution: {integrity: sha512-4d+4/H3lnbkSAbrpQ15i1nBA7hne06joLFy3L3m0ZpMc+g+Zr3D4nuSTyeiqbHAYs9m2P9Kjap0HlyGkehasgg==} + /viem@2.7.12(typescript@5.1.6): + resolution: {integrity: sha512-NbV+Bycw0I4X8y6A04mgJ6+Imt7xXwflgnqisR3JXoJRNc77YSaQCscFN/dmwGLESTkgegJvi+j4nZY32GTpwQ==} peerDependencies: typescript: '>=5.0.4' peerDependenciesMeta: typescript: optional: true dependencies: - '@adraffy/ens-normalize': 1.9.4 + '@adraffy/ens-normalize': 1.10.0 '@noble/curves': 1.2.0 '@noble/hashes': 1.3.2 '@scure/bip32': 1.3.2 '@scure/bip39': 1.2.1 - '@types/ws': 8.5.10 - abitype: 0.9.8(typescript@5.1.6) - isomorphic-ws: 5.0.0(ws@8.13.0) + abitype: 1.0.0(typescript@5.1.6) + isows: 1.0.3(ws@8.13.0) typescript: 5.1.6 ws: 8.13.0 transitivePeerDependencies: diff --git a/packages/block-logs-stream/package.json b/packages/block-logs-stream/package.json index 578f9a2c7e..f2986ec88e 100644 --- a/packages/block-logs-stream/package.json +++ b/packages/block-logs-stream/package.json @@ -25,10 +25,10 @@ }, "dependencies": { "@latticexyz/common": "workspace:*", - "abitype": "0.9.8", + "abitype": "1.0.0", "debug": "^4.3.4", "rxjs": "7.5.5", - "viem": "1.14.0" + "viem": "2.7.12" }, "devDependencies": { "@types/debug": "^4.1.7", diff --git a/packages/block-logs-stream/tsconfig.json b/packages/block-logs-stream/tsconfig.json index e590f0c026..376992556d 100644 --- a/packages/block-logs-stream/tsconfig.json +++ b/packages/block-logs-stream/tsconfig.json @@ -9,6 +9,7 @@ "isolatedModules": true, "esModuleInterop": true, "forceConsistentCasingInFileNames": true, + "skipLibCheck": true, "strict": true } } diff --git a/packages/cli/package.json b/packages/cli/package.json index ccd00d61ae..2c429e3b87 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -60,7 +60,7 @@ "rxjs": "7.5.5", "throttle-debounce": "^5.0.0", "typescript": "5.1.6", - "viem": "1.14.0", + "viem": "2.7.12", "yargs": "^17.7.1", "zod": "^3.21.4", "zod-validation-error": "^1.3.0" diff --git a/packages/cli/src/deploy/ensureWorldFactory.ts b/packages/cli/src/deploy/ensureWorldFactory.ts index 3d27fb0988..1f2913a801 100644 --- a/packages/cli/src/deploy/ensureWorldFactory.ts +++ b/packages/cli/src/deploy/ensureWorldFactory.ts @@ -6,7 +6,7 @@ import initModuleBuild from "@latticexyz/world/out/InitModule.sol/InitModule.jso import initModuleAbi from "@latticexyz/world/out/InitModule.sol/InitModule.abi.json" assert { type: "json" }; import worldFactoryBuild from "@latticexyz/world/out/WorldFactory.sol/WorldFactory.json" assert { type: "json" }; import worldFactoryAbi from "@latticexyz/world/out/WorldFactory.sol/WorldFactory.abi.json" assert { type: "json" }; -import { Client, Transport, Chain, Account, Hex, getCreate2Address, encodeDeployData, size } from "viem"; +import { Client, Transport, Chain, Account, Hex, getCreate2Address, encodeDeployData, size, Abi } from "viem"; import { deployer } from "./ensureDeployer"; import { salt } from "./common"; import { ensureContractsDeployed } from "./ensureContractsDeployed"; @@ -17,7 +17,7 @@ export const accessManagementSystemDeployedBytecodeSize = size( ); export const accessManagementSystemBytecode = encodeDeployData({ bytecode: accessManagementSystemBuild.bytecode.object as Hex, - abi: [], + abi: [] as Abi, }); export const accessManagementSystem = getCreate2Address({ from: deployer, @@ -30,7 +30,7 @@ export const balanceTransferSystemDeployedBytecodeSize = size( ); export const balanceTransferSystemBytecode = encodeDeployData({ bytecode: balanceTransferSystemBuild.bytecode.object as Hex, - abi: [], + abi: [] as Abi, }); export const balanceTransferSystem = getCreate2Address({ from: deployer, @@ -41,14 +41,14 @@ export const balanceTransferSystem = getCreate2Address({ export const batchCallSystemDeployedBytecodeSize = size(batchCallSystemBuild.deployedBytecode.object as Hex); export const batchCallSystemBytecode = encodeDeployData({ bytecode: batchCallSystemBuild.bytecode.object as Hex, - abi: [], + abi: [] as Abi, }); export const batchCallSystem = getCreate2Address({ from: deployer, bytecode: batchCallSystemBytecode, salt }); export const registrationDeployedBytecodeSize = size(registrationSystemBuild.deployedBytecode.object as Hex); export const registrationBytecode = encodeDeployData({ bytecode: registrationSystemBuild.bytecode.object as Hex, - abi: [], + abi: [] as Abi, }); export const registration = getCreate2Address({ from: deployer, diff --git a/packages/common/package.json b/packages/common/package.json index e59867e710..216270c946 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -61,7 +61,7 @@ "p-retry": "^5.1.2", "prettier": "^2.8.4", "prettier-plugin-solidity": "1.1.3", - "viem": "1.14.0" + "viem": "2.7.12" }, "devDependencies": { "@types/debug": "^4.1.7", diff --git a/packages/common/src/chains/latticeTestnet.ts b/packages/common/src/chains/latticeTestnet.ts index 11761b7013..ff30540a33 100644 --- a/packages/common/src/chains/latticeTestnet.ts +++ b/packages/common/src/chains/latticeTestnet.ts @@ -3,7 +3,6 @@ import type { MUDChain } from "./types"; export const latticeTestnet = { name: "Lattice Testnet", id: 4242, - network: "lattice-testnet", nativeCurrency: { decimals: 18, name: "Ether", symbol: "ETH" }, rpcUrls: { default: { diff --git a/packages/common/src/getContract.ts b/packages/common/src/getContract.ts index ac809e7139..a845359dd8 100644 --- a/packages/common/src/getContract.ts +++ b/packages/common/src/getContract.ts @@ -10,6 +10,8 @@ import { Transport, WalletClient, WriteContractParameters, + type ContractFunctionName, + type ContractFunctionArgs, getContract as viem_getContract, } from "viem"; import { UnionOmit } from "./type-utils/common"; @@ -41,7 +43,14 @@ export type GetContractOptions< TAccount extends Account, TPublicClient extends PublicClient, TWalletClient extends WalletClient -> = Required> & { +> = GetContractParameters< + TTransport, + TChain, + TAccount, + TAbi, + { public: TPublicClient; wallet: TWalletClient }, + TAddress +> & { onWrite?: (write: ContractWrite) => void; }; @@ -58,8 +67,7 @@ export function getContract< >({ abi, address, - publicClient, - walletClient, + client: { public: publicClient, wallet: walletClient }, onWrite, }: GetContractOptions< TTransport, @@ -69,13 +77,17 @@ export function getContract< TAccount, TPublicClient, TWalletClient ->): GetContractReturnType { - const contract = viem_getContract({ +>): GetContractReturnType { + const contract = viem_getContract({ abi, address, - publicClient, - walletClient, - }) as unknown as GetContractReturnType; + client: { + public: publicClient, + wallet: walletClient, + }, + }) as unknown as GetContractReturnType & { + write: unknown; + }; if (contract.write) { // Replace write calls with our own. Implemented ~the same as viem, but adds better handling of nonces (via queue + retries). @@ -98,7 +110,13 @@ export function getContract< args, ...options, onWrite, - } as unknown as WriteContractParameters; + } as unknown as WriteContractParameters< + TAbi, + ContractFunctionName, + ContractFunctionArgs, + TChain, + TAccount + >; const result = writeContract(walletClient, request); const id = `${walletClient.chain.id}:${walletClient.account.address}:${nextWriteId++}`; @@ -111,5 +129,5 @@ export function getContract< ); } - return contract as unknown as GetContractReturnType; + return contract as unknown as GetContractReturnType; } diff --git a/packages/common/src/sendTransaction.ts b/packages/common/src/sendTransaction.ts index 6f89df20ce..9e64497825 100644 --- a/packages/common/src/sendTransaction.ts +++ b/packages/common/src/sendTransaction.ts @@ -5,7 +5,7 @@ import { Client, SendTransactionParameters, Transport, - WriteContractReturnType, + SendTransactionReturnType, } from "viem"; import { call, sendTransaction as viem_sendTransaction } from "viem/actions"; import pRetry from "p-retry"; @@ -24,7 +24,7 @@ export async function sendTransaction< >( client: Client, request: SendTransactionParameters -): Promise { +): Promise { const rawAccount = request.account ?? client.account; if (!rawAccount) { // TODO: replace with viem AccountNotFoundError once its exported @@ -68,7 +68,8 @@ export async function sendTransaction< const nonce = nonceManager.nextNonce(); debug("sending tx with nonce", nonce, "to", preparedRequest.to); - return await viem_sendTransaction(client, { nonce, ...preparedRequest }); + const parameters: SendTransactionParameters = { nonce, ...preparedRequest }; + return await viem_sendTransaction(client, parameters); }, { retries: 3, diff --git a/packages/common/src/writeContract.ts b/packages/common/src/writeContract.ts index 07a0dd0964..973ecfb8bb 100644 --- a/packages/common/src/writeContract.ts +++ b/packages/common/src/writeContract.ts @@ -7,6 +7,8 @@ import { Transport, WriteContractParameters, WriteContractReturnType, + ContractFunctionName, + ContractFunctionArgs, } from "viem"; import { simulateContract, writeContract as viem_writeContract } from "viem/actions"; import pRetry from "p-retry"; @@ -19,14 +21,15 @@ const debug = parentDebug.extend("writeContract"); // TODO: migrate away from this approach once we can hook into viem's nonce management: https://github.com/wagmi-dev/viem/discussions/1230 export async function writeContract< - TChain extends Chain | undefined, - TAccount extends Account | undefined, - TAbi extends Abi | readonly unknown[], - TFunctionName extends string, - TChainOverride extends Chain | undefined + chain extends Chain | undefined, + account extends Account | undefined, + abi extends Abi | readonly unknown[], + functionName extends ContractFunctionName, + args extends ContractFunctionArgs, + chainOverride extends Chain | undefined >( - client: Client, - request: WriteContractParameters + client: Client, + request: WriteContractParameters ): Promise { const rawAccount = request.account ?? client.account; if (!rawAccount) { @@ -42,7 +45,7 @@ export async function writeContract< }); async function prepareWrite(): Promise< - WriteContractParameters + WriteContractParameters > { if (request.gas) { debug("gas provided, skipping simulate", request.functionName, request.address); @@ -50,13 +53,13 @@ export async function writeContract< } debug("simulating", request.functionName, "at", request.address); - const result = await simulateContract(client, { + const result = await simulateContract(client, { ...request, blockTag: "pending", account, - } as unknown as SimulateContractParameters); + } as unknown as SimulateContractParameters); - return result.request as unknown as WriteContractParameters; + return result.request as unknown as WriteContractParameters; } const preparedWrite = await prepareWrite(); diff --git a/packages/config/package.json b/packages/config/package.json index db81380a7a..2619576b50 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -41,7 +41,7 @@ "@latticexyz/schema-type": "workspace:*", "esbuild": "^0.17.15", "find-up": "^6.3.0", - "viem": "1.14.0", + "viem": "2.7.12", "zod": "^3.21.4", "zod-validation-error": "^1.3.0" }, diff --git a/packages/dev-tools/package.json b/packages/dev-tools/package.json index 52ca25b39e..b5ef1db8b4 100644 --- a/packages/dev-tools/package.json +++ b/packages/dev-tools/package.json @@ -37,7 +37,7 @@ "rxjs": "7.5.5", "tailwind-merge": "^1.12.0", "use-local-storage-state": "^18.3.2", - "viem": "1.14.0", + "viem": "2.7.12", "zustand": "^4.3.7" }, "devDependencies": { diff --git a/packages/dev-tools/tsconfig.json b/packages/dev-tools/tsconfig.json index e453e13efb..ef4ccc40de 100644 --- a/packages/dev-tools/tsconfig.json +++ b/packages/dev-tools/tsconfig.json @@ -9,6 +9,7 @@ "isolatedModules": true, "esModuleInterop": true, "jsx": "react-jsx", + "skipLibCheck": true, "jsxImportSource": "react" }, "include": ["src"] diff --git a/packages/faucet/package.json b/packages/faucet/package.json index beb31c37a2..c4a455a39d 100644 --- a/packages/faucet/package.json +++ b/packages/faucet/package.json @@ -36,7 +36,7 @@ "debug": "^4.3.4", "dotenv": "^16.0.3", "fastify": "^4.21.0", - "viem": "1.14.0", + "viem": "2.7.12", "zod": "^3.21.4" }, "devDependencies": { diff --git a/packages/protocol-parser/package.json b/packages/protocol-parser/package.json index 274a677926..08ca13b9d8 100644 --- a/packages/protocol-parser/package.json +++ b/packages/protocol-parser/package.json @@ -26,8 +26,8 @@ "dependencies": { "@latticexyz/common": "workspace:*", "@latticexyz/schema-type": "workspace:*", - "abitype": "0.9.8", - "viem": "1.14.0" + "abitype": "1.0.0", + "viem": "2.7.12" }, "devDependencies": { "tsup": "^6.7.0", diff --git a/packages/protocol-parser/tsconfig.json b/packages/protocol-parser/tsconfig.json index e590f0c026..376992556d 100644 --- a/packages/protocol-parser/tsconfig.json +++ b/packages/protocol-parser/tsconfig.json @@ -9,6 +9,7 @@ "isolatedModules": true, "esModuleInterop": true, "forceConsistentCasingInFileNames": true, + "skipLibCheck": true, "strict": true } } diff --git a/packages/schema-type/package.json b/packages/schema-type/package.json index dc4d877804..caedfb79e0 100644 --- a/packages/schema-type/package.json +++ b/packages/schema-type/package.json @@ -34,8 +34,8 @@ "test:ci": "pnpm run test" }, "dependencies": { - "abitype": "0.9.8", - "viem": "1.14.0" + "abitype": "1.0.0", + "viem": "2.7.12" }, "devDependencies": { "@latticexyz/gas-report": "workspace:*", diff --git a/packages/schema-type/tsconfig.json b/packages/schema-type/tsconfig.json index 6bf6ff0ab6..413bf5de38 100644 --- a/packages/schema-type/tsconfig.json +++ b/packages/schema-type/tsconfig.json @@ -10,6 +10,7 @@ "isolatedModules": true, "esModuleInterop": true, "forceConsistentCasingInFileNames": true, + "skipLibCheck": true, "strict": true } } diff --git a/packages/store-indexer/package.json b/packages/store-indexer/package.json index 8ec5d4e2c3..e8b79608f9 100644 --- a/packages/store-indexer/package.json +++ b/packages/store-indexer/package.json @@ -62,7 +62,7 @@ "rxjs": "7.5.5", "superjson": "^1.12.4", "trpc-koa-adapter": "^1.1.3", - "viem": "1.14.0", + "viem": "2.7.12", "zod": "^3.21.4" }, "devDependencies": { diff --git a/packages/store-sync/package.json b/packages/store-sync/package.json index 5162e29f9c..b6ce955f59 100644 --- a/packages/store-sync/package.json +++ b/packages/store-sync/package.json @@ -76,7 +76,7 @@ "rxjs": "7.5.5", "sql.js": "^1.8.0", "superjson": "^1.12.4", - "viem": "1.14.0", + "viem": "2.7.12", "zod": "^3.21.4", "zustand": "^4.3.7" }, diff --git a/packages/store/package.json b/packages/store/package.json index 86aa4b9471..cef5a69075 100644 --- a/packages/store/package.json +++ b/packages/store/package.json @@ -54,8 +54,8 @@ "@latticexyz/common": "workspace:*", "@latticexyz/config": "workspace:*", "@latticexyz/schema-type": "workspace:*", - "abitype": "0.9.8", - "viem": "1.14.0", + "abitype": "1.0.0", + "viem": "2.7.12", "zod": "^3.21.4" }, "devDependencies": { diff --git a/packages/world/package.json b/packages/world/package.json index 5d2424c0af..dd3d3369e9 100644 --- a/packages/world/package.json +++ b/packages/world/package.json @@ -50,8 +50,8 @@ "@latticexyz/config": "workspace:*", "@latticexyz/schema-type": "workspace:*", "@latticexyz/store": "workspace:*", - "abitype": "0.9.8", - "viem": "1.14.0", + "abitype": "1.0.0", + "viem": "2.7.12", "zod": "^3.21.4" }, "devDependencies": { diff --git a/packages/world/ts/encodeSystemCall.ts b/packages/world/ts/encodeSystemCall.ts index 20d5fb53d2..a6a36e735b 100644 --- a/packages/world/ts/encodeSystemCall.ts +++ b/packages/world/ts/encodeSystemCall.ts @@ -1,30 +1,26 @@ -import { - Abi, - EncodeFunctionDataParameters, - ContractFunctionConfig, - GetFunctionArgs, - Hex, - encodeFunctionData, -} from "viem"; +import { Abi, EncodeFunctionDataParameters, Hex, encodeFunctionData, type ContractFunctionName } from "viem"; +import type { AbiParametersToPrimitiveTypes, ExtractAbiFunction } from "abitype"; import IWorldCallAbi from "../out/IWorldKernel.sol/IWorldCall.abi.json"; -export type SystemCall = Pick< - ContractFunctionConfig, - "abi" | "functionName" | "args" +export type SystemCall> = EncodeFunctionDataParameters< + abi, + functionName > & { readonly systemId: Hex; }; /** Encode a system call to be passed as arguments into `World.call` */ -export function encodeSystemCall({ +export function encodeSystemCall>({ abi, systemId, functionName, args, -}: SystemCall): GetFunctionArgs["args"] { +}: SystemCall): AbiParametersToPrimitiveTypes< + ExtractAbiFunction["inputs"] +> { return [ systemId, - encodeFunctionData({ + encodeFunctionData({ abi, functionName, args, diff --git a/packages/world/ts/encodeSystemCallFrom.ts b/packages/world/ts/encodeSystemCallFrom.ts index 1688b8e0be..691675684e 100644 --- a/packages/world/ts/encodeSystemCallFrom.ts +++ b/packages/world/ts/encodeSystemCallFrom.ts @@ -1,23 +1,29 @@ -import { Abi, EncodeFunctionDataParameters, GetFunctionArgs, encodeFunctionData, Address } from "viem"; +import { Abi, EncodeFunctionDataParameters, encodeFunctionData, Address, type ContractFunctionName } from "viem"; +import type { AbiParametersToPrimitiveTypes, ExtractAbiFunction } from "abitype"; import IWorldCallAbi from "../out/IWorldKernel.sol/IWorldCall.abi.json"; import { SystemCall } from "./encodeSystemCall"; -export type SystemCallFrom = SystemCall & { +export type SystemCallFrom> = SystemCall< + abi, + functionName +> & { readonly from: Address; }; /** Encode a system call to be passed as arguments into `World.callFrom` */ -export function encodeSystemCallFrom({ +export function encodeSystemCallFrom>({ abi, from, systemId, functionName, args, -}: SystemCallFrom): GetFunctionArgs["args"] { +}: SystemCallFrom): AbiParametersToPrimitiveTypes< + ExtractAbiFunction["inputs"] +> { return [ from, systemId, - encodeFunctionData({ + encodeFunctionData({ abi, functionName, args, diff --git a/packages/world/ts/encodeSystemCalls.ts b/packages/world/ts/encodeSystemCalls.ts index 6336822e0b..fe027924da 100644 --- a/packages/world/ts/encodeSystemCalls.ts +++ b/packages/world/ts/encodeSystemCalls.ts @@ -1,11 +1,12 @@ -import { Abi, GetFunctionArgs } from "viem"; +import { Abi, type ContractFunctionName } from "viem"; import IWorldCallAbi from "../out/IWorldKernel.sol/IWorldCall.abi.json"; import { SystemCall, encodeSystemCall } from "./encodeSystemCall"; +import type { AbiParametersToPrimitiveTypes, ExtractAbiFunction } from "abitype"; /** Encode system calls to be passed as arguments into `World.batchCall` */ -export function encodeSystemCalls( +export function encodeSystemCalls>( abi: abi, systemCalls: readonly Omit, "abi">[] -): GetFunctionArgs["args"][] { +): AbiParametersToPrimitiveTypes["inputs"]>[] { return systemCalls.map((systemCall) => encodeSystemCall({ ...systemCall, abi } as SystemCall)); } diff --git a/packages/world/ts/encodeSystemCallsFrom.ts b/packages/world/ts/encodeSystemCallsFrom.ts index e63cc43bd0..f5c9bf548e 100644 --- a/packages/world/ts/encodeSystemCallsFrom.ts +++ b/packages/world/ts/encodeSystemCallsFrom.ts @@ -1,13 +1,14 @@ -import { Abi, Address, GetFunctionArgs } from "viem"; +import { Abi, Address, type ContractFunctionName } from "viem"; import IWorldCallAbi from "../out/IWorldKernel.sol/IWorldCall.abi.json"; import { SystemCallFrom, encodeSystemCallFrom } from "./encodeSystemCallFrom"; +import type { AbiParametersToPrimitiveTypes, ExtractAbiFunction } from "abitype"; /** Encode system calls to be passed as arguments into `World.batchCallFrom` */ -export function encodeSystemCallsFrom( +export function encodeSystemCallsFrom>( abi: abi, from: Address, systemCalls: readonly Omit, "abi" | "from">[] -): GetFunctionArgs["args"][] { +): AbiParametersToPrimitiveTypes["inputs"]>[] { return systemCalls.map((systemCall) => encodeSystemCallFrom({ ...systemCall, abi, from } as SystemCallFrom) ); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 629d967201..ccb001cd7d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -97,8 +97,8 @@ importers: specifier: workspace:* version: link:../common abitype: - specifier: 0.9.8 - version: 0.9.8(typescript@5.1.6)(zod@3.21.4) + specifier: 1.0.0 + version: 1.0.0(typescript@5.1.6)(zod@3.21.4) debug: specifier: ^4.3.4 version: 4.3.4(supports-color@8.1.1) @@ -106,8 +106,8 @@ importers: specifier: 7.5.5 version: 7.5.5 viem: - specifier: 1.14.0 - version: 1.14.0(typescript@5.1.6)(zod@3.21.4) + specifier: 2.7.12 + version: 2.7.12(typescript@5.1.6)(zod@3.21.4) devDependencies: '@types/debug': specifier: ^4.1.7 @@ -212,8 +212,8 @@ importers: specifier: 5.1.6 version: 5.1.6 viem: - specifier: 1.14.0 - version: 1.14.0(typescript@5.1.6)(zod@3.21.4) + specifier: 2.7.12 + version: 2.7.12(typescript@5.1.6)(zod@3.21.4) yargs: specifier: ^17.7.1 version: 17.7.1 @@ -288,8 +288,8 @@ importers: specifier: 1.1.3 version: 1.1.3(prettier@2.8.4) viem: - specifier: 1.14.0 - version: 1.14.0(typescript@5.1.6)(zod@3.21.4) + specifier: 2.7.12 + version: 2.7.12(typescript@5.1.6)(zod@3.21.4) devDependencies: '@types/debug': specifier: ^4.1.7 @@ -319,8 +319,8 @@ importers: specifier: ^6.3.0 version: 6.3.0 viem: - specifier: 1.14.0 - version: 1.14.0(typescript@5.1.6)(zod@3.21.4) + specifier: 2.7.12 + version: 2.7.12(typescript@5.1.6)(zod@3.21.4) zod: specifier: ^3.21.4 version: 3.21.4 @@ -390,8 +390,8 @@ importers: specifier: ^18.3.2 version: 18.3.2(react-dom@18.2.0)(react@18.2.0) viem: - specifier: 1.14.0 - version: 1.14.0(typescript@5.1.6)(zod@3.21.4) + specifier: 2.7.12 + version: 2.7.12(typescript@5.1.6)(zod@3.21.4) zustand: specifier: ^4.3.7 version: 4.3.7(react@18.2.0) @@ -450,8 +450,8 @@ importers: specifier: ^4.21.0 version: 4.21.0 viem: - specifier: 1.14.0 - version: 1.14.0(typescript@5.1.6)(zod@3.21.4) + specifier: 2.7.12 + version: 2.7.12(typescript@5.1.6)(zod@3.21.4) zod: specifier: ^3.21.4 version: 3.21.4 @@ -594,11 +594,11 @@ importers: specifier: workspace:* version: link:../schema-type abitype: - specifier: 0.9.8 - version: 0.9.8(typescript@5.1.6)(zod@3.21.4) + specifier: 1.0.0 + version: 1.0.0(typescript@5.1.6)(zod@3.21.4) viem: - specifier: 1.14.0 - version: 1.14.0(typescript@5.1.6)(zod@3.21.4) + specifier: 2.7.12 + version: 2.7.12(typescript@5.1.6)(zod@3.21.4) devDependencies: tsup: specifier: ^6.7.0 @@ -696,11 +696,11 @@ importers: packages/schema-type: dependencies: abitype: - specifier: 0.9.8 - version: 0.9.8(typescript@5.1.6)(zod@3.21.4) + specifier: 1.0.0 + version: 1.0.0(typescript@5.1.6)(zod@3.21.4) viem: - specifier: 1.14.0 - version: 1.14.0(typescript@5.1.6)(zod@3.21.4) + specifier: 2.7.12 + version: 2.7.12(typescript@5.1.6)(zod@3.21.4) devDependencies: '@latticexyz/gas-report': specifier: workspace:* @@ -777,11 +777,11 @@ importers: specifier: workspace:* version: link:../schema-type abitype: - specifier: 0.9.8 - version: 0.9.8(typescript@5.1.6)(zod@3.21.4) + specifier: 1.0.0 + version: 1.0.0(typescript@5.1.6)(zod@3.21.4) viem: - specifier: 1.14.0 - version: 1.14.0(typescript@5.1.6)(zod@3.21.4) + specifier: 2.7.12 + version: 2.7.12(typescript@5.1.6)(zod@3.21.4) zod: specifier: ^3.21.4 version: 3.21.4 @@ -897,8 +897,8 @@ importers: specifier: ^1.1.3 version: 1.1.3(@trpc/server@10.34.0)(koa@2.14.2) viem: - specifier: 1.14.0 - version: 1.14.0(typescript@5.1.6)(zod@3.21.4) + specifier: 2.7.12 + version: 2.7.12(typescript@5.1.6)(zod@3.21.4) zod: specifier: ^3.21.4 version: 3.21.4 @@ -991,8 +991,8 @@ importers: specifier: ^1.12.4 version: 1.12.4 viem: - specifier: 1.14.0 - version: 1.14.0(typescript@5.1.6)(zod@3.21.4) + specifier: 2.7.12 + version: 2.7.12(typescript@5.1.6)(zod@3.21.4) zod: specifier: ^3.21.4 version: 3.21.4 @@ -1053,11 +1053,11 @@ importers: specifier: workspace:* version: link:../store abitype: - specifier: 0.9.8 - version: 0.9.8(typescript@5.1.6)(zod@3.21.4) + specifier: 1.0.0 + version: 1.0.0(typescript@5.1.6)(zod@3.21.4) viem: - specifier: 1.14.0 - version: 1.14.0(typescript@5.1.6)(zod@3.21.4) + specifier: 2.7.12 + version: 2.7.12(typescript@5.1.6)(zod@3.21.4) zod: specifier: ^3.21.4 version: 3.21.4 @@ -1171,8 +1171,8 @@ importers: packages: - /@adraffy/ens-normalize@1.9.4: - resolution: {integrity: sha512-UK0bHA7hh9cR39V+4gl2/NnBBjoXIxkuWAPCaY4X7fbH4L/azIi7ilWOCjMUYfpJgraLUAqkRi2BqrjME8Rynw==} + /@adraffy/ens-normalize@1.10.0: + resolution: {integrity: sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q==} dev: false /@alloc/quick-lru@5.2.0: @@ -3743,12 +3743,6 @@ packages: '@types/node': 18.15.11 dev: true - /@types/ws@8.5.6: - resolution: {integrity: sha512-8B5EO9jLVCy+B58PLHvLDuOD8DRVMgQzq8d55SjLCOn9kqGyqOvy27exVaTio1q1nX5zLu8/6N0n2ThSxOM6tg==} - dependencies: - '@types/node': 18.15.11 - dev: false - /@types/yargs-interactive@2.1.3: resolution: {integrity: sha512-bYB8ah0JPR6/lpHlxUzeHsrb3RK5OW7N8Hnth2nefnr6zQ5KFoDQ6wM5x58dTLEDYrwikFy3EPTf/O0HKLNaIg==} dependencies: @@ -3982,11 +3976,11 @@ packages: engines: {node: '>=6', npm: '>=3'} dev: false - /abitype@0.9.8(typescript@5.1.6)(zod@3.21.4): - resolution: {integrity: sha512-puLifILdm+8sjyss4S+fsUN09obiT1g2YW6CtcQF+QDzxR0euzgEB29MZujC6zMk2a6SVmtttq1fc6+YFA7WYQ==} + /abitype@1.0.0(typescript@5.1.6)(zod@3.21.4): + resolution: {integrity: sha512-NMeMah//6bJ56H5XRj8QCV4AwuW6hB6zqz2LnhhLdcWVQOsXki6/Pn3APeqxCma62nXIcmZWdu1DlHWS74umVQ==} peerDependencies: typescript: '>=5.0.4' - zod: ^3 >=3.19.1 + zod: ^3 >=3.22.0 peerDependenciesMeta: typescript: optional: true @@ -7675,8 +7669,8 @@ packages: /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - /isomorphic-ws@5.0.0(ws@8.13.0): - resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} + /isows@1.0.3(ws@8.13.0): + resolution: {integrity: sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg==} peerDependencies: ws: '*' dependencies: @@ -11907,22 +11901,21 @@ packages: engines: {node: '>= 0.8'} dev: false - /viem@1.14.0(typescript@5.1.6)(zod@3.21.4): - resolution: {integrity: sha512-4d+4/H3lnbkSAbrpQ15i1nBA7hne06joLFy3L3m0ZpMc+g+Zr3D4nuSTyeiqbHAYs9m2P9Kjap0HlyGkehasgg==} + /viem@2.7.12(typescript@5.1.6)(zod@3.21.4): + resolution: {integrity: sha512-NbV+Bycw0I4X8y6A04mgJ6+Imt7xXwflgnqisR3JXoJRNc77YSaQCscFN/dmwGLESTkgegJvi+j4nZY32GTpwQ==} peerDependencies: typescript: '>=5.0.4' peerDependenciesMeta: typescript: optional: true dependencies: - '@adraffy/ens-normalize': 1.9.4 + '@adraffy/ens-normalize': 1.10.0 '@noble/curves': 1.2.0 '@noble/hashes': 1.3.2 '@scure/bip32': 1.3.2 '@scure/bip39': 1.2.1 - '@types/ws': 8.5.6 - abitype: 0.9.8(typescript@5.1.6)(zod@3.21.4) - isomorphic-ws: 5.0.0(ws@8.13.0) + abitype: 1.0.0(typescript@5.1.6)(zod@3.21.4) + isows: 1.0.3(ws@8.13.0) typescript: 5.1.6 ws: 8.13.0 transitivePeerDependencies: diff --git a/templates/phaser/packages/client/package.json b/templates/phaser/packages/client/package.json index 31b7f3b1ea..53c4f827d8 100644 --- a/templates/phaser/packages/client/package.json +++ b/templates/phaser/packages/client/package.json @@ -29,7 +29,7 @@ "simplex-noise": "^4.0.1", "styled-components": "^5.3.10", "use-resize-observer": "^9.1.0", - "viem": "1.14.0", + "viem": "2.7.12", "zustand": "^4.3.8" }, "devDependencies": { diff --git a/templates/phaser/packages/client/src/mud/setupNetwork.ts b/templates/phaser/packages/client/src/mud/setupNetwork.ts index 10bc9163d5..573f059d38 100644 --- a/templates/phaser/packages/client/src/mud/setupNetwork.ts +++ b/templates/phaser/packages/client/src/mud/setupNetwork.ts @@ -61,8 +61,7 @@ export async function setupNetwork() { const worldContract = getContract({ address: networkConfig.worldAddress as Hex, abi: IWorldAbi, - publicClient, - walletClient: burnerWalletClient, + client: { public: publicClient, wallet: burnerWalletClient }, onWrite: (write) => write$.next(write), }); diff --git a/templates/react-ecs/packages/client/package.json b/templates/react-ecs/packages/client/package.json index 952996ffa1..d5943713ef 100644 --- a/templates/react-ecs/packages/client/package.json +++ b/templates/react-ecs/packages/client/package.json @@ -24,7 +24,7 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "rxjs": "7.5.5", - "viem": "1.14.0" + "viem": "2.7.12" }, "devDependencies": { "@types/react": "18.2.22", diff --git a/templates/react-ecs/packages/client/src/mud/setupNetwork.ts b/templates/react-ecs/packages/client/src/mud/setupNetwork.ts index 7aa0031c4d..60dfc7bdda 100644 --- a/templates/react-ecs/packages/client/src/mud/setupNetwork.ts +++ b/templates/react-ecs/packages/client/src/mud/setupNetwork.ts @@ -63,8 +63,7 @@ export async function setupNetwork() { const worldContract = getContract({ address: networkConfig.worldAddress as Hex, abi: IWorldAbi, - publicClient, - walletClient: burnerWalletClient, + client: { public: publicClient, wallet: burnerWalletClient }, onWrite: (write) => write$.next(write), }); diff --git a/templates/react/packages/client/package.json b/templates/react/packages/client/package.json index 54e18b5348..bcd7943147 100644 --- a/templates/react/packages/client/package.json +++ b/templates/react/packages/client/package.json @@ -23,7 +23,7 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "rxjs": "7.5.5", - "viem": "1.14.0" + "viem": "2.7.12" }, "devDependencies": { "@types/react": "18.2.22", diff --git a/templates/react/packages/client/src/mud/setupNetwork.ts b/templates/react/packages/client/src/mud/setupNetwork.ts index 5cd26c31b1..f401de4702 100644 --- a/templates/react/packages/client/src/mud/setupNetwork.ts +++ b/templates/react/packages/client/src/mud/setupNetwork.ts @@ -60,8 +60,7 @@ export async function setupNetwork() { const worldContract = getContract({ address: networkConfig.worldAddress as Hex, abi: IWorldAbi, - publicClient, - walletClient: burnerWalletClient, + client: { public: publicClient, wallet: burnerWalletClient }, onWrite: (write) => write$.next(write), }); diff --git a/templates/threejs/packages/client/package.json b/templates/threejs/packages/client/package.json index f1cae3e0de..272a46de64 100644 --- a/templates/threejs/packages/client/package.json +++ b/templates/threejs/packages/client/package.json @@ -25,7 +25,7 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "rxjs": "7.5.5", - "viem": "1.14.0" + "viem": "2.7.12" }, "devDependencies": { "@types/react": "18.2.22", diff --git a/templates/threejs/packages/client/src/mud/setupNetwork.ts b/templates/threejs/packages/client/src/mud/setupNetwork.ts index a454f87352..20a639ceca 100644 --- a/templates/threejs/packages/client/src/mud/setupNetwork.ts +++ b/templates/threejs/packages/client/src/mud/setupNetwork.ts @@ -61,8 +61,7 @@ export async function setupNetwork() { const worldContract = getContract({ address: networkConfig.worldAddress as Hex, abi: IWorldAbi, - publicClient, - walletClient: burnerWalletClient, + client: { public: publicClient, wallet: burnerWalletClient }, onWrite: (write) => write$.next(write), }); diff --git a/templates/vanilla/packages/client/package.json b/templates/vanilla/packages/client/package.json index 289fb9f1da..b691535615 100644 --- a/templates/vanilla/packages/client/package.json +++ b/templates/vanilla/packages/client/package.json @@ -21,7 +21,7 @@ "@latticexyz/world": "link:../../../../packages/world", "contracts": "workspace:*", "rxjs": "7.5.5", - "viem": "1.14.0" + "viem": "2.7.12" }, "devDependencies": { "@types/react-dom": "18.2.7", diff --git a/templates/vanilla/packages/client/src/mud/setupNetwork.ts b/templates/vanilla/packages/client/src/mud/setupNetwork.ts index 7aa0031c4d..60dfc7bdda 100644 --- a/templates/vanilla/packages/client/src/mud/setupNetwork.ts +++ b/templates/vanilla/packages/client/src/mud/setupNetwork.ts @@ -63,8 +63,7 @@ export async function setupNetwork() { const worldContract = getContract({ address: networkConfig.worldAddress as Hex, abi: IWorldAbi, - publicClient, - walletClient: burnerWalletClient, + client: { public: publicClient, wallet: burnerWalletClient }, onWrite: (write) => write$.next(write), }); From 4e66683224a4a17f59cfbb869c3f782ed2967ffb Mon Sep 17 00:00:00 2001 From: Ori Pomerantz Date: Fri, 23 Feb 2024 07:39:53 -0600 Subject: [PATCH 20/24] docs(world/systems): add code sample for `call` (#2291) --- docs/pages/world/systems.mdx | 82 +++++++++++++++++++++++++++++++++++- 1 file changed, 80 insertions(+), 2 deletions(-) diff --git a/docs/pages/world/systems.mdx b/docs/pages/world/systems.mdx index 58686ff9d6..fd321b3707 100644 --- a/docs/pages/world/systems.mdx +++ b/docs/pages/world/systems.mdx @@ -22,8 +22,86 @@ The `World` serves as a central entry point and forwards calls to systems, which To call a `System`, you call the `World` in one of these ways: - If a [function selector for the `System` is registered in the `World`](./function-selectors), you can call it via `world.__()`. -- You can use [`call`](https://github.com/latticexyz/mud/blob/main/packages/world/src/World.sol#L346-L351). -- If you have [the proper delegation](/world/account-delegation) you can use [`callFrom`](https://github.com/latticexyz/mud/blob/main/packages/world/src/World.sol#L353-L394). +- You can use [`call`](https://github.com/latticexyz/mud/blob/main/packages/world/src/World.sol#L333-L345). +- If you have [the proper delegation](/world/account-delegation) you can use [`callFrom`](https://github.com/latticexyz/mud/blob/main/packages/world/src/World.sol#L347-L388). + +### Using `call` + +To use `call` you create the calldata to send the called `System` and use that as a parameter. + + + +```solidity filename="Call.s.sol" copy showLineNumbers {11-12,24-32} +// SPDX-License-Identifier: MIT +pragma solidity >=0.8.24; + +import { Script } from "forge-std/Script.sol"; +import { console } from "forge-std/console.sol"; +import { StoreSwitch } from "@latticexyz/store/src/StoreSwitch.sol"; + +import { IWorld } from "../src/codegen/world/IWorld.sol"; +import { Tasks, TasksData } from "../src/codegen/index.sol"; + +import { ResourceId, WorldResourceIdLib, WorldResourceIdInstance } from "@latticexyz/world/src/WorldResourceId.sol"; +import { RESOURCE_SYSTEM } from "@latticexyz/world/src/worldResourceTypes.sol"; + +contract Call is Script { + function run() external { + address worldAddress = 0x256e6eAf6a6683aB771C576f2f5C8A774BdAC8e3; + + // Load the private key from the `PRIVATE_KEY` environment variable (in .env) + uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); + + // Start broadcasting transactions from the deployer account + vm.startBroadcast(deployerPrivateKey); + + ResourceId systemId = WorldResourceIdLib.encode({ typeId: RESOURCE_SYSTEM, namespace: "", name: "TasksSystem" }); + + bytes memory returnData = IWorld(worldAddress).call( + systemId, + abi.encodeWithSignature("addTask(string)", "Test task") + ); + + console.log("The return value is:"); + console.logBytes(returnData); + + vm.stopBroadcast(); + } +} +``` + + + +
+ +Explanation + +```solidity +import { ResourceId, WorldResourceIdLib, WorldResourceIdInstance } from "@latticexyz/world/src/WorldResourceId.sol"; +import { RESOURCE_SYSTEM } from "@latticexyz/world/src/worldResourceTypes.sol"; +. +. +. +ResourceId systemId = WorldResourceIdLib.encode({ + typeId: RESOURCE_SYSTEM, + namespace: "", + name: "TasksSystem" +}); +``` + +Create a `ResourceId` for the `System`. + +```solidity +bytes memory returnData = + IWorld(worldAddress). + call(systemId, abi.encodeWithSignature("addTask(string)", "Test task")); +``` + +Call the `System`. The calldata is created using [`abi.encodeWithSignature`](https://docs.soliditylang.org/en/latest/cheatsheet.html#index-1). + +The return data is of type [`bytes memory`](https://docs.soliditylang.org/en/latest/internals/layout_in_storage.html#bytes-and-string). + +
## Writing systems From 4e1e7ec2c2b979c889aea0a6a158c6da2de91bf6 Mon Sep 17 00:00:00 2001 From: Ori Pomerantz Date: Fri, 23 Feb 2024 07:41:01 -0600 Subject: [PATCH 21/24] docs(world/*): small fixes (#2247) Co-authored-by: alvarius --- docs/pages/world/namespaces-access-control.mdx | 2 +- docs/pages/world/systems.mdx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/pages/world/namespaces-access-control.mdx b/docs/pages/world/namespaces-access-control.mdx index 2de94e047f..dcd29da4db 100644 --- a/docs/pages/world/namespaces-access-control.mdx +++ b/docs/pages/world/namespaces-access-control.mdx @@ -90,7 +90,7 @@ For example, here is a script that grants access to the `Counter` table to one a -```solidity filename="Permissions.s.sol" copy {21-22} +```solidity filename="Permissions.s.sol" copy {7-8,20-21} pragma solidity >=0.8.21; import { Script } from "forge-std/Script.sol"; diff --git a/docs/pages/world/systems.mdx b/docs/pages/world/systems.mdx index fd321b3707..575f7d8d11 100644 --- a/docs/pages/world/systems.mdx +++ b/docs/pages/world/systems.mdx @@ -274,7 +274,7 @@ This upgrade process removes the old `System` contract's access to the namespace Any access granted _manually_ to the old `System` is not revoked, nor granted to the upgraded `System`. **Note:** You _should_ make sure to remove any such manually granted access. -`System` access is based on the contract address, so somebody else could register a namespace they'd own, register the old `System` contract as a system in their namespace, and then abuse those permissions (if the `System` has code that can be used for that, of course). +MUD access is based on the contract address, so somebody else could register a namespace they'd own, register the old `System` contract as a system in their namespace, and then abuse those permissions (if the `System` has code that can be used for that, of course). ## Access control From 1f5767a98bd3c6cb1357a80da927c473088ad420 Mon Sep 17 00:00:00 2001 From: Ori Pomerantz Date: Fri, 23 Feb 2024 07:41:44 -0600 Subject: [PATCH 22/24] docs(*): update WORLD_ADDRESS to the `next_17` value (#2288) --- docs/pages/guides/extending-a-world.mdx | 2 +- docs/pages/services/indexer.mdx | 4 ++-- docs/pages/world/balance.mdx | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/pages/guides/extending-a-world.mdx b/docs/pages/guides/extending-a-world.mdx index 0f529ba70e..3dcfbc08a2 100644 --- a/docs/pages/guides/extending-a-world.mdx +++ b/docs/pages/guides/extending-a-world.mdx @@ -174,7 +174,7 @@ The easiest way to create the Solidity code is to use the MUD template: PRIVATE_KEY=0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d # Address for the world we are extending - WORLD_ADDRESS=0x6e9474e9c83676b9a71133ff96db43e7aa0a4342 + WORLD_ADDRESS=0x256e6eaf6a6683ab771c576f2f5c8a774bdac8e3 ``` 1. Create this script in `script/MessagingExtension.s.sol`. diff --git a/docs/pages/services/indexer.mdx b/docs/pages/services/indexer.mdx index 902b149ec1..506d72a1a6 100644 --- a/docs/pages/services/indexer.mdx +++ b/docs/pages/services/indexer.mdx @@ -386,7 +386,7 @@ If the client does not need all the information stored in the `World`, you can [ ```sh copy INDEXER_URL=http://localhost:3001/trpc - WORLD_ADDRESS=0x6e9474e9c83676b9a71133ff96db43e7aa0a4342 + WORLD_ADDRESS=0x256e6eaf6a6683ab771c576f2f5c8a774bdac8e3 TABLE_ID=0x746200000000000000000000000000005461736b730000000000000000000000 CHAIN_ID=31337 JSON='{"0":{"json":{"chainId": '$CHAIN_ID', "address": "'$WORLD_ADDRESS'", "filters": [{"tableId": "'$TABLE_ID'"}]}}}' @@ -426,7 +426,7 @@ If the client does not need all the information stored in the `World`, you can [ ```sh copy INDEXER_URL=http://localhost:3001/trpc - WORLD_ADDRESS=0x7203e7adfdf38519e1ff4f8da7dcdc969371f377 + WORLD_ADDRESS=0x256e6eaf6a6683ab771c576f2f5c8a774bdac8e3 CHAIN_ID=17001 JSON='{"0":{"json":{"chainId":'$CHAIN_ID', "address":"'$WORLD_ADDRESS'"}}}' ENCODED_JSON=`echo "console.log(encodeURI('$JSON'))" | node` diff --git a/docs/pages/world/balance.mdx b/docs/pages/world/balance.mdx index b7d5a49831..b7458d5ab1 100644 --- a/docs/pages/world/balance.mdx +++ b/docs/pages/world/balance.mdx @@ -46,7 +46,7 @@ uint256 balance = Balances.get(); PRIVATE_KEY=0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d # Address for the world we are extending - WORLD_ADDRESS=0x6e9474e9c83676b9a71133ff96db43e7aa0a4342 + WORLD_ADDRESS=0x256e6eaf6a6683ab771c576f2f5c8a774bdac8e3 ``` 1. Create this file as `scripts/GetBalance.s.sol`. From d7a4ca57d61953e1575ea61a4f22611f05bcaf31 Mon Sep 17 00:00:00 2001 From: Ori Pomerantz Date: Fri, 23 Feb 2024 07:47:15 -0600 Subject: [PATCH 23/24] docs(world/reference): initial version (#2232) --- docs/pages/store/reference/_meta.js | 1 + docs/pages/store/reference/misc.mdx | 1625 +++++++++++++++++ docs/pages/store/reference/store-core.mdx | 1391 +++++++++++++- docs/pages/store/reference/store-hook.mdx | 21 +- docs/pages/store/reference/store.mdx | 94 +- docs/pages/world/_meta.js | 1 + docs/pages/world/reference/_meta.js | 14 + .../world/reference/delegation-external.mdx | 19 + docs/pages/world/reference/internal/_meta.js | 10 + .../reference/internal/access-control.mdx | 80 + .../pages/world/reference/internal/create.mdx | 81 + .../world/reference/internal/delegation.mdx | 137 ++ .../reference/internal/erc165-external.mdx | 34 + .../pages/world/reference/internal/erc165.mdx | 113 ++ .../internal/init-module-implementation.mdx | 520 ++++++ .../world/reference/internal/init-module.mdx | 259 +++ .../world/reference/internal/systemcall.mdx | 100 + docs/pages/world/reference/misc.mdx | 112 ++ .../pages/world/reference/module-external.mdx | 77 + docs/pages/world/reference/module.mdx | 80 + docs/pages/world/reference/resource-ids.mdx | 215 +++ .../pages/world/reference/system-external.mdx | 50 + docs/pages/world/reference/system.mdx | 77 + .../reference/world-context-external.mdx | 63 + docs/pages/world/reference/world-context.mdx | 286 +++ docs/pages/world/reference/world-external.mdx | 927 ++++++++++ docs/pages/world/reference/world.mdx | 446 +++++ scripts/render-api-docs.ts | 366 +++- 28 files changed, 7084 insertions(+), 115 deletions(-) create mode 100644 docs/pages/store/reference/misc.mdx create mode 100644 docs/pages/world/reference/_meta.js create mode 100644 docs/pages/world/reference/delegation-external.mdx create mode 100644 docs/pages/world/reference/internal/_meta.js create mode 100644 docs/pages/world/reference/internal/access-control.mdx create mode 100644 docs/pages/world/reference/internal/create.mdx create mode 100644 docs/pages/world/reference/internal/delegation.mdx create mode 100644 docs/pages/world/reference/internal/erc165-external.mdx create mode 100644 docs/pages/world/reference/internal/erc165.mdx create mode 100644 docs/pages/world/reference/internal/init-module-implementation.mdx create mode 100644 docs/pages/world/reference/internal/init-module.mdx create mode 100644 docs/pages/world/reference/internal/systemcall.mdx create mode 100644 docs/pages/world/reference/misc.mdx create mode 100644 docs/pages/world/reference/module-external.mdx create mode 100644 docs/pages/world/reference/module.mdx create mode 100644 docs/pages/world/reference/resource-ids.mdx create mode 100644 docs/pages/world/reference/system-external.mdx create mode 100644 docs/pages/world/reference/system.mdx create mode 100644 docs/pages/world/reference/world-context-external.mdx create mode 100644 docs/pages/world/reference/world-context.mdx create mode 100644 docs/pages/world/reference/world-external.mdx create mode 100644 docs/pages/world/reference/world.mdx diff --git a/docs/pages/store/reference/_meta.js b/docs/pages/store/reference/_meta.js index e8c248aa2c..d87a2142ab 100644 --- a/docs/pages/store/reference/_meta.js +++ b/docs/pages/store/reference/_meta.js @@ -2,4 +2,5 @@ export default { "store-core": "StoreCore (internal)", store: "IStore (external)", "store-hook": "StoreHook", + "misc": "Miscellaneous", }; diff --git a/docs/pages/store/reference/misc.mdx b/docs/pages/store/reference/misc.mdx new file mode 100644 index 0000000000..ae365f79b0 --- /dev/null +++ b/docs/pages/store/reference/misc.mdx @@ -0,0 +1,1625 @@ +[//]: # "This file is autogenerated, do not change manually" + +## Bytes + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/store/src/Bytes.sol) + +Utility functions for bytes. + +### Functions + +#### setLength + +UTILS + +_Sets the length of a bytes blob in memory. +This function does not resize the memory allocation; it only changes the length +field, which affects operations that access the length property._ + +```solidity +function setLength(bytes memory input, uint256 length) internal pure returns (bytes memory); +``` + +**Parameters** + +| Name | Type | Description | +| -------- | --------- | ------------------------- | +| `input` | `bytes` | The bytes blob to modify. | +| `length` | `uint256` | The new length to set. | + +**Returns** + +| Name | Type | Description | +| -------- | ------- | ------------------------------------------------------- | +| `` | `bytes` | Reference to the input bytes blob with modified length. | + +#### setBytes4 + +SET + +_Sets a specific 4-byte sequence in a bytes blob at a given index._ + +```solidity +function setBytes4(bytes memory input, uint256 index, bytes4 overwrite) internal pure returns (bytes memory); +``` + +**Parameters** + +| Name | Type | Description | +| ----------- | --------- | ----------------------------------------------------------------------------------------------------- | +| `input` | `bytes` | The bytes blob in which a specific 4-byte sequence is to be altered. | +| `index` | `uint256` | The position within the bytes blob to start altering the 4-byte sequence. Index starts from the left. | +| `overwrite` | `bytes4` | The new 4-byte value to be set at the specified index. | + +**Returns** + +| Name | Type | Description | +| -------- | ------- | ------------------------------------------------------------------------- | +| `` | `bytes` | The modified bytes blob with the new 4-byte value at the specified index. | + +#### slice1 + +SLICE + +_Extracts a single byte from a bytes blob starting at a specific position._ + +```solidity +function slice1(bytes memory data, uint256 start) internal pure returns (bytes1 output); +``` + +**Parameters** + +| Name | Type | Description | +| ------- | --------- | ----------------------------------------------------------- | +| `data` | `bytes` | The bytes blob from which a byte is to be extracted. | +| `start` | `uint256` | The starting position within the bytes blob for extraction. | + +**Returns** + +| Name | Type | Description | +| -------- | -------- | ------------------------------------------------------------------------- | +| `output` | `bytes1` | The extracted bytes1 value from the specified position in the bytes blob. | + +#### slice1 + +_Extracts a single byte from a bytes32 value starting at a specific position._ + +```solidity +function slice1(bytes32 data, uint256 start) internal pure returns (bytes1 output); +``` + +**Parameters** + +| Name | Type | Description | +| ------- | --------- | -------------------------------------------------------------- | +| `data` | `bytes32` | The bytes32 value from which a byte is to be extracted. | +| `start` | `uint256` | The starting position within the bytes32 value for extraction. | + +**Returns** + +| Name | Type | Description | +| -------- | -------- | ---------------------------------------------------------------------------- | +| `output` | `bytes1` | The extracted bytes1 value from the specified position in the bytes32 value. | + +#### slice2 + +_Extracts a 2-byte sequence from a bytes blob starting at a specific position._ + +```solidity +function slice2(bytes memory data, uint256 start) internal pure returns (bytes2 output); +``` + +**Parameters** + +| Name | Type | Description | +| ------- | --------- | --------------------------------------------------------------- | +| `data` | `bytes` | The bytes blob from which a 2-byte sequence is to be extracted. | +| `start` | `uint256` | The starting position within the bytes blob for extraction. | + +**Returns** + +| Name | Type | Description | +| -------- | -------- | ------------------------------------------------------------------------- | +| `output` | `bytes2` | The extracted bytes2 value from the specified position in the bytes blob. | + +#### slice2 + +_Extracts a 2-byte sequence from a bytes32 value starting at a specific position._ + +```solidity +function slice2(bytes32 data, uint256 start) internal pure returns (bytes2 output); +``` + +**Parameters** + +| Name | Type | Description | +| ------- | --------- | ------------------------------------------------------------------ | +| `data` | `bytes32` | The bytes32 value from which a 2-byte sequence is to be extracted. | +| `start` | `uint256` | The starting position within the bytes32 value for extraction. | + +**Returns** + +| Name | Type | Description | +| -------- | -------- | ---------------------------------------------------------------------------- | +| `output` | `bytes2` | The extracted bytes2 value from the specified position in the bytes32 value. | + +#### slice4 + +_Extracts a 4-byte sequence from a bytes blob starting at a specific position._ + +```solidity +function slice4(bytes memory data, uint256 start) internal pure returns (bytes4 output); +``` + +**Parameters** + +| Name | Type | Description | +| ------- | --------- | --------------------------------------------------------------- | +| `data` | `bytes` | The bytes blob from which a 4-byte sequence is to be extracted. | +| `start` | `uint256` | The starting position within the bytes blob for extraction. | + +**Returns** + +| Name | Type | Description | +| -------- | -------- | ------------------------------------------------------------------------- | +| `output` | `bytes4` | The extracted bytes4 value from the specified position in the bytes blob. | + +#### slice5 + +_Extracts a 5-byte sequence from a bytes blob starting at a specific position._ + +```solidity +function slice5(bytes memory data, uint256 start) internal pure returns (bytes5 output); +``` + +**Parameters** + +| Name | Type | Description | +| ------- | --------- | --------------------------------------------------------------- | +| `data` | `bytes` | The bytes blob from which a 5-byte sequence is to be extracted. | +| `start` | `uint256` | The starting position within the bytes blob for extraction. | + +**Returns** + +| Name | Type | Description | +| -------- | -------- | ------------------------------------------------------------------------- | +| `output` | `bytes5` | The extracted bytes5 value from the specified position in the bytes blob. | + +#### slice8 + +_Extracts a 8-byte sequence from a bytes blob starting at a specific position._ + +```solidity +function slice8(bytes memory data, uint256 start) internal pure returns (bytes8 output); +``` + +**Parameters** + +| Name | Type | Description | +| ------- | --------- | --------------------------------------------------------------- | +| `data` | `bytes` | The bytes blob from which a 8-byte sequence is to be extracted. | +| `start` | `uint256` | The starting position within the bytes blob for extraction. | + +**Returns** + +| Name | Type | Description | +| -------- | -------- | ------------------------------------------------------------------------- | +| `output` | `bytes8` | The extracted bytes8 value from the specified position in the bytes blob. | + +#### slice16 + +_Extracts a 16-byte sequence from a bytes blob starting at a specific position._ + +```solidity +function slice16(bytes memory data, uint256 start) internal pure returns (bytes16 output); +``` + +**Parameters** + +| Name | Type | Description | +| ------- | --------- | ---------------------------------------------------------------- | +| `data` | `bytes` | The bytes blob from which a 16-byte sequence is to be extracted. | +| `start` | `uint256` | The starting position within the bytes blob for extraction. | + +**Returns** + +| Name | Type | Description | +| -------- | --------- | -------------------------------------------------------------------------- | +| `output` | `bytes16` | The extracted bytes16 value from the specified position in the bytes blob. | + +#### slice20 + +_Extracts a 20-byte sequence from a bytes blob starting at a specific position._ + +```solidity +function slice20(bytes memory data, uint256 start) internal pure returns (bytes20 output); +``` + +**Parameters** + +| Name | Type | Description | +| ------- | --------- | ---------------------------------------------------------------- | +| `data` | `bytes` | The bytes blob from which a 20-byte sequence is to be extracted. | +| `start` | `uint256` | The starting position within the bytes blob for extraction. | + +**Returns** + +| Name | Type | Description | +| -------- | --------- | -------------------------------------------------------------------------- | +| `output` | `bytes20` | The extracted bytes20 value from the specified position in the bytes blob. | + +#### slice32 + +_Extracts a 32-byte sequence from a bytes blob starting at a specific position._ + +```solidity +function slice32(bytes memory data, uint256 start) internal pure returns (bytes32 output); +``` + +**Parameters** + +| Name | Type | Description | +| ------- | --------- | ---------------------------------------------------------------- | +| `data` | `bytes` | The bytes blob from which a 32-byte sequence is to be extracted. | +| `start` | `uint256` | The starting position within the bytes blob for extraction. | + +**Returns** + +| Name | Type | Description | +| -------- | --------- | -------------------------------------------------------------------------- | +| `output` | `bytes32` | The extracted bytes32 value from the specified position in the bytes blob. | + +## FieldLayoutInstance + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/store/src/FieldLayout.sol) + +_Provides instance functions for obtaining information from an encoded FieldLayout._ + +### Functions + +#### atIndex + +Get the static byte length at the given index from the field layout. + +```solidity +function atIndex(FieldLayout fieldLayout, uint256 index) internal pure returns (uint256); +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | ------------- | --------------------------------------------------- | +| `fieldLayout` | `FieldLayout` | The FieldLayout to extract the byte length from. | +| `index` | `uint256` | The field index to get the static byte length from. | + +**Returns** + +| Name | Type | Description | +| -------- | --------- | ---------------------------------------------- | +| `` | `uint256` | The static byte length at the specified index. | + +#### staticDataLength + +Get the total static byte length for the given field layout. + +```solidity +function staticDataLength(FieldLayout fieldLayout) internal pure returns (uint256); +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | ------------- | ------------------------------------------------------------- | +| `fieldLayout` | `FieldLayout` | The FieldLayout to extract the total static byte length from. | + +**Returns** + +| Name | Type | Description | +| -------- | --------- | ----------------------------- | +| `` | `uint256` | The total static byte length. | + +#### numStaticFields + +Get the number of static fields for the field layout. + +```solidity +function numStaticFields(FieldLayout fieldLayout) internal pure returns (uint256); +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | ------------- | ------------------------------------------------------------ | +| `fieldLayout` | `FieldLayout` | The FieldLayout to extract the number of static fields from. | + +**Returns** + +| Name | Type | Description | +| -------- | --------- | ---------------------------- | +| `` | `uint256` | The number of static fields. | + +#### numDynamicFields + +Get the number of dynamic length fields for the field layout. + +```solidity +function numDynamicFields(FieldLayout fieldLayout) internal pure returns (uint256); +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | ------------- | ------------------------------------------------------------- | +| `fieldLayout` | `FieldLayout` | The FieldLayout to extract the number of dynamic fields from. | + +**Returns** + +| Name | Type | Description | +| -------- | --------- | ------------------------------------ | +| `` | `uint256` | The number of dynamic length fields. | + +#### numFields + +Get the total number of fields for the field layout. + +```solidity +function numFields(FieldLayout fieldLayout) internal pure returns (uint256); +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | ------------- | ----------------------------------------------------------- | +| `fieldLayout` | `FieldLayout` | The FieldLayout to extract the total number of fields from. | + +**Returns** + +| Name | Type | Description | +| -------- | --------- | --------------------------- | +| `` | `uint256` | The total number of fields. | + +#### isEmpty + +Check if the field layout is empty. + +```solidity +function isEmpty(FieldLayout fieldLayout) internal pure returns (bool); +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | ------------- | ------------------------- | +| `fieldLayout` | `FieldLayout` | The FieldLayout to check. | + +**Returns** + +| Name | Type | Description | +| -------- | ------ | --------------------------------------------------- | +| `` | `bool` | True if the field layout is empty, false otherwise. | + +#### validate + +Validate the field layout with various checks on the length and size of the fields. + +_Reverts if total fields, static field length, or static byte length exceed allowed limits._ + +```solidity +function validate(FieldLayout fieldLayout) internal pure; +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | ------------- | ---------------------------- | +| `fieldLayout` | `FieldLayout` | The FieldLayout to validate. | + +#### unwrap + +Unwrap the field layout to obtain the raw bytes32 representation. + +```solidity +function unwrap(FieldLayout fieldLayout) internal pure returns (bytes32); +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | ------------- | -------------------------- | +| `fieldLayout` | `FieldLayout` | The FieldLayout to unwrap. | + +**Returns** + +| Name | Type | Description | +| -------- | --------- | -------------------------------------------------------- | +| `` | `bytes32` | The unwrapped bytes32 representation of the FieldLayout. | + +## FieldLayoutLib + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/store/src/FieldLayout.sol) + +_A library for handling field layout encoding into a single bytes32. +It provides a function to encode static and dynamic fields and ensure +various constraints regarding the length and size of the fields._ + +### Functions + +#### encode + +Encodes the given field layout into a single bytes32. + +_Ensures various constraints on the length and size of the fields. +Reverts if total fields, static field length, or static byte length exceed allowed limits._ + +```solidity +function encode(uint256[] memory _staticFieldLengths, uint256 numDynamicFields) internal pure returns (FieldLayout); +``` + +**Parameters** + +| Name | Type | Description | +| --------------------- | ----------- | --------------------------------- | +| `_staticFieldLengths` | `uint256[]` | An array of static field lengths. | +| `numDynamicFields` | `uint256` | The number of dynamic fields. | + +**Returns** + +| Name | Type | Description | +| -------- | ------------- | ------------------------------------------------------------ | +| `` | `FieldLayout` | A FieldLayout structure containing the encoded field layout. | + +### Errors + +#### FieldLayoutLib_TooManyFields + +```solidity +error FieldLayoutLib_TooManyFields(uint256 numFields, uint256 maxFields); +``` + +#### FieldLayoutLib_TooManyDynamicFields + +```solidity +error FieldLayoutLib_TooManyDynamicFields(uint256 numFields, uint256 maxFields); +``` + +#### FieldLayoutLib_Empty + +```solidity +error FieldLayoutLib_Empty(); +``` + +#### FieldLayoutLib_InvalidStaticDataLength + +```solidity +error FieldLayoutLib_InvalidStaticDataLength(uint256 staticDataLength, uint256 computedStaticDataLength); +``` + +#### FieldLayoutLib_StaticLengthIsZero + +```solidity +error FieldLayoutLib_StaticLengthIsZero(uint256 index); +``` + +#### FieldLayoutLib_StaticLengthIsNotZero + +```solidity +error FieldLayoutLib_StaticLengthIsNotZero(uint256 index); +``` + +#### FieldLayoutLib_StaticLengthDoesNotFitInAWord + +```solidity +error FieldLayoutLib_StaticLengthDoesNotFitInAWord(uint256 index); +``` + +## FieldLayout + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/store/src/FieldLayout.sol) + +\*Represents a field layout encoded into a single bytes32. +From left to right, the bytes are laid out as follows: + +- 2 bytes for total length of all static fields +- 1 byte for number of static size fields +- 1 byte for number of dynamic size fields +- 28 bytes for 28 static field lengths + (MAX_DYNAMIC_FIELDS allows PackedCounter to pack the dynamic lengths into 1 word)\* + +```solidity +type FieldLayout is bytes32; +``` + +## HookInstance + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/store/src/Hook.sol) + +_Library for interacting with Hook instances._ + +### Functions + +#### isEnabled + +Check if the given hook types are enabled in the hook. + +_We check multiple hook types at once by using a bitmap._ + +```solidity +function isEnabled(Hook self, uint8 hookTypes) internal pure returns (bool); +``` + +**Parameters** + +| Name | Type | Description | +| ----------- | ------- | -------------------------------- | +| `self` | `Hook` | The Hook instance to check. | +| `hookTypes` | `uint8` | A bitmap of hook types to check. | + +**Returns** + +| Name | Type | Description | +| -------- | ------ | ---------------------------------------------------- | +| `` | `bool` | True if the hook types are enabled, false otherwise. | + +#### getAddress + +Get the address from the hook. + +_The address is stored in the leftmost 20 bytes._ + +```solidity +function getAddress(Hook self) internal pure returns (address); +``` + +**Parameters** + +| Name | Type | Description | +| ------ | ------ | ------------------------------------------ | +| `self` | `Hook` | The Hook instance to get the address from. | + +**Returns** + +| Name | Type | Description | +| -------- | --------- | ------------------------------------------- | +| `` | `address` | The address contained in the Hook instance. | + +#### getBitmap + +Get the bitmap from the hook. + +_The bitmap is stored in the rightmost byte._ + +```solidity +function getBitmap(Hook self) internal pure returns (uint8); +``` + +**Parameters** + +| Name | Type | Description | +| ------ | ------ | ----------------------------------------- | +| `self` | `Hook` | The Hook instance to get the bitmap from. | + +**Returns** + +| Name | Type | Description | +| -------- | ------- | ------------------------------------------ | +| `` | `uint8` | The bitmap contained in the Hook instance. | + +## HookLib + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/store/src/Hook.sol) + +_Library for encoding hooks and filtering hooks from a list by address._ + +### Functions + +#### encode + +Packs the bitmap of enabled hooks with the hook address into a Hook value (bytes21). + +_The hook address is stored in the leftmost 20 bytes, and the bitmap is stored in the rightmost byte._ + +```solidity +function encode(address hookAddress, uint8 encodedHooks) internal pure returns (Hook); +``` + +**Parameters** + +| Name | Type | Description | +| -------------- | --------- | ------------------------------ | +| `hookAddress` | `address` | The address of the hook. | +| `encodedHooks` | `uint8` | The encoded hooks in a bitmap. | + +**Returns** + +| Name | Type | Description | +| -------- | ------ | ------------------------------------------------ | +| `` | `Hook` | A Hook type with packed hook address and bitmap. | + +#### filterListByAddress + +Filter a hook from the hook list by its address. + +_This function writes the updated hook list to the table in place._ + +```solidity +function filterListByAddress( + ResourceId hookTableId, + ResourceId resourceWithHooks, + address hookAddressToRemove +) internal; +``` + +**Parameters** + +| Name | Type | Description | +| --------------------- | ------------ | -------------------------------------------------- | +| `hookTableId` | `ResourceId` | The resource ID of the hook table. | +| `resourceWithHooks` | `ResourceId` | The resource ID of the table with hooks to filter. | +| `hookAddressToRemove` | `address` | The address of the hook to remove. | + +## Hook + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/store/src/Hook.sol) + +```solidity +type Hook is bytes21; +``` + +## Memory + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/store/src/Memory.sol) + +A library for performing low-level memory operations. + +_This library provides low-level memory operations with safety checks._ + +### Functions + +#### dataPointer + +Gets the actual data pointer of dynamic arrays. + +_In dynamic arrays, the first word stores the length of the data, after which comes the actual data. +Example: 0x40 0x01 0x02 +^len ^data_ + +```solidity +function dataPointer(bytes memory data) internal pure returns (uint256 memoryPointer); +``` + +**Parameters** + +| Name | Type | Description | +| ------ | ------- | ----------------------------------------------------- | +| `data` | `bytes` | The dynamic bytes data from which to get the pointer. | + +**Returns** + +| Name | Type | Description | +| --------------- | --------- | ----------------------------------------------------- | +| `memoryPointer` | `uint256` | The pointer to the actual data (skipping the length). | + +#### copy + +Copies memory from one location to another. + +_Safely copies memory in chunks of 32 bytes, then handles any residual bytes._ + +```solidity +function copy(uint256 fromPointer, uint256 toPointer, uint256 length) internal pure; +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | --------- | --------------------------------- | +| `fromPointer` | `uint256` | The memory location to copy from. | +| `toPointer` | `uint256` | The memory location to copy to. | +| `length` | `uint256` | The number of bytes to copy. | + +## ResourceId.sol constants + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/store/src/ResourceId.sol) + +#### TYPE_BITS + +_Number of bits reserved for the type in the ResourceId._ + +```solidity +uint256 constant TYPE_BITS = 2 * 8; +``` + +## ResourceIdInstance + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/store/src/ResourceId.sol) + +_Provides functions to extract data from a ResourceId._ + +### Functions + +#### getType + +Extracts the type identifier from a given ResourceId. + +```solidity +function getType(ResourceId resourceId) internal pure returns (bytes2); +``` + +**Parameters** + +| Name | Type | Description | +| ------------ | ------------ | ------------------------------------------------------------------ | +| `resourceId` | `ResourceId` | The ResourceId from which the type identifier should be extracted. | + +**Returns** + +| Name | Type | Description | +| -------- | -------- | ------------------------------------- | +| `` | `bytes2` | The extracted 2-byte type identifier. | + +## ResourceIdLib + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/store/src/ResourceId.sol) + +_Provides functions to encode data into the ResourceId_ + +### Functions + +#### encode + +Encodes given typeId and name into a ResourceId. + +```solidity +function encode(bytes2 typeId, bytes30 name) internal pure returns (ResourceId); +``` + +**Parameters** + +| Name | Type | Description | +| -------- | --------- | --------------------------------------------------- | +| `typeId` | `bytes2` | The type identifier to be encoded. Must be 2 bytes. | +| `name` | `bytes30` | The name to be encoded. Must be 30 bytes. | + +**Returns** + +| Name | Type | Description | +| -------- | ------------ | ---------------------------------------------------- | +| `` | `ResourceId` | A ResourceId containing the encoded typeId and name. | + +## ResourceId + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/store/src/ResourceId.sol) + +_A ResourceId is a bytes32 data structure that consists of a +type and a name_ + +```solidity +type ResourceId is bytes32; +``` + +## SchemaInstance + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/store/src/Schema.sol) + +_Instance utility functions for handling a Schema instance._ + +### Functions + +#### staticDataLength + +Get the length of static data for the given schema. + +```solidity +function staticDataLength(Schema schema) internal pure returns (uint256); +``` + +**Parameters** + +| Name | Type | Description | +| -------- | -------- | ---------------------- | +| `schema` | `Schema` | The schema to inspect. | + +**Returns** + +| Name | Type | Description | +| -------- | --------- | ----------------------- | +| `` | `uint256` | The static data length. | + +#### atIndex + +Get the SchemaType at a given index in the schema. + +```solidity +function atIndex(Schema schema, uint256 index) internal pure returns (SchemaType); +``` + +**Parameters** + +| Name | Type | Description | +| -------- | --------- | ---------------------------------------- | +| `schema` | `Schema` | The schema to inspect. | +| `index` | `uint256` | The index of the SchemaType to retrieve. | + +**Returns** + +| Name | Type | Description | +| -------- | ------------ | ---------------------------------- | +| `` | `SchemaType` | The SchemaType at the given index. | + +#### numStaticFields + +Get the number of static (fixed length) fields in the schema. + +```solidity +function numStaticFields(Schema schema) internal pure returns (uint256); +``` + +**Parameters** + +| Name | Type | Description | +| -------- | -------- | ---------------------- | +| `schema` | `Schema` | The schema to inspect. | + +**Returns** + +| Name | Type | Description | +| -------- | --------- | ---------------------------- | +| `` | `uint256` | The number of static fields. | + +#### numDynamicFields + +Get the number of dynamic length fields in the schema. + +```solidity +function numDynamicFields(Schema schema) internal pure returns (uint256); +``` + +**Parameters** + +| Name | Type | Description | +| -------- | -------- | ---------------------- | +| `schema` | `Schema` | The schema to inspect. | + +**Returns** + +| Name | Type | Description | +| -------- | --------- | ------------------------------------ | +| `` | `uint256` | The number of dynamic length fields. | + +#### numFields + +Get the total number of fields in the schema. + +```solidity +function numFields(Schema schema) internal pure returns (uint256); +``` + +**Parameters** + +| Name | Type | Description | +| -------- | -------- | ---------------------- | +| `schema` | `Schema` | The schema to inspect. | + +**Returns** + +| Name | Type | Description | +| -------- | --------- | --------------------------- | +| `` | `uint256` | The total number of fields. | + +#### isEmpty + +Checks if the provided schema is empty. + +```solidity +function isEmpty(Schema schema) internal pure returns (bool); +``` + +**Parameters** + +| Name | Type | Description | +| -------- | -------- | -------------------- | +| `schema` | `Schema` | The schema to check. | + +**Returns** + +| Name | Type | Description | +| -------- | ------ | --------------------------------------------- | +| `` | `bool` | true if the schema is empty, false otherwise. | + +#### validate + +Validates the given schema. + +```solidity +function validate(Schema schema, bool allowEmpty) internal pure; +``` + +**Parameters** + +| Name | Type | Description | +| ------------ | -------- | ---------------------------------------------- | +| `schema` | `Schema` | The schema to validate. | +| `allowEmpty` | `bool` | Determines if an empty schema is valid or not. | + +#### unwrap + +Unwraps the schema to its underlying bytes32 representation. + +```solidity +function unwrap(Schema schema) internal pure returns (bytes32); +``` + +**Parameters** + +| Name | Type | Description | +| -------- | -------- | --------------------- | +| `schema` | `Schema` | The schema to unwrap. | + +**Returns** + +| Name | Type | Description | +| -------- | --------- | ----------------------------------------- | +| `` | `bytes32` | The bytes32 representation of the schema. | + +## SchemaLib + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/store/src/Schema.sol) + +_Static utility functions for handling Schemas._ + +### Functions + +#### encode + +Encodes a given schema into a single bytes32. + +```solidity +function encode(SchemaType[] memory schemas) internal pure returns (Schema); +``` + +**Parameters** + +| Name | Type | Description | +| --------- | -------------- | --------------------------------------------------- | +| `schemas` | `SchemaType[]` | The list of SchemaTypes that constitute the schema. | + +**Returns** + +| Name | Type | Description | +| -------- | -------- | ------------------- | +| `` | `Schema` | The encoded Schema. | + +### Errors + +#### SchemaLib_InvalidLength + +_Error raised when the provided schema has an invalid length._ + +```solidity +error SchemaLib_InvalidLength(uint256 length); +``` + +#### SchemaLib_StaticTypeAfterDynamicType + +_Error raised when a static type is placed after a dynamic type in a schema._ + +```solidity +error SchemaLib_StaticTypeAfterDynamicType(); +``` + +## Schema + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/store/src/Schema.sol) + +_Defines and handles the encoding/decoding of Schemas which describe the layout of data structures. +2 bytes length of all the static (in size) fields in the schema +1 byte for number of static size fields +1 byte for number of dynamic size fields +28 bytes for 28 schema types (MAX_DYNAMIC_FIELDS allows us to pack the lengths into 1 word)_ + +```solidity +type Schema is bytes32; +``` + +## SliceInstance + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/store/src/Slice.sol) + +### Functions + +#### pointer + +Returns the pointer to the start of a slice + +```solidity +function pointer(Slice self) internal pure returns (uint256); +``` + +**Parameters** + +| Name | Type | Description | +| ------ | ------- | ------------------------------------------- | +| `self` | `Slice` | The slice whose pointer needs to be fetched | + +**Returns** + +| Name | Type | Description | +| -------- | --------- | ------------------------------------- | +| `` | `uint256` | The pointer to the start of the slice | + +#### length + +Returns the slice length in bytes + +```solidity +function length(Slice self) internal pure returns (uint256); +``` + +**Parameters** + +| Name | Type | Description | +| ------ | ------- | ------------------------------------------ | +| `self` | `Slice` | The slice whose length needs to be fetched | + +**Returns** + +| Name | Type | Description | +| -------- | --------- | ----------------------- | +| `` | `uint256` | The length of the slice | + +#### toBytes + +Converts a Slice to bytes + +_This function internally manages the conversion of a slice into a bytes format._ + +```solidity +function toBytes(Slice self) internal pure returns (bytes memory data); +``` + +**Parameters** + +| Name | Type | Description | +| ------ | ------- | ----------------------------------- | +| `self` | `Slice` | The Slice to be converted to bytes. | + +**Returns** + +| Name | Type | Description | +| ------ | ------- | ----------------------------------------------- | +| `data` | `bytes` | The bytes representation of the provided Slice. | + +#### toBytes32 + +Converts a Slice to bytes32 + +_This function converts a slice into a fixed-length bytes32. Uses inline assembly for the conversion._ + +```solidity +function toBytes32(Slice self) internal pure returns (bytes32 result); +``` + +**Parameters** + +| Name | Type | Description | +| ------ | ------- | ------------------------------------- | +| `self` | `Slice` | The Slice to be converted to bytes32. | + +**Returns** + +| Name | Type | Description | +| -------- | --------- | ------------------------------------------------- | +| `result` | `bytes32` | The bytes32 representation of the provided Slice. | + +## SliceLib + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/store/src/Slice.sol) + +### State Variables + +#### MASK_LEN + +```solidity +uint256 constant MASK_LEN = uint256(type(uint128).max); +``` + +### Functions + +#### fromBytes + +Converts a bytes array to a slice (without copying data) + +```solidity +function fromBytes(bytes memory data) internal pure returns (Slice); +``` + +**Parameters** + +| Name | Type | Description | +| ------ | ------- | ------------------------------- | +| `data` | `bytes` | The bytes array to be converted | + +**Returns** + +| Name | Type | Description | +| -------- | ------- | ---------------------------------------- | +| `` | `Slice` | A new Slice representing the bytes array | + +#### getSubslice + +Subslice a bytes array using the given start index until the end of the array (without copying data) + +```solidity +function getSubslice(bytes memory data, uint256 start) internal pure returns (Slice); +``` + +**Parameters** + +| Name | Type | Description | +| ------- | --------- | -------------------------------- | +| `data` | `bytes` | The bytes array to subslice | +| `start` | `uint256` | The start index for the subslice | + +**Returns** + +| Name | Type | Description | +| -------- | ------- | ------------------------------------- | +| `` | `Slice` | A new Slice representing the subslice | + +#### getSubslice + +Subslice a bytes array using the given indexes (without copying data) + +_The start index is inclusive, the end index is exclusive_ + +```solidity +function getSubslice(bytes memory data, uint256 start, uint256 end) internal pure returns (Slice); +``` + +**Parameters** + +| Name | Type | Description | +| ------- | --------- | -------------------------------- | +| `data` | `bytes` | The bytes array to subslice | +| `start` | `uint256` | The start index for the subslice | +| `end` | `uint256` | The end index for the subslice | + +**Returns** + +| Name | Type | Description | +| -------- | ------- | ------------------------------------- | +| `` | `Slice` | A new Slice representing the subslice | + +### Errors + +#### Slice_OutOfBounds + +```solidity +error Slice_OutOfBounds(bytes data, uint256 start, uint256 end); +``` + +## Slice + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/store/src/Slice.sol) + +```solidity +type Slice is uint256; +``` + +## Storage + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/store/src/Storage.sol) + +_Provides functions for low-level storage manipulation, including storing and retrieving bytes._ + +### Functions + +#### store + +Store a single word of data at a specific storage pointer. + +```solidity +function store(uint256 storagePointer, bytes32 data) internal; +``` + +**Parameters** + +| Name | Type | Description | +| ---------------- | --------- | ---------------------------------- | +| `storagePointer` | `uint256` | The location to store the data. | +| `data` | `bytes32` | The 32-byte word of data to store. | + +#### store + +Store bytes of data at a specific storage pointer and offset. + +```solidity +function store(uint256 storagePointer, uint256 offset, bytes memory data) internal; +``` + +**Parameters** + +| Name | Type | Description | +| ---------------- | --------- | ----------------------------------- | +| `storagePointer` | `uint256` | The base storage location. | +| `offset` | `uint256` | Offset within the storage location. | +| `data` | `bytes` | Bytes to store. | + +#### store + +Stores raw bytes to storage at a given pointer, offset, and length, keeping the rest of the word intact. + +```solidity +function store(uint256 storagePointer, uint256 offset, uint256 length, uint256 memoryPointer) internal; +``` + +**Parameters** + +| Name | Type | Description | +| ---------------- | --------- | ------------------------------------------- | +| `storagePointer` | `uint256` | The base storage location. | +| `offset` | `uint256` | Offset within the storage location. | +| `length` | `uint256` | Length of the data in bytes. | +| `memoryPointer` | `uint256` | Pointer to the start of the data in memory. | + +#### zero + +Set multiple storage locations to zero. + +```solidity +function zero(uint256 storagePointer, uint256 length) internal; +``` + +**Parameters** + +| Name | Type | Description | +| ---------------- | --------- | -------------------------------------------------------- | +| `storagePointer` | `uint256` | The starting storage location. | +| `length` | `uint256` | The number of storage locations to set to zero, in bytes | + +#### load + +Load a single word of data from a specific storage pointer. + +```solidity +function load(uint256 storagePointer) internal view returns (bytes32 word); +``` + +**Parameters** + +| Name | Type | Description | +| ---------------- | --------- | ----------------------------------- | +| `storagePointer` | `uint256` | The location to load the data from. | + +**Returns** + +| Name | Type | Description | +| ------ | --------- | -------------------------------- | +| `word` | `bytes32` | The loaded 32-byte word of data. | + +#### load + +Load raw bytes from storage at a given pointer, offset, and length. + +```solidity +function load(uint256 storagePointer, uint256 offset, uint256 length) internal view returns (bytes memory result); +``` + +**Parameters** + +| Name | Type | Description | +| ---------------- | --------- | ----------------------------------- | +| `storagePointer` | `uint256` | The base storage location. | +| `offset` | `uint256` | Offset within the storage location. | +| `length` | `uint256` | Length of the data in bytes. | + +**Returns** + +| Name | Type | Description | +| -------- | ------- | ------------------------- | +| `result` | `bytes` | The loaded bytes of data. | + +#### load + +Append raw bytes from storage at a given pointer, offset, and length to a specific memory pointer. + +```solidity +function load(uint256 storagePointer, uint256 offset, uint256 length, uint256 memoryPointer) internal view; +``` + +**Parameters** + +| Name | Type | Description | +| ---------------- | --------- | ----------------------------------------------------- | +| `storagePointer` | `uint256` | The base storage location. | +| `offset` | `uint256` | Offset within the storage location. | +| `length` | `uint256` | Length of the data in bytes. | +| `memoryPointer` | `uint256` | Pointer to the location in memory to append the data. | + +#### loadField + +Load up to 32 bytes from storage at a given pointer and offset. + +_Since fields are tightly packed, they can span more than one slot. +Since they're max 32 bytes, they can span at most 2 slots._ + +```solidity +function loadField(uint256 storagePointer, uint256 length, uint256 offset) internal view returns (bytes32 result); +``` + +**Parameters** + +| Name | Type | Description | +| ---------------- | --------- | ----------------------------------- | +| `storagePointer` | `uint256` | The base storage location. | +| `length` | `uint256` | Length of the data in bytes. | +| `offset` | `uint256` | Offset within the storage location. | + +**Returns** + +| Name | Type | Description | +| -------- | --------- | ----------------------------------------------------------------------------- | +| `result` | `bytes32` | The loaded bytes, left-aligned bytes. Bytes beyond the length are not zeroed. | + +## constants.sol + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/store/src/constants.sol) + +#### WORD_SIZE + +_This file provides constants for better handling of EVM and Schema related functionalities._ + +_Represents the total byte length of an EVM word._ + +```solidity +uint256 constant WORD_SIZE = 32; +``` + +#### WORD_LAST_INDEX + +_Represents the index of the last byte in an EVM word._ + +```solidity +uint256 constant WORD_LAST_INDEX = 31; +``` + +#### BYTE_TO_BITS + +_Represents the conversion constant from byte to bits._ + +```solidity +uint256 constant BYTE_TO_BITS = 8; +``` + +#### MAX_TOTAL_FIELDS + +_Represents the maximum number of fields a Schema can handle._ + +```solidity +uint256 constant MAX_TOTAL_FIELDS = 28; +``` + +#### MAX_STATIC_FIELDS + +_Represents the maximum number of static fields in a FieldLayout._ + +```solidity +uint256 constant MAX_STATIC_FIELDS = 28; +``` + +#### MAX_DYNAMIC_FIELDS + +_Represents the maximum number of dynamic fields that can be packed in a PackedCounter._ + +```solidity +uint256 constant MAX_DYNAMIC_FIELDS = 5; +``` + +## LayoutOffsets + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/store/src/constants.sol) + +This library provides constant offsets for FieldLayout and Schema metadata. + +_FieldLayout and Schema utilize the same offset values for metadata._ + +### State Variables + +#### TOTAL_LENGTH + +Represents the total length offset within the EVM word. + +```solidity +uint256 internal constant TOTAL_LENGTH = (WORD_SIZE - 2) * BYTE_TO_BITS; +``` + +#### NUM_STATIC_FIELDS + +Represents the number of static fields offset within the EVM word. + +```solidity +uint256 internal constant NUM_STATIC_FIELDS = (WORD_SIZE - 2 - 1) * BYTE_TO_BITS; +``` + +#### NUM_DYNAMIC_FIELDS + +Represents the number of dynamic fields offset within the EVM word. + +```solidity +uint256 internal constant NUM_DYNAMIC_FIELDS = (WORD_SIZE - 2 - 1 - 1) * BYTE_TO_BITS; +``` + +## rightMask + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/store/src/rightMask.sol) + +Utility functions to manage bytes in memory. + +Computes a right-aligned byte mask based on the provided byte length. + +_Adapted from https://github.com/dk1a/solidity-stringutils/blob/main/src/utils/mem.sol#L149-L167_ + +_The mask is used to extract a specified number of rightmost bytes._ + +```solidity +function rightMask(uint256 byteLength) pure returns (uint256 mask); +``` + +**Parameters** + +| Name | Type | Description | +| ------------ | --------- | ------------------------------------------- | +| `byteLength` | `uint256` | The number of rightmost bytes to be masked. | + +**Returns** + +| Name | Type | Description | +| ------ | --------- | --------------------------------------------------------------------- | +| `mask` | `uint256` | A right-aligned byte mask corresponding to the specified byte length. | + +## storeHookTypes.sol constants + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/store/src/storeHookTypes.sol) + +#### BEFORE_SET_RECORD + +Constants for enabling store hooks. + +_These bitmaps can be used to enable selected store hooks. They can be combined with a bitwise OR (`|`)._ + +_Flag to enable the `onBeforeSetRecord` hook._ + +```solidity +uint8 constant BEFORE_SET_RECORD = 1 << 0; +``` + +#### AFTER_SET_RECORD + +_Flag to enable the `afterSetRecord` hook._ + +```solidity +uint8 constant AFTER_SET_RECORD = 1 << 1; +``` + +#### BEFORE_SPLICE_STATIC_DATA + +_Flag to enable the `beforeSpliceStaticData` hook._ + +```solidity +uint8 constant BEFORE_SPLICE_STATIC_DATA = 1 << 2; +``` + +#### AFTER_SPLICE_STATIC_DATA + +_Flag to enable the `afterSpliceStaticData` hook._ + +```solidity +uint8 constant AFTER_SPLICE_STATIC_DATA = 1 << 3; +``` + +#### BEFORE_SPLICE_DYNAMIC_DATA + +_Flag to enable the `beforeSpliceDynamicData` hook._ + +```solidity +uint8 constant BEFORE_SPLICE_DYNAMIC_DATA = 1 << 4; +``` + +#### AFTER_SPLICE_DYNAMIC_DATA + +_Flag to enable the `afterSpliceDynamicData` hook._ + +```solidity +uint8 constant AFTER_SPLICE_DYNAMIC_DATA = 1 << 5; +``` + +#### BEFORE_DELETE_RECORD + +_Flag to enable the `beforeDeleteRecord` hook._ + +```solidity +uint8 constant BEFORE_DELETE_RECORD = 1 << 6; +``` + +#### AFTER_DELETE_RECORD + +_Flag to enable the `afterDeleteRecord` hook._ + +```solidity +uint8 constant AFTER_DELETE_RECORD = 1 << 7; +``` + +#### ALL + +_Bitmap to enable all hooks._ + +```solidity +uint8 constant ALL = BEFORE_SET_RECORD | + AFTER_SET_RECORD | + BEFORE_SPLICE_STATIC_DATA | + AFTER_SPLICE_STATIC_DATA | + BEFORE_SPLICE_DYNAMIC_DATA | + AFTER_SPLICE_DYNAMIC_DATA | + BEFORE_DELETE_RECORD | + AFTER_DELETE_RECORD; +``` + +#### BEFORE_ALL + +_Bitmap to enable all "before" hooks._ + +```solidity +uint8 constant BEFORE_ALL = BEFORE_SET_RECORD | + BEFORE_SPLICE_STATIC_DATA | + BEFORE_SPLICE_DYNAMIC_DATA | + BEFORE_DELETE_RECORD; +``` + +#### AFTER_ALL + +_Bitmap to enable all "after" hooks._ + +```solidity +uint8 constant AFTER_ALL = AFTER_SET_RECORD | + AFTER_SPLICE_STATIC_DATA | + AFTER_SPLICE_DYNAMIC_DATA | + AFTER_DELETE_RECORD; +``` + +## storeResourceTypes.sol constants + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/store/src/storeResourceTypes.sol) + +#### RESOURCE_TABLE + +Constants representing unique identifiers for different resource types. + +_These identifiers can be used to distinguish between various resource types._ + +_Identifier for a resource table._ + +```solidity +bytes2 constant RESOURCE_TABLE = "tb"; +``` + +#### RESOURCE_OFFCHAIN_TABLE + +_Identifier for an offchain resource table._ + +```solidity +bytes2 constant RESOURCE_OFFCHAIN_TABLE = "ot"; +``` + +## version.sol constants + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/store/src/version.sol) + +#### STORE_VERSION + +Contains a constant representing the version of the store. + +_Identifier for the current store version._ + +```solidity +bytes32 constant STORE_VERSION = "1.0.0-unaudited"; +``` diff --git a/docs/pages/store/reference/store-core.mdx b/docs/pages/store/reference/store-core.mdx index 3ac3bf6c68..0afc6d0ed0 100644 --- a/docs/pages/store/reference/store-core.mdx +++ b/docs/pages/store/reference/store-core.mdx @@ -8,7 +8,7 @@ This library includes implementations for all IStore methods and events related ### Functions -### initialize +#### initialize Initialize the store address in StoreSwitch. @@ -21,7 +21,7 @@ StoreSwitch uses internal methods to write data instead of external calls._ function initialize() internal; ``` -### registerInternalTables +#### registerInternalTables Register Store protocol's internal tables in the store. @@ -32,7 +32,7 @@ any table data to allow indexers to decode table events._ function registerInternalTables() internal; ``` -### getFieldLayout +#### getFieldLayout SCHEMA @@ -54,7 +54,7 @@ function getFieldLayout(ResourceId tableId) internal view returns (FieldLayout); | -------- | ------------- | ---------------------------------------- | | `` | `FieldLayout` | The field layout for the given table ID. | -### getKeySchema +#### getKeySchema Get the key schema for the given table ID. @@ -76,7 +76,7 @@ function getKeySchema(ResourceId tableId) internal view returns (Schema keySchem | ----------- | -------- | -------------------------------------- | | `keySchema` | `Schema` | The key schema for the given table ID. | -### getValueSchema +#### getValueSchema Get the value schema for the given table ID. @@ -98,7 +98,7 @@ function getValueSchema(ResourceId tableId) internal view returns (Schema valueS | ------------- | -------- | ---------------------------------------- | | `valueSchema` | `Schema` | The value schema for the given table ID. | -### registerTable +#### registerTable Register a new table with the given configuration. @@ -133,7 +133,7 @@ function registerTable( | `keyNames` | `string[]` | The names of the keys in the table. | | `fieldNames` | `string[]` | The names of the fields in the table. | -### registerStoreHook +#### registerStoreHook REGISTER HOOKS @@ -154,7 +154,7 @@ function registerStoreHook(ResourceId tableId, IStoreHook hookAddress, uint8 ena | `hookAddress` | `IStoreHook` | The address of the hook contract to register. | | `enabledHooksBitmap` | `uint8` | The bitmap of enabled hooks. | -### unregisterStoreHook +#### unregisterStoreHook Unregister a hook from the given table ID. @@ -169,9 +169,7 @@ function unregisterStoreHook(ResourceId tableId, IStoreHook hookAddress) interna | `tableId` | `ResourceId` | The ID of the table to unregister the hook from. | | `hookAddress` | `IStoreHook` | The address of the hook to unregister. | -### setRecord - -SET DATA +#### setRecord Set a full record for the given table ID and key tuple. @@ -199,7 +197,7 @@ function setRecord( | `encodedLengths` | `PackedCounter` | The encoded lengths of the dynamic data of the record. | | `dynamicData` | `bytes` | The dynamic data of the record. | -### setRecord +#### setRecord Set a full data record for the given table ID, key tuple, and field layout. @@ -230,7 +228,7 @@ function setRecord( | `dynamicData` | `bytes` | The dynamic data of the record. | | `fieldLayout` | `FieldLayout` | The field layout for the record. | -### spliceStaticData +#### spliceStaticData Splice the static data for the given table ID and key tuple. @@ -251,7 +249,7 @@ function spliceStaticData(ResourceId tableId, bytes32[] memory keyTuple, uint48 | `start` | `uint48` | The start position in bytes for the splice operation. | | `data` | `bytes` | The data to write to the static data of the record at the start byte. | -### spliceDynamicData +#### spliceDynamicData Splice the dynamic data for the given table ID, key tuple, and dynamic field index. @@ -281,7 +279,7 @@ function spliceDynamicData( | `deleteCount` | `uint40` | The number of bytes to delete in the splice operation. | | `data` | `bytes` | The data to insert into the dynamic data of the record at the start byte. | -### setField +#### setField Set data for a field at the given index in a table with the given tableId, key tuple, and value field layout. @@ -303,7 +301,7 @@ function setField(ResourceId tableId, bytes32[] memory keyTuple, uint8 fieldInde | `fieldIndex` | `uint8` | The index of the field to set. | | `data` | `bytes` | The data to set for the field. | -### setField +#### setField Set data for a field at the given index in a table with the given tableId, key tuple, and value field layout. @@ -333,7 +331,7 @@ function setField( | `data` | `bytes` | The data to set for the field. | | `fieldLayout` | `FieldLayout` | The field layout for the record. | -### setStaticField +#### setStaticField Set a static field for the given table ID, key tuple, field index, and field layout. @@ -361,7 +359,7 @@ function setStaticField( | `data` | `bytes` | The data to set for the static field. | | `fieldLayout` | `FieldLayout` | The field layout for the record. | -### setDynamicField +#### setDynamicField Set a dynamic field for the given table ID, key tuple, and dynamic field index. @@ -387,7 +385,7 @@ function setDynamicField( | `dynamicFieldIndex` | `uint8` | The index of the dynamic field to set. (Dynamic field index = field index - number of static fields). | | `data` | `bytes` | The data to set for the dynamic field. | -### deleteRecord +#### deleteRecord Delete a record for the given table ID and key tuple. @@ -408,7 +406,7 @@ function deleteRecord(ResourceId tableId, bytes32[] memory keyTuple) internal; | `tableId` | `ResourceId` | The ID of the table to delete the record from. | | `keyTuple` | `bytes32[]` | An array representing the composite key for the record. | -### deleteRecord +#### deleteRecord Delete a record for the given table ID and key tuple. @@ -429,7 +427,7 @@ function deleteRecord(ResourceId tableId, bytes32[] memory keyTuple, FieldLayout | `keyTuple` | `bytes32[]` | An array representing the composite key for the record. | | `fieldLayout` | `FieldLayout` | The field layout for the record. | -### pushToDynamicField +#### pushToDynamicField Push data to a field at the dynamic field index in a table with the given table ID and key tuple. @@ -455,7 +453,7 @@ function pushToDynamicField( | `dynamicFieldIndex` | `uint8` | The index of the dynamic field to push data to. | | `dataToPush` | `bytes` | The data to push to the dynamic field. | -### popFromDynamicField +#### popFromDynamicField Pop data from a field at the dynamic field index in a table with the given table ID and key tuple. @@ -481,9 +479,7 @@ function popFromDynamicField( | `dynamicFieldIndex` | `uint8` | The index of the dynamic field to pop data from. | | `byteLengthToPop` | `uint256` | The byte length to pop from the dynamic field. | -### getRecord - -GET DATA +#### getRecord Get the full record (all fields, static and dynamic data) for the given table ID and key tuple. @@ -512,7 +508,7 @@ function getRecord( | `encodedLengths` | `PackedCounter` | The encoded lengths of the dynamic data of the record. | | `dynamicData` | `bytes` | The dynamic data of the record. | -### getRecord +#### getRecord Get the full record (all fields, static and dynamic data) for the given table ID and key tuple, with the given field layout. @@ -540,7 +536,7 @@ function getRecord( | `encodedLengths` | `PackedCounter` | The encoded lengths of the dynamic data of the record. | | `dynamicData` | `bytes` | The dynamic data of the record. | -### getField +#### getField Get a single field from the given table ID and key tuple. @@ -564,7 +560,7 @@ function getField(ResourceId tableId, bytes32[] memory keyTuple, uint8 fieldInde | -------- | ------- | ---------------------- | | `` | `bytes` | The data of the field. | -### getField +#### getField Get a single field from the given table ID and key tuple, with the given field layout. @@ -592,7 +588,7 @@ function getField( | -------- | ------- | ---------------------- | | `` | `bytes` | The data of the field. | -### getStaticField +#### getStaticField Get a single static field from the given table ID and key tuple, with the given value field layout. @@ -623,7 +619,7 @@ function getStaticField( | -------- | --------- | ----------------------------- | | `` | `bytes32` | The data of the static field. | -### getDynamicField +#### getDynamicField Get a single dynamic field from the given table ID and key tuple. @@ -649,7 +645,7 @@ function getDynamicField( | -------- | ------- | ------------------------------ | | `` | `bytes` | The data of the dynamic field. | -### getFieldLength +#### getFieldLength Get the byte length of a single field from the given table ID and key tuple. @@ -678,7 +674,7 @@ function getFieldLength( | -------- | --------- | ----------------------------- | | `` | `uint256` | The byte length of the field. | -### getFieldLength +#### getFieldLength Get the byte length of a single field from the given table ID and key tuple. @@ -706,7 +702,7 @@ function getFieldLength( | -------- | --------- | ----------------------------- | | `` | `uint256` | The byte length of the field. | -### getDynamicFieldLength +#### getDynamicFieldLength Get the byte length of a single dynamic field from the given table ID and key tuple. @@ -732,7 +728,7 @@ function getDynamicFieldLength( | -------- | --------- | ------------------------------------- | | `` | `uint256` | The byte length of the dynamic field. | -### getDynamicFieldSlice +#### getDynamicFieldSlice Get a byte slice (including start, excluding end) of a single dynamic field from the given table ID and key tuple. @@ -764,7 +760,7 @@ function getDynamicFieldSlice( ### Events -### Store_SetRecord +#### Store_SetRecord Emitted when a new record is set in the store. @@ -784,7 +780,7 @@ event Store_SetRecord( | `encodedLengths` | `PackedCounter` | The encoded lengths of the dynamic data of the record. | | `dynamicData` | `bytes` | The dynamic data of the record. | -### Store_SpliceStaticData +#### Store_SpliceStaticData Emitted when static data in the store is spliced. @@ -804,7 +800,7 @@ event Store_SpliceStaticData(ResourceId indexed tableId, bytes32[] keyTuple, uin | `start` | `uint48` | The start position in bytes for the splice operation. | | `data` | `bytes` | The data to write to the static data of the record at the start byte. | -### Store_SpliceDynamicData +#### Store_SpliceDynamicData Emitted when dynamic data in the store is spliced. @@ -832,7 +828,7 @@ event Store_SpliceDynamicData( | `encodedLengths` | `PackedCounter` | The encoded lengths of the dynamic data of the record. | | `data` | `bytes` | The data to insert into the dynamic data of the record at the start byte. | -### Store_DeleteRecord +#### Store_DeleteRecord Emitted when a record is deleted from the store. @@ -846,3 +842,1322 @@ event Store_DeleteRecord(ResourceId indexed tableId, bytes32[] keyTuple); | ---------- | ------------ | ------------------------------------------------------- | | `tableId` | `ResourceId` | The ID of the table where the record is deleted. | | `keyTuple` | `bytes32[]` | An array representing the composite key for the record. | + +## StoreCoreInternal + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/store/src/StoreCore.sol) + +_This library contains internal functions used by StoreCore. +They are not intended to be used directly by consumers of StoreCore._ + +### State Variables + +#### SLOT + +```solidity +bytes32 internal constant SLOT = keccak256("mud.store"); +``` + +#### DYNAMIC_DATA_SLOT + +```solidity +bytes32 internal constant DYNAMIC_DATA_SLOT = keccak256("mud.store.dynamicData"); +``` + +#### DYNAMIC_DATA_LENGTH_SLOT + +```solidity +bytes32 internal constant DYNAMIC_DATA_LENGTH_SLOT = keccak256("mud.store.dynamicDataLength"); +``` + +### Functions + +#### \_spliceDynamicData + +Splice dynamic data in the store. + +_This function checks various conditions to ensure the operation is valid. +It emits a `Store_SpliceDynamicData` event, calls `onBeforeSpliceDynamicData` hooks before actually modifying the storage, +and calls `onAfterSpliceDynamicData` hooks after modifying the storage. +It reverts with `Store_InvalidResourceType` if the table ID is not a table. +(Splicing dynamic data is not supported for offchain tables, as it requires reading the previous encoded lengths from storage.) +It reverts with `Store_InvalidSplice` if the splice total length of the field is changed but the splice is not at the end of the field. +It reverts with `Store_IndexOutOfBounds` if the start index is larger than the previous length of the field._ + +```solidity +function _spliceDynamicData( + ResourceId tableId, + bytes32[] memory keyTuple, + uint8 dynamicFieldIndex, + uint40 startWithinField, + uint40 deleteCount, + bytes memory data, + PackedCounter previousEncodedLengths +) internal; +``` + +**Parameters** + +| Name | Type | Description | +| ------------------------ | --------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `tableId` | `ResourceId` | The ID of the table to splice dynamic data. | +| `keyTuple` | `bytes32[]` | An array representing the composite key for the record. | +| `dynamicFieldIndex` | `uint8` | The index of the dynamic field to splice data, relative to the start of the dynamic fields. (Dynamic field index = field index - number of static fields) | +| `startWithinField` | `uint40` | The start index within the field for the splice operation. | +| `deleteCount` | `uint40` | The number of bytes to delete in the splice operation. | +| `data` | `bytes` | The data to insert into the dynamic data of the record at the start byte. | +| `previousEncodedLengths` | `PackedCounter` | The previous encoded lengths of the dynamic data of the record. | + +#### \_getStaticData + +Get full static data for the given table ID and key tuple, with the given length in bytes. + +```solidity +function _getStaticData( + ResourceId tableId, + bytes32[] memory keyTuple, + uint256 length +) internal view returns (bytes memory); +``` + +**Parameters** + +| Name | Type | Description | +| ---------- | ------------ | ------------------------------------------------------- | +| `tableId` | `ResourceId` | The ID of the table to get the static data from. | +| `keyTuple` | `bytes32[]` | An array representing the composite key for the record. | +| `length` | `uint256` | The length of the static data to retrieve. | + +**Returns** + +| Name | Type | Description | +| -------- | ------- | --------------------------------------------- | +| `` | `bytes` | The full static data of the specified length. | + +#### \_getStaticFieldBytes + +Get a single static field from the given table ID and key tuple, with the given value field layout. + +```solidity +function _getStaticFieldBytes( + ResourceId tableId, + bytes32[] memory keyTuple, + uint8 fieldIndex, + FieldLayout fieldLayout +) internal view returns (bytes memory); +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | ------------- | ------------------------------------------------------- | +| `tableId` | `ResourceId` | The ID of the table to get the static field from. | +| `keyTuple` | `bytes32[]` | An array representing the composite key for the record. | +| `fieldIndex` | `uint8` | The index of the field to get. | +| `fieldLayout` | `FieldLayout` | The field layout for the record. | + +**Returns** + +| Name | Type | Description | +| -------- | ------- | ---------------------------------------------------------------- | +| `` | `bytes` | The static field data as dynamic bytes in the size of the field. | + +#### \_getStaticDataLocation + +Compute the storage location based on table ID and key tuple. + +```solidity +function _getStaticDataLocation(ResourceId tableId, bytes32[] memory keyTuple) internal pure returns (uint256); +``` + +**Parameters** + +| Name | Type | Description | +| ---------- | ------------ | ------------------------------------------------------- | +| `tableId` | `ResourceId` | The ID of the table. | +| `keyTuple` | `bytes32[]` | An array representing the composite key for the record. | + +**Returns** + +| Name | Type | Description | +| -------- | --------- | -------------------------------------------------------------- | +| `` | `uint256` | The computed storage location based on table ID and key tuple. | + +#### \_getStaticDataLocation + +Compute the storage location based on table ID and a single key. + +```solidity +function _getStaticDataLocation(ResourceId tableId, bytes32 key) internal pure returns (uint256); +``` + +**Parameters** + +| Name | Type | Description | +| --------- | ------------ | ------------------------------ | +| `tableId` | `ResourceId` | The ID of the table. | +| `key` | `bytes32` | The single key for the record. | + +**Returns** + +| Name | Type | Description | +| -------- | --------- | -------------------------------------------------------- | +| `` | `uint256` | The computed storage location based on table ID and key. | + +#### \_getStaticDataOffset + +Get storage offset for the given value field layout and index. + +```solidity +function _getStaticDataOffset(FieldLayout fieldLayout, uint8 fieldIndex) internal pure returns (uint256); +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | ------------- | --------------------------------------------- | +| `fieldLayout` | `FieldLayout` | The field layout for the record. | +| `fieldIndex` | `uint8` | The index of the field to get the offset for. | + +**Returns** + +| Name | Type | Description | +| -------- | --------- | ------------------------------------------------------------ | +| `` | `uint256` | The storage offset for the specified field layout and index. | + +#### \_getDynamicDataLocation + +Compute the storage location based on table ID, key tuple, and dynamic field index. + +```solidity +function _getDynamicDataLocation( + ResourceId tableId, + bytes32[] memory keyTuple, + uint8 dynamicFieldIndex +) internal pure returns (uint256); +``` + +**Parameters** + +| Name | Type | Description | +| ------------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | +| `tableId` | `ResourceId` | The ID of the table. | +| `keyTuple` | `bytes32[]` | An array representing the composite key for the record. | +| `dynamicFieldIndex` | `uint8` | The index of the dynamic field, relative to the start of the dynamic fields. (Dynamic field index = field index - number of static fields) | + +**Returns** + +| Name | Type | Description | +| -------- | --------- | ------------------------------------------------------------------------------------ | +| `` | `uint256` | The computed storage location based on table ID, key tuple, and dynamic field index. | + +#### \_getDynamicDataLengthLocation + +Compute the storage location for the length of the dynamic data based on table ID and key tuple. + +```solidity +function _getDynamicDataLengthLocation(ResourceId tableId, bytes32[] memory keyTuple) internal pure returns (uint256); +``` + +**Parameters** + +| Name | Type | Description | +| ---------- | ------------ | ------------------------------------------------------- | +| `tableId` | `ResourceId` | The ID of the table. | +| `keyTuple` | `bytes32[]` | An array representing the composite key for the record. | + +**Returns** + +| Name | Type | Description | +| -------- | --------- | ------------------------------------------------------------------------------------------------- | +| `` | `uint256` | The computed storage location for the length of the dynamic data based on table ID and key tuple. | + +#### \_loadEncodedDynamicDataLength + +Load the encoded dynamic data length from storage for the given table ID and key tuple. + +```solidity +function _loadEncodedDynamicDataLength( + ResourceId tableId, + bytes32[] memory keyTuple +) internal view returns (PackedCounter); +``` + +**Parameters** + +| Name | Type | Description | +| ---------- | ------------ | ------------------------------------------------------- | +| `tableId` | `ResourceId` | The ID of the table. | +| `keyTuple` | `bytes32[]` | An array representing the composite key for the record. | + +**Returns** + +| Name | Type | Description | +| -------- | --------------- | ----------------------------------------------------------------------------------------- | +| `` | `PackedCounter` | The loaded encoded dynamic data length from storage for the given table ID and key tuple. | + +## StoreData + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/store/src/StoreData.sol) + +**Inherits:** +[IStoreData](/store/reference/store#istoredata), [StoreRead](/store/reference/store-core#storeread) + +This contract integrates the core storage functionalities and provides an interface for data storage. + +_This abstract contract initializes `StoreCore`, implements `storeVersion`, and read methods, +but not write methods._ + +### Functions + +#### constructor + +Constructs the StoreData contract and initializes the StoreCore. + +_Emits a HelloStore event upon creation._ + +```solidity +constructor(); +``` + +#### storeVersion + +Retrieves the version of the store. + +```solidity +function storeVersion() public pure returns (bytes32); +``` + +**Returns** + +| Name | Type | Description | +| -------- | --------- | ---------------------------------------------- | +| `` | `bytes32` | The current version of the store as a bytes32. | + +## StoreRead + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/store/src/StoreRead.sol) + +**Inherits:** +[IStoreRead](/store/reference/store#istoreread) + +_A contract that provides read operations for storage tables using `StoreCore`._ + +### Functions + +#### getFieldLayout + +Fetches the field layout for a given table. + +```solidity +function getFieldLayout(ResourceId tableId) public view virtual returns (FieldLayout fieldLayout); +``` + +**Parameters** + +| Name | Type | Description | +| --------- | ------------ | ----------------------------------------------------------- | +| `tableId` | `ResourceId` | The ID of the table for which to retrieve the field layout. | + +**Returns** + +| Name | Type | Description | +| ------------- | ------------- | -------------------------------------------- | +| `fieldLayout` | `FieldLayout` | The layout of fields in the specified table. | + +#### getValueSchema + +Retrieves the value schema for a given table. + +```solidity +function getValueSchema(ResourceId tableId) public view virtual returns (Schema valueSchema); +``` + +**Parameters** + +| Name | Type | Description | +| --------- | ------------ | -------------------- | +| `tableId` | `ResourceId` | The ID of the table. | + +**Returns** + +| Name | Type | Description | +| ------------- | -------- | --------------------------------------------- | +| `valueSchema` | `Schema` | The schema for values in the specified table. | + +#### getKeySchema + +Retrieves the key schema for a given table. + +```solidity +function getKeySchema(ResourceId tableId) public view virtual returns (Schema keySchema); +``` + +**Parameters** + +| Name | Type | Description | +| --------- | ------------ | -------------------- | +| `tableId` | `ResourceId` | The ID of the table. | + +**Returns** + +| Name | Type | Description | +| ----------- | -------- | ------------------------------------------- | +| `keySchema` | `Schema` | The schema for keys in the specified table. | + +#### getRecord + +Fetches a record from a specified table using a provided key tuple. + +```solidity +function getRecord( + ResourceId tableId, + bytes32[] calldata keyTuple +) public view virtual returns (bytes memory staticData, PackedCounter encodedLengths, bytes memory dynamicData); +``` + +**Parameters** + +| Name | Type | Description | +| ---------- | ------------ | -------------------------------------------- | +| `tableId` | `ResourceId` | The ID of the table. | +| `keyTuple` | `bytes32[]` | The tuple used as a key to fetch the record. | + +**Returns** + +| Name | Type | Description | +| ---------------- | --------------- | -------------------------------- | +| `staticData` | `bytes` | The static data of the record. | +| `encodedLengths` | `PackedCounter` | Encoded lengths of dynamic data. | +| `dynamicData` | `bytes` | The dynamic data of the record. | + +#### getRecord + +Fetches a record from a specified table using a provided key tuple and field layout. + +```solidity +function getRecord( + ResourceId tableId, + bytes32[] calldata keyTuple, + FieldLayout fieldLayout +) public view virtual returns (bytes memory staticData, PackedCounter encodedLengths, bytes memory dynamicData); +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | ------------- | -------------------------------------------- | +| `tableId` | `ResourceId` | The ID of the table. | +| `keyTuple` | `bytes32[]` | The tuple used as a key to fetch the record. | +| `fieldLayout` | `FieldLayout` | The layout of fields to retrieve. | + +**Returns** + +| Name | Type | Description | +| ---------------- | --------------- | -------------------------------- | +| `staticData` | `bytes` | The static data of the record. | +| `encodedLengths` | `PackedCounter` | Encoded lengths of dynamic data. | +| `dynamicData` | `bytes` | The dynamic data of the record. | + +#### getField + +Retrieves data for a specified field in a record. + +_This overload loads the FieldLayout from storage. If the table's FieldLayout is known +to the caller, it should be passed in to the other overload to avoid the storage read._ + +```solidity +function getField( + ResourceId tableId, + bytes32[] calldata keyTuple, + uint8 fieldIndex +) public view virtual returns (bytes memory data); +``` + +**Parameters** + +| Name | Type | Description | +| ------------ | ------------ | ------------------------------------------- | +| `tableId` | `ResourceId` | The ID of the table. | +| `keyTuple` | `bytes32[]` | The tuple used as a key to fetch the field. | +| `fieldIndex` | `uint8` | Index of the field to retrieve. | + +**Returns** + +| Name | Type | Description | +| ------ | ------- | -------------------------------- | +| `data` | `bytes` | The data of the specified field. | + +#### getField + +Retrieves data for a specified field in a record. + +```solidity +function getField( + ResourceId tableId, + bytes32[] calldata keyTuple, + uint8 fieldIndex, + FieldLayout fieldLayout +) public view virtual returns (bytes memory data); +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | ------------- | ------------------------------------------- | +| `tableId` | `ResourceId` | The ID of the table. | +| `keyTuple` | `bytes32[]` | The tuple used as a key to fetch the field. | +| `fieldIndex` | `uint8` | Index of the field to retrieve. | +| `fieldLayout` | `FieldLayout` | The layout of fields for the retrieval. | + +**Returns** + +| Name | Type | Description | +| ------ | ------- | -------------------------------- | +| `data` | `bytes` | The data of the specified field. | + +#### getStaticField + +Retrieves data for a specific static (fixed length) field in a record. + +```solidity +function getStaticField( + ResourceId tableId, + bytes32[] calldata keyTuple, + uint8 fieldIndex, + FieldLayout fieldLayout +) public view virtual returns (bytes32 data); +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | ------------- | -------------------------------------------------- | +| `tableId` | `ResourceId` | The ID of the table. | +| `keyTuple` | `bytes32[]` | The tuple used as a key to fetch the static field. | +| `fieldIndex` | `uint8` | Index of the static field to retrieve. | +| `fieldLayout` | `FieldLayout` | The layout of fields for the retrieval. | + +**Returns** + +| Name | Type | Description | +| ------ | --------- | --------------------------------------- | +| `data` | `bytes32` | The static data of the specified field. | + +#### getDynamicField + +Retrieves data for a specific dynamic (variable length) field in a record. + +```solidity +function getDynamicField( + ResourceId tableId, + bytes32[] calldata keyTuple, + uint8 dynamicFieldIndex +) public view virtual returns (bytes memory data); +``` + +**Parameters** + +| Name | Type | Description | +| ------------------- | ------------ | --------------------------------------------------- | +| `tableId` | `ResourceId` | The ID of the table. | +| `keyTuple` | `bytes32[]` | The tuple used as a key to fetch the dynamic field. | +| `dynamicFieldIndex` | `uint8` | Index of the dynamic field to retrieve. | + +**Returns** + +| Name | Type | Description | +| ------ | ------- | ---------------------------------------- | +| `data` | `bytes` | The dynamic data of the specified field. | + +#### getFieldLength + +Calculates the length of a specified field in a record. + +_This overload loads the FieldLayout from storage. If the table's FieldLayout is known +to the caller, it should be passed in to the other overload to avoid the storage read._ + +```solidity +function getFieldLength( + ResourceId tableId, + bytes32[] memory keyTuple, + uint8 fieldIndex +) public view virtual returns (uint256); +``` + +**Parameters** + +| Name | Type | Description | +| ------------ | ------------ | ------------------------------ | +| `tableId` | `ResourceId` | The ID of the table. | +| `keyTuple` | `bytes32[]` | The tuple used as a key. | +| `fieldIndex` | `uint8` | Index of the field to measure. | + +**Returns** + +| Name | Type | Description | +| -------- | --------- | ---------------------------------- | +| `` | `uint256` | The length of the specified field. | + +#### getFieldLength + +Calculates the length of a specified field in a record. + +```solidity +function getFieldLength( + ResourceId tableId, + bytes32[] memory keyTuple, + uint8 fieldIndex, + FieldLayout fieldLayout +) public view virtual returns (uint256); +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | ------------- | ------------------------------------- | +| `tableId` | `ResourceId` | The ID of the table. | +| `keyTuple` | `bytes32[]` | The tuple used as a key. | +| `fieldIndex` | `uint8` | Index of the field to measure. | +| `fieldLayout` | `FieldLayout` | The layout of fields for measurement. | + +**Returns** + +| Name | Type | Description | +| -------- | --------- | ---------------------------------- | +| `` | `uint256` | The length of the specified field. | + +#### getDynamicFieldLength + +Calculates the length of a specified dynamic (variable length) field in a record. + +```solidity +function getDynamicFieldLength( + ResourceId tableId, + bytes32[] memory keyTuple, + uint8 dynamicFieldIndex +) public view virtual returns (uint256); +``` + +**Parameters** + +| Name | Type | Description | +| ------------------- | ------------ | -------------------------------------- | +| `tableId` | `ResourceId` | The ID of the table. | +| `keyTuple` | `bytes32[]` | The tuple used as a key. | +| `dynamicFieldIndex` | `uint8` | Index of the dynamic field to measure. | + +**Returns** + +| Name | Type | Description | +| -------- | --------- | ------------------------------------------ | +| `` | `uint256` | The length of the specified dynamic field. | + +#### getDynamicFieldSlice + +Retrieves a slice of a dynamic (variable length) field. + +```solidity +function getDynamicFieldSlice( + ResourceId tableId, + bytes32[] memory keyTuple, + uint8 dynamicFieldIndex, + uint256 start, + uint256 end +) public view virtual returns (bytes memory); +``` + +**Parameters** + +| Name | Type | Description | +| ------------------- | ------------ | --------------------------------------------------------- | +| `tableId` | `ResourceId` | The ID of the table. | +| `keyTuple` | `bytes32[]` | The tuple used as a key to fetch the dynamic field slice. | +| `dynamicFieldIndex` | `uint8` | Index of the dynamic field to slice. | +| `start` | `uint256` | The starting position of the slice. | +| `end` | `uint256` | The ending position of the slice. | + +**Returns** + +| Name | Type | Description | +| -------- | ------- | ------------------------------------------------- | +| `` | `bytes` | The sliced data from the specified dynamic field. | + +## StoreSwitch + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/store/src/StoreSwitch.sol) + +This library serves as an interface switch to interact with the store, +either by directing calls to itself or to a designated external store. + +_The primary purpose is to abstract the storage details, such that the +calling function doesn't need to know if it's interacting with its own +storage or with an external contract's storage._ + +### State Variables + +#### STORAGE_SLOT + +_Internal constant representing the storage slot used by the library._ + +```solidity +bytes32 private constant STORAGE_SLOT = keccak256("mud.store.storage.StoreSwitch"); +``` + +### Functions + +#### \_layout + +Gets the storage layout. + +```solidity +function _layout() private pure returns (StorageSlotLayout storage layout); +``` + +**Returns** + +| Name | Type | Description | +| -------- | ------------------- | --------------------------- | +| `layout` | `StorageSlotLayout` | The current storage layout. | + +#### getStoreAddress + +Fetch the store address to be used for data operations. +If \_storeAddress is zero, it means that it's uninitialized and +therefore it's the default (msg.sender). + +```solidity +function getStoreAddress() internal view returns (address); +``` + +**Returns** + +| Name | Type | Description | +| -------- | --------- | ------------------------------------------------------- | +| `` | `address` | Address of the store, or `msg.sender` if uninitialized. | + +#### setStoreAddress + +Set the store address for subsequent operations. + +_If it stays uninitialized, StoreSwitch falls back to calling store methods on msg.sender._ + +```solidity +function setStoreAddress(address _storeAddress) internal; +``` + +**Parameters** + +| Name | Type | Description | +| --------------- | --------- | ------------------------------------------- | +| `_storeAddress` | `address` | The address of the external store contract. | + +#### registerStoreHook + +Register a store hook for a particular table. + +```solidity +function registerStoreHook(ResourceId tableId, IStoreHook hookAddress, uint8 enabledHooksBitmap) internal; +``` + +**Parameters** + +| Name | Type | Description | +| -------------------- | ------------ | ------------------------------------------------------------ | +| `tableId` | `ResourceId` | Unique identifier of the table. | +| `hookAddress` | `IStoreHook` | Address of the hook contract. | +| `enabledHooksBitmap` | `uint8` | Bitmap representing the hooks which this contract overrides. | + +#### unregisterStoreHook + +Unregister a previously registered store hook. + +```solidity +function unregisterStoreHook(ResourceId tableId, IStoreHook hookAddress) internal; +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | ------------ | ------------------------------------------------ | +| `tableId` | `ResourceId` | Unique identifier of the table. | +| `hookAddress` | `IStoreHook` | Address of the hook contract to be unregistered. | + +#### getFieldLayout + +_Fetches the field layout for a specified table._ + +```solidity +function getFieldLayout(ResourceId tableId) internal view returns (FieldLayout fieldLayout); +``` + +**Parameters** + +| Name | Type | Description | +| --------- | ------------ | ----------------------------------------------------------- | +| `tableId` | `ResourceId` | The ID of the table for which to retrieve the field layout. | + +**Returns** + +| Name | Type | Description | +| ------------- | ------------- | ------------------------------------------------ | +| `fieldLayout` | `FieldLayout` | The layout of the fields in the specified table. | + +#### getValueSchema + +_Retrieves the value schema for a specified table._ + +```solidity +function getValueSchema(ResourceId tableId) internal view returns (Schema valueSchema); +``` + +**Parameters** + +| Name | Type | Description | +| --------- | ------------ | ----------------------------------------------------------- | +| `tableId` | `ResourceId` | The ID of the table for which to retrieve the value schema. | + +**Returns** + +| Name | Type | Description | +| ------------- | -------- | --------------------------------------------- | +| `valueSchema` | `Schema` | The schema for values in the specified table. | + +#### getKeySchema + +_Retrieves the key schema for a specified table._ + +```solidity +function getKeySchema(ResourceId tableId) internal view returns (Schema keySchema); +``` + +**Parameters** + +| Name | Type | Description | +| --------- | ------------ | --------------------------------------------------------- | +| `tableId` | `ResourceId` | The ID of the table for which to retrieve the key schema. | + +**Returns** + +| Name | Type | Description | +| ----------- | -------- | ------------------------------------------- | +| `keySchema` | `Schema` | The schema for keys in the specified table. | + +#### registerTable + +_Registers a table with specified configurations._ + +```solidity +function registerTable( + ResourceId tableId, + FieldLayout fieldLayout, + Schema keySchema, + Schema valueSchema, + string[] memory keyNames, + string[] memory fieldNames +) internal; +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | ------------- | --------------------------------------- | +| `tableId` | `ResourceId` | The ID of the table to register. | +| `fieldLayout` | `FieldLayout` | The layout of the fields for the table. | +| `keySchema` | `Schema` | The schema for keys in the table. | +| `valueSchema` | `Schema` | The schema for values in the table. | +| `keyNames` | `string[]` | Names of keys in the table. | +| `fieldNames` | `string[]` | Names of fields in the table. | + +#### setRecord + +_Sets a record in the store._ + +```solidity +function setRecord( + ResourceId tableId, + bytes32[] memory keyTuple, + bytes memory staticData, + PackedCounter encodedLengths, + bytes memory dynamicData +) internal; +``` + +**Parameters** + +| Name | Type | Description | +| ---------------- | --------------- | --------------------------------- | +| `tableId` | `ResourceId` | The table's ID. | +| `keyTuple` | `bytes32[]` | Array of key values. | +| `staticData` | `bytes` | Fixed-length fields data. | +| `encodedLengths` | `PackedCounter` | Encoded lengths for dynamic data. | +| `dynamicData` | `bytes` | Dynamic-length fields data. | + +#### spliceStaticData + +_Splices the static (fixed length) data for a given table ID and key tuple, starting at a specific point._ + +```solidity +function spliceStaticData(ResourceId tableId, bytes32[] memory keyTuple, uint48 start, bytes memory data) internal; +``` + +**Parameters** + +| Name | Type | Description | +| ---------- | ------------ | ----------------------------------------------------- | +| `tableId` | `ResourceId` | The ID of the resource table. | +| `keyTuple` | `bytes32[]` | An array of bytes32 keys identifying the data record. | +| `start` | `uint48` | The position to begin splicing. | +| `data` | `bytes` | The data to splice into the record. | + +#### spliceDynamicData + +_Splices the dynamic data for a given table ID, key tuple, and dynamic field index._ + +```solidity +function spliceDynamicData( + ResourceId tableId, + bytes32[] memory keyTuple, + uint8 dynamicFieldIndex, + uint40 startWithinField, + uint40 deleteCount, + bytes memory data +) internal; +``` + +**Parameters** + +| Name | Type | Description | +| ------------------- | ------------ | ------------------------------------------------------------- | +| `tableId` | `ResourceId` | The ID of the resource table. | +| `keyTuple` | `bytes32[]` | An array of bytes32 keys identifying the data record. | +| `dynamicFieldIndex` | `uint8` | The index of the dynamic field to splice. | +| `startWithinField` | `uint40` | The position within the dynamic field to start splicing. | +| `deleteCount` | `uint40` | The number of bytes to delete starting from the splice point. | +| `data` | `bytes` | The data to splice into the dynamic field. | + +#### setField + +_Sets the data for a specific field in a record identified by table ID and key tuple._ + +```solidity +function setField(ResourceId tableId, bytes32[] memory keyTuple, uint8 fieldIndex, bytes memory data) internal; +``` + +**Parameters** + +| Name | Type | Description | +| ------------ | ------------ | ----------------------------------------------------- | +| `tableId` | `ResourceId` | The ID of the resource table. | +| `keyTuple` | `bytes32[]` | An array of bytes32 keys identifying the data record. | +| `fieldIndex` | `uint8` | The index of the field to set. | +| `data` | `bytes` | The data to set for the field. | + +#### setField + +_Sets the data for a specific field in a record, considering a specific field layout._ + +```solidity +function setField( + ResourceId tableId, + bytes32[] memory keyTuple, + uint8 fieldIndex, + bytes memory data, + FieldLayout fieldLayout +) internal; +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | ------------- | ----------------------------------------------------- | +| `tableId` | `ResourceId` | The ID of the resource table. | +| `keyTuple` | `bytes32[]` | An array of bytes32 keys identifying the data record. | +| `fieldIndex` | `uint8` | The index of the field to set. | +| `data` | `bytes` | The data to set for the field. | +| `fieldLayout` | `FieldLayout` | The layout structure of the field. | + +#### setStaticField + +_Sets the data for a specific static (fixed length) field in a record, considering a specific field layout._ + +```solidity +function setStaticField( + ResourceId tableId, + bytes32[] memory keyTuple, + uint8 fieldIndex, + bytes memory data, + FieldLayout fieldLayout +) internal; +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | ------------- | ----------------------------------------------------- | +| `tableId` | `ResourceId` | The ID of the resource table. | +| `keyTuple` | `bytes32[]` | An array of bytes32 keys identifying the data record. | +| `fieldIndex` | `uint8` | The index of the field to set. | +| `data` | `bytes` | The data to set for the field. | +| `fieldLayout` | `FieldLayout` | The layout structure of the field. | + +#### setDynamicField + +_Sets the value of a specific dynamic (variable-length) field in a record._ + +```solidity +function setDynamicField( + ResourceId tableId, + bytes32[] memory keyTuple, + uint8 dynamicFieldIndex, + bytes memory data +) internal; +``` + +**Parameters** + +| Name | Type | Description | +| ------------------- | ------------ | ------------------------------------------------ | +| `tableId` | `ResourceId` | The ID of the table to which the record belongs. | +| `keyTuple` | `bytes32[]` | An array representing the key for the record. | +| `dynamicFieldIndex` | `uint8` | The index of the dynamic field to set. | +| `data` | `bytes` | The data to set for the field. | + +#### pushToDynamicField + +_Appends data to a specific dynamic (variable length) field of a record._ + +```solidity +function pushToDynamicField( + ResourceId tableId, + bytes32[] memory keyTuple, + uint8 dynamicFieldIndex, + bytes memory dataToPush +) internal; +``` + +**Parameters** + +| Name | Type | Description | +| ------------------- | ------------ | ------------------------------------------------ | +| `tableId` | `ResourceId` | The ID of the table to which the record belongs. | +| `keyTuple` | `bytes32[]` | An array representing the key for the record. | +| `dynamicFieldIndex` | `uint8` | The index of the dynamic field. | +| `dataToPush` | `bytes` | The data to append to the field. | + +#### popFromDynamicField + +_Removes data from the end of a specific dynamic (variable length) field of a record._ + +```solidity +function popFromDynamicField( + ResourceId tableId, + bytes32[] memory keyTuple, + uint8 dynamicFieldIndex, + uint256 byteLengthToPop +) internal; +``` + +**Parameters** + +| Name | Type | Description | +| ------------------- | ------------ | -------------------------------------------------------- | +| `tableId` | `ResourceId` | The ID of the table to which the record belongs. | +| `keyTuple` | `bytes32[]` | An array representing the key for the record. | +| `dynamicFieldIndex` | `uint8` | The index of the dynamic field. | +| `byteLengthToPop` | `uint256` | The number of bytes to remove from the end of the field. | + +#### deleteRecord + +_Deletes a record from a table._ + +```solidity +function deleteRecord(ResourceId tableId, bytes32[] memory keyTuple) internal; +``` + +**Parameters** + +| Name | Type | Description | +| ---------- | ------------ | ------------------------------------------------ | +| `tableId` | `ResourceId` | The ID of the table to which the record belongs. | +| `keyTuple` | `bytes32[]` | An array representing the key for the record. | + +#### getRecord + +_Retrieves a record from a table._ + +```solidity +function getRecord( + ResourceId tableId, + bytes32[] memory keyTuple +) internal view returns (bytes memory, PackedCounter, bytes memory); +``` + +**Parameters** + +| Name | Type | Description | +| ---------- | ------------ | ------------------------------------------------ | +| `tableId` | `ResourceId` | The ID of the table to which the record belongs. | +| `keyTuple` | `bytes32[]` | An array representing the key for the record. | + +**Returns** + +| Name | Type | Description | +| -------- | --------------- | ----------------------------------------------- | +| `` | `bytes` | staticData The static data of the record. | +| `` | `PackedCounter` | encodedLengths Encoded lengths of dynamic data. | +| `` | `bytes` | dynamicData The dynamic data of the record. | + +#### getRecord + +_Retrieves a record from a table with a specific layout._ + +```solidity +function getRecord( + ResourceId tableId, + bytes32[] memory keyTuple, + FieldLayout fieldLayout +) internal view returns (bytes memory, PackedCounter, bytes memory); +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | ------------- | ------------------------------------------------ | +| `tableId` | `ResourceId` | The ID of the table to which the record belongs. | +| `keyTuple` | `bytes32[]` | An array representing the key for the record. | +| `fieldLayout` | `FieldLayout` | The layout of the fields in the record. | + +**Returns** + +| Name | Type | Description | +| -------- | --------------- | ----------------------------------------------- | +| `` | `bytes` | staticData The static data of the record. | +| `` | `PackedCounter` | encodedLengths Encoded lengths of dynamic data. | +| `` | `bytes` | dynamicData The dynamic data of the record. | + +#### getField + +_Retrieves a specific field from a record._ + +```solidity +function getField(ResourceId tableId, bytes32[] memory keyTuple, uint8 fieldIndex) internal view returns (bytes memory); +``` + +**Parameters** + +| Name | Type | Description | +| ------------ | ------------ | ------------------------------------------------ | +| `tableId` | `ResourceId` | The ID of the table to which the record belongs. | +| `keyTuple` | `bytes32[]` | An array representing the key for the record. | +| `fieldIndex` | `uint8` | The index of the field to retrieve. | + +**Returns** + +| Name | Type | Description | +| -------- | ------- | ---------------------------------------- | +| `` | `bytes` | Returns the data of the specified field. | + +#### getField + +_Retrieves a specific field from a record with a given layout._ + +```solidity +function getField( + ResourceId tableId, + bytes32[] memory keyTuple, + uint8 fieldIndex, + FieldLayout fieldLayout +) internal view returns (bytes memory); +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | ------------- | ------------------------------------------------ | +| `tableId` | `ResourceId` | The ID of the table to which the record belongs. | +| `keyTuple` | `bytes32[]` | An array representing the key for the record. | +| `fieldIndex` | `uint8` | The index of the field to retrieve. | +| `fieldLayout` | `FieldLayout` | The layout of the field being retrieved. | + +**Returns** + +| Name | Type | Description | +| -------- | ------- | ---------------------------------------- | +| `` | `bytes` | Returns the data of the specified field. | + +#### getStaticField + +_Retrieves a specific static (fixed length) field from a record with a given layout._ + +```solidity +function getStaticField( + ResourceId tableId, + bytes32[] memory keyTuple, + uint8 fieldIndex, + FieldLayout fieldLayout +) internal view returns (bytes32); +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | ------------- | ------------------------------------------------ | +| `tableId` | `ResourceId` | The ID of the table to which the record belongs. | +| `keyTuple` | `bytes32[]` | An array representing the key for the record. | +| `fieldIndex` | `uint8` | The index of the static field to retrieve. | +| `fieldLayout` | `FieldLayout` | The layout of the static field being retrieved. | + +**Returns** + +| Name | Type | Description | +| -------- | --------- | ----------------------------------------------- | +| `` | `bytes32` | Returns the data of the specified static field. | + +#### getDynamicField + +_Retrieves a specific dynamic (variable length) field from a record._ + +```solidity +function getDynamicField( + ResourceId tableId, + bytes32[] memory keyTuple, + uint8 dynamicFieldIndex +) internal view returns (bytes memory); +``` + +**Parameters** + +| Name | Type | Description | +| ------------------- | ------------ | ------------------------------------------------ | +| `tableId` | `ResourceId` | The ID of the table to which the record belongs. | +| `keyTuple` | `bytes32[]` | An array representing the key for the record. | +| `dynamicFieldIndex` | `uint8` | The index of the dynamic field to retrieve. | + +**Returns** + +| Name | Type | Description | +| -------- | ------- | ------------------------------------------------ | +| `` | `bytes` | Returns the data of the specified dynamic field. | + +#### getFieldLength + +_Retrieves the length of a specific field in a record._ + +```solidity +function getFieldLength( + ResourceId tableId, + bytes32[] memory keyTuple, + uint8 fieldIndex +) internal view returns (uint256); +``` + +**Parameters** + +| Name | Type | Description | +| ------------ | ------------ | ------------------------------------------------------- | +| `tableId` | `ResourceId` | The ID of the table to which the record belongs. | +| `keyTuple` | `bytes32[]` | An array representing the key for the record. | +| `fieldIndex` | `uint8` | The index of the field whose length is to be retrieved. | + +**Returns** + +| Name | Type | Description | +| -------- | --------- | ------------------------------------------ | +| `` | `uint256` | Returns the length of the specified field. | + +#### getFieldLength + +_Retrieves the length of a specific field in a record with a given layout._ + +```solidity +function getFieldLength( + ResourceId tableId, + bytes32[] memory keyTuple, + uint8 fieldIndex, + FieldLayout fieldLayout +) internal view returns (uint256); +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | ------------- | -------------------------------------------------------- | +| `tableId` | `ResourceId` | The ID of the table to which the record belongs. | +| `keyTuple` | `bytes32[]` | An array representing the key for the record. | +| `fieldIndex` | `uint8` | The index of the field whose length is to be retrieved. | +| `fieldLayout` | `FieldLayout` | The layout of the field whose length is to be retrieved. | + +**Returns** + +| Name | Type | Description | +| -------- | --------- | ------------------------------------------ | +| `` | `uint256` | Returns the length of the specified field. | + +#### getDynamicFieldLength + +_Retrieves the length of a specific dynamic (variable length) field in a record._ + +```solidity +function getDynamicFieldLength( + ResourceId tableId, + bytes32[] memory keyTuple, + uint8 dynamicFieldIndex +) internal view returns (uint256); +``` + +**Parameters** + +| Name | Type | Description | +| ------------------- | ------------ | --------------------------------------------------------------- | +| `tableId` | `ResourceId` | The ID of the table to which the record belongs. | +| `keyTuple` | `bytes32[]` | An array representing the key for the record. | +| `dynamicFieldIndex` | `uint8` | The index of the dynamic field whose length is to be retrieved. | + +**Returns** + +| Name | Type | Description | +| -------- | --------- | -------------------------------------------------- | +| `` | `uint256` | Returns the length of the specified dynamic field. | + +#### getDynamicFieldSlice + +_Retrieves a slice of a dynamic (variable length) field from a record._ + +```solidity +function getDynamicFieldSlice( + ResourceId tableId, + bytes32[] memory keyTuple, + uint8 dynamicFieldIndex, + uint256 start, + uint256 end +) internal view returns (bytes memory); +``` + +**Parameters** + +| Name | Type | Description | +| ------------------- | ------------ | ----------------------------------------------------------- | +| `tableId` | `ResourceId` | The ID of the table to which the record belongs. | +| `keyTuple` | `bytes32[]` | An array representing the key for the record. | +| `dynamicFieldIndex` | `uint8` | The index of the dynamic field from which to get the slice. | +| `start` | `uint256` | The starting index of the slice. | +| `end` | `uint256` | The ending index of the slice. | + +**Returns** + +| Name | Type | Description | +| -------- | ------- | --------------------------------------------------------- | +| `` | `bytes` | Returns the sliced data from the specified dynamic field. | + +### Structs + +#### StorageSlotLayout + +_Represents the layout of the storage slot (currently just the address)_ + +```solidity +struct StorageSlotLayout { + address storeAddress; +} +``` diff --git a/docs/pages/store/reference/store-hook.mdx b/docs/pages/store/reference/store-hook.mdx index 62c04a9c15..bce6a9c9ca 100644 --- a/docs/pages/store/reference/store-hook.mdx +++ b/docs/pages/store/reference/store-hook.mdx @@ -4,9 +4,12 @@ [Git Source](https://github.com/latticexyz/mud/blob/main/packages/store/src/IStoreHook.sol) +**Inherits:** +[IERC165](/world/reference/internal/erc165-external#ierc165) + ### Functions -### onBeforeSetRecord +#### onBeforeSetRecord Called before setting a record in the store. @@ -32,7 +35,7 @@ function onBeforeSetRecord( | `dynamicData` | `bytes` | The dynamic data of the record. | | `fieldLayout` | `FieldLayout` | The layout of the field, see FieldLayout.sol. | -### onAfterSetRecord +#### onAfterSetRecord Called after setting a record in the store. @@ -58,7 +61,7 @@ function onAfterSetRecord( | `dynamicData` | `bytes` | The dynamic data of the record. | | `fieldLayout` | `FieldLayout` | The layout of the field, see FieldLayout.sol. | -### onBeforeSpliceStaticData +#### onBeforeSpliceStaticData Called before splicing static data in the store. @@ -83,7 +86,7 @@ function onBeforeSpliceStaticData( | `start` | `uint48` | The start byte position for splicing. | | `data` | `bytes` | The data to be written to the static data of the record at the start byte. | -### onAfterSpliceStaticData +#### onAfterSpliceStaticData Called after splicing static data in the store. @@ -108,7 +111,7 @@ function onAfterSpliceStaticData( | `start` | `uint48` | The start byte position for splicing. | | `data` | `bytes` | The data written to the static data of the record at the start byte. | -### onBeforeSpliceDynamicData +#### onBeforeSpliceDynamicData Called before splicing dynamic data in the store. @@ -139,7 +142,7 @@ function onBeforeSpliceDynamicData( | `encodedLengths` | `PackedCounter` | The encoded lengths of the dynamic data of the record. | | `data` | `bytes` | The data to be inserted into the dynamic data of the record at the start byte. | -### onAfterSpliceDynamicData +#### onAfterSpliceDynamicData Called after splicing dynamic data in the store. @@ -170,7 +173,7 @@ function onAfterSpliceDynamicData( | `encodedLengths` | `PackedCounter` | The encoded lengths of the dynamic data of the record. | | `data` | `bytes` | The data inserted into the dynamic data of the record at the start byte. | -### onBeforeDeleteRecord +#### onBeforeDeleteRecord Called before deleting a record from the store. @@ -186,7 +189,7 @@ function onBeforeDeleteRecord(ResourceId tableId, bytes32[] memory keyTuple, Fie | `keyTuple` | `bytes32[]` | An array representing the composite key for the record. | | `fieldLayout` | `FieldLayout` | The layout of the field, see FieldLayout.sol. | -### onAfterDeleteRecord +#### onAfterDeleteRecord Called after deleting a record from the store. @@ -204,7 +207,7 @@ function onAfterDeleteRecord(ResourceId tableId, bytes32[] memory keyTuple, Fiel ### Errors -### StoreHook_NotImplemented +#### StoreHook_NotImplemented Error emitted when a function is not implemented. diff --git a/docs/pages/store/reference/store.mdx b/docs/pages/store/reference/store.mdx index 115c043b7c..20bcc354bf 100644 --- a/docs/pages/store/reference/store.mdx +++ b/docs/pages/store/reference/store.mdx @@ -5,7 +5,7 @@ [Git Source](https://github.com/latticexyz/mud/blob/main/packages/store/src/IStore.sol) **Inherits:** -[IStoreData](#istoredata), [IStoreRegistration](#istoreregistration), [IStoreErrors](#istoreerrors) +[IStoreData](/store/reference/store#istoredata), [IStoreRegistration](/store/reference/store#istoreregistration), [IStoreErrors](/store/reference/store#istoreerrors) ## IStoreEvents @@ -13,7 +13,7 @@ ### Events -### Store_SetRecord +#### Store_SetRecord Emitted when a new record is set in the store. @@ -33,7 +33,7 @@ event Store_SetRecord( | `encodedLengths` | `PackedCounter` | The encoded lengths of the dynamic data of the record. | | `dynamicData` | `bytes` | The dynamic data of the record. | -### Store_SpliceStaticData +#### Store_SpliceStaticData Emitted when static data in the store is spliced. @@ -53,7 +53,7 @@ event Store_SpliceStaticData(ResourceId indexed tableId, bytes32[] keyTuple, uin | `start` | `uint48` | The start position in bytes for the splice operation. | | `data` | `bytes` | The data to write to the static data of the record at the start byte. | -### Store_SpliceDynamicData +#### Store_SpliceDynamicData Emitted when dynamic data in the store is spliced. @@ -81,7 +81,7 @@ event Store_SpliceDynamicData( | `encodedLengths` | `PackedCounter` | The encoded lengths of the dynamic data of the record. | | `data` | `bytes` | The data to insert into the dynamic data of the record at the start byte. | -### Store_DeleteRecord +#### Store_DeleteRecord Emitted when a record is deleted from the store. @@ -102,73 +102,73 @@ event Store_DeleteRecord(ResourceId indexed tableId, bytes32[] keyTuple); ### Errors -### Store_TableAlreadyExists +#### Store_TableAlreadyExists ```solidity error Store_TableAlreadyExists(ResourceId tableId, string tableIdString); ``` -### Store_TableNotFound +#### Store_TableNotFound ```solidity error Store_TableNotFound(ResourceId tableId, string tableIdString); ``` -### Store_InvalidResourceType +#### Store_InvalidResourceType ```solidity error Store_InvalidResourceType(bytes2 expected, ResourceId resourceId, string resourceIdString); ``` -### Store_InvalidStaticDataLength +#### Store_InvalidStaticDataLength ```solidity error Store_InvalidStaticDataLength(uint256 expected, uint256 received); ``` -### Store_InvalidBounds +#### Store_InvalidBounds ```solidity error Store_InvalidBounds(uint256 start, uint256 end); ``` -### Store_IndexOutOfBounds +#### Store_IndexOutOfBounds ```solidity error Store_IndexOutOfBounds(uint256 length, uint256 accessedIndex); ``` -### Store_InvalidKeyNamesLength +#### Store_InvalidKeyNamesLength ```solidity error Store_InvalidKeyNamesLength(uint256 expected, uint256 received); ``` -### Store_InvalidFieldNamesLength +#### Store_InvalidFieldNamesLength ```solidity error Store_InvalidFieldNamesLength(uint256 expected, uint256 received); ``` -### Store_InvalidValueSchemaLength +#### Store_InvalidValueSchemaLength ```solidity error Store_InvalidValueSchemaLength(uint256 expected, uint256 received); ``` -### Store_InvalidValueSchemaStaticLength +#### Store_InvalidValueSchemaStaticLength ```solidity error Store_InvalidValueSchemaStaticLength(uint256 expected, uint256 received); ``` -### Store_InvalidValueSchemaDynamicLength +#### Store_InvalidValueSchemaDynamicLength ```solidity error Store_InvalidValueSchemaDynamicLength(uint256 expected, uint256 received); ``` -### Store_InvalidSplice +#### Store_InvalidSplice ```solidity error Store_InvalidSplice(uint40 startWithinField, uint40 deleteCount, uint40 fieldLength); @@ -179,7 +179,7 @@ error Store_InvalidSplice(uint40 startWithinField, uint40 deleteCount, uint40 fi [Git Source](https://github.com/latticexyz/mud/blob/main/packages/store/src/IStoreData.sol) **Inherits:** -[IStoreRead](#istoreread), [IStoreWrite](#istorewrite) +[IStoreRead](/store/reference/store#istoreread), [IStoreWrite](/store/reference/store#istorewrite) The IStoreData interface includes methods for reading and writing table values. @@ -187,7 +187,7 @@ _These methods are frequently invoked during runtime, so it is essential to prio ### Functions -### storeVersion +#### storeVersion Returns the version of the Store contract. @@ -203,7 +203,7 @@ function storeVersion() external view returns (bytes32 version); ### Events -### HelloStore +#### HelloStore Emitted when the store is initialized. @@ -223,25 +223,25 @@ event HelloStore(bytes32 indexed storeVersion); ### Functions -### getFieldLayout +#### getFieldLayout ```solidity function getFieldLayout(ResourceId tableId) external view returns (FieldLayout fieldLayout); ``` -### getValueSchema +#### getValueSchema ```solidity function getValueSchema(ResourceId tableId) external view returns (Schema valueSchema); ``` -### getKeySchema +#### getKeySchema ```solidity function getKeySchema(ResourceId tableId) external view returns (Schema keySchema); ``` -### getRecord +#### getRecord Get full record (all fields, static and dynamic data) for the given tableId and key tuple, loading the field layout from storage @@ -252,7 +252,7 @@ function getRecord( ) external view returns (bytes memory staticData, PackedCounter encodedLengths, bytes memory dynamicData); ``` -### getRecord +#### getRecord Get full record (all fields, static and dynamic data) for the given tableId and key tuple, with the given field layout @@ -264,7 +264,7 @@ function getRecord( ) external view returns (bytes memory staticData, PackedCounter encodedLengths, bytes memory dynamicData); ``` -### getField +#### getField Get a single field from the given tableId and key tuple, loading the field layout from storage @@ -276,7 +276,7 @@ function getField( ) external view returns (bytes memory data); ``` -### getField +#### getField Get a single field from the given tableId and key tuple, with the given field layout @@ -289,7 +289,7 @@ function getField( ) external view returns (bytes memory data); ``` -### getStaticField +#### getStaticField Get a single static field from the given tableId and key tuple, with the given value field layout. Note: the field value is left-aligned in the returned bytes32, the rest of the word is not zeroed out. @@ -304,7 +304,7 @@ function getStaticField( ) external view returns (bytes32); ``` -### getDynamicField +#### getDynamicField Get a single dynamic field from the given tableId and key tuple at the given dynamic field index. (Dynamic field index = field index - number of static fields) @@ -317,7 +317,7 @@ function getDynamicField( ) external view returns (bytes memory); ``` -### getFieldLength +#### getFieldLength Get the byte length of a single field from the given tableId and key tuple, loading the field layout from storage @@ -329,7 +329,7 @@ function getFieldLength( ) external view returns (uint256); ``` -### getFieldLength +#### getFieldLength Get the byte length of a single field from the given tableId and key tuple, with the given value field layout @@ -342,7 +342,7 @@ function getFieldLength( ) external view returns (uint256); ``` -### getDynamicFieldLength +#### getDynamicFieldLength Get the byte length of a single dynamic field from the given tableId and key tuple @@ -354,7 +354,7 @@ function getDynamicFieldLength( ) external view returns (uint256); ``` -### getDynamicFieldSlice +#### getDynamicFieldSlice Get a byte slice (including start, excluding end) of a single dynamic field from the given tableId and key tuple, with the given value field layout. The slice is unchecked and will return invalid data if `start`:`end` overflow. @@ -374,11 +374,11 @@ function getDynamicFieldSlice( [Git Source](https://github.com/latticexyz/mud/blob/main/packages/store/src/IStoreWrite.sol) **Inherits:** -[IStoreEvents](#istoreevents) +[IStoreEvents](/store/reference/store#istoreevents) ### Functions -### setRecord +#### setRecord ```solidity function setRecord( @@ -390,13 +390,13 @@ function setRecord( ) external; ``` -### spliceStaticData +#### spliceStaticData ```solidity function spliceStaticData(ResourceId tableId, bytes32[] calldata keyTuple, uint48 start, bytes calldata data) external; ``` -### spliceDynamicData +#### spliceDynamicData ```solidity function spliceDynamicData( @@ -409,13 +409,13 @@ function spliceDynamicData( ) external; ``` -### setField +#### setField ```solidity function setField(ResourceId tableId, bytes32[] calldata keyTuple, uint8 fieldIndex, bytes calldata data) external; ``` -### setField +#### setField ```solidity function setField( @@ -427,7 +427,7 @@ function setField( ) external; ``` -### setStaticField +#### setStaticField ```solidity function setStaticField( @@ -439,7 +439,7 @@ function setStaticField( ) external; ``` -### setDynamicField +#### setDynamicField ```solidity function setDynamicField( @@ -450,7 +450,7 @@ function setDynamicField( ) external; ``` -### pushToDynamicField +#### pushToDynamicField ```solidity function pushToDynamicField( @@ -461,7 +461,7 @@ function pushToDynamicField( ) external; ``` -### popFromDynamicField +#### popFromDynamicField ```solidity function popFromDynamicField( @@ -472,7 +472,7 @@ function popFromDynamicField( ) external; ``` -### deleteRecord +#### deleteRecord ```solidity function deleteRecord(ResourceId tableId, bytes32[] memory keyTuple) external; @@ -488,7 +488,7 @@ making them less performance critical than the methods. ### Functions -### registerTable +#### registerTable ```solidity function registerTable( @@ -501,13 +501,13 @@ function registerTable( ) external; ``` -### registerStoreHook +#### registerStoreHook ```solidity function registerStoreHook(ResourceId tableId, IStoreHook hookAddress, uint8 enabledHooksBitmap) external; ``` -### unregisterStoreHook +#### unregisterStoreHook ```solidity function unregisterStoreHook(ResourceId tableId, IStoreHook hookAddress) external; diff --git a/docs/pages/world/_meta.js b/docs/pages/world/_meta.js index 69122d1c91..1a003d3408 100644 --- a/docs/pages/world/_meta.js +++ b/docs/pages/world/_meta.js @@ -9,6 +9,7 @@ export default { "account-delegation": "Account Delegation", "batch-calls": "Batch Calls", modules: "Modules", + reference: "Reference", "world-table-illustration": { display: "hidden", }, diff --git a/docs/pages/world/reference/_meta.js b/docs/pages/world/reference/_meta.js new file mode 100644 index 0000000000..cb6a6c3e86 --- /dev/null +++ b/docs/pages/world/reference/_meta.js @@ -0,0 +1,14 @@ +export default { + "delegation-external": "Delegation (interface)", + "module": "Modules", + "module-external": "Modules (interface)", + "system": "Systems", + "system-external": "Systems (interface)", + "world": "World", + "world-external": "World (interfaces)", + "world-context": "World context", + "world-context-external": "World context (interface)", + "resource-ids": "Resource IDs", + "misc": "Miscellaneous", + "internal": "Internals", +}; diff --git a/docs/pages/world/reference/delegation-external.mdx b/docs/pages/world/reference/delegation-external.mdx new file mode 100644 index 0000000000..3cc67a7b74 --- /dev/null +++ b/docs/pages/world/reference/delegation-external.mdx @@ -0,0 +1,19 @@ +[//]: # "This file is autogenerated, do not change manually" + +## IDelegationControl + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/world/src/IDelegationControl.sol) + +**Inherits:** +[IWorldContextConsumer](/world/reference/world-context-external#iworldcontextconsumer) + +_Interface for managing and verifying delegations within the context of a world. +Inherits functionalities from IWorldContextConsumer._ + +### Functions + +#### verify + +```solidity +function verify(address delegator, ResourceId systemId, bytes memory callData) external returns (bool); +``` diff --git a/docs/pages/world/reference/internal/_meta.js b/docs/pages/world/reference/internal/_meta.js new file mode 100644 index 0000000000..c3f422f575 --- /dev/null +++ b/docs/pages/world/reference/internal/_meta.js @@ -0,0 +1,10 @@ +export default { + "access-control": "Access Control", + create: "Create2", + "delegation": "Delegation", + "erc165": "ERC165", + "erc165-external": "ERC165 (interface)", + "init-module": "Init Module", + "init-module-implementation": "Init Module Implementation", + "system": "SystemCall", +}; diff --git a/docs/pages/world/reference/internal/access-control.mdx b/docs/pages/world/reference/internal/access-control.mdx new file mode 100644 index 0000000000..fc68e20652 --- /dev/null +++ b/docs/pages/world/reference/internal/access-control.mdx @@ -0,0 +1,80 @@ +[//]: # "This file is autogenerated, do not change manually" + +## AccessControl + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/world/src/AccessControl.sol) + +_Provides access control functions for checking permissions and ownership within a namespace._ + +### Functions + +#### hasAccess + +Checks if the caller has access to the given resource ID or its namespace. + +```solidity +function hasAccess(ResourceId resourceId, address caller) internal view returns (bool); +``` + +**Parameters** + +| Name | Type | Description | +| ------------ | ------------ | ------------------------------------ | +| `resourceId` | `ResourceId` | The resource ID to check access for. | +| `caller` | `address` | The address of the caller. | + +**Returns** + +| Name | Type | Description | +| -------- | ------ | ----------------------------------------------- | +| `` | `bool` | true if the caller has access, false otherwise. | + +#### requireAccess + +Check for access at the given namespace or resource. + +_Reverts with IWorldErrors.World_AccessDenied if access is denied._ + +```solidity +function requireAccess(ResourceId resourceId, address caller) internal view; +``` + +**Parameters** + +| Name | Type | Description | +| ------------ | ------------ | ------------------------------------ | +| `resourceId` | `ResourceId` | The resource ID to check access for. | +| `caller` | `address` | The address of the caller. | + +#### requireOwner + +Check for ownership of the namespace of the given resource ID. + +_Reverts with IWorldErrors.World_AccessDenied if caller is not owner of the namespace of the resource._ + +```solidity +function requireOwner(ResourceId resourceId, address caller) internal view; +``` + +**Parameters** + +| Name | Type | Description | +| ------------ | ------------ | --------------------------------------- | +| `resourceId` | `ResourceId` | The resource ID to check ownership for. | +| `caller` | `address` | The address of the caller. | + +#### requireExistence + +Check for existence of the given resource ID. + +_Reverts with IWorldErrors.World_ResourceNotFound if the resource does not exist._ + +```solidity +function requireExistence(ResourceId resourceId) internal view; +``` + +**Parameters** + +| Name | Type | Description | +| ------------ | ------------ | --------------------------------------- | +| `resourceId` | `ResourceId` | The resource ID to check existence for. | diff --git a/docs/pages/world/reference/internal/create.mdx b/docs/pages/world/reference/internal/create.mdx new file mode 100644 index 0000000000..6fdd4b79b8 --- /dev/null +++ b/docs/pages/world/reference/internal/create.mdx @@ -0,0 +1,81 @@ +[//]: # "This file is autogenerated, do not change manually" + +## Create2 + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/world/src/Create2.sol) + +_Library to deploy contracts using the CREATE2 opcode._ + +### Functions + +#### deploy + +\*Deploys a contract using `CREATE2`. The address where the contract +will be deployed can be known in advance. +The bytecode for a contract can be obtained from Solidity with +`type(contractName).creationCode`. +Requirements: + +- `creationCode` must not be empty. +- `salt` must have not been used for `creationCode` already.\* + +_If the CREATE2 fails, reverts_ + +```solidity +function deploy(bytes memory creationCode, uint256 salt) internal returns (address addr); +``` + +**Parameters** + +| Name | Type | Description | +| -------------- | --------- | ------------------------------------------------------------------------- | +| `creationCode` | `bytes` | The bytecode of the contract to be deployed. | +| `salt` | `uint256` | A 256-bit value that, combined with the bytecode, determines the address. | + +**Returns** + +| Name | Type | Description | +| ------ | --------- | ------------------------------------------- | +| `addr` | `address` | The address of the newly deployed contract. | + +## Create2Factory + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/world/src/Create2Factory.sol) + +_Helper Contract to facilitate create2 deployment of Contracts._ + +### Functions + +#### deployContract + +_Deploys a new Contract using create2._ + +_Emit ContractDeployed on success_ + +```solidity +function deployContract(bytes memory byteCode, uint256 salt) public; +``` + +**Parameters** + +| Name | Type | Description | +| ---------- | --------- | ------------------------------------------------------------------------- | +| `byteCode` | `bytes` | The bytecode of the contract to be deployed. | +| `salt` | `uint256` | A 256-bit value that, combined with the bytecode, determines the address. | + +### Events + +#### ContractDeployed + +_Emitted when a new contract is deployed using the `deployContract` function._ + +```solidity +event ContractDeployed(address addr, uint256 salt); +``` + +**Parameters** + +| Name | Type | Description | +| ------ | --------- | ----------------------------------------------- | +| `addr` | `address` | The address of the newly deployed contract. | +| `salt` | `uint256` | The salt value used in the `CREATE2` operation. | diff --git a/docs/pages/world/reference/internal/delegation.mdx b/docs/pages/world/reference/internal/delegation.mdx new file mode 100644 index 0000000000..12831b861d --- /dev/null +++ b/docs/pages/world/reference/internal/delegation.mdx @@ -0,0 +1,137 @@ +[//]: # "This file is autogenerated, do not change manually" + +## Delegation + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/world/src/Delegation.sol) + +_Library for managing and verifying delegations._ + +### Functions + +#### exists + +_Check if a delegation control ID exists by comparing it to an empty `bytes32` value._ + +```solidity +function exists(ResourceId delegationControlId) internal pure returns (bool); +``` + +**Parameters** + +| Name | Type | Description | +| --------------------- | ------------ | ----------------------------------------- | +| `delegationControlId` | `ResourceId` | The ResourceId of the delegation control. | + +**Returns** + +| Name | Type | Description | +| -------- | ------ | ---------------------------------------------------------- | +| `` | `bool` | true if the delegation control ID exists, false otherwise. | + +#### isUnlimited + +_Check if a delegation is unlimited by comparing it to the constant for unlimited delegations._ + +```solidity +function isUnlimited(ResourceId delegationControlId) internal pure returns (bool); +``` + +**Parameters** + +| Name | Type | Description | +| --------------------- | ------------ | ----------------------------------------- | +| `delegationControlId` | `ResourceId` | The ResourceId of the delegation control. | + +**Returns** + +| Name | Type | Description | +| -------- | ------ | ----------------------------------------------------- | +| `` | `bool` | true if the delegation is unlimited, false otherwise. | + +#### isLimited + +_Check if a delegation is limited._ + +```solidity +function isLimited(ResourceId delegationControlId) internal pure returns (bool); +``` + +**Parameters** + +| Name | Type | Description | +| --------------------- | ------------ | ----------------------------------------- | +| `delegationControlId` | `ResourceId` | The ResourceId of the delegation control. | + +**Returns** + +| Name | Type | Description | +| -------- | ------ | --------------------------------------------------- | +| `` | `bool` | true if the delegation is limited, false otherwise. | + +#### verify + +Verify a delegation. + +_Verifying the delegation might have side effects in the delegation control contract._ + +```solidity +function verify( + ResourceId delegationControlId, + address delegator, + address delegatee, + ResourceId systemId, + bytes memory callData +) internal returns (bool); +``` + +**Parameters** + +| Name | Type | Description | +| --------------------- | ------------ | -------------------------------------------------- | +| `delegationControlId` | `ResourceId` | The ResourceId of the delegation control. | +| `delegator` | `address` | The address of the delegator. | +| `delegatee` | `address` | The address of the delegatee. | +| `systemId` | `ResourceId` | The ResourceId of the system. | +| `callData` | `bytes` | The call data of the call that is being delegated. | + +**Returns** + +| Name | Type | Description | +| -------- | ------ | --------------------------------------------------------------- | +| `` | `bool` | true if the delegation is exists and is valid, false otherwise. | + +## DelegationControl + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/world/src/DelegationControl.sol) + +**Inherits:** +[System](/world/reference/system#system), [IDelegationControl](/world/reference/delegation-external#idelegationcontrol) + +_Abstract contract to manage delegations and check interface support. +Inherits functionalities from WorldContextConsumer and IDelegationControl._ + +### Functions + +#### supportsInterface + +Check if the given interfaceId is supported by this contract. + +_Overrides the functionality from IERC165 and WorldContextConsumer to check for supported interfaces._ + +```solidity +function supportsInterface( + bytes4 interfaceId +) public pure virtual override(IERC165, WorldContextConsumer) returns (bool); +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | -------- | ---------------------------------------- | +| `interfaceId` | `bytes4` | The bytes4 identifier for the interface. | + +**Returns** + +| Name | Type | Description | +| -------- | ------ | ---------------------------------------------------- | +| `` | `bool` | true if the interface is supported, false otherwise. | diff --git a/docs/pages/world/reference/internal/erc165-external.mdx b/docs/pages/world/reference/internal/erc165-external.mdx new file mode 100644 index 0000000000..c41d2fa7de --- /dev/null +++ b/docs/pages/world/reference/internal/erc165-external.mdx @@ -0,0 +1,34 @@ +[//]: # "This file is autogenerated, do not change manually" + +## IERC165 + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/world/src/IERC165.sol) + +_Interface for the ERC-165 standard as described in the EIP-165. +Allows for contracts to be checked for their support of an interface. +See: https://eips.ethereum.org/EIPS/eip-165_ + +### Functions + +#### supportsInterface + +Query if a contract implements an interface. + +_Interface identification is specified in ERC-165. +This function uses less than 30,000 gas._ + +```solidity +function supportsInterface(bytes4 interfaceID) external view returns (bool); +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | -------- | -------------------------------------------------- | +| `interfaceID` | `bytes4` | The interface identifier, as specified in ERC-165. | + +**Returns** + +| Name | Type | Description | +| -------- | ------ | --------------------------------------------------------------------------------------------------- | +| `` | `bool` | True if the contract implements `interfaceID` and `interfaceID` is not 0xffffffff, false otherwise. | diff --git a/docs/pages/world/reference/internal/erc165.mdx b/docs/pages/world/reference/internal/erc165.mdx new file mode 100644 index 0000000000..e6595d57d6 --- /dev/null +++ b/docs/pages/world/reference/internal/erc165.mdx @@ -0,0 +1,113 @@ +[//]: # "This file is autogenerated, do not change manually" + +## ERC165Checker + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/world/src/ERC165Checker.sol) + +_Library used to query support of an interface declared via [IERC165](./erc165-external#ierc165). +Note that these functions return the actual result of the query: they do not +`revert` if an interface is not supported. It is up to the caller to decide +what to do in these cases._ + +### State Variables + +#### INTERFACE_ID_INVALID + +```solidity +bytes4 private constant INTERFACE_ID_INVALID = 0xffffffff; +``` + +### Functions + +#### supportsERC165 + +_Returns true if `account` supports the [IERC165](./erc165-external#ierc165) interface._ + +```solidity +function supportsERC165(address account) internal view returns (bool); +``` + +#### supportsInterface + +_Returns true if `account` supports the interface defined by +`interfaceId`. Support for [IERC165](./erc165-external#ierc165) itself is queried automatically. +See [IERC165.supportsInterface](./erc165-external#supportsinterface)._ + +```solidity +function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool); +``` + +#### getSupportedInterfaces + +_Returns a boolean array where each value corresponds to the +interfaces passed in and whether they're supported or not. This allows +you to batch check interfaces for a contract where your expectation +is that some interfaces may not be supported. +See [IERC165-supportsInterface](/world/reference/internal/erc165-external#supportsinterface)._ + +```solidity +function getSupportedInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool[] memory); +``` + +#### supportsAllInterfaces + +_Returns true if `account` supports all the interfaces defined in +`interfaceIds`. Support for [IERC165](./erc165-external#ierc165) itself is queried automatically. +Batch-querying can lead to gas savings by skipping repeated checks for +[IERC165](./erc165-external#ierc165) support. +See [IERC165.supportsInterface](./erc165-external#supportsinterface)._ + +```solidity +function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool); +``` + +#### supportsERC165InterfaceUnchecked + +Query if a contract implements an interface, does not check ERC165 support + +_Assumes that account contains a contract that supports ERC165, otherwise +the behavior of this method is undefined. This precondition can be checked +with [supportsERC165](/src/ERC165Checker.sol/library.ERC165Checker.md#supportserc165). +Some precompiled contracts will falsely indicate support for a given interface, so caution +should be exercised when using this function. +Interface identification is specified in ERC-165._ + +```solidity +function supportsERC165InterfaceUnchecked(address account, bytes4 interfaceId) internal view returns (bool); +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | --------- | ---------------------------------------------------------------- | +| `account` | `address` | The address of the contract to query for support of an interface | +| `interfaceId` | `bytes4` | The interface identifier, as specified in ERC-165 | + +**Returns** + +| Name | Type | Description | +| -------- | ------ | --------------------------------------------------------------------------------------------------------------- | +| `` | `bool` | true if the contract at account indicates support of the interface with identifier interfaceId, false otherwise | + +## requireInterface + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/world/src/requireInterface.sol) + +Utility function to validate interface support on a given contract using ERC-165. + +Checks if a given contract at `contractAddress` supports the interface with ID `interfaceId`. + +_This function uses the ERC-165 standard's `supportsInterface` to check if a given contract supports a specific interface._ + +_Uses the ERC-165 `supportsInterface` method. If the contract doesn't support the interface or doesn't implement ERC-165, the function will revert with a relevant error message._ + +```solidity +function requireInterface(address contractAddress, bytes4 interfaceId) view; +``` + +**Parameters** + +| Name | Type | Description | +| ----------------- | --------- | ------------------------------------- | +| `contractAddress` | `address` | The address of the contract to check. | +| `interfaceId` | `bytes4` | The interface ID to verify. | diff --git a/docs/pages/world/reference/internal/init-module-implementation.mdx b/docs/pages/world/reference/internal/init-module-implementation.mdx new file mode 100644 index 0000000000..6acb16654e --- /dev/null +++ b/docs/pages/world/reference/internal/init-module-implementation.mdx @@ -0,0 +1,520 @@ +[//]: # "This file is autogenerated, do not change manually" + +## AccessManagementSystem + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/world/src/modules/init/implementations/AccessManagementSystem.sol) + +**Inherits:** +[System](/world/reference/system#system), [LimitedCallContext](/world/reference/internal/init-module#limitedcallcontext) + +_This contract manages the granting and revoking of access from/to resources._ + +### Functions + +#### grantAccess + +Grant access to the resource at the given resource ID. + +_Requires the caller to own the namespace._ + +```solidity +function grantAccess(ResourceId resourceId, address grantee) public virtual onlyDelegatecall; +``` + +**Parameters** + +| Name | Type | Description | +| ------------ | ------------ | ---------------------------------------------- | +| `resourceId` | `ResourceId` | The ID of the resource to grant access to. | +| `grantee` | `address` | The address to which access should be granted. | + +#### revokeAccess + +Revoke access from the resource at the given resource ID. + +_Requires the caller to own the namespace._ + +```solidity +function revokeAccess(ResourceId resourceId, address grantee) public virtual onlyDelegatecall; +``` + +**Parameters** + +| Name | Type | Description | +| ------------ | ------------ | ------------------------------------------------ | +| `resourceId` | `ResourceId` | The ID of the resource to revoke access from. | +| `grantee` | `address` | The address from which access should be revoked. | + +#### transferOwnership + +Transfer ownership of the given namespace to newOwner and manages the access. + +_Requires the caller to own the namespace. Revoke ResourceAccess for previous owner and grant to newOwner._ + +```solidity +function transferOwnership(ResourceId namespaceId, address newOwner) public virtual onlyDelegatecall; +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | ------------ | ----------------------------------------------------- | +| `namespaceId` | `ResourceId` | The ID of the namespace to transfer ownership. | +| `newOwner` | `address` | The address to which ownership should be transferred. | + +#### renounceOwnership + +Renounces ownership of the given namespace + +_Requires the caller to own the namespace. Revoke ResourceAccess for previous owner_ + +```solidity +function renounceOwnership(ResourceId namespaceId) public virtual onlyDelegatecall; +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | ------------ | ---------------------------------------------- | +| `namespaceId` | `ResourceId` | The ID of the namespace to transfer ownership. | + +## ModuleInstallationSystem + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/world/src/modules/init/implementations/ModuleInstallationSystem.sol) + +**Inherits:** +[System](/world/reference/system#system), [LimitedCallContext](/world/reference/internal/init-module#limitedcallcontext) + +_A system contract to handle the installation of (non-root) modules in the World._ + +### Functions + +#### installModule + +Installs a module into the World under a specified namespace. + +_Validates the given module against the IModule interface and delegates the installation process. +The module is then registered in the InstalledModules table._ + +```solidity +function installModule(IModule module, bytes memory encodedArgs) public onlyDelegatecall; +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | --------- | -------------------------------------------------- | +| `module` | `IModule` | The module to be installed. | +| `encodedArgs` | `bytes` | The ABI encoded arguments for module installation. | + +## BalanceTransferSystem + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/world/src/modules/init/implementations/BalanceTransferSystem.sol) + +**Inherits:** +[System](/world/reference/system#system), [IWorldErrors](/world/reference/world-external#iworlderrors), [LimitedCallContext](/world/reference/internal/init-module#limitedcallcontext) + +_A system contract that facilitates balance transfers in the World and outside of the World._ + +### Functions + +#### transferBalanceToNamespace + +Transfer balance to another namespace in the World. + +_Requires the caller to have access to the source namespace and ensures the destination namespace type is valid._ + +```solidity +function transferBalanceToNamespace( + ResourceId fromNamespaceId, + ResourceId toNamespaceId, + uint256 amount +) public virtual onlyDelegatecall; +``` + +**Parameters** + +| Name | Type | Description | +| ----------------- | ------------ | ------------------------------------------------------------- | +| `fromNamespaceId` | `ResourceId` | The source namespace from which the balance will be deducted. | +| `toNamespaceId` | `ResourceId` | The target namespace where the balance will be added. | +| `amount` | `uint256` | The amount to transfer. | + +#### transferBalanceToAddress + +Transfer balance out of the World to a specific address. + +_Requires the caller to have access to the source namespace and ensures sufficient balance before transfer._ + +```solidity +function transferBalanceToAddress( + ResourceId fromNamespaceId, + address toAddress, + uint256 amount +) public virtual onlyDelegatecall; +``` + +**Parameters** + +| Name | Type | Description | +| ----------------- | ------------ | ------------------------------------------------------------- | +| `fromNamespaceId` | `ResourceId` | The source namespace from which the balance will be deducted. | +| `toAddress` | `address` | The target address where the balance will be sent. | +| `amount` | `uint256` | The amount to transfer. | + +## StoreRegistrationSystem + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/world/src/modules/init/implementations/StoreRegistrationSystem.sol) + +**Inherits:** +[System](/world/reference/system#system), [IWorldErrors](/world/reference/world-external#iworlderrors), [LimitedCallContext](/world/reference/internal/init-module#limitedcallcontext) + +_This contract provides functionality for the registration of store-related resources within the World framework._ + +### Functions + +#### registerTable + +Register a table within the World framework. + +_Registers a table with the specified configuration. If the namespace for the table does not exist, it's created. +Existing namespaces require the caller to be the owner for table registration._ + +```solidity +function registerTable( + ResourceId tableId, + FieldLayout fieldLayout, + Schema keySchema, + Schema valueSchema, + string[] calldata keyNames, + string[] calldata fieldNames +) public virtual onlyDelegatecall; +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | ------------- | ------------------------------------------------ | +| `tableId` | `ResourceId` | The resource ID of the table. | +| `fieldLayout` | `FieldLayout` | The field layout structure for the table. | +| `keySchema` | `Schema` | The schema for the keys of the table. | +| `valueSchema` | `Schema` | The schema for the values within the table. | +| `keyNames` | `string[]` | The names associated with the keys in the table. | +| `fieldNames` | `string[]` | The names of the fields in the table. | + +#### registerStoreHook + +Register a storage hook for a specified table. + +_The caller must be the owner of the namespace to which the table belongs. +The hook must conform to the IStoreHook interface._ + +```solidity +function registerStoreHook( + ResourceId tableId, + IStoreHook hookAddress, + uint8 enabledHooksBitmap +) public virtual onlyDelegatecall; +``` + +**Parameters** + +| Name | Type | Description | +| -------------------- | ------------ | -------------------------------------------------------------------- | +| `tableId` | `ResourceId` | The resource ID of the table for which the hook is being registered. | +| `hookAddress` | `IStoreHook` | The address of the storage hook contract. | +| `enabledHooksBitmap` | `uint8` | A bitmap indicating which hook functionalities are enabled. | + +#### unregisterStoreHook + +Unregister a previously registered storage hook for a specified table. + +_The caller must be the owner of the namespace to which the table belongs._ + +```solidity +function unregisterStoreHook(ResourceId tableId, IStoreHook hookAddress) public virtual onlyDelegatecall; +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | ------------ | ----------------------------------------------------------------------- | +| `tableId` | `ResourceId` | The resource ID of the table from which the hook is being unregistered. | +| `hookAddress` | `IStoreHook` | The address of the storage hook contract. | + +## BatchCallSystem + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/world/src/modules/init/implementations/BatchCallSystem.sol) + +**Inherits:** +[System](/world/reference/system#system), [LimitedCallContext](/world/reference/internal/init-module#limitedcallcontext) + +_A system contract that facilitates batching of calls to various systems in a single transaction._ + +### Functions + +#### batchCall + +Make batch calls to multiple systems into a single transaction. + +_Iterates through an array of system calls, executes them, and returns an array of return data._ + +```solidity +function batchCall(SystemCallData[] calldata systemCalls) public onlyDelegatecall returns (bytes[] memory returnDatas); +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | ------------------ | ----------------------------------------------------------------------------- | +| `systemCalls` | `SystemCallData[]` | An array of SystemCallData that contains systemId and callData for each call. | + +**Returns** + +| Name | Type | Description | +| ------------- | --------- | ------------------------------------------------------------------ | +| `returnDatas` | `bytes[]` | An array of bytes containing the return data for each system call. | + +#### batchCallFrom + +Make batch calls from specific addresses to multiple systems in a single transaction. + +_Iterates through an array of system calls with specified 'from' addresses, executes them, and returns an array of return data._ + +```solidity +function batchCallFrom( + SystemCallFromData[] calldata systemCalls +) public onlyDelegatecall returns (bytes[] memory returnDatas); +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | ---------------------- | ---------------------------------------------------------------------------------------- | +| `systemCalls` | `SystemCallFromData[]` | An array of SystemCallFromData that contains from, systemId, and callData for each call. | + +**Returns** + +| Name | Type | Description | +| ------------- | --------- | ------------------------------------------------------------------ | +| `returnDatas` | `bytes[]` | An array of bytes containing the return data for each system call. | + +## WorldRegistrationSystem + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/world/src/modules/init/implementations/WorldRegistrationSystem.sol) + +**Inherits:** +[System](/world/reference/system#system), [IWorldErrors](/world/reference/world-external#iworlderrors), [LimitedCallContext](/world/reference/internal/init-module#limitedcallcontext) + +_This contract provides functions related to registering resources other than tables in the World._ + +### Functions + +#### registerNamespace + +Registers a new namespace + +_Creates a new namespace resource with the given ID_ + +```solidity +function registerNamespace(ResourceId namespaceId) public virtual onlyDelegatecall; +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | ------------ | ------------------------------------------- | +| `namespaceId` | `ResourceId` | The unique identifier for the new namespace | + +#### registerSystemHook + +Registers a new system hook + +_Adds a new hook for the system at the provided system ID_ + +```solidity +function registerSystemHook( + ResourceId systemId, + ISystemHook hookAddress, + uint8 enabledHooksBitmap +) public virtual onlyDelegatecall; +``` + +**Parameters** + +| Name | Type | Description | +| -------------------- | ------------- | ----------------------------------------- | +| `systemId` | `ResourceId` | The ID of the system | +| `hookAddress` | `ISystemHook` | The address of the hook being registered | +| `enabledHooksBitmap` | `uint8` | Bitmap indicating which hooks are enabled | + +#### unregisterSystemHook + +Unregisters a system hook + +_Removes a hook for the system at the provided system ID_ + +```solidity +function unregisterSystemHook(ResourceId systemId, ISystemHook hookAddress) public virtual onlyDelegatecall; +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | ------------- | ------------------------------------------ | +| `systemId` | `ResourceId` | The ID of the system | +| `hookAddress` | `ISystemHook` | The address of the hook being unregistered | + +#### registerSystem + +Registers a system + +_Registers or upgrades a system at the given ID +If the namespace doesn't exist yet, it is registered. +The system is granted access to its namespace, so it can write to any +table in the same namespace. +If publicAccess is true, no access control check is performed for calling the system. +This function doesn't check whether a system already exists at the given selector, +making it possible to upgrade systems._ + +```solidity +function registerSystem(ResourceId systemId, System system, bool publicAccess) public virtual onlyDelegatecall; +``` + +**Parameters** + +| Name | Type | Description | +| -------------- | ------------ | --------------------------------------------------- | +| `systemId` | `ResourceId` | The unique identifier for the system | +| `system` | `System` | The system being registered | +| `publicAccess` | `bool` | Flag indicating if access control check is bypassed | + +#### registerFunctionSelector + +Registers a new World function selector + +_Creates a mapping between a World function and its associated system function_ + +```solidity +function registerFunctionSelector( + ResourceId systemId, + string memory systemFunctionSignature +) public onlyDelegatecall returns (bytes4 worldFunctionSelector); +``` + +**Parameters** + +| Name | Type | Description | +| ------------------------- | ------------ | ------------------------------------ | +| `systemId` | `ResourceId` | The system ID | +| `systemFunctionSignature` | `string` | The signature of the system function | + +**Returns** + +| Name | Type | Description | +| ----------------------- | -------- | ---------------------------------- | +| `worldFunctionSelector` | `bytes4` | The selector of the World function | + +#### registerRootFunctionSelector + +Registers a root World function selector + +_Creates a mapping for a root World function without namespace or name prefix_ + +```solidity +function registerRootFunctionSelector( + ResourceId systemId, + string memory worldFunctionSignature, + bytes4 systemFunctionSelector +) public onlyDelegatecall returns (bytes4 worldFunctionSelector); +``` + +**Parameters** + +| Name | Type | Description | +| ------------------------ | ------------ | ----------------------------------- | +| `systemId` | `ResourceId` | The system ID | +| `worldFunctionSignature` | `string` | The signature of the World function | +| `systemFunctionSelector` | `bytes4` | The selector of the system function | + +**Returns** + +| Name | Type | Description | +| ----------------------- | -------- | ---------------------------------- | +| `worldFunctionSelector` | `bytes4` | The selector of the World function | + +#### registerDelegation + +Registers a delegation for the caller + +_Creates a new delegation from the caller to the specified delegatee_ + +```solidity +function registerDelegation( + address delegatee, + ResourceId delegationControlId, + bytes memory initCallData +) public onlyDelegatecall; +``` + +**Parameters** + +| Name | Type | Description | +| --------------------- | ------------ | ------------------------------------------ | +| `delegatee` | `address` | The address of the delegatee | +| `delegationControlId` | `ResourceId` | The ID controlling the delegation | +| `initCallData` | `bytes` | The initialization data for the delegation | + +#### unregisterDelegation + +Unregisters a delegation + +_Deletes the new delegation from the caller to the specified delegatee_ + +```solidity +function unregisterDelegation(address delegatee) public onlyDelegatecall; +``` + +**Parameters** + +| Name | Type | Description | +| ----------- | --------- | ---------------------------- | +| `delegatee` | `address` | The address of the delegatee | + +#### registerNamespaceDelegation + +Registers a delegation for a namespace + +_Sets up a new delegation control for a specific namespace_ + +```solidity +function registerNamespaceDelegation( + ResourceId namespaceId, + ResourceId delegationControlId, + bytes memory initCallData +) public onlyDelegatecall; +``` + +**Parameters** + +| Name | Type | Description | +| --------------------- | ------------ | ------------------------------------------ | +| `namespaceId` | `ResourceId` | The ID of the namespace | +| `delegationControlId` | `ResourceId` | The ID controlling the delegation | +| `initCallData` | `bytes` | The initialization data for the delegation | + +#### unregisterNamespaceDelegation + +Unregisters a delegation for a namespace + +_Deletes the delegation control for a specific namespace_ + +```solidity +function unregisterNamespaceDelegation(ResourceId namespaceId) public onlyDelegatecall; +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | ------------ | ----------------------- | +| `namespaceId` | `ResourceId` | The ID of the namespace | diff --git a/docs/pages/world/reference/internal/init-module.mdx b/docs/pages/world/reference/internal/init-module.mdx new file mode 100644 index 0000000000..c25be28ee8 --- /dev/null +++ b/docs/pages/world/reference/internal/init-module.mdx @@ -0,0 +1,259 @@ +[//]: # "This file is autogenerated, do not change manually" + +## InitModule + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/world/src/modules/init/InitModule.sol) + +**Inherits:** +[Module](/world/reference/module#module) + +Registers internal World tables, systems, and their function selectors. + +_This module only supports `installRoot` because it installs root tables, systems and function selectors._ + +### State Variables + +#### accessManagementSystem + +```solidity +address internal immutable accessManagementSystem; +``` + +#### balanceTransferSystem + +```solidity +address internal immutable balanceTransferSystem; +``` + +#### batchCallSystem + +```solidity +address internal immutable batchCallSystem; +``` + +#### registrationSystem + +```solidity +address internal immutable registrationSystem; +``` + +### Functions + +#### constructor + +```solidity +constructor( + AccessManagementSystem _accessManagementSystem, + BalanceTransferSystem _balanceTransferSystem, + BatchCallSystem _batchCallSystem, + RegistrationSystem _registrationSystem +); +``` + +#### installRoot + +Root installation of the module. + +_Registers core tables, systems, and function selectors in the World._ + +```solidity +function installRoot(bytes memory) public override; +``` + +#### install + +Non-root installation of the module. + +_Installation is only supported at root level, so this function will always revert._ + +```solidity +function install(bytes memory) public pure; +``` + +#### \_registerTables + +Register World's tables. + +_This internal function registers various tables and sets initial permissions._ + +```solidity +function _registerTables() internal; +``` + +#### \_registerSystems + +Register the systems in the World. + +```solidity +function _registerSystems() internal; +``` + +#### \_registerSystem + +Register the internal system in the World. + +_Uses the WorldRegistrationSystem's `registerSystem` implementation to register the system on the World._ + +```solidity +function _registerSystem(address target, ResourceId systemId) internal; +``` + +#### \_registerFunctionSelectors + +Register function selectors for all core system functions in the World. + +_Iterates through known function signatures and registers them._ + +```solidity +function _registerFunctionSelectors() internal; +``` + +#### \_registerRootFunctionSelector + +Register the function selector in the World. + +_Uses the RegistrationSystem's `registerRootFunctionSelector` to register the function selector._ + +```solidity +function _registerRootFunctionSelector(ResourceId systemId, string memory functionSignature) internal; +``` + +## constants.sol + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/world/src/modules/init/constants.sol) + +#### ACCESS_MANAGEMENT_SYSTEM_ID + +_Resource ID for access management system._ + +_This ID is derived from the RESOURCE_SYSTEM type, the ROOT_NAMESPACE, and the system name._ + +```solidity +ResourceId constant ACCESS_MANAGEMENT_SYSTEM_ID = ResourceId.wrap( + bytes32(abi.encodePacked(RESOURCE_SYSTEM, ROOT_NAMESPACE, bytes16("AccessManagement"))) +); +``` + +#### BALANCE_TRANSFER_SYSTEM_ID + +_Resource ID for balance transfer system._ + +_This ID is derived from the RESOURCE_SYSTEM type, the ROOT_NAMESPACE, and the system name._ + +```solidity +ResourceId constant BALANCE_TRANSFER_SYSTEM_ID = ResourceId.wrap( + bytes32(abi.encodePacked(RESOURCE_SYSTEM, ROOT_NAMESPACE, bytes16("BalanceTransfer"))) +); +``` + +#### BATCH_CALL_SYSTEM_ID + +_Resource ID for batch call system._ + +_This ID is derived from the RESOURCE_SYSTEM type, the ROOT_NAMESPACE, and the system name._ + +```solidity +ResourceId constant BATCH_CALL_SYSTEM_ID = ResourceId.wrap( + bytes32(abi.encodePacked(RESOURCE_SYSTEM, ROOT_NAMESPACE, bytes16("BatchCall"))) +); +``` + +#### REGISTRATION_SYSTEM_ID + +_Resource ID for core registration system._ + +_This ID is derived from the RESOURCE_SYSTEM type, the ROOT_NAMESPACE, and the system name._ + +```solidity +ResourceId constant REGISTRATION_SYSTEM_ID = ResourceId.wrap( + bytes32(abi.encodePacked(RESOURCE_SYSTEM, ROOT_NAMESPACE, bytes16("Registration"))) +); +``` + +## RegistrationSystem + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/world/src/modules/init/RegistrationSystem.sol) + +**Inherits:** +[IWorldErrors](/world/reference/world-external#iworlderrors), [ModuleInstallationSystem](/world/reference/internal/init-module-implementation#moduleinstallationsystem), [StoreRegistrationSystem](/world/reference/internal/init-module-implementation#storeregistrationsystem), [WorldRegistrationSystem](/world/reference/internal/init-module-implementation#worldregistrationsystem) + +This system aggregates World registration and installation functionalities externalized from the World contract, aiming to keep the World contract's bytecode lean. + +_Aggregates multiple system implementations for the World._ + +## LimitedCallContext + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/world/src/modules/init/LimitedCallContext.sol) + +_Systems are expected to be always called via the central World contract. +Depending on whether it is a root or non-root system, the call is performed via `delegatecall` or `call`. +Since Systems are expected to be stateless and only interact with the World state, +it is normally not necessary to prevent direct calls to the systems. +However, since the `CoreSystem` is known to always be registered as a root system in the World, +it is always expected to be delegatecalled, so we made this expectation explicit by reverting if it is not delegatecalled._ + +_Based on OpenZeppelin's UUPSUpgradeable.sol +https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v5.0.0/contracts/proxy/utils/UUPSUpgradeable.sol#L50_ + +### State Variables + +#### \_\_self + +```solidity +address private immutable __self = address(this); +``` + +### Functions + +#### onlyDelegatecall + +```solidity +modifier onlyDelegatecall(); +``` + +#### \_checkDelegatecall + +_Reverts if the execution is not performed via delegatecall._ + +```solidity +function _checkDelegatecall() internal view virtual; +``` + +### Errors + +#### UnauthorizedCallContext + +```solidity +error UnauthorizedCallContext(); +``` + +## SystemCallData + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/world/src/modules/init/types.sol) + +Holds data for making system calls. + +_Used to represent a call to a specific system identified by a ResourceId._ + +```solidity +struct SystemCallData { + ResourceId systemId; + bytes callData; +} +``` + +## SystemCallFromData + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/world/src/modules/init/types.sol) + +Holds data for making system calls with a specific sender. + +_Used to represent a call from a specific address to a specific system._ + +```solidity +struct SystemCallFromData { + address from; + ResourceId systemId; + bytes callData; +} +``` diff --git a/docs/pages/world/reference/internal/systemcall.mdx b/docs/pages/world/reference/internal/systemcall.mdx new file mode 100644 index 0000000000..94b9579e7c --- /dev/null +++ b/docs/pages/world/reference/internal/systemcall.mdx @@ -0,0 +1,100 @@ +[//]: # "This file is autogenerated, do not change manually" + +## SystemCall + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/world/src/SystemCall.sol) + +_The SystemCall library provides functions for interacting with systems using their unique Resource IDs. +It ensures the necessary access control checks, handles system hooks, and performs system calls._ + +### Functions + +#### call + +Calls a system identified by its Resource ID while ensuring necessary access controls. + +_This function does not revert if the system call fails. Instead, it returns a success flag._ + +```solidity +function call( + address caller, + uint256 value, + ResourceId systemId, + bytes memory callData +) internal returns (bool success, bytes memory data); +``` + +**Parameters** + +| Name | Type | Description | +| ---------- | ------------ | -------------------------------------------------- | +| `caller` | `address` | The address initiating the system call. | +| `value` | `uint256` | The amount of Ether to be sent with the call. | +| `systemId` | `ResourceId` | The unique Resource ID of the system being called. | +| `callData` | `bytes` | The calldata to be executed in the system. | + +**Returns** + +| Name | Type | Description | +| --------- | ------- | --------------------------------------------------------- | +| `success` | `bool` | A flag indicating whether the system call was successful. | +| `data` | `bytes` | The return data from the system call. | + +#### callWithHooks + +Calls a system identified by its Resource ID, ensuring access controls, and triggers associated system hooks. + +_This function does not revert if the system call fails. Instead, it returns a success flag._ + +```solidity +function callWithHooks( + address caller, + ResourceId systemId, + bytes memory callData, + uint256 value +) internal returns (bool success, bytes memory data); +``` + +**Parameters** + +| Name | Type | Description | +| ---------- | ------------ | -------------------------------------------------- | +| `caller` | `address` | The address initiating the system call. | +| `systemId` | `ResourceId` | The unique Resource ID of the system being called. | +| `callData` | `bytes` | The calldata to be executed in the system. | +| `value` | `uint256` | The amount of Ether to be sent with the call. | + +**Returns** + +| Name | Type | Description | +| --------- | ------- | --------------------------------------------------------- | +| `success` | `bool` | A flag indicating whether the system call was successful. | +| `data` | `bytes` | The return data from the system call. | + +#### callWithHooksOrRevert + +Calls a system identified by its Resource ID, ensures access controls, triggers associated system hooks, and reverts on failure. + +```solidity +function callWithHooksOrRevert( + address caller, + ResourceId systemId, + bytes memory callData, + uint256 value +) internal returns (bytes memory data); +``` + +**Parameters** + +| Name | Type | Description | +| ---------- | ------------ | -------------------------------------------------- | +| `caller` | `address` | The address initiating the system call. | +| `systemId` | `ResourceId` | The unique Resource ID of the system being called. | +| `callData` | `bytes` | The calldata to be executed in the system. | +| `value` | `uint256` | The amount of Ether to be sent with the call. | + +**Returns** + +| Name | Type | Description | +| ------ | ------- | ------------------------------------- | +| `data` | `bytes` | The return data from the system call. | diff --git a/docs/pages/world/reference/misc.mdx b/docs/pages/world/reference/misc.mdx new file mode 100644 index 0000000000..b2ebefd27c --- /dev/null +++ b/docs/pages/world/reference/misc.mdx @@ -0,0 +1,112 @@ +[//]: # "This file is autogenerated, do not change manually" + +## Utils + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/world/src/Utils.sol) + +Various utilities + +_These utilities are not used by MUD itself, they are for developers using MUD._ + +### Functions + +#### systemNamespace + +Fetches the namespace of the current system. + +_This function determines the system's namespace based on its interaction with the store. If the system is a root system, it returns the root namespace (an empty string). Otherwise, it retrieves the namespace using the system's registry. +This function must be used within the context of a system (either directly or within libraries called by a system)._ + +```solidity +function systemNamespace() internal view returns (bytes14); +``` + +**Returns** + +| Name | Type | Description | +| -------- | --------- | ----------------------------------------------------------- | +| `` | `bytes14` | Returns a bytes14 representation of the system's namespace. | + +## constants.sol + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/world/src/constants.sol) + +#### ROOT_NAMESPACE + +```solidity +bytes14 constant ROOT_NAMESPACE = ""; +``` + +#### ROOT_NAME + +```solidity +bytes16 constant ROOT_NAME = ""; +``` + +#### STORE_NAMESPACE_ID + +```solidity +ResourceId constant STORE_NAMESPACE_ID = ResourceId.wrap( + bytes32(abi.encodePacked(RESOURCE_NAMESPACE, bytes14("store"), ROOT_NAME)) +); +``` + +#### WORLD_NAMESPACE_ID + +```solidity +ResourceId constant WORLD_NAMESPACE_ID = ResourceId.wrap( + bytes32(abi.encodePacked(RESOURCE_NAMESPACE, bytes14("world"), ROOT_NAME)) +); +``` + +#### ROOT_NAMESPACE_ID + +```solidity +ResourceId constant ROOT_NAMESPACE_ID = ResourceId.wrap( + bytes32(abi.encodePacked(RESOURCE_NAMESPACE, ROOT_NAMESPACE, ROOT_NAME)) +); +``` + +#### UNLIMITED_DELEGATION + +```solidity +ResourceId constant UNLIMITED_DELEGATION = ResourceId.wrap( + bytes32(abi.encodePacked(RESOURCE_SYSTEM, ROOT_NAMESPACE, bytes16("unlimited"))) +); +``` + +## revertWithBytes + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/world/src/revertWithBytes.sol) + +Utility function to revert transactions with raw bytes. + +Reverts the transaction using the provided raw bytes as the revert reason. + +_This can be especially useful when reverting with a message obtained from a low-level call or a pre-encoded error._ + +_Uses assembly to perform the revert operation with the raw bytes._ + +```solidity +function revertWithBytes(bytes memory reason) pure; +``` + +**Parameters** + +| Name | Type | Description | +| -------- | ------- | ---------------------------- | +| `reason` | `bytes` | The raw bytes revert reason. | + +## version.sol constants + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/world/src/version.sol) + +#### WORLD_VERSION + +_World Version Constant +Defines the version identifier for the World contract or module. +This version identifier can be used for version checks, logging, and more._ + +```solidity +bytes32 constant WORLD_VERSION = "1.0.0-unaudited"; +``` diff --git a/docs/pages/world/reference/module-external.mdx b/docs/pages/world/reference/module-external.mdx new file mode 100644 index 0000000000..3e668cde6c --- /dev/null +++ b/docs/pages/world/reference/module-external.mdx @@ -0,0 +1,77 @@ +[//]: # "This file is autogenerated, do not change manually" + +## IModule + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/world/src/IModule.sol) + +**Inherits:** +[IERC165](/world/reference/internal/erc165-external#ierc165) + +_Interface for the Module system. +A module can be installed within the context of a world, either as a root or non-root module. +This interface adheres to the ERC-165 standard for determining interface support._ + +### Functions + +#### installRoot + +Installs the module as a root module. + +_This function is invoked by the World contract during `installRootModule` process. +The module expects to be called via the World contract and thus installs itself on the `msg.sender`._ + +```solidity +function installRoot(bytes memory encodedArgs) external; +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | ------- | ----------------------------------------------------------------------------- | +| `encodedArgs` | `bytes` | The ABI encoded arguments that may be needed during the installation process. | + +#### install + +Installs the module. + +_This function is invoked by the World contract during `installModule` process. +The module expects to be called via the World contract and thus installs itself on the `msg.sender`. +Logic might differ from `installRoot`, for example, this might accept namespace parameters._ + +```solidity +function install(bytes memory encodedArgs) external; +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | ------- | ----------------------------------------------------------------------------- | +| `encodedArgs` | `bytes` | The ABI encoded arguments that may be needed during the installation process. | + +### Errors + +#### Module_RootInstallNotSupported + +_Errors to represent non-support of specific installation types._ + +```solidity +error Module_RootInstallNotSupported(); +``` + +#### Module_NonRootInstallNotSupported + +```solidity +error Module_NonRootInstallNotSupported(); +``` + +#### Module_AlreadyInstalled + +```solidity +error Module_AlreadyInstalled(); +``` + +#### Module_MissingDependency + +```solidity +error Module_MissingDependency(address dependency); +``` diff --git a/docs/pages/world/reference/module.mdx b/docs/pages/world/reference/module.mdx new file mode 100644 index 0000000000..6ebade08b3 --- /dev/null +++ b/docs/pages/world/reference/module.mdx @@ -0,0 +1,80 @@ +[//]: # "This file is autogenerated, do not change manually" + +## Module + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/world/src/Module.sol) + +**Inherits:** +[IModule](/world/reference/module-external#imodule), [WorldContextConsumer](/world/reference/world-context#worldcontextconsumer) + +_Abstract contract that implements the ERC-165 supportsInterface function for IModule._ + +### State Variables + +#### \_\_self + +```solidity +address internal immutable __self = address(this); +``` + +### Functions + +#### supportsInterface + +Checks if the given interfaceId is supported by this contract. + +_Overrides the functionality from IERC165 and WorldContextConsumer to check for supported interfaces._ + +```solidity +function supportsInterface( + bytes4 interfaceId +) public pure virtual override(IERC165, WorldContextConsumer) returns (bool); +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | -------- | ---------------------------------------- | +| `interfaceId` | `bytes4` | The bytes4 identifier for the interface. | + +**Returns** + +| Name | Type | Description | +| -------- | ------ | ---------------------------------------------------- | +| `` | `bool` | true if the interface is supported, false otherwise. | + +#### isInstalled + +_Check if a module with the given name and arguments is installed._ + +```solidity +function isInstalled(address moduleAddress, bytes memory encodedArgs) internal view returns (bool); +``` + +**Parameters** + +| Name | Type | Description | +| --------------- | --------- | ------------------------------------------------------ | +| `moduleAddress` | `address` | The address of the module. | +| `encodedArgs` | `bytes` | The ABI encoded arguments for the module installation. | + +**Returns** + +| Name | Type | Description | +| -------- | ------ | ------------------------------------------------- | +| `` | `bool` | true if the module is installed, false otherwise. | + +#### requireNotInstalled + +_Revert if the module with the given name and arguments is already installed._ + +```solidity +function requireNotInstalled(address moduleAddress, bytes memory encodedArgs) internal view; +``` + +**Parameters** + +| Name | Type | Description | +| --------------- | --------- | ------------------------------------------------------ | +| `moduleAddress` | `address` | The address of the module. | +| `encodedArgs` | `bytes` | The ABI encoded arguments for the module installation. | diff --git a/docs/pages/world/reference/resource-ids.mdx b/docs/pages/world/reference/resource-ids.mdx new file mode 100644 index 0000000000..4412bf98b7 --- /dev/null +++ b/docs/pages/world/reference/resource-ids.mdx @@ -0,0 +1,215 @@ +[//]: # "This file is autogenerated, do not change manually" + +## WorldResourceId.sol constants + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/world/src/WorldResourceId.sol) + +#### NAMESPACE_BYTES + +```solidity +uint256 constant NAMESPACE_BYTES = 14; +``` + +#### NAMESPACE_BITS + +```solidity +uint256 constant NAMESPACE_BITS = 14 * 8; +``` + +#### NAME_BITS + +```solidity +uint256 constant NAME_BITS = 16 * 8; +``` + +#### NAMESPACE_MASK + +```solidity +bytes32 constant NAMESPACE_MASK = bytes32(~bytes14("")) >> (TYPE_BITS); +``` + +## WorldResourceIdInstance + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/world/src/WorldResourceId.sol) + +A library for handling instances of World Resource IDs. + +### Functions + +#### getNamespace + +Get the namespace from a resource ID. + +```solidity +function getNamespace(ResourceId resourceId) internal pure returns (bytes14); +``` + +**Parameters** + +| Name | Type | Description | +| ------------ | ------------ | ---------------- | +| `resourceId` | `ResourceId` | The resource ID. | + +**Returns** + +| Name | Type | Description | +| -------- | --------- | -------------------- | +| `` | `bytes14` | A 14-byte namespace. | + +#### getNamespaceId + +Get the namespace ID from a resource ID. + +```solidity +function getNamespaceId(ResourceId resourceId) internal pure returns (ResourceId); +``` + +**Parameters** + +| Name | Type | Description | +| ------------ | ------------ | ---------------- | +| `resourceId` | `ResourceId` | The resource ID. | + +**Returns** + +| Name | Type | Description | +| -------- | ------------ | -------------------------------- | +| `` | `ResourceId` | A 32-byte namespace resource ID. | + +#### getName + +Get the name from a resource ID. + +```solidity +function getName(ResourceId resourceId) internal pure returns (bytes16); +``` + +**Parameters** + +| Name | Type | Description | +| ------------ | ------------ | ---------------- | +| `resourceId` | `ResourceId` | The resource ID. | + +**Returns** + +| Name | Type | Description | +| -------- | --------- | --------------- | +| `` | `bytes16` | A 16-byte name. | + +#### toString + +Convert a resource ID to a string. + +```solidity +function toString(ResourceId resourceId) internal pure returns (string memory); +``` + +**Parameters** + +| Name | Type | Description | +| ------------ | ------------ | ---------------- | +| `resourceId` | `ResourceId` | The resource ID. | + +**Returns** + +| Name | Type | Description | +| -------- | -------- | ------------------------------------------- | +| `` | `string` | A string representation of the resource ID. | + +## WorldResourceIdLib + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/world/src/WorldResourceId.sol) + +A library for handling World Resource ID encoding and decoding. + +### Functions + +#### encode + +Encode a resource ID. + +```solidity +function encode(bytes2 typeId, bytes14 namespace, bytes16 name) internal pure returns (ResourceId); +``` + +**Parameters** + +| Name | Type | Description | +| ----------- | --------- | ------------------------------ | +| `typeId` | `bytes2` | The resource type ID. | +| `namespace` | `bytes14` | The namespace of the resource. | +| `name` | `bytes16` | The name of the resource. | + +**Returns** + +| Name | Type | Description | +| -------- | ------------ | ---------------------- | +| `` | `ResourceId` | A 32-byte resource ID. | + +#### encodeNamespace + +Encode a namespace to resource ID. + +```solidity +function encodeNamespace(bytes14 namespace) internal pure returns (ResourceId); +``` + +**Parameters** + +| Name | Type | Description | +| ----------- | --------- | ---------------------------- | +| `namespace` | `bytes14` | The namespace to be encoded. | + +**Returns** + +| Name | Type | Description | +| -------- | ------------ | ------------------------------------------------- | +| `` | `ResourceId` | A 32-byte resource ID with the namespace encoded. | + +#### toTrimmedString + +Convert a padded string to a trimmed string. + +```solidity +function toTrimmedString(bytes16 paddedString) internal pure returns (string memory); +``` + +**Parameters** + +| Name | Type | Description | +| -------------- | --------- | ---------------------------------------- | +| `paddedString` | `bytes16` | The input string with potential padding. | + +**Returns** + +| Name | Type | Description | +| -------- | -------- | ------------------------------------------------ | +| `` | `string` | A string without trailing null ASCII characters. | + +## worldResourceTypes.sol constants + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/world/src/worldResourceTypes.sol) + +#### RESOURCE_NAMESPACE + +_World Resource Types_ + +_Constants related to World Resource Types and Masks._ + +_These constants are used to represent various resource types within the system._ + +```solidity +bytes2 constant RESOURCE_NAMESPACE = "ns"; +``` + +#### RESOURCE_SYSTEM + +```solidity +bytes2 constant RESOURCE_SYSTEM = "sy"; +``` + +#### MASK_RESOURCE_NAMESPACE + +```solidity +bytes32 constant MASK_RESOURCE_NAMESPACE = bytes32(RESOURCE_NAMESPACE); +``` diff --git a/docs/pages/world/reference/system-external.mdx b/docs/pages/world/reference/system-external.mdx new file mode 100644 index 0000000000..a465708ea1 --- /dev/null +++ b/docs/pages/world/reference/system-external.mdx @@ -0,0 +1,50 @@ +[//]: # "This file is autogenerated, do not change manually" + +## ISystemHook + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/world/src/ISystemHook.sol) + +**Inherits:** +[IERC165](/world/reference/internal/erc165-external#ierc165) + +_Interface defining system hooks for external functionality. +Provides pre and post hooks that can be triggered before and after a system call respectively. +This interface adheres to the ERC-165 standard for determining interface support._ + +### Functions + +#### onBeforeCallSystem + +Executes before a system call. + +_Provides the ability to add custom logic or checks before a system is invoked._ + +```solidity +function onBeforeCallSystem(address msgSender, ResourceId systemId, bytes memory callData) external; +``` + +**Parameters** + +| Name | Type | Description | +| ----------- | ------------ | ------------------------------------------- | +| `msgSender` | `address` | The original sender of the system call. | +| `systemId` | `ResourceId` | The identifier for the system being called. | +| `callData` | `bytes` | Data being sent as part of the system call. | + +#### onAfterCallSystem + +Executes after a system call. + +_Provides the ability to add custom logic or checks after a system call completes._ + +```solidity +function onAfterCallSystem(address msgSender, ResourceId systemId, bytes memory callData) external; +``` + +**Parameters** + +| Name | Type | Description | +| ----------- | ------------ | ---------------------------------------------- | +| `msgSender` | `address` | The original sender of the system call. | +| `systemId` | `ResourceId` | The identifier for the system that was called. | +| `callData` | `bytes` | Data that was sent as part of the system call. | diff --git a/docs/pages/world/reference/system.mdx b/docs/pages/world/reference/system.mdx new file mode 100644 index 0000000000..f03932f116 --- /dev/null +++ b/docs/pages/world/reference/system.mdx @@ -0,0 +1,77 @@ +[//]: # "This file is autogenerated, do not change manually" + +## System + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/world/src/System.sol) + +**Inherits:** +[WorldContextConsumer](/world/reference/world-context#worldcontextconsumer) + +_The System contract currently acts as an alias for `WorldContextConsumer`. +This structure is chosen for potential extensions in the future, where default functionality might be added to the System._ + +## SystemHook + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/world/src/SystemHook.sol) + +**Inherits:** +[ISystemHook](/world/reference/system-external#isystemhook) + +_The abstract SystemHook contract implements the ERC-165 supportsInterface function for ISystemHook. +System hooks are used for executing additional logic before or after certain system actions._ + +### Functions + +#### supportsInterface + +Checks if the contract implements a given interface. + +_Overridden from IERC165 to include the system hook interface._ + +```solidity +function supportsInterface(bytes4 interfaceId) public view virtual returns (bool); +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | -------- | --------------------------------------------------------- | +| `interfaceId` | `bytes4` | The bytes4 interface identifier, as specified in ERC-165. | + +**Returns** + +| Name | Type | Description | +| -------- | ------ | --------------------------------------------------------------- | +| `` | `bool` | true if the contract implements `interfaceId`, false otherwise. | + +## systemHookTypes.sol constants + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/world/src/systemHookTypes.sol) + +#### BEFORE_CALL_SYSTEM + +_This file provides constants for defining the different types of system hooks. +System hooks can be used to execute additional logic before or after system actions._ + +_Constant representing a hook that is triggered before a system call._ + +```solidity +uint8 constant BEFORE_CALL_SYSTEM = 1 << 0; +``` + +#### AFTER_CALL_SYSTEM + +_Constant representing a hook that is triggered after a system call._ + +```solidity +uint8 constant AFTER_CALL_SYSTEM = 1 << 1; +``` + +#### ALL + +_Constant representing all types of system hooks. +It's a bitmap with flags from all system hook types enabled._ + +```solidity +uint8 constant ALL = BEFORE_CALL_SYSTEM | AFTER_CALL_SYSTEM; +``` diff --git a/docs/pages/world/reference/world-context-external.mdx b/docs/pages/world/reference/world-context-external.mdx new file mode 100644 index 0000000000..cb3469d2f7 --- /dev/null +++ b/docs/pages/world/reference/world-context-external.mdx @@ -0,0 +1,63 @@ +[//]: # "This file is autogenerated, do not change manually" + +## IWorldContextConsumer + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/world/src/IWorldContextConsumer.sol) + +**Inherits:** +[IERC165](/world/reference/internal/erc165-external#ierc165) + +This contract is designed to extract trusted context values (like msg.sender and msg.value) +from the appended calldata. It provides mechanisms similar to EIP-2771 (https://eips.ethereum.org/EIPS/eip-2771), +but allowing any contract to be the trusted forwarder. + +_World Context Consumer Interface +This interface defines the functions a contract needs to consume the world context. +It includes helper functions to retrieve the message sender, value, and world address. +Additionally, it integrates with the ERC-165 standard for interface detection._ + +_This contract should only be used for contracts without their own storage, like Systems._ + +### Functions + +#### \_msgSender + +Extract the `msg.sender` from the context appended to the calldata. + +```solidity +function _msgSender() external view returns (address); +``` + +**Returns** + +| Name | Type | Description | +| -------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------- | +| `` | `address` | The address of the `msg.sender` that called the World contract before the World routed the call to the WorldContextConsumer contract. | + +#### \_msgValue + +Extract the `msg.value` from the context appended to the calldata. + +```solidity +function _msgValue() external view returns (uint256); +``` + +**Returns** + +| Name | Type | Description | +| -------- | --------- | ------------------------------------------------------------------------------------------------------------------------ | +| `` | `uint256` | The `msg.value` in the call to the World contract before the World routed the call to the WorldContextConsumer contract. | + +#### \_world + +Get the address of the World contract that routed the call to this WorldContextConsumer. + +```solidity +function _world() external view returns (address); +``` + +**Returns** + +| Name | Type | Description | +| -------- | --------- | ------------------------------------------------------------------------------------ | +| `` | `address` | The address of the World contract that routed the call to this WorldContextConsumer. | diff --git a/docs/pages/world/reference/world-context.mdx b/docs/pages/world/reference/world-context.mdx new file mode 100644 index 0000000000..514178c281 --- /dev/null +++ b/docs/pages/world/reference/world-context.mdx @@ -0,0 +1,286 @@ +[//]: # "This file is autogenerated, do not change manually" + +## WorldContextConsumer + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/world/src/WorldContext.sol) + +**Inherits:** +[IWorldContextConsumer](/world/reference/world-context-external#iworldcontextconsumer) + +This contract is designed to extract trusted context values (like msg.sender and msg.value) +from the appended calldata. It provides mechanisms similar to EIP-2771 (https://eips.ethereum.org/EIPS/eip-2771), +but allowing any contract to be the trusted forwarder. + +_This contract should only be used for contracts without their own storage, like Systems._ + +### Functions + +#### \_msgSender + +Extract the `msg.sender` from the context appended to the calldata. + +```solidity +function _msgSender() public view returns (address sender); +``` + +**Returns** + +| Name | Type | Description | +| -------- | --------- | ------------------------------------------------------------------------------------------------------------------------- | +| `sender` | `address` | The `msg.sender` in the call to the World contract before the World routed the call to the WorldContextConsumer contract. | + +#### \_msgValue + +Extract the `msg.value` from the context appended to the calldata. + +```solidity +function _msgValue() public pure returns (uint256 value); +``` + +**Returns** + +| Name | Type | Description | +| ------- | --------- | ------------------------------------------------------------------------------------------------------------------------ | +| `value` | `uint256` | The `msg.value` in the call to the World contract before the World routed the call to the WorldContextConsumer contract. | + +#### \_world + +Get the address of the World contract that routed the call to this WorldContextConsumer. + +```solidity +function _world() public view returns (address); +``` + +**Returns** + +| Name | Type | Description | +| -------- | --------- | ------------------------------------------------------------------------------------ | +| `` | `address` | The address of the World contract that routed the call to this WorldContextConsumer. | + +#### supportsInterface + +Checks if an interface is supported by the contract. +using ERC-165 supportsInterface (see https://eips.ethereum.org/EIPS/eip-165) + +```solidity +function supportsInterface(bytes4 interfaceId) public pure virtual returns (bool); +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | -------- | ------------------------------------ | +| `interfaceId` | `bytes4` | The ID of the interface in question. | + +**Returns** + +| Name | Type | Description | +| -------- | ------ | ---------------------------------------------------- | +| `` | `bool` | True if the interface is supported, false otherwise. | + +## WorldContext.sol constants + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/world/src/WorldContext.sol) + +#### CONTEXT_BYTES + +```solidity +uint256 constant CONTEXT_BYTES = 20 + 32; +``` + +## WorldContextConsumerLib + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/world/src/WorldContext.sol) + +### Functions + +#### \_msgSender + +Extract the `msg.sender` from the context appended to the calldata. + +```solidity +function _msgSender() internal view returns (address sender); +``` + +**Returns** + +| Name | Type | Description | +| -------- | --------- | ------------------------------------------------------------------------------------------------------------------------- | +| `sender` | `address` | The `msg.sender` in the call to the World contract before the World routed the call to the WorldContextConsumer contract. | + +#### \_msgValue + +Extract the `msg.value` from the context appended to the calldata. + +```solidity +function _msgValue() internal pure returns (uint256 value); +``` + +**Returns** + +| Name | Type | Description | +| ------- | --------- | ------------------------------------------------------------------------------------------------------------------------ | +| `value` | `uint256` | The `msg.value` in the call to the World contract before the World routed the call to the WorldContextConsumer contract. | + +#### \_world + +Get the address of the World contract that routed the call to this WorldContextConsumer. + +```solidity +function _world() internal view returns (address); +``` + +**Returns** + +| Name | Type | Description | +| -------- | --------- | ------------------------------------------------------------------------------------ | +| `` | `address` | The address of the World contract that routed the call to this WorldContextConsumer. | + +## WorldContextProviderLib + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/world/src/WorldContext.sol) + +This library provides functions to make calls or delegatecalls to other contracts, +appending the context values (like msg.sender and msg.value) to the calldata for WorldContextConsumer to consume. + +### Functions + +#### appendContext + +Appends context values to the given calldata. + +```solidity +function appendContext(bytes memory callData, address msgSender, uint256 msgValue) internal pure returns (bytes memory); +``` + +**Parameters** + +| Name | Type | Description | +| ----------- | --------- | ------------------------------------------------------- | +| `callData` | `bytes` | The original calldata. | +| `msgSender` | `address` | The address of the transaction sender. | +| `msgValue` | `uint256` | The amount of ether sent with the original transaction. | + +**Returns** + +| Name | Type | Description | +| -------- | ------- | ---------------------------------------------- | +| `` | `bytes` | The new calldata with context values appended. | + +#### callWithContext + +Makes a call to the target contract with context values appended to the calldata. + +```solidity +function callWithContext( + address msgSender, + uint256 msgValue, + address target, + bytes memory callData +) internal returns (bool success, bytes memory data); +``` + +**Parameters** + +| Name | Type | Description | +| ----------- | --------- | ------------------------------------------------------- | +| `msgSender` | `address` | The address of the transaction sender. | +| `msgValue` | `uint256` | The amount of ether sent with the original transaction. | +| `target` | `address` | The address of the contract to call. | +| `callData` | `bytes` | The calldata for the call. | + +**Returns** + +| Name | Type | Description | +| --------- | ------- | ------------------------------------------------------------ | +| `success` | `bool` | A boolean indicating whether the call was successful or not. | +| `data` | `bytes` | The abi encoded return data from the call. | + +#### delegatecallWithContext + +Makes a delegatecall to the target contract with context values appended to the calldata. + +```solidity +function delegatecallWithContext( + address msgSender, + uint256 msgValue, + address target, + bytes memory callData +) internal returns (bool success, bytes memory data); +``` + +**Parameters** + +| Name | Type | Description | +| ----------- | --------- | ------------------------------------------------------- | +| `msgSender` | `address` | The address of the transaction sender. | +| `msgValue` | `uint256` | The amount of ether sent with the original transaction. | +| `target` | `address` | The address of the contract to call. | +| `callData` | `bytes` | The calldata for the call. | + +**Returns** + +| Name | Type | Description | +| --------- | ------- | ------------------------------------------------------------ | +| `success` | `bool` | A boolean indicating whether the call was successful or not. | +| `data` | `bytes` | The abi encoded return data from the call. | + +#### callWithContextOrRevert + +Makes a call to the target contract with context values appended to the calldata. + +_Revert in the case of failure._ + +```solidity +function callWithContextOrRevert( + address msgSender, + uint256 msgValue, + address target, + bytes memory callData +) internal returns (bytes memory data); +``` + +**Parameters** + +| Name | Type | Description | +| ----------- | --------- | ------------------------------------------------------- | +| `msgSender` | `address` | The address of the transaction sender. | +| `msgValue` | `uint256` | The amount of ether sent with the original transaction. | +| `target` | `address` | The address of the contract to call. | +| `callData` | `bytes` | The calldata for the call. | + +**Returns** + +| Name | Type | Description | +| ------ | ------- | ------------------------------------------ | +| `data` | `bytes` | The abi encoded return data from the call. | + +#### delegatecallWithContextOrRevert + +Makes a delegatecall to the target contract with context values appended to the calldata. + +_Revert in the case of failure._ + +```solidity +function delegatecallWithContextOrRevert( + address msgSender, + uint256 msgValue, + address target, + bytes memory callData +) internal returns (bytes memory data); +``` + +**Parameters** + +| Name | Type | Description | +| ----------- | --------- | ------------------------------------------------------- | +| `msgSender` | `address` | The address of the transaction sender. | +| `msgValue` | `uint256` | The amount of ether sent with the original transaction. | +| `target` | `address` | The address of the contract to call. | +| `callData` | `bytes` | The calldata for the call. | + +**Returns** + +| Name | Type | Description | +| ------ | ------- | ------------------------------------------ | +| `data` | `bytes` | The abi encoded return data from the call. | diff --git a/docs/pages/world/reference/world-external.mdx b/docs/pages/world/reference/world-external.mdx new file mode 100644 index 0000000000..3a587a5f10 --- /dev/null +++ b/docs/pages/world/reference/world-external.mdx @@ -0,0 +1,927 @@ +[//]: # "This file is autogenerated, do not change manually" + +## IBaseWorld + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/world/src/codegen/interfaces/IBaseWorld.sol) + +**Inherits:** +[IStore](/store/reference/store#istore), [IWorldKernel](/world/reference/world-external#iworldkernel), [IAccessManagementSystem](/world/reference/world-external#iaccessmanagementsystem), [IBalanceTransferSystem](/world/reference/world-external#ibalancetransfersystem), [IBatchCallSystem](/world/reference/world-external#ibatchcallsystem), [IModuleInstallationSystem](/world/reference/world-external#imoduleinstallationsystem), [IWorldRegistrationSystem](/world/reference/world-external#iworldregistrationsystem), [IRegistrationSystem](/world/reference/world-external#iregistrationsystem) + +This interface integrates all systems and associated function selectors +that are dynamically registered in the World during deployment. + +_._ + +### Functions + +#### storeVersion + +Retrieves the version of the store. + +```solidity +function storeVersion() public pure returns (bytes32); +``` + +**Returns** + +| Name | Type | Description | +| -------- | --------- | ---------------------------------------------- | +| `` | `bytes32` | The current version of the store as a bytes32. | + +#### registerTable + +```solidity +function registerTable( + ResourceId tableId, + FieldLayout fieldLayout, + Schema keySchema, + Schema valueSchema, + string[] calldata keyNames, + string[] calldata fieldNames +) external; +``` + +#### registerStoreHook + +```solidity +function registerStoreHook(ResourceId tableId, IStoreHook hookAddress, uint8 enabledHooksBitmap) external; +``` + +#### unregisterStoreHook + +```solidity +function unregisterStoreHook(ResourceId tableId, IStoreHook hookAddress) external; +``` + +#### grantAccess + +Grant access to the resource at the given resource ID. + +_Requires the caller to own the namespace._ + +```solidity +function grantAccess(ResourceId resourceId, address grantee) public virtual onlyDelegatecall; +``` + +**Parameters** + +| Name | Type | Description | +| ------------ | ------------ | ---------------------------------------------- | +| `resourceId` | `ResourceId` | The ID of the resource to grant access to. | +| `grantee` | `address` | The address to which access should be granted. | + +#### revokeAccess + +Revoke access from the resource at the given resource ID. + +_Requires the caller to own the namespace._ + +```solidity +function revokeAccess(ResourceId resourceId, address grantee) public virtual onlyDelegatecall; +``` + +**Parameters** + +| Name | Type | Description | +| ------------ | ------------ | ------------------------------------------------ | +| `resourceId` | `ResourceId` | The ID of the resource to revoke access from. | +| `grantee` | `address` | The address from which access should be revoked. | + +#### transferOwnership + +Transfer ownership of the given namespace to newOwner and manages the access. + +_Requires the caller to own the namespace. Revoke ResourceAccess for previous owner and grant to newOwner._ + +```solidity +function transferOwnership(ResourceId namespaceId, address newOwner) public virtual onlyDelegatecall; +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | ------------ | ----------------------------------------------------- | +| `namespaceId` | `ResourceId` | The ID of the namespace to transfer ownership. | +| `newOwner` | `address` | The address to which ownership should be transferred. | + +#### renounceOwnership + +Renounces ownership of the given namespace + +_Requires the caller to own the namespace. Revoke ResourceAccess for previous owner_ + +```solidity +function renounceOwnership(ResourceId namespaceId) public virtual onlyDelegatecall; +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | ------------ | ---------------------------------------------- | +| `namespaceId` | `ResourceId` | The ID of the namespace to transfer ownership. | + +#### transferBalanceToNamespace + +Transfer balance to another namespace in the World. + +_Requires the caller to have access to the source namespace and ensures the destination namespace type is valid._ + +```solidity +function transferBalanceToNamespace( + ResourceId fromNamespaceId, + ResourceId toNamespaceId, + uint256 amount +) public virtual onlyDelegatecall; +``` + +**Parameters** + +| Name | Type | Description | +| ----------------- | ------------ | ------------------------------------------------------------- | +| `fromNamespaceId` | `ResourceId` | The source namespace from which the balance will be deducted. | +| `toNamespaceId` | `ResourceId` | The target namespace where the balance will be added. | +| `amount` | `uint256` | The amount to transfer. | + +#### transferBalanceToAddress + +Transfer balance out of the World to a specific address. + +_Requires the caller to have access to the source namespace and ensures sufficient balance before transfer._ + +```solidity +function transferBalanceToAddress( + ResourceId fromNamespaceId, + address toAddress, + uint256 amount +) public virtual onlyDelegatecall; +``` + +**Parameters** + +| Name | Type | Description | +| ----------------- | ------------ | ------------------------------------------------------------- | +| `fromNamespaceId` | `ResourceId` | The source namespace from which the balance will be deducted. | +| `toAddress` | `address` | The target address where the balance will be sent. | +| `amount` | `uint256` | The amount to transfer. | + +#### batchCall + +Make batch calls to multiple systems into a single transaction. + +_Iterates through an array of system calls, executes them, and returns an array of return data._ + +```solidity +function batchCall(SystemCallData[] calldata systemCalls) public onlyDelegatecall returns (bytes[] memory returnDatas); +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | ------------------ | ----------------------------------------------------------------------------- | +| `systemCalls` | `SystemCallData[]` | An array of SystemCallData that contains systemId and callData for each call. | + +**Returns** + +| Name | Type | Description | +| ------------- | --------- | ------------------------------------------------------------------ | +| `returnDatas` | `bytes[]` | An array of bytes containing the return data for each system call. | + +#### batchCallFrom + +Make batch calls from specific addresses to multiple systems in a single transaction. + +_Iterates through an array of system calls with specified 'from' addresses, executes them, and returns an array of return data._ + +```solidity +function batchCallFrom( + SystemCallFromData[] calldata systemCalls +) public onlyDelegatecall returns (bytes[] memory returnDatas); +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | ---------------------- | ---------------------------------------------------------------------------------------- | +| `systemCalls` | `SystemCallFromData[]` | An array of SystemCallFromData that contains from, systemId, and callData for each call. | + +**Returns** + +| Name | Type | Description | +| ------------- | --------- | ------------------------------------------------------------------ | +| `returnDatas` | `bytes[]` | An array of bytes containing the return data for each system call. | + +#### installModule + +Installs a module into the World under a specified namespace. + +_Validates the given module against the IModule interface and delegates the installation process. +The module is then registered in the InstalledModules table._ + +```solidity +function installModule(IModule module, bytes memory encodedArgs) public onlyDelegatecall; +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | --------- | -------------------------------------------------- | +| `module` | `IModule` | The module to be installed. | +| `encodedArgs` | `bytes` | The ABI encoded arguments for module installation. | + +#### registerNamespace + +Registers a new namespace + +_Creates a new namespace resource with the given ID_ + +```solidity +function registerNamespace(ResourceId namespaceId) public virtual onlyDelegatecall; +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | ------------ | ------------------------------------------- | +| `namespaceId` | `ResourceId` | The unique identifier for the new namespace | + +#### registerSystemHook + +Registers a new system hook + +_Adds a new hook for the system at the provided system ID_ + +```solidity +function registerSystemHook( + ResourceId systemId, + ISystemHook hookAddress, + uint8 enabledHooksBitmap +) public virtual onlyDelegatecall; +``` + +**Parameters** + +| Name | Type | Description | +| -------------------- | ------------- | ----------------------------------------- | +| `systemId` | `ResourceId` | The ID of the system | +| `hookAddress` | `ISystemHook` | The address of the hook being registered | +| `enabledHooksBitmap` | `uint8` | Bitmap indicating which hooks are enabled | + +#### unregisterSystemHook + +Unregisters a system hook + +_Removes a hook for the system at the provided system ID_ + +```solidity +function unregisterSystemHook(ResourceId systemId, ISystemHook hookAddress) public virtual onlyDelegatecall; +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | ------------- | ------------------------------------------ | +| `systemId` | `ResourceId` | The ID of the system | +| `hookAddress` | `ISystemHook` | The address of the hook being unregistered | + +#### registerSystem + +Registers a system + +_Registers or upgrades a system at the given ID +If the namespace doesn't exist yet, it is registered. +The system is granted access to its namespace, so it can write to any +table in the same namespace. +If publicAccess is true, no access control check is performed for calling the system. +This function doesn't check whether a system already exists at the given selector, +making it possible to upgrade systems._ + +```solidity +function registerSystem(ResourceId systemId, System system, bool publicAccess) public virtual onlyDelegatecall; +``` + +**Parameters** + +| Name | Type | Description | +| -------------- | ------------ | --------------------------------------------------- | +| `systemId` | `ResourceId` | The unique identifier for the system | +| `system` | `System` | The system being registered | +| `publicAccess` | `bool` | Flag indicating if access control check is bypassed | + +#### registerFunctionSelector + +Registers a new World function selector + +_Creates a mapping between a World function and its associated system function_ + +```solidity +function registerFunctionSelector( + ResourceId systemId, + string memory systemFunctionSignature +) public onlyDelegatecall returns (bytes4 worldFunctionSelector); +``` + +**Parameters** + +| Name | Type | Description | +| ------------------------- | ------------ | ------------------------------------ | +| `systemId` | `ResourceId` | The system ID | +| `systemFunctionSignature` | `string` | The signature of the system function | + +**Returns** + +| Name | Type | Description | +| ----------------------- | -------- | ---------------------------------- | +| `worldFunctionSelector` | `bytes4` | The selector of the World function | + +#### registerRootFunctionSelector + +Registers a root World function selector + +_Creates a mapping for a root World function without namespace or name prefix_ + +```solidity +function registerRootFunctionSelector( + ResourceId systemId, + string memory worldFunctionSignature, + bytes4 systemFunctionSelector +) public onlyDelegatecall returns (bytes4 worldFunctionSelector); +``` + +**Parameters** + +| Name | Type | Description | +| ------------------------ | ------------ | ----------------------------------- | +| `systemId` | `ResourceId` | The system ID | +| `worldFunctionSignature` | `string` | The signature of the World function | +| `systemFunctionSelector` | `bytes4` | The selector of the system function | + +**Returns** + +| Name | Type | Description | +| ----------------------- | -------- | ---------------------------------- | +| `worldFunctionSelector` | `bytes4` | The selector of the World function | + +#### registerDelegation + +Registers a delegation for the caller + +_Creates a new delegation from the caller to the specified delegatee_ + +```solidity +function registerDelegation( + address delegatee, + ResourceId delegationControlId, + bytes memory initCallData +) public onlyDelegatecall; +``` + +**Parameters** + +| Name | Type | Description | +| --------------------- | ------------ | ------------------------------------------ | +| `delegatee` | `address` | The address of the delegatee | +| `delegationControlId` | `ResourceId` | The ID controlling the delegation | +| `initCallData` | `bytes` | The initialization data for the delegation | + +#### unregisterDelegation + +Unregisters a delegation + +_Deletes the new delegation from the caller to the specified delegatee_ + +```solidity +function unregisterDelegation(address delegatee) public onlyDelegatecall; +``` + +**Parameters** + +| Name | Type | Description | +| ----------- | --------- | ---------------------------- | +| `delegatee` | `address` | The address of the delegatee | + +#### registerNamespaceDelegation + +Registers a delegation for a namespace + +_Sets up a new delegation control for a specific namespace_ + +```solidity +function registerNamespaceDelegation( + ResourceId namespaceId, + ResourceId delegationControlId, + bytes memory initCallData +) public onlyDelegatecall; +``` + +**Parameters** + +| Name | Type | Description | +| --------------------- | ------------ | ------------------------------------------ | +| `namespaceId` | `ResourceId` | The ID of the namespace | +| `delegationControlId` | `ResourceId` | The ID controlling the delegation | +| `initCallData` | `bytes` | The initialization data for the delegation | + +#### unregisterNamespaceDelegation + +Unregisters a delegation for a namespace + +_Deletes the delegation control for a specific namespace_ + +```solidity +function unregisterNamespaceDelegation(ResourceId namespaceId) public onlyDelegatecall; +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | ------------ | ----------------------- | +| `namespaceId` | `ResourceId` | The ID of the namespace | + +### Errors + +#### Store_TableAlreadyExists + +```solidity +error Store_TableAlreadyExists(ResourceId tableId, string tableIdString); +``` + +#### Store_TableNotFound + +```solidity +error Store_TableNotFound(ResourceId tableId, string tableIdString); +``` + +#### Store_InvalidResourceType + +```solidity +error Store_InvalidResourceType(bytes2 expected, ResourceId resourceId, string resourceIdString); +``` + +#### Store_InvalidStaticDataLength + +```solidity +error Store_InvalidStaticDataLength(uint256 expected, uint256 received); +``` + +#### Store_InvalidBounds + +```solidity +error Store_InvalidBounds(uint256 start, uint256 end); +``` + +#### Store_IndexOutOfBounds + +```solidity +error Store_IndexOutOfBounds(uint256 length, uint256 accessedIndex); +``` + +#### Store_InvalidKeyNamesLength + +```solidity +error Store_InvalidKeyNamesLength(uint256 expected, uint256 received); +``` + +#### Store_InvalidFieldNamesLength + +```solidity +error Store_InvalidFieldNamesLength(uint256 expected, uint256 received); +``` + +#### Store_InvalidValueSchemaLength + +```solidity +error Store_InvalidValueSchemaLength(uint256 expected, uint256 received); +``` + +#### Store_InvalidValueSchemaStaticLength + +```solidity +error Store_InvalidValueSchemaStaticLength(uint256 expected, uint256 received); +``` + +#### Store_InvalidValueSchemaDynamicLength + +```solidity +error Store_InvalidValueSchemaDynamicLength(uint256 expected, uint256 received); +``` + +#### Store_InvalidSplice + +```solidity +error Store_InvalidSplice(uint40 startWithinField, uint40 deleteCount, uint40 fieldLength); +``` + +## IWorldCall + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/world/src/IWorldKernel.sol) + +_This interface defines the contract for executing calls on the World's systems._ + +### Functions + +#### call + +Call the system at the given system ID. + +_If the system is not public, the caller must have access to the namespace or name (encoded in the system ID)._ + +```solidity +function call(ResourceId systemId, bytes memory callData) external payable returns (bytes memory); +``` + +**Parameters** + +| Name | Type | Description | +| ---------- | ------------ | --------------------------------------------------------------------------------------------------- | +| `systemId` | `ResourceId` | The ID of the system to be called. | +| `callData` | `bytes` | The data to pass with the call, function selector (4 bytes) followed by the ABI encoded parameters. | + +**Returns** + +| Name | Type | Description | +| -------- | ------- | --------------------------------------------------- | +| `` | `bytes` | The abi encoded return data from the called system. | + +#### callFrom + +Call the system at the given system ID on behalf of the given delegator. + +_If the system is not public, the delegator must have access to the namespace or name (encoded in the system ID)._ + +```solidity +function callFrom( + address delegator, + ResourceId systemId, + bytes memory callData +) external payable returns (bytes memory); +``` + +**Parameters** + +| Name | Type | Description | +| ----------- | ------------ | --------------------------------------------------------------------------------------------------- | +| `delegator` | `address` | The address on whose behalf the call is made. | +| `systemId` | `ResourceId` | The ID of the system to be called. | +| `callData` | `bytes` | The data to pass with the call, function selector (4 bytes) followed by the ABI encoded parameters. | + +**Returns** + +| Name | Type | Description | +| -------- | ------- | --------------------------------------------------- | +| `` | `bytes` | The abi encoded return data from the called system. | + +## IWorldKernel + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/world/src/IWorldKernel.sol) + +**Inherits:** +[IWorldModuleInstallation](/world/reference/world-external#iworldmoduleinstallation), [IWorldCall](/world/reference/world-external#iworldcall), [IWorldErrors](/world/reference/world-external#iworlderrors) + +The IWorldKernel interface includes all methods that are part of the World contract's +internal bytecode. Consumers should use the `IBaseWorld` interface instead, which includes dynamically +registered functions selectors from the `InitModule`. + +### Functions + +#### worldVersion + +Retrieve the version of the World. + +```solidity +function worldVersion() external view returns (bytes32); +``` + +**Returns** + +| Name | Type | Description | +| -------- | --------- | ------------------------------------ | +| `` | `bytes32` | The version identifier of the World. | + +#### creator + +Retrieve the immutable original deployer of the World. + +```solidity +function creator() external view returns (address); +``` + +**Returns** + +| Name | Type | Description | +| -------- | --------- | ----------------------------------- | +| `` | `address` | The address of the World's creator. | + +#### initialize + +Initializes the World. + +_Can only be called once by the creator._ + +```solidity +function initialize(IModule initModule) external; +``` + +**Parameters** + +| Name | Type | Description | +| ------------ | --------- | ----------------------------------------------------- | +| `initModule` | `IModule` | The InitModule to be installed during initialization. | + +### Events + +#### HelloWorld + +_Emitted upon successful World initialization._ + +```solidity +event HelloWorld(bytes32 indexed worldVersion); +``` + +**Parameters** + +| Name | Type | Description | +| -------------- | --------- | ------------------------------------------- | +| `worldVersion` | `bytes32` | The version of the World being initialized. | + +## IWorldModuleInstallation + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/world/src/IWorldKernel.sol) + +_This interface defines the contract responsible for managing root modules installation._ + +### Functions + +#### installRootModule + +Install the given root module in the World. + +_Requires the caller to own the root namespace. The module is delegatecalled and installed in the root namespace._ + +```solidity +function installRootModule(IModule module, bytes memory encodedArgs) external; +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | --------- | ------------------------------------------------------ | +| `module` | `IModule` | The module to be installed. | +| `encodedArgs` | `bytes` | The ABI encoded arguments for the module installation. | + +## IWorldErrors + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/world/src/IWorldErrors.sol) + +_This interface contains custom error types for the World contract. These errors provide +more informative messages for certain operations within the World contract._ + +### Errors + +#### World_AlreadyInitialized + +Raised when trying to initialize an already initialized World. + +```solidity +error World_AlreadyInitialized(); +``` + +#### World_ResourceAlreadyExists + +Raised when trying to register a resource that already exists. + +```solidity +error World_ResourceAlreadyExists(ResourceId resourceId, string resourceIdString); +``` + +**Parameters** + +| Name | Type | Description | +| ------------------ | ------------ | --------------------------------------------- | +| `resourceId` | `ResourceId` | The ID of the resource. | +| `resourceIdString` | `string` | The string representation of the resource ID. | + +#### World_ResourceNotFound + +Raised when the specified resource is not found. + +```solidity +error World_ResourceNotFound(ResourceId resourceId, string resourceIdString); +``` + +**Parameters** + +| Name | Type | Description | +| ------------------ | ------------ | --------------------------------------------- | +| `resourceId` | `ResourceId` | The ID of the resource. | +| `resourceIdString` | `string` | The string representation of the resource ID. | + +#### World_AccessDenied + +Raised when a user tries to access a resource they don't have permission for. + +```solidity +error World_AccessDenied(string resource, address caller); +``` + +**Parameters** + +| Name | Type | Description | +| ---------- | --------- | ------------------------------------------------------ | +| `resource` | `string` | The resource's identifier. | +| `caller` | `address` | The address of the user trying to access the resource. | + +#### World_InvalidResourceId + +Raised when an invalid resource ID is provided. + +```solidity +error World_InvalidResourceId(ResourceId resourceId, string resourceIdString); +``` + +**Parameters** + +| Name | Type | Description | +| ------------------ | ------------ | --------------------------------------------- | +| `resourceId` | `ResourceId` | The ID of the resource. | +| `resourceIdString` | `string` | The string representation of the resource ID. | + +#### World_InvalidNamespace + +Raised when an namespace contains an invalid sequence of characters ("\_\_"). + +```solidity +error World_InvalidNamespace(bytes14 namespace); +``` + +**Parameters** + +| Name | Type | Description | +| ----------- | --------- | ---------------------- | +| `namespace` | `bytes14` | The invalid namespace. | + +#### World_SystemAlreadyExists + +Raised when trying to register a system that already exists. + +```solidity +error World_SystemAlreadyExists(address system); +``` + +**Parameters** + +| Name | Type | Description | +| -------- | --------- | -------------------------- | +| `system` | `address` | The address of the system. | + +#### World_FunctionSelectorAlreadyExists + +Raised when trying to register a function selector that already exists. + +```solidity +error World_FunctionSelectorAlreadyExists(bytes4 functionSelector); +``` + +**Parameters** + +| Name | Type | Description | +| ------------------ | -------- | ---------------------------------- | +| `functionSelector` | `bytes4` | The function selector in question. | + +#### World_FunctionSelectorNotFound + +Raised when the specified function selector is not found. + +```solidity +error World_FunctionSelectorNotFound(bytes4 functionSelector); +``` + +**Parameters** + +| Name | Type | Description | +| ------------------ | -------- | ---------------------------------- | +| `functionSelector` | `bytes4` | The function selector in question. | + +#### World_DelegationNotFound + +Raised when the specified delegation is not found. + +```solidity +error World_DelegationNotFound(address delegator, address delegatee); +``` + +**Parameters** + +| Name | Type | Description | +| ----------- | --------- | ----------------------------- | +| `delegator` | `address` | The address of the delegator. | +| `delegatee` | `address` | The address of the delegatee. | + +#### World_UnlimitedDelegationNotAllowed + +Raised when trying to create an unlimited delegation in a context where it is not allowed, +e.g. when registering a namespace fallback delegation. + +```solidity +error World_UnlimitedDelegationNotAllowed(); +``` + +#### World_InsufficientBalance + +Raised when there's an insufficient balance for a particular operation. + +```solidity +error World_InsufficientBalance(uint256 balance, uint256 amount); +``` + +**Parameters** + +| Name | Type | Description | +| --------- | --------- | -------------------- | +| `balance` | `uint256` | The current balance. | +| `amount` | `uint256` | The amount needed. | + +#### World_InterfaceNotSupported + +Raised when the specified interface is not supported by the contract. + +```solidity +error World_InterfaceNotSupported(address contractAddress, bytes4 interfaceId); +``` + +**Parameters** + +| Name | Type | Description | +| ----------------- | --------- | ---------------------------------------- | +| `contractAddress` | `address` | The address of the contract in question. | +| `interfaceId` | `bytes4` | The ID of the interface. | + +#### World_InvalidResourceType + +Raised when an invalid resource type is provided. + +```solidity +error World_InvalidResourceType(bytes2 expected, ResourceId resourceId, string resourceIdString); +``` + +**Parameters** + +| Name | Type | Description | +| ------------------ | ------------ | --------------------------------------------- | +| `expected` | `bytes2` | The expected resource type. | +| `resourceId` | `ResourceId` | The ID of the resource. | +| `resourceIdString` | `string` | The string representation of the resource ID. | + +#### World_CallbackNotAllowed + +Raised when the World is calling itself via an external call. + +```solidity +error World_CallbackNotAllowed(bytes4 functionSelector); +``` + +**Parameters** + +| Name | Type | Description | +| ------------------ | -------- | ------------------------------------------------- | +| `functionSelector` | `bytes4` | The function selector of the disallowed callback. | + +## IWorldFactory + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/world/src/IWorldFactory.sol) + +_This interface defines the contract responsible for deploying and keeping track +of World contract instances._ + +### Functions + +#### deployWorld + +Deploys a new World contract. + +_The deployment of the World contract will result in the `WorldDeployed` event being emitted._ + +```solidity +function deployWorld(bytes memory salt) external returns (address worldAddress); +``` + +**Returns** + +| Name | Type | Description | +| -------------- | --------- | ------------------------------------------------- | +| `worldAddress` | `address` | The address of the newly deployed World contract. | + +### Events + +#### WorldDeployed + +_Emitted when a new World contract is deployed._ + +```solidity +event WorldDeployed(address indexed newContract); +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | --------- | ------------------------------------------------- | +| `newContract` | `address` | The address of the newly deployed World contract. | diff --git a/docs/pages/world/reference/world.mdx b/docs/pages/world/reference/world.mdx new file mode 100644 index 0000000000..6ac0c4f3fd --- /dev/null +++ b/docs/pages/world/reference/world.mdx @@ -0,0 +1,446 @@ +[//]: # "This file is autogenerated, do not change manually" + +## World + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/world/src/World.sol) + +**Inherits:** +[StoreData](/store/reference/store-core#storedata), [IWorldKernel](/world/reference/world-external#iworldkernel) + +_This contract is the core "World" contract containing various methods for +data manipulation, system calls, and dynamic function selector handling._ + +### State Variables + +#### creator + +Address of the contract's creator. + +```solidity +address public immutable creator; +``` + +### Functions + +#### worldVersion + +```solidity +function worldVersion() public pure returns (bytes32); +``` + +**Returns** + +| Name | Type | Description | +| -------- | --------- | ------------------------------------------ | +| `` | `bytes32` | The current version of the world contract. | + +#### constructor + +_Event emitted when the World contract is created._ + +```solidity +constructor(); +``` + +#### prohibitDirectCallback + +_Prevents the World contract from calling itself._ + +```solidity +modifier prohibitDirectCallback(); +``` + +#### initialize + +Initializes the World by installing the core module. + +_Only the initial creator can initialize. This can be done only once._ + +```solidity +function initialize(IModule initModule) public prohibitDirectCallback; +``` + +**Parameters** + +| Name | Type | Description | +| ------------ | --------- | --------------------------------------------- | +| `initModule` | `IModule` | The core module to initialize the World with. | + +#### installRootModule + +Installs a given root module in the World. + +_The caller must own the root namespace._ + +```solidity +function installRootModule(IModule module, bytes memory encodedArgs) public prohibitDirectCallback; +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | --------- | -------------------------------------------------- | +| `module` | `IModule` | The module to be installed. | +| `encodedArgs` | `bytes` | The ABI encoded arguments for module installation. | + +#### setRecord + +WORLD STORE METHODS + +Writes a record in the table identified by `tableId`. + +_Requires the caller to have access to the table's namespace or name (encoded in the tableId)._ + +```solidity +function setRecord( + ResourceId tableId, + bytes32[] calldata keyTuple, + bytes calldata staticData, + PackedCounter encodedLengths, + bytes calldata dynamicData +) public virtual prohibitDirectCallback; +``` + +**Parameters** + +| Name | Type | Description | +| ---------------- | --------------- | ---------------------------------------------------- | +| `tableId` | `ResourceId` | The unique identifier for the table. | +| `keyTuple` | `bytes32[]` | Array of keys identifying the record. | +| `staticData` | `bytes` | Static data (fixed length fields) of the record. | +| `encodedLengths` | `PackedCounter` | Encoded lengths of data. | +| `dynamicData` | `bytes` | Dynamic data (variable length fields) of the record. | + +#### spliceStaticData + +Modifies static (fixed length) data in a record at the specified position. + +```solidity +function spliceStaticData( + ResourceId tableId, + bytes32[] calldata keyTuple, + uint48 start, + bytes calldata data +) public virtual prohibitDirectCallback; +``` + +**Parameters** + +| Name | Type | Description | +| ---------- | ------------ | -------------------------------------------------------------- | +| `tableId` | `ResourceId` | The unique identifier for the table. | +| `keyTuple` | `bytes32[]` | Array of keys identifying the record. | +| `start` | `uint48` | Position from where the static data modification should start. | +| `data` | `bytes` | Data to splice into the static data of the record. | + +#### spliceDynamicData + +Modifies dynamic (variable length) data in a record for a specified field. + +```solidity +function spliceDynamicData( + ResourceId tableId, + bytes32[] calldata keyTuple, + uint8 dynamicFieldIndex, + uint40 startWithinField, + uint40 deleteCount, + bytes calldata data +) public virtual prohibitDirectCallback; +``` + +**Parameters** + +| Name | Type | Description | +| ------------------- | ------------ | --------------------------------------------------------------- | +| `tableId` | `ResourceId` | The unique identifier for the table. | +| `keyTuple` | `bytes32[]` | Array of keys identifying the record. | +| `dynamicFieldIndex` | `uint8` | Index of the dynamic field to modify. | +| `startWithinField` | `uint40` | Start position within the specified dynamic field. | +| `deleteCount` | `uint40` | Number of bytes to delete starting from the `startWithinField`. | +| `data` | `bytes` | Data to splice into the dynamic data of the field. | + +#### setField + +Writes data into a specified field in the table identified by `tableId`. + +```solidity +function setField( + ResourceId tableId, + bytes32[] calldata keyTuple, + uint8 fieldIndex, + bytes calldata data +) public virtual prohibitDirectCallback; +``` + +**Parameters** + +| Name | Type | Description | +| ------------ | ------------ | --------------------------------------- | +| `tableId` | `ResourceId` | The unique identifier for the table. | +| `keyTuple` | `bytes32[]` | Array of keys identifying the record. | +| `fieldIndex` | `uint8` | Index of the field to modify. | +| `data` | `bytes` | Data to write into the specified field. | + +#### setField + +Writes data into a specified field in the table, adhering to a specific layout. + +```solidity +function setField( + ResourceId tableId, + bytes32[] calldata keyTuple, + uint8 fieldIndex, + bytes calldata data, + FieldLayout fieldLayout +) public virtual prohibitDirectCallback; +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | ------------- | ------------------------------------------------- | +| `tableId` | `ResourceId` | The unique identifier for the table. | +| `keyTuple` | `bytes32[]` | Array of keys identifying the record. | +| `fieldIndex` | `uint8` | Index of the field to modify. | +| `data` | `bytes` | Data to write into the specified field. | +| `fieldLayout` | `FieldLayout` | The layout to adhere to when modifying the field. | + +#### setStaticField + +Writes data into a static (fixed length) field in the table identified by `tableId`. + +_Requires the caller to have access to the table's namespace or name (encoded in the tableId)._ + +```solidity +function setStaticField( + ResourceId tableId, + bytes32[] calldata keyTuple, + uint8 fieldIndex, + bytes calldata data, + FieldLayout fieldLayout +) public virtual prohibitDirectCallback; +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | ------------- | ------------------------------------------------- | +| `tableId` | `ResourceId` | The unique identifier for the table. | +| `keyTuple` | `bytes32[]` | Array of keys identifying the record. | +| `fieldIndex` | `uint8` | Index of the static field to modify. | +| `data` | `bytes` | Data to write into the specified static field. | +| `fieldLayout` | `FieldLayout` | The layout to adhere to when modifying the field. | + +#### setDynamicField + +Writes data into a dynamic (varible length) field in the table identified by `tableId`. + +```solidity +function setDynamicField( + ResourceId tableId, + bytes32[] calldata keyTuple, + uint8 dynamicFieldIndex, + bytes calldata data +) public virtual prohibitDirectCallback; +``` + +**Parameters** + +| Name | Type | Description | +| ------------------- | ------------ | ----------------------------------------------- | +| `tableId` | `ResourceId` | The unique identifier for the table. | +| `keyTuple` | `bytes32[]` | Array of keys identifying the record. | +| `dynamicFieldIndex` | `uint8` | Index of the dynamic field to modify. | +| `data` | `bytes` | Data to write into the specified dynamic field. | + +#### pushToDynamicField + +Appends data to the end of a dynamic (variable length) field in the table identified by `tableId`. + +```solidity +function pushToDynamicField( + ResourceId tableId, + bytes32[] calldata keyTuple, + uint8 dynamicFieldIndex, + bytes calldata dataToPush +) public virtual prohibitDirectCallback; +``` + +**Parameters** + +| Name | Type | Description | +| ------------------- | ------------ | ---------------------------------------------- | +| `tableId` | `ResourceId` | The unique identifier for the table. | +| `keyTuple` | `bytes32[]` | Array of keys identifying the record. | +| `dynamicFieldIndex` | `uint8` | Index of the dynamic field to append to. | +| `dataToPush` | `bytes` | Data to append to the specified dynamic field. | + +#### popFromDynamicField + +Removes a specified amount of data from the end of a dynamic (variable length) field in the table identified by `tableId`. + +```solidity +function popFromDynamicField( + ResourceId tableId, + bytes32[] calldata keyTuple, + uint8 dynamicFieldIndex, + uint256 byteLengthToPop +) public virtual prohibitDirectCallback; +``` + +**Parameters** + +| Name | Type | Description | +| ------------------- | ------------ | ---------------------------------------------------------------- | +| `tableId` | `ResourceId` | The unique identifier for the table. | +| `keyTuple` | `bytes32[]` | Array of keys identifying the record. | +| `dynamicFieldIndex` | `uint8` | Index of the dynamic field to remove data from. | +| `byteLengthToPop` | `uint256` | The number of bytes to remove from the end of the dynamic field. | + +#### deleteRecord + +Deletes a record from the table identified by `tableId`. + +_Requires the caller to have access to the table's namespace or name._ + +```solidity +function deleteRecord(ResourceId tableId, bytes32[] calldata keyTuple) public virtual prohibitDirectCallback; +``` + +**Parameters** + +| Name | Type | Description | +| ---------- | ------------ | ----------------------------------------------- | +| `tableId` | `ResourceId` | The unique identifier for the table. | +| `keyTuple` | `bytes32[]` | Array of keys identifying the record to delete. | + +#### call + +SYSTEM CALLS + +Calls a system with a given system ID. + +_If system is private, caller must have appropriate access._ + +```solidity +function call( + ResourceId systemId, + bytes memory callData +) external payable virtual prohibitDirectCallback returns (bytes memory); +``` + +**Parameters** + +| Name | Type | Description | +| ---------- | ------------ | ---------------------------------- | +| `systemId` | `ResourceId` | The ID of the system to be called. | +| `callData` | `bytes` | The data for the system call. | + +**Returns** + +| Name | Type | Description | +| -------- | ------- | --------------------------------- | +| `` | `bytes` | Return data from the system call. | + +#### callFrom + +Calls a system with a given system ID on behalf of the given delegator. + +_If system is private, caller must have appropriate access._ + +```solidity +function callFrom( + address delegator, + ResourceId systemId, + bytes memory callData +) external payable virtual prohibitDirectCallback returns (bytes memory); +``` + +**Parameters** + +| Name | Type | Description | +| ----------- | ------------ | ------------------------------------------------- | +| `delegator` | `address` | The address on whose behalf the system is called. | +| `systemId` | `ResourceId` | The ID of the system to be called. | +| `callData` | `bytes` | The ABI data for the system call. | + +**Returns** + +| Name | Type | Description | +| -------- | ------- | --------------------------------- | +| `` | `bytes` | Return data from the system call. | + +#### receive + +DYNAMIC FUNCTION SELECTORS + +Accepts ETH and adds to the root namespace's balance. + +```solidity +receive() external payable; +``` + +#### fallback + +_Fallback function to call registered function selectors._ + +```solidity +fallback() external payable prohibitDirectCallback; +``` + +## WorldFactory + +[Git Source](https://github.com/latticexyz/mud/blob/main/packages/world/src/WorldFactory.sol) + +**Inherits:** +[IWorldFactory](/world/reference/world-external#iworldfactory) + +A factory contract to deploy new World instances. + +_This contract allows users to deploy a new World, install the InitModule, and transfer the ownership._ + +### State Variables + +#### initModule + +Address of the init module to be set in the World instances. + +```solidity +IModule public immutable initModule; +``` + +### Functions + +#### constructor + +```solidity +constructor(IModule _initModule); +``` + +**Parameters** + +| Name | Type | Description | +| ------------- | --------- | ------------------------------- | +| `_initModule` | `IModule` | The address of the init module. | + +#### deployWorld + +Deploys a new World instance, installs the InitModule and transfers ownership to the caller. + +_Uses the Create2 for deterministic deployment._ + +```solidity +function deployWorld(bytes memory salt) public returns (address worldAddress); +``` + +**Parameters** + +| Name | Type | Description | +| ------ | ------- | ----------------------------------------------------------------- | +| `salt` | `bytes` | User defined salt for deterministic world addresses across chains | + +**Returns** + +| Name | Type | Description | +| -------------- | --------- | ------------------------------------------------- | +| `worldAddress` | `address` | The address of the newly deployed World contract. | diff --git a/scripts/render-api-docs.ts b/scripts/render-api-docs.ts index 4ded2366c5..8e3e70fe98 100644 --- a/scripts/render-api-docs.ts +++ b/scripts/render-api-docs.ts @@ -14,15 +14,16 @@ const DOCS_ROOT = "docs/pages"; const PUBLIC_APIS: PublicApis = { "store/reference/store-core.mdx": { inputFiles: [ - { - source: "store/src/StoreCore.sol", - filterFiles: (fileName) => !fileName.includes("StoreCoreInternal"), - }, + { source: "store/src/StoreCore.sol" }, + { source: "store/src/StoreData.sol" }, + { source: "store/src/StoreRead.sol" }, + { source: "store/src/StoreSwitch.sol" }, ], processContent: (content) => { content = formatHeadings(content); - content = fixGithubLinks(content); - return content; + content = fixGithubLinks(content, "store"); + content = fixInheritence(content); + return content.replaceAll("SET DATA\n", "").replaceAll("GET DATA\n", "").replaceAll("HELPER FUNCTIONS\n", ""); }, }, "store/reference/store.mdx": { @@ -37,14 +38,9 @@ const PUBLIC_APIS: PublicApis = { ], processContent: (content) => { content = formatHeadings(content); - content = fixGithubLinks(content); - return content - .replace("/src/IStoreData.sol/interface.IStoreData.md", "#istoredata") - .replace("/src/IStoreRegistration.sol/interface.IStoreRegistration.md", "#istoreregistration") - .replace("/src/IStoreRead.sol/interface.IStoreRead.md", "#istoreread") - .replace("/src/IStoreWrite.sol/interface.IStoreWrite.md", "#istorewrite") - .replace("/src/IStoreEvents.sol/interface.IStoreEvents.md", "#istoreevents") - .replace("/src/IStoreErrors.sol/interface.IStoreErrors.md", "#istoreerrors"); + content = fixGithubLinks(content, "store"); + content = fixInheritence(content); + return content; }, }, "store/reference/store-hook.mdx": { @@ -55,24 +51,352 @@ const PUBLIC_APIS: PublicApis = { ], processContent: (content) => { content = formatHeadings(content); - content = fixGithubLinks(content); - return content.replace(`**Inherits:**\n[IERC165](/src/IERC165.sol/interface.IERC165.md)`, ""); + content = fixGithubLinks(content, "store"); + content = fixInheritence(content); + return content; + }, + }, + "store/reference/misc.mdx": { + inputFiles: [ + { source: "store/src/Bytes.sol" }, + { source: "store/src/FieldLayout.sol" }, + { source: "store/src/Hook.sol" }, + { source: "store/src/Memory.sol" }, + /* + { source: "store/src/PackedCounter.sol" }, + */ + { source: "store/src/ResourceId.sol" }, + { source: "store/src/Schema.sol" }, + { source: "store/src/Slice.sol" }, + { source: "store/src/Storage.sol" }, + { source: "store/src/constants.sol" }, + { source: "store/src/rightMask.sol" }, + { source: "store/src/storeHookTypes.sol" }, + { source: "store/src/storeResourceTypes.sol" }, + { source: "store/src/version.sol" }, + ], + processContent: (content) => { + content = formatHeadings(content); + content = fixGithubLinks(content, "store"); + content = fixInheritence(content); + return content + .replace("## Constants", "## ResourceId.sol constants") + .replace("## Constants", "## constants.sol") + .replace("## Constants", "## storeHookTypes.sol constants") + .replace("## Constants", "## storeResourceTypes.sol constants") + .replace("## Constants", "## version.sol constants"); + }, + }, + "world/reference/internal/access-control.mdx": { + inputFiles: [ + { + source: "world/src/AccessControl.sol", + }, + ], + processContent: (content) => { + content = formatHeadings(content); + content = fixGithubLinks(content, "world"); + content = fixInheritence(content); + return content; + }, + }, + "world/reference/internal/create.mdx": { + inputFiles: [{ source: "world/src/Create2.sol" }, { source: "world/src/Create2Factory.sol" }], + processContent: (content) => { + content = formatHeadings(content); + content = fixGithubLinks(content, "world"); + content = fixInheritence(content); + return content; + }, + }, + "world/reference/internal/delegation.mdx": { + inputFiles: [{ source: "world/src/Delegation.sol" }, { source: "world/src/DelegationControl.sol" }], + processContent: (content) => { + content = formatHeadings(content); + content = fixGithubLinks(content, "world"); + content = fixInheritence(content); + return content; + }, + }, + "world/reference/delegation-external.mdx": { + inputFiles: [{ source: "world/src/IDelegationControl.sol" }], + processContent: (content) => { + content = formatHeadings(content); + content = fixGithubLinks(content, "world"); + content = fixInheritence(content); + return content; + }, + }, + "world/reference/internal/erc165.mdx": { + inputFiles: [{ source: "world/src/ERC165Checker.sol" }, { source: "world/src/requireInterface.sol" }], + processContent: (content) => { + content = formatHeadings(content); + content = fixGithubLinks(content, "world"); + content = fixInheritence(content); + return content + .replaceAll("{IERC165}", "[IERC165](./erc165-external#ierc165)") + .replaceAll("{IERC165-supportsInterface}", "[IERC165.supportsInterface](./erc165-external#supportsinterface)"); + }, + }, + "world/reference/internal/erc165-external.mdx": { + inputFiles: [{ source: "world/src/IERC165.sol" }], + processContent: (content) => { + content = formatHeadings(content); + content = fixGithubLinks(content, "world"); + content = fixInheritence(content); + return content; + }, + }, + "world/reference/module.mdx": { + inputFiles: [{ source: "world/src/Module.sol" }], + processContent: (content) => { + content = formatHeadings(content); + content = fixGithubLinks(content, "world"); + content = fixInheritence(content); + return content; + }, + }, + "world/reference/module-external.mdx": { + inputFiles: [{ source: "world/src/IModule.sol" }], + processContent: (content) => { + content = formatHeadings(content); + content = fixGithubLinks(content, "world"); + content = fixInheritence(content); + return content; + }, + }, + "world/reference/system.mdx": { + inputFiles: [ + { source: "world/src/System.sol" }, + { source: "world/src/SystemHook.sol" }, + { source: "world/src/systemHookTypes.sol" }, + ], + processContent: (content) => { + content = formatHeadings(content); + content = fixGithubLinks(content, "world"); + content = fixInheritence(content); + return content.replace("Constants", "systemHookTypes.sol constants"); + }, + }, + "world/reference/internal/systemcall.mdx": { + inputFiles: [{ source: "world/src/SystemCall.sol" }], + processContent: (content) => { + content = formatHeadings(content); + content = fixGithubLinks(content, "world"); + content = fixInheritence(content); + return content; + }, + }, + "world/reference/system-external.mdx": { + inputFiles: [{ source: "world/src/ISystemHook.sol" }], + processContent: (content) => { + content = formatHeadings(content); + content = fixGithubLinks(content, "world"); + content = fixInheritence(content); + return content; + }, + }, + "world/reference/world.mdx": { + inputFiles: [{ source: "world/src/World.sol" }, { source: "world/src/WorldFactory.sol" }], + processContent: (content) => { + content = formatHeadings(content); + content = fixGithubLinks(content, "world"); + content = fixInheritence(content); + return content + .replace("StoreData", "[StoreData](/store/reference/store-core#storedata)") + .replace(/#### _installRootModule((.|\n)*?)#### setRecord/m, "#### setRecord"); + }, + }, + "world/reference/world-external.mdx": { + inputFiles: [ + // After IBaseWorld we have all the things it inherits from. + // We delete their headings, and leave the functions, errors, etc. + { source: "world/src/codegen/interfaces/IBaseWorld.sol" }, + { source: "store/src/StoreData.sol" }, + { source: "store/src/IStoreRegistration.sol" }, + { source: "world/src/modules/init/implementations/AccessManagementSystem.sol" }, + { source: "world/src/modules/init/implementations/BalanceTransferSystem.sol" }, + { source: "world/src/modules/init/implementations/BatchCallSystem.sol" }, + { source: "world/src/modules/init/implementations/ModuleInstallationSystem.sol" }, + { source: "world/src/modules/init/RegistrationSystem.sol" }, + { source: "world/src/modules/init/implementations/WorldRegistrationSystem.sol" }, + { source: "store/src/IStoreErrors.sol" }, + + // Back to adding contracts and interfaces to the docs. + { source: "world/src/IWorldKernel.sol" }, + { source: "world/src/IWorldErrors.sol" }, + { source: "world/src/IWorldFactory.sol" }, + ], + processContent: (content) => { + content = formatHeadings(content); + content = fixGithubLinks(content, "world"); + content = fixInheritence(content); + return content + .replace("IStore", "[IStore](/store/reference/store#istore)") + .replaceAll("This is an autogenerated file; do not edit manually", "") + .replaceAll( + "*This interface is automatically generated from the corresponding system contract. Do not edit manually.*", + "" + ) + .replace(/## StoreData((.|\n)*?)### Functions/m, "### Functions") + .replace(/#### constructor((.|\n)*?)#### storeVersion/m, "#### storeVersion") + .replace(/## IStoreRegistration((.|\n)*?)#### registerTable/m, "#### registerTable") + .replace(/## AccessManagementSystem((.|\n)*?)### Functions/m, "") + .replace(/## BalanceTransferSystem((.|\n)*?)### Functions/m, "") + .replace(/## BatchCallSystem((.|\n)*?)### Functions/m, "") + .replace(/## ModuleInstallationSystem((.|\n)*?)### Functions/m, "") + .replace(/## RegistrationSystem((.|\n)*?)### Functions/m, "") + .replace(/## WorldRegistrationSystem((.|\n)*?)### Functions/m, "") + .replace(/## IStoreErrors((.|\n)*?)### Errors/m, "### Errors"); + }, + }, + "world/reference/world-context.mdx": { + inputFiles: [{ source: "world/src/WorldContext.sol" }], + processContent: (content) => { + content = formatHeadings(content); + content = fixGithubLinks(content, "world"); + content = fixInheritence(content); + return content.replace("Constants", "WorldContext.sol constants"); + }, + }, + "world/reference/world-context-external.mdx": { + inputFiles: [{ source: "world/src/IWorldContextConsumer.sol" }], + processContent: (content) => { + content = formatHeadings(content); + content = fixGithubLinks(content, "world"); + content = fixInheritence(content); + return content; + }, + }, + "world/reference/resource-ids.mdx": { + inputFiles: [{ source: "world/src/WorldResourceId.sol" }, { source: "world/src/worldResourceTypes.sol" }], + processContent: (content) => { + content = formatHeadings(content); + content = fixGithubLinks(content, "world"); + content = fixInheritence(content); + return content + .replace("Constants", "WorldResourceId.sol constants") + .replace("Constants", "worldResourceTypes.sol constants"); + }, + }, + "world/reference/misc.mdx": { + inputFiles: [ + { source: "world/src/Utils.sol" }, + { source: "world/src/constants.sol" }, + { source: "world/src/revertWithBytes.sol" }, + { source: "world/src/version.sol" }, + ], + processContent: (content) => { + content = formatHeadings(content); + content = fixGithubLinks(content, "world"); + content = fixInheritence(content); + return content.replace("Constants", "constants.sol").replace("Constants", "version.sol constants"); + }, + }, + "world/reference/internal/init-module.mdx": { + inputFiles: [ + { source: "world/src/modules/init/InitModule.sol" }, + { source: "world/src/modules/init/constants.sol" }, + { source: "world/src/modules/init/RegistrationSystem.sol" }, + { source: "world/src/modules/init/LimitedCallContext.sol" }, + { source: "world/src/modules/init/types.sol" }, + ], + processContent: (content) => { + content = formatHeadings(content); + content = fixGithubLinks(content, "world"); + content = fixInheritence(content); + return content.replace("Constants", "constants.sol"); + }, + }, + "world/reference/internal/init-module-implementation.mdx": { + inputFiles: [ + { source: "world/src/modules/init/implementations/AccessManagementSystem.sol" }, + { source: "world/src/modules/init/implementations/ModuleInstallationSystem.sol" }, + { source: "world/src/modules/init/implementations/BalanceTransferSystem.sol" }, + { source: "world/src/modules/init/implementations/StoreRegistrationSystem.sol" }, + { source: "world/src/modules/init/implementations/BatchCallSystem.sol" }, + { source: "world/src/modules/init/implementations/WorldRegistrationSystem.sol" }, + ], + processContent: (content) => { + content = formatHeadings(content); + content = fixGithubLinks(content, "world"); + content = fixInheritence(content); + return content.replace("Constants", "constants.sol"); }, }, }; +// Go one heading level down function formatHeadings(content: string) { - const h1 = /^# (?=.+)/gm; - const h2 = /^## (?=.+)/gm; - return content.replace(h2, "### ").replace(h1, "## "); + return content.replace(/# (?=.+)/gm, "## "); } -function fixGithubLinks(content: string) { +function fixGithubLinks(content: string, packageName: string) { const pattern = /https:\/\/github.com\/latticexyz\/mud\/blob\/[^/]+\/(.*)/g; - const replacement = "https://github.com/latticexyz/mud/blob/main/packages/store/$1"; + const replacement = `https://github.com/latticexyz/mud/blob/main/packages/${packageName}/$1`; return content.replace(pattern, replacement); } +/* Fix inheritence links. + * Creating the pattern a new for every call is inefficient, but I'm optimizing for programmer time + */ +function fixInheritence(content: string) { + let newContent = content; + for (let i = 0; i < inheritence.length; i++) { + const item = inheritence[i]; + const pattern = `\\[${item.contract}\\]\\([/a-zA-Z0-9.#]+\\)`; + newContent = newContent.replaceAll(new RegExp(pattern, "g"), `[${item.contract}](${item.link})`); + } + + return newContent; +} + +// The inheritence links that need to be fixed +const inheritence = [ + { contract: "StoreRead", link: "/store/reference/store-core#storeread" }, + { contract: "StoreData", link: "/store/reference/store-core#storedata" }, + { contract: "IStoreData", link: "/store/reference/store#istoredata" }, + { contract: "IStoreRead", link: "/store/reference/store#istoreread" }, + { contract: "IStoreWrite", link: "/store/reference/store#istorewrite" }, + { contract: "IStoreErrors", link: "/store/reference/store#istoreerrors" }, + { contract: "IStoreEvents", link: "/store/reference/store#istoreevents" }, + { contract: "IStoreRegistration", link: "/store/reference/store#istoreregistration" }, + { contract: "Module", link: "/world/reference/module#module" }, + { contract: "System", link: "/world/reference/system#system" }, + { contract: "IDelegationControl", link: "/world/reference/delegation-external#idelegationcontrol" }, + { contract: "IWorldContextConsumer", link: "/world/reference/world-context-external#iworldcontextconsumer" }, + { contract: "IModule", link: "/world/reference/module-external#imodule" }, + { contract: "WorldContextConsumer", link: "/world/reference/world-context#worldcontextconsumer" }, + { contract: "IERC165", link: "/world/reference/internal/erc165-external#ierc165" }, + { contract: "ISystemHook", link: "/world/reference/system-external#isystemhook" }, + { contract: "IWorldKernel", link: "/world/reference/world-external#iworldkernel" }, + { contract: "IWorldFactory", link: "/world/reference/world-external#iworldfactory" }, + { contract: "IWorldCall", link: "/world/reference/world-external#iworldcall" }, + { contract: "IWorldErrors", link: "/world/reference/world-external#iworlderrors" }, + { contract: "IWorldModuleInstallation", link: "/world/reference/world-external#iworldmoduleinstallation" }, + { contract: "IWorldContextConsumer", link: "/world/reference/world-context-external#iworldcontextconsumer" }, + { contract: "IAccessManagementSystem", link: "/world/reference/world-external#iaccessmanagementsystem" }, + { contract: "IBalanceTransferSystem", link: "/world/reference/world-external#ibalancetransfersystem" }, + { contract: "IBatchCallSystem", link: "/world/reference/world-external#ibatchcallsystem" }, + { contract: "IModuleInstallationSystem", link: "/world/reference/world-external#imoduleinstallationsystem" }, + { contract: "IWorldRegistrationSystem", link: "/world/reference/world-external#iworldregistrationsystem" }, + { contract: "IRegistrationSystem", link: "/world/reference/world-external#iregistrationsystem" }, + { + contract: "ModuleInstallationSystem", + link: "/world/reference/internal/init-module-implementation#moduleinstallationsystem", + }, + { + contract: "StoreRegistrationSystem", + link: "/world/reference/internal/init-module-implementation#storeregistrationsystem", + }, + { + contract: "WorldRegistrationSystem", + link: "/world/reference/internal/init-module-implementation#worldregistrationsystem", + }, + { contract: "LimitedCallContext", link: "/world/reference/internal/init-module#limitedcallcontext" }, + { contract: "IERC165-supportsInterface", link: "/world/reference/internal/erc165-external#supportsinterface" }, +]; + /////////////////////////////////////////////////////////////////////////////////////////////////////// // SHOULDN'T HAVE TO TOUCH CODE BELOW THIS /////////////////////////////////////////////////////////////////////////////////////////////////////// From cd7c92e3773ac269bdfe552220ca16727d691931 Mon Sep 17 00:00:00 2001 From: Ori Pomerantz Date: Fri, 23 Feb 2024 10:05:08 -0600 Subject: [PATCH 24/24] docs(world/reference/internal): fix toc mistake (#2299) --- docs/pages/world/reference/internal/_meta.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pages/world/reference/internal/_meta.js b/docs/pages/world/reference/internal/_meta.js index c3f422f575..f31869fee8 100644 --- a/docs/pages/world/reference/internal/_meta.js +++ b/docs/pages/world/reference/internal/_meta.js @@ -6,5 +6,5 @@ export default { "erc165-external": "ERC165 (interface)", "init-module": "Init Module", "init-module-implementation": "Init Module Implementation", - "system": "SystemCall", + "systemcall": "SystemCall", };