@latticexyz/world 2.0.2-main-2d2ebaae → 2.0.2-main-e86bd14d

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/dist/chunk-OS2BVN74.js +2 -0
  2. package/dist/chunk-OS2BVN74.js.map +1 -0
  3. package/dist/internal.d.ts +40 -2
  4. package/dist/internal.js +1 -1
  5. package/dist/internal.js.map +1 -1
  6. package/dist/mud.config.js +1 -1
  7. package/dist/mud.config.js.map +1 -1
  8. package/out/AccessControl.t.sol/AccessControlTest.json +1 -1
  9. package/out/AccessManagementSystem.sol/AccessManagementSystem.json +1 -1
  10. package/out/AddressArray.sol/AddressArray.json +1 -1
  11. package/out/BalanceTransferSystem.sol/BalanceTransferSystem.json +1 -1
  12. package/out/BatchCall.t.sol/BatchCallTest.json +1 -1
  13. package/out/BatchCall.t.sol/TestSystem.json +1 -1
  14. package/out/BatchCallSystem.sol/BatchCallSystem.json +1 -1
  15. package/out/Bool.sol/Bool.json +1 -1
  16. package/out/Create2Factory.sol/Create2Factory.json +1 -1
  17. package/out/DelegationControlMock.sol/DelegationControlMock.json +1 -1
  18. package/out/EchoSubscriber.sol/EchoSubscriber.json +1 -1
  19. package/out/Factories.t.sol/FactoriesTest.json +1 -1
  20. package/out/GasReporter.sol/GasReporter.json +1 -1
  21. package/out/InitModule.sol/InitModule.json +1 -1
  22. package/out/InitModule.t.sol/InitModuleTest.json +1 -1
  23. package/out/InitModule.t.sol/WorldMock.json +1 -1
  24. package/out/InitSystems.t.sol/LimitedCallContextTest.json +1 -1
  25. package/out/ModuleInstallationSystem.sol/ModuleInstallationSystem.json +1 -1
  26. package/out/MudTest.t.sol/MudTest.json +1 -1
  27. package/out/RegistrationSystem.sol/RegistrationSystem.json +1 -1
  28. package/out/RevertSubscriber.sol/RevertSubscriber.json +1 -1
  29. package/out/RevertWithBytes.t.sol/RevertWithBytesTest.json +1 -1
  30. package/out/StdError.sol/stdError.json +1 -1
  31. package/out/StoreMock.sol/StoreMock.json +1 -1
  32. package/out/StoreRead.sol/StoreRead.json +1 -1
  33. package/out/StoreRegistrationSystem.sol/StoreRegistrationSystem.json +1 -1
  34. package/out/System.sol/System.json +1 -1
  35. package/out/System.t.sol/SystemTest.json +1 -1
  36. package/out/System.t.sol/TestSystem.json +1 -1
  37. package/out/SystemHook.t.sol/SystemHookTest.json +1 -1
  38. package/out/TwoFields.sol/TwoFields.json +1 -1
  39. package/out/Utils.t.sol/UtilsTest.json +1 -1
  40. package/out/Utils.t.sol/UtilsTestSystem.json +1 -1
  41. package/out/World.sol/World.json +1 -1
  42. package/out/World.t.sol/EchoSystemHook.json +1 -1
  43. package/out/World.t.sol/IWorldTestSystem.json +1 -1
  44. package/out/World.t.sol/PayableFallbackSystem.json +1 -1
  45. package/out/World.t.sol/RevertSystemHook.json +1 -1
  46. package/out/World.t.sol/WorldTest.json +1 -1
  47. package/out/World.t.sol/WorldTestSystem.json +1 -1
  48. package/out/WorldBalance.t.sol/WorldBalanceTest.json +1 -1
  49. package/out/WorldBalance.t.sol/WorldBalanceTestSystem.json +1 -1
  50. package/out/WorldContext.t.sol/TestContextConsumer.json +1 -1
  51. package/out/WorldContext.t.sol/WorldContextTest.json +1 -1
  52. package/out/WorldDynamicUpdate.t.sol/UpdateInDynamicFieldTest.json +1 -1
  53. package/out/WorldFactory.sol/WorldFactory.json +1 -1
  54. package/out/WorldRegistrationSystem.sol/WorldRegistrationSystem.json +1 -1
  55. package/out/WorldResourceId.t.sol/WorldResourceIdTest.json +1 -1
  56. package/out/test.sol/DSTest.json +1 -1
  57. package/package.json +8 -7
  58. package/src/modules/init/implementations/WorldRegistrationSystem.sol +2 -21
  59. package/src/modules/init/implementations/createDelegation.sol +38 -0
  60. package/ts/actions/callFrom.ts +141 -0
  61. package/ts/delegationWithSignatureTypes.ts +11 -0
  62. package/ts/exports/internal.ts +4 -0
@@ -1 +1 @@
1
- {"abi":[{"type":"function","name":"IS_TEST","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"failed","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"event","name":"log","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_address","inputs":[{"name":"","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_bytes","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_bytes32","inputs":[{"name":"","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_int","inputs":[{"name":"","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_address","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_named_bytes","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_named_bytes32","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_named_decimal_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_decimal_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_string","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_named_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_string","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_uint","inputs":[{"name":"","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"logs","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false}],"bytecode":{"object":"0x60806040526000805460ff1916600117905534801561001d57600080fd5b506102728061002d6000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063ba414fa61461003b578063fa7626d414610057575b600080fd5b610043610064565b604051901515815260200160405180910390f35b6000546100439060ff1681565b60008054610100900460ff16156100845750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156101bf5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610129917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016101f4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261016191610230565b6000604051808303816000865af19150503d806000811461019e576040519150601f19603f3d011682016040523d82523d6000602084013e6101a3565b606091505b50915050808060200190518101906101bb9190610243565b9150505b919050565b6000815160005b818110156101e557602081850181015186830152016101cb565b50600093019283525090919050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600061022860048301846101c4565b949350505050565b600061023c82846101c4565b9392505050565b60006020828403121561025557600080fd5b8151801515811461023c57600080fdfea164736f6c6343000818000a","sourceMap":"715:19781:48:-:0;;;1572:26;;;-1:-1:-1;;1572:26:48;1594:4;1572:26;;;715:19781;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561001057600080fd5b50600436106100365760003560e01c8063ba414fa61461003b578063fa7626d414610057575b600080fd5b610043610064565b604051901515815260200160405180910390f35b6000546100439060ff1681565b60008054610100900460ff16156100845750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156101bf5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610129917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016101f4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261016191610230565b6000604051808303816000865af19150503d806000811461019e576040519150601f19603f3d011682016040523d82523d6000602084013e6101a3565b606091505b50915050808060200190518101906101bb9190610243565b9150505b919050565b6000815160005b818110156101e557602081850181015186830152016101cb565b50600093019283525090919050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600061022860048301846101c4565b949350505050565b600061023c82846101c4565b9392505050565b60006020828403121561025557600080fd5b8151801515811461023c57600080fdfea164736f6c6343000818000a","sourceMap":"715:19781:48:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1819:584;;;:::i;:::-;;;179:14:153;;172:22;154:41;;142:2;127:18;1819:584:48;;;;;;;1572:26;;;;;;;;;1819:584;1853:4;1873:7;;;;;;;1869:528;;;-1:-1:-1;1903:7:48;;;;;;;;1819:584::o;1869:528::-;1941:17;2997:42;2985:55;3066:16;1980:374;;2196:43;;;1671:64;2196:43;;;380:74:153;;;2221:17:48;470:18:153;;;463:34;2196:43:48;;;;;;;;;353:18:153;;;2196:43:48;;;-1:-1:-1;;1671:64:48;;2086:175;;2135:34;;2086:175;;;:::i;:::-;;;;;;;;;;;;;;;2047:232;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2020:259;;;2323:7;2312:27;;;;;;;;;;;;:::i;:::-;2297:42;;2002:352;1980:374;2374:12;1819:584;-1:-1:-1;1819:584:48:o;508:322:153:-;549:3;587:5;581:12;611:1;621:128;635:6;632:1;629:13;621:128;;;732:4;717:13;;;713:24;;707:31;694:11;;;687:52;650:12;621:128;;;-1:-1:-1;804:1:153;768:16;;793:13;;;-1:-1:-1;768:16:153;;508:322;-1:-1:-1;508:322:153:o;835:324::-;1032:66;1024:6;1020:79;1015:3;1008:92;990:3;1116:37;1150:1;1145:3;1141:11;1133:6;1116:37;:::i;:::-;1109:44;835:324;-1:-1:-1;;;;835:324:153:o;1164:189::-;1293:3;1318:29;1343:3;1335:6;1318:29;:::i;:::-;1311:36;1164:189;-1:-1:-1;;;1164:189:153:o;1358:277::-;1425:6;1478:2;1466:9;1457:7;1453:23;1449:32;1446:52;;;1494:1;1491;1484:12;1446:52;1526:9;1520:16;1579:5;1572:13;1565:21;1558:5;1555:32;1545:60;;1601:1;1598;1591:12","linkReferences":{}},"methodIdentifiers":{"IS_TEST()":"fa7626d4","failed()":"ba414fa6"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"log_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"log_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"log_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"name\":\"log_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"val\",\"type\":\"address\"}],\"name\":\"log_named_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"val\",\"type\":\"bytes\"}],\"name\":\"log_named_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"val\",\"type\":\"bytes32\"}],\"name\":\"log_named_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"}],\"name\":\"log_named_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"val\",\"type\":\"string\"}],\"name\":\"log_named_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"log_named_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"log_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"logs\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"IS_TEST\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"failed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/ds-test/src/test.sol\":\"DSTest\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":3000},\"remappings\":[\":@latticexyz/=node_modules/@latticexyz/\",\":ds-test/=node_modules/ds-test/src/\",\":forge-std/=node_modules/forge-std/src/\"]},\"sources\":{\"node_modules/ds-test/src/test.sol\":{\"keccak256\":\"0x8758531bbac3972efcf1fa46383dbe1d276406fe527bc7abb2f236486278e83b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1f64264d61506847acf8761e84aff690cebe830958eac00bac7924d8be569240\",\"dweb:/ipfs/QmSekDJvJ82MZAmr63n7YvfLzQ7gS4NLSHPmHL3GN3rw8k\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.24+commit.e11b9ed9"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log","anonymous":false},{"inputs":[{"internalType":"address","name":"","type":"address","indexed":false}],"type":"event","name":"log_address","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"log_bytes","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32","indexed":false}],"type":"event","name":"log_bytes32","anonymous":false},{"inputs":[{"internalType":"int256","name":"","type":"int256","indexed":false}],"type":"event","name":"log_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address","name":"val","type":"address","indexed":false}],"type":"event","name":"log_named_address","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes","name":"val","type":"bytes","indexed":false}],"type":"event","name":"log_named_bytes","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes32","name":"val","type":"bytes32","indexed":false}],"type":"event","name":"log_named_bytes32","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false}],"type":"event","name":"log_named_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"string","name":"val","type":"string","indexed":false}],"type":"event","name":"log_named_string","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false}],"type":"event","name":"log_named_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log_string","anonymous":false},{"inputs":[{"internalType":"uint256","name":"","type":"uint256","indexed":false}],"type":"event","name":"log_uint","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"logs","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"IS_TEST","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"failed","outputs":[{"internalType":"bool","name":"","type":"bool"}]}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@latticexyz/=node_modules/@latticexyz/","ds-test/=node_modules/ds-test/src/","forge-std/=node_modules/forge-std/src/"],"optimizer":{"enabled":true,"runs":3000},"metadata":{"bytecodeHash":"none"},"compilationTarget":{"node_modules/ds-test/src/test.sol":"DSTest"},"evmVersion":"paris","libraries":{}},"sources":{"node_modules/ds-test/src/test.sol":{"keccak256":"0x8758531bbac3972efcf1fa46383dbe1d276406fe527bc7abb2f236486278e83b","urls":["bzz-raw://1f64264d61506847acf8761e84aff690cebe830958eac00bac7924d8be569240","dweb:/ipfs/QmSekDJvJ82MZAmr63n7YvfLzQ7gS4NLSHPmHL3GN3rw8k"],"license":"GPL-3.0-or-later"}},"version":1},"id":48}
1
+ {"abi":[{"type":"function","name":"IS_TEST","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"failed","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"event","name":"log","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_address","inputs":[{"name":"","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_bytes","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_bytes32","inputs":[{"name":"","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_int","inputs":[{"name":"","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_address","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_named_bytes","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_named_bytes32","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_named_decimal_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_decimal_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_string","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_named_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_string","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_uint","inputs":[{"name":"","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"logs","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false}],"bytecode":{"object":"0x60806040526000805460ff1916600117905534801561001d57600080fd5b506102728061002d6000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063ba414fa61461003b578063fa7626d414610057575b600080fd5b610043610064565b604051901515815260200160405180910390f35b6000546100439060ff1681565b60008054610100900460ff16156100845750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156101bf5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610129917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016101f4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261016191610230565b6000604051808303816000865af19150503d806000811461019e576040519150601f19603f3d011682016040523d82523d6000602084013e6101a3565b606091505b50915050808060200190518101906101bb9190610243565b9150505b919050565b6000815160005b818110156101e557602081850181015186830152016101cb565b50600093019283525090919050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600061022860048301846101c4565b949350505050565b600061023c82846101c4565b9392505050565b60006020828403121561025557600080fd5b8151801515811461023c57600080fdfea164736f6c6343000818000a","sourceMap":"715:19781:48:-:0;;;1572:26;;;-1:-1:-1;;1572:26:48;1594:4;1572:26;;;715:19781;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561001057600080fd5b50600436106100365760003560e01c8063ba414fa61461003b578063fa7626d414610057575b600080fd5b610043610064565b604051901515815260200160405180910390f35b6000546100439060ff1681565b60008054610100900460ff16156100845750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156101bf5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610129917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016101f4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261016191610230565b6000604051808303816000865af19150503d806000811461019e576040519150601f19603f3d011682016040523d82523d6000602084013e6101a3565b606091505b50915050808060200190518101906101bb9190610243565b9150505b919050565b6000815160005b818110156101e557602081850181015186830152016101cb565b50600093019283525090919050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600061022860048301846101c4565b949350505050565b600061023c82846101c4565b9392505050565b60006020828403121561025557600080fd5b8151801515811461023c57600080fdfea164736f6c6343000818000a","sourceMap":"715:19781:48:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1819:584;;;:::i;:::-;;;179:14:154;;172:22;154:41;;142:2;127:18;1819:584:48;;;;;;;1572:26;;;;;;;;;1819:584;1853:4;1873:7;;;;;;;1869:528;;;-1:-1:-1;1903:7:48;;;;;;;;1819:584::o;1869:528::-;1941:17;2997:42;2985:55;3066:16;1980:374;;2196:43;;;1671:64;2196:43;;;380:74:154;;;2221:17:48;470:18:154;;;463:34;2196:43:48;;;;;;;;;353:18:154;;;2196:43:48;;;-1:-1:-1;;1671:64:48;;2086:175;;2135:34;;2086:175;;;:::i;:::-;;;;;;;;;;;;;;;2047:232;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2020:259;;;2323:7;2312:27;;;;;;;;;;;;:::i;:::-;2297:42;;2002:352;1980:374;2374:12;1819:584;-1:-1:-1;1819:584:48:o;508:322:154:-;549:3;587:5;581:12;611:1;621:128;635:6;632:1;629:13;621:128;;;732:4;717:13;;;713:24;;707:31;694:11;;;687:52;650:12;621:128;;;-1:-1:-1;804:1:154;768:16;;793:13;;;-1:-1:-1;768:16:154;;508:322;-1:-1:-1;508:322:154:o;835:324::-;1032:66;1024:6;1020:79;1015:3;1008:92;990:3;1116:37;1150:1;1145:3;1141:11;1133:6;1116:37;:::i;:::-;1109:44;835:324;-1:-1:-1;;;;835:324:154:o;1164:189::-;1293:3;1318:29;1343:3;1335:6;1318:29;:::i;:::-;1311:36;1164:189;-1:-1:-1;;;1164:189:154:o;1358:277::-;1425:6;1478:2;1466:9;1457:7;1453:23;1449:32;1446:52;;;1494:1;1491;1484:12;1446:52;1526:9;1520:16;1579:5;1572:13;1565:21;1558:5;1555:32;1545:60;;1601:1;1598;1591:12","linkReferences":{}},"methodIdentifiers":{"IS_TEST()":"fa7626d4","failed()":"ba414fa6"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"log_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"log_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"log_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"name\":\"log_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"val\",\"type\":\"address\"}],\"name\":\"log_named_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"val\",\"type\":\"bytes\"}],\"name\":\"log_named_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"val\",\"type\":\"bytes32\"}],\"name\":\"log_named_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"}],\"name\":\"log_named_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"val\",\"type\":\"string\"}],\"name\":\"log_named_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"log_named_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"log_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"logs\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"IS_TEST\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"failed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"node_modules/ds-test/src/test.sol\":\"DSTest\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":3000},\"remappings\":[\":@latticexyz/=node_modules/@latticexyz/\",\":ds-test/=node_modules/ds-test/src/\",\":forge-std/=node_modules/forge-std/src/\"]},\"sources\":{\"node_modules/ds-test/src/test.sol\":{\"keccak256\":\"0x8758531bbac3972efcf1fa46383dbe1d276406fe527bc7abb2f236486278e83b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1f64264d61506847acf8761e84aff690cebe830958eac00bac7924d8be569240\",\"dweb:/ipfs/QmSekDJvJ82MZAmr63n7YvfLzQ7gS4NLSHPmHL3GN3rw8k\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.24+commit.e11b9ed9"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log","anonymous":false},{"inputs":[{"internalType":"address","name":"","type":"address","indexed":false}],"type":"event","name":"log_address","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"log_bytes","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32","indexed":false}],"type":"event","name":"log_bytes32","anonymous":false},{"inputs":[{"internalType":"int256","name":"","type":"int256","indexed":false}],"type":"event","name":"log_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address","name":"val","type":"address","indexed":false}],"type":"event","name":"log_named_address","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes","name":"val","type":"bytes","indexed":false}],"type":"event","name":"log_named_bytes","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes32","name":"val","type":"bytes32","indexed":false}],"type":"event","name":"log_named_bytes32","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false}],"type":"event","name":"log_named_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"string","name":"val","type":"string","indexed":false}],"type":"event","name":"log_named_string","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false}],"type":"event","name":"log_named_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log_string","anonymous":false},{"inputs":[{"internalType":"uint256","name":"","type":"uint256","indexed":false}],"type":"event","name":"log_uint","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"logs","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"IS_TEST","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"failed","outputs":[{"internalType":"bool","name":"","type":"bool"}]}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@latticexyz/=node_modules/@latticexyz/","ds-test/=node_modules/ds-test/src/","forge-std/=node_modules/forge-std/src/"],"optimizer":{"enabled":true,"runs":3000},"metadata":{"bytecodeHash":"none"},"compilationTarget":{"node_modules/ds-test/src/test.sol":"DSTest"},"evmVersion":"paris","libraries":{}},"sources":{"node_modules/ds-test/src/test.sol":{"keccak256":"0x8758531bbac3972efcf1fa46383dbe1d276406fe527bc7abb2f236486278e83b","urls":["bzz-raw://1f64264d61506847acf8761e84aff690cebe830958eac00bac7924d8be569240","dweb:/ipfs/QmSekDJvJ82MZAmr63n7YvfLzQ7gS4NLSHPmHL3GN3rw8k"],"license":"GPL-3.0-or-later"}},"version":1},"id":48}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@latticexyz/world",
3
- "version": "2.0.2-main-2d2ebaae",
3
+ "version": "2.0.2-main-e86bd14d",
4
4
  "description": "World framework",
5
5
  "repository": {
6
6
  "type": "git",
@@ -43,10 +43,11 @@
43
43
  "arktype": "1.0.29-alpha",
44
44
  "viem": "2.7.12",
45
45
  "zod": "^3.21.4",
46
- "@latticexyz/config": "2.0.2-main-2d2ebaae",
47
- "@latticexyz/schema-type": "2.0.2-main-2d2ebaae",
48
- "@latticexyz/common": "2.0.2-main-2d2ebaae",
49
- "@latticexyz/store": "2.0.2-main-2d2ebaae"
46
+ "@latticexyz/common": "2.0.2-main-e86bd14d",
47
+ "@latticexyz/config": "2.0.2-main-e86bd14d",
48
+ "@latticexyz/protocol-parser": "2.0.2-main-e86bd14d",
49
+ "@latticexyz/store": "2.0.2-main-e86bd14d",
50
+ "@latticexyz/schema-type": "2.0.2-main-e86bd14d"
50
51
  },
51
52
  "devDependencies": {
52
53
  "@types/ejs": "^3.1.1",
@@ -61,8 +62,8 @@
61
62
  "tsup": "^6.7.0",
62
63
  "tsx": "^3.12.6",
63
64
  "vitest": "0.34.6",
64
- "@latticexyz/abi-ts": "2.0.2-main-2d2ebaae",
65
- "@latticexyz/gas-report": "2.0.2-main-2d2ebaae"
65
+ "@latticexyz/abi-ts": "2.0.2-main-e86bd14d",
66
+ "@latticexyz/gas-report": "2.0.2-main-e86bd14d"
66
67
  },
67
68
  "scripts": {
68
69
  "build": "pnpm run build:mud && pnpm run build:abi && pnpm run build:abi-ts && pnpm run build:js",
@@ -31,6 +31,7 @@ import { requireNamespace } from "../../../requireNamespace.sol";
31
31
  import { requireValidNamespace } from "../../../requireValidNamespace.sol";
32
32
 
33
33
  import { LimitedCallContext } from "../LimitedCallContext.sol";
34
+ import { createDelegation } from "./createDelegation.sol";
34
35
 
35
36
  /**
36
37
  * @title WorldRegistrationSystem
@@ -264,27 +265,7 @@ contract WorldRegistrationSystem is System, IWorldErrors, LimitedCallContext {
264
265
  ResourceId delegationControlId,
265
266
  bytes memory initCallData
266
267
  ) public onlyDelegatecall {
267
- // Store the delegation control contract address
268
- UserDelegationControl._set({
269
- delegator: _msgSender(),
270
- delegatee: delegatee,
271
- delegationControlId: delegationControlId
272
- });
273
-
274
- // If the delegation is limited...
275
- if (Delegation.isLimited(delegationControlId)) {
276
- // Require the delegationControl contract to implement the IDelegationControl interface
277
- address delegationControl = Systems._getSystem(delegationControlId);
278
- requireInterface(delegationControl, type(IDelegationControl).interfaceId);
279
-
280
- // Call the delegation control contract's init function
281
- SystemCall.callWithHooksOrRevert({
282
- caller: _msgSender(),
283
- systemId: delegationControlId,
284
- callData: initCallData,
285
- value: 0
286
- });
287
- }
268
+ createDelegation(_msgSender(), delegatee, delegationControlId, initCallData);
288
269
  }
289
270
 
290
271
  /**
@@ -0,0 +1,38 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity >=0.8.24;
3
+
4
+ import { ResourceId } from "@latticexyz/store/src/ResourceId.sol";
5
+
6
+ import { SystemCall } from "../../../SystemCall.sol";
7
+ import { Delegation } from "../../../Delegation.sol";
8
+ import { requireInterface } from "../../../requireInterface.sol";
9
+ import { NamespaceOwner } from "../../../codegen/tables/NamespaceOwner.sol";
10
+ import { UserDelegationControl } from "../../../codegen/tables/UserDelegationControl.sol";
11
+ import { IDelegationControl } from "../../../IDelegationControl.sol";
12
+
13
+ import { Systems } from "../../../codegen/tables/Systems.sol";
14
+
15
+ function createDelegation(
16
+ address delegator,
17
+ address delegatee,
18
+ ResourceId delegationControlId,
19
+ bytes memory initCallData
20
+ ) {
21
+ // Store the delegation control contract address
22
+ UserDelegationControl._set({ delegator: delegator, delegatee: delegatee, delegationControlId: delegationControlId });
23
+
24
+ // If the delegation is limited...
25
+ if (Delegation.isLimited(delegationControlId)) {
26
+ // Require the delegationControl contract to implement the IDelegationControl interface
27
+ address delegationControl = Systems._getSystem(delegationControlId);
28
+ requireInterface(delegationControl, type(IDelegationControl).interfaceId);
29
+
30
+ // Call the delegation control contract's init function
31
+ SystemCall.callWithHooksOrRevert({
32
+ caller: delegator,
33
+ systemId: delegationControlId,
34
+ callData: initCallData,
35
+ value: 0
36
+ });
37
+ }
38
+ }
@@ -0,0 +1,141 @@
1
+ import {
2
+ slice,
3
+ concat,
4
+ type WalletClient,
5
+ type Transport,
6
+ type Chain,
7
+ type Account,
8
+ type Hex,
9
+ type WalletActions,
10
+ type WriteContractReturnType,
11
+ type EncodeFunctionDataParameters,
12
+ type PublicClient,
13
+ } from "viem";
14
+ import { getAction, encodeFunctionData } from "viem/utils";
15
+ import { writeContract } from "viem/actions";
16
+ import { readHex } from "@latticexyz/common";
17
+ import {
18
+ getKeySchema,
19
+ getValueSchema,
20
+ getSchemaTypes,
21
+ decodeValueArgs,
22
+ encodeKey,
23
+ } from "@latticexyz/protocol-parser/internal";
24
+ import worldConfig from "../../mud.config";
25
+ import IStoreReadAbi from "../../out/IStoreRead.sol/IStoreRead.abi.json";
26
+
27
+ // Accepts either `worldFunctionToSystemFunction` or `publicClient`, but not both.
28
+ type CallFromParameters = CallFromFunctionParameters | CallFromClientParameters;
29
+ type CallFromBaseParameters = {
30
+ worldAddress: Hex;
31
+ delegatorAddress: Hex;
32
+ };
33
+ type CallFromFunctionParameters = CallFromBaseParameters & {
34
+ worldFunctionToSystemFunction: (worldFunctionSelector: Hex) => Promise<SystemFunction>;
35
+ publicClient?: never;
36
+ };
37
+ type CallFromClientParameters = CallFromBaseParameters & {
38
+ worldFunctionToSystemFunction?: never;
39
+ publicClient: PublicClient;
40
+ };
41
+
42
+ type SystemFunction = { systemId: Hex; systemFunctionSelector: Hex };
43
+
44
+ // By extending viem clients with this function after delegation, the delegation is automatically applied to World contract writes.
45
+ // This means that these writes are made on behalf of the delegator.
46
+ // Internally, it transforms the write arguments to use `callFrom`.
47
+ //
48
+ // Accepts either `worldFunctionToSystemFunction` or `publicClient` as an argument.
49
+ // `worldFunctionToSystemFunction` allows manually providing the mapping function, thus users can utilize their client store for the lookup.
50
+ // If `publicClient` is provided instead, this function retrieves the corresponding system function from the World contract.
51
+ //
52
+ // The function mapping is cached to avoid redundant retrievals for the same World function.
53
+ export function callFrom<TChain extends Chain, TAccount extends Account>(
54
+ params: CallFromParameters,
55
+ ): (client: WalletClient<Transport, TChain, TAccount>) => Pick<WalletActions<TChain, TAccount>, "writeContract"> {
56
+ return (client) => ({
57
+ // Applies to: `client.writeContract`, `getContract(client, ...).write`
58
+ writeContract: async (writeArgs): Promise<WriteContractReturnType> => {
59
+ // Skip if the contract isn't the World.
60
+ if (writeArgs.address !== params.worldAddress) {
61
+ return getAction(client, writeContract, "writeContract")(writeArgs);
62
+ }
63
+
64
+ // Encode the World's calldata (which includes the World's function selector).
65
+ const worldCalldata = encodeFunctionData({
66
+ abi: writeArgs.abi,
67
+ functionName: writeArgs.functionName,
68
+ args: writeArgs.args,
69
+ } as unknown as EncodeFunctionDataParameters);
70
+
71
+ // The first 4 bytes of calldata represent the function selector.
72
+ const worldFunctionSelector = slice(worldCalldata, 0, 4);
73
+
74
+ // Get the systemId and System's function selector.
75
+ const { systemId, systemFunctionSelector } = await worldFunctionToSystemFunction(params, worldFunctionSelector);
76
+
77
+ // Construct the System's calldata by replacing the World's function selector with the System's.
78
+ // Use `readHex` instead of `slice` to prevent out-of-bounds errors with calldata that has no args.
79
+ const systemCalldata = concat([systemFunctionSelector, readHex(worldCalldata, 4)]);
80
+
81
+ // Construct args for `callFrom`.
82
+ const callFromArgs: typeof writeArgs = {
83
+ ...writeArgs,
84
+ functionName: "callFrom",
85
+ args: [params.delegatorAddress, systemId, systemCalldata],
86
+ };
87
+
88
+ // Call `writeContract` with the new args.
89
+ return getAction(client, writeContract, "writeContract")(callFromArgs);
90
+ },
91
+ });
92
+ }
93
+
94
+ const systemFunctionCache = new Map<Hex, SystemFunction>();
95
+
96
+ async function worldFunctionToSystemFunction(
97
+ params: CallFromParameters,
98
+ worldFunctionSelector: Hex,
99
+ ): Promise<SystemFunction> {
100
+ const cacheKey = concat([params.worldAddress, worldFunctionSelector]);
101
+
102
+ // Use cache if the function has been called previously.
103
+ const cached = systemFunctionCache.get(cacheKey);
104
+ if (cached) return cached;
105
+
106
+ // If a mapping function is provided, use it. Otherwise, call the World contract.
107
+ const systemFunction = params.worldFunctionToSystemFunction
108
+ ? await params.worldFunctionToSystemFunction(worldFunctionSelector)
109
+ : await retrieveSystemFunctionFromContract(params.publicClient, params.worldAddress, worldFunctionSelector);
110
+
111
+ systemFunctionCache.set(cacheKey, systemFunction);
112
+
113
+ return systemFunction;
114
+ }
115
+
116
+ async function retrieveSystemFunctionFromContract(
117
+ publicClient: PublicClient,
118
+ worldAddress: Hex,
119
+ worldFunctionSelector: Hex,
120
+ ): Promise<SystemFunction> {
121
+ const table = worldConfig.tables.world__FunctionSelectors;
122
+
123
+ const keySchema = getSchemaTypes(getKeySchema(table));
124
+ const valueSchema = getSchemaTypes(getValueSchema(table));
125
+
126
+ const [staticData, encodedLengths, dynamicData] = await publicClient.readContract({
127
+ address: worldAddress,
128
+ abi: IStoreReadAbi,
129
+ functionName: "getRecord",
130
+ args: [table.tableId, encodeKey(keySchema, { worldFunctionSelector })],
131
+ });
132
+
133
+ const decoded = decodeValueArgs(valueSchema, { staticData, encodedLengths, dynamicData });
134
+
135
+ const systemFunction: SystemFunction = {
136
+ systemId: decoded.systemId,
137
+ systemFunctionSelector: decoded.systemFunctionSelector,
138
+ };
139
+
140
+ return systemFunction;
141
+ }
@@ -0,0 +1,11 @@
1
+ // Follows https://viem.sh/docs/actions/wallet/signTypedData#usage
2
+
3
+ export const delegationWithSignatureTypes = {
4
+ Delegation: [
5
+ { name: "delegatee", type: "address" },
6
+ { name: "delegationControlId", type: "bytes32" },
7
+ { name: "initCallData", type: "bytes" },
8
+ { name: "delegator", type: "address" },
9
+ { name: "nonce", type: "uint256" },
10
+ ],
11
+ } as const;
@@ -7,3 +7,7 @@ export * from "../encodeSystemCall";
7
7
  export * from "../encodeSystemCallFrom";
8
8
  export * from "../encodeSystemCalls";
9
9
  export * from "../encodeSystemCallsFrom";
10
+
11
+ export * from "../actions/callFrom";
12
+
13
+ export * from "../delegationWithSignatureTypes";