profile
viewpoint

eea-oasis/baseline 549

The Baseline Protocol is an open source initiative that combines advances in cryptography, messaging, and blockchain to execute secure and private business processes at low cost via the public Ethereum Mainnet. The protocol will enable confidential and complex collaboration between enterprises without leaving any sensitive data on-chain

LeagueDAO/LeagueDAO-GOV-YF-Frontend 2

The front-end for EnterDAO Governance & Yield Farming

Perseverance/angular-truffle-box 1

Truffle Box for Angular is a quick-and-easy way to get your Dapp on the road with Truffle and Angular

Pull request review commentEnterDAO/ShardedMinds-Contracts

Resolve feedback from internal audit

 contract Metapass is         uint256 _officialSaleStart     ) ERC721PresetMinterPauserAutoId(name, symbol, baseURI) {         daoAddress = _daoAddress;-        metapassPrice = _metapassPrice;+        shardedMindsPrice = _shardedMindsPrice;         maxSupply = _maxSupply;         bulkBuyLimit = _bulkBuyLimit;-        geneGenerator.random();         maxNFTsPerWallet = _maxNFTsPerWallet;         maxNFTsPerWalletPresale = _maxNFTsPerWalletPresale;         presaleStart = _presaleStart;         officialSaleStart = _officialSaleStart;+        geneGenerator.random();         generateUniques();     }      modifier onlyDAO() {-        require(msg.sender == daoAddress, "Not called from the dao");+        require(_msgSender() == daoAddress, "Not called from the dao");         _;     } -    function generateUniques() internal {-        for(uint256 i = 1; i <= uniquesCount; i++) { -            uint256 selectedToken = geneGenerator.randomToken(i**i) % maxSupply;-            _uniqueGenes[selectedToken] = true;+    function generateUniques() internal virtual {+        for (uint256 i = 1; i <= uniquesCount; i++) {+            uint256 selectedToken = geneGenerator.random() % maxSupply;+            require(selectedToken != 0, "Token Id cannot be 0");+            _uniqueGenes[selectedToken] = i;         }     }      function addToPresaleList(address[] calldata entries) external onlyOwner {-        for(uint256 i = 0; i < entries.length; i++) {+        for (uint256 i = 0; i < entries.length; i++) {             require(entries[i] != address(0), "Null address");             require(!presaleList[entries[i]], "Duplicate entry");             presaleList[entries[i]] = true;-        }   +        }     }      function isPresale() public view returns (bool) {-        if (block.timestamp > presaleStart && block.timestamp < officialSaleStart) {+        if (

The same comment applies for isSale too

strenev

comment created time in 2 months

Pull request review commentEnterDAO/ShardedMinds-Contracts

Resolve feedback from internal audit

 contract Metapass is         uint256 _officialSaleStart     ) ERC721PresetMinterPauserAutoId(name, symbol, baseURI) {         daoAddress = _daoAddress;-        metapassPrice = _metapassPrice;+        shardedMindsPrice = _shardedMindsPrice;         maxSupply = _maxSupply;         bulkBuyLimit = _bulkBuyLimit;-        geneGenerator.random();         maxNFTsPerWallet = _maxNFTsPerWallet;         maxNFTsPerWalletPresale = _maxNFTsPerWalletPresale;         presaleStart = _presaleStart;         officialSaleStart = _officialSaleStart;+        geneGenerator.random();         generateUniques();     }      modifier onlyDAO() {-        require(msg.sender == daoAddress, "Not called from the dao");+        require(_msgSender() == daoAddress, "Not called from the dao");         _;     } -    function generateUniques() internal {-        for(uint256 i = 1; i <= uniquesCount; i++) { -            uint256 selectedToken = geneGenerator.randomToken(i**i) % maxSupply;-            _uniqueGenes[selectedToken] = true;+    function generateUniques() internal virtual {+        for (uint256 i = 1; i <= uniquesCount; i++) {+            uint256 selectedToken = geneGenerator.random() % maxSupply;+            require(selectedToken != 0, "Token Id cannot be 0");

I dont think this should be a require as this will fail the contract deployment. How about: uint256 selectedToken = (geneGenerator.random() % (maxSupply-1))+1; This will ensure that the token is within [1,maxSupply)

strenev

comment created time in 2 months

Pull request review commentEnterDAO/ShardedMinds-Contracts

Resolve feedback from internal audit

 contract Metapass is         uint256 _officialSaleStart     ) ERC721PresetMinterPauserAutoId(name, symbol, baseURI) {         daoAddress = _daoAddress;-        metapassPrice = _metapassPrice;+        shardedMindsPrice = _shardedMindsPrice;         maxSupply = _maxSupply;         bulkBuyLimit = _bulkBuyLimit;-        geneGenerator.random();         maxNFTsPerWallet = _maxNFTsPerWallet;         maxNFTsPerWalletPresale = _maxNFTsPerWalletPresale;         presaleStart = _presaleStart;         officialSaleStart = _officialSaleStart;+        geneGenerator.random();         generateUniques();     }      modifier onlyDAO() {-        require(msg.sender == daoAddress, "Not called from the dao");+        require(_msgSender() == daoAddress, "Not called from the dao");         _;     } -    function generateUniques() internal {-        for(uint256 i = 1; i <= uniquesCount; i++) { -            uint256 selectedToken = geneGenerator.randomToken(i**i) % maxSupply;-            _uniqueGenes[selectedToken] = true;+    function generateUniques() internal virtual {+        for (uint256 i = 1; i <= uniquesCount; i++) {+            uint256 selectedToken = geneGenerator.random() % maxSupply;+            require(selectedToken != 0, "Token Id cannot be 0");+            _uniqueGenes[selectedToken] = i;         }     }      function addToPresaleList(address[] calldata entries) external onlyOwner {-        for(uint256 i = 0; i < entries.length; i++) {+        for (uint256 i = 0; i < entries.length; i++) {             require(entries[i] != address(0), "Null address");             require(!presaleList[entries[i]], "Duplicate entry");             presaleList[entries[i]] = true;-        }   +        }     }      function isPresale() public view returns (bool) {-        if (block.timestamp > presaleStart && block.timestamp < officialSaleStart) {+        if (

I like the much simpler

return (block.timestamp > presaleStart &&
            block.timestamp < officialSaleStart)
strenev

comment created time in 2 months

Pull request review commentEnterDAO/ShardedMinds-Contracts

Resolve feedback from internal audit

+// SPDX-License-Identifier: MIT+pragma solidity ^0.8.9;++import "./ShardedMinds.sol";+import "./ShardedMindsGeneGenerator.sol";+import "@openzeppelin/contracts/utils/math/SafeMath.sol";++contract ShardedMindsTest is ShardedMinds {

Not sure what is the idea here

strenev

comment created time in 2 months

PullRequestReviewEvent
PullRequestReviewEvent

Pull request review commentEnterDAO/ShardedMinds-Contracts

Resolve feedback from internal audit

 Randomization of the genome is based on generating a hash. The seed for this has - blockhash(block.number) - the hash of the current block - blockhash(block.number-100) - the hash of the block 100 blocks ago. -Theoretically it is possible for a miner to have a slightly bigger chance in generating a morph of his liking compared to a regular user. This risk, however is negligible for both economical and behavioral reasons. On one hand, the miner will likely be risking a significant block reward and the price of Lobby Lobster needs to be sky high in order to make it worth the hassle. On the other hand, lobby lobsters desirability and affinity is a very subjective matter - meaning that if they are going to like or dislike the new morph will depend on the person operating the mining node.+Theoretically it is possible for a miner to have a slightly bigger chance in generating a nft of his liking compared to a regular user. This risk, however is negligible for both economical and behavioral reasons. On one hand, the miner will likely be risking a significant block reward and the price of Sharded Minds NFT needs to be sky high in order to make it worth the hassle. On the other hand, EnterDAO Sharded Minds desirability and affinity is a very subjective matter - meaning that if they are going to like or dislike the new nft will depend on the person operating the mining node.  ## Gene positions: -- 0 - Background attribute-- 1 - Skin attribute-- 2 - Clothes attribute-- 3 - Hands attribute-- 4 - Head attribute-- 5 - Mouth attribute-- 6 - Eyes attribute+- TBD

I think we should add these pre-audit.

strenev

comment created time in 2 months

PullRequestReviewEvent

push eventLimeChain/SportsIcon-Vesting-App

LuboslavBurdenski

commit sha 209acd6532810036913140c8e83704d30bc02dd4

fix responsivness in `semi-tablet`

view details

LuboslavBurdenski

commit sha 5142ad12c0db44f61eb98c3fca5b9901251bf484

`claimContainer` change in scss

view details

LuboslavBurdenski

commit sha 11cdfa1080c0d381c2c6effd7f9e6a3e17e1e4ff

Merge pull request #10 from LimeChain/UI-positioning-changes UI positioning changes

view details

LuboslavBurdenski

commit sha fdcebce53f65cdc7aa456447b5de3b86093fb782

create basic dropdown structure

view details

LuboslavBurdenski

commit sha 784d50efdd2a57deedd02798c1fc1799c39e205d

create contracts dropdown functionality and fix responsiveness issues

view details

LuboslavBurdenski

commit sha d1d64b2f07d4e345135ee2d0eb8c244881345368

fix json file changes

view details

LuboslavBurdenski

commit sha e3a3f96a8abbeccf5df057742c63d2869899dcb3

add styling colour to dropdown

view details

LuboslavBurdenski

commit sha a402c9a9fba9199171f7b251fae1c81d2cbc1f03

change timeout for notfications

view details

LuboslavBurdenski

commit sha e527f225aa5e2485dfa7537484b82419900aa7c3

make dropdown close after select or click outside

view details

LuboslavBurdenski

commit sha 3d4fad23cd74284f459fb7198a3da517dee92704

Merge pull request #11 from LimeChain/contracts-dropdown-menu contracts dropdown menu

view details

LuboslavBurdenski

commit sha 39b4da30fe29816440c9996b7801064f5ee410ae

change `sale` to `seed` in dropdown

view details

LuboslavBurdenski

commit sha 1e28b6ec6cd30bd06535b6090e3d83dba5cf326f

Merge pull request #12 from LimeChain/change-namings-dropdown change namings in dropdown

view details

LuboslavBurdenski

commit sha 7fba1902760aeb2c1880a9b7efdfb59d8c0694ce

update abi and sdk

view details

LuboslavBurdenski

commit sha 8873b1799b5e01520307079d84d2592af383d7fb

change addresses of contracts

view details

LuboslavBurdenski

commit sha 7690c8bf3c3d5c86165bc8b1b0e8619a54106cd5

Merge pull request #13 from LimeChain/update-abi-and-sdk Update ABI and SDK

view details

LuboslavBurdenski

commit sha 1f2a1528e61417041c5f02d29344b899518fcf02

configure for production

view details

George Spasov

commit sha f72f23bf725afb93340e8245f63004946d204d86

Merge pull request #14 from LimeChain/update-for-production Update for production

view details

push time in 2 months

PullRequestReviewEvent

pull request commentethereum/EIPs

Optional ERC721Consumer Extension

I want to illustrate that there is difference between templating something and standardizing it.

Su Squares would have benefited from the proposed features, for sure.

And many contract like to be pausable as well.

OpenZeppelin Contracts offers the ERC721Pausable/Pausable contract https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/extensions/ERC721Pausable.sol

This is a template, anybody can use it, it makes sense. Most people are just going to copy one line of code to get that feature.

But I don't know of any wallets that are planning to support OpenZeppelin Contracts Pausable contract and show that a contract is paused.

Because there are no wallets supporting it, there is no reason to standardize it. And it hasn't been.

You have not detailed anybody that wants to read the consumer status for tokens. So you are in the same category~~no need to standardize this.

I think the Pausable example and the parallels drawn from it are not exactly in line with the idea of the suggested extension.

While reasoning from a wallet perspective you are right - no one has wanted nor needed the paused state to be viewed.

Pausable, however, is a strictly administrative "lever" - allowing for administrators to trigger it and grind a contract to a halt. No external entity - contract or wallet - has a great use case for reading the state of the contract. The paused state is only ever used internally in the contract as access restrictor.

The suggested extension however differs majorly in this regard.

The consumerOf function is actually not intended for internal in-contract use. Its intended use case is for external entities - mainly contracts but also likely wallets - to reason with and base their logic on the consumer of an NFT rather than its owner.

Contracts looking to build NFT legos based on consumer logic would actually need to know how to find out who is the consumer. Instead of allowing each project to name this interface (read function) for themselves, this extension will allow for a standard way of figuring out the consumer. In its essence this extension will enable NFT delegation. Some example use-cases of this extension would be:

  • Metaverse land delegation - where a user can delegate the ability to build on metaverse land to another user. (Already exists in Decentraland, but would need to be built into the upcoming major metaverses)
  • Virtual event passes delegation - where a user can delegate their access to a certain event or area to another user.
  • In game assets leasing - where a user can delegate the abilities and effects of their in-game assets/wearables to another user in exchange for payment (or for free).

If we are looking for an analogy for this extension, I'd consider the consumer, changeConsumer and consumerOf much closer to ERC721Metadata extension of ERC721. Much like we don't want every project to name the function for access to the metadata URI differently, we don't want every project to name the function for access to the consumer address differently. (Unfortunately, this is already a fact with Decentraland using the term operator instead on their Land)

Daniel-K-Ivanov

comment created time in 3 months

more