<?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>Decert.me</title>
        <link>https://paragraph.com/@decert-me</link>
        <description>[DeCert](https://decert.me/) 面向未来学习，构建链上信用</description>
        <lastBuildDate>Tue, 23 Jun 2026 21:55:02 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <image>
            <title>Decert.me</title>
            <url>https://storage.googleapis.com/papyrus_images/40ba79beba1f515d477472baab5bf7b4499745e57e4f40bff8dffd9b045e122d.png</url>
            <link>https://paragraph.com/@decert-me</link>
        </image>
        <copyright>All rights reserved</copyright>
        <item>
            <title><![CDATA[MetaMask 钱包使用 - Solidity开发教程连载]]></title>
            <link>https://paragraph.com/@decert-me/metamask-solidity</link>
            <guid>fh54tEu2NNUfmWqNefGD</guid>
            <pubDate>Tue, 23 May 2023 09:46:44 GMT</pubDate>
            <description><![CDATA[MetaMask 钱包是 EVM 链开发者及用户最常使用的钱包， MetaMask 有移动端版本和浏览器插件（也称为扩展程序）版本， 本文介绍的浏览器版本。MetaMask 插件下载MetaMask 在 Chrome谷歌浏览器（同Microsoft Edge浏览器）、FireFox火狐浏览器 均提供了插件。 我们打开MetaMask钱包的官网首页 https://metamask.io/ 后，可以点接跳转到插件市场安装。image-20230311173636157在下载时，请一定要仔细查看URL 链接， 确保是 metamask.io， 谨防钓鱼，调转到插件市场的界面如下：image-20230311173816568然后，直接点击添加到 Chrome （ 由于我已经添加过，上图显示的从 Chrome 移除）， 这是最简单的安装方法。 在中国大陆会有部分用户无法打开插件市场， 如果你也无法打开，可以选择去 GitHub 下载 Zip 安装。 Metamask 的 GitHub 插件地址是： https://github.com/MetaMask/metamask-extensi...]]></description>
            <content:encoded><![CDATA[<p>MetaMask 钱包是 EVM 链开发者及用户最常使用的钱包， MetaMask 有移动端版本和浏览器插件（也称为扩展程序）版本， 本文介绍的浏览器版本。</p><h2 id="h-metamask" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">MetaMask 插件下载</h2><p>MetaMask 在 Chrome谷歌浏览器（同Microsoft Edge浏览器）、FireFox火狐浏览器 均提供了插件。</p><p>我们打开MetaMask钱包的官网首页 <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://metamask.io/">https://metamask.io/</a> 后，可以点接跳转到插件市场安装。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c23dc1ba3a3410b35d1e4574c5cf205aa952047e43a4592aebbd01340fe43481.png" alt="image-20230311173636157" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">image-20230311173636157</figcaption></figure><p>在下载时，请一定要仔细查看URL 链接， 确保是 <code>metamask.io</code>， 谨防钓鱼，调转到插件市场的界面如下：</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/166d149c1f89a101f0b62120396b83c6236e638a5ccb1143b29561d141f37795.png" alt="image-20230311173816568" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">image-20230311173816568</figcaption></figure><p>然后，直接点击添加到 Chrome （ 由于我已经添加过，上图显示的从 Chrome 移除）， 这是最简单的安装方法。</p><p>在中国大陆会有部分用户无法打开插件市场， 如果你也无法打开，可以选择去 GitHub 下载 Zip 安装。</p><p>Metamask 的 GitHub 插件地址是： <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/MetaMask/metamask-extension/releases/%EF%BC%8C">https://github.com/MetaMask/metamask-extension/releases/，</a> 进入之后，可以看到如下下载包：</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/80df71a39079e2206599023c087b4782600aba5de76c15f3d52532c9a207843f.png" alt="image-20230311174151379" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">image-20230311174151379</figcaption></figure><p>根据自己的浏览器，需要对应的zip包，下载解压。</p><p>然后进入到浏览器的扩展程序界面， 进入方法为：点击功能图标-&gt; 选更多工具 -&gt; 扩展程序， 如下图：</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/2266dd6b679703ebb06eed9c8b2b46f880b8439e060f01d423ea192315b63bc6.png" alt="截屏2023-03-11 17.43.44" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">截屏2023-03-11 17.43.44</figcaption></figure><p>进入扩展程序界面后，点“加载已解压的扩展程序”：</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/f76ce9b061e2070b0f725910baca41ce2867f190a4726a9e22490ad4798c69b8.png" alt="image-20230311175126778" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">image-20230311175126778</figcaption></figure><p>选择之前的解压包即可。</p><p>安装完成之后， 会在浏览器地址栏的右侧出现一个“小狐狸”的图标，点击这个图标就可以进入Metamask 界面。</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">创建钱包账号</h2><p>单击浏览器中的MetaMask图标，如果是第一次使用， 我们需要创建钱包：</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/25e54e8199ad77f110921ce09542405fb25d9b158d341422471f970622b7a9a7.png" alt="5685d0c85dae6e4fc55e71aad4a5b110" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">5685d0c85dae6e4fc55e71aad4a5b110</figcaption></figure><p>然后一步步按找界面提示，输入密码，备份助记词，生成钱包后，点击右侧“小狐狸”图标， 界面如下：</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/52ae4ceee8886553e33c1031f10ab8ea07da1c798c38563b9069581035127cbe.png" alt="image-20230311180557273" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">image-20230311180557273</figcaption></figure><p>此时你就创建好了一个钱包， 如上图 Account1 下方就是钱包的地址，这里为：<code>0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266</code> 。</p><p>地址类似于银行卡账号，钱包之间转账就是使用该地址。</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">导入钱包账号</h2><p>如果你之前在其他钱包创建过账号，或者要导入<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://learnblockchain.cn/docs/hardhat/">Hardhat </a>或 <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://learnblockchain.cn/docs/foundry/i18n/zh/reference/anvil/index.html">Forge Anvil</a> 模拟节点生成的钱包， 可以使用 MetaMask 的导入功能：</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b629bc43decd1684fd0e3bc99639d8b535e51bf2d5eb697f58989680cd374b54.png" alt="image-20230311181215295" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">image-20230311181215295</figcaption></figure><p>填入账号的私钥进行导入：</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/f94d169c52ea5fd8507deeb1aa1b08e1470f63065aa4d8a7aa6fbd26e9529b9e.png" alt="image-20230311181318792" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">image-20230311181318792</figcaption></figure><p>MetaMask 导入账号需要填入私钥，如果你之前的备份的是助记词，这需要使用助记词推导出私钥在填入，推荐使用 <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://chaintool.tech/generateWallet">Chaintool 工具的助记词推导</a>功能，如下图：</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/ec04b2d4b73d9293bf91d6f62be27d36be74da43218705e7737918a3bd71259c.png" alt="image-20230311181831583" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">image-20230311181831583</figcaption></figure><p>:::tip</p><p>ChainTool 是由一些爱好者组成的<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/ChainToolDao">开源组织</a>开发的一系列开源工具，ChainTool 所有工具均开源，提供开发者值得信赖的工具。</p><p>:::</p><p>另外一个建议是，开发不同的项目尽量使用不同的钱包，从而有更好的隐私效果。</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">给钱包账户充值</h2><p>创建好账户后，在体验转账或交易之前， 我们需要先给账号充值，我们可以先去测试网的水龙头（Faucet）获取一些测试币。</p><p>这里使用 Goerli 测试网的水龙头：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://goerlifaucet.com/">https://goerlifaucet.com/</a> ：</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/4b7af00e20cd9b436785e8baa9d4cd1a514cd74ef5493a653f498cb6185166ed.png" alt="image-20230311183639964" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">image-20230311183639964</figcaption></figure><p>填入自己的地址， 点击&quot;Send Me ETH&quot; 即可，若水龙头网站不可用，<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/ChainToolDao/chaintool-frontend/issues/3">这里</a>收集了一些水龙头网站地址。</p><p>获取到测试币之后，然后把网络切换Goerli网络就可以体验转账了。</p><h2 id="h-evm" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">连接不同的 EVM 区块链</h2><p>MetaMask 可以连接很多个不同的网络， 点击如下图切换到不同的网络：</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/2ed1d63a613decc65f54de2d24e51aab44d8a0b5f7ed56ca2fe60b1ad241bb67.png" alt="image-20230311184042325" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">image-20230311184042325</figcaption></figure><p>以太坊测试网 Goerli ， Sepolia 是 MetaMask 默认支持的网络，现在 EVM 有众多的兼容链， 如果我们要添加其他的网络，可以上 <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://chainlist.org/zh">Chainlist</a> 一键添加。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/ec25b3969fa8faad8bc59504d6dc5952cfcfa7951dee7c414f8b50985769569b.png" alt="image-20230311184356187" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">image-20230311184356187</figcaption></figure><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">添加本地网络</h3><p>在开发的时候，经常要让 MetaMask 链接本地的网络，例如 Hardhat，在“网络选择”列表的最下方有一个“添加网络”， 手动输入 RPC URL 及链 ID， 这里以 Hardhat node 网络为例，输入信息如下：</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b2db855530e78ea4aac88c91e8ac78827a9cafa2f0a9fd871f21b39a72f26453.png" alt="image-20230311185142989" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">image-20230311185142989</figcaption></figure><p>读完这篇文章，你应该知道如何使用 MetaMask 了。</p><p>你可以来这里<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://decert.me/quests/10001">挑战</a>一下。</p><hr><p>原教程链接：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://decert.me/tutorial/solidity/tools/metamask">https://decert.me/tutorial/solidity/tools/metamask</a> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://decert.me/challenges">Decert.me</a> -- 码一个未来</p>]]></content:encoded>
            <author>decert-me@newsletter.paragraph.com (Decert.me)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/7ac9fdaab8468fc3699d9488edc7eec57b63bfaca58b0c75053302203326b80f.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Hardhat 开发框架 - Solidity开发教程连载]]></title>
            <link>https://paragraph.com/@decert-me/hardhat-solidity</link>
            <guid>sfxBakRDlGAEvDclpXWr</guid>
            <pubDate>Thu, 11 May 2023 02:59:28 GMT</pubDate>
            <description><![CDATA[Decert.me 要连载教程了， 《Solidity 开发教程》 力求系统、深入的介绍 Solidity 开发， 同时这是一套交互式教程，你可以实时的修改教程里的合约代码并运行。 本教程来自贡献者 @Tiny熊，让我们正式开始学习吧。 如果你已经是 Hardhat 的使用者，可以直接跳到文末，参与挑战领取技能认证 NFT。Hardhat 提供了一个灵活且易于使用的环境，可以轻松地编写、测试和部署智能合约。类似的开发工具或框架还有： Remix IDE， Truffle ， Foundry， 目前最受欢迎的是 Hardhat 与 Foundry。 Hardhat 使用 Node 进行包管理，如果你熟悉 Node 及 Javascript， Hardhat 将非常简单上手。 Hardhat还内置了Hardhat 网络（Hardhat Node），它是为开发而设计的本地以太坊网络。 用来部署合约，运行测试和调试代码。 在本文中，我们将介绍：创建及配置Hardhat项目编写智能合约Hardhat 编译合约使用 Ethers.js 和为合约编写自动化测试使用 console.log()调...]]></description>
            <content:encoded><![CDATA[<p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://Decert.me">Decert.me</a> 要连载教程了， <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://decert.me/tutorial/solidity/intro">《Solidity 开发教程》</a> 力求<strong>系统</strong>、<strong>深入</strong>的介绍 Solidity 开发， 同时这是一套交互式教程，你可以实时的修改教程里的合约代码并运行。</p><p>本教程来自贡献者 <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/tinyxiong_eth">@Tiny熊</a>，让我们正式开始学习吧。</p><p>如果你已经是 Hardhat 的使用者，可以直接跳到文末，参与挑战领取技能认证 NFT。</p><hr><p>Hardhat 提供了一个灵活且易于使用的环境，可以轻松地编写、测试和部署智能合约。类似的开发工具或框架还有： <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://decert.me/tutorial/solidity/tools/remix/">Remix IDE</a>， <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://decert.me/tutorial/solidity/tools/truffle_ganache/">Truffle </a>， <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://decert.me/tutorial/solidity/tools/foundry">Foundry</a>， 目前最受欢迎的是 Hardhat 与 Foundry。</p><p>Hardhat 使用 Node 进行包管理，如果你熟悉 Node 及 Javascript， Hardhat 将非常简单上手。</p><p><strong>Hardhat</strong>还内置了<strong>Hardhat 网络（Hardhat Node）</strong>，它是为开发而设计的本地以太坊网络。 用来部署合约，运行测试和<strong>调试代码</strong>。</p><p>在本文中，我们将介绍：</p><ol><li><p>创建及配置Hardhat项目</p></li><li><p>编写智能合约</p></li><li><p>Hardhat 编译合约</p></li><li><p>使用 <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://learnblockchain.cn/ethers_v5/">Ethers.js</a> 和为合约编写自动化测试</p></li><li><p>使用 <code>console.log()</code>调试 Solidity</p></li><li><p>使用 Hardhat 部署合约</p></li><li><p>使用 Hardhat Etherscan 进行开源验证。</p></li><li><p>Hardhat 插件的使用</p></li></ol><p>本文对应的代码在：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/xilibi2003/training_camp_2/tree/main/w1_hardhat">https://github.com/xilibi2003/training_camp_2/tree/main/w1_hardhat</a></p><h2 id="h-hardhat" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">创建及配置Hardhat项目</h2><p>Hardhat 构建在Node.js之上， 使用 Hardhat 要求我们在电脑先安装好Node.js (&gt;= 16.0)， 环境准备可以参考<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://learnblockchain.cn/docs/hardhat/tutorial/setting-up-the-environment.html">这里</a>。</p><p>先创建项目目录：</p><pre data-type="codeBlock" text="mkdir hardhat-tutorial
cd hardhat-tutorial
"><code><span class="hljs-built_in">mkdir</span> hardhat-tutorial
<span class="hljs-built_in">cd</span> hardhat-tutorial
</code></pre><p>初始化 Node 项目：</p><pre data-type="codeBlock" text="npm init
"><code>npm <span class="hljs-keyword">init</span>
</code></pre><p>安装 Hardhat :</p><pre data-type="codeBlock" text="npm install --save-dev hardhat
"><code>npm install <span class="hljs-operator">-</span><span class="hljs-operator">-</span>save<span class="hljs-operator">-</span>dev hardhat
</code></pre><p>在安装<strong>Hardhat</strong>的目录下运行：</p><pre data-type="codeBlock" text="npx hardhat
"><code></code></pre><p>使用键盘选择&quot;创建一个新的hardhat.config.js（<code>Create a JavaScript project</code>）&quot; ，然后回车。</p><pre data-type="codeBlock" text="$ npx hardhat
888    888                      888 888               888
888    888                      888 888               888
888    888                      888 888               888
8888888888  8888b.  888d888 .d88888 88888b.   8888b.  888888
888    888     &quot;88b 888P&quot;  d88&quot; 888 888 &quot;88b     &quot;88b 888
888    888 .d888888 888    888  888 888  888 .d888888 888
888    888 888  888 888    Y88b 888 888  888 888  888 Y88b.
888    888 &quot;Y888888 888     &quot;Y88888 888  888 &quot;Y888888  &quot;Y888

👷 Welcome to Hardhat v2.13.0 👷‍

? What do you want to do? …
❯ Create a JavaScript project
  Create a TypeScript project
  Create an empty hardhat.config.js
  Quit
"><code>$ npx hardhat
<span class="hljs-number">888</span>    <span class="hljs-number">888</span>                      <span class="hljs-number">888</span> <span class="hljs-number">888</span>               <span class="hljs-number">888</span>
<span class="hljs-number">888</span>    <span class="hljs-number">888</span>                      <span class="hljs-number">888</span> <span class="hljs-number">888</span>               <span class="hljs-number">888</span>
<span class="hljs-number">888</span>    <span class="hljs-number">888</span>                      <span class="hljs-number">888</span> <span class="hljs-number">888</span>               <span class="hljs-number">888</span>
<span class="hljs-number">8888888888</span>  8888b.  888d888 .d88888 88888b.   8888b.  <span class="hljs-number">888888</span>
<span class="hljs-number">888</span>    <span class="hljs-number">888</span>     <span class="hljs-string">"88b 888P"</span>  d88<span class="hljs-string">" 888 888 "</span>88b     <span class="hljs-string">"88b 888
888    888 .d888888 888    888  888 888  888 .d888888 888
888    888 888  888 888    Y88b 888 888  888 888  888 Y88b.
888    888 "</span>Y888888 <span class="hljs-number">888</span>     <span class="hljs-string">"Y88888 888  888 "</span>Y888888  <span class="hljs-string">"Y888

👷 Welcome to Hardhat v2.13.0 👷‍

? What do you want to do? …
❯ Create a JavaScript project
  Create a TypeScript project
  Create an empty hardhat.config.js
  Quit
</span></code></pre><p>这个 JavaScript Hardhat 工程会默认下载 <code>hardhat-toolbox 插件</code>及一些常规设置：</p><p>创建好的Hardhat工程包含文件有：</p><ul><li><p><code>contracts</code>：智能合约目录</p></li><li><p><code>scripts</code> ：部署脚本文件</p></li><li><p><code>test</code>：智能合约测试用例文件夹。</p></li><li><p><code>hardhat.config.js</code>：配置文件，配置hardhat连接的网络及编译选项。</p></li></ul><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">编写合约</h2><p>合约开发推荐使用 VSCode 编辑器 + <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://marketplace.visualstudio.com/items?itemName=NomicFoundation.hardhat-solidity">solidity 插件</a>，在<code>contracts</code> 下新建一个合约文件 <code>Counter.sol</code> (<code>*.sol</code> 是 Solidity 合约文件的后缀名), 复制如下代码：</p><pre data-type="codeBlock" text="//SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract Counter {
    uint counter;

    constructor() {
        counter = 0;
    }

    function count() public {
        counter = counter + 1;
    }

    function get() public view returns (uint) {
        return counter;
    }
}
"><code><span class="hljs-comment">//SPDX-License-Identifier: MIT</span>
<span class="hljs-meta"><span class="hljs-keyword">pragma</span> <span class="hljs-keyword">solidity</span> ^0.8.0;</span>

<span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">Counter</span> </span>{
    <span class="hljs-keyword">uint</span> counter;

    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params"></span>) </span>{
        counter <span class="hljs-operator">=</span> <span class="hljs-number">0</span>;
    }

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">count</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> </span>{
        counter <span class="hljs-operator">=</span> counter <span class="hljs-operator">+</span> <span class="hljs-number">1</span>;
    }

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">get</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">public</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">uint</span></span>) </span>{
        <span class="hljs-keyword">return</span> counter;
    }
}
</code></pre><p>接下来就可以编译这个合约了。</p><h3 id="h-openzepplin" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">使用OpenZepplin 等第三方库</h3><p>在编写合约时，尽量不要重复造轮子，基于优质开源的第三方库，不仅可以提交效率，还可以让我们的合约代码更安全，例如要开发一个 Token，可以用npm 安装OpenZepplin 库：</p><pre data-type="codeBlock" text="npm install @openzeppelin/contracts --save-dev
"><code>npm install @openzeppelin<span class="hljs-operator">/</span>contracts <span class="hljs-operator">-</span><span class="hljs-operator">-</span>save<span class="hljs-operator">-</span>dev
</code></pre><p>然后在合约中 <code>import</code> 相应库中的合约文件及可。</p><pre data-type="codeBlock" text="pragma solidity ^0.8.0;

import &quot;@openzeppelin/contracts/token/ERC20/ERC20.sol&quot;;

contract Token is ERC20 {
  constructor(uint256 initialSupply) ERC20(&quot;Token Name&quot;, &quot;Token Symbol&quot;) {
    _mint(msg.sender, initialSupply);
  }
}
"><code><span class="hljs-meta"><span class="hljs-keyword">pragma</span> <span class="hljs-keyword">solidity</span> ^0.8.0;</span>

<span class="hljs-keyword">import</span> <span class="hljs-string">"@openzeppelin/contracts/token/ERC20/ERC20.sol"</span>;

<span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">Token</span> <span class="hljs-keyword">is</span> <span class="hljs-title">ERC20</span> </span>{
  <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params"><span class="hljs-keyword">uint256</span> initialSupply</span>) <span class="hljs-title">ERC20</span>(<span class="hljs-params"><span class="hljs-string">"Token Name"</span>, <span class="hljs-string">"Token Symbol"</span></span>) </span>{
    _mint(<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>, initialSupply);
  }
}
</code></pre><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">编译合约</h2><p><code>hardhat.config.js</code> 有默认的Solidity 编译器配置：</p><pre data-type="codeBlock" text="require(&quot;@nomicfoundation/hardhat-toolbox&quot;);

/** @type import(&apos;hardhat/config&apos;).HardhatUserConfig */
module.exports = {
  solidity: &quot;0.8.18&quot;,
};
"><code><span class="hljs-built_in">require</span>(<span class="hljs-string">"@nomicfoundation/hardhat-toolbox"</span>);

<span class="hljs-comment">/** @type import('hardhat/config').HardhatUserConfig */</span>
module.exports <span class="hljs-operator">=</span> {
  solidity: <span class="hljs-string">"0.8.18"</span>,
};
</code></pre><p>因此我们直接编译合约即可，在终端中运行 <code>npx hardhat compile</code> 。 <code>compile</code>任务是内置任务之一。</p><pre data-type="codeBlock" text="$ npx hardhat compile
Compiling 1 file with 0.8.18
Compilation finished successfully
"><code>$ npx hardhat <span class="hljs-built_in">compile</span>
Compiling <span class="hljs-number">1</span> file <span class="hljs-keyword">with</span> <span class="hljs-number">0.8</span><span class="hljs-number">.18</span>
Compilation finished successfully
</code></pre><p>合约已成功编译了。</p><p>成功编译后，会在 <code>artifacts/contracts/</code> 目录下生成<code>Counter.json</code> 和 build-info， <code>Counter.json</code>包含了智能合约的 ABI 、字节码（Bytecode）等。</p><p>:::tip</p><p>智能合约的 **ABI（Application Binary Interface）**信息，其中包括了合约的函数、事件等接口信息。这个文件通常会在与其他合约交互时使用，因为它可以被其他合约和 DApp 使用。</p><p><code>Bytecode </code>是部署合约所需的字节码（也称为创建时字节码），部署合约时，就是把该字节码作为交易的输入数据发送链上。:::</p><p>:::</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">编写测试用例</h2><p>为智能合约编写自动化测试至关重要，因为事关用户资金。</p><p>在我们的测试中，使用 Harhdat 内置的网络，使用<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://learnblockchain.cn/ethers_v5/">ethers.js</a>与前面的合约进行交互，并使用 <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mochajs.org/">Mocha</a> 作为测试运行器。</p><p>在项目 <code>test</code>下，并创建一个名为<code>Counter.js</code>的新文件：</p><pre data-type="codeBlock" text="const { ethers } = require(&quot;hardhat&quot;);
const { expect } = require(&quot;chai&quot;);

let counter;

describe(&quot;Counter&quot;, function () {
  async function init() {
    const [owner, otherAccount] = await ethers.getSigners();
    const Counter = await ethers.getContractFactory(&quot;Counter&quot;);
    counter = await Counter.deploy();
    await counter.deployed();
    console.log(&quot;counter:&quot; + counter.address);
  }

  before(async function () {
    await init();
  });

  // 
  it(&quot;init equal 0&quot;, async function () {
    expect(await counter.get()).to.equal(0);
  });

  it(&quot;add 1 equal 1&quot;, async function () {
    let tx = await counter.count();
    await tx.wait();
    expect(await counter.get()).to.equal(1);
  });

});
"><code>const { ethers } <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">"hardhat"</span>);
const { expect } <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">"chai"</span>);

let counter;

describe(<span class="hljs-string">"Counter"</span>, <span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params"></span>) </span>{
  async <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">init</span>(<span class="hljs-params"></span>) </span>{
    const [owner, otherAccount] <span class="hljs-operator">=</span> await ethers.getSigners();
    const Counter <span class="hljs-operator">=</span> await ethers.getContractFactory(<span class="hljs-string">"Counter"</span>);
    counter <span class="hljs-operator">=</span> await Counter.deploy();
    await counter.deployed();
    console.log(<span class="hljs-string">"counter:"</span> <span class="hljs-operator">+</span> counter.<span class="hljs-built_in">address</span>);
  }

  before(async <span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params"></span>) </span>{
    await init();
  });

  <span class="hljs-comment">// </span>
  it(<span class="hljs-string">"init equal 0"</span>, async <span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params"></span>) </span>{
    expect(await counter.get()).to.equal(<span class="hljs-number">0</span>);
  });

  it(<span class="hljs-string">"add 1 equal 1"</span>, async <span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params"></span>) </span>{
    let <span class="hljs-built_in">tx</span> <span class="hljs-operator">=</span> await counter.count();
    await <span class="hljs-built_in">tx</span>.wait();
    expect(await counter.get()).to.equal(<span class="hljs-number">1</span>);
  });

});
</code></pre><p>在终端上运行<code>npx hardhat test</code>。 你应该看到以下输出：</p><pre data-type="codeBlock" text="&gt; npx hardhat test


  Counter
counter:0x5FbDB2315678afecb367f032d93F642f64180aa3
    ✔ init equal 0
    ✔ add 1 equal 1

  2 passing (1s)
"><code>> npx hardhat test


  Counter
counter:<span class="hljs-number">0x5FbDB2315678afecb367f032d93F642f64180aa3</span>
    ✔ <span class="hljs-keyword">init</span> equal <span class="hljs-number">0</span>
    ✔ <span class="hljs-keyword">add</span> <span class="hljs-number">1</span> equal <span class="hljs-number">1</span>

  <span class="hljs-number">2</span> passing (<span class="hljs-number">1</span>s)
</code></pre><p>这意味着测试通过了。 现在我们解释主要代码：</p><pre data-type="codeBlock" text="  const Counter = await ethers.getContractFactory(&quot;Counter&quot;);
"><code>  const <span class="hljs-attr">Counter</span> = await ethers.getContractFactory(<span class="hljs-string">"Counter"</span>)<span class="hljs-comment">;</span>
</code></pre><p>ethers.js中的<code>ContractFactory</code>是用于部署新智能合约的抽象，因此此处的<code>Counter</code>是用来实例合约的工厂。</p><pre data-type="codeBlock" text="counter = await Counter.deploy();
"><code><span class="hljs-attr">counter</span> = await Counter.deploy()<span class="hljs-comment">;</span>
</code></pre><p>在<code>ContractFactory</code>上调用<code>deploy()</code>将启动部署，并返回解析为<code>Contract</code>的<code>Promise</code>。 该对象包含了智能合约所有函数的方法。</p><pre data-type="codeBlock" text="let tx = await counter.count();
await tx.wait();
"><code>let <span class="hljs-built_in">tx</span> <span class="hljs-operator">=</span> await counter.count();
await <span class="hljs-built_in">tx</span>.wait();
</code></pre><p>在<code>counter</code> 上调用合约方法， 并等待交易执行完毕。</p><p>注意，默认情况下， <code>ContractFactory</code>和<code>Contract</code>实例连接到第一个<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://learnblockchain.cn/ethers_v5/">签名者（Singer）</a>。</p><p>若需要使用其他的签名这， 可以使用<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://learnblockchain.cn/ethers_v5/api/contract/example/#example-erc-20-contract--methods">合约实例connect 到另一个签名者</a>， 如 <code>counter.connect(otherAccount)</code></p><pre data-type="codeBlock" text="expect(await counter.get()).to.equal(0);
"><code>expect(await counter.get()).to.equal(<span class="hljs-number">0</span>);
</code></pre><p>判断相等，我们使用<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.chaijs.com/">Chai</a>，这是一个断言库。 这些断言函数称为“匹配器”，在此实际上使用的“匹配器”来自<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://hardhat.org/hardhat-runner/plugins/nomicfoundation-hardhat-chai-matchers">Hardhat Chai Matchers</a>。</p><h2 id="h-consolelog" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">使用 Console.log 调试合约</h2><p>在**Hardhat Node **节点上运行合约和测试时，你可以在Solidity代码中调用<code>console.log()</code>打印日志信息和合约变量，可以方便我们调试代码。</p><p>在合约代码中导入**Hardhat **的<code>console.log</code>就可以使用它。</p><pre data-type="codeBlock" text="pragma solidity ^0.8.0;

import &quot;hardhat/console.sol&quot;;

contract Counter {
    uint public counter;

    constructor(uint x) {
        counter = x;
    }

    function count() public {
        counter = counter + 1;
        console.log(&quot;counter is %s &quot;, counter);
    }

}
"><code><span class="hljs-meta"><span class="hljs-keyword">pragma</span> <span class="hljs-keyword">solidity</span> ^0.8.0;</span>

<span class="hljs-keyword">import</span> <span class="hljs-string">"hardhat/console.sol"</span>;

<span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">Counter</span> </span>{
    <span class="hljs-keyword">uint</span> <span class="hljs-keyword">public</span> counter;

    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params"><span class="hljs-keyword">uint</span> x</span>) </span>{
        counter <span class="hljs-operator">=</span> x;
    }

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">count</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> </span>{
        counter <span class="hljs-operator">=</span> counter <span class="hljs-operator">+</span> <span class="hljs-number">1</span>;
        console.log(<span class="hljs-string">"counter is %s "</span>, counter);
    }

}
</code></pre><p>就像在JavaScript中使用一样, 将一些<code>console.log</code>添加函数中，运行测试时，将输出日志记录：</p><pre data-type="codeBlock" text="&gt; npx hardhat test

  Counter
counter:0x5FbDB2315678afecb367f032d93F642f64180aa3
    ✔ init equal 0
counter is 1
    ✔ add 1 equal 1 (38ms)


  2 passing (1s)
"><code>> npx hardhat test

  Counter
counter:<span class="hljs-number">0x5FbDB2315678afecb367f032d93F642f64180aa3</span>
    ✔ <span class="hljs-keyword">init</span> equal <span class="hljs-number">0</span>
counter <span class="hljs-keyword">is</span> <span class="hljs-number">1</span>
    ✔ <span class="hljs-keyword">add</span> <span class="hljs-number">1</span> equal <span class="hljs-number">1</span> (<span class="hljs-number">38</span>ms)


  <span class="hljs-number">2</span> passing (<span class="hljs-number">1</span>s)
</code></pre><p>可以在<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://learnblockchain.cn/docs/hardhat/hardhat-network/#console-log">这里</a>了解更多 console.log 。</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">部署合约</h2><p>其实我们在测试时， 合约已经部署到了Hardhat 内置的网络上，部署合约我们需要编写一个部署脚本。</p><p>在<code>scripts</code>文件夹，新建一个<code>deploy.js</code> 用来写部署脚本，部署脚本其实和前面测试时 <code>init</code> 函数类似：</p><pre data-type="codeBlock" text="const { ethers } = require(&quot;hardhat&quot;);

async function main() {

   const Counter = await ethers.getContractFactory(&quot;Counter&quot;);
   const counter = await Counter.deploy();
   await counter.deployed();

  console.log(&quot;Counter address:&quot;, counter.address);
}

main();
"><code>const { ethers } <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">"hardhat"</span>);

async <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">main</span>(<span class="hljs-params"></span>) </span>{

   const Counter <span class="hljs-operator">=</span> await ethers.getContractFactory(<span class="hljs-string">"Counter"</span>);
   const counter <span class="hljs-operator">=</span> await Counter.deploy();
   await counter.deployed();

  console.log(<span class="hljs-string">"Counter address:"</span>, counter.<span class="hljs-built_in">address</span>);
}

main();
</code></pre><p>运行 <code>npx hardhat run scripts/deploy.js</code> 时， 可以合约会部署到Hardhat 内置网络上。</p><pre data-type="codeBlock" text="&gt; npx hardhat run scripts/deploy.js
Counter address: 0x5FbDB2315678afecb367f032d93F642f64180aa3
"><code><span class="hljs-operator">></span> npx hardhat run scripts<span class="hljs-operator">/</span>deploy.js
Counter <span class="hljs-keyword">address</span>: <span class="hljs-number">0x5FbDB2315678afecb367f032d93F642f64180aa3</span>
</code></pre><p>为了在运行任何任务时指示<strong>Hardhat</strong>连接到特定的EVM网络，可以使用<code>--network</code>参数。 像这样：</p><pre data-type="codeBlock" text="npx hardhat run scripts/deploy.js --network &lt;network-name&gt;
"><code>npx hardhat run scripts<span class="hljs-operator">/</span>deploy.js <span class="hljs-operator">-</span><span class="hljs-operator">-</span>network <span class="hljs-operator">&#x3C;</span>network<span class="hljs-operator">-</span>name<span class="hljs-operator">></span>
</code></pre><p><code>network-name</code> 需要在 <code>hardhat.config.js</code> 文件中进行配置：</p><pre data-type="codeBlock" text="require(&quot;@nomicfoundation/hardhat-toolbox&quot;);

// 填入自己的私钥或助记词，
const PRIVATE_KEY1 = &quot;0x.... YOUR PRIVATE KEY1&quot;;
const PRIVATE_KEY2 = &quot;0x....  YOUR PRIVATE KEY1&quot;;
const Mnemonic = &quot;YOUR Mnemonic&quot;;


module.exports = {
  solidity: &quot;0.8.9&quot;, // solidity的编译版本
  networks: {
    goerli: {
      url: &quot;https://eth-goerli.api.onfinality.io/public&quot;,
      accounts: [PRIVATE_KEY1,PRIVATE_KEY2],
      chainId: 5,
    },
    
     mumbai: {
      url: &quot;https://endpoints.omniatech.io/v1/matic/mumbai/public&quot;,
      accounts: {
        mnemonic: Mnemonic,
      },
      chainId: 80001,
    },
  }
};
"><code>require("@nomicfoundation/hardhat-toolbox")<span class="hljs-comment">;</span>

// 填入自己的私钥或助记词，
const <span class="hljs-attr">PRIVATE_KEY1</span> = <span class="hljs-string">"0x.... YOUR PRIVATE KEY1"</span><span class="hljs-comment">;</span>
const <span class="hljs-attr">PRIVATE_KEY2</span> = <span class="hljs-string">"0x....  YOUR PRIVATE KEY1"</span><span class="hljs-comment">;</span>
const <span class="hljs-attr">Mnemonic</span> = <span class="hljs-string">"YOUR Mnemonic"</span><span class="hljs-comment">;</span>


<span class="hljs-attr">module.exports</span> = {
  solidity: "0.8.9", // solidity的编译版本
  networks: {
    goerli: {
      url: "https://eth-goerli.api.onfinality.io/public",
      accounts: <span class="hljs-section">[PRIVATE_KEY1,PRIVATE_KEY2]</span>,
      chainId: 5,
    },
    
     mumbai: {
      url: "https://endpoints.omniatech.io/v1/matic/mumbai/public",
      accounts: {
        mnemonic: Mnemonic,
      },
      chainId: 80001,
    },
  }
}<span class="hljs-comment">;</span>
</code></pre><p>以上配置了两个网络，一个是以太坊测试网 <code>goerli</code>， 一个是 Polygon 测试网<code>mumbai</code>， 我们可以在 <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://chainlist.org">https://chainlist.org</a> 找到每个网络的节点 URL 及 chainID。</p><p>在网络配置中，需要提供提交交易账号， 可以通过私钥或<code>助记词</code> 进行配置，这里配置的账号（需要提前充币进入到账号中），在hardhat 脚本中（测试及部署脚本）调用<code>getSigners</code> 即可获得：</p><pre data-type="codeBlock" text="const [owner, otherAccount] = await ethers.getSigners();
"><code>const [owner, otherAccount] <span class="hljs-operator">=</span> await ethers.getSigners();
</code></pre><p>一个私钥对应一个Singer，助记词则对应无数个 Singer ， 为每个项目生成一个独立的账号是比较推荐的做法，使用 <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://chaintool.tech/generateWallet">ChainTool 开源工具</a> 可以生成账号。</p><p>:::tip</p><p>助记词可以推导出无数了私钥，可参考：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://learnblockchain.cn/2018/09/28/hdwallet">BIP39</a></p><p>:::</p><p>另外要注意， 在 Goerli 上进行部署，需要将Goerli-ETH发送到将要进行部署的地址中。 可以从水龙头免费或一些测试币，这是Goerli的一个水龙头:</p><ul><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://goerlifaucet.com/">Alchemy Goerli Faucet</a></p></li></ul><p>最后运行：</p><pre data-type="codeBlock" text="npx hardhat run scripts/deploy.js --network goerli
"><code>npx hardhat run scripts<span class="hljs-operator">/</span>deploy.js <span class="hljs-operator">-</span><span class="hljs-operator">-</span>network goerli
</code></pre><p>如果一切顺利，你应该看到已部署的合约地址。</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">代码开源验证</h2><p>智能代码开源会增加了合约的透明度和可靠性，是项目建立信任很重要的一个步骤。</p><p>在 <code>hardhat-toolbox</code> 工具箱里，包含了 <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://hardhat.org/hardhat-runner/plugins/nomiclabs-hardhat-etherscan">hardhat-etherscan</a> 插件用于验证已经部署到区块链网络上的智能合约代码与源代码是否匹配，在完成验证后在区块链浏览器中合约标签上会出现✅， 如图：</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a7222ef311f38e50c4b8c5f34394b853b1d7f3d4184a4ab0c2dc0291e30dfa47.webp" alt="image-20230313104044517" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">image-20230313104044517</figcaption></figure><p>在部署智能合约时，合约字节码会被写入到区块链中，这意味着其他人无法检查合约的源代码。代码验证的过程是将已部署合约的字节码与原始Solidity代码再次编译后与部署的字节码进行比较，确保它们是一致的。</p><p>相比在区块链浏览器上上传代码验证， hardhat-etherscan 有很多优点，否则会自动使用 hardhat config 值设置的编译器选项，并且当代码中引用的第三方库或合约， hardhat-etherscan 能自动探测并处理。</p><p>开源验证的步骤是：</p><ol><li><p>安装 <code>hardhat-toolbox</code> 或 <code>hardhat-etherscan</code> ， 这一步我们这里已经完成，因为在初始化项目的时候安装了 <code>hardhat-toolbox</code> ， 如果没有安装，可以使用以下命令安装</p><pre data-type="codeBlock" text="npm install --save-dev @nomiclabs/hardhat-etherscan
"><code>npm install <span class="hljs-operator">-</span><span class="hljs-operator">-</span>save<span class="hljs-operator">-</span>dev @nomiclabs<span class="hljs-operator">/</span>hardhat<span class="hljs-operator">-</span>etherscan
</code></pre></li><li><p>在 <code>hardhat.config.js</code> 中配置您的 Etherscan API 密钥和网络设置，例如：</p></li></ol><pre data-type="codeBlock" text="  require(&quot;@nomicfoundation/hardhat-toolbox&quot;);
  或
  // require(&quot;@nomiclabs/hardhat-etherscan&quot;);
  
  etherscan: {
    apiKey: &quot;&quot;
  },
  
 
"><code>  <span class="hljs-keyword">require</span>(<span class="hljs-string">"@nomicfoundation/hardhat-toolbox"</span>);
  或
  // <span class="hljs-keyword">require</span>(<span class="hljs-string">"@nomiclabs/hardhat-etherscan"</span>);
  
  etherscan: {
    apiKey: <span class="hljs-string">""</span>
  },
  
 
</code></pre><blockquote><p>如何获取 Etherscan API 密钥？</p><ol><li><p>访问部署网络<strong>对应主网</strong>的 Etherscan 网站，并注册一个账号（如果还没有账号的话）。</p></li><li><p>登录你的账号并进入 Etherscan 的「我的帐户」页面。</p></li><li><p>点击页面左侧的「API-KEYs」标签页。</p></li><li><p>在页面上方的「Create New API KEY」部分，输入 API 密钥的名称和描述，然后选择需要访问的 API 权限。</p></li><li><p>点击「Generate」按钮来生成 API 密钥。</p></li></ol></blockquote><ol><li><p>执行验证命令：</p><pre data-type="codeBlock" text="npx hardhat verify &lt;deployed-contract-address&gt; &quot;参数(若有)&quot; --network &lt;network-name&gt; 
"><code>npx hardhat verify <span class="hljs-operator">&#x3C;</span>deployed<span class="hljs-operator">-</span><span class="hljs-class"><span class="hljs-keyword">contract</span>-<span class="hljs-title"><span class="hljs-keyword">address</span></span>> "参数(<span class="hljs-params">若有</span>)" --<span class="hljs-title">network</span> &#x3C;<span class="hljs-title">network</span>-<span class="hljs-title">name</span>> 
</span></code></pre><p>例如，要在 goerli 网络上验证合约，可以运行以下命令：</p><pre data-type="codeBlock" text="npx hardhat verify 0x..... --network goerli
"><code>npx hardhat verify 0x..... <span class="hljs-operator">-</span><span class="hljs-operator">-</span>network goerli
</code></pre></li></ol><p>该命令会为我们上传合约代码并验证其源代码。如果一切顺利（网络顺畅的话），在 Etherscan 上看到的合约被成功验证。</p><h2 id="h-hardhat-plugin" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Hardhat 插件（Plugin）的使用</h2><p>上面代码开源验证时，使用了<code>hardhat-etherscan</code>插件，其实也可以使用 <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://hardhat.org/hardhat-runner/plugins/nomicfoundation-hardhat-verify#hardhat-verify">hardhat-verify</a> 插件。</p><p>在 <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://hardhat.org/hardhat-runner/plugins">https://hardhat.org/hardhat-runner/plugins</a> 链接可以找到当前使用较多的插件，例如：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.npmjs.com/package/hardhat-gas-reporter">hardhat-gas-reporter</a> 可以对部署合约及函数执行的Gas消耗给出报告；<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.npmjs.com/package/solidity-coverage">solidity-coverage</a> 可以对测试覆盖率给出报告。</p><p>要使用一个插件通常要：</p><ol><li><p>用 Node.js 包管理先安装相应的插件</p></li><li><p>在 <strong>hardhat.config.js</strong> 文件中引入插件，以便Hardhat 能加载上对应的插件。</p></li></ol><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">参考文档</h2><p>示例非常简单， 更多使用方法，可参考文档：</p><ul><li><p>Hardhat 官方文档：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://hardhat.org/getting-started/">https://hardhat.org/getting-started/</a></p></li><li><p>Hardhat 中文文档：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://learnblockchain.cn/docs/hardhat/getting-started/">https://learnblockchain.cn/docs/hardhat/getting-started/</a></p></li><li><p>Harhdat 入门教程：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://learnblockchain.cn/docs/hardhat/tutorial/">https://learnblockchain.cn/docs/hardhat/tutorial/</a></p></li><li><p>Ethers.js 文档：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://learnblockchain.cn/ethers_v5/">https://learnblockchain.cn/ethers_v5/</a></p></li></ul><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">小结</h2><p>本文介绍了 Hardhat 开发框架的一些基本概念和使用方法，了解了如何使用 Hardhat 进行合约编译、部署、调试及测试，在开发中要<strong>经常查看文档</strong>，了解更多Hardhat 用法。</p><hr><p>Hardhat 的使用你掌握了吗？来<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://decert.me/quests/10003">这里</a>挑战一下看看，挑战完成你就可以领取到一枚技能认证 NFT。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a92fd8a0814e643f4a2ba98d8386b41ceb51d1d348873dd91f81b3c10250d36a.png" alt="码一个未来" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">码一个未来</figcaption></figure><hr><p>原教程链接：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://decert.me/tutorial/solidity/tools/hardhat">https://decert.me/tutorial/solidity/tools/hardhat</a> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://decert.me/challenges">Decert.me</a> -- 码一个未来</p>]]></content:encoded>
            <author>decert-me@newsletter.paragraph.com (Decert.me)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/7ac9fdaab8468fc3699d9488edc7eec57b63bfaca58b0c75053302203326b80f.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[区块链技术入门教程发布]]></title>
            <link>https://paragraph.com/@decert-me/Xm17lRo51svjJopPAs6b</link>
            <guid>Xm17lRo51svjJopPAs6b</guid>
            <pubDate>Wed, 15 Mar 2023 13:49:45 GMT</pubDate>
            <description><![CDATA[区块链是一项令人兴奋和有前途的技术，你也许看到过这些频繁在社交媒体、新闻频道上冒出的新名词：智能合约、代币（通证）、Web3、DeFi、DAO 组织。 如果你还不是很明白他们的意思，这份免费、开源的区块链基础教程就是为你（小白们）准备的。 开源地址： https://github.com/decert-me/blockchain-basic 教程截图：教程截图这份教程目前包含 7 篇文章： 第1篇：比特币与区块链诞生 在中本聪之前，几位大师对数字货币的探索，中本聪结合前人的探索及工作量证明的加入，诞生出第一个去中心化的数字货币：比特币， 第1篇文章将将了解比特币的基本原理和概念，包括区块、交易、挖矿等 第2篇：比特币运行原理 详细介绍了比特币的工作原理，包括去中心化、共识机制、区块链结构等。第2篇让我们将了解到如何发起交易，交易如何打包上链。 第3篇：区块链技术整体概述 什么是区块链，为什么它是一种革命性的技术，第3篇介绍在比特币之后，区块链技术的发展，在智能合约引入之后，区块链的能力大大增强。不同的团队在探索使用各种不同的共识机制来扩展区块链的性能 第4篇：不同类型的区块链 第...]]></description>
            <content:encoded><![CDATA[<p>区块链是一项令人兴奋和有前途的技术，你也许看到过这些频繁在社交媒体、新闻频道上冒出的新名词：智能合约、代币（通证）、Web3、DeFi、DAO 组织。 如果你还不是很明白他们的意思，这份免费、开源的区块链基础教程就是为你（小白们）准备的。</p><p>开源地址：</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/decert-me/blockchain-basic">https://github.com/decert-me/blockchain-basic</a></p><p>教程截图：</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/6ebb6dd161c62e8723da67a873edbb27a98e088b76da2437e820b58da4055a55.jpg" alt="教程截图" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">教程截图</figcaption></figure><p>这份教程目前包含 7 篇文章：</p><p><strong>第1篇：</strong><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://decert.me/tutorial/block_basic/bitcoin"><strong>比特币与区块链诞生</strong></a></p><p>在中本聪之前，几位大师对数字货币的探索，中本聪结合前人的探索及工作量证明的加入，诞生出第一个去中心化的数字货币：比特币， 第1篇文章将将了解比特币的基本原理和概念，包括区块、交易、挖矿等</p><p><strong>第2篇：</strong><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://decert.me/tutorial/block_basic/how_bitcoin_work"><strong>比特币运行原理</strong></a></p><p>详细介绍了比特币的工作原理，包括去中心化、共识机制、区块链结构等。第2篇让我们将了解到如何发起交易，交易如何打包上链。</p><p><strong>第3篇：</strong><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://decert.me/tutorial/block_basic/what_is_blockchain"><strong>区块链技术整体概述</strong></a></p><p>什么是区块链，为什么它是一种革命性的技术，第3篇介绍在比特币之后，区块链技术的发展，在智能合约引入之后，区块链的能力大大增强。不同的团队在探索使用各种不同的共识机制来扩展区块链的性能</p><p><strong>第4篇：</strong><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://decert.me/tutorial/block_basic/blockchains"><strong>不同类型的区块链</strong></a></p><p>第4篇探讨了不同类型的区块链，包括公有链、私有链和联盟链等，他们各自的特点是什么。</p><p><strong>第5篇：</strong><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://decert.me/tutorial/block_basic/layers"><strong>区块链不同的层次</strong></a></p><p>由于区块链本身受不可能三角限制，开发人员考虑将更多的计算转移到链下，因此区块链出现了分层发展的趋势。第5篇介绍了比特币的闪电网络以及以太坊的 Rollup。</p><p><strong>第6篇：</strong><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://decert.me/tutorial/block_basic/web3_storage"><strong>Web3 与存储协议</strong></a> 区块链催生了新形态的应用，我们称之为 Web3 应用，Web3应用的特点是用户自己控制所有权。</p><p>去中心化存储协议也是Web3 应用重要的组成部分。</p><p><strong>第7篇：</strong><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://decert.me/tutorial/block_basic/scenarios"><strong>区块链应用场景</strong></a></p><p>区块链到底有什么用，第7篇给出了一些广泛的应用场景， 如在跨境支付/结算、资产数字化等金融服务，数字存证/防伪，NFT/数字艺术品，游戏等领域都可能产生颠覆性的影响，还催生了全新 DAO 组织这样全新的合作形态。</p><hr><p>Decert.me 是一个帮助个人构建自己的链上信用履历的平台。</p><p>这是一个非盈利的公益产品，因为我们相信只有开放、可信的数据才能促进形成一个更自由、更可信、更高效的世界。 Decert.me 愿景是成为 Web3.0 时代的永久存储人们可信履历的基础数据。</p><p>Decert 所有的教程均在 Github 上开源 - <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/decert-me">教程开源地址</a> 欢迎大家补充完善，你的贡献让更自由、更可信、更高效的世界又进一步。</p><p>另外<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://decert.me/tutorial/solidity/intro/"> Solidity 教程</a>正在连载中...</p>]]></content:encoded>
            <author>decert-me@newsletter.paragraph.com (Decert.me)</author>
        </item>
        <item>
            <title><![CDATA[利用 100 个AI工具来帮助 Web3 创业]]></title>
            <link>https://paragraph.com/@decert-me/100-ai-web3</link>
            <guid>5P8qdHL9wy7eUsWgLnEQ</guid>
            <pubDate>Thu, 16 Feb 2023 02:02:32 GMT</pubDate>
            <description><![CDATA[利用 100 个AI工具来帮助 Web3 创业当下ChatGPT 让人工智能（AI）非常火热，让我们看看有哪些 AI 工具（或自动化工具）来帮助我们进行Web3创业。 工具包含：寻找创业想法、招聘、构建网站、编写文案、创建视频等。AI 社区ChatGPT讨论 - 有教程和资源分享的ChatGPT社区。 AIBuilders - 寻找一个分享AI工具和提示以及教程的社区 Hugging Face - 建立、训练和部署最先进的模型， 开源代码找寻Web3创业想法ChatGPT - 可以通过分析数据和使用预测分析法来识别潜在的机会，帮助寻找web3的商业想法。它也可以用来发现新技术及其潜力。还可参考原作者 Julian 的另一篇文章：ChatGPT X Web3: AI如何帮助你建立和发展你的Web3公司IdeasAI - 提供由人工智能（OpenAI）产生的商业想法。 FlowGPT - 结合ChatGPT，及令人兴奋的提示，构建创业想法。 Infosys和Alteryx是分析和自动化的工具，帮助你的企业做出数据驱动的决策。 IBM Watson是一整套商业工具，使用自然语言处理、机...]]></description>
            <content:encoded><![CDATA[<h1 id="h-100-ai-web3" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">利用 100 个AI工具来帮助 Web3 创业</h1><p>当下ChatGPT 让人工智能（AI）非常火热，让我们看看有哪些 AI 工具（或自动化工具）来帮助我们进行Web3创业。</p><p>工具包含：寻找创业想法、招聘、构建网站、编写文案、创建视频等。</p><h2 id="h-ai" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">AI 社区</h2><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.com/invite/ZFbE6NH57q">ChatGPT讨论</a> - 有教程和资源分享的ChatGPT社区。 <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.gg/qfra2BdpE5">AIBuilders</a> - 寻找一个分享AI工具和提示以及教程的社区 <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.com/invite/JfAtkvEtRb">Hugging Face</a> - 建立、训练和部署最先进的模型， 开源代码</p><h2 id="h-web3" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">找寻Web3创业想法</h2><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://chat.openai.com/">ChatGPT</a> - 可以通过分析数据和使用预测分析法来识别潜在的机会，帮助寻找web3的商业想法。它也可以用来发现新技术及其潜力。</p><blockquote><p>还可参考原作者 <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://linktr.ee/julianivaldy">Julian</a> 的另一篇文章：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://julianivaldy.medium.com/chatgpt-x-web3-how-ai-can-help-you-build-grow-your-web3-company-f8ac26a68a9c">ChatGPT X Web3: AI如何帮助你建立和发展你的Web3公司</a></p></blockquote><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://ideasai.com/">IdeasAI</a> - 提供由人工智能（OpenAI）产生的商业想法。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://flowgpt.com/">FlowGPT</a> - 结合ChatGPT，及令人兴奋的提示，构建创业想法。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.infosys.com/">Infosys</a>和<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.alteryx.com/">Alteryx</a>是分析和自动化的工具，帮助你的企业做出数据驱动的决策。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.ibm.com/watson">IBM Watson</a>是一整套商业工具，使用自然语言处理、机器学习和深度学习功能。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.springworks.in/albus/">Albus</a>将协助你为新的商业战略、设计和营销内容提供创意。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.olli.ai/">Olli.ai</a>将为你可视化任何数据，如果你正在进行市场调查，这将会很方便。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://no-code-ai-model-builder.com/">No-Code AI Model Builder</a>允许你建立自己的AI模型。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.spate.nyc/">Spate</a>可以预测美容和健康行业的下一个主要消费趋势，这可以帮助你决定你未来的产品（如果你在这些行业中）。</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">人才雇佣</h2><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://textio.com/products/recruiting">Textio</a>将通过消除任何社会偏见来帮助你优化招聘信息，并为你提供可追踪的分析。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.adaface.com/">Adaface</a>将让你创建自定义技能评估，以节省你审查候选人的时间。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.pymetrics.ai/">Pyremetrics</a>是一个人才管理平台，使用行为洞察力和审计的AI。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.turing.com/">Turing</a>使用人工智能驱动的深度审核平台，为你的资源需求雇用和管理合适的远程开发人员、技术负责人和其他人。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://fetcher.ai/">Fetcher</a>将候选人的采购和外联工作自动化，让你有更多的带宽来专注于招聘的人性化方面。</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">整理你的工作</h2><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.zoho.com/zia/">Zia</a> - 自动安排会议，发送电子邮件，以及文件管理。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://supernormal.com/">Supernormal</a>, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://fireflies.ai/">Fireflies</a>, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.trywingman.com/">Wingman </a>--都是记录会议笔记的工具。<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.sembly.ai/">Sembly</a>不仅能将会议对话转换为文本，还能为你提供可操作的见解。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://detangle.ai/">Detangle</a> - 总结任何视频、音频或文本。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://chrome.google.com/webstore/detail/youtube-summary-with-chat/nmmicjeknamkfloonkhhcjmomieiodli/related">YouTube Summary</a>是一个免费的Chrome扩展，可以让你通过OpenAI的ChatGPT人工智能技术快速访问你正在观看的YouTube视频的摘要。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.pickleai.com/">Pickle</a> - 将转录电话/视频通话记录并获得对话摘要。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://legalrobot.com/">LegalRobot</a>将为你分析任何法律文件。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://app.tldrmail.co/">tl;dr</a>将通过电子邮件每天一次向你发送你的未读邮件的摘要（只适用于英语）。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.thegist.ai/">TheGist</a>将对slack频道或slack 话题进行总结。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.springworks.in/albus/">Albus</a>将协助你为新的商业战略、设计和营销内容提供想法。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.grammarly.com/">Grammarly</a>将确保你的拼写正确。</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">管理团队</h2><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.ellie.ai/">Ellie.ai</a>将让你与你的团队使用技术设计进行头脑风暴和可视化你的想法。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://asana.com/">Asana</a>、 <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.timehero.com/">Timehero</a>和<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.usemotion.com/">Motion</a>将记录所有的任务。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://timelyapp.com/">Timely</a>将自动跟踪在不同任务上花费的时间。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.smarttask.io/">Smarttask</a>结合了任务管理、项目管理和CRM功能。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.augmentir.com/">Augmentir</a>将帮助你管理和指导制造业中的IRL工人。</p><p>通过<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://clayboard.com/">Clayboard</a>，你可以利用笔记、演示文稿、分组讨论以及应用和活动的提示来创建议程和会议程序。</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">创建有吸引力的内容</h2><p>人工智能使内容创作变得更容易100倍。让我们看看那些值得关注的工具，从写的内容开始：</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.towords.io/">Towords</a>会把YouTube视频变成博客文章或新闻通讯。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://byautomata.io/">Automata</a>将把任何内容变成Linkedin帖子、推特、新闻通讯等。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://quillbot.com/">QuillBot AI</a>是一个在线写作助手，使用人工智能和机器学习来转述句子。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.neuraltext.com/">Neuraltext</a>帮助你撰写和发布高质量的SEO内容。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.jasper.ai/">Jasper</a>将在几秒钟内为任何媒体大规模地创建书面内容。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.longshot.ai/">LongShot</a>将协助撰写长篇的SEO内容。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://ghostwryter.net/">GhostWryter </a>是Google Docs的写作助手。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.wordtune.com/">Wordtune</a> 将把你的文章转化为有趣的、有吸引力的和真实的文本。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://tribescaler.com/">Tribescaler</a> 将为你的Twitter话题产生吸引人的钩子。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.feedhive.com/">Feedhive</a>将为你提供有吸引力的社会媒体帖子模板。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.gliacloud.com/en/">GliaStudio</a>将帮助你从新闻内容、社交帖子、体育赛事直播和统计数据中生成视频。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://filmforge.uwu.ai/">FilmForge</a>、<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://invideo.io/">InVideo</a>和<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.synthesia.io/">Synthesia</a>将从文本输入生成视频。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.vidon.ai/">Vidon</a>将从博客文章中生成视频。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://murf.ai/">Murf</a>和<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.listnr.tech/">Listnr</a>将文本转换为语音、画外音和口述。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.descript.com/podcasting">Descript</a>将通过自动转录、编辑和发布剧集，帮助你制作专业的声音播客。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://krisp.ai/">Krisp</a>将消除视频中的背景噪音。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://kontent.ai/">Kontent</a>是一个模块化的内容平台，使内容和工程团队能够创建、组织和重用有价值的内容，使每一个体验都一致和相关。</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">创建高质量的设计和视觉效果</h2><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.midjourney.com/app/">Midjourney</a>和<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://openai.com/dall-e-2/">Dall.E</a>将为你提供奇妙的文字到图像/图像到图像的视觉效果。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://huggingface.co/spaces/pytorch/MiDaS">MiDaS by Hugging Face</a>从一个单一的图像计算相对深度图像。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://depthmapviewer.ugocapeto.com/">Depth Map Viewer</a>将简单的二维图像+计算相对深度转换为一个动画图像。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://convert.leiapix.com/">LeiaPix Converter</a>是一个免费的图像处理工具，能够将2D图像即时转换为美丽的3D光场图像。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://imglarger.com/">Image Enlarger</a>将提高图像的分辨率。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://vanceai.com/">VanceAI</a>是一个图像编辑和增强器。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://ipiccy.com/">iPiccy</a>允许你编辑照片并创建拼贴画或设计。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://hotpot.ai/">Hotpot</a>可以从文本中生成图像，提升照片的档次，删除物体，恢复旧照片，以及更多。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.aiva.ai/">AUVA</a>是一个人工智能，可以合成情绪化的原声音乐。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://podcast.adobe.com/enhance">Adobe Enhance</a>可以提高你的录音的音频质量。把你的iPhone变成一个专业的麦克风。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://wellsaidlabs.com/">WallSaidLabs</a>将文本实时转换为语音。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://brandmark.io/">Brandmark</a>将为你创建一个商业Logo或名片。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://fontjoy.com/">Fontjoy</a>将生成字体组合。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://uizard.io/">Uizard</a>将让你从手绘的草图中建立线框。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.descript.com/">Descript</a>是一个编写、记录、转录、编辑、协作和分享视频和播客的工具。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://runwayml.com/">Runway</a>帮助你进行视频编辑、协作等。</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">建立网站和优化体验</h2><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.bookmark.com/">Bookmark</a>和<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://zyro.com/">Zyro</a>让你使用Ai-powered网站建设工具从头开始建立一个网站。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://fronty.com/">Fronty</a>会将照片变成网站代码。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.algolia.com/">Algolia</a>将帮助你改善网站的搜索功能和用户体验。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://durable.co/">Durable</a>利用人工智能帮助你在30秒内建立一个网站</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://vwo.com/de/">VWO</a>将负责网站测试和转化优化。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://chat.openai.com/">ChatGPT</a>也可以就你自己的网站和产品提出改进建议。Vitalik （V神）写了一篇关于优化他自己的个人博客的文章：<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://vitalik.ca/general/2022/12/06/gpt3.html">一个快速的GPT聊天机器人编码实验</a></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://brandmentions.com/">BrandMentions</a>和<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mention.com/en/">Mention</a>可以让你追踪提到你的品牌名称的在线讨论，这可以帮助你改进你的产品，但这还不是全部。</p><p>通过<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.hubble.team/">Hubble</a>，你可以创建用户研究问题，了解用户对你的产品喜欢和不喜欢什么。</p><p>也有许多聊天机器人可以确保所有客户的询问得到及时解决，如：</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://cohere.io/">Cohere</a>是一个对话式的人工智能平台。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://chatfuel.com/">Chatfuel</a>是一个为Facebook提供人工智能动力的聊天机器人。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://digitalgenius.com/">DigitalGenius</a>是一个由人工智能驱动的聊天机器人，使用NLP通过电话和短信举行客户互动。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.drift.com/">Drift</a>是一个应用内的信息传递和电子邮件管理工具。</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">优化营销</h2><p>Tavus是一个由人工智能驱动的个性化视频工具。录制一次视频，就能得到一系列带有你的客户群或潜在客户的形象和名字的个性化视频。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.hootsuite.com/products/insights">Hootsuite</a>和<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.factors.ai/">Factors.ai</a>是社交媒体分析工具，将帮助你更好地了解你的受众并改善你的社交媒体战略。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.optimove.com/">Optimove</a>是一个基于AI的CRM。它通过客户洞察力和基于人工智能的协调，大规模地实现个性化的旅程。</p><p>如果你想改善你的品牌形象和在线展示，请使用<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.mara-solutions.com/">MARA Solutions</a>来自动回复在线评论。</p><p>通过<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://brandmentions.com/">BrandMentions</a>和<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mention.com/en/">Mention</a>等工具，你还可以跟踪任何提到你的品牌名称的在线讨论，这可以帮助你为客户定制品牌语言，或者让你了解你的产品可能需要的任何潜在改进。</p><p>通过<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.aweber.com/">Aweber</a>、<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.theseventhsense.com/">The Seventh Sense</a>和<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://rasa.io/">Rasa</a>，你可以自动发送电子邮件，并为每个收件人个性化定制。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.connectly.ai/">Connectly</a>将改善在WhatsApp上的营销。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.howler.media/">Howler AI</a>将为你的细分市场的相关记者开展自动公关活动。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://phrasee.co/platform/">Phrasee</a>将在营销内容中加强你的品牌语言。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.bizzabo.com/">Bizzabo</a>将帮助你管理现场和虚拟活动。</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">寻找客户</h2><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://recotap.com/">Recotap</a>将帮助你锁定目标，与之互动，并转化为客户。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://tomi.ai/">Tomi.ai</a>是一个预测性营销工具，帮助你获得新客户。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://seamless.ai/">Seamless</a>将收集联系人并产生销售线索。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://clearbit.com/">Clearbit</a>将帮助你了解客户并找到潜在客户。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.windsor.io/">Windsor</a>, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://pitchlane.io/">Pitchlane</a>, 和<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://zapier.com/">Zapier</a>将通过个性化的人工智能视频来提高你的冰冷邮件。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://humantic.ai/">Humantic AI</a>是一个买方智能平台，将协助你在个人层面上与买方联系。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.wellprincipled.com/">Well Principled</a>将负责规范的销售和运营规划。</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">管理财务</h2><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.glean.ai/">Glean AI</a>帮助你管理公司的财务。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.vic.ai/">Vic</a>是一个复杂的人工智能引擎&amp;与自主审批流向财务后台业务。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.bluedotcorp.com/">Blue Dot</a>提供了一个人工智能驱动的和基于云的税收合规平台。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://osome.com/">Osome</a>为中小型企业提供一个会计和企业合规的应用程序。Osome的平台使用基于机器学习的技术，将行政、会计、工资和税务相关工作自动化。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://pry.co/">Pry</a>将帮助你计划、管理和跟踪你的财务状况。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.indy.fr/">Indy</a>为自由职业者和专业人士提供端到端和先进的人工智能驱动的会计软件。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docyt.com/">Docyt</a>是一个实时会计自动化平台。它使用人工智能和机器学习来实现财务工作流程的自动化，不断核对总账，并生成实时财务报告。</p><p>翻译自<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://julianivaldy.medium.com/100-ai-tools-to-create-grow-web3-crypto-company-dapp-defi-nft-c4f173481c82">https://julianivaldy.medium.com/100-ai-tools-to-create-grow-web3-crypto-company-dapp-defi-nft-c4f173481c82</a></p>]]></content:encoded>
            <author>decert-me@newsletter.paragraph.com (Decert.me)</author>
        </item>
    </channel>
</rss>