<?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>BlacksmithTest</title>
        <link>https://paragraph.com/@blacksmithtest</link>
        <description>Blacksmith</description>
        <lastBuildDate>Thu, 30 Apr 2026 05:49:34 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <copyright>All rights reserved</copyright>
        <item>
            <title><![CDATA[Test]]></title>
            <link>https://paragraph.com/@blacksmithtest/test</link>
            <guid>66roPQG2QcLWy2s2l6HY</guid>
            <pubDate>Sun, 24 Apr 2022 12:07:09 GMT</pubDate>
            <description><![CDATA[坚固 function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } }...]]></description>
            <content:encoded><![CDATA[<p>坚固</p><pre data-type="codeBlock" text="    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert(&quot;ERC721: transfer to non ERC721Receiver implementer&quot;);
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }
"><code>    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">_checkOnERC721Received</span>(<span class="hljs-params">
        <span class="hljs-keyword">address</span> <span class="hljs-keyword">from</span>,
        <span class="hljs-keyword">address</span> to,
        <span class="hljs-keyword">uint256</span> tokenId,
        <span class="hljs-keyword">bytes</span> <span class="hljs-keyword">memory</span> _data
    </span>) <span class="hljs-title"><span class="hljs-keyword">private</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">bool</span></span>) </span>{
        <span class="hljs-keyword">if</span> (to.isContract()) {
            <span class="hljs-keyword">try</span> IERC721Receiver(to).onERC721Received(_msgSender(), <span class="hljs-keyword">from</span>, tokenId, _data) <span class="hljs-keyword">returns</span> (<span class="hljs-keyword">bytes4</span> retval) {
                <span class="hljs-keyword">return</span> retval <span class="hljs-operator">=</span><span class="hljs-operator">=</span> IERC721Receiver.onERC721Received.<span class="hljs-built_in">selector</span>;
            } <span class="hljs-keyword">catch</span> (<span class="hljs-keyword">bytes</span> <span class="hljs-keyword">memory</span> reason) {
                <span class="hljs-keyword">if</span> (reason.<span class="hljs-built_in">length</span> <span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-number">0</span>) {
                    <span class="hljs-keyword">revert</span>(<span class="hljs-string">"ERC721: transfer to non ERC721Receiver implementer"</span>);
                } <span class="hljs-keyword">else</span> {
                    <span class="hljs-keyword">assembly</span> {
                        <span class="hljs-keyword">revert</span>(<span class="hljs-built_in">add</span>(<span class="hljs-number">32</span>, reason), <span class="hljs-built_in">mload</span>(reason))
                    }
                }
            }
        } <span class="hljs-keyword">else</span> {
            <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>;
        }
    }
</code></pre><pre data-type="codeBlock" text="library Address {
    
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256(&apos;&apos;)`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash &amp;&amp; codehash != 0x0);
    }
}


"><code><span class="hljs-class"><span class="hljs-keyword">library</span> <span class="hljs-title">Address</span> </span>{
    
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">isContract</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> account</span>) <span class="hljs-title"><span class="hljs-keyword">internal</span></span> <span class="hljs-title"><span class="hljs-keyword">view</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">bool</span></span>) </span>{
        <span class="hljs-comment">// According to EIP-1052, 0x0 is the value returned for not-yet created accounts</span>
        <span class="hljs-comment">// and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned</span>
        <span class="hljs-comment">// for accounts without code, i.e. `keccak256('')`</span>
        <span class="hljs-keyword">bytes32</span> codehash;
        <span class="hljs-keyword">bytes32</span> accountHash <span class="hljs-operator">=</span> <span class="hljs-number">0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470</span>;
        <span class="hljs-comment">// solhint-disable-next-line no-inline-assembly</span>
        <span class="hljs-keyword">assembly</span> { codehash <span class="hljs-operator">:=</span> <span class="hljs-built_in">extcodehash</span>(account) }
        <span class="hljs-keyword">return</span> (codehash <span class="hljs-operator">!</span><span class="hljs-operator">=</span> accountHash <span class="hljs-operator">&#x26;</span><span class="hljs-operator">&#x26;</span> codehash <span class="hljs-operator">!</span><span class="hljs-operator">=</span> <span class="hljs-number">0x0</span>);
    }
}


</code></pre>]]></content:encoded>
            <author>blacksmithtest@newsletter.paragraph.com (BlacksmithTest)</author>
        </item>
    </channel>
</rss>