{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":522011933,"defaultBranch":"main","name":"delegate-registry","ownerLogin":"delegatexyz","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2022-08-06T17:31:00.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/115590284?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"","listCacheKey":"v0:1695934584.0","currentOid":""},"activityList":{"items":[{"before":"6dff118676283f4991dd73a5b5ee08192f9e280b","after":"ce89e65f9364db21fc621e247a829d9c08374b4e","ref":"refs/heads/main","pushedAt":"2024-05-30T02:32:30.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"0xfoobar","name":null,"path":"/0xfoobar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/83792390?s=80&v=4"},"commit":{"message":"Create funding.json","shortMessageHtmlLink":"Create funding.json"}},{"before":"75aabd9b2e73d361df5827dac5b6a06971edfb25","after":"6dff118676283f4991dd73a5b5ee08192f9e280b","ref":"refs/heads/main","pushedAt":"2024-03-19T22:10:43.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"0xfoobar","name":null,"path":"/0xfoobar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/83792390?s=80&v=4"},"commit":{"message":"add Ronin deployments to README (#70)","shortMessageHtmlLink":"add Ronin deployments to README (#70)"}},{"before":"b548a9bd78d1d04646ed87cc667b25e10cd95d2f","after":"75aabd9b2e73d361df5827dac5b6a06971edfb25","ref":"refs/heads/main","pushedAt":"2024-01-25T23:47:30.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"0xfoobar","name":null,"path":"/0xfoobar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/83792390?s=80&v=4"},"commit":{"message":"cast send command for registry v2","shortMessageHtmlLink":"cast send command for registry v2"}},{"before":"7d58775ffd2500bbdfba00ce57d8797023c67cb9","after":"b548a9bd78d1d04646ed87cc667b25e10cd95d2f","ref":"refs/heads/main","pushedAt":"2024-01-23T23:41:57.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"0xfoobar","name":null,"path":"/0xfoobar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/83792390?s=80&v=4"},"commit":{"message":"singlesig deploy makefile command","shortMessageHtmlLink":"singlesig deploy makefile command"}},{"before":"65b8d1392dac8aa3ce50066d6f3d10f67348b93b","after":"7d58775ffd2500bbdfba00ce57d8797023c67cb9","ref":"refs/heads/main","pushedAt":"2024-01-21T16:30:39.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"0xfoobar","name":null,"path":"/0xfoobar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/83792390?s=80&v=4"},"commit":{"message":"whitespace","shortMessageHtmlLink":"whitespace"}},{"before":"04d42f6daf6b13dd0624a5db0c5de286f9a186a1","after":"65b8d1392dac8aa3ce50066d6f3d10f67348b93b","ref":"refs/heads/main","pushedAt":"2024-01-20T23:18:15.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"0xfoobar","name":null,"path":"/0xfoobar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/83792390?s=80&v=4"},"commit":{"message":"add read functions to README (#69)","shortMessageHtmlLink":"add read functions to README (#69)"}},{"before":"40d367d797bf67126a09ce06d657a4a7835557e3","after":"04d42f6daf6b13dd0624a5db0c5de286f9a186a1","ref":"refs/heads/main","pushedAt":"2023-11-15T03:23:18.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"0xfoobar","name":null,"path":"/0xfoobar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/83792390?s=80&v=4"},"commit":{"message":"Use V2 deployment address in README.md (#66)\n\n* Use V2 deployment address in README.md\r\n\r\n* Update README.md","shortMessageHtmlLink":"Use V2 deployment address in README.md (#66)"}},{"before":"40d367d797bf67126a09ce06d657a4a7835557e3","after":null,"ref":"refs/tags/v2.0","pushedAt":"2023-09-28T20:56:24.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"ryespresso","name":"rye","path":"/ryespresso","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/99738501?s=80&v=4"}},{"before":"38576a79bd3781cc719bf7e6ff242cba4420ca8c","after":"40d367d797bf67126a09ce06d657a4a7835557e3","ref":"refs/heads/main","pushedAt":"2023-09-23T13:49:27.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"0xfoobar","name":null,"path":"/0xfoobar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/83792390?s=80&v=4"},"commit":{"message":"V2 (#64)\n\n* index event params by vault, delegate, contract\r\n\r\n* version bump\r\n\r\n* chore: update links for new deployments in README (#29)\r\n\r\n* chore: update links for new deployments\r\n\r\n* fix: sanitize links\r\n\r\n* fix: formatting\r\n\r\n* comment spacing\r\n\r\n* fix event emission\r\n\r\n* solidity 0.8.18, named mappings\r\n\r\n* comment cleanup\r\n\r\n* comment cleanup\r\n\r\n* forge fmt\r\n\r\n* bump to solc 0.8.19\r\n\r\n* version bump\r\n\r\n* forge fmt\r\n\r\n* gas benchmarking\r\n\r\n* add getDelegationsByVault() method\r\n\r\n* comment out all the get() tests, need to replace\r\n\r\n* remove getContractLevelDelegations and getTokenLevelDelegations\r\n\r\n* rename getDelegationsBy to getDelegationsFor\r\n\r\n* remove ContractDelegation and TokenDelegation structs\r\n\r\n* batch delegation\r\n\r\n* remove extraneous boolean\r\n\r\n* invert param order on _revokeDelegate\r\n\r\n* todo notes\r\n\r\n* get rid of unchecked, not worth the additional illegibility\r\n\r\n* 4k gas savings from storage cleanup in revokeAllDelegates\r\n\r\n* gas report for getDelegationsForVault\r\n\r\n* batch delegation test\r\n\r\n* cleaner internal variable names\r\n\r\n* todo\r\n\r\n* rewrite tests to use new enumerations, refactor into _filterHash() function\r\n\r\n* remove revokeDelegate(), revokeSelf(), and delegateVersion internal mapping\r\n\r\n* revokeAllDelegates() -> revokeAllDelegations()\r\n\r\n* test cleanup, event renaming\r\n\r\n* forge fmt\r\n\r\n* remove revokeAllDelegations()\r\n\r\n* cleanup _lookupHashes()\r\n\r\n* forge fmt\r\n\r\n* wip\r\n\r\n* tests passing with new bytes32 data param\r\n\r\n* line length 160\r\n\r\n* smaller comments\r\n\r\n* gas optimization\r\n\r\n* Implemented delegateForBalance idea\r\n\r\n* Pushing some comments fo reference\r\n\r\n* Pushing some comments for reference\r\n\r\n* Changed to ∃ delegatedBalance + return that method\r\n\r\n* Updated formatting\r\n\r\n* Ideas for supporting tokenId with balance case\r\n\r\n* Pushing work on test Airdrop contract\r\n\r\n* forge install: murky\r\n\r\n* Minor bug fixes\r\n\r\n* Started creating end to end airdrop test\r\n\r\n* Ran forge fmt\r\n\r\n* Created foundry airdrop test for delegate case\r\n\r\n* Fixing remappings\r\n\r\n* Add remappings.txt to .gitignore\r\n\r\n* Untracking remappings.txt\r\n\r\n* Descriptive naming, empties delegate airdrop test\r\n\r\n* Modified Claim event to include claimable\r\n\r\n* Add claimAmount to calldata params\r\n\r\n* Inherit delegate logic using DelegateAirdrop\r\n\r\n* More renaming changes, added NatSpec\r\n\r\n* Implements \"continuous\" token balance delegation, updated tests, and airdrop example + test (#34)\r\n\r\n* Implemented delegateForBalance idea\r\n\r\n* Pushing some comments fo reference\r\n\r\n* Pushing some comments for reference\r\n\r\n* Changed to ∃ delegatedBalance + return that method\r\n\r\n* Updated formatting\r\n\r\n* Ideas for supporting tokenId with balance case\r\n\r\n* Pushing work on test Airdrop contract\r\n\r\n* forge install: murky\r\n\r\n* Minor bug fixes\r\n\r\n* Started creating end to end airdrop test\r\n\r\n* Ran forge fmt\r\n\r\n* Created foundry airdrop test for delegate case\r\n\r\n* Fixing remappings\r\n\r\n* Add remappings.txt to .gitignore\r\n\r\n* Untracking remappings.txt\r\n\r\n* Descriptive naming, empties delegate airdrop test\r\n\r\n* Modified Claim event to include claimable\r\n\r\n* Add claimAmount to calldata params\r\n\r\n* Inherit delegate logic using DelegateAirdrop\r\n\r\n* More renaming changes, added NatSpec\r\n\r\n* bump solc to 0.8.20\r\n\r\n* rename to ERC20/721/1155 methods\r\n\r\n* bump dependencies\r\n\r\n* comment cleanup\r\n\r\n* rename DelegationRegistry to DelegateRegistry\r\n\r\n* remove openzeppelin ERC165 dependency, hardcode interface constant\r\n\r\n* remove bytecode hash, some foundry.toml benchmarking\r\n\r\n* Resolving conflicts with v2\r\n\r\n* Resolved inline TODOs\r\n\r\n* Committing v2 modifications to v2_wip\r\n\r\n* Reducing gas by increasing gas for getDelegations\r\n\r\n* Inverted checks to optimize for ALL delegations\r\n\r\n* Rights only stored if non-default, removed structs\r\n\r\n* Collisions between types now impossible\r\n\r\n* Subdelegations added to checkDelegateForERC20\r\n\r\n* Standardized storage positions, remove rights loop\r\n\r\n* Simplified getDelegationsFromHashes, repeated code\r\n\r\n* Subdelegation support for all tiers, natspec\r\n\r\n* Code refactor, added private function section\r\n\r\n* Removed none type, distinct delegation structs\r\n\r\n* Added supports interface test\r\n\r\n* gasreport\r\n\r\n* Keep NONE type\r\n\r\n* checkDelegateForERC721 made external\r\n\r\n* Stopped duplicate hash pushes, 10x enumeration\r\n\r\n* Removed enable, moved positions to registry\r\n\r\n* Added getDelegationHashes methods, enables retrieval for vault / delegate hash arrays up to 100k in size and increased getDelegations capacity up to 13k (via infura). Reverted to v1 ordering.\r\n\r\n* Separated get method gas tests\r\n\r\n* Subdelegations, airdrop example is now a subdelegation example, up to 30% less gas for delegate methods (#36)\r\n\r\n\r\nDelegateRegistry.sol changes\r\nReplaced OpenZeppelin enumerable sets with bytes32[] array in vault and delegate hash mappings\r\n\r\nHashes for a particular vault / delegate are now pushed to a bytes32[] array in their hash mappings instead of adding (and removing) them from a set. This reduces gas by > 40k every time a delegation is added to the registry due to the storage writes in the enumerable set backend. Suppose that a vault / delegate accumulates 500 delegation hashes in their array, the increased computation of the getDelegationsFor methods is well within acceptable gas limits for most RPC providers.\r\n\r\nConsumable methods are unaffected as they now use the _delegations mapping only to establish whether a delegation is valid and enabled / disabled.\r\nChanged bytes to bytes32[6] in _delegations mapping\r\n\r\nReduces > 20k gas every time a delegation is added since variable sized storage data also need to store their length.\r\nUpdated delegate methods to write minimal storage and removed _setDelegationValues\r\n\r\nDelegate methods now only write data if it exists in their type and does not write rights to storage if it's the default \"\". _computeDelegationLocation(hash) is used to obtain the storage location for a given hash, and writeDelegation(location, StoragePositions.delegate, data); is used to write particular delegation data. For example, this saves > 80k gas for a delegateForAll call with all rights. Storage positions of data types are standardised with the new StoragePositions struct. _setDelegationValues has been removed since these changes make it redundant.\r\nDelegation type now encoded in the last byte of the hash\r\n\r\nThis solves both the problem of collisions and being able to identify the type of delegation without writing its type to storage.\r\nCheck methods now support subdelegations\r\n\r\nAll check methods now accept a bytes32 rights parameter (previously data). If this parameter is not the default \"\", the check will bubble through the default case and then the rights case unless it returns true before exhausting the search (in the case of erc721, contract, all) or unless it returns type(uint256).max before exhausting the search (in the erc20, erc1155 cases). The _loadDelegationAddress(location, StoragePositions.vault) and _loadDelegationUint(location, StoragePositions.balance) methods are used to load vault and balance values directly from storage. A check on vault is now used to determine if the hash exists and is valid (since it is set to zero when disabled, and set to vault when enabled).\r\nRemoved occurrences of IDelegationRegistry.[object]\r\n\r\nThese objects are inherited explicitly anyway, and omitting IDelegationRegistry from these object references increases readability of the code.\r\nCreated Consumable and Private methods sections\r\n\r\nMostly a code refactor to keep the write and read sections clean. Added consumable as a section since we have distinct classes of on chain functions that can be consumed on and off chain.\r\nIDelegateRegistry.sol changes\r\n\r\n Removed NONE from DelegationType enum as it's never used.\r\n Added StoragePositions enum to standardise storage position of delegation data.\r\n Renamed DelegationInfo to Delegation struct to be used for returning an arbitrary delegation.\r\n Created BatchDelegation struct to be used for batch delegations\r\n\r\nAirdrop Example Updated to a Subdelegation Example\r\n\r\nThe airdrop example now accepts sub delegations with rights = \"airdrop\" in addition to default delegations, configured with a acceptableRight variable in the airdrop contract.\r\nNew tests\r\n\r\n Fuzz test for supportsInterface method\r\n testVultEnumerationGas tests an edge case where a vault has enabled 500 delegations.\r\n\r\n* make interface support >=0.8.13, remove comment ramblings\r\n\r\n* rename balance to amount\r\n\r\n* move erc165 function around\r\n\r\n* replace delegateForX method names with delegateX, easier to read on etherscan\r\n\r\n* Test to isolate write / consumable function gas\r\n\r\n* Formatting correction\r\n\r\n* Added multicall, removed batchDelegate (#38)\r\n\r\nModest gas benefits, and much cleaner / simpler (smaller function, removes need for BatchDelegation struct). Also allows projects to multicall other registry functions without going through an external multicall contract. Encoding is very simple on the front end as well e.g.:\r\n\r\n```\r\nvar batch = [];\r\n\r\nconst delegation1 = delegateRegistry.methods.delegateAll([delegate1, \"\", true]).encodeABI();\r\n\r\nconst delegation2 = delegateRegistry.methods.delegateERC20([delegate2, contract2, 10, \"\", true]).encodeABI();\r\n\r\nbatch.push(delegation1);\r\n\r\nbatch.push(delegation2);\r\n\r\ntry {\r\n await delegateRegistry.methods.multicall(batch).send(); \r\n} catch(err) {\r\n console.log(err);\r\n}\r\n```\r\n\r\n* Registry harness, integration test for delegateAll\r\n\r\n* Create new registry in each _delegateAll test call\r\n\r\n* gasdiff (#39)\r\n\r\n* gasdiff\r\n\r\n* touch pr\r\n\r\n* only run on gasbenchmark\r\n\r\n* test gasdiff, add nonsense storage write\r\n\r\n* V2 gasdiff test (#41)\r\n\r\n* add nonsense storage write to boost delegateAll() gas by 20k\r\n\r\n* remove storage write\r\n\r\n* run gasreport on v2 branch\r\n\r\n* cleanup gasdiff test, port gasreport over to gasbenchmark\r\n\r\n* Sub-delegation example: IP License Check\r\n\r\n* Added mappings to registry harness\r\n\r\n* DelegateForContract integration test\r\n\r\n* delegateERC721 integration test\r\n\r\n* Merged singular integration tests into one file\r\n\r\n* Started creating unit tests for registry functions\r\n\r\n* Fixed missing hashes if delegation set false first\r\n\r\n* Loop unit tests: repeated case and amount updates\r\n\r\n* Vault storage flags, added _validDelegation method (#44)\r\n\r\n* Vault storage flags, added _validDelegation method\r\n\r\n* Added explicit internal declaration to storage flags\r\n\r\n* Unclassified type decoding, multicall unit test\r\n\r\n* Unit tests for consumables\r\n\r\n* gas optimizations (#45)\r\n\r\n* gas optimizations, rename events, add multicall error, return NONE if delegation unknown/existed\r\n\r\n* add rest of files\r\n\r\n* clean up storage flag naming\r\n\r\n* rename DelegationsForDelegate to IncomingDelegations, DelegationsForVault to OutgoingDelegations\r\n\r\n* forge fmt\r\n\r\n* rename delegate/vault -> to/from in events and function calls\r\n\r\n* rename StoragePositions\r\n\r\n* more renaming\r\n\r\n* more unchecked\r\n\r\n* gasreport\r\n\r\n* more renaming\r\n\r\n* more renaming\r\n\r\n* add nonexistent checks to gasbenchmark to highlight double-bubble issue (#46)\r\n\r\n* linearize checks (#48)\r\n\r\n* linearize checkContract, shaved 800 gas off failure case\r\n\r\n* linearize checkERC721, chop off 1k gas there\r\n\r\n* gasbenchmark\r\n\r\n* all check functions now external, no bubbling, linearization, shaved 3k gas off erc20/1155\r\n\r\n* format\r\n\r\n* compress increment\r\n\r\n* rename test file\r\n\r\n* Slither report action, minor style convention edits (#49)\r\n\r\n* Moved internal pure to library, ext storage access (#50)\r\n\r\n* Storage compression, private f(x) > harness, tests (#51)\r\n\r\n* Storage compression, private f(x) > harness, tests\r\n\r\n* Additional shifts to clean any dirty bits\r\n\r\n* fmt\r\n\r\n* INTERNAL, slither comment, removed whitespace\r\n\r\n* 10-17% Gas reduction for checks, hash tests (#52)\r\n\r\n* Storage method library, reduced visual complexity (#53)\r\n\r\n* Location collision test, storage library tests\r\n\r\n* Moved HashHarness to benchmark, added more tests\r\n\r\n* Moved RegistryHarness to test, equivalence tests\r\n\r\n* style nits\r\n\r\n* Open zep to v4.9, delete slither report\r\n\r\n* Slither action, naming conventions, long digits\r\n\r\n* bump solc to 0.8.21 (#54)\r\n\r\n* correct comment\r\n\r\n* Casing nits\r\n\r\n* fix gas reports\r\n\r\n* add write permission to PR (#57)\r\n\r\n* Gasoptvect, bool cleaning rules, storage positions, readSlots, forge update (#58)\r\n\r\n\r\nFollow up to the Vectorized pr / merge into Gasoptvect\r\nSolidity compiler stack cleaning rules\r\n\r\nSolidityCleaningRulespng\r\n\r\nSource: https://docs.soliditylang.org/en/v0.8.21/internals/variable_cleanup.html\r\nDirect returns of booleans and boolean cleaning\r\n\r\nFrom what I can see from the solidity docs, the compiler rule for cleaning booleans on the stack is done by setting them to 1 if they contain any dirty bits (see table and reference above). The iszero opcodes used in the direct valid returns and RegistryOps should conform to that cleaning rule. There is some ambiguity as to whether that should be done in assembly blocks when accessing variables, but I didn't manage to find any documentation where cleaning to their last bit or byte, for example, is an appropriate cleaning method. They don't mention in the table that this cleaning rule is going to change, but it will be worth checking when using future compiler versions. tldr. seems fine to do this given the only obvious other method is just to not use assembly for booleans.\r\nRegistryHashes.sol\r\n\r\nThe assembly blocks should be implemented according to the solidity memory model and are marked; accordingly, this will allow projects to use these libraries without the downside of globally disabled compiler memory optimisation at a very slight gas cost to the registry.\r\nOther important changes\r\nReplaced Positions enum in RegistryStorage with POSITIONS_[name] uint256 constants\r\n\r\n This means we don't have to navigate the correct cleaning (reverting flow) of enums on the stack in the assembly blocks. We were directly using enums in assembly blocks before without cleaning them which was incorrect. uint256 means we don't need to clean at all as the type spans 32 bytes.\r\n All the functions that had the positions enum as a parameter now expect a uint256 instead.\r\n _writeDelegationAddresses and _loadDelegationAddresses no longer expects positions as a parameter and the packed position constants are hard coded into the function.\r\n _loadFrom no longer expects the first packed position as a parameter and the first packed constant is now hard codeded into the function.\r\n Tests have been updated to reflect this change as the positions enum was used in several places.\r\n\r\nreadSlots\r\n\r\nNow has a simplified implementation where assembly is only used for the sload operation.\r\nforge update\r\n\r\nUpdated foundry submodule and OpenZeppelin submodule to their latest v4.9.3 release\r\n\r\n* Payable delegate funcs for possible tip functionality (#59)\r\n\r\n* make delegate funcs payable\r\n\r\n* add slither ignore, add singlesig prototype\r\n\r\n* add slither detector ignore to sweep\r\n\r\n* two step ownership transfer\r\n\r\n* error code cleanup\r\n\r\n* add receive and fallback funcs to singlesig\r\n\r\n* use revert strings for broad version and chain explorer compat\r\n\r\n* add test\r\n\r\n* remove slither error ignore\r\n\r\n* gasreport\r\n\r\n* forge fmt\r\n\r\n* remove delegatecall from singlesig\r\n\r\n* forge update\r\n\r\n* Removed enable for fungibles, preserve storage. (#60)\r\n\r\n\r\n\r\n Removed enable for fungibles, control of revoking / delegating a fungible is now done entirely through amount; corresponding events and functions updated with enable removed, interface also updated.\r\n We are still emitting delegation events regardless of whether the state was actually changed.\r\n Delegate functions updated to preserve storage. Before: everything but the from storage flag was deleted. Now: Once a delegation has been created once, it is only possible to toggle the from storage flag and change the amount for fungibles, the rest of the storage is preserved.\r\n loadedFrom cached given its extended use in limiting the amount of storage interactions on calling one of the delegate methods.\r\n _updateFrom storage helper added to assist with the updates of from whilst preserving the rest of the packed slot.\r\n _validateDelegation replaced with _validateFrom since the check on from > address(1) is redundant since DELEGATION_EMPTY = address(0) and DELEGATION_REVOKED = address(1) cannot reasonably write to the registry.\r\n Removed redundant checks on validateDelegation in checkDelegateForERC20 and checkDelegateForERC1155 since amount will now always return zero if the fungible delegations are revoked.\r\n Added _invalidFrom helper function to reduce repeated code of checking if a from input is DELEGATION_REVOKED or DELEGATION_EMPTY.\r\n Moved DELEGATION_EMPTY and DELEGATION_REVOKED flags to RegistryStorage as projects might want to use these when performing manual storage read operations on the registry.\r\n Removed CLEAN_LAST12_BYTES_ADDRESS, not actually used anywhere.\r\n Updated tests and harness to reflect change in how the fungibles are enabled / disabled.\r\n\r\n* Skip bubble up in checks for invalidFrom to avoid confusion. (#61)\r\n\r\nSkips bubble up for _invalidFrom in the checks to avoid confusion with address(0) and / or address(1) having 'delegated' things, and also to be consistent with their omission in the enumeration functions.\r\n\r\n* wip (#62)\r\n\r\n* submodule update\r\n\r\n* C4 audit fixes and mainnet deployment (#63)\r\n\r\nC4 audit fixes and mainnet deployment to 0x00000000000000447e69651d841bD8D104Bed493\r\n\r\n---------\r\n\r\nCo-authored-by: lambda-0x \r\nCo-authored-by: Michael Reynolds <103044686+mireynolds@users.noreply.github.com>","shortMessageHtmlLink":"V2 (#64)"}},{"before":"a7135f66a99ddceacf5a7a973e400be8207b4ee5","after":"064e538cfb94a28e661d6e22c064b697386d5afd","ref":"refs/heads/v2","pushedAt":"2023-09-23T13:47:32.000Z","pushType":"push","commitsCount":7,"pusher":{"login":"0xfoobar","name":null,"path":"/0xfoobar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/83792390?s=80&v=4"},"commit":{"message":"resolve merge conflicts","shortMessageHtmlLink":"resolve merge conflicts"}},{"before":"6d1254de793ccc40134f9bec0b7cb3d9c3632bc1","after":"a7135f66a99ddceacf5a7a973e400be8207b4ee5","ref":"refs/heads/v2","pushedAt":"2023-09-21T13:59:10.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"0xfoobar","name":null,"path":"/0xfoobar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/83792390?s=80&v=4"},"commit":{"message":"C4 audit fixes and mainnet deployment (#63)\n\nC4 audit fixes and mainnet deployment to 0x00000000000000447e69651d841bD8D104Bed493","shortMessageHtmlLink":"C4 audit fixes and mainnet deployment (#63)"}},{"before":"3093d6bb3c1979f59842c70e62f0a22a5d3e7542","after":"8a682450dd1f0e56ca86b6823ea8be7024884bdd","ref":"refs/heads/auditfixes","pushedAt":"2023-09-21T13:41:27.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"0xfoobar","name":null,"path":"/0xfoobar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/83792390?s=80&v=4"},"commit":{"message":"gas","shortMessageHtmlLink":"gas"}},{"before":"233bdeac5f25703063ce0b03f6207fbf80f38cdd","after":"3093d6bb3c1979f59842c70e62f0a22a5d3e7542","ref":"refs/heads/auditfixes","pushedAt":"2023-09-21T13:40:17.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"0xfoobar","name":null,"path":"/0xfoobar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/83792390?s=80&v=4"},"commit":{"message":"deployed delegateregistry to 0x00000000000000447e69651d841bD8D104Bed493","shortMessageHtmlLink":"deployed delegateregistry to 0x00000000000000447e69651d841bD8D104Bed493"}},{"before":"b20bb865aa0327c60a742ef6984ab2eb9461c4a6","after":"233bdeac5f25703063ce0b03f6207fbf80f38cdd","ref":"refs/heads/auditfixes","pushedAt":"2023-09-19T14:33:42.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"0xfoobar","name":null,"path":"/0xfoobar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/83792390?s=80&v=4"},"commit":{"message":"deployed cleaned singlesig with token callbacks to 0x000000dE1E80ea5a234FB5488fee2584251BC7e8","shortMessageHtmlLink":"deployed cleaned singlesig with token callbacks to 0x000000dE1E80ea5a…"}},{"before":"ce7434faa3f4ab5e7b4cb3d4b77d83d13d114191","after":"b20bb865aa0327c60a742ef6984ab2eb9461c4a6","ref":"refs/heads/auditfixes","pushedAt":"2023-09-19T03:06:38.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"0xfoobar","name":null,"path":"/0xfoobar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/83792390?s=80&v=4"},"commit":{"message":"style","shortMessageHtmlLink":"style"}},{"before":"ca9d32402f1ba7c00cb8801df2e935610d38a378","after":"ce7434faa3f4ab5e7b4cb3d4b77d83d13d114191","ref":"refs/heads/auditfixes","pushedAt":"2023-09-19T02:43:18.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"0xfoobar","name":null,"path":"/0xfoobar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/83792390?s=80&v=4"},"commit":{"message":"cleanup redundant remappings","shortMessageHtmlLink":"cleanup redundant remappings"}},{"before":"dc2718dfc3f04b7514c7a1e70aa42b961b2f694f","after":"ca9d32402f1ba7c00cb8801df2e935610d38a378","ref":"refs/heads/auditfixes","pushedAt":"2023-09-19T02:26:20.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"0xfoobar","name":null,"path":"/0xfoobar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/83792390?s=80&v=4"},"commit":{"message":"better title","shortMessageHtmlLink":"better title"}},{"before":"436109374c56cd2b881b11c76b5dcfbf4dd85300","after":"dc2718dfc3f04b7514c7a1e70aa42b961b2f694f","ref":"refs/heads/auditfixes","pushedAt":"2023-09-19T02:12:52.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"0xfoobar","name":null,"path":"/0xfoobar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/83792390?s=80&v=4"},"commit":{"message":"remove old remapping","shortMessageHtmlLink":"remove old remapping"}},{"before":"3ac800e88068bfe0a9c6aac859448eba0dbd814f","after":"436109374c56cd2b881b11c76b5dcfbf4dd85300","ref":"refs/heads/auditfixes","pushedAt":"2023-09-19T02:07:12.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"0xfoobar","name":null,"path":"/0xfoobar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/83792390?s=80&v=4"},"commit":{"message":"add receiver funcs for erc721/1155","shortMessageHtmlLink":"add receiver funcs for erc721/1155"}},{"before":"040efcf33581f98200dec5cb3a9e065a4bfe3eff","after":"3ac800e88068bfe0a9c6aac859448eba0dbd814f","ref":"refs/heads/auditfixes","pushedAt":"2023-09-19T01:52:18.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"0xfoobar","name":null,"path":"/0xfoobar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/83792390?s=80&v=4"},"commit":{"message":"comment improvements, singlesig improvements","shortMessageHtmlLink":"comment improvements, singlesig improvements"}},{"before":"d5af0364af07adfe6fc771b54844cb49feabffc4","after":"040efcf33581f98200dec5cb3a9e065a4bfe3eff","ref":"refs/heads/auditfixes","pushedAt":"2023-09-19T00:37:22.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"0xfoobar","name":null,"path":"/0xfoobar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/83792390?s=80&v=4"},"commit":{"message":"gasreport","shortMessageHtmlLink":"gasreport"}},{"before":"cac8d28d01b77a32424368238816fc94d1ba35d9","after":"d5af0364af07adfe6fc771b54844cb49feabffc4","ref":"refs/heads/auditfixes","pushedAt":"2023-09-19T00:31:22.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"0xfoobar","name":null,"path":"/0xfoobar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/83792390?s=80&v=4"},"commit":{"message":"deployed Singlesig to 0x000000de1E803040Fba6B848D410a55FaB8B3256","shortMessageHtmlLink":"deployed Singlesig to 0x000000de1E803040Fba6B848D410a55FaB8B3256"}},{"before":"19c26e45536e6144c396de7fee2408c91b972207","after":"cac8d28d01b77a32424368238816fc94d1ba35d9","ref":"refs/heads/auditfixes","pushedAt":"2023-09-18T18:41:28.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"0xfoobar","name":null,"path":"/0xfoobar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/83792390?s=80&v=4"},"commit":{"message":"forge fmt","shortMessageHtmlLink":"forge fmt"}},{"before":null,"after":"19c26e45536e6144c396de7fee2408c91b972207","ref":"refs/heads/auditfixes","pushedAt":"2023-09-18T18:40:21.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"0xfoobar","name":null,"path":"/0xfoobar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/83792390?s=80&v=4"},"commit":{"message":"wip singlesig vanity, style nit in registry","shortMessageHtmlLink":"wip singlesig vanity, style nit in registry"}},{"before":"0e0ae905a6692b8f46e9b2a8518b0723396b239f","after":"6d1254de793ccc40134f9bec0b7cb3d9c3632bc1","ref":"refs/heads/v2","pushedAt":"2023-08-31T22:39:04.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"0xfoobar","name":null,"path":"/0xfoobar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/83792390?s=80&v=4"},"commit":{"message":"submodule update","shortMessageHtmlLink":"submodule update"}},{"before":"80ec70a20641efb38cafc9540049178dc0d93ae3","after":"0e0ae905a6692b8f46e9b2a8518b0723396b239f","ref":"refs/heads/v2","pushedAt":"2023-08-31T22:36:32.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"0xfoobar","name":null,"path":"/0xfoobar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/83792390?s=80&v=4"},"commit":{"message":"wip (#62)","shortMessageHtmlLink":"wip (#62)"}},{"before":null,"after":"276b6ae152b40f8263330d0a80f51a0b5f8095d1","ref":"refs/heads/nits","pushedAt":"2023-08-31T22:26:24.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"0xfoobar","name":null,"path":"/0xfoobar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/83792390?s=80&v=4"},"commit":{"message":"wip","shortMessageHtmlLink":"wip"}},{"before":"353d9510c394224bbb0cfe50dcd97d2eba761468","after":"80ec70a20641efb38cafc9540049178dc0d93ae3","ref":"refs/heads/v2","pushedAt":"2023-08-31T20:09:59.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"0xfoobar","name":null,"path":"/0xfoobar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/83792390?s=80&v=4"},"commit":{"message":"Skip bubble up in checks for invalidFrom to avoid confusion. (#61)\n\nSkips bubble up for _invalidFrom in the checks to avoid confusion with address(0) and / or address(1) having 'delegated' things, and also to be consistent with their omission in the enumeration functions.","shortMessageHtmlLink":"Skip bubble up in checks for invalidFrom to avoid confusion. (#61)"}},{"before":"34220617cd1def91fee7a7cb30b1e443688b818d","after":"353d9510c394224bbb0cfe50dcd97d2eba761468","ref":"refs/heads/v2","pushedAt":"2023-08-31T18:39:51.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"0xfoobar","name":null,"path":"/0xfoobar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/83792390?s=80&v=4"},"commit":{"message":"Removed enable for fungibles, preserve storage. (#60)\n\n\r\n\r\n Removed enable for fungibles, control of revoking / delegating a fungible is now done entirely through amount; corresponding events and functions updated with enable removed, interface also updated.\r\n We are still emitting delegation events regardless of whether the state was actually changed.\r\n Delegate functions updated to preserve storage. Before: everything but the from storage flag was deleted. Now: Once a delegation has been created once, it is only possible to toggle the from storage flag and change the amount for fungibles, the rest of the storage is preserved.\r\n loadedFrom cached given its extended use in limiting the amount of storage interactions on calling one of the delegate methods.\r\n _updateFrom storage helper added to assist with the updates of from whilst preserving the rest of the packed slot.\r\n _validateDelegation replaced with _validateFrom since the check on from > address(1) is redundant since DELEGATION_EMPTY = address(0) and DELEGATION_REVOKED = address(1) cannot reasonably write to the registry.\r\n Removed redundant checks on validateDelegation in checkDelegateForERC20 and checkDelegateForERC1155 since amount will now always return zero if the fungible delegations are revoked.\r\n Added _invalidFrom helper function to reduce repeated code of checking if a from input is DELEGATION_REVOKED or DELEGATION_EMPTY.\r\n Moved DELEGATION_EMPTY and DELEGATION_REVOKED flags to RegistryStorage as projects might want to use these when performing manual storage read operations on the registry.\r\n Removed CLEAN_LAST12_BYTES_ADDRESS, not actually used anywhere.\r\n Updated tests and harness to reflect change in how the fungibles are enabled / disabled.","shortMessageHtmlLink":"Removed enable for fungibles, preserve storage. (#60)"}},{"before":"cd0b3c17e8cc5222ebc55faa9b30b4f0acf55d8c","after":"34220617cd1def91fee7a7cb30b1e443688b818d","ref":"refs/heads/v2","pushedAt":"2023-08-25T20:07:25.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"0xfoobar","name":null,"path":"/0xfoobar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/83792390?s=80&v=4"},"commit":{"message":"Payable delegate funcs for possible tip functionality (#59)\n\n* make delegate funcs payable\r\n\r\n* add slither ignore, add singlesig prototype\r\n\r\n* add slither detector ignore to sweep\r\n\r\n* two step ownership transfer\r\n\r\n* error code cleanup\r\n\r\n* add receive and fallback funcs to singlesig\r\n\r\n* use revert strings for broad version and chain explorer compat\r\n\r\n* add test\r\n\r\n* remove slither error ignore\r\n\r\n* gasreport\r\n\r\n* forge fmt\r\n\r\n* remove delegatecall from singlesig\r\n\r\n* forge update","shortMessageHtmlLink":"Payable delegate funcs for possible tip functionality (#59)"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEV4zjfgA","startCursor":null,"endCursor":null}},"title":"Activity · delegatexyz/delegate-registry"}