@latticexyz/world-modules 2.2.17-e347d31fd6f6ac4225ee679bceb6e040c6f8d0d8 → 2.2.17-f1d5432fe2c9abb19fa378f790217e67d6dd8504

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 (130) hide show
  1. package/dist/mud.config.d.ts +57 -1
  2. package/dist/mud.config.js +1 -1
  3. package/dist/mud.config.js.map +1 -1
  4. package/out/AccessManagementSystem.sol/AccessManagementSystem.json +1 -1
  5. package/out/Allowances.sol/Allowances.json +1 -1
  6. package/out/ArrayLib.sol/ArrayLib.json +1 -1
  7. package/out/BalanceTransferSystem.sol/BalanceTransferSystem.json +1 -1
  8. package/out/Balances.sol/Balances.json +1 -1
  9. package/out/BatchCallSystem.sol/BatchCallSystem.json +1 -1
  10. package/out/CallWithSignatureModule.t.sol/Unstable_CallWithSignatureModuleTest.abi.json +541 -0
  11. package/out/CallWithSignatureModule.t.sol/Unstable_CallWithSignatureModuleTest.abi.json.d.ts +543 -0
  12. package/out/CallWithSignatureModule.t.sol/Unstable_CallWithSignatureModuleTest.json +1 -0
  13. package/out/CallWithSignatureNonces.sol/CallWithSignatureNonces.abi.json +1 -0
  14. package/out/CallWithSignatureNonces.sol/CallWithSignatureNonces.json +1 -0
  15. package/out/CallboundDelegationControl.sol/CallboundDelegationControl.json +1 -1
  16. package/out/CallboundDelegations.sol/CallboundDelegations.json +1 -1
  17. package/out/DelegationControlMock.sol/DelegationControlMock.json +1 -1
  18. package/out/ECDSA.sol/ECDSA.abi.json +29 -0
  19. package/out/ECDSA.sol/ECDSA.abi.json.d.ts +31 -0
  20. package/out/ECDSA.sol/ECDSA.json +1 -0
  21. package/out/ERC20.t.sol/ERC20Test.json +1 -1
  22. package/out/ERC20Metadata.sol/ERC20Metadata.json +1 -1
  23. package/out/ERC20Module.sol/ERC20Module.json +1 -1
  24. package/out/ERC20Module.sol/ERC20ModuleRegistrationLib.json +1 -1
  25. package/out/ERC20Registry.sol/ERC20Registry.json +1 -1
  26. package/out/ERC20System.sol/ERC20System.json +1 -1
  27. package/out/ERC721.t.sol/ERC721Recipient.json +1 -1
  28. package/out/ERC721.t.sol/ERC721Test.json +1 -1
  29. package/out/ERC721.t.sol/ERC721TokenReceiver.json +1 -1
  30. package/out/ERC721.t.sol/NonERC721Recipient.json +1 -1
  31. package/out/ERC721.t.sol/RevertingERC721Recipient.json +1 -1
  32. package/out/ERC721.t.sol/WrongReturnDataERC721Recipient.json +1 -1
  33. package/out/ERC721Metadata.sol/ERC721Metadata.json +1 -1
  34. package/out/ERC721Module.sol/ERC721Module.json +1 -1
  35. package/out/ERC721Module.sol/ERC721ModuleRegistrationLib.json +1 -1
  36. package/out/ERC721Registry.sol/ERC721Registry.json +1 -1
  37. package/out/ERC721System.sol/ERC721System.json +1 -1
  38. package/out/EchoSubscriber.sol/EchoSubscriber.json +1 -1
  39. package/out/GasReporter.sol/GasReporter.json +1 -1
  40. package/out/IERC1271.sol/IERC1271.abi.json +26 -0
  41. package/out/IERC1271.sol/IERC1271.abi.json.d.ts +28 -0
  42. package/out/IERC1271.sol/IERC1271.json +1 -0
  43. package/out/IERC20.sol/IERC20.json +1 -1
  44. package/out/IERC20Errors.sol/IERC20Errors.json +1 -1
  45. package/out/IERC20Events.sol/IERC20Events.json +1 -1
  46. package/out/IERC20Mintable.sol/IERC20Mintable.json +1 -1
  47. package/out/IERC721.sol/IERC721.json +1 -1
  48. package/out/IERC721Errors.sol/IERC721Errors.json +1 -1
  49. package/out/IERC721Events.sol/IERC721Events.json +1 -1
  50. package/out/IERC721Metadata.sol/IERC721Metadata.json +1 -1
  51. package/out/IERC721Mintable.sol/IERC721Mintable.json +1 -1
  52. package/out/IERC721Receiver.sol/IERC721Receiver.json +1 -1
  53. package/out/IUnstable_CallWithSignatureErrors.sol/IUnstable_CallWithSignatureErrors.abi.json +7 -0
  54. package/out/IUnstable_CallWithSignatureErrors.sol/IUnstable_CallWithSignatureErrors.abi.json.d.ts +9 -0
  55. package/out/IUnstable_CallWithSignatureErrors.sol/IUnstable_CallWithSignatureErrors.json +1 -0
  56. package/out/InitModule.sol/InitModule.json +1 -1
  57. package/out/KeysInTable.sol/KeysInTable.json +1 -1
  58. package/out/KeysInTableHook.sol/KeysInTableHook.json +1 -1
  59. package/out/KeysInTableModule.sol/KeysInTableModule.json +1 -1
  60. package/out/KeysInTableModule.t.sol/KeysInTableModuleTest.json +1 -1
  61. package/out/KeysWithValue.sol/KeysWithValue.json +1 -1
  62. package/out/KeysWithValueHook.sol/KeysWithValueHook.json +1 -1
  63. package/out/KeysWithValueModule.sol/KeysWithValueModule.json +1 -1
  64. package/out/KeysWithValueModule.t.sol/KeysWithValueModuleTest.json +1 -1
  65. package/out/LibString.sol/LibString.json +1 -1
  66. package/out/ModuleInstallationSystem.sol/ModuleInstallationSystem.json +1 -1
  67. package/out/OperatorApproval.sol/OperatorApproval.json +1 -1
  68. package/out/Owners.sol/Owners.json +1 -1
  69. package/out/Puppet.sol/Puppet.json +1 -1
  70. package/out/PuppetDelegationControl.sol/PuppetDelegationControl.json +1 -1
  71. package/out/PuppetFactorySystem.sol/PuppetFactorySystem.json +1 -1
  72. package/out/PuppetMaster.sol/PuppetMaster.json +1 -1
  73. package/out/PuppetModule.sol/PuppetModule.json +1 -1
  74. package/out/PuppetModule.t.sol/PuppetModuleTest.json +1 -1
  75. package/out/PuppetModule.t.sol/PuppetTestSystem.json +1 -1
  76. package/out/PuppetRegistry.sol/PuppetRegistry.json +1 -1
  77. package/out/RegistrationSystem.sol/RegistrationSystem.json +1 -1
  78. package/out/RevertSubscriber.sol/RevertSubscriber.json +1 -1
  79. package/out/SignatureChecker.sol/SignatureChecker.abi.json +1 -0
  80. package/out/SignatureChecker.sol/SignatureChecker.json +1 -0
  81. package/out/StandardDelegationsModule.sol/StandardDelegationsModule.json +1 -1
  82. package/out/StandardDelegationsModule.t.sol/StandardDelegationsModuleTest.json +1 -1
  83. package/out/StdError.sol/stdError.json +1 -1
  84. package/out/StoreRead.sol/StoreRead.json +1 -1
  85. package/out/StoreRegistrationSystem.sol/StoreRegistrationSystem.json +1 -1
  86. package/out/System.sol/System.json +1 -1
  87. package/out/SystemSwitch.sol/SystemSwitch.json +1 -1
  88. package/out/SystemSwitch.t.sol/EchoSystem.json +1 -1
  89. package/out/SystemSwitch.t.sol/SystemSwitchTest.json +1 -1
  90. package/out/SystemboundDelegationControl.sol/SystemboundDelegationControl.json +1 -1
  91. package/out/SystemboundDelegations.sol/SystemboundDelegations.json +1 -1
  92. package/out/TimeboundDelegationControl.sol/TimeboundDelegationControl.json +1 -1
  93. package/out/TimeboundDelegations.sol/TimeboundDelegations.json +1 -1
  94. package/out/TokenApproval.sol/TokenApproval.json +1 -1
  95. package/out/TokenURI.sol/TokenURI.json +1 -1
  96. package/out/TotalSupply.sol/TotalSupply.json +1 -1
  97. package/out/UniqueEntity.sol/UniqueEntity.json +1 -1
  98. package/out/UniqueEntityModule.sol/UniqueEntityModule.json +1 -1
  99. package/out/UniqueEntityModule.t.sol/UniqueEntityModuleTest.json +1 -1
  100. package/out/UniqueEntityModule.t.sol/UniqueEntityTestSystem.json +1 -1
  101. package/out/UniqueEntitySystem.sol/UniqueEntitySystem.json +1 -1
  102. package/out/Unstable_CallWithSignatureModule.sol/Unstable_CallWithSignatureModule.abi.json +436 -0
  103. package/out/Unstable_CallWithSignatureModule.sol/Unstable_CallWithSignatureModule.abi.json.d.ts +438 -0
  104. package/out/Unstable_CallWithSignatureModule.sol/Unstable_CallWithSignatureModule.json +1 -0
  105. package/out/Unstable_CallWithSignatureSystem.sol/Unstable_CallWithSignatureSystem.abi.json +183 -0
  106. package/out/Unstable_CallWithSignatureSystem.sol/Unstable_CallWithSignatureSystem.abi.json.d.ts +185 -0
  107. package/out/Unstable_CallWithSignatureSystem.sol/Unstable_CallWithSignatureSystem.json +1 -0
  108. package/out/UsedKeysIndex.sol/UsedKeysIndex.json +1 -1
  109. package/out/World.sol/World.json +1 -1
  110. package/out/World.t.sol/EchoSystemHook.json +1 -1
  111. package/out/World.t.sol/PayableFallbackSystem.json +1 -1
  112. package/out/World.t.sol/RevertSystemHook.json +1 -1
  113. package/out/World.t.sol/WorldTest.json +1 -1
  114. package/out/World.t.sol/WorldTestSystem.json +1 -1
  115. package/out/WorldRegistrationSystem.sol/WorldRegistrationSystem.json +1 -1
  116. package/out/build-info/{5adb61cced337bb5e7b3d4344c85094e.json → 168545c7409f2927f6e50ed7ce0d033c.json} +1 -1
  117. package/out/query.t.sol/QueryTest.json +1 -1
  118. package/out/test.sol/DSTest.json +1 -1
  119. package/package.json +9 -9
  120. package/src/codegen/index.sol +1 -0
  121. package/src/modules/callwithsignature/ECDSA.sol +174 -0
  122. package/src/modules/callwithsignature/IERC1271.sol +17 -0
  123. package/src/modules/callwithsignature/IUnstable_CallWithSignatureErrors.sol +9 -0
  124. package/src/modules/callwithsignature/SignatureChecker.sol +50 -0
  125. package/src/modules/callwithsignature/Unstable_CallWithSignatureModule.sol +48 -0
  126. package/src/modules/callwithsignature/Unstable_CallWithSignatureSystem.sol +36 -0
  127. package/src/modules/callwithsignature/constants.sol +10 -0
  128. package/src/modules/callwithsignature/getSignedMessageHash.sol +54 -0
  129. package/src/modules/callwithsignature/tables/CallWithSignatureNonces.sol +199 -0
  130. package/src/modules/callwithsignature/validateCallWithSignature.sol +31 -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":"0x60806040525f805460ff1916600117905534801561001b575f80fd5b5061025e806100295f395ff3fe608060405234801561000f575f80fd5b5060043610610034575f3560e01c8063ba414fa614610038578063fa7626d414610054575b5f80fd5b610040610060565b604051901515815260200160405180910390f35b5f546100409060ff1681565b5f8054610100900460ff161561007e57505f54610100900460ff1690565b5f737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156101b35760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093525f929091610121917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016101e5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261015991610220565b5f604051808303815f865af19150503d805f8114610192576040519150601f19603f3d011682016040523d82523d5f602084013e610197565b606091505b50915050808060200190518101906101af9190610232565b9150505b919050565b5f81515f5b818110156101d757602081850181015186830152016101bd565b505f93019283525090919050565b7fffffffff00000000000000000000000000000000000000000000000000000000831681525f61021860048301846101b8565b949350505050565b5f61022b82846101b8565b9392505050565b5f60208284031215610242575f80fd5b8151801515811461022b575f80fdfea164736f6c6343000818000a","sourceMap":"715:19781:114:-:0;;;1572:26;;;-1:-1:-1;;1572:26:114;1594:4;1572:26;;;715:19781;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561000f575f80fd5b5060043610610034575f3560e01c8063ba414fa614610038578063fa7626d414610054575b5f80fd5b610040610060565b604051901515815260200160405180910390f35b5f546100409060ff1681565b5f8054610100900460ff161561007e57505f54610100900460ff1690565b5f737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156101b35760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093525f929091610121917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016101e5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261015991610220565b5f604051808303815f865af19150503d805f8114610192576040519150601f19603f3d011682016040523d82523d5f602084013e610197565b606091505b50915050808060200190518101906101af9190610232565b9150505b919050565b5f81515f5b818110156101d757602081850181015186830152016101bd565b505f93019283525090919050565b7fffffffff00000000000000000000000000000000000000000000000000000000831681525f61021860048301846101b8565b949350505050565b5f61022b82846101b8565b9392505050565b5f60208284031215610242575f80fd5b8151801515811461022b575f80fdfea164736f6c6343000818000a","sourceMap":"715:19781:114:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1819:584;;;:::i;:::-;;;179:14:213;;172:22;154:41;;142:2;127:18;1819:584:114;;;;;;;1572:26;;;;;;;;;1819:584;1853:4;1873:7;;;;;;;1869:528;;;-1:-1:-1;1903:7:114;;;;;;;;1819:584::o;1869:528::-;1941:17;2997:42;2985:55;3066:16;1980:374;;2196:43;;;1671:64;2196:43;;;380:74:213;;;2221:17:114;470:18:213;;;463:34;2196:43:114;;;;;;;;;353:18:213;;;2196:43:114;;;-1:-1:-1;;1671:64:114;;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:114:o;508:322:213:-;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:213;768:16;;793:13;;;-1:-1:-1;768:16:213;;508:322;-1:-1:-1;508:322:213: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:213:o;1164:189::-;1293:3;1318:29;1343:3;1335:6;1318:29;:::i;:::-;1311:36;1164:189;-1:-1:-1;;;1164:189:213: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\":\"cancun\",\"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":"cancun","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":114}
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":"0x60806040525f805460ff1916600117905534801561001b575f80fd5b5061025e806100295f395ff3fe608060405234801561000f575f80fd5b5060043610610034575f3560e01c8063ba414fa614610038578063fa7626d414610054575b5f80fd5b610040610060565b604051901515815260200160405180910390f35b5f546100409060ff1681565b5f8054610100900460ff161561007e57505f54610100900460ff1690565b5f737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156101b35760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093525f929091610121917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016101e5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261015991610220565b5f604051808303815f865af19150503d805f8114610192576040519150601f19603f3d011682016040523d82523d5f602084013e610197565b606091505b50915050808060200190518101906101af9190610232565b9150505b919050565b5f81515f5b818110156101d757602081850181015186830152016101bd565b505f93019283525090919050565b7fffffffff00000000000000000000000000000000000000000000000000000000831681525f61021860048301846101b8565b949350505050565b5f61022b82846101b8565b9392505050565b5f60208284031215610242575f80fd5b8151801515811461022b575f80fdfea164736f6c6343000818000a","sourceMap":"715:19781:114:-:0;;;1572:26;;;-1:-1:-1;;1572:26:114;1594:4;1572:26;;;715:19781;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561000f575f80fd5b5060043610610034575f3560e01c8063ba414fa614610038578063fa7626d414610054575b5f80fd5b610040610060565b604051901515815260200160405180910390f35b5f546100409060ff1681565b5f8054610100900460ff161561007e57505f54610100900460ff1690565b5f737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156101b35760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093525f929091610121917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc4916080016101e5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261015991610220565b5f604051808303815f865af19150503d805f8114610192576040519150601f19603f3d011682016040523d82523d5f602084013e610197565b606091505b50915050808060200190518101906101af9190610232565b9150505b919050565b5f81515f5b818110156101d757602081850181015186830152016101bd565b505f93019283525090919050565b7fffffffff00000000000000000000000000000000000000000000000000000000831681525f61021860048301846101b8565b949350505050565b5f61022b82846101b8565b9392505050565b5f60208284031215610242575f80fd5b8151801515811461022b575f80fdfea164736f6c6343000818000a","sourceMap":"715:19781:114:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1819:584;;;:::i;:::-;;;179:14:224;;172:22;154:41;;142:2;127:18;1819:584:114;;;;;;;1572:26;;;;;;;;;1819:584;1853:4;1873:7;;;;;;;1869:528;;;-1:-1:-1;1903:7:114;;;;;;;;1819:584::o;1869:528::-;1941:17;2997:42;2985:55;3066:16;1980:374;;2196:43;;;1671:64;2196:43;;;380:74:224;;;2221:17:114;470:18:224;;;463:34;2196:43:114;;;;;;;;;353:18:224;;;2196:43:114;;;-1:-1:-1;;1671:64:114;;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:114:o;508:322:224:-;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:224;768:16;;793:13;;;-1:-1:-1;768:16:224;;508:322;-1:-1:-1;508:322:224: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:224:o;1164:189::-;1293:3;1318:29;1343:3;1335:6;1318:29;:::i;:::-;1311:36;1164:189;-1:-1:-1;;;1164:189:224: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\":\"cancun\",\"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":"cancun","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":114}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@latticexyz/world-modules",
3
- "version": "2.2.17-e347d31fd6f6ac4225ee679bceb6e040c6f8d0d8",
3
+ "version": "2.2.17-f1d5432fe2c9abb19fa378f790217e67d6dd8504",
4
4
  "description": "World modules",
5
5
  "repository": {
6
6
  "type": "git",
@@ -27,11 +27,11 @@
27
27
  ],
28
28
  "dependencies": {
29
29
  "zod": "3.23.8",
30
- "@latticexyz/common": "2.2.17-e347d31fd6f6ac4225ee679bceb6e040c6f8d0d8",
31
- "@latticexyz/config": "2.2.17-e347d31fd6f6ac4225ee679bceb6e040c6f8d0d8",
32
- "@latticexyz/schema-type": "2.2.17-e347d31fd6f6ac4225ee679bceb6e040c6f8d0d8",
33
- "@latticexyz/store": "2.2.17-e347d31fd6f6ac4225ee679bceb6e040c6f8d0d8",
34
- "@latticexyz/world": "2.2.17-e347d31fd6f6ac4225ee679bceb6e040c6f8d0d8"
30
+ "@latticexyz/common": "2.2.17-f1d5432fe2c9abb19fa378f790217e67d6dd8504",
31
+ "@latticexyz/config": "2.2.17-f1d5432fe2c9abb19fa378f790217e67d6dd8504",
32
+ "@latticexyz/schema-type": "2.2.17-f1d5432fe2c9abb19fa378f790217e67d6dd8504",
33
+ "@latticexyz/store": "2.2.17-f1d5432fe2c9abb19fa378f790217e67d6dd8504",
34
+ "@latticexyz/world": "2.2.17-f1d5432fe2c9abb19fa378f790217e67d6dd8504"
35
35
  },
36
36
  "devDependencies": {
37
37
  "@types/ejs": "^3.1.1",
@@ -40,9 +40,9 @@
40
40
  "glob": "^10.4.2",
41
41
  "solhint": "^3.3.7",
42
42
  "vitest": "0.34.6",
43
- "@latticexyz/abi-ts": "2.2.17-e347d31fd6f6ac4225ee679bceb6e040c6f8d0d8",
44
- "@latticexyz/cli": "2.2.17-e347d31fd6f6ac4225ee679bceb6e040c6f8d0d8",
45
- "@latticexyz/gas-report": "2.2.17-e347d31fd6f6ac4225ee679bceb6e040c6f8d0d8"
43
+ "@latticexyz/abi-ts": "2.2.17-f1d5432fe2c9abb19fa378f790217e67d6dd8504",
44
+ "@latticexyz/cli": "2.2.17-f1d5432fe2c9abb19fa378f790217e67d6dd8504",
45
+ "@latticexyz/gas-report": "2.2.17-f1d5432fe2c9abb19fa378f790217e67d6dd8504"
46
46
  },
47
47
  "publishConfig": {
48
48
  "access": "public"
@@ -22,3 +22,4 @@ import { Owners } from "../modules/erc721-puppet/tables/Owners.sol";
22
22
  import { TokenApproval } from "../modules/erc721-puppet/tables/TokenApproval.sol";
23
23
  import { OperatorApproval } from "../modules/erc721-puppet/tables/OperatorApproval.sol";
24
24
  import { ERC721Registry } from "../modules/erc721-puppet/tables/ERC721Registry.sol";
25
+ import { CallWithSignatureNonces } from "../modules/callwithsignature/tables/CallWithSignatureNonces.sol";
@@ -0,0 +1,174 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/ECDSA.sol)
3
+
4
+ pragma solidity >=0.8.24;
5
+
6
+ /**
7
+ * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.
8
+ *
9
+ * These functions can be used to verify that a message was signed by the holder
10
+ * of the private keys of a given address.
11
+ */
12
+ library ECDSA {
13
+ enum RecoverError {
14
+ NoError,
15
+ InvalidSignature,
16
+ InvalidSignatureLength,
17
+ InvalidSignatureS
18
+ }
19
+
20
+ /**
21
+ * @dev The signature derives the `address(0)`.
22
+ */
23
+ error ECDSAInvalidSignature();
24
+
25
+ /**
26
+ * @dev The signature has an invalid length.
27
+ */
28
+ error ECDSAInvalidSignatureLength(uint256 length);
29
+
30
+ /**
31
+ * @dev The signature has an S value that is in the upper half order.
32
+ */
33
+ error ECDSAInvalidSignatureS(bytes32 s);
34
+
35
+ /**
36
+ * @dev Returns the address that signed a hashed message (`hash`) with `signature` or an error. This will not
37
+ * return address(0) without also returning an error description. Errors are documented using an enum (error type)
38
+ * and a bytes32 providing additional information about the error.
39
+ *
40
+ * If no error is returned, then the address can be used for verification purposes.
41
+ *
42
+ * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:
43
+ * this function rejects them by requiring the `s` value to be in the lower
44
+ * half order, and the `v` value to be either 27 or 28.
45
+ *
46
+ * IMPORTANT: `hash` _must_ be the result of a hash operation for the
47
+ * verification to be secure: it is possible to craft signatures that
48
+ * recover to arbitrary addresses for non-hashed data. A safe way to ensure
49
+ * this is by receiving a hash of the original message (which may otherwise
50
+ * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.
51
+ *
52
+ * Documentation for signature generation:
53
+ * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]
54
+ * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]
55
+ */
56
+ function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError, bytes32) {
57
+ if (signature.length == 65) {
58
+ bytes32 r;
59
+ bytes32 s;
60
+ uint8 v;
61
+ // ecrecover takes the signature parameters, and the only way to get them
62
+ // currently is to use assembly.
63
+ /// @solidity memory-safe-assembly
64
+ assembly {
65
+ r := mload(add(signature, 0x20))
66
+ s := mload(add(signature, 0x40))
67
+ v := byte(0, mload(add(signature, 0x60)))
68
+ }
69
+ return tryRecover(hash, v, r, s);
70
+ } else {
71
+ return (address(0), RecoverError.InvalidSignatureLength, bytes32(signature.length));
72
+ }
73
+ }
74
+
75
+ /**
76
+ * @dev Returns the address that signed a hashed message (`hash`) with
77
+ * `signature`. This address can then be used for verification purposes.
78
+ *
79
+ * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:
80
+ * this function rejects them by requiring the `s` value to be in the lower
81
+ * half order, and the `v` value to be either 27 or 28.
82
+ *
83
+ * IMPORTANT: `hash` _must_ be the result of a hash operation for the
84
+ * verification to be secure: it is possible to craft signatures that
85
+ * recover to arbitrary addresses for non-hashed data. A safe way to ensure
86
+ * this is by receiving a hash of the original message (which may otherwise
87
+ * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.
88
+ */
89
+ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
90
+ (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, signature);
91
+ _throwError(error, errorArg);
92
+ return recovered;
93
+ }
94
+
95
+ /**
96
+ * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.
97
+ *
98
+ * See https://eips.ethereum.org/EIPS/eip-2098[ERC-2098 short signatures]
99
+ */
100
+ function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError, bytes32) {
101
+ unchecked {
102
+ bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);
103
+ // We do not check for an overflow here since the shift operation results in 0 or 1.
104
+ uint8 v = uint8((uint256(vs) >> 255) + 27);
105
+ return tryRecover(hash, v, r, s);
106
+ }
107
+ }
108
+
109
+ /**
110
+ * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.
111
+ */
112
+ function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {
113
+ (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, r, vs);
114
+ _throwError(error, errorArg);
115
+ return recovered;
116
+ }
117
+
118
+ /**
119
+ * @dev Overload of {ECDSA-tryRecover} that receives the `v`,
120
+ * `r` and `s` signature fields separately.
121
+ */
122
+ function tryRecover(
123
+ bytes32 hash,
124
+ uint8 v,
125
+ bytes32 r,
126
+ bytes32 s
127
+ ) internal pure returns (address, RecoverError, bytes32) {
128
+ // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature
129
+ // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines
130
+ // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most
131
+ // signatures from current libraries generate a unique signature with an s-value in the lower half order.
132
+ //
133
+ // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value
134
+ // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or
135
+ // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept
136
+ // these malleable signatures as well.
137
+ if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {
138
+ return (address(0), RecoverError.InvalidSignatureS, s);
139
+ }
140
+
141
+ // If the signature is valid (and not malleable), return the signer address
142
+ address signer = ecrecover(hash, v, r, s);
143
+ if (signer == address(0)) {
144
+ return (address(0), RecoverError.InvalidSignature, bytes32(0));
145
+ }
146
+
147
+ return (signer, RecoverError.NoError, bytes32(0));
148
+ }
149
+
150
+ /**
151
+ * @dev Overload of {ECDSA-recover} that receives the `v`,
152
+ * `r` and `s` signature fields separately.
153
+ */
154
+ function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {
155
+ (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, v, r, s);
156
+ _throwError(error, errorArg);
157
+ return recovered;
158
+ }
159
+
160
+ /**
161
+ * @dev Optionally reverts with the corresponding custom error according to the `error` argument provided.
162
+ */
163
+ function _throwError(RecoverError error, bytes32 errorArg) private pure {
164
+ if (error == RecoverError.NoError) {
165
+ return; // no error: do nothing
166
+ } else if (error == RecoverError.InvalidSignature) {
167
+ revert ECDSAInvalidSignature();
168
+ } else if (error == RecoverError.InvalidSignatureLength) {
169
+ revert ECDSAInvalidSignatureLength(uint256(errorArg));
170
+ } else if (error == RecoverError.InvalidSignatureS) {
171
+ revert ECDSAInvalidSignatureS(errorArg);
172
+ }
173
+ }
174
+ }
@@ -0,0 +1,17 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC1271.sol)
3
+
4
+ pragma solidity ^0.8.24;
5
+
6
+ /**
7
+ * @dev Interface of the ERC-1271 standard signature validation method for
8
+ * contracts as defined in https://eips.ethereum.org/EIPS/eip-1271[ERC-1271].
9
+ */
10
+ interface IERC1271 {
11
+ /**
12
+ * @dev Should return whether the signature provided is valid for the provided data
13
+ * @param hash Hash of the data to be signed
14
+ * @param signature Signature byte array associated with _data
15
+ */
16
+ function isValidSignature(bytes32 hash, bytes memory signature) external view returns (bytes4 magicValue);
17
+ }
@@ -0,0 +1,9 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity >=0.8.24;
3
+
4
+ interface IUnstable_CallWithSignatureErrors {
5
+ /**
6
+ * @dev Mismatched signature.
7
+ */
8
+ error InvalidSignature();
9
+ }
@@ -0,0 +1,50 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/SignatureChecker.sol)
3
+
4
+ pragma solidity ^0.8.24;
5
+
6
+ import { ECDSA } from "./ECDSA.sol";
7
+ import { IERC1271 } from "./IERC1271.sol";
8
+
9
+ /**
10
+ * @dev Signature verification helper that can be used instead of `ECDSA.recover` to seamlessly support both ECDSA
11
+ * signatures from externally owned accounts (EOAs) as well as ERC-1271 signatures from smart contract wallets like
12
+ * Argent and Safe Wallet (previously Gnosis Safe).
13
+ */
14
+ library SignatureChecker {
15
+ /**
16
+ * @dev Checks if a signature is valid for a given signer and data hash. If the signer is a smart contract, the
17
+ * signature is validated against that smart contract using ERC-1271, otherwise it's validated using `ECDSA.recover`.
18
+ *
19
+ * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus
20
+ * change through time. It could return true at block N and false at block N+1 (or the opposite).
21
+ */
22
+ function isValidSignatureNow(address signer, bytes32 hash, bytes memory signature) internal view returns (bool) {
23
+ if (signer.code.length == 0) {
24
+ (address recovered, ECDSA.RecoverError err, ) = ECDSA.tryRecover(hash, signature);
25
+ return err == ECDSA.RecoverError.NoError && recovered == signer;
26
+ } else {
27
+ return isValidERC1271SignatureNow(signer, hash, signature);
28
+ }
29
+ }
30
+
31
+ /**
32
+ * @dev Checks if a signature is valid for a given signer and data hash. The signature is validated
33
+ * against the signer smart contract using ERC-1271.
34
+ *
35
+ * NOTE: Unlike ECDSA signatures, contract signatures are revocable, and the outcome of this function can thus
36
+ * change through time. It could return true at block N and false at block N+1 (or the opposite).
37
+ */
38
+ function isValidERC1271SignatureNow(
39
+ address signer,
40
+ bytes32 hash,
41
+ bytes memory signature
42
+ ) internal view returns (bool) {
43
+ (bool success, bytes memory result) = signer.staticcall(
44
+ abi.encodeCall(IERC1271.isValidSignature, (hash, signature))
45
+ );
46
+ return (success &&
47
+ result.length >= 32 &&
48
+ abi.decode(result, (bytes32)) == bytes32(IERC1271.isValidSignature.selector));
49
+ }
50
+ }
@@ -0,0 +1,48 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity >=0.8.24;
3
+
4
+ import { IBaseWorld } from "@latticexyz/world/src/codegen/interfaces/IBaseWorld.sol";
5
+
6
+ import { Module } from "@latticexyz/world/src/Module.sol";
7
+ import { revertWithBytes } from "@latticexyz/world/src/revertWithBytes.sol";
8
+
9
+ import { CallWithSignatureNonces } from "./tables/CallWithSignatureNonces.sol";
10
+ import { Unstable_CallWithSignatureSystem } from "./Unstable_CallWithSignatureSystem.sol";
11
+
12
+ import { DELEGATION_SYSTEM_ID } from "./constants.sol";
13
+
14
+ contract Unstable_CallWithSignatureModule is Module {
15
+ Unstable_CallWithSignatureSystem private immutable callWithSignatureSystem = new Unstable_CallWithSignatureSystem();
16
+
17
+ function installRoot(bytes memory encodedArgs) public {
18
+ requireNotInstalled(__self, encodedArgs);
19
+
20
+ IBaseWorld world = IBaseWorld(_world());
21
+
22
+ // Register table
23
+ CallWithSignatureNonces._register();
24
+
25
+ // Register system
26
+ (bool success, bytes memory data) = address(world).delegatecall(
27
+ abi.encodeCall(world.registerSystem, (DELEGATION_SYSTEM_ID, callWithSignatureSystem, true))
28
+ );
29
+ if (!success) revertWithBytes(data);
30
+
31
+ // Register system's functions
32
+ (success, data) = address(world).delegatecall(
33
+ abi.encodeCall(
34
+ world.registerRootFunctionSelector,
35
+ (
36
+ DELEGATION_SYSTEM_ID,
37
+ "callWithSignature(address,bytes32,bytes,bytes)",
38
+ "callWithSignature(address,bytes32,bytes,bytes)"
39
+ )
40
+ )
41
+ );
42
+ if (!success) revertWithBytes(data);
43
+ }
44
+
45
+ function install(bytes memory) public pure {
46
+ revert Module_NonRootInstallNotSupported();
47
+ }
48
+ }
@@ -0,0 +1,36 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity >=0.8.24;
3
+
4
+ import { ResourceId } from "@latticexyz/store/src/ResourceId.sol";
5
+ import { System } from "@latticexyz/world/src/System.sol";
6
+ import { SystemCall } from "@latticexyz/world/src/SystemCall.sol";
7
+ import { createDelegation } from "@latticexyz/world/src/modules/init/implementations/createDelegation.sol";
8
+
9
+ import { CallWithSignatureNonces } from "./tables/CallWithSignatureNonces.sol";
10
+ import { getSignedMessageHash } from "./getSignedMessageHash.sol";
11
+ import { ECDSA } from "./ECDSA.sol";
12
+ import { validateCallWithSignature } from "./validateCallWithSignature.sol";
13
+ import { IUnstable_CallWithSignatureErrors } from "./IUnstable_CallWithSignatureErrors.sol";
14
+
15
+ contract Unstable_CallWithSignatureSystem is System, IUnstable_CallWithSignatureErrors {
16
+ /**
17
+ * @notice Calls a system with a given system ID using the given signature.
18
+ * @param signer The address on whose behalf the system is called.
19
+ * @param systemId The ID of the system to be called.
20
+ * @param callData The ABI data for the system call.
21
+ * @param signature The EIP712 signature.
22
+ * @return Return data from the system call.
23
+ */
24
+ function callWithSignature(
25
+ address signer,
26
+ ResourceId systemId,
27
+ bytes memory callData,
28
+ bytes memory signature
29
+ ) external payable returns (bytes memory) {
30
+ validateCallWithSignature(signer, systemId, callData, signature);
31
+
32
+ CallWithSignatureNonces._set(signer, CallWithSignatureNonces._get(signer) + 1);
33
+
34
+ return SystemCall.callWithHooksOrRevert(signer, systemId, callData, _msgValue());
35
+ }
36
+ }
@@ -0,0 +1,10 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity >=0.8.24;
3
+
4
+ import { ResourceId } from "@latticexyz/world/src/WorldResourceId.sol";
5
+ import { ROOT_NAMESPACE } from "@latticexyz/world/src/constants.sol";
6
+ import { RESOURCE_TABLE, RESOURCE_SYSTEM, RESOURCE_NAMESPACE } from "@latticexyz/world/src/worldResourceTypes.sol";
7
+
8
+ ResourceId constant DELEGATION_SYSTEM_ID = ResourceId.wrap(
9
+ (bytes32(abi.encodePacked(RESOURCE_SYSTEM, ROOT_NAMESPACE, "Delegation")))
10
+ );
@@ -0,0 +1,54 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity >=0.8.24;
3
+
4
+ import { ResourceId } from "@latticexyz/store/src/ResourceId.sol";
5
+ import { WorldResourceIdLib, WorldResourceIdInstance } from "@latticexyz/world/src/WorldResourceId.sol";
6
+
7
+ using WorldResourceIdInstance for ResourceId;
8
+
9
+ // Note the intended value of the `salt` field is the chain ID.
10
+ // It is not included in `chainId`, to allow cross-chain signing without requiring wallets to switch networks.
11
+ // The value of this field should be the chain on which the world lives, rather than the chain the wallet is connected to.
12
+ bytes32 constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(address verifyingContract,bytes32 salt)");
13
+ bytes32 constant CALL_TYPEHASH = keccak256(
14
+ "Call(address signer,string systemNamespace,string systemName,bytes callData,uint256 nonce)"
15
+ );
16
+
17
+ /**
18
+ * @notice Generate the message hash for a given delegation signature.
19
+ * For EIP712 signatures https://eips.ethereum.org/EIPS/eip-712
20
+ * @dev We include the signer address to prevent generating a signature that recovers to a random address that didn't sign the message.
21
+ * @param signer The address on whose behalf the system is called.
22
+ * @param systemId The ID of the system to be called.
23
+ * @param callData The ABI data for the system call.
24
+ * @param nonce The nonce of the signer
25
+ * @param worldAddress The world address
26
+ * @return Return the message hash.
27
+ */
28
+ function getSignedMessageHash(
29
+ address signer,
30
+ ResourceId systemId,
31
+ bytes memory callData,
32
+ uint256 nonce,
33
+ address worldAddress
34
+ ) view returns (bytes32) {
35
+ bytes32 domainSeperator = keccak256(abi.encode(DOMAIN_TYPEHASH, worldAddress, bytes32(block.chainid)));
36
+
37
+ return
38
+ keccak256(
39
+ abi.encodePacked(
40
+ "\x19\x01",
41
+ domainSeperator,
42
+ keccak256(
43
+ abi.encode(
44
+ CALL_TYPEHASH,
45
+ signer,
46
+ keccak256(abi.encodePacked(WorldResourceIdLib.toTrimmedString(systemId.getNamespace()))),
47
+ keccak256(abi.encodePacked(WorldResourceIdLib.toTrimmedString(systemId.getName()))),
48
+ keccak256(callData),
49
+ nonce
50
+ )
51
+ )
52
+ )
53
+ );
54
+ }