MUD is a framework for building ambitious onchain applications
MIT License
Bot releases are visible (Hide)
Published by github-actions[bot] about 1 year ago
Published by github-actions[bot] about 1 year ago
#1351 c14f8bf1
Thanks @holic! - - Moved createActionSystem
from std-client
to recs
package and updated it to better support v2 sync stack.
If you want to use createActionSystem
alongside syncToRecs
, you'll need to pass in arguments like so:
import { syncToRecs } from "@latticexyz/store-sync/recs";
import { createActionSystem } from "@latticexyz/recs/deprecated";
import { from, mergeMap } from "rxjs";
const { blockLogsStorage$, waitForTransaction } = syncToRecs({
world,
...
});
const txReduced$ = blockLogsStorage$.pipe(
mergeMap(({ operations }) => from(operations.map((op) => op.log?.transactionHash).filter(isDefined)))
);
const actionSystem = createActionSystem(world, txReduced$, waitForTransaction);
Fixed a bug in waitForComponentValueIn
that caused the promise to not resolve if the component value was already set when the function was called.
Fixed a bug in createActionSystem
that caused optimistic updates to be incorrectly propagated to requirement checks. To fix the bug, you must now pass in the full component object to the action's updates
instead of just the component name.
actions.add({
updates: () => [
{
- component: "Resource",
+ component: Resource,
...
}
],
...
});
#1340 ce7125a1
Thanks @holic! - Removes solecs
package. These were v1 contracts, now entirely replaced by our v2 tooling. See the MUD docs for building with v2 or create a new project from our v2 templates with pnpm create mud@next your-app-name
.
Updated dependencies []:
Published by github-actions[bot] about 1 year ago
e3de1a33
Thanks @holic! - Removes useRow
and useRows
hooks, previously powered by store-cache
, which is now deprecated. Please use recs
and the corresponding useEntityQuery
and useComponentValue
hooks. We'll have more hooks soon for SQL.js sync backends.ce7125a1
, c14f8bf1
]:
Published by github-actions[bot] about 1 year ago
Published by github-actions[bot] about 1 year ago
Published by github-actions[bot] about 1 year ago
Published by github-actions[bot] about 1 year ago
Published by github-actions[bot] about 1 year ago
ce7125a1
, c14f8bf1
, e3de1a33
]:
Published by github-actions[bot] about 1 year ago
Published by github-actions[bot] about 1 year ago
Published by github-actions[bot] about 1 year ago
Published by github-actions[bot] about 1 year ago
#1341 c32c8e8f
Thanks @holic! - Removes std-contracts
package. These were v1 contracts, now entirely replaced by our v2 tooling. See the MUD docs for building with v2 or create a new project from our v2 templates with pnpm create mud@next your-app-name
.
#1340 ce7125a1
Thanks @holic! - Removes solecs
package. These were v1 contracts, now entirely replaced by our v2 tooling. See the MUD docs for building with v2 or create a new project from our v2 templates with pnpm create mud@next your-app-name
.
Updated dependencies []:
Published by github-actions[bot] about 1 year ago
Published by github-actions[bot] about 1 year ago
#1174 952cd534
Thanks @alvrs! - All Store
methods now require the table's value schema to be passed in as an argument instead of loading it from storage.
This decreases gas cost and removes circular dependencies of the Schema table (where it was not possible to write to the Schema table before the Schema table was registered).
function setRecord(
bytes32 table,
bytes32[] calldata key,
bytes calldata data,
+ Schema valueSchema
) external;
The same diff applies to getRecord
, getField
, setField
, pushToField
, popFromField
, updateInField
, and deleteRecord
.
This change only requires changes in downstream projects if the Store
methods were accessed directly. In most cases it is fully abstracted in the generated table libraries,
so downstream projects only need to regenerate their table libraries after updating MUD.
#1208 c32a9269
Thanks @alvrs! - - All World
function selectors that previously had bytes16 namespace, bytes16 name
arguments now use bytes32 resourceSelector
instead.
This includes setRecord
, setField
, pushToField
, popFromField
, updateInField
, deleteRecord
, call
, grantAccess
, revokeAccess
, registerTable
,
registerStoreHook
, registerSystemHook
, registerFunctionSelector
, registerSystem
and registerRootFunctionSelector
.
This change aligns the World
function selectors with the Store
function selectors, reduces clutter, reduces gas cost and reduces the World
's contract size.
The World
's registerHook
function is removed. Use registerStoreHook
or registerSystemHook
instead.
The deploy
script is updated to integrate the World interface changes
#1311 331f0d63
Thanks @alvrs! - The SnapSyncModule
is removed. The recommended way of loading the initial state of a MUD app is via the new store-indexer
. Loading state via contract getter functions is not recommended, as it's computationally heavy on the RPC, can't be cached, and is an easy way to shoot yourself in the foot with exploding RPC costs.
The @latticexyz/network
package was deprecated and is now removed. All consumers should upgrade to the new sync stack from @latticexyz/store-sync
.
#1182 afaf2f5f
Thanks @alvrs! - - Store
's internal schema table is now a normal table instead of using special code paths. It is renamed to Tables, and the table ID changed from mudstore:schema
to mudstore:Tables
Store
's registerSchema
and setMetadata
are combined into a single registerTable
method. This means metadata (key names, field names) is immutable and indexers can create tables with this metadata when a new table is registered on-chain.
- function registerSchema(bytes32 table, Schema schema, Schema keySchema) external;
-
- function setMetadata(bytes32 table, string calldata tableName, string[] calldata fieldNames) external;
+ function registerTable(
+ bytes32 table,
+ Schema keySchema,
+ Schema valueSchema,
+ string[] calldata keyNames,
+ string[] calldata fieldNames
+ ) external;
World
's registerTable
method is updated to match the Store
interface, setMetadata
is removed
The getSchema
method is renamed to getValueSchema
on all interfaces
- function getSchema(bytes32 table) external view returns (Schema schema);
+ function getValueSchema(bytes32 table) external view returns (Schema valueSchema);
The store-sync
and cli
packages are updated to integrate the breaking protocol changes. Downstream projects only need to manually integrate these changes if they access low level Store
or World
functions. Otherwise, a fresh deploy with the latest MUD will get you these changes.
#1231 433078c5
Thanks @dk1a! - Reverse PackedCounter encoding, to optimize gas for bitshifts.
Ints are right-aligned, shifting using an index is straightforward if they are indexed right-to-left.
#1252 0d12db8c
Thanks @dk1a! - Optimize Schema methods.
Return uint256
instead of uint8
in SchemaInstance numFields methods
Updated dependencies [952cd534
, bb6ada74
, d5b73b12
, 433078c5
, afaf2f5f
, 0d12db8c
, 331f0d63
]:
Published by github-actions[bot] about 1 year ago
Published by github-actions[bot] about 1 year ago
#1231 433078c5
Thanks @dk1a! - Reverse PackedCounter encoding, to optimize gas for bitshifts.
Ints are right-aligned, shifting using an index is straightforward if they are indexed right-to-left.
#1182 afaf2f5f
Thanks @alvrs! - - Store
's internal schema table is now a normal table instead of using special code paths. It is renamed to Tables, and the table ID changed from mudstore:schema
to mudstore:Tables
Store
's registerSchema
and setMetadata
are combined into a single registerTable
method. This means metadata (key names, field names) is immutable and indexers can create tables with this metadata when a new table is registered on-chain.
- function registerSchema(bytes32 table, Schema schema, Schema keySchema) external;
-
- function setMetadata(bytes32 table, string calldata tableName, string[] calldata fieldNames) external;
+ function registerTable(
+ bytes32 table,
+ Schema keySchema,
+ Schema valueSchema,
+ string[] calldata keyNames,
+ string[] calldata fieldNames
+ ) external;
World
's registerTable
method is updated to match the Store
interface, setMetadata
is removed
The getSchema
method is renamed to getValueSchema
on all interfaces
- function getSchema(bytes32 table) external view returns (Schema schema);
+ function getValueSchema(bytes32 table) external view returns (Schema valueSchema);
The store-sync
and cli
packages are updated to integrate the breaking protocol changes. Downstream projects only need to manually integrate these changes if they access low level Store
or World
functions. Otherwise, a fresh deploy with the latest MUD will get you these changes.
#1315 bb6ada74
Thanks @holic! - Initial sync from indexer no longer blocks the promise returning from createStoreSync
, syncToRecs
, and syncToSqlite
. This should help with rendering loading screens using the SyncProgress
RECS component and avoid the long flashes of no content in templates.
By default, syncToRecs
and syncToSqlite
will start syncing (via observable subscription) immediately after called.
If your app needs to control when syncing starts, you can use the startSync: false
option and then blockStoreOperations$.subscribe()
to start the sync yourself. Just be sure to unsubscribe to avoid memory leaks.
const { blockStorageOperations$ } = syncToRecs({
...
startSync: false,
});
// start sync manually by subscribing to `blockStorageOperation# @latticexyz/store-sync
const subcription = blockStorageOperation$.subscribe();
// clean up subscription
subscription.unsubscribe();
#1317 3e024fcf
Thanks @holic! - add retry attempts and more logging to waitForTransaction
Updated dependencies [952cd534
, bb6ada74
, c32a9269
, 331f0d63
, d5b73b12
, 433078c5
, afaf2f5f
, 0d12db8c
, 331f0d63
]:
Published by github-actions[bot] about 1 year ago
952cd534
, bb6ada74
, d5b73b12
, 433078c5
, afaf2f5f
, 3e024fcf
, 0d12db8c
, 331f0d63
]:
Published by github-actions[bot] about 1 year ago
952cd534
, bb6ada74
, d5b73b12
, 433078c5
, afaf2f5f
, 0d12db8c
, 331f0d63
]:
Published by github-actions[bot] about 1 year ago
#1174 952cd534
Thanks @alvrs! - All Store
methods now require the table's value schema to be passed in as an argument instead of loading it from storage.
This decreases gas cost and removes circular dependencies of the Schema table (where it was not possible to write to the Schema table before the Schema table was registered).
function setRecord(
bytes32 table,
bytes32[] calldata key,
bytes calldata data,
+ Schema valueSchema
) external;
The same diff applies to getRecord
, getField
, setField
, pushToField
, popFromField
, updateInField
, and deleteRecord
.
This change only requires changes in downstream projects if the Store
methods were accessed directly. In most cases it is fully abstracted in the generated table libraries,
so downstream projects only need to regenerate their table libraries after updating MUD.
#1231 433078c5
Thanks @dk1a! - Reverse PackedCounter encoding, to optimize gas for bitshifts.
Ints are right-aligned, shifting using an index is straightforward if they are indexed right-to-left.
#1182 afaf2f5f
Thanks @alvrs! - - Store
's internal schema table is now a normal table instead of using special code paths. It is renamed to Tables, and the table ID changed from mudstore:schema
to mudstore:Tables
Store
's registerSchema
and setMetadata
are combined into a single registerTable
method. This means metadata (key names, field names) is immutable and indexers can create tables with this metadata when a new table is registered on-chain.
- function registerSchema(bytes32 table, Schema schema, Schema keySchema) external;
-
- function setMetadata(bytes32 table, string calldata tableName, string[] calldata fieldNames) external;
+ function registerTable(
+ bytes32 table,
+ Schema keySchema,
+ Schema valueSchema,
+ string[] calldata keyNames,
+ string[] calldata fieldNames
+ ) external;
World
's registerTable
method is updated to match the Store
interface, setMetadata
is removed
The getSchema
method is renamed to getValueSchema
on all interfaces
- function getSchema(bytes32 table) external view returns (Schema schema);
+ function getValueSchema(bytes32 table) external view returns (Schema valueSchema);
The store-sync
and cli
packages are updated to integrate the breaking protocol changes. Downstream projects only need to manually integrate these changes if they access low level Store
or World
functions. Otherwise, a fresh deploy with the latest MUD will get you these changes.
#1303 d5b73b12
Thanks @dk1a! - Optimize autogenerated table libraries
#1252 0d12db8c
Thanks @dk1a! - Optimize Schema methods.
Return uint256
instead of uint8
in SchemaInstance numFields methods
Updated dependencies [bb6ada74
, 331f0d63
]:
Published by github-actions[bot] about 1 year ago