From e0eb80a29e449443fb8c27e91a386d5894a64f6c Mon Sep 17 00:00:00 2001 From: ross <92001561+z0r0z@users.noreply.github.com> Date: Thu, 11 Jan 2024 16:51:13 +0000 Subject: [PATCH] =?UTF-8?q?=F0=9F=AA=A1=20v0=20~~?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gas-snapshot | 64 ++++++++++++++++++++--------------------- lib/solady | 2 +- src/Dagon.sol | 80 +++++++++++++++++++++++++-------------------------- 3 files changed, 73 insertions(+), 73 deletions(-) diff --git a/.gas-snapshot b/.gas-snapshot index 8608340..5a94719 100644 --- a/.gas-snapshot +++ b/.gas-snapshot @@ -1,34 +1,34 @@ -DagonTest:testBurn(address,uint96) (runs: 256, μ: 153049, ~: 153049) -DagonTest:testDeploy() (gas: 2218938) -DagonTest:testFailBurnOverBalance(address,uint96) (runs: 256, μ: 187519, ~: 188686) -DagonTest:testFailBurnOverThreshold(address,uint96) (runs: 256, μ: 218771, ~: 219938) -DagonTest:testFailInvalidThresholdExceedsSupply() (gas: 159129) -DagonTest:testFailInvalidThresholdExceedsSupply2() (gas: 164264) -DagonTest:testFailInvalidThresholdNull() (gas: 159177) -DagonTest:testFailIsValidSignature2of3ForInsufficientSignatures() (gas: 201623) -DagonTest:testFailIsValidSignatureOutOfOrder() (gas: 239457) -DagonTest:testFailIsValidSignatureWeighted() (gas: 231153) +DagonTest:testBurn(address,uint96) (runs: 256, μ: 153055, ~: 153055) +DagonTest:testDeploy() (gas: 2216130) +DagonTest:testFailBurnOverBalance(address,uint96) (runs: 256, μ: 187448, ~: 188692) +DagonTest:testFailBurnOverThreshold(address,uint96) (runs: 256, μ: 218700, ~: 219944) +DagonTest:testFailInvalidThresholdExceedsSupply() (gas: 159135) +DagonTest:testFailInvalidThresholdExceedsSupply2() (gas: 164270) +DagonTest:testFailInvalidThresholdNull() (gas: 159183) +DagonTest:testFailIsValidSignature2of3ForInsufficientSignatures() (gas: 201629) +DagonTest:testFailIsValidSignatureOutOfOrder() (gas: 239463) +DagonTest:testFailIsValidSignatureWeighted() (gas: 231159) DagonTest:testFailIsValidSignatureWeightedERC1155() (gas: 36227) -DagonTest:testFailIsValidSignatureWeightedERC20() (gas: 235720) -DagonTest:testFailIsValidSignatureWeightedERC6909() (gas: 227309) -DagonTest:testFailIsValidSignatureWeightedERC721() (gas: 208929) -DagonTest:testFailSetTokenInvalidStd(address) (runs: 256, μ: 158171, ~: 158171) -DagonTest:testFailTransferFromInactiveAuth(address,address,uint96) (runs: 256, μ: 192121, ~: 192899) -DagonTest:testFailTransferOverBalance(address,address,uint96) (runs: 256, μ: 186629, ~: 187407) -DagonTest:testInstall() (gas: 137482) -DagonTest:testIsValidSignature() (gas: 150958) -DagonTest:testIsValidSignature2of3() (gas: 197462) -DagonTest:testIsValidSignature3of3() (gas: 205252) -DagonTest:testIsValidSignatureOnchain() (gas: 197623) -DagonTest:testIsValidSignatureWeighted() (gas: 234909) -DagonTest:testIsValidSignatureWeightedERC1155() (gas: 247815) -DagonTest:testIsValidSignatureWeightedERC20() (gas: 247619) -DagonTest:testIsValidSignatureWeightedERC6909() (gas: 247789) -DagonTest:testIsValidSignatureWeightedERC721() (gas: 207528) +DagonTest:testFailIsValidSignatureWeightedERC20() (gas: 240854) +DagonTest:testFailIsValidSignatureWeightedERC6909() (gas: 232746) +DagonTest:testFailIsValidSignatureWeightedERC721() (gas: 211709) +DagonTest:testFailSetTokenInvalidStd(address) (runs: 256, μ: 158177, ~: 158177) +DagonTest:testFailTransferFromInactiveAuth(address,address,uint96) (runs: 256, μ: 192049, ~: 192905) +DagonTest:testFailTransferOverBalance(address,address,uint96) (runs: 256, μ: 186557, ~: 187413) +DagonTest:testInstall() (gas: 137488) +DagonTest:testIsValidSignature() (gas: 150964) +DagonTest:testIsValidSignature2of3() (gas: 197468) +DagonTest:testIsValidSignature3of3() (gas: 205258) +DagonTest:testIsValidSignatureOnchain() (gas: 197629) +DagonTest:testIsValidSignatureWeighted() (gas: 234915) +DagonTest:testIsValidSignatureWeightedERC1155() (gas: 250741) +DagonTest:testIsValidSignatureWeightedERC20() (gas: 250253) +DagonTest:testIsValidSignatureWeightedERC6909() (gas: 250726) +DagonTest:testIsValidSignatureWeightedERC721() (gas: 210308) DagonTest:testNameAndSymbolAndDecimals(uint256) (runs: 256, μ: 15035, ~: 15035) -DagonTest:testSetAuth(address) (runs: 256, μ: 145746, ~: 145746) -DagonTest:testSetThreshold() (gas: 147627) -DagonTest:testSetToken(address) (runs: 256, μ: 148419, ~: 148419) -DagonTest:testSetURI() (gas: 165149) -DagonTest:testTransfer(address,address,uint88) (runs: 256, μ: 176217, ~: 176995) -DagonTest:testTransferWithAuth(address,address,uint96) (runs: 256, μ: 180039, ~: 180943) \ No newline at end of file +DagonTest:testSetAuth(address) (runs: 256, μ: 145752, ~: 145752) +DagonTest:testSetThreshold() (gas: 147633) +DagonTest:testSetToken(address) (runs: 256, μ: 148425, ~: 148425) +DagonTest:testSetURI() (gas: 165155) +DagonTest:testTransfer(address,address,uint88) (runs: 256, μ: 175912, ~: 177001) +DagonTest:testTransferWithAuth(address,address,uint96) (runs: 256, μ: 180161, ~: 180949) \ No newline at end of file diff --git a/lib/solady b/lib/solady index 61612f1..e229410 160000 --- a/lib/solady +++ b/lib/solady @@ -1 +1 @@ -Subproject commit 61612f187debb7affbe109543556666ef716ef69 +Subproject commit e229410140b3745299c20efa55908c53ad95f7d9 diff --git a/src/Dagon.sol b/src/Dagon.sol index 4242fc8..0118a04 100644 --- a/src/Dagon.sol +++ b/src/Dagon.sol @@ -226,42 +226,6 @@ contract Dagon is ERC6909 { } } - /// ====================== TOKEN OPERATIONS ====================== /// - - /// @dev Returns the account metadata. - function getMetadata(address account) - public - view - virtual - returns (string memory, string memory, string memory, IAuth) - { - Metadata storage meta = _metadata[uint256(uint160(account))]; - return (meta.name, meta.symbol, meta.tokenURI, meta.authority); - } - - /// @dev Mints shares for an owner of the caller account. - function mint(address owner, uint96 shares) public payable virtual { - uint256 id = uint256(uint160(msg.sender)); - _metadata[id].totalSupply += shares; - _mint(owner, id, shares); - } - - /// @dev Burns shares from an owner of the caller account. - function burn(address owner, uint96 shares) public payable virtual { - uint256 id = uint256(uint160(msg.sender)); - unchecked { - if (_settings[msg.sender].threshold > (_metadata[id].totalSupply -= shares)) { - revert InvalidSetting(); - } - } - _burn(owner, id, shares); - } - - /// @dev Sets new token URI metadata for the caller account. - function setURI(string calldata uri) public payable virtual { - emit URISet(msg.sender, (_metadata[uint256(uint160(msg.sender))].tokenURI = uri)); - } - /// ======================== INSTALLATION ======================== /// /// @dev Initializes ownership settings for the caller account. @@ -277,23 +241,23 @@ contract Dagon is ERC6909 { if (owners.length != 0) { uint96 supply; for (uint256 i; i != owners.length;) { - _mint(owners[i].owner, id, owners[i].shares); supply += owners[i].shares; + _mint(owners[i].owner, id, owners[i].shares); unchecked { ++i; } } _metadata[id].totalSupply += supply; } - setThreshold(setting.threshold); setToken(setting.token, setting.standard); + setThreshold(setting.threshold); if (bytes(meta.name).length != 0) { _metadata[id].name = meta.name; _metadata[id].symbol = meta.symbol; } if (bytes(meta.tokenURI).length != 0) setURI(meta.tokenURI); if (meta.authority != IAuth(address(0))) _metadata[id].authority = meta.authority; - IOwnable(msg.sender).requestOwnershipHandover(); + try IOwnable(msg.sender).requestOwnershipHandover() {} catch {} // Avoid revert. } /// ===================== OWNERSHIP SETTINGS ===================== /// @@ -334,6 +298,42 @@ contract Dagon is ERC6909 { emit ThresholdSet(msg.sender, (set.threshold = threshold)); } + /// ====================== TOKEN OPERATIONS ====================== /// + + /// @dev Returns the account metadata. + function getMetadata(address account) + public + view + virtual + returns (string memory, string memory, string memory, IAuth) + { + Metadata storage meta = _metadata[uint256(uint160(account))]; + return (meta.name, meta.symbol, meta.tokenURI, meta.authority); + } + + /// @dev Mints shares for an owner of the caller account. + function mint(address owner, uint96 shares) public payable virtual { + uint256 id = uint256(uint160(msg.sender)); + _metadata[id].totalSupply += shares; + _mint(owner, id, shares); + } + + /// @dev Burns shares from an owner of the caller account. + function burn(address owner, uint96 shares) public payable virtual { + uint256 id = uint256(uint160(msg.sender)); + unchecked { + if (_settings[msg.sender].threshold > (_metadata[id].totalSupply -= shares)) { + revert InvalidSetting(); + } + } + _burn(owner, id, shares); + } + + /// @dev Sets new token URI metadata for the caller account. + function setURI(string calldata uri) public payable virtual { + emit URISet(msg.sender, (_metadata[uint256(uint160(msg.sender))].tokenURI = uri)); + } + /// =================== EXTERNAL TOKEN HELPERS =================== /// /// @dev Returns the amount of ERC20/721 `token` owned by `account`. @@ -364,7 +364,7 @@ contract Dagon is ERC6909 { mstore(0x34, id) // Store the `id` argument. pop(staticcall(gas(), token, 0x10, 0x44, 0x20, 0x20)) amount := mload(0x20) - mstore(0x34, 0) + mstore(0x34, 0) // Restore the part of the free memory pointer that was overwritten. } }