<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>waint.eth</title>
        <link>https://paragraph.com/@waint-eth</link>
        <description>I like web3</description>
        <lastBuildDate>Thu, 13 Aug 2026 17:18:54 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <image>
            <title>waint.eth</title>
            <url>https://storage.googleapis.com/papyrus_images/c3bea566c54ab7874e9efc60b95490cc2cbc7da1782496e609f7b83e00c72477.png</url>
            <link>https://paragraph.com/@waint-eth</link>
        </image>
        <copyright>All rights reserved</copyright>
        <item>
            <title><![CDATA[👀 LooksRare Pt 3]]></title>
            <link>https://paragraph.com/@waint-eth/looksrare-pt-3</link>
            <guid>7IQxoYwSpwOCbwGzWbao</guid>
            <pubDate>Wed, 23 Feb 2022 16:26:02 GMT</pubDate>
            <description><![CDATA[Can I speak to the MAnageR?Disclaimer: I’ve been told by readers that I sometimes have spelling mistakes and poor grammar - I’m not going to fix, that time will be spent reading more code. Hey everyone welcome back to waints blog. Today we’re walking through the Manager contracts for LooksRare: CurrencyManager ----- ExecutionManagerCurrencyManager.solCurrencyManager is all about which currencies are available on LooksRare, its a pretty quick contract. First thing to note is the imports -- Own...]]></description>
            <content:encoded><![CDATA[<h2 id="h-can-i-speak-to-the-manager" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Can I speak to the MAnageR?</h2><p>Disclaimer: I’ve been told by readers that I sometimes have spelling mistakes and poor grammar - I’m not going to fix, that time will be spent reading more code.</p><p>Hey everyone welcome back to waints blog. Today we’re walking through the Manager contracts for LooksRare:</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/address/0xC881ADdf409eE2C4b6bBc8B607c2C5CAFaB93d25">CurrencyManager</a> ----- <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/address/0x9cc58bf22a173c0fa8791c13df396d18185d62b2">ExecutionManager</a></p><h3 id="h-currencymanagersol" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">CurrencyManager.sol</h3><p>CurrencyManager is all about which currencies are available on LooksRare, its a pretty quick contract.</p><p>First thing to note is the imports -- Ownable and EnumerableSet. We’re aware of what Ownable does, lets someone be the owner of a contract. EnumerableSet is an interesting one though.</p><p>EnumerableSet gives us a struct like element that has two internal variables: _values, and indexes*.* values is a list of Bytes, and _indexes is a mapping from bytes to integers. So basically what this gives us is the capability to store items in a list, and know where those items are located in the list. The benefit of this is O(1) time for accessing, adding, removing, and validating items -- so using EnumerableSet is much much more efficient than using a list. In the CurrencyManager we’ll use this to store addresses of currencies so that it’s efficient to access and edit our list of currencies. Now lets checkout the interface quick.</p><h3 id="h-icurrencymanagersol" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">ICurrencyManager.sol</h3><p>The interface outlines 5 functions for us: (function (input))</p><ol><li><p>addCurrency (address) - Add a currency to the list</p></li><li><p>removeCurrency (address) - Remove a currency from the list</p></li><li><p>isCurrencyWhitelisted (address) - Returns true if the currency is in the whitelist</p></li><li><p>viewWhitelistedCurrencies (integer, integer) - Returns whitelisted currencies for the input parameters</p></li><li><p>viewCountWhiteListedCurrencies () - Returns how many currencies are in the whitelist</p></li></ol><p>So basically manage what currencies are available - we should expect these functions to be defined in CurrencyManager.sol. Lets go ..</p><pre data-type="codeBlock" text="contract CurrencyManager is ICurrencyManager, Ownable {
    using EnumerableSet for EnumerableSet.AddressSet;
"><code><span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">CurrencyManager</span> <span class="hljs-keyword">is</span> <span class="hljs-title">ICurrencyManager</span>, <span class="hljs-title">Ownable</span> </span>{
    <span class="hljs-keyword">using</span> <span class="hljs-title">EnumerableSet</span> <span class="hljs-title"><span class="hljs-keyword">for</span></span> <span class="hljs-title">EnumerableSet</span>.<span class="hljs-title">AddressSet</span>;
</code></pre><p>This is 90% of the functionality of the contract - an EnumerableSet full of addresses. Using this as a base the contract adds two events (CurrencyRemoved, CurrencyWhitelisted) on top of it and wraps the add/remove functionality of the sets in functions.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/f9b8b000faac784fab6c684a1214d754b78e0ad328e43ef33a5f7f35e469af33.png" alt="Add / remove + events" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Add / remove + events</figcaption></figure><p>We then have two simple functions to check if the currency is whitelisted, and return the number of currencies in the set.</p><p>The last function is one that returns all the whitelisted currencies based on the two input parameters:</p><ol><li><p>cursor → Index to start listing currencies at</p></li><li><p>size → Number of currencies to display</p></li></ol><p>Whats weird about this function is that the size input is immediately set to a new variable - length.</p><pre data-type="codeBlock" text="uint256 length = size;
"><code>uint256 <span class="hljs-attr">length</span> = size<span class="hljs-comment">;</span>
</code></pre><p>I honestly dont know why they did this. There may be some integer wrap that comes with re-assigning it that I dont know about, but if there is nothing then this is a waste of gas. I’m guessing it has something to do with the next two lines but I’m not sure:</p><pre data-type="codeBlock" text="if (length &gt; _whitelistedCurrencies.length() - cursor) {
    length = _whitelistedCurrencies.length() - cursor;
}
"><code><span class="hljs-keyword">if</span> (length <span class="hljs-operator">></span> _whitelistedCurrencies.<span class="hljs-built_in">length</span>() <span class="hljs-operator">-</span> cursor) {
    length <span class="hljs-operator">=</span> _whitelistedCurrencies.<span class="hljs-built_in">length</span>() <span class="hljs-operator">-</span> cursor;
}
</code></pre><p>This is saying if the number of items requested in the input is larger than the number of items remaining in the set starting at the cursor input location, we will use the number of items remaining in the set as the new length.</p><p>Next the contract copies all the items from the cursor to set length and returns that array along with the length of the set. This last return is a little weird for me, if they’re returning the length of the OG set they could have done this differently, and if they’re trying to return the length of the new set returned its not correct. Maybe theres something I’m missing here, guess we’ll have to keep reading contracts ..</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/ce78a473705ae9c61b4d7acfbda1bfcac91b0409ad53c58db0236daf004c6fb2.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Aight im done with this one lets move on to ExecutionManager.sol</p><h3 id="h-executionmanagersol" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">ExecutionManager.Sol</h3><p>Damn this one is almost identical ..</p><p>The only real difference is instead of currencies, we’re dealing with strategies we discussed earlier. So I guess theres not much more to learn here, time to go deeper</p>]]></content:encoded>
            <author>waint-eth@newsletter.paragraph.com (waint.eth)</author>
        </item>
        <item>
            <title><![CDATA[👀 LooksRare Part 2]]></title>
            <link>https://paragraph.com/@waint-eth/looksrare-part-2</link>
            <guid>IYh3KbFdLcLt0TDX9VKr</guid>
            <pubDate>Thu, 10 Feb 2022 19:00:16 GMT</pubDate>
            <description><![CDATA[Hey everyone welcome back to waints blog. Today I’m going to do a write up on LooksRare Strategy smart contracts. Disclaimer: I’ve been told by readers that I sometimes have spelling mistakes and poor grammar - I’m not going to fix, that time will be spent reading more code.StrategiesWhat are Strategies?In LooksRares contract structure, a strategy is essentially a way to trade over the platform. For instance, you can sell an NFT via private sale, or bid on a collection of NFTs, or you can per...]]></description>
            <content:encoded><![CDATA[<p>Hey everyone welcome back to waints blog. Today I’m going to do a write up on LooksRare Strategy smart contracts.</p><p>Disclaimer: I’ve been told by readers that I sometimes have spelling mistakes and poor grammar - I’m not going to fix, that time will be spent reading more code.</p><h2 id="h-strategies" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Strategies</h2><h3 id="h-what-are-strategies" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">What are Strategies?</h3><p>In LooksRares contract structure, a strategy is essentially a way to trade over the platform. For instance, you can sell an NFT via private sale, or bid on a collection of NFTs, or you can perform a standard trade for a fixed price. Before we jump into the strategies, we need to discuss the Execution Strategy interface.</p><h3 id="h-iexecutionstrategysol" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">IExecutionStrategy.sol</h3><p>(<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.deth.net/address/0x56244bb70cbd3ea9dc8007399f61dfc065190031">IExecutionStrategy.sol</a>)</p><p>This interface is heavily dependent on the custom OrderTypes library located at <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.deth.net/address/0x56244bb70cbd3ea9dc8007399f61dfc065190031">OrderTypes.sol</a>. This library contains two structs (MakerOrder, TakerOrder) and a hash function. LooksRare’s exchange protocol is hybrid off/on chain - meaning, it incorporates off-chain signatures (Maker Orders) and on-chain orders (Taker Orders). The specifics of this are not necessary at the moment, just know that this is how they perform NFT transactions and the hash function is there to provide verifiability. To learn more, visit the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.looksrare.org/developers/taker-orders">docs</a>.</p><p>Now that we know what order types are, we can easily walk through the ExecutionStrategy interface. This interface has the following functions:</p><ul><li><p>canExecuteTakerAsk - validates a takerAsk against a makerBid and returns a boolean and two ints.</p></li><li><p>canExecuteTakerBid - validates a takerBid against a makerAsk and returns a boolean and two ints.</p></li><li><p>viewProtocolFee - returns an int.</p></li></ul><p>So we have two functions to validate trades and a function to see how much the protocol fee is. This means we should probably see some form of these functions in the strategy contract. Now we can jump into StrategyStandardSaleForFixedPrice.sol.</p><h3 id="h-strategystandardsaleforfixedpricesol" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">StrategyStandardSaleForFixedPrice.sol</h3><p>(<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.deth.net/address/0x56244bb70cbd3ea9dc8007399f61dfc065190031">StrategyStandardSaleForFixedPrice.sol</a>)</p><p>As expected, we have the three functions above implemented in this contract. The only other notable is the constructor, this takes integer <em>protocolFee as input and sets it to the public immutable variable</em> PROTOCOL*_*FEE.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/37a58d5bbd148fca4361b54740ae2929d4d6b5d4b37f891c30f06f6d16b28592.png" alt="Constructor" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Constructor</figcaption></figure><p>Next up the two execution functions. these functions are really simple, they take TakerOrder and MakerOrder type structs as input and return a bool and two ints. Realistically its just object comparison wrapped in a function that also returns what token is being traded and at what price. See below:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a083abad5f77fedfece8008caad7fb00675adaf4d0c7dbccf4e0bc067b4c2c69.png" alt="TakerAsk" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">TakerAsk</figcaption></figure><p>Starting on line 40 we have the beginning of the boolean statement. In plain english this is:</p><p>For the makerBid and takerAsk, if the price and tokenID (NFT) are equal, and the makeBid is still in an active timeframe, validate the order as true, if any of these are inconsistent, its false.</p><p>Then also throw in the tokenId and number of tokens that are being traded. Next up is the TakerBid function which has almost the same logic.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a670f728580625dfd9c4cc0023806919589389e7c27830ae1d80f1aee59227f2.png" alt="TakerBid" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">TakerBid</figcaption></figure><p>Pretty much identical.</p><p>Final function: viewProtocolFee which returns the protocol fee that was set in the constructor.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/dab0d7952c4eb70ca4c9fbb371809b417f88cbfad67b4dc41539718153cb62f7.png" alt="viewProtocolFee" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">viewProtocolFee</figcaption></figure><p>Easiest one is out of the way, shall we continue? The next two, we’ll cover together.</p><h3 id="h-strategyprivatesalesol-and-strategyanyitemfromcollectionforfixedpricesol" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">StrategyPrivateSale.sol &amp; StrategyAnyItemFromCollectionForFixedPrice.sol</h3><p>(<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.deth.net/address/0x58d83536d3efedb9f7f2a1ec3bdaad2b1a4dd98c">StrategyPrivateSale.sol</a> &amp; <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.deth.net/address/0x86f909f70813cdb1bc733f4d97dc6b03b8e7e8f3">StrategyAnyItemFromCollectionForFixedPrice.sol</a>)</p><p>I’m covering these two in the same section because they have the same exact structure as the standard sale one outlined above. The only difference for these is that in the private sale strategy, the canExecuteTakerAsk function always returns <code>false, 0, 0 </code>while in the collection based strategy, the canExecuteTakerBid always returns <code>false, 0, 0 </code>Additionally, the private sale strategy verifies that the targetAddress of the transaction is also the address where the takerAsk originated - hence, private sale.</p><p>In the private sale strategy, a taker accepts an offer from the maker to buy an NFT, whereas in the collection based strategy, the taker accepts an offer from the maker to sell the NFT.</p><p>The maker / taker system is an efficient way to have a hybrid bid/ask system and pack all strategies into a single interface.</p><p>Now we got all the strategies down, its time to continue with the LooksRare core architecture before jumping into the exchange contract. Next up: CurrencyManager.sol</p>]]></content:encoded>
            <author>waint-eth@newsletter.paragraph.com (waint.eth)</author>
        </item>
        <item>
            <title><![CDATA[WELCOME - LooksRare 👀]]></title>
            <link>https://paragraph.com/@waint-eth/welcome-looksrare</link>
            <guid>Kx19Ie8wzQW245Xm5YOF</guid>
            <pubDate>Tue, 08 Feb 2022 03:27:16 GMT</pubDate>
            <description><![CDATA[Welcome to waint.eths blogWhats going on everyone, my name is waint and I’m gunna start a blog to take notes on smart contracts, write about NFTs, and I dont really know yet. So this is it, I’m kinda just going to write about random shit, so welcome.🔰 First up: LooksRareI’m going to read all of LooksRares contracts and note anything I see and walk through what they’re doing. I’ll be using this piece as a semi introduction to smart contract development -- going line-by-line-ish describing wha...]]></description>
            <content:encoded><![CDATA[<h2 id="h-welcome-to-wainteths-blog" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Welcome to waint.eths blog</h2><p>Whats going on everyone, my name is waint and I’m gunna start a blog to take notes on smart contracts, write about NFTs, and I dont really know yet. So this is it, I’m kinda just going to write about random shit, so welcome.</p><h2 id="h-first-up-looksrare" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">🔰 First up: LooksRare</h2><p>I’m going to read all of LooksRares contracts and note anything I see and walk through what they’re doing. I’ll be using this piece as a semi introduction to smart contract development -- going line-by-line-ish describing whats going on. Later reviews will gloss over some of these details.</p><h3 id="h-1-looksraretoken" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">1. LooksRareToken</h3><p>Contract Address: 0xf4d2888d29d722226fafa5d9b24f9164c092421e</p><p>Standard opening, looks like we’ll be having an ERC20 token that is Ownable. Before we go further, lets see whats good with the interface.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/eed28643781b3c07b0b334a2aba8783655d7f3659d9ec553a9fcbeb9ad8db3f4.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Pretty simple, we have the SUPPLY_CAP and mint as this contracts interface. This would allow someone to import the structure of LooksRareToken into their smart contract, thus enabling its functions to be executed (if the correct LooksRareToken address is used).</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/0451a05fb31303d8c05c0614031fc6d062531352fe7725664a1cdf319d554373.png" alt="Interface" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Interface</figcaption></figure><p>Back to the OG file.</p><p>Line 46 is the contract declaration. Says this contract is called LooksRareToken and it is utilizes the ERC20 and Ownable protocols and is accessible using the LooksRareToken interface.</p><p>In Line 46 the variable _SUPPLY_CAP is initialized as a uint256 (number) which is private (not public facing variable) as well as immutable (cannot be changed).</p><p>Line 55 is where the constructor function is located, this function is run when the contract is deployed and it only runs once. When deploying this contract there is 3 required inputs:</p><ol><li><p>_premintReceiver - Address to mint the pre-mint amount to. (Line 56)</p></li><li><p><em>premintAmount - How many tokens to mint to</em> _premintReceiver (Line 57)</p></li><li><p>_cap - the supply cap of the token. (Line 58)</p></li></ol><p>The constructor function makes sure the supply cap is greater than the premint amount, it then mints that amount to the premint address, and sets the _SUPPLY_CAP variable to the supply cap input (_cap).</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/eba07ee30f7283f8b0a37a6a5248425647dc67ec2e40a1b70f54184c49ac5bc1.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Next up is the mint function. This is where the tokens are distributed. Before jumping into the code its important to highlight what it means to be an ERC20 and Ownable contract (Line 46). Being an ECR20 contract means you are also abiding by all functionality of an ERC20 token, this includes being able to be traded over Ethereum. There are also additional functionality that comes with it, including the _mint function which lets you create tokens. You can read more about ERC20s <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.openzeppelin.com/contracts/4.x/erc20">here</a>:</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.openzeppelin.com/contracts/4.x/erc20">https://docs.openzeppelin.com/contracts/4.x/erc20</a></p><p>As for being Ownable, this means we can utilize the onlyOwner modifier (amongst other things) which lets us limit functions from executing if the origin message sender was not the owner of the contract. Read more about it <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.openzeppelin.com/contracts/4.x/access-control">here</a>:</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.openzeppelin.com/contracts/4.x/access-control">https://docs.openzeppelin.com/contracts/4.x/access-control</a></p><p>Now lets talk about the mint function LooksRare implemented. It looks like there are two input variables:</p><ol><li><p>account → An address to mint tokens to.</p></li><li><p>amount → An integer number amount to mint.</p></li></ol><p>This function is externally facing, overrides other interface mint functions, is only callable by the owner, and returns a bool (True/False) when finished executing.</p><p>The function first ensures that the number of tokens being asked to mint does not exceed the supply cap of the token (line 73). If it does exceed, then the function immediately returns false.</p><p>If it is determined that we can mint this many tokens we call the ERC20 token standard function _mint to mint the amount of tokens to the inputted account. The function then finishes by returning true.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/03897926cffd7f1594547f19230c6d26e773bbad8523e0ce9e8e450bfeca2176.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>In the last lines of the program, we have the SUPPLY_CAP function. this function is externally facing, view (which means it does not affect contract state), and overrides a default SUPPLY_CAP function. This function returns the integer value for _SUPPLY_CAP.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/670328593f1b835b49c28f5465b18c3333a425de494cf9565613a7c5791d6cda.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Thats it, that the LooksRareToken contract. I dont see any vulnerabilities in this one, seems all buttoned up and really standard. This mirror is already pretty long and theres no way I proof read it so I hope you enjoyed it and are have a great day!</p><p>Next Contract: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/address/0x56244bb70cbd3ea9dc8007399f61dfc065190031#code">StrategyStandardSaleForFixedPrice.sol</a> - 0x56244bb70cbd3ea9dc8007399f61dfc065190031</p>]]></content:encoded>
            <author>waint-eth@newsletter.paragraph.com (waint.eth)</author>
        </item>
    </channel>
</rss>