Using Store without World
Installation
Install @latticexyz/store via npm, pnpm, or Yarn, and add the correct remapping into your Forge config.
If you store your contracts in packages/contract, this would look like this:
// remappings.txt
@latticexyz/=./node_modules/@latticexyz/If you want to use code-generation for libraries, install the MUD cli: pnpm install -D mud and the store config package: pnpm install -D @latticexyz/store
Import Store and extend your contract with the Store contract:
// src/Contract.sol
import { Store } from "@latticexyz/store/src/Store.sol";
contract Contract is Store {
[...]
}Inheriting Store will bootstrap the internal tables in the contract’s constructor. You can initialize default tables in your contract constructor if needed.
Initializing tables in the constructor with code-generated librarie
create a MUD config at the root of your project named mud.config.ts
// mud.config.ts
import { mudConfig } from "@latticexyz/store/register";
export default mudConfig({
tables: {
MyTable: {
schema: {
field1: "uint256",
field2: "uint256",
},
},
},
});
export default config;Then run pnpm mud tablegen in the folder where your MUD config is located. It will output a single library: MyTable.sol at ./src/tables/MyTable.sol
import { Store } from "@latticexyz/store/src/Store.sol";
import { MyTable } from "./codegen/tables/MyTable.sol";
contract Contract is Store {
constructor() {
MyTable.registerSchema();
// Setting metadata is optional. It helps off-chain actors name columns
MyTable.setMetadata();
}
}Initializing tables in the constructor with the low-level API
import { Store } from "@latticexyz/store/src/Store.sol";
import { StoreCore } from "@latticexyz/store/src/StoreCore.sol";
contract Contract is Store {
constructor() {
Schema keySchema = SchemaLib.encode(SchemaType.UINT256);
Schema schema = SchemaLib.encode(SchemaType.UINT256, SchemaType.UINT256);
uint256 table = uint256(keccak256("MyTable"));
StoreCore.registerSchema(table, schema, keySchema);
// Setting metadata is optional. It helps off-chain actors name columns
string[] memory fieldNames = new string[](2);
fieldNames[0] = "field1";
fieldNames[1] = "field2";
StoreSwitch.setMetadata(table, "MyTable", fieldNames);
}
}