<?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>Daniel </title>
        <link>https://paragraph.com/@daniel-32</link>
        <description>web3 build</description>
        <lastBuildDate>Mon, 06 Apr 2026 03:28:22 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <image>
            <title>Daniel </title>
            <url>https://storage.googleapis.com/papyrus_images/0f7d72caeaf0706dffd90bc3e260b77db2127e839e2e1f2dae056a467ba9b81e.png</url>
            <link>https://paragraph.com/@daniel-32</link>
        </image>
        <copyright>All rights reserved</copyright>
        <item>
            <title><![CDATA[Nexus节点运行｜ 疑难杂症解决方案]]></title>
            <link>https://paragraph.com/@daniel-32/nexus</link>
            <guid>3EB9bnSlEX0KIfAbJzuH</guid>
            <pubDate>Mon, 09 Dec 2024 23:27:39 GMT</pubDate>
            <description><![CDATA[最近看到很多朋友在折腾 Nexus，尤其是在使用 CLI 的过程中会遇到一些 BUG。为此，我针对官方脚本做了一些优化，提供了一键安装的解决方案，让你更稳定地挖 Nexus。 官方教程链接：Nexus Network CLI - 官方文档 官方教程主要面向有一定技术基础的用户自行探索。如果你想要更快速、简单地上手，请继续阅读下面的步骤。 核心问题与解决方案什么是 Prover ID？如何获取正确的 ID？ 进入 Nexus Beta 网站 后，你可能会看到一个 Prover ID，但请注意，页面左下角显示的并不是完整的 Prover ID！正确获取方式： https://beta.nexus.xyz/ 进入 Nexus Beta 页面后，按下 F12 打开浏览器开发者工具。 查找名为 account 的请求（或相关输出）。 在返回的 JSON 数据中，找到 localid 字段，这个 localid 就是你的真正 proverid。 你会发现其中前半部分和网页显示的相同，大小写忽略即可。2. 使用 CLI 挖 Nexus 前提条件 准备一个 VPS（最低配置即可，国外主机都可以）...]]></description>
            <content:encoded><![CDATA[<figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/6a0aedd94e711ba8ecd07114f6a225867ea7fe59e21e949ed192fedc51b9922c.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>最近看到很多朋友在折腾 Nexus，尤其是在使用 CLI 的过程中会遇到一些 BUG。为此，我针对官方脚本做了一些优化，提供了一键安装的解决方案，让你更稳定地挖 Nexus。</p><p><strong>官方教程链接：</strong><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.nexus.xyz">Nexus Network CLI - 官方文档</a></p><p>官方教程主要面向有一定技术基础的用户自行探索。如果你想要更快速、简单地上手，请继续阅读下面的步骤。</p><p><strong>核心问题与解决方案</strong></p><ol><li><p>什么是 Prover ID？如何获取正确的 ID？ 进入 Nexus Beta 网站 后，你可能会看到一个 Prover ID，但请注意，页面左下角显示的并不是完整的 Prover ID！</p></li></ol><p>正确获取方式：</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://beta.nexus.xyz/">https://beta.nexus.xyz/</a></p><p>进入 Nexus Beta 页面后，按下 F12 打开浏览器开发者工具。 查找名为 account 的请求（或相关输出）。 在返回的 JSON 数据中，找到 localid 字段，这个 localid 就是你的真正 proverid。 你会发现其中前半部分和网页显示的相同，大小写忽略即可。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/3bc57046cc97e1c6fa496a9f688d651b964ebce6a85c95225449e19bdcfd5566.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>2. 使用 CLI 挖 Nexus 前提条件 准备一个 VPS（最低配置即可，国外主机都可以）。 推荐使用 <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.vultr.com/?ref=9678538-9J">Vultr 等服务商</a>，点击链接有充值赠送活动（如冲100U送300U）。</p><p><strong>操作系统选择ubuntu22.04（别选错了！）</strong></p><p>安装步骤</p><ol><li><p>使用 root 账户登录 VPS。</p></li><li><p>依次执行以下命令（脚本为开源，可下载自行查看源码）：</p></li></ol><pre data-type="codeBlock" text="wget https://pub-e3b4652c5d5f4c1b8fbfdff04685c330.r2.dev/install-nexus.sh
chmod +x install-nexus.sh
./install-nexus.sh --prover-id &lt;你的proverid&gt;
"><code>wget https:<span class="hljs-comment">//pub-e3b4652c5d5f4c1b8fbfdff04685c330.r2.dev/install-nexus.sh</span>
chmod <span class="hljs-operator">+</span>x install<span class="hljs-operator">-</span>nexus.sh
./install<span class="hljs-operator">-</span>nexus.sh <span class="hljs-operator">-</span><span class="hljs-operator">-</span>prover<span class="hljs-operator">-</span>id <span class="hljs-operator">&#x3C;</span>你的proverid<span class="hljs-operator">></span>
</code></pre><p>例如，如果我的 <code>proverid</code> 是 <code>AU8VN4Fne7TG68SKrSOQ8GcInR32</code>，则执行：</p><pre data-type="codeBlock" text="./install-nexus.sh --prover-id AU8VN4Fne7TG68SKrSOQ8GcInR32
"><code>./install<span class="hljs-operator">-</span>nexus.sh <span class="hljs-operator">-</span><span class="hljs-operator">-</span>prover<span class="hljs-operator">-</span>id AU8VN4Fne7TG68SKrSOQ8GcInR32
</code></pre><h4 id="h-" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">后台运行（可选）</h4><p>如果你希望在后台持续运行并查看日志，可使用以下命令：</p><pre data-type="codeBlock" text="nohup ./install-nexus.sh --prover-id AU8VN4Fne7TG68SKrSOQ8GcInR32 &amp; 
tail -f nohup.out
"><code>nohup ./install<span class="hljs-operator">-</span>nexus.sh <span class="hljs-operator">-</span><span class="hljs-operator">-</span>prover<span class="hljs-operator">-</span>id AU8VN4Fne7TG68SKrSOQ8GcInR32 <span class="hljs-operator">&#x26;</span> 
tail <span class="hljs-operator">-</span>f nohup.out
</code></pre><p>最后显示这样即代表运行成功～</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/584807ce3acb85f927b1b08875ef12e08a5254767c1ee9ea0ab3df5ad08cb2e9.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>运行完成后，稍等片刻（可能需要一些时间同步和初始化），登录 <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://beta.nexus.xyz">Nexus Beta 网站</a>，你将看到 <code>cycles</code> 数据开始变化，说明挖矿已成功开始。</p><p><strong>恭喜你，安装及挖矿流程已简单搞定！</strong></p>]]></content:encoded>
            <author>daniel-32@newsletter.paragraph.com (Daniel )</author>
        </item>
        <item>
            <title><![CDATA[手把手教学｜如何部署quilibrium pow编译版]]></title>
            <link>https://paragraph.com/@daniel-32/quilibrium-pow</link>
            <guid>vJdovS2japec1hDxRvdr</guid>
            <pubDate>Mon, 27 May 2024 17:31:36 GMT</pubDate>
            <description><![CDATA[quilibrium 第一批奖励每个节点有上千U，以至于现在卷了起来。官方改了节点算法。 昨晚刚更新，现在的v1.4.18版本暂时无bug 所有的安装文档都可以在这里找到首先需要一个ubuntu的机器，无论是本地物理机还是VPS都可以,下面的链接新用户可以白嫖200U的费用，刚好能跑2个月DigitalOcean | Cloud Infrastructure for DevelopersAn ocean of simple, scalable cloud solutions.https://www.digitalocean.com注册好了，首先创建vps，配置最低选择如下图，地理位置不限，系统选择ubuntu20.04 当然配置越高越好，毕竟pow。如果有网络问题，检查防火墙，打开所有端口##ssh登陆上去之后输入以下命令 wget -O - https://raw.githubusercontent.com/0xOzgur/QuilibriumTools/v1.4.18/install/install_quilibrium_service.sh | bash 大概等待5分钟，节...]]></description>
            <content:encoded><![CDATA[<p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://quilibrium.com/rewards">quilibrium</a> 第一批奖励每个节点有上千U，以至于现在卷了起来。官方改了节点算法。 昨晚刚更新，现在的v1.4.18版本暂时无bug</p><p>所有的安装文档都可以在这里找到</p><div data-type="embedly" src="https://docs.quilibrium.space/autoinstaller" data="{&quot;provider_url&quot;:&quot;https://docs.quilibrium.space&quot;,&quot;title&quot;:&quot;quilibrium.space&quot;,&quot;url&quot;:&quot;https://docs.quilibrium.space/autoinstaller&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;Quilibrium&quot;,&quot;type&quot;:&quot;link&quot;}" format="small"></div><p>首先需要一个ubuntu的机器，无论是本地物理机还是VPS都可以,下面的链接新用户可以白嫖200U的费用，刚好能跑2个月</p><div data-type="embedly" src="https://m.do.co/c/a3f9f00c0499" data="{&quot;provider_url&quot;:&quot;https://www.digitalocean.com&quot;,&quot;description&quot;:&quot;An ocean of simple, scalable cloud solutions.&quot;,&quot;title&quot;:&quot;DigitalOcean | Cloud Infrastructure for Developers&quot;,&quot;thumbnail_width&quot;:1200,&quot;url&quot;:&quot;https://www.digitalocean.com&quot;,&quot;thumbnail_url&quot;:&quot;https://storage.googleapis.com/papyrus_images/2369ea772e269fd5aaafef35d546b38fe2a10061fc06dbf9ca7cc2868091e4ca.jpg&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;Digitalocean&quot;,&quot;type&quot;:&quot;link&quot;,&quot;thumbnail_height&quot;:600,&quot;image&quot;:{&quot;img&quot;:{&quot;width&quot;:1200,&quot;height&quot;:600,&quot;src&quot;:&quot;https://storage.googleapis.com/papyrus_images/2369ea772e269fd5aaafef35d546b38fe2a10061fc06dbf9ca7cc2868091e4ca.jpg&quot;}}}" format="small"><link rel="preload" as="image" href="https://storage.googleapis.com/papyrus_images/2369ea772e269fd5aaafef35d546b38fe2a10061fc06dbf9ca7cc2868091e4ca.jpg"/><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://m.do.co/c/a3f9f00c0499" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>DigitalOcean | Cloud Infrastructure for Developers</h2><p>An ocean of simple, scalable cloud solutions.</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://www.digitalocean.com</span></div><img src="https://storage.googleapis.com/papyrus_images/2369ea772e269fd5aaafef35d546b38fe2a10061fc06dbf9ca7cc2868091e4ca.jpg"/></div></a></div></div><p>注册好了，首先创建vps，配置最低选择如下图，地理位置不限，系统选择ubuntu20.04<br>当然配置越高越好，毕竟pow。如果有网络问题，检查防火墙，打开所有端口</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/5430ee76f8680c09e91bad894edb5fbc8dfe59d390fa4fd3dee826c17f18d654.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><pre data-type="codeBlock" text="##ssh登陆上去之后输入以下命令

wget -O - https://raw.githubusercontent.com/0xOzgur/QuilibriumTools/v1.4.18/install/install_quilibrium_service.sh | bash
"><code><span class="hljs-comment">##ssh登陆上去之后输入以下命令</span>

wget -O - https://raw.githubusercontent.com/0xOzgur/QuilibriumTools/v1.4.18/install/install_quilibrium_service.sh | bash
</code></pre><p>大概等待5分钟，节点就安装完成了。接下来就是怎么维护</p><pre data-type="codeBlock" text="cd /root/ceremonyclient/node/.config
##查看keys.yml,将输出的保存起来，这个就是你的私钥
cat keys.yml
##查看config.yml，将输出的保存起来，这个就是你的节点信息
cat config.yml
##修改config.yml,开启rpc等功能
sed -i &apos;s|listenGrpcMultiaddr: &quot;&quot;|listenGrpcMultiaddr: &quot;/ip4/127.0.0.1/tcp/8337&quot;\nlistenRESTMultiaddr: &quot;/ip4/127.0.0.1/tcp/8338&quot;|g&apos; config.yml
sed -i &apos;/^\s*engine:/a\  statsMultiaddr: &quot;/dns/stats.quilibrium.com/tcp/443&quot;&apos; config.yml
"><code>cd <span class="hljs-operator">/</span>root<span class="hljs-operator">/</span>ceremonyclient<span class="hljs-operator">/</span>node<span class="hljs-operator">/</span>.config
##查看keys.yml,将输出的保存起来，这个就是你的私钥
cat keys.yml
##查看config.yml，将输出的保存起来，这个就是你的节点信息
cat config.yml
##修改config.yml,开启rpc等功能
sed <span class="hljs-operator">-</span>i <span class="hljs-string">'s|listenGrpcMultiaddr: ""|listenGrpcMultiaddr: "/ip4/127.0.0.1/tcp/8337"\nlistenRESTMultiaddr: "/ip4/127.0.0.1/tcp/8338"|g'</span> config.yml
sed <span class="hljs-operator">-</span>i <span class="hljs-string">'/^\s*engine:/a\  statsMultiaddr: "/dns/stats.quilibrium.com/tcp/443"'</span> config.yml
</code></pre><p><br>因为修改了配置，需要重启服务</p><pre data-type="codeBlock" text="## 重启服务
service ceremonyclient restart

##查看自己的节点id 
cd ~/ceremonyclient/node &amp;&amp; ./node-1.4.18-linux-amd64 -peer-id
"><code>## 重启服务
service ceremonyclient restart

##查看自己的节点id 
cd <span class="hljs-operator">~</span><span class="hljs-operator">/</span>ceremonyclient<span class="hljs-operator">/</span>node <span class="hljs-operator">&#x26;</span><span class="hljs-operator">&#x26;</span> ./node<span class="hljs-number">-1.4</span><span class="hljs-number">.18</span><span class="hljs-operator">-</span>linux<span class="hljs-operator">-</span>amd64 <span class="hljs-operator">-</span>peer<span class="hljs-operator">-</span>id
</code></pre>]]></content:encoded>
            <author>daniel-32@newsletter.paragraph.com (Daniel )</author>
        </item>
        <item>
            <title><![CDATA[手把手教学｜如何超简单的部署io.net(以及解决网络问题)]]></title>
            <link>https://paragraph.com/@daniel-32/io-net</link>
            <guid>k5NFAaduLPvRuils9W8B</guid>
            <pubDate>Tue, 26 Mar 2024 19:42:57 GMT</pubDate>
            <description><![CDATA[本文主要从技术角度详细讲解了如何部署io.net，以及如何解决各种问题。 项目地址如下，是否部署投资等DYOR～io.net | Decentralized GPU Ecosystem for AI Workloads - Save Up to 70%Power your AI workloads with io.net&#x27;s intelligent stack: on-demand GPU clusters in 130+ countries, up to 70% cost savings vs. AWS/GCP, and flexible deployment options. Built for AI teams - deploy containers, Ray clusters, or bare metal today.https://io.net1. 注册，添加worker从上面官网点进去之后，注册登录 点击官网左上角，会出现一长列，点击worker，中间会出现链接新的worker。 按照你的机器选择对应的配置，一直到底下出现命令行，也就是核心的第5步和第6步。...]]></description>
            <content:encoded><![CDATA[<p>本文主要从技术角度详细讲解了如何部署io.net，以及如何解决各种问题。<br>项目地址如下，是否部署投资等DYOR～</p><div data-type="embedly" src="https://io.net/" data="{&quot;provider_url&quot;:&quot;https://io.net&quot;,&quot;description&quot;:&quot;Power your AI workloads with io.net&apos;s intelligent stack: on-demand GPU clusters in 130+ countries, up to 70% cost savings vs. AWS/GCP, and flexible deployment options. Built for AI teams - deploy containers, Ray clusters, or bare metal today.&quot;,&quot;title&quot;:&quot;io.net | Decentralized GPU Ecosystem for AI Workloads - Save Up to 70%&quot;,&quot;mean_alpha&quot;:63.75,&quot;thumbnail_width&quot;:1000,&quot;url&quot;:&quot;https://io.net/&quot;,&quot;thumbnail_url&quot;:&quot;https://storage.googleapis.com/papyrus_images/d783e9fc418a5d7233a44310df0877dba476c95e59f1325740ba217840d20645.png&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;Io&quot;,&quot;type&quot;:&quot;link&quot;,&quot;thumbnail_height&quot;:1000,&quot;image&quot;:{&quot;img&quot;:{&quot;width&quot;:1000,&quot;height&quot;:1000,&quot;src&quot;:&quot;https://storage.googleapis.com/papyrus_images/d783e9fc418a5d7233a44310df0877dba476c95e59f1325740ba217840d20645.png&quot;}}}" format="small"><link rel="preload" as="image" href="https://storage.googleapis.com/papyrus_images/d783e9fc418a5d7233a44310df0877dba476c95e59f1325740ba217840d20645.png"/><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://io.net/" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>io.net | Decentralized GPU Ecosystem for AI Workloads - Save Up to 70%</h2><p>Power your AI workloads with io.net&#x27;s intelligent stack: on-demand GPU clusters in 130+ countries, up to 70% cost savings vs. AWS/GCP, and flexible deployment options. Built for AI teams - deploy containers, Ray clusters, or bare metal today.</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://io.net</span></div><img src="https://storage.googleapis.com/papyrus_images/d783e9fc418a5d7233a44310df0877dba476c95e59f1325740ba217840d20645.png"/></div></a></div></div><h2 id="h-1-worker" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">1. 注册，添加worker</h2><p>从上面官网点进去之后，注册登录<br>点击官网左上角，会出现一长列，点击worker，中间会出现链接新的worker。<br>按照你的机器选择对应的配置，一直到底下出现命令行，也就是核心的第5步和第6步。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/05fd2e90de35236ce0b5093c0b7e2e3fa9348d246dca07121dcb553c824c3ed9.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>理论上mac和ubuntu用户直接在shell命令输入网页中的命令，即可自动部署。<br>但是因为某些地区网络问题，会出现无法部署的情况，下面教程主要解决这个问题。</p><h2 id="h-2" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">2. 自建代理工具</h2><p>请在合法合规地区使用，请确保遵守当地法律法规，以下教程所有程序都是开源代码。<br>申明:在加拿大以及美国合法使用VPN是保护公民隐私的合法技术</p><p>首先注册一个vps账号，（新用户走下面的链接有200U的免费额度）</p><div data-type="embedly" src="https://m.do.co/c/a3f9f00c0499" data="{&quot;provider_url&quot;:&quot;https://www.digitalocean.com&quot;,&quot;description&quot;:&quot;An ocean of simple, scalable cloud solutions.&quot;,&quot;title&quot;:&quot;DigitalOcean | Cloud Infrastructure for Developers&quot;,&quot;thumbnail_width&quot;:1200,&quot;url&quot;:&quot;https://www.digitalocean.com&quot;,&quot;thumbnail_url&quot;:&quot;https://storage.googleapis.com/papyrus_images/2369ea772e269fd5aaafef35d546b38fe2a10061fc06dbf9ca7cc2868091e4ca.jpg&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;Digitalocean&quot;,&quot;type&quot;:&quot;link&quot;,&quot;thumbnail_height&quot;:600,&quot;image&quot;:{&quot;img&quot;:{&quot;width&quot;:1200,&quot;height&quot;:600,&quot;src&quot;:&quot;https://storage.googleapis.com/papyrus_images/2369ea772e269fd5aaafef35d546b38fe2a10061fc06dbf9ca7cc2868091e4ca.jpg&quot;}}}" format="small"><link rel="preload" as="image" href="https://storage.googleapis.com/papyrus_images/2369ea772e269fd5aaafef35d546b38fe2a10061fc06dbf9ca7cc2868091e4ca.jpg"/><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://m.do.co/c/a3f9f00c0499" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>DigitalOcean | Cloud Infrastructure for Developers</h2><p>An ocean of simple, scalable cloud solutions.</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://www.digitalocean.com</span></div><img src="https://storage.googleapis.com/papyrus_images/2369ea772e269fd5aaafef35d546b38fe2a10061fc06dbf9ca7cc2868091e4ca.jpg"/></div></a></div></div><p>注册好能使用之后，创建一个droplets,地区选离你近的，系统选择ubuntu20.04<br>CPU:base ,Regular Disk type: SSD,密码设置你root账户的登录密码。<br>总花销是**$6.00/month,有1t流量，一般情况下目前分不到任务，1T流量足够使用1个月了**创建好之后，会有一个IPV4，<br>使用ssh工具登录上机器, 执行以下命令，会自动安装v2ray，会弹出来一段消息，请记录好。<br>VPN工具就此准备好了</p><pre data-type="codeBlock" text="bash &lt;(wget -qO- -o- https://git.io/v2ray.sh)
"><code>bash <span class="hljs-operator">&#x3C;</span>(wget <span class="hljs-operator">-</span>qO<span class="hljs-operator">-</span> <span class="hljs-operator">-</span>o<span class="hljs-operator">-</span> https:<span class="hljs-comment">//git.io/v2ray.sh)</span>
</code></pre><h3 id="h-31mac-ionet" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">3.1Mac 系统如何安装io.net</h3><p>第一步：安装轻量化docker程序，相比docker-desktop操作简单，更轻量化。<br>下载安装打开即可</p><div data-type="embedly" src="https://orbstack.dev/download" data="{&quot;provider_url&quot;:&quot;https://orbstack.dev&quot;,&quot;description&quot;:&quot;Say goodbye to slow, clunky containers and VMs. The fast, light, and easy way to run containers and Linux. Develop at lightspeed with our Docker Desktop alternative.&quot;,&quot;title&quot;:&quot;Download OrbStack · Fast, light, simple Docker &amp; Linux&quot;,&quot;mean_alpha&quot;:224.134765625,&quot;thumbnail_width&quot;:256,&quot;url&quot;:&quot;https://orbstack.dev/download&quot;,&quot;thumbnail_url&quot;:&quot;https://storage.googleapis.com/papyrus_images/ffe7f868fa4bac0cbdd5c8512f5bed11795466767775e436543fef01f9f7cde9.png&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;OrbStack&quot;,&quot;type&quot;:&quot;link&quot;,&quot;thumbnail_height&quot;:256,&quot;image&quot;:{&quot;img&quot;:{&quot;width&quot;:256,&quot;height&quot;:256,&quot;src&quot;:&quot;https://storage.googleapis.com/papyrus_images/ffe7f868fa4bac0cbdd5c8512f5bed11795466767775e436543fef01f9f7cde9.png&quot;}}}" format="small"><link rel="preload" as="image" href="https://storage.googleapis.com/papyrus_images/ffe7f868fa4bac0cbdd5c8512f5bed11795466767775e436543fef01f9f7cde9.png"/><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://orbstack.dev/download" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>Download OrbStack · Fast, light, simple Docker &amp; Linux</h2><p>Say goodbye to slow, clunky containers and VMs. The fast, light, and easy way to run containers and Linux. Develop at lightspeed with our Docker Desktop alternative.</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://orbstack.dev</span></div><img src="https://storage.googleapis.com/papyrus_images/ffe7f868fa4bac0cbdd5c8512f5bed11795466767775e436543fef01f9f7cde9.png"/></div></a></div></div><p>第二步：安装VPN工具<br>下载安装打开,m系列选择arm64</p><div data-type="embedly" src="https://github.com/yanue/V2rayU/releases/tag/v3.8.0" data="{&quot;provider_url&quot;:&quot;https://github.com&quot;,&quot;description&quot;:&quot;V2rayU,基于v2ray核心的mac版客户端,用于科学上网,使用swift编写,支持trojan,vmess,shadowsocks,socks5等服务协议,支持订阅, 支持二维码,剪贴板导入,手动配置,二维码分享等 - Release v3.8.0 · yanue/V2rayU&quot;,&quot;title&quot;:&quot;Release v3.8.0 · yanue/V2rayU&quot;,&quot;author_name&quot;:&quot;yanue&quot;,&quot;thumbnail_width&quot;:1200,&quot;url&quot;:&quot;https://github.com/yanue/V2rayU/releases/tag/v3.8.0&quot;,&quot;thumbnail_url&quot;:&quot;https://storage.googleapis.com/papyrus_images/8a4bf20540cdd902c8c9e4dcae73a5a9a19d3816dd120d6f0cdca22750f41c14.png&quot;,&quot;author_url&quot;:&quot;https://github.com/yanue&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;GitHub&quot;,&quot;type&quot;:&quot;link&quot;,&quot;thumbnail_height&quot;:600,&quot;image&quot;:{&quot;img&quot;:{&quot;width&quot;:1200,&quot;height&quot;:600,&quot;src&quot;:&quot;https://storage.googleapis.com/papyrus_images/8a4bf20540cdd902c8c9e4dcae73a5a9a19d3816dd120d6f0cdca22750f41c14.png&quot;}}}" format="small"><link rel="preload" as="image" href="https://storage.googleapis.com/papyrus_images/8a4bf20540cdd902c8c9e4dcae73a5a9a19d3816dd120d6f0cdca22750f41c14.png"/><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://github.com/yanue/V2rayU/releases/tag/v3.8.0" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>Release v3.8.0 · yanue/V2rayU</h2><p>V2rayU,基于v2ray核心的mac版客户端,用于科学上网,使用swift编写,支持trojan,vmess,shadowsocks,socks5等服务协议,支持订阅, 支持二维码,剪贴板导入,手动配置,二维码分享等 - Release v3.8.0 · yanue/V2rayU</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://github.com</span></div><img src="https://storage.googleapis.com/papyrus_images/8a4bf20540cdd902c8c9e4dcae73a5a9a19d3816dd120d6f0cdca22750f41c14.png"/></div></a></div></div><p>选择configure，会进入到，将服务器中vmess链接 (URL) 拷贝过来，类似于 vmess://eyJ2IjoyLCJwcyI6IjIz 一长串，一直到=号结束，然后点击ok，之后就会在server中看到你的vps机器ip的配置，点击之后开启软件。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/f1a9804dfc81c6527286679f9488528991f777b3d984b045756a8b7f4a4cff56.png" alt="链接复制到这里" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">链接复制到这里</figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/40894ea75dc576459d0246e8f211b5f91988ec7b7a76f57087a9e1e69ede42d0.png" alt="模式选Global全局模式" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">模式选Global全局模式</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/f24589e7004ee68bfeab5da617935986a1aac1726303943afdc610c2ed131204.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><pre data-type="codeBlock" text="打开iterm （mac自带的中文名字叫终端），粘贴，会出现一段类似于下面的代码，（请勿从底下拷贝，一定要从自己的配置中粘贴过来）
export http_proxy=http://127.0.0.1:1089;export https_proxy=http://127.0.0.1:1089;export ALL_PROXY=socks5://127.0.0.1:1080

之后输入
curl ip.me
如果这个时候显示的ip是你vps的ip，那就成功了。
"><code>打开iterm （mac自带的中文名字叫终端），粘贴，会出现一段类似于下面的代码，（请勿从底下拷贝，一定要从自己的配置中粘贴过来）
export http_proxy<span class="hljs-operator">=</span>http:<span class="hljs-comment">//127.0.0.1:1089;export https_proxy=http://127.0.0.1:1089;export ALL_PROXY=socks5://127.0.0.1:1080</span>

之后输入
curl ip.me
如果这个时候显示的ip是你vps的ip，那就成功了。
</code></pre><p><br>配置orbstack走vpn流量，打开orbstack，选择setting，选择network，点击proxy custom，复制socks5://127.0.0.1:1080到图片位置，自此orbstack就设置好了。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/1990e8d18529d835d4a85a11d668d58b524cd74b755b9fbf627694965a8b345e.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><br><br>接下来就执行io.net中的第六步（注意是第6步，第5步因为安装了orbstack，就可以跳过了）<br>类似于下面的代码，在同一个命令行中运行，（请注意，使用自己的命令，下面只是举例）</p><pre data-type="codeBlock" text="curl -L https://github.com/ionet-official/io_launch_binaries/raw/main/launch_binary_mac -o launch_binary_mac

chmod +x launch_binary_mac

./launch_binary_mac --device_id=*** --user_id=***** --operating_system=&quot;macOS&quot; --usegpus=false --device_name=test01
"><code>curl <span class="hljs-operator">-</span>L https:<span class="hljs-comment">//github.com/ionet-official/io_launch_binaries/raw/main/launch_binary_mac -o launch_binary_mac</span>

chmod <span class="hljs-operator">+</span>x launch_binary_mac

./launch_binary_mac <span class="hljs-operator">-</span><span class="hljs-operator">-</span>device_id<span class="hljs-operator">=</span><span class="hljs-operator">*</span><span class="hljs-operator">*</span><span class="hljs-operator">*</span> <span class="hljs-operator">-</span><span class="hljs-operator">-</span>user_id<span class="hljs-operator">=</span><span class="hljs-operator">*</span><span class="hljs-operator">*</span><span class="hljs-operator">*</span><span class="hljs-operator">*</span><span class="hljs-operator">*</span> <span class="hljs-operator">-</span><span class="hljs-operator">-</span>operating_system<span class="hljs-operator">=</span><span class="hljs-string">"macOS"</span> <span class="hljs-operator">-</span><span class="hljs-operator">-</span>usegpus<span class="hljs-operator">=</span><span class="hljs-literal">false</span> <span class="hljs-operator">-</span><span class="hljs-operator">-</span>device_name<span class="hljs-operator">=</span>test01
</code></pre><p><br>根据网络速度等待2-10分钟，第七步会显示已经连上，自此就配置全部完成了。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/ba755b0e594da479a8cfc0ac2a0116cd33be67dfbc820914c7bf1f679b8e8966.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>每天检查一下状态，如果是Running就是正常的。Idle代表空闲（正常）<br>如果不在runing，就执行页面中显示的<br><strong>1. Run the command to download and launch binary<br>2. Copy and run the command below<br>两步即可，请注意一定要打开orbstack的proxy模式和打开v2ray</strong></p><h3 id="h-32-ubuntu-ionet" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">3.2 Ubuntu 系统如何安装io.net</h3><p>会玩ubuntu的起码是shell入门级玩家了，只讲一下详细的操作方案了<br>第一步：首先安装docker环境和和io.net的依赖</p><pre data-type="codeBlock" text="
curl -L https://github.com/ionet-official/io-net-official-setup-script/raw/main/ionet-setup.sh -o ionet-setup.sh
chmod +x ionet-setup.sh &amp;&amp; ./ionet-setup.sh
"><code>
curl <span class="hljs-operator">-</span>L https:<span class="hljs-comment">//github.com/ionet-official/io-net-official-setup-script/raw/main/ionet-setup.sh -o ionet-setup.sh</span>
chmod <span class="hljs-operator">+</span>x ionet<span class="hljs-operator">-</span>setup.sh <span class="hljs-operator">&#x26;</span><span class="hljs-operator">&#x26;</span> ./ionet<span class="hljs-operator">-</span>setup.sh
</code></pre><p>第二步： 安装任何支持v2ray的代理程序 举例说明 <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://v2raya.org/"><strong>v2rayA</strong></a></p><pre data-type="codeBlock" text="wget -qO - https://apt.v2raya.org/key/public-key.asc | sudo tee /etc/apt/keyrings/v2raya.asc

echo &quot;deb [signed-by=/etc/apt/keyrings/v2raya.asc] https://apt.v2raya.org/ v2raya main&quot; | sudo tee /etc/apt/sources.list.d/v2raya.list
sudo apt update
sudo apt install v2raya v2ray 
"><code>wget <span class="hljs-operator">-</span>qO <span class="hljs-operator">-</span> https:<span class="hljs-comment">//apt.v2raya.org/key/public-key.asc | sudo tee /etc/apt/keyrings/v2raya.asc</span>

echo <span class="hljs-string">"deb [signed-by=/etc/apt/keyrings/v2raya.asc] https://apt.v2raya.org/ v2raya main"</span> <span class="hljs-operator">|</span> sudo tee <span class="hljs-operator">/</span>etc<span class="hljs-operator">/</span>apt<span class="hljs-operator">/</span>sources.list.d/v2raya.list
sudo apt update
sudo apt install v2raya v2ray 
</code></pre><p><strong><br>第三步：启动v2rayA并且将vmless url导入进去，不进行分流，开启redirect模式+socks端口。socks默认是</strong><code>socks5://127.0.0.1:20170</code></p><p><strong>第四步：</strong></p><p>在 Ubuntu 上配置 Docker 流量通过 SOCKS5 代理的步骤：</p><ol><li><p><strong>编辑 Docker 服务文件：</strong></p><p>首先，你需要找到 Docker 的服务文件。Docker 的服务文件通常位于 <code>/lib/systemd/system/docker.service</code></p><pre data-type="codeBlock" text="sudo vim /lib/systemd/system/docker.service
"><code>sudo vim <span class="hljs-operator">/</span>lib<span class="hljs-operator">/</span>systemd<span class="hljs-operator">/</span>system<span class="hljs-operator">/</span>docker.service
</code></pre></li><li><p><strong>修改</strong> <code>ExecStart</code> 命令：</p><p>在这行命令中，添加一个环境变量来指定 SOCKS5 代理。例如：</p><p>修改为：</p><pre data-type="codeBlock" text="ExecStart=/usr/bin/dockerd --host=fd:// --add-runtime=nvidia=/usr/bin/nvidia-container-runtime $DOCKER_OPTS
Environment=&quot;ALL_PROXY=socks5://127.0.0.1:20170&quot;
"><code>ExecStart<span class="hljs-operator">=</span><span class="hljs-operator">/</span>usr<span class="hljs-operator">/</span>bin<span class="hljs-operator">/</span>dockerd <span class="hljs-operator">-</span><span class="hljs-operator">-</span>host<span class="hljs-operator">=</span>fd:<span class="hljs-comment">// --add-runtime=nvidia=/usr/bin/nvidia-container-runtime $DOCKER_OPTS</span>
Environment<span class="hljs-operator">=</span><span class="hljs-string">"ALL_PROXY=socks5://127.0.0.1:20170"</span>
</code></pre><p>确保将 <code>socks5://127.0.0.1:20170</code> 替换为你的 SOCKS5 代理地址。</p></li><li><p><strong>重新加载 systemd 配置并重启 Docker：</strong></p><p>保存文件并退出编辑器后，重新加载 systemd 的配置并重启 Docker 服务：</p><pre data-type="codeBlock" text="sudo systemctl daemon-reload
sudo systemctl restart docker
"><code>sudo systemctl daemon<span class="hljs-operator">-</span>reload
sudo systemctl restart docker
</code></pre></li><li><p><strong>验证配置：</strong></p><p>确认 Docker 正确配置了代理。运行一个测试容器，比如 <code>curl</code>，来检查其外部 IP 地址，确保流量是通过代理的：</p><pre data-type="codeBlock" text="docker run --rm curlimages/curl curl ifconfig.me
"><code>docker run <span class="hljs-operator">-</span><span class="hljs-operator">-</span>rm curlimages<span class="hljs-operator">/</span>curl curl ifconfig.me
</code></pre><p>输出应该显示代理服务器的 IP 地址，即证明配置完全成功。</p></li></ol><p><strong>第五步：</strong></p><p>运行io.net的 第六步中所有的命令 Start the containers using binary<br>等待链接成功～</p><p><strong>小小总结一下：对于大多数玩家最难的部分就是网络配置部分，其他的基本上都很简单了～<br>io.net 已经将几乎需要用的程序一键化了，如果购买or租赁显卡设备运行，成本较大，据我所知有很多工作室在大批量跑了，空投收益未知。有mac电脑的话，小小参与一下也是可以的。</strong></p>]]></content:encoded>
            <author>daniel-32@newsletter.paragraph.com (Daniel )</author>
        </item>
        <item>
            <title><![CDATA[手把手教学｜如何使用CLI打Atomical铭文-脚本版（BTC系列教程3）]]></title>
            <link>https://paragraph.com/@daniel-32/cli-atomical-btc-3</link>
            <guid>YbGixj0eD91SQsZUncSI</guid>
            <pubDate>Thu, 18 Jan 2024 23:15:14 GMT</pubDate>
            <description><![CDATA[BTC系列教程第三版 之前已经写过了了BTC节点脚本和Atomical节点脚本，小白用户友好，只需要一键脚本就能安装成功。（我自己都在用哦，哈哈）然后发现有很多人不懂怎么安装环境，各种各样的报错。介于这个情况，我再写一个脚本，能够在ubuntu和mac上面使用，直接安装好各种环境和编译好程序，直接使用命令就可以打铭文～ Atom的铭文是使用UTXO直接记录所有的铭文信息，类似于在BTC上面刻了字刻了画，本质上还是BTC，也就是不存在归零的说法，保底1聪1币，设计非常优雅。 正因为如此，需要使用支持Atom的钱包来做转账操作，不然容易燃烧 现在Wizz打铭文也挺方便的，但是命令行的优势在于可以不用等待上一个上链，就能继续打下一个（更快了），如果打废了，日志保留了的话还是能找回来。 第一步 安装环境，打开终端(terminal)，一键脚本执行下面的命令，等待安装好之后会弹出来一个初始化的钱包地址，cd ~ wget -O atom-env.sh https://pub-e3b4652c5d5f4c1b8fbfdff04685c330.r2.dev/atom-env.sh &#x26;...]]></description>
            <content:encoded><![CDATA[<p><strong>BTC系列教程第三版</strong></p><p>之前已经写过了了BTC节点脚本和Atomical节点脚本，小白用户友好，只需要一键脚本就能安装成功。（我自己都在用哦，哈哈）然后发现有很多人不懂怎么安装环境，各种各样的报错。介于这个情况，我再写一个脚本，能够在ubuntu和mac上面使用，直接安装好各种环境和编译好程序，直接使用命令就可以打铭文～</p><p>Atom的铭文是使用UTXO直接记录所有的铭文信息，类似于在BTC上面刻了字刻了画，本质上还是BTC，也就是不存在归零的说法，保底1聪1币，设计非常优雅。<br><strong>正因为如此，需要使用支持Atom的钱包来做转账操作，不然容易燃烧</strong><br>现在Wizz打铭文也挺方便的，但是命令行的优势在于可以不用等待上一个上链，就能继续打下一个（更快了），如果打废了，日志保留了的话还是能找回来。</p><p><strong>第一步</strong> 安装环境，打开终端(terminal)，一键脚本执行下面的命令，等待安装好之后会弹出来一个初始化的钱包地址，</p><pre data-type="codeBlock" text="cd ~
wget -O atom-env.sh https://pub-e3b4652c5d5f4c1b8fbfdff04685c330.r2.dev/atom-env.sh &amp;&amp; chmod +x atom-env.sh &amp;&amp; sudo ./atom-env.sh
"><code>cd <span class="hljs-operator">~</span>
wget <span class="hljs-operator">-</span>O atom<span class="hljs-operator">-</span>env.sh https:<span class="hljs-comment">//pub-e3b4652c5d5f4c1b8fbfdff04685c330.r2.dev/atom-env.sh &#x26;&#x26; chmod +x atom-env.sh &#x26;&#x26; sudo ./atom-env.sh</span>
</code></pre><p>请保存好自己的这个文件，私钥地址等！！！（非常重要，不要泄漏）。打铭文地址默认情况下,funding地址是你的付款地址，primary是你的收铭文地址（后面可以用命令调整，也可以导入自己的钱包）</p><pre data-type="codeBlock" text="对shell熟悉的也可以运行下面的命令，开源的，源码如下，对大陆地区友好，替换了node源为大陆地区（如果执行了一键脚本，请不再重复运行这里）
export NVM_SOURCE=https://gitlab.com/mirrorx/nvm.git
curl -o- https://gitlab.com/mirrorx/nvm/-/raw/master/install.sh | bash
export NVM_DIR=&quot;$HOME/.nvm&quot;
[ -s &quot;$NVM_DIR/nvm.sh&quot; ] &amp;&amp; \. &quot;$NVM_DIR/nvm.sh&quot;  # This loads nvm
[ -s &quot;$NVM_DIR/bash_completion&quot; ] &amp;&amp; \. &quot;$NVM_DIR/bash_completion&quot;  # This loads nvm bash_completion
nvm install 20.2.0
npm install -g yarn
git clone https://github.com/atomicals/atomicals-js.git
cd atomicals-js/
yarn install
yarn run build
yarn run cli wallet-init
"><code>对shell熟悉的也可以运行下面的命令，开源的，源码如下，对大陆地区友好，替换了node源为大陆地区（如果执行了一键脚本，请不再重复运行这里）
export NVM_SOURCE<span class="hljs-operator">=</span>https:<span class="hljs-comment">//gitlab.com/mirrorx/nvm.git</span>
curl <span class="hljs-operator">-</span>o<span class="hljs-operator">-</span> https:<span class="hljs-comment">//gitlab.com/mirrorx/nvm/-/raw/master/install.sh | bash</span>
export NVM_DIR<span class="hljs-operator">=</span><span class="hljs-string">"$HOME/.nvm"</span>
[ <span class="hljs-operator">-</span>s <span class="hljs-string">"$NVM_DIR/nvm.sh"</span> ] <span class="hljs-operator">&#x26;</span><span class="hljs-operator">&#x26;</span> \. "$NVM_DIR<span class="hljs-operator">/</span>nvm.sh"  # This loads nvm
[ <span class="hljs-operator">-</span>s <span class="hljs-string">"$NVM_DIR/bash_completion"</span> ] <span class="hljs-operator">&#x26;</span><span class="hljs-operator">&#x26;</span> \. "$NVM_DIR<span class="hljs-operator">/</span>bash_completion<span class="hljs-string">"  # This loads nvm bash_completion
nvm install 20.2.0
npm install -g yarn
git clone https://github.com/atomicals/atomicals-js.git
cd atomicals-js/
yarn install
yarn run build
yarn run cli wallet-init
</span></code></pre><p><strong>第二步，如何打铭文</strong></p><pre data-type="codeBlock" text="# 首先进入到文件夹 （每第一次打开终端，都要执行进入到文件夹的操作，后面的进阶也是）
cd ~/atomicals-js
# 运行下面命令打铭文
yarn cli mint-dft &lt;铭文名字&gt; --satsbyte=&lt;手续费&gt; --funding=&lt;付钱的地址名字&gt; --initialowner=&lt;收铭文地址名字&gt;
# 为了让大家方便理解，写个例子
## 比如我想打智子，现在手续费是50聪/字节（可以去mempool查看） 命令如下

yarn cli mint-dft sophon --satsbyte=50 --funding=funding --initialowner=primary

## 然后等待就可以打出来了，一般情况下 6难度耗时根据电脑配置在1分钟到几分钟不等。
"><code># 首先进入到文件夹 （每第一次打开终端，都要执行进入到文件夹的操作，后面的进阶也是）
cd <span class="hljs-operator">~</span><span class="hljs-operator">/</span>atomicals<span class="hljs-operator">-</span>js
# 运行下面命令打铭文
yarn cli mint<span class="hljs-operator">-</span>dft <span class="hljs-operator">&#x3C;</span>铭文名字<span class="hljs-operator">></span> <span class="hljs-operator">-</span><span class="hljs-operator">-</span>satsbyte<span class="hljs-operator">=</span><span class="hljs-operator">&#x3C;</span>手续费<span class="hljs-operator">></span> <span class="hljs-operator">-</span><span class="hljs-operator">-</span>funding<span class="hljs-operator">=</span><span class="hljs-operator">&#x3C;</span>付钱的地址名字<span class="hljs-operator">></span> <span class="hljs-operator">-</span><span class="hljs-operator">-</span>initialowner<span class="hljs-operator">=</span><span class="hljs-operator">&#x3C;</span>收铭文地址名字<span class="hljs-operator">></span>
# 为了让大家方便理解，写个例子
## 比如我想打智子，现在手续费是<span class="hljs-number">50</span>聪<span class="hljs-operator">/</span>字节（可以去mempool查看） 命令如下

yarn cli mint<span class="hljs-operator">-</span>dft sophon <span class="hljs-operator">-</span><span class="hljs-operator">-</span>satsbyte<span class="hljs-operator">=</span><span class="hljs-number">50</span> <span class="hljs-operator">-</span><span class="hljs-operator">-</span>funding<span class="hljs-operator">=</span>funding <span class="hljs-operator">-</span><span class="hljs-operator">-</span>initialowner<span class="hljs-operator">=</span>primary

## 然后等待就可以打出来了，一般情况下 <span class="hljs-number">6</span>难度耗时根据电脑配置在<span class="hljs-number">1</span>分钟到几分钟不等。
</code></pre><p><strong>打出来上链之后才可以在钱包查看到余额！</strong></p><p><strong>第三步，进阶教程</strong></p><p><strong>1.如何导入其他的钱包</strong></p><pre data-type="codeBlock" text="## wif就是你的钱包导出来的一种私钥，名字可以自定义，结合步骤二，你可以更换任何钱包作为付钱钱包，任何钱包作为收钱钱包
yarn cli wallet-import &lt;wif&gt; &lt;wallet-name&gt;
"><code>## wif就是你的钱包导出来的一种私钥，名字可以自定义，结合步骤二，你可以更换任何钱包作为付钱钱包，任何钱包作为收钱钱包
yarn cli wallet<span class="hljs-operator">-</span><span class="hljs-keyword">import</span> <span class="hljs-operator">&#x3C;</span><span class="hljs-title">wif</span><span class="hljs-operator">></span> <span class="hljs-operator">&#x3C;</span><span class="hljs-title">wallet</span><span class="hljs-operator">-</span><span class="hljs-title">name</span><span class="hljs-operator">></span>
</code></pre><p><strong>2.如何更换RPC</strong></p><p>在打铭文的过程中，可能会出现rpc不稳定，导致卡住或者打了一半失败了，这个时候可以去寻找一下更好的rpc，或者自己搭建的！（前面有教程自己如何搭建rpc）<br>将下面的命令中换成新的rpc url，然后完整的拷贝到terminal，执行可能需要输入密码。</p><pre data-type="codeBlock" text="new_url=&quot;新的RPC节点&quot;  
sudo sed -i &apos;&apos; &apos;/^#.*ELECTRUMX_PROXY_BASE_URL/!s|ELECTRUMX_PROXY_BASE_URL=.*|ELECTRUMX_PROXY_BASE_URL=&apos;&quot;$new_url&quot;&apos;|&apos; .env
"><code>new_url<span class="hljs-operator">=</span><span class="hljs-string">"新的RPC节点"</span>  
sudo sed <span class="hljs-operator">-</span>i <span class="hljs-string">''</span> <span class="hljs-string">'/^#.*ELECTRUMX_PROXY_BASE_URL/!s|ELECTRUMX_PROXY_BASE_URL=.*|ELECTRUMX_PROXY_BASE_URL='</span><span class="hljs-string">"$new_url"</span><span class="hljs-string">'|'</span> .env
</code></pre><p>举例换成中子的RPC，命令如下</p><pre data-type="codeBlock" text="new_url=&quot;https://ep.atomicalneutron.com/proxy&quot;  
sudo sed -i &apos;&apos; &apos;/^#.*ELECTRUMX_PROXY_BASE_URL/!s|ELECTRUMX_PROXY_BASE_URL=.*|ELECTRUMX_PROXY_BASE_URL=&apos;&quot;$new_url&quot;&apos;|&apos; .env
"><code>new_url<span class="hljs-operator">=</span><span class="hljs-string">"https://ep.atomicalneutron.com/proxy"</span>  
sudo sed <span class="hljs-operator">-</span>i <span class="hljs-string">''</span> <span class="hljs-string">'/^#.*ELECTRUMX_PROXY_BASE_URL/!s|ELECTRUMX_PROXY_BASE_URL=.*|ELECTRUMX_PROXY_BASE_URL='</span><span class="hljs-string">"$new_url"</span><span class="hljs-string">'|'</span> .env
</code></pre><p><br><br>3. <strong>如何查看自己的钱包地址</strong></p><p>有些人初始化忘记存了，或者忘记了自己有哪些地址导入了,下面命令就可以查看</p><pre data-type="codeBlock" text="cat wallets/wallet.json
"><code>cat wallets<span class="hljs-operator">/</span>wallet.json
</code></pre><p>4.<strong>如何使用命令行自动重复打铭文</strong><br>yarn开头的就是你打铭文的命令，跟前面一样的。建议循环次数不要太大，手续费波动较大，可能需要随时调整。</p><pre data-type="codeBlock" text="## 修改这个10为你想要的数字，后面yarn开头的修改为你正常打铭文的命令。
N=10  

for ((i=1; i&lt;=N; i++)); do
  yarn cli mint-dft sophon --satsbyte=50 --funding=funding --initialowner=primary
done
"><code>## 修改这个<span class="hljs-number">10</span>为你想要的数字，后面yarn开头的修改为你正常打铭文的命令。
N<span class="hljs-operator">=</span><span class="hljs-number">10</span>  

<span class="hljs-keyword">for</span> ((i<span class="hljs-operator">=</span><span class="hljs-number">1</span>; i<span class="hljs-operator">&#x3C;</span><span class="hljs-operator">=</span>N; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>)); do
  yarn cli mint<span class="hljs-operator">-</span>dft sophon <span class="hljs-operator">-</span><span class="hljs-operator">-</span>satsbyte<span class="hljs-operator">=</span><span class="hljs-number">50</span> <span class="hljs-operator">-</span><span class="hljs-operator">-</span>funding<span class="hljs-operator">=</span>funding <span class="hljs-operator">-</span><span class="hljs-operator">-</span>initialowner<span class="hljs-operator">=</span>primary
done
</code></pre><p>还有哪些常见的问题，大家可以补充，我会添加到文章中～<br>比如需要根据实时gas费用调整等～后续我可以补充在文章中。</p><p>祝大家在Atomical生态玩的开心～顺带能发点财～哈哈</p>]]></content:encoded>
            <author>daniel-32@newsletter.paragraph.com (Daniel )</author>
        </item>
        <item>
            <title><![CDATA[一键在Ubuntu上运行Bitcoin Atom索引（BTC系列教程2）]]></title>
            <link>https://paragraph.com/@daniel-32/ubuntu-bitcoin-atom-btc-2</link>
            <guid>FUOMynklyeFHsNX3A3mz</guid>
            <pubDate>Tue, 21 Nov 2023 03:31:12 GMT</pubDate>
            <description><![CDATA[老规矩 ，一行代码搞定，不需要配置任何东西前提条件：必须搭配上一个脚本使用，具体可以看（链接点击这里） 先确保btc全节点同步完成，bitcoin-cli getblockchaininfo 这个命令查看blocks，如果跟区块链浏览器高度一样就是同步完成了。老规矩代码是开源的，点击查看接下来运行这个命令即可wget -O bitcoin_atom.sh https://pub-e3b4652c5d5f4c1b8fbfdff04685c330.r2.dev/bitcoin_atom.sh &#x26;&#x26; chmod +x bitcoin_atom.sh &#x26;&#x26; sudo ./bitcoin_atom.sh 等待安装完成后 服务器ip:8080 即可访问，也是atom的索引api 如果是内网环境比如家里，输入内网机器的ip:8080即可 如果是公网VM，公网ip：8080 下面这个命令也可以查看索引同步情况的日志docker compose -f $HOME/.electrumx-data/docker-compose.yml logs -f 顺带也贴在...]]></description>
            <content:encoded><![CDATA[<p><strong>老规矩 ，一行代码搞定，不需要配置任何东西</strong>前提条件：必须搭配上一个脚本使用，具体可以看<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/0x6EaD271a45ACc328Af22b369870509471a46f59D/GXuK9pLR7JPDD4k5_K7bz8aQv-eEmE4uew9XRMdaNhU">（链接点击这里）</a></p><p>先确保btc全节点同步完成，bitcoin-cli getblockchaininfo 这个命令查看blocks，如果跟区块链浏览器高度一样就是同步完成了。老规矩代码是开源的，<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://pub-e3b4652c5d5f4c1b8fbfdff04685c330.r2.dev/bitcoin_atom.sh">点击查看</a>接下来运行这个命令即可</p><pre data-type="codeBlock" text="wget -O bitcoin_atom.sh https://pub-e3b4652c5d5f4c1b8fbfdff04685c330.r2.dev/bitcoin_atom.sh &amp;&amp; chmod +x bitcoin_atom.sh &amp;&amp; sudo ./bitcoin_atom.sh
"><code>wget -O bitcoin_atom.sh https://pub-e3b4652c5d5f4c1b8fbfdff04685c330.r2.dev/bitcoin_atom.sh &#x26;&#x26; <span class="hljs-built_in">chmod</span> +x bitcoin_atom.sh &#x26;&#x26; sudo ./bitcoin_atom.sh
</code></pre><p>等待安装完成后 服务器ip:8080 即可访问，也是atom的索引api<br>如果是内网环境比如家里，输入内网机器的ip:8080即可<br>如果是公网VM，公网ip：8080<br>下面这个命令也可以查看索引同步情况的日志</p><pre data-type="codeBlock" text="docker compose -f $HOME/.electrumx-data/docker-compose.yml logs -f
"><code>docker compose <span class="hljs-operator">-</span>f $HOME<span class="hljs-operator">/</span>.electrumx-data<span class="hljs-operator">/</span>docker<span class="hljs-operator">-</span>compose.yml logs <span class="hljs-operator">-</span>f
</code></pre><p>顺带也贴在下面</p><pre data-type="codeBlock" text="#!/bin/bash

# Check if the script is running as root
if [ &quot;$(id -u)&quot; != &quot;0&quot; ]; then
    echo &quot;This script must be run as root. Please use sudo or log in as the root user.&quot;
    exit 1
fi

# install docker
bash &lt;(curl -s -L get.docker.com)

# Define the path to the bitcoin.conf file
BITCOIN_CONF=&quot;$HOME/.bitcoin/bitcoin.conf&quot;
ELECTRUMX_DATA_DIR=&quot;$HOME/.electrumx-data&quot;
# Check if bitcoin.conf exists
if [[ ! -f &quot;$BITCOIN_CONF&quot; ]]; then
    echo &quot;bitcoin.conf not found at $BITCOIN_CONF&quot;
    exit 1
fi

# Extract rpcuser and rpcpassword from bitcoin.conf
RPC_USER=$(grep &apos;^rpcuser=&apos; &quot;$BITCOIN_CONF&quot; | cut -d&apos;=&apos; -f2)
RPC_PASSWORD=$(grep &apos;^rpcpassword=&apos; &quot;$BITCOIN_CONF&quot; | cut -d&apos;=&apos; -f2)

# Check if we have non-empty values for both variables
if [[ -z &quot;$RPC_USER&quot; || -z &quot;$RPC_PASSWORD&quot; ]]; then
    echo &quot;rpcuser and rpcpassword must be set in $BITCOIN_CONF&quot;
    exit 1
fi

# Check if electrumx-data directory exists, if not create it
if [[ ! -d &quot;$ELECTRUMX_DATA_DIR&quot; ]]; then
    mkdir &quot;$ELECTRUMX_DATA_DIR&quot;
    echo &quot;Created electrumx data directory at $ELECTRUMX_DATA_DIR&quot;
fi

cd $ELECTRUMX_DATA_DIR

# Create or overwrite the docker-compose.yml file
cat &gt; docker-compose.yml &lt;&lt;EOF
version: &apos;3&apos;
services:
  proxy:
    image: lucky2077/atomicals-electrumx-proxy:latest
    restart: always
    network_mode: host
    environment:
      - ELECTRUMX_PORT=50001
      - ELECTRUMX_HOST=localhost

  electrumx:
    image: lucky2077/atomicals-electrumx:latest
    restart: always
    network_mode: host
    healthcheck:
      test: &quot;nc -z localhost 50001&quot;
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 30s
    volumes:
      - ./electrumx-data:/data
    environment:
      - DAEMON_URL=http://$RPC_USER:$RPC_PASSWORD@localhost:8332
      - COIN=Bitcoin
      - PEER_DISCOVERY=off
      - PEER_ANNOUNCE=&quot;&quot;
      - MAX_SEND=3000000
EOF

echo &quot;docker-compose.yml has been created/updated.&quot;

docker compose -f docker-compose.yml up -d
"><code>#<span class="hljs-operator">!</span><span class="hljs-operator">/</span>bin<span class="hljs-operator">/</span>bash

# Check <span class="hljs-keyword">if</span> the script <span class="hljs-keyword">is</span> running <span class="hljs-keyword">as</span> root
<span class="hljs-keyword">if</span> [ <span class="hljs-string">"$(id -u)"</span> <span class="hljs-operator">!</span><span class="hljs-operator">=</span> <span class="hljs-string">"0"</span> ]; then
    echo <span class="hljs-string">"This script must be run as root. Please use sudo or log in as the root user."</span>
    exit <span class="hljs-number">1</span>
fi

# install docker
bash <span class="hljs-operator">&#x3C;</span>(curl <span class="hljs-operator">-</span>s <span class="hljs-operator">-</span>L get.docker.com)

# Define the path to the bitcoin.conf file
BITCOIN_CONF<span class="hljs-operator">=</span><span class="hljs-string">"$HOME/.bitcoin/bitcoin.conf"</span>
ELECTRUMX_DATA_DIR<span class="hljs-operator">=</span><span class="hljs-string">"$HOME/.electrumx-data"</span>
# Check <span class="hljs-keyword">if</span> bitcoin.conf exists
<span class="hljs-keyword">if</span> [[ <span class="hljs-operator">!</span> <span class="hljs-operator">-</span>f <span class="hljs-string">"$BITCOIN_CONF"</span> ]]; then
    echo <span class="hljs-string">"bitcoin.conf not found at $BITCOIN_CONF"</span>
    exit <span class="hljs-number">1</span>
fi

# Extract rpcuser and rpcpassword <span class="hljs-keyword">from</span> bitcoin.conf
RPC_USER<span class="hljs-operator">=</span>$(grep <span class="hljs-string">'^rpcuser='</span> <span class="hljs-string">"$BITCOIN_CONF"</span> <span class="hljs-operator">|</span> cut <span class="hljs-operator">-</span>d<span class="hljs-string">'='</span> <span class="hljs-operator">-</span>f2)
RPC_PASSWORD<span class="hljs-operator">=</span>$(grep <span class="hljs-string">'^rpcpassword='</span> <span class="hljs-string">"$BITCOIN_CONF"</span> <span class="hljs-operator">|</span> cut <span class="hljs-operator">-</span>d<span class="hljs-string">'='</span> <span class="hljs-operator">-</span>f2)

# Check <span class="hljs-keyword">if</span> we have non<span class="hljs-operator">-</span>empty values <span class="hljs-keyword">for</span> both variables
<span class="hljs-keyword">if</span> [[ <span class="hljs-operator">-</span>z <span class="hljs-string">"$RPC_USER"</span> <span class="hljs-operator">|</span><span class="hljs-operator">|</span> <span class="hljs-operator">-</span>z <span class="hljs-string">"$RPC_PASSWORD"</span> ]]; then
    echo <span class="hljs-string">"rpcuser and rpcpassword must be set in $BITCOIN_CONF"</span>
    exit <span class="hljs-number">1</span>
fi

# Check <span class="hljs-keyword">if</span> electrumx<span class="hljs-operator">-</span>data directory exists, <span class="hljs-keyword">if</span> not create it
<span class="hljs-keyword">if</span> [[ <span class="hljs-operator">!</span> <span class="hljs-operator">-</span>d <span class="hljs-string">"$ELECTRUMX_DATA_DIR"</span> ]]; then
    mkdir <span class="hljs-string">"$ELECTRUMX_DATA_DIR"</span>
    echo <span class="hljs-string">"Created electrumx data directory at $ELECTRUMX_DATA_DIR"</span>
fi

cd $ELECTRUMX_DATA_DIR

# Create or overwrite the docker<span class="hljs-operator">-</span>compose.yml file
cat <span class="hljs-operator">></span> docker<span class="hljs-operator">-</span>compose.yml <span class="hljs-operator">&#x3C;</span><span class="hljs-operator">&#x3C;</span>EOF
version: <span class="hljs-string">'3'</span>
services:
  proxy:
    image: lucky2077<span class="hljs-operator">/</span>atomicals<span class="hljs-operator">-</span>electrumx<span class="hljs-operator">-</span>proxy:latest
    restart: always
    network_mode: host
    environment:
      <span class="hljs-operator">-</span> ELECTRUMX_PORT<span class="hljs-operator">=</span><span class="hljs-number">50001</span>
      <span class="hljs-operator">-</span> ELECTRUMX_HOST<span class="hljs-operator">=</span>localhost

  electrumx:
    image: lucky2077<span class="hljs-operator">/</span>atomicals<span class="hljs-operator">-</span>electrumx:latest
    restart: always
    network_mode: host
    healthcheck:
      test: <span class="hljs-string">"nc -z localhost 50001"</span>
      interval: 30s
      timeout: 10s
      retries: <span class="hljs-number">3</span>
      start_period: 30s
    volumes:
      <span class="hljs-operator">-</span> ./electrumx<span class="hljs-operator">-</span>data:<span class="hljs-operator">/</span>data
    environment:
      <span class="hljs-operator">-</span> DAEMON_URL<span class="hljs-operator">=</span>http:<span class="hljs-comment">//$RPC_USER:$RPC_PASSWORD@localhost:8332</span>
      <span class="hljs-operator">-</span> COIN<span class="hljs-operator">=</span>Bitcoin
      <span class="hljs-operator">-</span> PEER_DISCOVERY<span class="hljs-operator">=</span>off
      <span class="hljs-operator">-</span> PEER_ANNOUNCE<span class="hljs-operator">=</span><span class="hljs-string">""</span>
      <span class="hljs-operator">-</span> MAX_SEND<span class="hljs-operator">=</span><span class="hljs-number">3000000</span>
EOF

echo <span class="hljs-string">"docker-compose.yml has been created/updated."</span>

docker compose <span class="hljs-operator">-</span>f docker<span class="hljs-operator">-</span>compose.yml up <span class="hljs-operator">-</span>d
</code></pre>]]></content:encoded>
            <author>daniel-32@newsletter.paragraph.com (Daniel )</author>
        </item>
        <item>
            <title><![CDATA[一键在Ubuntu上运行Bitcoin全节点(BTC系列教程1)]]></title>
            <link>https://paragraph.com/@daniel-32/ubuntu-bitcoin-btc-1</link>
            <guid>fR73Z86s2UxbuR26KSBV</guid>
            <pubDate>Mon, 20 Nov 2023 20:59:46 GMT</pubDate>
            <description><![CDATA[现在经常需要btc全节点。很多人得开着电脑24小时不关机，属实很麻烦。 但是如果购买一个小主机，配上Ubuntu系统，24小时运行全节点。开启RPC之后，电脑随时都能连上使用。当然也可以做Atom索引等本文将会讲解如何搭建一个基于ubuntu系统的bitcoin全节点。 需求操作系统os: ubuntu20.04内存： 2GSSD： 1TB对于家用小服务器，我推荐买个N100的mini主机大概几百块钱+一块2tssd，总成本可能在1k左右 功率在10w左右，可以24小时不关机。一个linux设备代表能拥有什么呢： 各种好玩的docker服务，各种脚本如何安装BTC全节点使用root用户登陆上ubuntu之后，运行下面命令即可。wget -O bitcoin_node.sh https://pub-e3b4652c5d5f4c1b8fbfdff04685c330.r2.dev/bitcoin_node.sh &#x26;&#x26; chmod +x bitcoin_node.sh &#x26;&#x26; sudo ./bitcoin_node.sh 当然这个脚本也可以在wind...]]></description>
            <content:encoded><![CDATA[<p>现在经常需要btc全节点。很多人得开着电脑24小时不关机，属实很麻烦。</p><p>但是如果购买一个小主机，配上Ubuntu系统，24小时运行全节点。开启RPC之后，电脑随时都能连上使用。当然也可以做Atom索引等本文将会讲解如何搭建一个基于ubuntu系统的bitcoin全节点。</p><p><strong>需求</strong></p><ul><li><p>操作系统os: ubuntu20.04</p></li><li><p>内存： 2G</p></li><li><p>SSD： 1TB</p></li></ul><p>对于家用小服务器，我推荐买个N100的mini主机大概几百块钱+一块2tssd，总成本可能在1k左右 功率在10w左右，可以24小时不关机。一个linux设备代表能拥有什么呢： 各种好玩的docker服务，各种脚本</p><h2 id="h-btc" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">如何安装BTC全节点</h2><p>使用root用户登陆上ubuntu之后，运行下面命令即可。</p><pre data-type="codeBlock" text="wget -O bitcoin_node.sh https://pub-e3b4652c5d5f4c1b8fbfdff04685c330.r2.dev/bitcoin_node.sh &amp;&amp; chmod +x bitcoin_node.sh &amp;&amp; sudo ./bitcoin_node.sh
"><code>wget -O bitcoin_node.sh https://pub-e3b4652c5d5f4c1b8fbfdff04685c330.r2.dev/bitcoin_node.sh &#x26;&#x26; <span class="hljs-built_in">chmod</span> +x bitcoin_node.sh &#x26;&#x26; sudo ./bitcoin_node.sh
</code></pre><p>当然这个脚本也可以在window开启ubuntu的wsl2子系统使用，也可以在各种云服务使用。只要是X86的Ubuntu20.04都可以。安装脚本开源，安全放心～ 可以<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://pub-e3b4652c5d5f4c1b8fbfdff04685c330.r2.dev/bitcoin_node.sh">直接访问查看</a></p><p>在运行过程中，会提示让你输入 <br>rpc user： 输入你想配置的帐号<br>rpc password ： 输入你想配置的密码是否开启RPC<br>Do you want to enable external RPC access? (yes/no)<br>yes: 家里内网都可以访问rpc，（如果机器有外网ip的话，外网也可以访问）<br>no: 只有本机可以访问rpc （比如做atom索引之类的使用）<br>等待提示，安装完成Bitcoin Core is now installed and running.<br>输入这个命令即可以查看到同步高度:bitcoin-cli getblockchaininfo<br>后续更新如何在这台机器里面一键启动Atom索引,代码也完整的放到下面</p><pre data-type="codeBlock" text="#!/bin/bash

# Check if the script is running as root
if [ &quot;$(id -u)&quot; != &quot;0&quot; ]; then
    echo &quot;This script must be run as root. Please use sudo or log in as the root user.&quot;
    exit 1
fi

# Define Bitcoin Core version
BITCOIN_VERSION=&quot;25.0&quot;
BITCOIN_DIST=&quot;bitcoin-${BITCOIN_VERSION}-x86_64-linux-gnu.tar.gz&quot;


# Prompt user for RPC credentials
read -p &quot;Enter your RPC username: &quot; rpcuser
read -s -p &quot;Enter your RPC password: &quot; rpcpassword
echo

# Ask user if they want to enable external RPC access
read -p &quot;Do you want to enable external RPC access? (yes/no): &quot; enable_rpc

rpcallowip=&quot;127.0.0.1&quot; # Default to localhost

if [[ $enable_rpc == &quot;yes&quot; ]]; then
    rpcallowip=&quot;0.0.0.0/0&quot; # Allow all IPs (be cautious with this setting)
fi

# Update system
sudo apt update

# Install dependencies
sudo apt install -y build-essential libtool autotools-dev automake pkg-config bsdmainutils python3
sudo apt install -y libevent-dev libboost-system-dev libboost-filesystem-dev libboost-test-dev libboost-thread-dev

# Download Bitcoin Core and signatures
wget https://bitcoin.org/bin/bitcoin-core-${BITCOIN_VERSION}/${BITCOIN_DIST}

# Install Bitcoin Core
tar -xzvf ${BITCOIN_DIST}
sudo install -m 0755 -o root -g root -t /usr/local/bin bitcoin-${BITCOIN_VERSION}/bin/*

# Create Bitcoin data directory
mkdir -p ~/.bitcoin



# Create bitcoin.conf file
cat &gt;~/.bitcoin/bitcoin.conf &lt;&lt;EOF
server=1
rpcuser=$rpcuser
rpcpassword=$rpcpassword
rpcallowip=$rpcallowip
rpcbind=0.0.0.0
rpcport=8332
listen=1
daemon=1
txindex=1
EOF


# Create the systemd service file for bitcoind
cat &gt;/etc/systemd/system/bitcoind.service &lt;&lt;EOF
[Unit]
Description=Bitcoin daemon
After=network.target

[Service]
ExecStart=/usr/local/bin/bitcoind -daemon -conf=/root/.bitcoin/bitcoin.conf -pid=/root/.bitcoin/bitcoind.pid
User=root
Group=root
Type=forking
PIDFile=/root/.bitcoin/bitcoind.pid
Restart=on-failure
RestartSec=5
KillMode=process

[Install]
WantedBy=multi-user.target
EOF


# Reload the systemd manager configuration
systemctl daemon-reload

# Enable the bitcoind service to start on boot
systemctl enable bitcoind.service

# Start the bitcoind service now
systemctl start bitcoind.service

echo &quot;Bitcoin Core is now installed and running.&quot;
"><code><span class="hljs-comment">#!/bin/bash</span>

<span class="hljs-comment"># Check if the script is running as root</span>
if <span class="hljs-section">[ "$(id -u)" != "0" ]</span><span class="hljs-comment">; then</span>
    echo "This script must be run as root. Please use sudo or log in as the root user."
    exit 1
fi

<span class="hljs-comment"># Define Bitcoin Core version</span>
<span class="hljs-attr">BITCOIN_VERSION</span>=<span class="hljs-string">"25.0"</span>
<span class="hljs-attr">BITCOIN_DIST</span>=<span class="hljs-string">"bitcoin-${BITCOIN_VERSION}-x86_64-linux-gnu.tar.gz"</span>


<span class="hljs-comment"># Prompt user for RPC credentials</span>
read -p "Enter your RPC username: " rpcuser
read -s -p "Enter your RPC password: " rpcpassword
echo

<span class="hljs-comment"># Ask user if they want to enable external RPC access</span>
read -p "Do you want to enable external RPC access? (yes/no): " enable_rpc

<span class="hljs-attr">rpcallowip</span>=<span class="hljs-string">"127.0.0.1"</span> <span class="hljs-comment"># Default to localhost</span>

if <span class="hljs-section">[[ $enable_rpc == "yes" ]]</span><span class="hljs-comment">; then</span>
    <span class="hljs-attr">rpcallowip</span>=<span class="hljs-string">"0.0.0.0/0"</span> <span class="hljs-comment"># Allow all IPs (be cautious with this setting)</span>
fi

<span class="hljs-comment"># Update system</span>
sudo apt update

<span class="hljs-comment"># Install dependencies</span>
sudo apt install -y build-essential libtool autotools-dev automake pkg-config bsdmainutils python3
sudo apt install -y libevent-dev libboost-system-dev libboost-filesystem-dev libboost-test-dev libboost-thread-dev

<span class="hljs-comment"># Download Bitcoin Core and signatures</span>
wget https://bitcoin.org/bin/bitcoin-core-${BITCOIN_VERSION}/${BITCOIN_DIST}

<span class="hljs-comment"># Install Bitcoin Core</span>
tar -xzvf ${BITCOIN_DIST}
sudo install -m 0755 -o root -g root -t /usr/local/bin bitcoin-${BITCOIN_VERSION}/bin/*

<span class="hljs-comment"># Create Bitcoin data directory</span>
mkdir -p ~/.bitcoin



<span class="hljs-comment"># Create bitcoin.conf file</span>
cat >~/.bitcoin/bitcoin.conf &#x3C;&#x3C;EOF
<span class="hljs-attr">server</span>=<span class="hljs-number">1</span>
<span class="hljs-attr">rpcuser</span>=<span class="hljs-variable">$rpcuser</span>
<span class="hljs-attr">rpcpassword</span>=<span class="hljs-variable">$rpcpassword</span>
<span class="hljs-attr">rpcallowip</span>=<span class="hljs-variable">$rpcallowip</span>
<span class="hljs-attr">rpcbind</span>=<span class="hljs-number">0.0</span>.<span class="hljs-number">0.0</span>
<span class="hljs-attr">rpcport</span>=<span class="hljs-number">8332</span>
<span class="hljs-attr">listen</span>=<span class="hljs-number">1</span>
<span class="hljs-attr">daemon</span>=<span class="hljs-number">1</span>
<span class="hljs-attr">txindex</span>=<span class="hljs-number">1</span>
EOF


<span class="hljs-comment"># Create the systemd service file for bitcoind</span>
cat >/etc/systemd/system/bitcoind.service &#x3C;&#x3C;EOF
<span class="hljs-section">[Unit]</span>
<span class="hljs-attr">Description</span>=Bitcoin daemon
<span class="hljs-attr">After</span>=network.target

<span class="hljs-section">[Service]</span>
<span class="hljs-attr">ExecStart</span>=/usr/local/bin/bitcoind -daemon -conf=/root/.bitcoin/bitcoin.conf -pid=/root/.bitcoin/bitcoind.pid
<span class="hljs-attr">User</span>=root
<span class="hljs-attr">Group</span>=root
<span class="hljs-attr">Type</span>=forking
<span class="hljs-attr">PIDFile</span>=/root/.bitcoin/bitcoind.pid
<span class="hljs-attr">Restart</span>=<span class="hljs-literal">on</span>-failure
<span class="hljs-attr">RestartSec</span>=<span class="hljs-number">5</span>
<span class="hljs-attr">KillMode</span>=process

<span class="hljs-section">[Install]</span>
<span class="hljs-attr">WantedBy</span>=multi-user.target
EOF


<span class="hljs-comment"># Reload the systemd manager configuration</span>
systemctl daemon-reload

<span class="hljs-comment"># Enable the bitcoind service to start on boot</span>
systemctl enable bitcoind.service

<span class="hljs-comment"># Start the bitcoind service now</span>
systemctl start bitcoind.service

echo "Bitcoin Core is now installed and running."
</code></pre>]]></content:encoded>
            <author>daniel-32@newsletter.paragraph.com (Daniel )</author>
        </item>
        <item>
            <title><![CDATA[如何在EVM批量打各种*RC20]]></title>
            <link>https://paragraph.com/@daniel-32/evm-rc20</link>
            <guid>YoY1vfxj4ZvAggBYlZmJ</guid>
            <pubDate>Thu, 16 Nov 2023 16:28:51 GMT</pubDate>
            <description><![CDATA[简单来说，evm上的各种*20都是发送tx_data来打“铭文”虽然有种返璞归真的感觉，但是真的能炒上去。毕竟啥共识都是共识。至于交易只能靠检索器（也就是纯纯的中心化）检索器说是你的就是你的这就很离谱了，这也是为啥我总不喜欢这种玩意，去中心化精神完全抛弃了。 但是有人玩就是好的。刚好朋友要打，我就顺手写了个脚本，这个脚本比目前市面上的要快，且可以调整手续费 1.为什么说它快： 因为是本地拼接消息，可以批量生成一堆消息，在同一个高度全部上链。也就是说别人脚本在一个个的等的时候，你已经在50个同时等上链了。2.调整手续费，现在evm基本上都是eip1559，需要给节点小费，手动制定小费，会更快上链。具体怎么操作，见下面讲解准备工作：python环境，根据电脑不同自己google。只要能跑起来hello world即可。个人rpc推荐 alchemy如何操作：将下面脚本导入到你的代码编译器中，修改下面内容private_key = "填写你的钱包私钥" recipient_address = "填写你的接受钱包地址" mainnet: '填写你的rpc链接', data = '填写tx...]]></description>
            <content:encoded><![CDATA[<p>简单来说，evm上的各种*20都是发送tx_data来打“铭文”虽然有种返璞归真的感觉，但是真的能炒上去。毕竟啥共识都是共识。至于交易只能靠检索器（也就是纯纯的中心化）检索器说是你的就是你的这就很离谱了，这也是为啥我总不喜欢这种玩意，去中心化精神完全抛弃了。</p><p>但是有人玩就是好的。刚好朋友要打，我就顺手写了个脚本，<strong>这个脚本比目前市面上的要快，且可以调整手续费</strong></p><p>1.为什么说它快： 因为是本地拼接消息，可以批量生成一堆消息，在同一个高度全部上链。也就是说别人脚本在一个个的等的时候，你已经在50个同时等上链了。2.调整手续费，现在evm基本上都是eip1559，需要给节点小费，手动制定小费，会更快上链。具体怎么操作，见下面讲解</p><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">准备工作：</h3><p>python环境，根据电脑不同自己google。只要能跑起来hello world即可。<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://dashboard.alchemy.com/">个人rpc推荐</a> alchemy</p><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">如何操作：</h3><p>将下面脚本导入到你的代码编译器中，修改下面内容</p><pre data-type="codeBlock" text="private_key = &quot;填写你的钱包私钥&quot;
recipient_address = &quot;填写你的接受钱包地址&quot;
mainnet: &apos;填写你的rpc链接&apos;,
data = &apos;填写tx里面的内容&apos; （下面的代码就是打pols的）
"><code><span class="hljs-attr">private_key</span> = <span class="hljs-string">"填写你的钱包私钥"</span>
<span class="hljs-attr">recipient_address</span> = <span class="hljs-string">"填写你的接受钱包地址"</span>
mainnet: '填写你的rpc链接',
<span class="hljs-attr">data</span> = <span class="hljs-string">'填写tx里面的内容'</span> （下面的代码就是打pols的）
</code></pre><p>重点来了，如何比别人快 send_transaction(1, rpc_map.get(&quot;mainnet&quot;), data, is_wait=True, priority_fee=100)</p><p>1修改成你想要的总数量 is_wait 如果是True就是等待上一个消息上链之后才发送下一个，False就是不等待疯狂冲 （问题来了，如果是自建的rpc那么就没限制，可以写false，如果是alchemy rpc这种一般会有请求限制，也就是最好用True） priority_fee就是小费给多少，去浏览器看，比如polygon的浏览器</p><div data-type="embedly" src="https://polygonscan.com/gastracker" data="{&quot;provider_url&quot;:&quot;https://polygonscan.com&quot;,&quot;description&quot;:&quot;Gas Snapshot Price at 10/25/2025 4:56:45 PM UTC - 30.030 Gwei | POLY Gas Tracker | PolygonScan&quot;,&quot;title&quot;:&quot;30.030 Gwei | POLY Gas Tracker | PolygonScan&quot;,&quot;author_name&quot;:&quot;PolygonScan.com&quot;,&quot;url&quot;:&quot;https://polygonscan.com/gastracker&quot;,&quot;thumbnail_url&quot;:&quot;https://storage.googleapis.com/papyrus_images/e7d80bcbfe0af34ae041556432489ba14e43d44c125a20c734d83b3ad26531a4.jpg&quot;,&quot;thumbnail_width&quot;:288,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;Polygon (POL) Blockchain Explorer&quot;,&quot;type&quot;:&quot;link&quot;,&quot;thumbnail_height&quot;:288,&quot;image&quot;:{&quot;img&quot;:{&quot;width&quot;:288,&quot;height&quot;:288,&quot;src&quot;:&quot;https://storage.googleapis.com/papyrus_images/e7d80bcbfe0af34ae041556432489ba14e43d44c125a20c734d83b3ad26531a4.jpg&quot;}}}" format="small"><link rel="preload" as="image" href="https://storage.googleapis.com/papyrus_images/e7d80bcbfe0af34ae041556432489ba14e43d44c125a20c734d83b3ad26531a4.jpg"/><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://polygonscan.com/gastracker" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>30.030 Gwei | POLY Gas Tracker | PolygonScan</h2><p>Gas Snapshot Price at 10/25/2025 4:56:45 PM UTC - 30.030 Gwei | POLY Gas Tracker | PolygonScan</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://polygonscan.com</span></div><img src="https://storage.googleapis.com/papyrus_images/e7d80bcbfe0af34ae041556432489ba14e43d44c125a20c734d83b3ad26531a4.jpg"/></div></a></div></div><p>显示：Priority: 350,那你写360基本上就是秒上了。<strong>注意：因为gas一直在变动，输入一个gas的时候，建议一次少打一点比如现在是350，我写360，总共100张，一会会就打完了。然后再看看gas是多少，再来调整（能省不少钱呢）小费不是总GAS！！！ 是Priority！！！注意看下图！！！Priority是104.6 这个时候你输入110，基本上秒打。</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c736633026e76d14e6054e21130f9310781a88143524dbc8af51314a28882618.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><strong>脚本完全代码放到下面，希望大家冲的时候冷静，不要浪费gas。哈哈</strong></p><pre data-type="codeBlock" text="from web3 import Web3, HTTPProvider, Account
from web3.middleware import geth_poa_middleware

private_key = &quot;填写你的钱包私钥&quot;
recipient_address = &quot;填写你的接受钱包地址&quot;
data = &apos;data:,{&quot;p&quot;:&quot;prc-20&quot;,&quot;op&quot;:&quot;mint&quot;,&quot;tick&quot;:&quot;pols&quot;,&quot;amt&quot;:&quot;100000000&quot;}&apos;
rpc_map = {
    &apos;mainnet&apos;: &apos;填写你的rpc链接&apos;,
}


def get_transaction_eip1559(rpc_url, text_data, priority_fee):
    web3 = Web3(HTTPProvider(rpc_url))
    web3.middleware_onion.inject(geth_poa_middleware, layer=0)  # Inject POA middleware
    # Check if connected to Ethereum network
    if not web3.isConnected():
        raise Exception(&quot;Not connected to Ethereum network&quot;)
    # Set up the sender&apos;s account
    sender_account = Account.from_key(private_key)
    sender_address = sender_account.address

    # Transaction details
    value = web3.toWei(0, &apos;ether&apos;)
    # Get the nonce for the sender&apos;s account
    nonce = web3.eth.getTransactionCount(sender_address, &apos;pending&apos;)
    base_fee = web3.eth.get_block(&apos;latest&apos;)[&apos;baseFeePerGas&apos;]

    # Transaction details
    max_priority_fee_per_gas = web3.toWei(priority_fee, &apos;gwei&apos;)  # Tip for the miner, adjust as needed
    max_fee_per_gas = base_fee + max_priority_fee_per_gas
    # EIP-1559 transaction parameters

    # Convert data to hex and add as data to the transaction
    data_hex = web3.toHex(text=text_data)

    # Estimate gas limit for the transaction
    gas_estimate = web3.eth.estimate_gas({
        &apos;to&apos;: recipient_address,
        &apos;value&apos;: value,
        &apos;from&apos;: sender_address,
        &apos;data&apos;: data_hex
    })

    # Create the transaction dictionary
    transaction = {
        &apos;type&apos;: &apos;0x2&apos;,  # Indicates an EIP-1559 transaction
        &apos;chainId&apos;: web3.eth.chain_id,
        &apos;nonce&apos;: nonce,
        &apos;maxPriorityFeePerGas&apos;: max_priority_fee_per_gas,
        &apos;maxFeePerGas&apos;: max_fee_per_gas,
        &apos;gas&apos;: gas_estimate,
        &apos;to&apos;: recipient_address,
        &apos;value&apos;: value,
        &apos;data&apos;: data_hex
    }
    print(f&quot;Transaction: {transaction}&quot;)
    return transaction, web3, private_key, nonce


def signed_send(transaction, web3, private_key, is_wait=True):
    # Sign the transaction
    signed_tx = web3.eth.account.sign_transaction(transaction, private_key)
    # Send the transaction
    tx_hash = web3.eth.sendRawTransaction(signed_tx.rawTransaction)
    # Get the transaction hash
    print(f&quot;Transaction hash: {tx_hash.hex()}&quot;)
    # Wait for the transaction receipt (optional)
    if is_wait:
        tx_receipt = web3.eth.waitForTransactionReceipt(tx_hash)
        print(f&quot;Transaction receipt: {tx_receipt}&quot;)
        print(f&quot;Transaction status: {tx_receipt[&apos;status&apos;]}&quot;)


def send_transaction(number, rpc, test_data, is_wait=True, priority_fee=400):
    transaction, web3, private_key, nonce = get_transaction_eip1559(rpc, test_data, priority_fee)
    for i in range(number):
        transaction.update({&apos;nonce&apos;: nonce})
        signed_send(transaction, web3, private_key, is_wait)
        nonce = nonce + 1


if __name__ == &apos;__main__&apos;:
    send_transaction(1, rpc_map.get(&quot;mainnet&quot;), data, is_wait=True, priority_fee=100)
"><code>from web3 import Web3, HTTPProvider, Account
from web3.middleware import geth_poa_middleware

<span class="hljs-attr">private_key</span> = <span class="hljs-string">"填写你的钱包私钥"</span>
<span class="hljs-attr">recipient_address</span> = <span class="hljs-string">"填写你的接受钱包地址"</span>
<span class="hljs-attr">data</span> = <span class="hljs-string">'data:,{"p":"prc-20","op":"mint","tick":"pols","amt":"100000000"}'</span>
<span class="hljs-attr">rpc_map</span> = {
    'mainnet': '填写你的rpc链接',
}


def get_transaction_eip1559(rpc_url, text_data, priority_fee):
    <span class="hljs-attr">web3</span> = Web3(HTTPProvider(rpc_url))
    web3.middleware_onion.inject(geth_poa_middleware, <span class="hljs-attr">layer</span>=<span class="hljs-number">0</span>)  <span class="hljs-comment"># Inject POA middleware</span>
    <span class="hljs-comment"># Check if connected to Ethereum network</span>
    if not web3.isConnected():
        raise Exception("Not connected to Ethereum network")
    <span class="hljs-comment"># Set up the sender's account</span>
    <span class="hljs-attr">sender_account</span> = Account.from_key(private_key)
    <span class="hljs-attr">sender_address</span> = sender_account.address

    <span class="hljs-comment"># Transaction details</span>
    <span class="hljs-attr">value</span> = web3.toWei(<span class="hljs-number">0</span>, <span class="hljs-string">'ether'</span>)
    <span class="hljs-comment"># Get the nonce for the sender's account</span>
    <span class="hljs-attr">nonce</span> = web3.eth.getTransactionCount(sender_address, <span class="hljs-string">'pending'</span>)
    <span class="hljs-attr">base_fee</span> = web3.eth.get_block(<span class="hljs-string">'latest'</span>)[<span class="hljs-string">'baseFeePerGas'</span>]

    <span class="hljs-comment"># Transaction details</span>
    <span class="hljs-attr">max_priority_fee_per_gas</span> = web3.toWei(priority_fee, <span class="hljs-string">'gwei'</span>)  <span class="hljs-comment"># Tip for the miner, adjust as needed</span>
    <span class="hljs-attr">max_fee_per_gas</span> = base_fee + max_priority_fee_per_gas
    <span class="hljs-comment"># EIP-1559 transaction parameters</span>

    <span class="hljs-comment"># Convert data to hex and add as data to the transaction</span>
    <span class="hljs-attr">data_hex</span> = web3.toHex(text=text_data)

    <span class="hljs-comment"># Estimate gas limit for the transaction</span>
    <span class="hljs-attr">gas_estimate</span> = web3.eth.estimate_gas({
        'to': recipient_address,
        'value': value,
        'from': sender_address,
        'data': data_hex
    })

    <span class="hljs-comment"># Create the transaction dictionary</span>
    <span class="hljs-attr">transaction</span> = {
        'type': '0x2',  <span class="hljs-comment"># Indicates an EIP-1559 transaction</span>
        'chainId': web3.eth.chain_id,
        'nonce': nonce,
        'maxPriorityFeePerGas': max_priority_fee_per_gas,
        'maxFeePerGas': max_fee_per_gas,
        'gas': gas_estimate,
        'to': recipient_address,
        'value': value,
        'data': data_hex
    }
    print(f"Transaction: {transaction}")
    return transaction, web3, private_key, nonce


def signed_send(transaction, web3, private_key, <span class="hljs-attr">is_wait</span>=<span class="hljs-literal">True</span>):
    <span class="hljs-comment"># Sign the transaction</span>
    <span class="hljs-attr">signed_tx</span> = web3.eth.account.sign_transaction(transaction, private_key)
    <span class="hljs-comment"># Send the transaction</span>
    <span class="hljs-attr">tx_hash</span> = web3.eth.sendRawTransaction(signed_tx.rawTransaction)
    <span class="hljs-comment"># Get the transaction hash</span>
    print(f"Transaction hash: {tx_hash.hex()}")
    <span class="hljs-comment"># Wait for the transaction receipt (optional)</span>
    if is_wait:
        <span class="hljs-attr">tx_receipt</span> = web3.eth.waitForTransactionReceipt(tx_hash)
        print(f"Transaction receipt: {tx_receipt}")
        print(f"Transaction status: {tx_receipt<span class="hljs-section">['status']</span>}")


def send_transaction(number, rpc, test_data, <span class="hljs-attr">is_wait</span>=<span class="hljs-literal">True</span>, priority_fee=<span class="hljs-number">400</span>):
    transaction, web3, private_key, <span class="hljs-attr">nonce</span> = get_transaction_eip1559(rpc, test_data, priority_fee)
    for i in range(number):
        transaction.update({'nonce': nonce})
        signed_send(transaction, web3, private_key, is_wait)
        <span class="hljs-attr">nonce</span> = nonce + <span class="hljs-number">1</span>


if <span class="hljs-attr">__name__</span> == <span class="hljs-string">'__main__'</span>:
    send_transaction(1, rpc_map.get("mainnet"), data, <span class="hljs-attr">is_wait</span>=<span class="hljs-literal">True</span>, priority_fee=<span class="hljs-number">100</span>)
</code></pre>]]></content:encoded>
            <author>daniel-32@newsletter.paragraph.com (Daniel )</author>
        </item>
        <item>
            <title><![CDATA[一文弄懂并且实操ETH 质押挖矿]]></title>
            <link>https://paragraph.com/@daniel-32/eth</link>
            <guid>2nTLTKZIPXNUyTTYXeFt</guid>
            <pubDate>Wed, 19 Apr 2023 21:38:40 GMT</pubDate>
            <description><![CDATA[相信前段时间的ETH上海升级大家都知道了上海升级意味着之前质押POS的代币可以有序的推出质押，恢复流动性。 再也不用担心质押的ETH强行锁仓了。 那么问题来了，怎么质押手上的Eth来获取收益呢？ 目前阶段总共有4种质押方式，下面会介绍理论和实际操作。个人质押个人质押是指用户直接参与ETH2网络，将至少32个ETH币作为质押，成为一个验证者。这种方式需要验证者具备一定的技术能力，以搭建和维护自己的节点。优点是，质押者可以享受全部的质押收益，无需支付任何中介费用。然而，个人质押存在一定风险，如节点不稳定、离线等问题可能导致部分质押的ETH被扣除。 单独质押需要计算机基础知识和基础运维能力，小白不推荐，感兴趣的可以在测试网测试一下。整体流程之前写过一遍文章，中间可能有需要更新的地方（未测试）。建议按照官方的流程来一遍。 https://mirror.xyz/0x6EaD271a45ACc328Af22b369870509471a46f59D/AWxHoc04oCuM_JxOy_ZVSoaTHYF2PKKWRgF2YggE9nU https://goerli.launchpad.ethe...]]></description>
            <content:encoded><![CDATA[<h3 id="h-eth" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">相信前段时间的ETH上海升级大家都知道了</h3><p>上海升级意味着之前质押POS的代币可以有序的推出质押，恢复流动性。 再也不用担心质押的ETH强行锁仓了。 那么问题来了，怎么质押手上的Eth来获取收益呢？</p><p>目前阶段总共有4种质押方式，下面会介绍理论和实际操作。</p><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">个人质押</h3><p>个人质押是指用户直接参与ETH2网络，将至少32个ETH币作为质押，成为一个验证者。这种方式需要验证者具备一定的技术能力，以搭建和维护自己的节点。优点是，质押者可以享受全部的质押收益，无需支付任何中介费用。然而，个人质押存在一定风险，如节点不稳定、离线等问题可能导致部分质押的ETH被扣除。</p><p>单独质押需要计算机基础知识和基础运维能力，小白不推荐，感兴趣的可以在测试网测试一下。整体流程之前写过一遍文章，中间可能有需要更新的地方（未测试）。建议按照官方的流程来一遍。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/0x6EaD271a45ACc328Af22b369870509471a46f59D/AWxHoc04oCuM_JxOy_ZVSoaTHYF2PKKWRgF2YggE9nU">https://mirror.xyz/0x6EaD271a45ACc328Af22b369870509471a46f59D/AWxHoc04oCuM_JxOy_ZVSoaTHYF2PKKWRgF2YggE9nU</a></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://goerli.launchpad.ethereum.org/en/">https://goerli.launchpad.ethereum.org/en/</a></p><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">质押服务</h3><p>质押服务是一种将质押任务交由第三方服务商来完成的方式。这种服务通常为那些缺乏技术能力或不愿承担个人质押风险的用户提供便利。质押服务商会收取一定比例的费用作为回报，但可以帮助用户解决节点搭建、维护以及风险管理等问题。选择质押服务时，务必注意服务商的信誉、安全性和费用等因素。</p><p>简单来讲就是你有32个币，可以组成一个验证节点，但是不会技术，不想承担运维风险。 私钥还是掌握在自己的手上，可以随时申请退出质押，你的私钥没有丢失的情况下，不会丢币。</p><p>体验了下blox staking，傻瓜式操作，需要链接aws账户，然后自动搭建服务。一键安装各种东西加监控，并且代码是开源的。其他的并未体验，感兴趣的可以去eth官方查看。</p><div data-type="embedly" src="https://ethereum.org/zh/staking/saas/" data="{&quot;provider_url&quot;:&quot;https://ethereum.org&quot;,&quot;description&quot;:&quot;简要介绍如何开始以太币联合质押&quot;,&quot;title&quot;:&quot;质押即服务 | ethereum.org&quot;,&quot;mean_alpha&quot;:73.5,&quot;thumbnail_width&quot;:800,&quot;url&quot;:&quot;https://ethereum.org/zh/staking/saas/&quot;,&quot;thumbnail_url&quot;:&quot;https://storage.googleapis.com/papyrus_images/8bfea4e8927194ac6e6eca911ddf381d529a9e7f3c9e59c4f47b3b273ee7842e.png&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;ethereum.org&quot;,&quot;type&quot;:&quot;link&quot;,&quot;thumbnail_height&quot;:605,&quot;image&quot;:{&quot;img&quot;:{&quot;width&quot;:800,&quot;height&quot;:605,&quot;src&quot;:&quot;https://storage.googleapis.com/papyrus_images/8bfea4e8927194ac6e6eca911ddf381d529a9e7f3c9e59c4f47b3b273ee7842e.png&quot;}}}" format="small"><link rel="preload" as="image" href="https://storage.googleapis.com/papyrus_images/8bfea4e8927194ac6e6eca911ddf381d529a9e7f3c9e59c4f47b3b273ee7842e.png"/><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://ethereum.org/zh/staking/saas/" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>质押即服务 | ethereum.org</h2><p>简要介绍如何开始以太币联合质押</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://ethereum.org</span></div><img src="https://storage.googleapis.com/papyrus_images/8bfea4e8927194ac6e6eca911ddf381d529a9e7f3c9e59c4f47b3b273ee7842e.png"/></div></a></div></div><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.bloxstaking.com/">https://www.bloxstaking.com/</a></p><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">联合质押</h3><p>联合质押是一种合作模式，多个用户共同质押ETH，共享收益和风险。这种方式适合那些手头不足32个ETH或希望分散风险的用户。联合质押可以通过智能合约或质押服务商进行操作。参与者需了解合约细则或服务商条款，确保自己的权益受到保障。</p><p>简单来说就是你没有足够多的eth，只能加入大池子中，让服务商帮你质押，然后在分红。例如Lido,rocketpool,</p><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">交易所质押</h3><p>交易所质押是在支持ETH2质押的交易所上，将用户的ETH委托给交易所进行质押。这种方式操作简便，无需搭建节点，用户只需将ETH存入交易所并选择质押服务。然而，交易所质押也存在一定风险，如交易所安全问题、质押收益不透明等。因此，选择交易所时，务必关注其信誉、安全性和收益分配政策。</p>]]></content:encoded>
            <author>daniel-32@newsletter.paragraph.com (Daniel )</author>
        </item>
        <item>
            <title><![CDATA[如何用ChatGPT写一个OKX抢开盘脚本]]></title>
            <link>https://paragraph.com/@daniel-32/chatgpt-okx</link>
            <guid>AzmeRubrvEzmm5qIQ8z8</guid>
            <pubDate>Wed, 08 Mar 2023 03:33:24 GMT</pubDate>
            <description><![CDATA[本文所有代码全部都是chatgpt写的。 前两天留言问大家想要什么脚本，看到了有OKX开盘的，觉得这个不错 本文主要是教大家怎么描述需求让AI写代码～ 代码块上加粗部分都是我的对话语句，代码文件全部chatgpt写的。 research this python sdk https://github.com/coinrising/okex-api-v5 Assist me in writing Python code that calls the OKX API and utilizes its SDK.from okex.account_api import AccountAPI from okex.market_data_api import MarketDataAPI from okex.trade_api import TradeAPI from okex.const import * # Set up authentication credentials api_key = 'YOUR_API_KEY' secret_key = 'YOUR_SECRET_KEY' pas...]]></description>
            <content:encoded><![CDATA[<p>本文所有代码全部都是chatgpt写的。 前两天留言问大家想要什么脚本，看到了有OKX开盘的，觉得这个不错</p><p>本文主要是教大家怎么描述需求让AI写代码～ 代码块上加粗部分都是我的对话语句，代码文件全部chatgpt写的。</p><p><strong>research this python sdk </strong><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/coinrising/okex-api-v5"><strong>https://github.com/coinrising/okex-api-v5</strong></a><strong> Assist me in writing Python code that calls the OKX API and utilizes its SDK.</strong></p><pre data-type="codeBlock" text="from okex.account_api import AccountAPI
from okex.market_data_api import MarketDataAPI
from okex.trade_api import TradeAPI
from okex.const import *

# Set up authentication credentials
api_key = &apos;YOUR_API_KEY&apos;
secret_key = &apos;YOUR_SECRET_KEY&apos;
passphrase = &apos;YOUR_PASSPHRASE&apos;

# Create API clients
account_client = AccountAPI(api_key, secret_key, passphrase, True)
trade_client = TradeAPI(api_key, secret_key, passphrase, True)
market_data_client = MarketDataAPI()

# Get the latest market price of BTC
response = market_data_client.get_ticker(&apos;BTC-USDT&apos;)
latest_price = response[&apos;last&apos;]
print(f&quot;The latest price of BTC is {latest_price} USDT&quot;)
"><code>from okex.account_api import AccountAPI
from okex.market_data_api import MarketDataAPI
from okex.trade_api import TradeAPI
from okex.const import *

<span class="hljs-comment"># Set up authentication credentials</span>
<span class="hljs-attr">api_key</span> = <span class="hljs-string">'YOUR_API_KEY'</span>
<span class="hljs-attr">secret_key</span> = <span class="hljs-string">'YOUR_SECRET_KEY'</span>
<span class="hljs-attr">passphrase</span> = <span class="hljs-string">'YOUR_PASSPHRASE'</span>

<span class="hljs-comment"># Create API clients</span>
<span class="hljs-attr">account_client</span> = AccountAPI(api_key, secret_key, passphrase, <span class="hljs-literal">True</span>)
<span class="hljs-attr">trade_client</span> = TradeAPI(api_key, secret_key, passphrase, <span class="hljs-literal">True</span>)
<span class="hljs-attr">market_data_client</span> = MarketDataAPI()

<span class="hljs-comment"># Get the latest market price of BTC</span>
<span class="hljs-attr">response</span> = market_data_client.get_ticker(<span class="hljs-string">'BTC-USDT'</span>)
<span class="hljs-attr">latest_price</span> = response[<span class="hljs-string">'last'</span>]
print(f"The latest price of BTC is {latest_price} USDT")
</code></pre><p>首先让他学习了okx的文档，这里已经识别出来怎么调用okex的Api来进行市场操作,但是我们的需求是抢开盘，那么告诉他。</p><p><strong>I want to monitor a token for its listing and buy it as soon as it is listed.</strong></p><pre data-type="codeBlock" text="import schedule
import time
from okex.trade_api import TradeAPI
from okex.account_api import AccountAPI
from okex.const import *

# Set up authentication credentials
api_key = &apos;YOUR_API_KEY&apos;
secret_key = &apos;YOUR_SECRET_KEY&apos;
passphrase = &apos;YOUR_PASSPHRASE&apos;

# Set up trade parameters
symbol = &apos;TOKEN-USDT&apos;  # Replace with your desired token symbol
amount = 100  # Replace with your desired order amount in USDT

# Create API clients
account_client = AccountAPI(api_key, secret_key, passphrase, True)
trade_client = TradeAPI(api_key, secret_key, passphrase, True)

def buy_token():
    try:
        # Check if the token is listed
        response = trade_client.get_specific_public_symbol(symbol)
        if response[&apos;state&apos;] == &apos;live&apos;:
            # If the token is listed, place a market order to buy it
            response = trade_client.place_market_order(symbol, SIDE_BUY, funds=amount)
            print(response)
    except Exception as e:
        print(f&quot;An error occurred: {e}&quot;)

# Schedule the buy_token function to be called every minute
schedule.every(1).minutes.do(buy_token)

# Run the scheduler loop
while True:
    schedule.run_pending()
    time.sleep(1)
"><code><span class="hljs-keyword">import</span> schedule
<span class="hljs-keyword">import</span> time
<span class="hljs-keyword">from</span> okex.trade_api <span class="hljs-keyword">import</span> TradeAPI
<span class="hljs-keyword">from</span> okex.account_api <span class="hljs-keyword">import</span> AccountAPI
<span class="hljs-keyword">from</span> okex.const <span class="hljs-keyword">import</span> *

<span class="hljs-comment"># Set up authentication credentials</span>
api_key = <span class="hljs-string">'YOUR_API_KEY'</span>
secret_key = <span class="hljs-string">'YOUR_SECRET_KEY'</span>
passphrase = <span class="hljs-string">'YOUR_PASSPHRASE'</span>

<span class="hljs-comment"># Set up trade parameters</span>
symbol = <span class="hljs-string">'TOKEN-USDT'</span>  <span class="hljs-comment"># Replace with your desired token symbol</span>
amount = <span class="hljs-number">100</span>  <span class="hljs-comment"># Replace with your desired order amount in USDT</span>

<span class="hljs-comment"># Create API clients</span>
account_client = AccountAPI(api_key, secret_key, passphrase, <span class="hljs-literal">True</span>)
trade_client = TradeAPI(api_key, secret_key, passphrase, <span class="hljs-literal">True</span>)

<span class="hljs-keyword">def</span> <span class="hljs-title function_">buy_token</span>():
    <span class="hljs-keyword">try</span>:
        <span class="hljs-comment"># Check if the token is listed</span>
        response = trade_client.get_specific_public_symbol(symbol)
        <span class="hljs-keyword">if</span> response[<span class="hljs-string">'state'</span>] == <span class="hljs-string">'live'</span>:
            <span class="hljs-comment"># If the token is listed, place a market order to buy it</span>
            response = trade_client.place_market_order(symbol, SIDE_BUY, funds=amount)
            <span class="hljs-built_in">print</span>(response)
    <span class="hljs-keyword">except</span> Exception <span class="hljs-keyword">as</span> e:
        <span class="hljs-built_in">print</span>(<span class="hljs-string">f"An error occurred: <span class="hljs-subst">{e}</span>"</span>)

<span class="hljs-comment"># Schedule the buy_token function to be called every minute</span>
schedule.every(<span class="hljs-number">1</span>).minutes.do(buy_token)

<span class="hljs-comment"># Run the scheduler loop</span>
<span class="hljs-keyword">while</span> <span class="hljs-literal">True</span>:
    schedule.run_pending()
    time.sleep(<span class="hljs-number">1</span>)
</code></pre><p>这里看到已经在监控代币是否上线了，但是购买的时候间隔太长，并且一直循环购买，我想要在过了某一时间段之后疯狂请求购买，并且都变成参数可调。</p><p><strong>Modify to scan the token online at millisecond level after reaching a certain time, and purchase it immediately once it is available.Do not use schedule.every().day, directly start the program when judging that the time is greater than something.</strong></p><pre data-type="codeBlock" text="import time
import argparse
from datetime import datetime
from okex.trade_api import TradeAPI
from okex.account_api import AccountAPI
from okex.const import *

# Set up authentication credentials
api_key = &apos;YOUR_API_KEY&apos;
secret_key = &apos;YOUR_SECRET_KEY&apos;
passphrase = &apos;YOUR_PASSPHRASE&apos;

# Set up trade parameters
symbol = &apos;TOKEN-USDT&apos;  # Replace with your desired token symbol
amount = 100  # Replace with your desired order amount in USDT

# Create API clients
account_client = AccountAPI(api_key, secret_key, passphrase, True)
trade_client = TradeAPI(api_key, secret_key, passphrase, True)

def buy_token():
    try:
        # Check if the token is listed
        response = trade_client.get_specific_public_symbol(symbol)
        if response[&apos;state&apos;] == &apos;live&apos;:
            # If the token is listed, place a market order to buy it
            response = trade_client.place_market_order(symbol, SIDE_BUY, funds=amount)
            print(response)
            return True
    except Exception as e:
        print(f&quot;An error occurred: {e}&quot;)
        return False

if __name__ == &apos;__main__&apos;:
    # Parse command-line arguments
    parser = argparse.ArgumentParser(description=&apos;Monitor token listing and buy immediately&apos;)
    parser.add_argument(&apos;year&apos;, type=int, help=&apos;Listing year&apos;)
    parser.add_argument(&apos;month&apos;, type=int, help=&apos;Listing month&apos;)
    parser.add_argument(&apos;day&apos;, type=int, help=&apos;Listing day&apos;)
    parser.add_argument(&apos;hour&apos;, type=int, help=&apos;Listing hour&apos;)
    parser.add_argument(&apos;minute&apos;, type=int, help=&apos;Listing minute&apos;)
    parser.add_argument(&apos;second&apos;, type=int, help=&apos;Listing second&apos;)
    args = parser.parse_args()

    # Convert command-line arguments to datetime object
    listing_time = datetime(args.year, args.month, args.day, args.hour, args.minute, args.second)

    # Monitor the token listing
    while datetime.now() &lt; listing_time:
        time.sleep(1)

    while not buy_token():
        time.sleep(0.1)
"><code><span class="hljs-keyword">import</span> <span class="hljs-title">time</span>
<span class="hljs-title"><span class="hljs-keyword">import</span></span> <span class="hljs-title">argparse</span>
<span class="hljs-title"><span class="hljs-keyword">from</span></span> <span class="hljs-title">datetime</span> <span class="hljs-title"><span class="hljs-keyword">import</span></span> <span class="hljs-title">datetime</span>
<span class="hljs-title"><span class="hljs-keyword">from</span></span> <span class="hljs-title">okex</span>.<span class="hljs-title">trade_api</span> <span class="hljs-title"><span class="hljs-keyword">import</span></span> <span class="hljs-title">TradeAPI</span>
<span class="hljs-title"><span class="hljs-keyword">from</span></span> <span class="hljs-title">okex</span>.<span class="hljs-title">account_api</span> <span class="hljs-title"><span class="hljs-keyword">import</span></span> <span class="hljs-title">AccountAPI</span>
<span class="hljs-title"><span class="hljs-keyword">from</span></span> <span class="hljs-title">okex</span>.<span class="hljs-title">const</span> <span class="hljs-title"><span class="hljs-keyword">import</span></span> <span class="hljs-operator">*</span>

# <span class="hljs-title">Set</span> <span class="hljs-title">up</span> <span class="hljs-title">authentication</span> <span class="hljs-title">credentials</span>
<span class="hljs-title">api_key</span> <span class="hljs-operator">=</span> <span class="hljs-string">'YOUR_API_KEY'</span>
<span class="hljs-title">secret_key</span> <span class="hljs-operator">=</span> <span class="hljs-string">'YOUR_SECRET_KEY'</span>
<span class="hljs-title">passphrase</span> <span class="hljs-operator">=</span> <span class="hljs-string">'YOUR_PASSPHRASE'</span>

# <span class="hljs-title">Set</span> <span class="hljs-title">up</span> <span class="hljs-title">trade</span> <span class="hljs-title">parameters</span>
<span class="hljs-title">symbol</span> <span class="hljs-operator">=</span> <span class="hljs-string">'TOKEN-USDT'</span>  # <span class="hljs-title">Replace</span> <span class="hljs-title">with</span> <span class="hljs-title">your</span> <span class="hljs-title">desired</span> <span class="hljs-title">token</span> <span class="hljs-title">symbol</span>
<span class="hljs-title">amount</span> <span class="hljs-operator">=</span> 100  # <span class="hljs-title">Replace</span> <span class="hljs-title">with</span> <span class="hljs-title">your</span> <span class="hljs-title">desired</span> <span class="hljs-title">order</span> <span class="hljs-title">amount</span> <span class="hljs-title">in</span> <span class="hljs-title">USDT</span>

# <span class="hljs-title">Create</span> <span class="hljs-title">API</span> <span class="hljs-title">clients</span>
<span class="hljs-title">account_client</span> <span class="hljs-operator">=</span> <span class="hljs-title">AccountAPI</span>(<span class="hljs-title">api_key</span>, <span class="hljs-title">secret_key</span>, <span class="hljs-title">passphrase</span>, <span class="hljs-title">True</span>)
<span class="hljs-title">trade_client</span> <span class="hljs-operator">=</span> <span class="hljs-title">TradeAPI</span>(<span class="hljs-title">api_key</span>, <span class="hljs-title">secret_key</span>, <span class="hljs-title">passphrase</span>, <span class="hljs-title">True</span>)

<span class="hljs-title">def</span> <span class="hljs-title">buy_token</span>():
    <span class="hljs-title"><span class="hljs-keyword">try</span></span>:
        # <span class="hljs-title">Check</span> <span class="hljs-title"><span class="hljs-keyword">if</span></span> <span class="hljs-title">the</span> <span class="hljs-title">token</span> <span class="hljs-title"><span class="hljs-keyword">is</span></span> <span class="hljs-title">listed</span>
        <span class="hljs-title">response</span> <span class="hljs-operator">=</span> <span class="hljs-title">trade_client</span>.<span class="hljs-title">get_specific_public_symbol</span>(<span class="hljs-title">symbol</span>)
        <span class="hljs-title"><span class="hljs-keyword">if</span></span> <span class="hljs-title">response</span>[<span class="hljs-string">'state'</span>] <span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-string">'live'</span>:
            # <span class="hljs-title">If</span> <span class="hljs-title">the</span> <span class="hljs-title">token</span> <span class="hljs-title"><span class="hljs-keyword">is</span></span> <span class="hljs-title">listed</span>, <span class="hljs-title">place</span> <span class="hljs-title">a</span> <span class="hljs-title">market</span> <span class="hljs-title">order</span> <span class="hljs-title">to</span> <span class="hljs-title">buy</span> <span class="hljs-title">it</span>
            <span class="hljs-title">response</span> <span class="hljs-operator">=</span> <span class="hljs-title">trade_client</span>.<span class="hljs-title">place_market_order</span>(<span class="hljs-title">symbol</span>, <span class="hljs-title">SIDE_BUY</span>, <span class="hljs-title">funds</span><span class="hljs-operator">=</span><span class="hljs-title">amount</span>)
            <span class="hljs-title">print</span>(<span class="hljs-title">response</span>)
            <span class="hljs-title"><span class="hljs-keyword">return</span></span> <span class="hljs-title">True</span>
    <span class="hljs-title">except</span> <span class="hljs-title">Exception</span> <span class="hljs-title"><span class="hljs-keyword">as</span></span> <span class="hljs-title">e</span>:
        <span class="hljs-title">print</span>(<span class="hljs-title">f</span><span class="hljs-string">"An error occurred: {e}"</span>)
        <span class="hljs-title"><span class="hljs-keyword">return</span></span> <span class="hljs-title">False</span>

<span class="hljs-title"><span class="hljs-keyword">if</span></span> <span class="hljs-title">__name__</span> <span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-string">'__main__'</span>:
    # <span class="hljs-title">Parse</span> <span class="hljs-title">command</span><span class="hljs-operator">-</span><span class="hljs-title">line</span> <span class="hljs-title">arguments</span>
    <span class="hljs-title">parser</span> <span class="hljs-operator">=</span> <span class="hljs-title">argparse</span>.<span class="hljs-title">ArgumentParser</span>(<span class="hljs-title">description</span><span class="hljs-operator">=</span><span class="hljs-string">'Monitor token listing and buy immediately'</span>)
    <span class="hljs-title">parser</span>.<span class="hljs-title">add_argument</span>(<span class="hljs-string">'year'</span>, <span class="hljs-title"><span class="hljs-keyword">type</span></span><span class="hljs-operator">=</span><span class="hljs-title"><span class="hljs-keyword">int</span></span>, <span class="hljs-title">help</span><span class="hljs-operator">=</span><span class="hljs-string">'Listing year'</span>)
    <span class="hljs-title">parser</span>.<span class="hljs-title">add_argument</span>(<span class="hljs-string">'month'</span>, <span class="hljs-title"><span class="hljs-keyword">type</span></span><span class="hljs-operator">=</span><span class="hljs-title"><span class="hljs-keyword">int</span></span>, <span class="hljs-title">help</span><span class="hljs-operator">=</span><span class="hljs-string">'Listing month'</span>)
    <span class="hljs-title">parser</span>.<span class="hljs-title">add_argument</span>(<span class="hljs-string">'day'</span>, <span class="hljs-title"><span class="hljs-keyword">type</span></span><span class="hljs-operator">=</span><span class="hljs-title"><span class="hljs-keyword">int</span></span>, <span class="hljs-title">help</span><span class="hljs-operator">=</span><span class="hljs-string">'Listing day'</span>)
    <span class="hljs-title">parser</span>.<span class="hljs-title">add_argument</span>(<span class="hljs-string">'hour'</span>, <span class="hljs-title"><span class="hljs-keyword">type</span></span><span class="hljs-operator">=</span><span class="hljs-title"><span class="hljs-keyword">int</span></span>, <span class="hljs-title">help</span><span class="hljs-operator">=</span><span class="hljs-string">'Listing hour'</span>)
    <span class="hljs-title">parser</span>.<span class="hljs-title">add_argument</span>(<span class="hljs-string">'minute'</span>, <span class="hljs-title"><span class="hljs-keyword">type</span></span><span class="hljs-operator">=</span><span class="hljs-title"><span class="hljs-keyword">int</span></span>, <span class="hljs-title">help</span><span class="hljs-operator">=</span><span class="hljs-string">'Listing minute'</span>)
    <span class="hljs-title">parser</span>.<span class="hljs-title">add_argument</span>(<span class="hljs-string">'second'</span>, <span class="hljs-title"><span class="hljs-keyword">type</span></span><span class="hljs-operator">=</span><span class="hljs-title"><span class="hljs-keyword">int</span></span>, <span class="hljs-title">help</span><span class="hljs-operator">=</span><span class="hljs-string">'Listing second'</span>)
    <span class="hljs-title">args</span> <span class="hljs-operator">=</span> <span class="hljs-title">parser</span>.<span class="hljs-title">parse_args</span>()

    # <span class="hljs-title">Convert</span> <span class="hljs-title">command</span><span class="hljs-operator">-</span><span class="hljs-title">line</span> <span class="hljs-title">arguments</span> <span class="hljs-title">to</span> <span class="hljs-title">datetime</span> <span class="hljs-title">object</span>
    <span class="hljs-title">listing_time</span> <span class="hljs-operator">=</span> <span class="hljs-title">datetime</span>(<span class="hljs-title">args</span>.<span class="hljs-title">year</span>, <span class="hljs-title">args</span>.<span class="hljs-title">month</span>, <span class="hljs-title">args</span>.<span class="hljs-title">day</span>, <span class="hljs-title">args</span>.<span class="hljs-title">hour</span>, <span class="hljs-title">args</span>.<span class="hljs-title">minute</span>, <span class="hljs-title">args</span>.<span class="hljs-title">second</span>)

    # <span class="hljs-title">Monitor</span> <span class="hljs-title">the</span> <span class="hljs-title">token</span> <span class="hljs-title">listing</span>
    <span class="hljs-title"><span class="hljs-keyword">while</span></span> <span class="hljs-title">datetime</span>.<span class="hljs-title"><span class="hljs-built_in">now</span></span>() <span class="hljs-operator">&#x3C;</span> <span class="hljs-title">listing_time</span>:
        <span class="hljs-title">time</span>.<span class="hljs-title">sleep</span>(1)

    <span class="hljs-title"><span class="hljs-keyword">while</span></span> <span class="hljs-title">not</span> <span class="hljs-title">buy_token</span>():
        <span class="hljs-title">time</span>.<span class="hljs-title">sleep</span>(0.1)
</code></pre><p>这里已经基本上可用了，能监控交易对，能配置什么时候开始，（咱们只需要配置在开盘前3分钟就疯狂监控就可以了）但是我想让他更快一点呢？多线程疯狂请求。</p><p><strong>Can we enable multi-threading during purchase to make it faster?</strong></p><pre data-type="codeBlock" text="import time
import argparse
from datetime import datetime
from threading import Thread
from okex.trade_api import TradeAPI
from okex.account_api import AccountAPI
from okex.const import *

# Set up authentication credentials
api_key = &apos;YOUR_API_KEY&apos;
secret_key = &apos;YOUR_SECRET_KEY&apos;
passphrase = &apos;YOUR_PASSPHRASE&apos;

# Set up trade parameters
symbol = &apos;TOKEN-USDT&apos;  # Replace with your desired token symbol
amount = 100  # Replace with your desired order amount in USDT
num_threads = 5  # Replace with the number of threads to use

# Create API clients
account_client = AccountAPI(api_key, secret_key, passphrase, True)
trade_client = TradeAPI(api_key, secret_key, passphrase, True)

def buy_token():
    try:
        # Check if the token is listed
        response = trade_client.get_specific_public_symbol(symbol)
        if response[&apos;state&apos;] == &apos;live&apos;:
            # If the token is listed, place a market order to buy it
            response = trade_client.place_market_order(symbol, SIDE_BUY, funds=amount)
            print(response)
            return True
    except Exception as e:
        print(f&quot;An error occurred: {e}&quot;)
        return False

if __name__ == &apos;__main__&apos;:
    # Parse command-line arguments
    parser = argparse.ArgumentParser(description=&apos;Monitor token listing and buy immediately&apos;)
    parser.add_argument(&apos;year&apos;, type=int, help=&apos;Listing year&apos;)
    parser.add_argument(&apos;month&apos;, type=int, help=&apos;Listing month&apos;)
    parser.add_argument(&apos;day&apos;, type=int, help=&apos;Listing day&apos;)
    parser.add_argument(&apos;hour&apos;, type=int, help=&apos;Listing hour&apos;)
    parser.add_argument(&apos;minute&apos;, type=int, help=&apos;Listing minute&apos;)
    parser.add_argument(&apos;second&apos;, type=int, help=&apos;Listing second&apos;)
    args = parser.parse_args()

    # Convert command-line arguments to datetime object
    listing_time = datetime(args.year, args.month, args.day, args.hour, args.minute, args.second)

    # Wait until the listing time
    while datetime.now() &lt; listing_time:
        time.sleep(1)

    # Buy the token using multiple threads
    threads = []
    for i in range(num_threads):
        thread = Thread(target=buy_token)
        thread.start()
        threads.append(thread)

    # Wait for all threads to complete
    for thread in threads:
        thread.join()
"><code><span class="hljs-keyword">import</span> <span class="hljs-title">time</span>
<span class="hljs-title"><span class="hljs-keyword">import</span></span> <span class="hljs-title">argparse</span>
<span class="hljs-title"><span class="hljs-keyword">from</span></span> <span class="hljs-title">datetime</span> <span class="hljs-title"><span class="hljs-keyword">import</span></span> <span class="hljs-title">datetime</span>
<span class="hljs-title"><span class="hljs-keyword">from</span></span> <span class="hljs-title">threading</span> <span class="hljs-title"><span class="hljs-keyword">import</span></span> <span class="hljs-title">Thread</span>
<span class="hljs-title"><span class="hljs-keyword">from</span></span> <span class="hljs-title">okex</span>.<span class="hljs-title">trade_api</span> <span class="hljs-title"><span class="hljs-keyword">import</span></span> <span class="hljs-title">TradeAPI</span>
<span class="hljs-title"><span class="hljs-keyword">from</span></span> <span class="hljs-title">okex</span>.<span class="hljs-title">account_api</span> <span class="hljs-title"><span class="hljs-keyword">import</span></span> <span class="hljs-title">AccountAPI</span>
<span class="hljs-title"><span class="hljs-keyword">from</span></span> <span class="hljs-title">okex</span>.<span class="hljs-title">const</span> <span class="hljs-title"><span class="hljs-keyword">import</span></span> <span class="hljs-operator">*</span>

# <span class="hljs-title">Set</span> <span class="hljs-title">up</span> <span class="hljs-title">authentication</span> <span class="hljs-title">credentials</span>
<span class="hljs-title">api_key</span> <span class="hljs-operator">=</span> <span class="hljs-string">'YOUR_API_KEY'</span>
<span class="hljs-title">secret_key</span> <span class="hljs-operator">=</span> <span class="hljs-string">'YOUR_SECRET_KEY'</span>
<span class="hljs-title">passphrase</span> <span class="hljs-operator">=</span> <span class="hljs-string">'YOUR_PASSPHRASE'</span>

# <span class="hljs-title">Set</span> <span class="hljs-title">up</span> <span class="hljs-title">trade</span> <span class="hljs-title">parameters</span>
<span class="hljs-title">symbol</span> <span class="hljs-operator">=</span> <span class="hljs-string">'TOKEN-USDT'</span>  # <span class="hljs-title">Replace</span> <span class="hljs-title">with</span> <span class="hljs-title">your</span> <span class="hljs-title">desired</span> <span class="hljs-title">token</span> <span class="hljs-title">symbol</span>
<span class="hljs-title">amount</span> <span class="hljs-operator">=</span> 100  # <span class="hljs-title">Replace</span> <span class="hljs-title">with</span> <span class="hljs-title">your</span> <span class="hljs-title">desired</span> <span class="hljs-title">order</span> <span class="hljs-title">amount</span> <span class="hljs-title">in</span> <span class="hljs-title">USDT</span>
<span class="hljs-title">num_threads</span> <span class="hljs-operator">=</span> 5  # <span class="hljs-title">Replace</span> <span class="hljs-title">with</span> <span class="hljs-title">the</span> <span class="hljs-title">number</span> <span class="hljs-title">of</span> <span class="hljs-title">threads</span> <span class="hljs-title">to</span> <span class="hljs-title">use</span>

# <span class="hljs-title">Create</span> <span class="hljs-title">API</span> <span class="hljs-title">clients</span>
<span class="hljs-title">account_client</span> <span class="hljs-operator">=</span> <span class="hljs-title">AccountAPI</span>(<span class="hljs-title">api_key</span>, <span class="hljs-title">secret_key</span>, <span class="hljs-title">passphrase</span>, <span class="hljs-title">True</span>)
<span class="hljs-title">trade_client</span> <span class="hljs-operator">=</span> <span class="hljs-title">TradeAPI</span>(<span class="hljs-title">api_key</span>, <span class="hljs-title">secret_key</span>, <span class="hljs-title">passphrase</span>, <span class="hljs-title">True</span>)

<span class="hljs-title">def</span> <span class="hljs-title">buy_token</span>():
    <span class="hljs-title"><span class="hljs-keyword">try</span></span>:
        # <span class="hljs-title">Check</span> <span class="hljs-title"><span class="hljs-keyword">if</span></span> <span class="hljs-title">the</span> <span class="hljs-title">token</span> <span class="hljs-title"><span class="hljs-keyword">is</span></span> <span class="hljs-title">listed</span>
        <span class="hljs-title">response</span> <span class="hljs-operator">=</span> <span class="hljs-title">trade_client</span>.<span class="hljs-title">get_specific_public_symbol</span>(<span class="hljs-title">symbol</span>)
        <span class="hljs-title"><span class="hljs-keyword">if</span></span> <span class="hljs-title">response</span>[<span class="hljs-string">'state'</span>] <span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-string">'live'</span>:
            # <span class="hljs-title">If</span> <span class="hljs-title">the</span> <span class="hljs-title">token</span> <span class="hljs-title"><span class="hljs-keyword">is</span></span> <span class="hljs-title">listed</span>, <span class="hljs-title">place</span> <span class="hljs-title">a</span> <span class="hljs-title">market</span> <span class="hljs-title">order</span> <span class="hljs-title">to</span> <span class="hljs-title">buy</span> <span class="hljs-title">it</span>
            <span class="hljs-title">response</span> <span class="hljs-operator">=</span> <span class="hljs-title">trade_client</span>.<span class="hljs-title">place_market_order</span>(<span class="hljs-title">symbol</span>, <span class="hljs-title">SIDE_BUY</span>, <span class="hljs-title">funds</span><span class="hljs-operator">=</span><span class="hljs-title">amount</span>)
            <span class="hljs-title">print</span>(<span class="hljs-title">response</span>)
            <span class="hljs-title"><span class="hljs-keyword">return</span></span> <span class="hljs-title">True</span>
    <span class="hljs-title">except</span> <span class="hljs-title">Exception</span> <span class="hljs-title"><span class="hljs-keyword">as</span></span> <span class="hljs-title">e</span>:
        <span class="hljs-title">print</span>(<span class="hljs-title">f</span><span class="hljs-string">"An error occurred: {e}"</span>)
        <span class="hljs-title"><span class="hljs-keyword">return</span></span> <span class="hljs-title">False</span>

<span class="hljs-title"><span class="hljs-keyword">if</span></span> <span class="hljs-title">__name__</span> <span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-string">'__main__'</span>:
    # <span class="hljs-title">Parse</span> <span class="hljs-title">command</span><span class="hljs-operator">-</span><span class="hljs-title">line</span> <span class="hljs-title">arguments</span>
    <span class="hljs-title">parser</span> <span class="hljs-operator">=</span> <span class="hljs-title">argparse</span>.<span class="hljs-title">ArgumentParser</span>(<span class="hljs-title">description</span><span class="hljs-operator">=</span><span class="hljs-string">'Monitor token listing and buy immediately'</span>)
    <span class="hljs-title">parser</span>.<span class="hljs-title">add_argument</span>(<span class="hljs-string">'year'</span>, <span class="hljs-title"><span class="hljs-keyword">type</span></span><span class="hljs-operator">=</span><span class="hljs-title"><span class="hljs-keyword">int</span></span>, <span class="hljs-title">help</span><span class="hljs-operator">=</span><span class="hljs-string">'Listing year'</span>)
    <span class="hljs-title">parser</span>.<span class="hljs-title">add_argument</span>(<span class="hljs-string">'month'</span>, <span class="hljs-title"><span class="hljs-keyword">type</span></span><span class="hljs-operator">=</span><span class="hljs-title"><span class="hljs-keyword">int</span></span>, <span class="hljs-title">help</span><span class="hljs-operator">=</span><span class="hljs-string">'Listing month'</span>)
    <span class="hljs-title">parser</span>.<span class="hljs-title">add_argument</span>(<span class="hljs-string">'day'</span>, <span class="hljs-title"><span class="hljs-keyword">type</span></span><span class="hljs-operator">=</span><span class="hljs-title"><span class="hljs-keyword">int</span></span>, <span class="hljs-title">help</span><span class="hljs-operator">=</span><span class="hljs-string">'Listing day'</span>)
    <span class="hljs-title">parser</span>.<span class="hljs-title">add_argument</span>(<span class="hljs-string">'hour'</span>, <span class="hljs-title"><span class="hljs-keyword">type</span></span><span class="hljs-operator">=</span><span class="hljs-title"><span class="hljs-keyword">int</span></span>, <span class="hljs-title">help</span><span class="hljs-operator">=</span><span class="hljs-string">'Listing hour'</span>)
    <span class="hljs-title">parser</span>.<span class="hljs-title">add_argument</span>(<span class="hljs-string">'minute'</span>, <span class="hljs-title"><span class="hljs-keyword">type</span></span><span class="hljs-operator">=</span><span class="hljs-title"><span class="hljs-keyword">int</span></span>, <span class="hljs-title">help</span><span class="hljs-operator">=</span><span class="hljs-string">'Listing minute'</span>)
    <span class="hljs-title">parser</span>.<span class="hljs-title">add_argument</span>(<span class="hljs-string">'second'</span>, <span class="hljs-title"><span class="hljs-keyword">type</span></span><span class="hljs-operator">=</span><span class="hljs-title"><span class="hljs-keyword">int</span></span>, <span class="hljs-title">help</span><span class="hljs-operator">=</span><span class="hljs-string">'Listing second'</span>)
    <span class="hljs-title">args</span> <span class="hljs-operator">=</span> <span class="hljs-title">parser</span>.<span class="hljs-title">parse_args</span>()

    # <span class="hljs-title">Convert</span> <span class="hljs-title">command</span><span class="hljs-operator">-</span><span class="hljs-title">line</span> <span class="hljs-title">arguments</span> <span class="hljs-title">to</span> <span class="hljs-title">datetime</span> <span class="hljs-title">object</span>
    <span class="hljs-title">listing_time</span> <span class="hljs-operator">=</span> <span class="hljs-title">datetime</span>(<span class="hljs-title">args</span>.<span class="hljs-title">year</span>, <span class="hljs-title">args</span>.<span class="hljs-title">month</span>, <span class="hljs-title">args</span>.<span class="hljs-title">day</span>, <span class="hljs-title">args</span>.<span class="hljs-title">hour</span>, <span class="hljs-title">args</span>.<span class="hljs-title">minute</span>, <span class="hljs-title">args</span>.<span class="hljs-title">second</span>)

    # <span class="hljs-title">Wait</span> <span class="hljs-title">until</span> <span class="hljs-title">the</span> <span class="hljs-title">listing</span> <span class="hljs-title">time</span>
    <span class="hljs-title"><span class="hljs-keyword">while</span></span> <span class="hljs-title">datetime</span>.<span class="hljs-title"><span class="hljs-built_in">now</span></span>() <span class="hljs-operator">&#x3C;</span> <span class="hljs-title">listing_time</span>:
        <span class="hljs-title">time</span>.<span class="hljs-title">sleep</span>(1)

    # <span class="hljs-title">Buy</span> <span class="hljs-title">the</span> <span class="hljs-title">token</span> <span class="hljs-title"><span class="hljs-keyword">using</span></span> <span class="hljs-title">multiple</span> <span class="hljs-title">threads</span>
    <span class="hljs-title">threads</span> <span class="hljs-operator">=</span> []
    <span class="hljs-title"><span class="hljs-keyword">for</span></span> <span class="hljs-title">i</span> <span class="hljs-title">in</span> <span class="hljs-title">range</span>(<span class="hljs-title">num_threads</span>):
        <span class="hljs-title">thread</span> <span class="hljs-operator">=</span> <span class="hljs-title">Thread</span>(<span class="hljs-title">target</span><span class="hljs-operator">=</span><span class="hljs-title">buy_token</span>)
        <span class="hljs-title">thread</span>.<span class="hljs-title">start</span>()
        <span class="hljs-title">threads</span>.<span class="hljs-title">append</span>(<span class="hljs-title">thread</span>)

    # <span class="hljs-title">Wait</span> <span class="hljs-title"><span class="hljs-keyword">for</span></span> <span class="hljs-title">all</span> <span class="hljs-title">threads</span> <span class="hljs-title">to</span> <span class="hljs-title">complete</span>
    <span class="hljs-title"><span class="hljs-keyword">for</span></span> <span class="hljs-title">thread</span> <span class="hljs-title">in</span> <span class="hljs-title">threads</span>:
        <span class="hljs-title">thread</span>.<span class="hljs-title">join</span>()
</code></pre><p>到这里基本上逻辑看起来完全可以用了，只需要稍微修改一下配置。 问题来了，是不是真的可用呢？ 答案是否的，虽然逻辑都看起来对了，但是这个是调用okex的sdk，okex并没有官方sdk，而都是社区自己写的，这个时候就需要去找sdk的api是不是跟代码里面调用的一样的呢，不一样的话就需要修改成一样的，这个就需要稍微懂技术的人来修改了。</p><p><strong>综上可得，Chatgpt确实可以写代码，并且写的逻辑完全没问题，在写模块化组件，CRUD，常规的工具类方面很强，但是触及到各种第三方调用，整体架构之类的还需要程序员自己修改。当然也可以直接给他模版，让他学习。</strong></p>]]></content:encoded>
            <author>daniel-32@newsletter.paragraph.com (Daniel )</author>
        </item>
        <item>
            <title><![CDATA[手把手教学｜参与Ironfish有奖激励测试网3]]></title>
            <link>https://paragraph.com/@daniel-32/ironfish-3</link>
            <guid>yI4ajTHlbMmCneLJNZMo</guid>
            <pubDate>Fri, 03 Feb 2023 19:08:17 GMT</pubDate>
            <description><![CDATA[看完此文你能收获什么 了解服务器基础知识，理解节点运行，一定能收获IronFish空投。 运行节点有服务器成本，非投资建议DYOR **IronFish背景 **Iron Fish 由 Microsoft、Tilt 和 AirBnb 的前工程师 Elena Nadolinski 领导,A16z领投链接。基于零知识证明的隐私公链。什么是IronFish激励测试网3说简单点，就是参与一定有空投，节点运行每12个小时可以获得10分， 每周mint一个资产可以获得200分，燃烧一个可以获得200分，发送一个可以获得200分 最后上线根据积分转化成主网代币。官方原版教程懂编程基础的可以直接去看原版官方教程，不需要用一键脚本。Iron Fish Dev Docs | Install Iron Fish - NPMInstall Node.js LTS (on Windows, choose 64-bit/x64). On Mac and Linux, You can also install Node.js through nvm. On Windows, be sure to check ...]]></description>
            <content:encoded><![CDATA[<p><strong>看完此文你能收获什么</strong></p><p>了解服务器基础知识，理解节点运行，一定能收获IronFish空投。 运行节点有服务器成本，非投资建议DYOR</p><p>**IronFish背景 **Iron Fish 由 Microsoft、Tilt 和 AirBnb 的前工程师 Elena Nadolinski 领导,<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://a16z.com/2021/11/30/investing-in-iron-fish/">A16z领投链接</a>。基于零知识证明的隐私公链。</p><h4 id="h-ironfish3" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">什么是IronFish激励测试网3</h4><p><strong>说简单点，就是参与一定有空投，节点运行每12个小时可以获得10分， 每周mint一个资产可以获得200分，燃烧一个可以获得200分，发送一个可以获得200分 最后上线根据积分转化成主网代币。</strong></p><h4 id="h-" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">官方原版教程</h4><p>懂编程基础的可以直接去看原版官方教程，不需要用一键脚本。</p><div data-type="embedly" src="https://ironfish.network/docs/onboarding/iron-fish-tutorial" data="{&quot;provider_url&quot;:&quot;https://ironfish.network&quot;,&quot;description&quot;:&quot;Install Node.js LTS (on Windows, choose 64-bit/x64). On Mac and Linux, You can also install Node.js through nvm. On Windows, be sure to check \&quot;Also install required tools\&quot; during installation. On Linux, run the following to install the build-essential package: sudo apt update sudo apt install build-essential Next, install a command-line git client.&quot;,&quot;title&quot;:&quot;Iron Fish Dev Docs | Install Iron Fish - NPM&quot;,&quot;url&quot;:&quot;https://ironfish.network/developers/documentation/install-npm&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;Ironfish&quot;,&quot;type&quot;:&quot;link&quot;}" format="small"><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://ironfish.network/docs/onboarding/iron-fish-tutorial" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>Iron Fish Dev Docs | Install Iron Fish - NPM</h2><p>Install Node.js LTS (on Windows, choose 64-bit/x64). On Mac and Linux, You can also install Node.js through nvm. On Windows, be sure to check &quot;Also install required tools&quot; during installation. On Linux, run the following to install the build-essential package: sudo apt update sudo apt install build-essential Next, install a command-line git client.</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://ironfish.network</span></div></div></a></div></div><h4 id="h-" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">小白手把手教程</h4><p>1.首先需要去官方网站注册账号，填入邮箱之后会发送验证信息到邮箱，然后进邮箱登陆.然后需要填写一些资料，都比较常规。<strong>注意Graffiti</strong>* 这个就是你的账户节点绑定的name，后面运行脚本需要填入这个。看到下图这个界面就代表注册ok。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://testnet.ironfish.network/">https://testnet.ironfish.network/</a></p><p><strong>2</strong>.需要购买服务器，必须海外服务器（不然会很慢）。需要<strong>Ubuntu</strong>系统，系统版本20.04。说下<strong>硬件要求</strong>为了在激励测试网上运行 Ironfish 节点，官方建议如下，实际测试下来差不多最低要求这个配置。</p><ul><li><p>CPU: 4 核</p></li><li><p>内存：8GiB RAM</p></li></ul><p><strong>3</strong>.脚本教程来了 举例说明，我现在在<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://m.do.co/c/a3f9f00c0499">digitalocean</a>购买好了服务器（新用户可以白嫖100U）,ssh连接上服务器。一键脚本已经<strong>开源</strong>，连接上服务器之后输入底下命令。</p><p>创建服务器的配置选项：操作系统是ubuntu20.04 、Cpu Regular、4cpu、8g 总共48/mo</p><pre data-type="codeBlock" text="## 第一步获取root权限,下载脚本授权
sudo su 
cd ~ &amp;&amp; wget https://github.com/8hfq/Daniel-onekey-install/releases/download/1.6.0/ironfish3-daniel.sh &amp;&amp; chmod +x ironfish3-daniel.sh
"><code><span class="hljs-comment">## 第一步获取root权限,下载脚本授权</span>
sudo su 
<span class="hljs-built_in">cd</span> ~ &#x26;&#x26; wget https://github.com/8hfq/Daniel-onekey-install/releases/download/1.6.0/ironfish3-daniel.sh &#x26;&#x26; <span class="hljs-built_in">chmod</span> +x ironfish3-daniel.sh
</code></pre><pre data-type="codeBlock" text="## 执行脚本安装Ironfish，输入数字1，之后手动输入官方注册的ID，然后输入Y确认
./ironfish3-daniel.sh
"><code>## 执行脚本安装Ironfish，输入数字<span class="hljs-number">1</span>，之后手动输入官方注册的ID，然后输入Y确认
./ironfish3<span class="hljs-operator">-</span>daniel.sh
</code></pre><pre data-type="codeBlock" text="再次执行脚本检查状态输入2
./ironfish3-daniel.sh
"><code>再次执行脚本检查状态输入<span class="hljs-number">2</span>
./ironfish3<span class="hljs-operator">-</span>daniel.sh
</code></pre><p>检查blockGraffiti 是否为你的节点名字，enableTelemetry 是true。 Syncer显示SYNCING，Telemetry显示STARTED 。整体如下图，节点搭建完毕。</p><p><strong>节点同步需要时间！一般来说挂一天肯定同步了，必须同步好才能进行每周操作积分。 这里提供快速同步办法</strong></p><pre data-type="codeBlock" text="ironfish stop        ##暂停现在运行的节点 
ironfish chain:download  ## 下载镜像文件快速同步
nohup ironfish start &gt; ironfish.test.log 2&gt;&amp;1 &amp;  ##重新启动
"><code>ironfish stop        ##暂停现在运行的节点 
ironfish chain:download  ## 下载镜像文件快速同步
nohup ironfish start <span class="hljs-operator">></span> ironfish.test.log <span class="hljs-number">2</span><span class="hljs-operator">></span><span class="hljs-operator">&#x26;</span><span class="hljs-number">1</span> <span class="hljs-operator">&#x26;</span>  ##重新启动
</code></pre><h3 id="h-600" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">如何获得每周操作的600积分</h3><p>操作之前领水龙头,领不到水，点击这个<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://www.oreoscan.info/en/faucet">地址</a>可以领。或者在推特留言地址，我会抽空给大家发。输入以下命令也可以领 ironfish wallet:address （查看自己地址） ironfish faucet （领取水龙头） 输入注册邮箱领测试币。等待一段时间之后检查余额，（可能会很慢或者领不到） ironfish wallet:balance （查看余额）</p><pre data-type="codeBlock" text="##1.mint一个资产，在命令行输入，之后按照下图输入。请注意 name一定要是你的Graffiti名字,amount:2
ironfish wallet:mint
"><code><span class="hljs-meta prompt_">#</span><span class="bash"><span class="hljs-comment">#1.mint一个资产，在命令行输入，之后按照下图输入。请注意 name一定要是你的Graffiti名字,amount:2</span></span>
ironfish wallet:mint
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c4d440abee3e4d76ed47413226be633c5b2224250d7baca14efdd3cd84071112.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><pre data-type="codeBlock" text="##2.burn一个资产，在命令行输入，选择你刚刚mint的资产burn掉1个就可以
ironfish wallet:burn
"><code><span class="hljs-meta prompt_">#</span><span class="bash"><span class="hljs-comment">#2.burn一个资产，在命令行输入，选择你刚刚mint的资产burn掉1个就可以</span></span>
ironfish wallet:burn
</code></pre><pre data-type="codeBlock" text="##3.send一个资产，在命令行输入，选择你刚刚mint的资产发送到地址
ironfish wallet:send

##接受地址为（一定要是这个地址才有效）
dfc2679369551e64e3950e06a88e68466e813c63b100283520045925adbe59ca
"><code><span class="hljs-meta prompt_">#</span><span class="bash"><span class="hljs-comment">#3.send一个资产，在命令行输入，选择你刚刚mint的资产发送到地址</span></span>
ironfish wallet:send
<span class="hljs-meta prompt_">
#</span><span class="bash"><span class="hljs-comment">#接受地址为（一定要是这个地址才有效）</span></span>
dfc2679369551e64e3950e06a88e68466e813c63b100283520045925adbe59ca
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/97368e53983ecef611ebaf27814c422ef5825e4187589bb0f75f62b044ca43df.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><strong>常见的问题</strong></p><p>1.领不到水，这个地址可以领。或者在推特留言地址，我会抽空给大家发</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://www.oreoscan.info/en/faucet">http://www.oreoscan.info/en/faucet</a></p><p><strong>2. 怎么获取积分</strong></p><p><strong>第一种</strong> 节点如果正常运行每12小时可以获得10积分，在官方可以直接查看</p><p><strong>第二种 每周三次操作获取600积分</strong></p><p>3.关于操作问题报错</p><ul><li><p>操作之前检查自己余额够不够 ，一定需要有余额</p><p>ironfish wallet:balance</p></li><li><p>Not enough unspent notes available to fund the transaction. Please wait for any pending transactions to be confirmed.多等一会</p></li><li><p>大部分问题是要么余额不足，要么消息还没上链确认，要么链还没同步完成。多等一会即可。</p></li></ul><p><strong>3.关于钱包账号问题</strong></p><p>启动node会默认创建钱包，以下是对钱包的操作命令，默认钱包名字是default，也就是如果你要导出钱包私钥就输入下面命令。建议导出备用。</p><pre data-type="codeBlock" text="# 查看钱包
ironfish wallet:accounts
# 创建新钱包
ironfish wallet:create
# 设置为默认钱包
ironfish wallet:use 钱包名称
# 导出钱包密钥
ironfish wallet:export 钱包名称
# 导入钱包密钥
ironfish wallet:import
"><code><span class="hljs-comment"># 查看钱包</span>
ironfish wallet:accounts
<span class="hljs-comment"># 创建新钱包</span>
ironfish wallet:create
<span class="hljs-comment"># 设置为默认钱包</span>
ironfish wallet:use 钱包名称
<span class="hljs-comment"># 导出钱包密钥</span>
ironfish wallet:<span class="hljs-built_in">export</span> 钱包名称
<span class="hljs-comment"># 导入钱包密钥</span>
ironfish wallet:import
</code></pre><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">总结： 很简单的就能撸到空投，这次链上交互积分多多，可以多账号刷点～</h3><p>只分享干货～各位大佬感兴趣关注一下呗。</p><div data-type="embedly" src="https://twitter.com/Daniel_eth2" data="{&quot;provider_url&quot;:&quot;https://twitter.com&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;title&quot;:&quot;JavaScript is not available.&quot;,&quot;url&quot;:&quot;https://twitter.com/Daniel_eth2&quot;,&quot;html&quot;:&quot;&lt;a class=\&quot;twitter-timeline\&quot; href=\&quot;https://twitter.com/Daniel_eth2?ref_src=twsrc%5Etfw\&quot;&gt;Tweets by Daniel_eth2&lt;/a&gt;\n&lt;script async src=\&quot;https://platform.twitter.com/widgets.js\&quot; charset=\&quot;utf-8\&quot;&gt;&lt;/script&gt;&quot;,&quot;provider_name&quot;:&quot;Twitter&quot;,&quot;cache_age&quot;:3153600000,&quot;type&quot;:&quot;rich&quot;}" format="iframe"></div>]]></content:encoded>
            <author>daniel-32@newsletter.paragraph.com (Daniel )</author>
        </item>
        <item>
            <title><![CDATA[手把手教学｜参与APTOS有奖激励测试网3（可能是一个最大的空投）]]></title>
            <link>https://paragraph.com/@daniel-32/aptos-3</link>
            <guid>L5RxFcGG6jh373OWFtg7</guid>
            <pubDate>Sat, 20 Aug 2022 14:39:22 GMT</pubDate>
            <description><![CDATA[看完此文你能收获什么 了解服务器基础知识，理解节点运行，可能收获Aptos空投。 重点一键脚本使用方法跟第一期几乎一模一样Aptos背景投资阵容豪华，Aptos 完成 2 亿美元战略融资，a16z领投，Tiger Global、Katie Haun、Multicoin Capital、Three Arrows Capital、FTX Ventures 和 Coinbase Ventures 等参投。咱不做项目分析，直接说重点，对项目感兴趣的可以DYOR。什么是Aptos激励测试网38月19日 报名开始8月25日 注册截止日期通知将于8月29日发出测试网将于8月30日上线测试网将于9月9日结束成功标准和奖励 按时完成所有要求的目标满足指标推送数据定义的节点活跃度 ≥ 95%获得的链上奖励 ≥ 最大值的 80%成功参与 Aptos 创建的所有治理操作符合这些条件的每个人都将获得 800 个 Aptos 代币。此外，团队将提供两次额外获得 200 Aptos 代币的机会：使用开放的 REST API 运行验证器全节点以进行负载测试成功参与所有操作，以表彰在相同情况下的出色表现。官方原版...]]></description>
            <content:encoded><![CDATA[<p><strong>看完此文你能收获什么</strong></p><p>了解服务器基础知识，理解节点运行，可能收获Aptos空投。</p><p><strong>重点一键脚本使用方法跟第一期几乎一模一样</strong></p><h4 id="h-aptos" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">Aptos背景</h4><p>投资阵容豪华，Aptos 完成 2 亿美元战略融资，a16z领投，Tiger Global、Katie Haun、Multicoin Capital、Three Arrows Capital、FTX Ventures 和 Coinbase Ventures 等参投。咱不做项目分析，直接说重点，对项目感兴趣的可以DYOR。</p><h4 id="h-aptos3" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">什么是Aptos激励测试网3</h4><ul><li><p>8月19日 报名开始</p></li><li><p>8月25日 注册截止日期</p></li><li><p>通知将于8月29日发出</p></li><li><p>测试网将于8月30日上线</p></li><li><p>测试网将于9月9日结束</p></li></ul><p><strong>成功标准和奖励</strong> 按时完成所有要求的目标</p><ul><li><p>满足指标推送数据定义的节点活跃度 ≥ 95%</p></li><li><p>获得的链上奖励 ≥ 最大值的 80%</p></li><li><p>成功参与 Aptos 创建的所有治理操作</p></li></ul><p>符合这些条件的每个人都将获得 800 个 Aptos 代币。此外，团队将提供两次额外获得 200 Aptos 代币的机会：</p><ul><li><p>使用开放的 REST API 运行验证器全节点以进行负载测试</p></li><li><p>成功参与所有操作，以表彰在相同情况下的出色表现。</p></li></ul><h4 id="h-" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">官方原版教程</h4><p>懂编程基础的可以直接去看原版官方教程，不需要用一键脚本。(这次有一些坑，官方教程写的有问题，不建议非专业玩家使用)</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://aptos.dev/nodes/ait/steps-in-ait3/">https://aptos.dev/nodes/ait/steps-in-ait3/</a></p><h4 id="h-" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">小白手把手教程</h4><p>首先需要去官方网站注册账号，待会需要用。（如果参加过1期或者2期可以直接使用之前的账户登陆）</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://aptoslabs.com/it3">https://aptoslabs.com/it3</a></p><h3 id="h-step-1" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">STEP 1</h3><p>连接discord，简单 教程跳过</p><h3 id="h-step-2" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">STEP 2</h3><p>连接钱包 （<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/aptos-labs/aptos-core/releases/download/wallet-v0.1.6/wallet-extension.zip">下载钱包</a>链接）。下载到钱包到电脑后，解压 进入chrome的扩展<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="">chrome://extensions/</a> ，点击加载已解压的扩展程序</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/9a84651d696f658bc39cda04955180486250b6374ea487a9f517a1e90d6c5070.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>之后会在浏览器右边（类似于小狐狸的位置有个P的程序），打开会让你初始化钱包 记住<strong>备份好钱包的助记词</strong>！ （类似于eth钱包）</p><h3 id="h-step-3" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">STEP 3</h3><p>填写一些相关资料，为啥对Aptos感兴趣，简单自理～</p><h3 id="h-step-4" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">STEP 4</h3><p>核心步骤来了，这次一样的需要部署Aptos节点。</p><p>需要购买服务器，必须用海外服务器。<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.vultr.com/?ref=9214992-8H">推荐Vultr（新用户白嫖100U，底下会用Vultr做测试演示怎么购买服务器～</a>）需要<strong>Ubuntu</strong>系统，<strong>系统版本20.04</strong>.</p><ul><li><p>CPU: 4 核 (最好是8核) EPYC 或者Xeon （如果老款cpu可能出现指令集不支持哦）</p></li><li><p>内存：8GiB RAM</p></li><li><p>对于验证节点：</p><ul><li><p>打开 TCP 端口 6180，让验证者相互通信。</p></li><li><p>打开 TCP 端口 9101，用于获取验证器指标以验证运行状况统计信息。</p></li><li><p>打开 TCP 端口 80。</p></li></ul></li></ul><p>脚本已开源，地址如下。</p><div data-type="embedly" src="https://github.com/8hfq/Daniel-onekey-install" data="{&quot;provider_url&quot;:&quot;https://github.com&quot;,&quot;description&quot;:&quot;Contribute to danieleth2/Daniel-onekey-install development by creating an account on GitHub.&quot;,&quot;title&quot;:&quot;GitHub - danieleth2/Daniel-onekey-install&quot;,&quot;author_name&quot;:&quot;danieleth2&quot;,&quot;thumbnail_width&quot;:1200,&quot;url&quot;:&quot;https://github.com/danieleth2/Daniel-onekey-install&quot;,&quot;thumbnail_url&quot;:&quot;https://storage.googleapis.com/papyrus_images/fbf8fac76f03ade9d124ae1864d02893af57e4eb3177d575b9d1121c7b35a8cd.png&quot;,&quot;author_url&quot;:&quot;https://github.com/danieleth2&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;GitHub&quot;,&quot;type&quot;:&quot;link&quot;,&quot;thumbnail_height&quot;:600,&quot;image&quot;:{&quot;img&quot;:{&quot;width&quot;:1200,&quot;height&quot;:600,&quot;src&quot;:&quot;https://storage.googleapis.com/papyrus_images/fbf8fac76f03ade9d124ae1864d02893af57e4eb3177d575b9d1121c7b35a8cd.png&quot;}}}" format="small"><link rel="preload" as="image" href="https://storage.googleapis.com/papyrus_images/fbf8fac76f03ade9d124ae1864d02893af57e4eb3177d575b9d1121c7b35a8cd.png"/><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://github.com/8hfq/Daniel-onekey-install" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>GitHub - danieleth2/Daniel-onekey-install</h2><p>Contribute to danieleth2/Daniel-onekey-install development by creating an account on GitHub.</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://github.com</span></div><img src="https://storage.googleapis.com/papyrus_images/fbf8fac76f03ade9d124ae1864d02893af57e4eb3177d575b9d1121c7b35a8cd.png"/></div></a></div></div><p>ssh连接上服务器，逐步输入以下命令。首先获取root权限,下载脚本授权。运行太久可能会ssh中断，加上screen保证后台运行。</p><p><code>sudo su cd ~ &amp;&amp; wget https://github.com/8hfq/Daniel-onekey-install/releases/download/1.4.0/aptos3-daniel.sh &amp;&amp; chmod +x aptos3-daniel.sh</code> <code>screen</code></p><p>执行脚本安装docker，输入1 <code>./aptos3-daniel.sh</code></p><p>再次执行脚本安装aptos <code>./aptos3-daniel.sh</code>输入数字2，之后输入服务器的<strong>外网</strong>ip，再输入节点名字（自己取）</p><p>等待很久，10分钟以上（跟配置有关，CPU越好越快），出现安装成功。 <code>./aptos3-daniel.sh</code> 会显示节点的各种信息，之后去官网填信息</p><p>OWNER KEY 会自动填写连接的钱包地址 CONSENSUS KEY 填写 consensus_public_key: 后面的内容 CONSENSUS POP 填写consensus_proof_of_possession: 后面的内容 ACCOUNT KEY 填写 operator_account_public_key:后面的内容 VALIDATOR NETWORK KEY 填写validator_network_public_key: 后面的内容</p><p>ip填自己的公网ip， 最后一个<strong>API PORT填80，另外两个就是默认值。</strong></p><p>然后点击右方验证节点是否成功，成功即出现下面内容。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/0be0219a052d343c2eb3b5c91a20ca36dda0a1a3e6ecb0a42332b531ba894e28.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><h3 id="h-step-5" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">STEP 5</h3><p>前面都好之后需要做KYC认证，认证完之后所有步骤都ok即可。等待邮件通知，无论是否选上都有邮件通知。</p><p>常见问题汇总：</p><p>1.服务器要什么样的配置。地区上除大陆地区都可以 ，国内云服务商大概率不行（ban了验证服务）CPU只支持X86架构，而且要较新的CPU，核心数量最低4核，硬盘100g，带宽要求不高，流量计费的一般都可以。而且尽量买按时计费，过了抽奖期没抽中就可以关了。2.脚本运行的时候报错Connection timeout，这个是ssh连接超时，但是开了screen之后其实还是在后台跑。怎么恢复呢，重新连接上ssh，然后输入screen -li，查看id，然后screen -r ,即可恢复到原来的命令行界面。3. 运行3读不到文件报错，大概率是aptos没编译好，检测配置是否够。4.报错如下 Last Node Check Result NodeChecker Error: 859: unexpected token at &apos;Failed to evaluate TPS: Error from within the transaction emitter: Request failed: Ok(AptosError { message: &quot;transaction is rejected: InvalidUpdate - Transaction already in mempool with different payload&quot;, error_code: None, aptos_ledger_version: None })&apos; 检测机器配置是否足够。然后看看是不是国内云，国内大概率过不了验证，然后再多试几次，说不定就过了。 <strong>鉴于太多人问我服务器的问题了，在此演示一下什么规格什么配置服务器一定能跑成功的～</strong> 1.首先<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.vultr.com/?ref=9214992-8H">注册Vultr账号</a>，新用户能白嫖100U 2.选择服务器 Cloud Compute （第二个） 选择 AMD-High，地区推荐北美地区，Server Image 选择ubuntu20.043.配置选择96/month的，8 vCPUS，16Gmemory，350Gnvme 4.关掉自动备份 Add Auto Backups 5.确认购买之后，等待服务器 6.配置防火墙，点击Setting 点击Firewall 点击Manage 点击右边加号 配置防火墙，简单一点就是全打开。如下图所配置。然后返回服务器配置里面Update Firewall Group 7. 返回服务器配置好防火墙。然后点击右上角Console，进入服务器终端。运行上面脚本即可。基本上百分百一次成功～ 服务商<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://m.do.co/t/a3f9f00c0499">DigitalOcean也是可以的，亲身测试过，链接点这里，也是白嫖100U</a> DigitalOcean Referral Badge 总结：因为教学了第N次了，脚本用法几乎都一样，注册起来很简单。据私信根据我的脚本已有人抽中Aptos,Sui,成功领到Ironfish。希望大家都好运～Aptos如果能中一签基本上是一个超级大毛啦，说不定一年生活费就挣到手了。 最后，希望大家关注一波～谢谢大家支持～您的喜欢就是我更新的动力 哈哈～ <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/Daniel_eth2">https://twitter.com/Daniel_eth2</a></p>]]></content:encoded>
            <author>daniel-32@newsletter.paragraph.com (Daniel )</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/a7c1efc0776307fcc6fffd53b63fcab7c92a2ce46059c6d6bee5c6ce5eb5b347.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[手把手教学｜参与SUI有奖激励测试网]]></title>
            <link>https://paragraph.com/@daniel-32/sui</link>
            <guid>Q8o3fSuX57P2CkvwSZqz</guid>
            <pubDate>Thu, 04 Aug 2022 14:57:21 GMT</pubDate>
            <description><![CDATA[看完此文你能收获什么了解服务器基础知识，理解节点运行，可能收获Sui空投。 重点一键脚本使用方法跟Aptos几乎一模一样Sui背景：投资阵容豪华，与Aptos师出同源 。A16z领投，Move编程语言。咱不做项目分析，直接说重点，对项目感兴趣的可以DYOR。什么是Sui激励测试网验证者将构成我们 Sui 网络的骨干。每个验证者处理交易并参与共识将使 Sui 成为世界上最安全的网络。我们的主要测试网目标包括：为潜在的验证者和全节点运营商培育一个不断发展的生态系统建立和培育运营商行为以创建蓬勃发展的 Sui 主网激励措施Sui 基金会将为验证者参与的每个测试网“wave”奖励 2,000 SUI。Sui 基金会将承诺将最多 10% 的 Sui 代币供应质押给继续参与 Sui 主网的表​​现最好的验证者。官方原版教程 懂编程基础的可以直接去看原版官方教程，不需要用一键脚本。Guides and Tutorials | Sui DocumentationStart developing on Sui through example projects and developer guide...]]></description>
            <content:encoded><![CDATA[<h4 id="h-" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">看完此文你能收获什么</h4><p><em>了解服务器基础知识，理解节点运行，可能收获Sui空投。</em></p><p><em>重点一键脚本使用方法跟Aptos几乎一模一样</em></p><h4 id="h-suiaptos-a16zmovedyor" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">Sui背景：投资阵容豪华，与Aptos师出同源 。A16z领投，Move编程语言。咱不做项目分析，直接说重点，对项目感兴趣的可以DYOR。</h4><h4 id="h-sui" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">什么是Sui激励测试网</h4><p>验证者将构成我们 Sui 网络的骨干。每个验证者处理交易并参与共识将使 Sui 成为世界上最安全的网络。我们的主要测试网目标包括：</p><ul><li><p>为潜在的验证者和全节点运营商培育一个不断发展的生态系统</p></li><li><p>建立和培育运营商行为以创建蓬勃发展的 Sui 主网</p></li></ul><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">激励措施</h3><ul><li><p>Sui 基金会将为验证者参与的每个测试网“wave”奖励 2,000 SUI。</p></li><li><p>Sui 基金会将承诺将最多 10% 的 Sui 代币供应质押给继续参与 Sui 主网的表​​现最好的验证者。</p></li></ul><p>官方原版教程 懂编程基础的可以直接去看原版官方教程，不需要用一键脚本。</p><div data-type="embedly" src="https://docs.sui.io/build" data="{&quot;provider_url&quot;:&quot;https://docs.sui.io&quot;,&quot;description&quot;:&quot;Start developing on Sui through example projects and developer guides.&quot;,&quot;title&quot;:&quot;Guides and Tutorials | Sui Documentation&quot;,&quot;mean_alpha&quot;:255,&quot;thumbnail_width&quot;:1920,&quot;url&quot;:&quot;https://docs.sui.io/guides&quot;,&quot;thumbnail_url&quot;:&quot;https://storage.googleapis.com/papyrus_images/de74ae68f3c7eb30f572f7d446626d4b350f665fb18a2ce752c7e0ea441f56bf.png&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;Sui&quot;,&quot;type&quot;:&quot;link&quot;,&quot;thumbnail_height&quot;:1080,&quot;image&quot;:{&quot;img&quot;:{&quot;width&quot;:1920,&quot;height&quot;:1080,&quot;src&quot;:&quot;https://storage.googleapis.com/papyrus_images/de74ae68f3c7eb30f572f7d446626d4b350f665fb18a2ce752c7e0ea441f56bf.png&quot;}}}" format="small"><link rel="preload" as="image" href="https://storage.googleapis.com/papyrus_images/de74ae68f3c7eb30f572f7d446626d4b350f665fb18a2ce752c7e0ea441f56bf.png"/><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://docs.sui.io/build" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>Guides and Tutorials | Sui Documentation</h2><p>Start developing on Sui through example projects and developer guides.</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://docs.sui.io</span></div><img src="https://storage.googleapis.com/papyrus_images/de74ae68f3c7eb30f572f7d446626d4b350f665fb18a2ce752c7e0ea441f56bf.png"/></div></a></div></div><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">小白手把手教程</h3><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">第一大步</h3><p>运行全节点，需要购买服务器，推荐海外服务器。Ubuntu系统，系统版本20.04。</p><p>说下硬件要求为了在激励测试网上运行 Sui 节点，官方建议如下，底下说的端口需要在服务器运行商那里打开，具体得根据各种服务商配置来处理，不会就Google XXX怎么开放端口。注意需要打开端口9000 9184</p><p>最低配置要求</p><ul><li><p>CPU：2</p></li><li><p>内存：8GB</p></li><li><p>存储：50GB</p></li></ul><p>举例说明，我现在购买好了一台服务器公网 ip是 <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://43.130.XXX.XXX">43.130.XXX.XXX</a>,ssh连接上服务器，（不懂Google）。一键脚本已经开源，连接上服务器之后输入底下命令。</p><div data-type="embedly" src="https://github.com/8hfq/Daniel-onekey-install" data="{&quot;provider_url&quot;:&quot;https://github.com&quot;,&quot;description&quot;:&quot;Contribute to danieleth2/Daniel-onekey-install development by creating an account on GitHub.&quot;,&quot;title&quot;:&quot;GitHub - danieleth2/Daniel-onekey-install&quot;,&quot;author_name&quot;:&quot;danieleth2&quot;,&quot;thumbnail_width&quot;:1200,&quot;url&quot;:&quot;https://github.com/danieleth2/Daniel-onekey-install&quot;,&quot;thumbnail_url&quot;:&quot;https://storage.googleapis.com/papyrus_images/fbf8fac76f03ade9d124ae1864d02893af57e4eb3177d575b9d1121c7b35a8cd.png&quot;,&quot;author_url&quot;:&quot;https://github.com/danieleth2&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;GitHub&quot;,&quot;type&quot;:&quot;link&quot;,&quot;thumbnail_height&quot;:600,&quot;image&quot;:{&quot;img&quot;:{&quot;width&quot;:1200,&quot;height&quot;:600,&quot;src&quot;:&quot;https://storage.googleapis.com/papyrus_images/fbf8fac76f03ade9d124ae1864d02893af57e4eb3177d575b9d1121c7b35a8cd.png&quot;}}}" format="small"><link rel="preload" as="image" href="https://storage.googleapis.com/papyrus_images/fbf8fac76f03ade9d124ae1864d02893af57e4eb3177d575b9d1121c7b35a8cd.png"/><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://github.com/8hfq/Daniel-onekey-install" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>GitHub - danieleth2/Daniel-onekey-install</h2><p>Contribute to danieleth2/Daniel-onekey-install development by creating an account on GitHub.</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://github.com</span></div><img src="https://storage.googleapis.com/papyrus_images/fbf8fac76f03ade9d124ae1864d02893af57e4eb3177d575b9d1121c7b35a8cd.png"/></div></a></div></div><h3 id="h-root" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">第一步获取root权限,下载脚本授权</h3><pre data-type="codeBlock" text="sudo su 
cd ~ &amp;&amp; wget https://github.com/8hfq/Daniel-onekey-install/releases/download/1.3.0/sui-daniel.sh &amp;&amp; chmod +x sui-daniel.sh
"><code>sudo su 
<span class="hljs-built_in">cd</span> ~ &#x26;&#x26; wget https://github.com/8hfq/Daniel-onekey-install/releases/download/1.3.0/sui-daniel.sh &#x26;&#x26; <span class="hljs-built_in">chmod</span> +x sui-daniel.sh
</code></pre><h3 id="h-docker1" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">第一次执行脚本安装docker，输入1</h3><pre data-type="codeBlock" text="./sui-daniel.sh
"><code>./sui<span class="hljs-operator">-</span>daniel.sh
</code></pre><p>输入会出现以下界面</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b814c9a83c8693fa18ae11f68f79363c6bb6437e331da3649cd5e3ac0018a790.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>输入1执行，等待一会。出现docker install success即安装完毕。</p><h3 id="h-sui" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">再次执行脚本安装Sui</h3><pre data-type="codeBlock" text="./sui-daniel.sh
"><code>./sui<span class="hljs-operator">-</span>daniel.sh
</code></pre><p>输入2，会自动安装Sui，出现Sui run success即可。</p><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">验证是否安装成功</h3><pre data-type="codeBlock" text="./sui-daniel.sh
"><code>./sui<span class="hljs-operator">-</span>daniel.sh
</code></pre><p>输入3，出现结果即代表全节点安装成功。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/9cc7f71d67a6792f03a95c4ff29cc16652805af79918de950ab435a7ee247ad0.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>也可以在这个网站输入ip，显示如下截图即代表成功</p><div data-type="embedly" src="https://node.sui.zvalid.com/" data="{&quot;provider_url&quot;:&quot;https://node.sui.zvalid.com&quot;,&quot;description&quot;:&quot;Sui Node Tester With Love From Andrew | zValid&quot;,&quot;title&quot;:&quot;SUI NODETESTER&quot;,&quot;url&quot;:&quot;https://node.sui.zvalid.com/&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;Zvalid&quot;,&quot;type&quot;:&quot;link&quot;}" format="small"><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://node.sui.zvalid.com/" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>SUI NODETESTER</h2><p>Sui Node Tester With Love From Andrew | zValid</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://node.sui.zvalid.com</span></div></div></a></div></div><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/55b238843ab88411386c7cc1ebfbda9a6640e1996657145dfdf5240facec015c.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><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">第二大步</h3><p>填表申请，根据实际情况填表申请即可。</p><div data-type="embedly" src="https://airtable.com/shr3phh3FCZYhZUDF" data="{&quot;provider_url&quot;:&quot;https://airtable.com&quot;,&quot;description&quot;:&quot;Airtable is a low-code platform for building collaborative apps. Customize your workflow, collaborate, and achieve ambitious outcomes. Get started for free.&quot;,&quot;title&quot;:&quot;Validator Application - Sui Validator Application&quot;,&quot;mean_alpha&quot;:245.25,&quot;thumbnail_width&quot;:1200,&quot;height&quot;:533,&quot;width&quot;:800,&quot;html&quot;:&quot;&lt;iframe loading=\&quot;lazy\&quot; class=\&quot;embedly-embed\&quot; src=\&quot;//cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fairtable.com%2Fembed%2FappqhMxUtCEbFeU8y%2Fshr3phh3FCZYhZUDF&amp;display_name=Airtable&amp;url=https%3A%2F%2Fairtable.com%2FappqhMxUtCEbFeU8y%2Fshr3phh3FCZYhZUDF&amp;image=https%3A%2F%2Fstatic.airtable.com%2Fimages%2Foembed%2Fairtable_brand.png&amp;type=text%2Fhtml&amp;schema=airtable\&quot; width=\&quot;800\&quot; height=\&quot;533\&quot; scrolling=\&quot;no\&quot; title=\&quot;Airtable embed\&quot; frameborder=\&quot;0\&quot; allow=\&quot;autoplay; fullscreen; encrypted-media; picture-in-picture;\&quot; allowfullscreen=\&quot;true\&quot;&gt;&lt;/iframe&gt;&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;Airtable&quot;,&quot;thumbnail_url&quot;:&quot;https://storage.googleapis.com/papyrus_images/6f39d5fa853eb5ea052f5a6093e74641c99d6c6f35d0be6ec4d0bb4f70536869.png&quot;,&quot;type&quot;:&quot;rich&quot;,&quot;thumbnail_height&quot;:628,&quot;image&quot;:{&quot;img&quot;:{&quot;width&quot;:1200,&quot;height&quot;:628,&quot;src&quot;:&quot;https://storage.googleapis.com/papyrus_images/6f39d5fa853eb5ea052f5a6093e74641c99d6c6f35d0be6ec4d0bb4f70536869.png&quot;}}}" format="iframe"><link rel="preload" as="image" href="https://storage.googleapis.com/papyrus_images/6f39d5fa853eb5ea052f5a6093e74641c99d6c6f35d0be6ec4d0bb4f70536869.png"/><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://airtable.com/shr3phh3FCZYhZUDF" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>Validator Application - Sui Validator Application</h2><p>Airtable is a low-code platform for building collaborative apps. Customize your workflow, collaborate, and achieve ambitious outcomes. Get started for free.</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://airtable.com</span></div><img src="https://storage.googleapis.com/papyrus_images/6f39d5fa853eb5ea052f5a6093e74641c99d6c6f35d0be6ec4d0bb4f70536869.png"/></div></a></div></div><p>几个常见的问题：</p><p>1.国内云服务商未测试，建议使用海外云服务商。</p><p>2.如果出现服务器重启，需要重启sui服务的话执行如下命令</p><pre data-type="codeBlock" text="sudo root
cd ~/sui-node/devnet
sudo docker-compose up -d
"><code>sudo root
cd <span class="hljs-operator">~</span><span class="hljs-operator">/</span>sui<span class="hljs-operator">-</span>node<span class="hljs-operator">/</span>devnet
sudo docker<span class="hljs-operator">-</span>compose up <span class="hljs-operator">-</span>d
</code></pre><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">总结</h3><p>第N次教学了，跟之前的脚本使用方法都一模一样，申请表填写内容较多，Kyc官方说需要过<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://coinlist.co">Coinlist</a>(链接点这里，可以先去过下KYC)，暂无具体规则。这种有服务器成本的节点运行，如果能选中那么空投奖励一般都会比较丰富，但是也因为成本，最好量力而行。</p>]]></content:encoded>
            <author>daniel-32@newsletter.paragraph.com (Daniel )</author>
        </item>
        <item>
            <title><![CDATA[手把手教学｜参与APTOS有奖激励测试网2]]></title>
            <link>https://paragraph.com/@daniel-32/aptos-2</link>
            <guid>58IhYybFVuS54oGUlrxQ</guid>
            <pubDate>Sun, 03 Jul 2022 07:18:39 GMT</pubDate>
            <description><![CDATA[看完此文你能收获什么 了解服务器基础知识，理解节点运行，可能收获Aptos空投。 重点一键脚本使用方法跟第一期几乎一模一样Aptos背景投资阵容豪华，Aptos 完成 2 亿美元战略融资，a16z领投，Tiger Global、Katie Haun、Multicoin Capital、Three Arrows Capital、FTX Ventures 和 Coinbase Ventures 等参投。咱不做项目分析，直接说重点，对项目感兴趣的可以DYOR。什么是Aptos激励测试网26 月 30 日开始！7月5日分享社区投票过程报名截止7月7日录取通知将于 7 月 11 日发出激励测试网于 7 月 12 日上线激励测试网于 7 月 22 日结束成功标准和奖励 按时完成所有要求 满足指标推送数据定义的节点活跃度 ≥ 95% 每小时一个共识提案定义的可用性 ≥ 95% 在至少 25% 的共识轮次中投票符合这些条件的每个人都将获得 500 个 Aptos 代币。 此外，前 10% 的共识选民将额外获得 200 个 Aptos 代币，以表彰在相同情况下的出色表现。 说简单点，就是参与可能有...]]></description>
            <content:encoded><![CDATA[<p><strong>看完此文你能收获什么</strong></p><p>了解服务器基础知识，理解节点运行，可能收获Aptos空投。</p><p><strong>重点一键脚本使用方法跟第一期几乎一模一样</strong></p><h4 id="h-aptos" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">Aptos背景</h4><p>投资阵容豪华，Aptos 完成 2 亿美元战略融资，a16z领投，Tiger Global、Katie Haun、Multicoin Capital、Three Arrows Capital、FTX Ventures 和 Coinbase Ventures 等参投。咱不做项目分析，直接说重点，对项目感兴趣的可以DYOR。</p><h4 id="h-aptos2" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">什么是Aptos激励测试网2</h4><ul><li><p>6 月 30 日开始！</p></li><li><p>7月5日分享社区投票过程</p></li><li><p>报名截止7月7日</p></li><li><p>录取通知将于 7 月 11 日发出</p></li><li><p>激励测试网于 7 月 12 日上线</p></li><li><p>激励测试网于 7 月 22 日结束</p></li></ul><p><strong>成功标准和奖励</strong> 按时完成所有要求 满足指标推送数据定义的节点活跃度 ≥ 95% 每小时一个共识提案定义的可用性 ≥ 95% 在至少 25% 的共识轮次中投票符合这些条件的每个人都将获得 500 个 Aptos 代币。 此外，前 10% 的共识选民将额外获得 200 个 Aptos 代币，以表彰在相同情况下的出色表现。</p><p><strong>说简单点，就是参与可能有空投,节点需要保持高可用性。</strong></p><h4 id="h-" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">官方原版教程</h4><p>懂编程基础的可以直接去看原版官方教程，不需要用一键脚本。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://aptos.dev/nodes/aptos-deployments">https://aptos.dev/nodes/aptos-deployments</a></p><h4 id="h-" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">小白手把手教程</h4><p>1.首先需要去官方网站注册账号，待会需要用。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://community.aptoslabs.com/">https://community.aptoslabs.com/</a></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/8cd4902dd2ce7015bae8ee1a8cdd7d6f19935d709ae805668adb252562001941.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><strong>2</strong>.需要购买服务器，推荐海外服务器。需要<strong>Ubuntu</strong>系统，系统版本20.04.</p><p>(阿里云腾讯云实测不行，需要海外云，推荐DigitalOcean，可以按小时付费7号没抽上就可以直接关服务器，点推荐链接注册可以免费白嫖100美金额度)</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/8ffb7b8fb2c7aad7fcdb047c07fc9916a7109fcdd4f09a21915595ee21279490.svg" alt="DigitalOcean Referral Badge" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">DigitalOcean Referral Badge</figcaption></figure><p>说下<strong>硬件要求</strong>为了在激励测试网上运行 aptos 节点，官方建议如下，底下说的端口需要在服务器运行商那里打开，具体得根据各种服务商配置来处理，不会就Google XXX怎么开放端口。<strong>注意需要打开端口6180 9101 80</strong></p><ul><li><p>CPU: 4 核</p></li><li><p>内存：8GiB RAM</p></li><li><p>对于验证节点：</p><ul><li><p>打开 TCP 端口 6180，让验证者相互通信。</p></li><li><p>打开 TCP 端口 9101，用于获取验证器指标以验证运行状况统计信息。</p></li><li><p>打开 TCP 端口 80。</p></li></ul></li></ul><p><strong>3</strong>.脚本教程来了</p><p>举例说明，我现在购买好了一台服务器公网 ip是 43.130.XXX.XXX,ssh连接上服务器，（不懂Google）。一键脚本已经开源，连接上服务器之后输入底下命令。</p><div data-type="embedly" src="https://github.com/8hfq/Aptos-onekey-install" data="{&quot;provider_url&quot;:&quot;https://github.com&quot;,&quot;description&quot;:&quot;Contribute to danieleth2/Daniel-onekey-install development by creating an account on GitHub.&quot;,&quot;title&quot;:&quot;GitHub - danieleth2/Daniel-onekey-install&quot;,&quot;author_name&quot;:&quot;danieleth2&quot;,&quot;thumbnail_width&quot;:1200,&quot;url&quot;:&quot;https://github.com/danieleth2/Daniel-onekey-install&quot;,&quot;thumbnail_url&quot;:&quot;https://storage.googleapis.com/papyrus_images/fbf8fac76f03ade9d124ae1864d02893af57e4eb3177d575b9d1121c7b35a8cd.png&quot;,&quot;author_url&quot;:&quot;https://github.com/danieleth2&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;GitHub&quot;,&quot;type&quot;:&quot;link&quot;,&quot;thumbnail_height&quot;:600,&quot;image&quot;:{&quot;img&quot;:{&quot;width&quot;:1200,&quot;height&quot;:600,&quot;src&quot;:&quot;https://storage.googleapis.com/papyrus_images/fbf8fac76f03ade9d124ae1864d02893af57e4eb3177d575b9d1121c7b35a8cd.png&quot;}}}" format="small"><link rel="preload" as="image" href="https://storage.googleapis.com/papyrus_images/fbf8fac76f03ade9d124ae1864d02893af57e4eb3177d575b9d1121c7b35a8cd.png"/><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://github.com/8hfq/Aptos-onekey-install" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>GitHub - danieleth2/Daniel-onekey-install</h2><p>Contribute to danieleth2/Daniel-onekey-install development by creating an account on GitHub.</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://github.com</span></div><img src="https://storage.googleapis.com/papyrus_images/fbf8fac76f03ade9d124ae1864d02893af57e4eb3177d575b9d1121c7b35a8cd.png"/></div></a></div></div><pre data-type="codeBlock" text="## 第一步获取root权限,下载脚本授权
sudo su 
cd ~ &amp;&amp; wget https://github.com/8hfq/Daniel-onekey-install/releases/download/1.2.0/aptos2-daniel.sh &amp;&amp; chmod +x aptos2-daniel.sh
"><code><span class="hljs-comment">## 第一步获取root权限,下载脚本授权</span>
sudo su 
<span class="hljs-built_in">cd</span> ~ &#x26;&#x26; wget https://github.com/8hfq/Daniel-onekey-install/releases/download/1.2.0/aptos2-daniel.sh &#x26;&#x26; <span class="hljs-built_in">chmod</span> +x aptos2-daniel.sh
</code></pre><pre data-type="codeBlock" text="## 第一次执行脚本安装docker，输入1
./aptos2-daniel.sh
输入会出现以下界面
"><code>## 第一次执行脚本安装docker，输入<span class="hljs-number">1</span>
./aptos2<span class="hljs-operator">-</span>daniel.sh
输入会出现以下界面
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d13065b4d70294f5f620691f1259b8bd5e422f42785c66a578369caeec1ee881.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>输入1执行，等待一会。出现Docker Compose version v2.5.0即安装完毕。</p><pre data-type="codeBlock" text="## 再次执行脚本安装aptos
./aptos2-daniel.sh
输入数字2，之后输入服务器的外网ip，再输入节点名字（自己取）
"><code>## 再次执行脚本安装aptos
./aptos2<span class="hljs-operator">-</span>daniel.sh
输入数字<span class="hljs-number">2</span>，之后输入服务器的外网ip，再输入节点名字（自己取）
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/453f5463723d29a6200ad6a864e550e274032c574c1a3b2c7590a328e2188d38.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>等待一会，出现安装成功。</p><pre data-type="codeBlock" text="再次执行脚本输入3
./aptos2-daniel.sh
"><code>再次执行脚本输入<span class="hljs-number">3</span>
./aptos2<span class="hljs-operator">-</span>daniel.sh
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/7db72854a6f3837b3a3f8a4136819a4dbb9b3dc9c3c7cb2ceedd7db9e77b60d6.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>会显示节点的各种信息，之后去官网填信息</p><p>前面三个key按照名字对应填一下，ip填自己的公网ip， 最后一个<strong>API PORT填80</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/ee31621903215adc26e990504b464ce04487467e99faff82d53596baff75fddf.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>填完确认等待出现下图。如果遇到报错，请看最底下。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c97da5c59588d1c5a3b023a4e957ab5c0aef7cfed44b140972b7dc2f83a52721.jpg" 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>好之后需要做KYC认证，认证完之后所有步骤都ok即可。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/699b60f554a8b1befa23cc50e7c8de1ca9180ec96b8788ce0badff8571eb33da.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><strong>几个常见的问题：</strong></p><p>1.阿里云腾讯云会出现端口无法连接，即使打开了端口服务正常也不行，建议换云服务商。</p><p>2.如果最后出现timeout，大概率是网络问题，检查端口是否打开。网站里面最后一个端口配置是80.注意官方默认是8080，需要修改。如果出现qps不足，大概率是服务器配置不够。</p><p>3.如果脚本执行3出现找不到文件的报错，注意查看自己的操作系统是否是Ubuntu20.04。</p><p>4.如果kyc失败，多尝试几次，除了美国地区kyc应该都可以过。</p><p>5.7.7号会出挑选结果，如果中签了才需要继续续用服务器，否则保守点只需要运行到8号即可。</p><p>6.如果出现服务器重启，需要重启aptos服务的话执行如下命令</p><pre data-type="codeBlock" text="sudo su
source /etc/profile
cd ~/$WORKSPACE
sudo docker-compose up -d
"><code>sudo su
source <span class="hljs-operator">/</span>etc<span class="hljs-operator">/</span>profile
cd <span class="hljs-operator">~</span><span class="hljs-operator">/</span>$WORKSPACE
sudo docker<span class="hljs-operator">-</span>compose up <span class="hljs-operator">-</span>d
</code></pre><ol start="7"><li><p>检测运行节点网站 <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/t7BZNZyDXd">aptos-node.info</a> 输入自己的ip和端口。跟官方上面填的一样即可检测。</p></li></ol><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">总结：因为教学了好几次了，这次跟上次一键脚本用法几乎一样，注册起来很简单。节点稳定，参与生态开发，有更大的概率拿空投。</h3><p>最后，感兴趣的希望大家关注一波～谢谢大家支持～</p><div data-type="embedly" src="https://twitter.com/Daniel_eth2" data="{&quot;provider_url&quot;:&quot;https://twitter.com&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;title&quot;:&quot;JavaScript is not available.&quot;,&quot;url&quot;:&quot;https://twitter.com/Daniel_eth2&quot;,&quot;html&quot;:&quot;&lt;a class=\&quot;twitter-timeline\&quot; href=\&quot;https://twitter.com/Daniel_eth2?ref_src=twsrc%5Etfw\&quot;&gt;Tweets by Daniel_eth2&lt;/a&gt;\n&lt;script async src=\&quot;https://platform.twitter.com/widgets.js\&quot; charset=\&quot;utf-8\&quot;&gt;&lt;/script&gt;&quot;,&quot;provider_name&quot;:&quot;Twitter&quot;,&quot;cache_age&quot;:3153600000,&quot;type&quot;:&quot;rich&quot;}" format="iframe"></div>]]></content:encoded>
            <author>daniel-32@newsletter.paragraph.com (Daniel )</author>
        </item>
        <item>
            <title><![CDATA[手把手教学｜自建一个ETH2验证者]]></title>
            <link>https://paragraph.com/@daniel-32/eth2</link>
            <guid>yuqQm1zBC9SkTxIfIsfX</guid>
            <pubDate>Sat, 25 Jun 2022 10:56:23 GMT</pubDate>
            <description><![CDATA[ETH2.0合并在即，如何自己做一个验证者呢？ 看完此文可以学会自建ETH节点，ETH2节点，验证者节点 当然上面熟练了BNB，Matic等各种链的节点也能快速上手 测试网教学，无代币成本无收益前提硬件条件服务器 系统Ubuntu20.4 CPU 4核以上 内存16G 硬盘SSD 500G（200G够用） 需要开放端口，如果要自己调用RPC也需要把端口打开 Geth 30303 TCP/UDP Prysm13000 TCP, 12000 UDP节点原理节点是去中心化的保证，可以验证每个区块中的所有交易，从而确保网络安全和数据准确。无论是POW还是POS都需要节点来与链上交互，对于用户来说，Chainlist添加网络和小狐狸里面配置RPC URL最容易理解。有了自己的节点有什么好处呢，延迟低，QPS几乎无额外限制，无论是读链上数据还是发送消息都会比公用节点快且不卡（抢开盘抢NFT之类的都是必备）。也是为去中心化作出贡献。 搭建一个ETH2验证者的流程，首先需要同步执行层网络，即拥有一个ETH1同步好的节点。然后同步一个信标节点，即拥有一个ETH2同步好的节点，然后打入存款生成一个验...]]></description>
            <content:encoded><![CDATA[<blockquote><p>ETH2.0合并在即，如何自己做一个验证者呢？</p><p>看完此文可以学会自建ETH节点，ETH2节点，验证者节点</p><p>当然上面熟练了BNB，Matic等各种链的节点也能快速上手</p><p>测试网教学，无代币成本无收益</p></blockquote><h4 id="h-" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">前提硬件条件</h4><p>服务器</p><p>系统Ubuntu20.4</p><p>CPU 4核以上 内存16G 硬盘SSD 500G（200G够用）</p><p>需要开放端口，如果要自己调用RPC也需要把端口打开</p><p>Geth 30303 TCP/UDP</p><p>Prysm13000 TCP, 12000 UDP</p><h4 id="h-" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">节点原理</h4><p>节点是去中心化的保证，可以验证每个区块中的所有交易，从而确保网络安全和数据准确。无论是POW还是POS都需要节点来与链上交互，对于用户来说，<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://chainlist.org/zh">Chainlist</a>添加网络和小狐狸里面配置RPC URL最容易理解。有了自己的节点有什么好处呢，延迟低，QPS几乎无额外限制，无论是读链上数据还是发送消息都会比公用节点快且不卡（抢开盘抢NFT之类的都是必备）。也是为去中心化作出贡献。</p><p>搭建一个ETH2验证者的流程，首先需要同步执行层网络，即拥有一个ETH1同步好的节点。然后同步一个信标节点，即拥有一个ETH2同步好的节点，然后打入存款生成一个验证者钱包，运行验证者。</p><h4 id="h-eth1" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">ETH1节点</h4><p>目前有很多客户端，<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://geth.ethereum.org/">Geth</a>、<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/openethereum/openethereum">OpenEthereum</a>、<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://nethermind.io/">Nethermind</a>、<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://pegasys.tech/solutions/hyperledger-besu/">Besu</a>等，任意选择一个客户端均可搭建节点加入到eth1的网络当中。</p><p>这里用Geth举例。以下命令安装Geth</p><pre data-type="codeBlock" text="sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install ethereum
"><code>sudo add<span class="hljs-operator">-</span>apt<span class="hljs-operator">-</span>repository <span class="hljs-operator">-</span>y ppa:ethereum<span class="hljs-operator">/</span>ethereum
sudo apt<span class="hljs-operator">-</span>get update
sudo apt<span class="hljs-operator">-</span>get install ethereum
</code></pre><p>配置geth，这里演示的是测试网goerli。</p><pre data-type="codeBlock" text="geth --goerli --syncmode &quot;snap&quot; dumpconfig &gt; goerli.toml
"><code>geth <span class="hljs-operator">-</span><span class="hljs-operator">-</span>goerli <span class="hljs-operator">-</span><span class="hljs-operator">-</span>syncmode <span class="hljs-string">"snap"</span> dumpconfig <span class="hljs-operator">></span> goerli.toml
</code></pre><p>会在当前目录生成一个goerli.toml文件，需要vim进去修改相应的配置。主要修改下面配置。</p><pre data-type="codeBlock" text="[Eth]
NetworkId = 5      ## 注意goerli的id是5 
SyncMode = &quot;snap&quot;   ##硬盘大可以用full，快速的话用snap
[Node]
DataDir = &quot;/home/data/goerli&quot;  ##节点数据存储地址
HTTPHost = &quot;0.0.0.0&quot;           ##任何ip都可访问  
HTTPPort = 8545              
HTTPVirtualHosts = [&quot;0.0.0.0&quot;]
HTTPModules = [&quot;net&quot;, &quot;web3&quot;, &quot;eth&quot;]
AuthAddr = &quot;localhost&quot;
AuthPort = 8551
AuthVirtualHosts = [&quot;localhost&quot;]
WSHost = &quot;&quot;
WSPort = 8546
WSModules = [&quot;net&quot;, &quot;web3&quot;, &quot;eth&quot;]
GraphQLVirtualHosts = [&quot;localhost&quot;]
"><code><span class="hljs-section">[Eth]</span>
<span class="hljs-attr">NetworkId</span> = <span class="hljs-number">5</span>      <span class="hljs-comment">## 注意goerli的id是5 </span>
<span class="hljs-attr">SyncMode</span> = <span class="hljs-string">"snap"</span>   <span class="hljs-comment">##硬盘大可以用full，快速的话用snap</span>
<span class="hljs-section">[Node]</span>
<span class="hljs-attr">DataDir</span> = <span class="hljs-string">"/home/data/goerli"</span>  <span class="hljs-comment">##节点数据存储地址</span>
<span class="hljs-attr">HTTPHost</span> = <span class="hljs-string">"0.0.0.0"</span>           <span class="hljs-comment">##任何ip都可访问  </span>
<span class="hljs-attr">HTTPPort</span> = <span class="hljs-number">8545</span>              
<span class="hljs-attr">HTTPVirtualHosts</span> = [<span class="hljs-string">"0.0.0.0"</span>]
<span class="hljs-attr">HTTPModules</span> = [<span class="hljs-string">"net"</span>, <span class="hljs-string">"web3"</span>, <span class="hljs-string">"eth"</span>]
<span class="hljs-attr">AuthAddr</span> = <span class="hljs-string">"localhost"</span>
<span class="hljs-attr">AuthPort</span> = <span class="hljs-number">8551</span>
<span class="hljs-attr">AuthVirtualHosts</span> = [<span class="hljs-string">"localhost"</span>]
<span class="hljs-attr">WSHost</span> = <span class="hljs-string">""</span>
<span class="hljs-attr">WSPort</span> = <span class="hljs-number">8546</span>
<span class="hljs-attr">WSModules</span> = [<span class="hljs-string">"net"</span>, <span class="hljs-string">"web3"</span>, <span class="hljs-string">"eth"</span>]
<span class="hljs-attr">GraphQLVirtualHosts</span> = [<span class="hljs-string">"localhost"</span>]
</code></pre><p>检查配置无问题之后可以运行起来，等待同步结束（大概需要几个小时，根据网络情况）</p><pre data-type="codeBlock" text="geth --goerli --config goerli.toml
"><code>geth <span class="hljs-operator">-</span><span class="hljs-operator">-</span>goerli <span class="hljs-operator">-</span><span class="hljs-operator">-</span>config goerli.toml
</code></pre><p>这里放上geth自动启动命令，无论重启系统，关停服务都可以自动重启，注意配置goerli.toml路径</p><pre data-type="codeBlock" text="#!/bin/bash
sudo apt-get install supervisor -y

cat &gt; /home/start_goerli.sh &lt;&lt;EOF
#!/bin/bash
source /etc/profile
ulimit -n 1048576
exec geth --goerli --config goerli.toml  &gt; /home/goerli_daemon.log 2&gt;&amp;1 
sleep 5
EOF
chmod  +x /home/start_goerli.sh

cat &gt; /etc/supervisor/conf.d/goerli.conf &lt;&lt;EOF
; /etc/supervisor/conf.d/goerli.conf

[program:goerli]
command=bash /home/start_goerli.sh
autostart=true
autorestart=true
startretries=5
numprocs=1
startsecs=0
process_name=%(program_name)s_%(process_num)02d
stderr_logfile=/var/log/supervisor/%(program_name)s_stderr.log
stderr_logfile_maxbytes=10MB
stdout_logfile=/var/log/supervisor/%(program_name)s_stdout.log
stdout_logfile_maxbytes=10MB
EOF
chmod  +r /etc/supervisor/conf.d/goerli.conf

##启动
supervisorctl reread
supervisorctl update
supervisorctl reload goerli

#停掉
supervisorctl stop goerli
"><code>#<span class="hljs-operator">!</span><span class="hljs-operator">/</span>bin<span class="hljs-operator">/</span>bash
sudo apt<span class="hljs-operator">-</span>get install supervisor <span class="hljs-operator">-</span>y

cat <span class="hljs-operator">></span> <span class="hljs-operator">/</span>home<span class="hljs-operator">/</span>start_goerli.sh <span class="hljs-operator">&#x3C;</span><span class="hljs-operator">&#x3C;</span>EOF
#<span class="hljs-operator">!</span><span class="hljs-operator">/</span>bin<span class="hljs-operator">/</span>bash
source <span class="hljs-operator">/</span>etc<span class="hljs-operator">/</span>profile
ulimit <span class="hljs-operator">-</span>n <span class="hljs-number">1048576</span>
exec geth <span class="hljs-operator">-</span><span class="hljs-operator">-</span>goerli <span class="hljs-operator">-</span><span class="hljs-operator">-</span>config goerli.toml  <span class="hljs-operator">></span> <span class="hljs-operator">/</span>home<span class="hljs-operator">/</span>goerli_daemon.log <span class="hljs-number">2</span><span class="hljs-operator">></span><span class="hljs-operator">&#x26;</span><span class="hljs-number">1</span> 
sleep <span class="hljs-number">5</span>
EOF
chmod  <span class="hljs-operator">+</span>x <span class="hljs-operator">/</span>home<span class="hljs-operator">/</span>start_goerli.sh

cat <span class="hljs-operator">></span> <span class="hljs-operator">/</span>etc<span class="hljs-operator">/</span>supervisor<span class="hljs-operator">/</span>conf.d/goerli.conf <span class="hljs-operator">&#x3C;</span><span class="hljs-operator">&#x3C;</span>EOF
; <span class="hljs-operator">/</span>etc<span class="hljs-operator">/</span>supervisor<span class="hljs-operator">/</span>conf.d/goerli.conf

[program:goerli]
command<span class="hljs-operator">=</span>bash <span class="hljs-operator">/</span>home<span class="hljs-operator">/</span>start_goerli.sh
autostart<span class="hljs-operator">=</span><span class="hljs-literal">true</span>
autorestart<span class="hljs-operator">=</span><span class="hljs-literal">true</span>
startretries<span class="hljs-operator">=</span><span class="hljs-number">5</span>
numprocs<span class="hljs-operator">=</span><span class="hljs-number">1</span>
startsecs<span class="hljs-operator">=</span><span class="hljs-number">0</span>
process_name<span class="hljs-operator">=</span><span class="hljs-operator">%</span>(program_name)s_<span class="hljs-operator">%</span>(process_num)02d
stderr_logfile<span class="hljs-operator">=</span><span class="hljs-operator">/</span><span class="hljs-keyword">var</span><span class="hljs-operator">/</span>log<span class="hljs-operator">/</span>supervisor<span class="hljs-operator">/</span><span class="hljs-operator">%</span>(program_name)s_stderr.log
stderr_logfile_maxbytes<span class="hljs-operator">=</span>10MB
stdout_logfile<span class="hljs-operator">=</span><span class="hljs-operator">/</span><span class="hljs-keyword">var</span><span class="hljs-operator">/</span>log<span class="hljs-operator">/</span>supervisor<span class="hljs-operator">/</span><span class="hljs-operator">%</span>(program_name)s_stdout.log
stdout_logfile_maxbytes<span class="hljs-operator">=</span>10MB
EOF
chmod  <span class="hljs-operator">+</span>r <span class="hljs-operator">/</span>etc<span class="hljs-operator">/</span>supervisor<span class="hljs-operator">/</span>conf.d/goerli.conf

##启动
supervisorctl reread
supervisorctl update
supervisorctl reload goerli

#停掉
supervisorctl stop goerli
</code></pre><h4 id="h-eth2" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">ETH2节点</h4><p>共识客户端也有很多 <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.gg/prysmaticlabs">Prysm</a>、<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.gg/nSmEH3qgFv">Nimbus</a>、<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.gg/cyAszAh">Lighthouse</a>、<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.gg/7hPv2T6">Teku</a>、<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.gg/aMxzVcr">Lodestar</a>。这里选择Prysm做演示。（如果快速同步需要从源码编译，直接安装不行）</p><p>安装Prysm</p><pre data-type="codeBlock" text="mkdir prysm &amp;&amp; cd prysm
curl https://raw.githubusercontent.com/prysmaticlabs/prysm/master/prysm.sh --output prysm.sh &amp;&amp; chmod +x prysm.sh
wget https://github.com/eth-clients/eth2-networks/raw/master/shared/prater/genesis.ssz
"><code><span class="hljs-built_in">mkdir</span> prysm &#x26;&#x26; <span class="hljs-built_in">cd</span> prysm
curl https://raw.githubusercontent.com/prysmaticlabs/prysm/master/prysm.sh --output prysm.sh &#x26;&#x26; <span class="hljs-built_in">chmod</span> +x prysm.sh
wget https://github.com/eth-clients/eth2-networks/raw/master/shared/prater/genesis.ssz
</code></pre><p>创建本地配置文件prysm.yaml，文件内容如下</p><pre data-type="codeBlock" text="datadir: &apos;/home/data/prysm&apos; ##节点数据存储位置
http-web3provider: &quot;http://127.0.0.1:8545&quot;  ## eth1节点本地ip和端口
genesis-state: &quot;/home/data/prysm/genesis.ssz&quot; ##下载的创世文件路径
suggested-fee-recipient: &quot;0x6ead271a45acc328af22b369870509471a46f59d&quot; ##fee接收钱包地址
grpc-gateway-port: &quot;7500&quot;
grpc-gateway-host: &quot;0.0.0.0&quot;
"><code>datadir: <span class="hljs-string">'/home/data/prysm'</span> ##节点数据存储位置
http<span class="hljs-operator">-</span>web3provider: <span class="hljs-string">"http://127.0.0.1:8545"</span>  ## eth1节点本地ip和端口
genesis<span class="hljs-operator">-</span>state: <span class="hljs-string">"/home/data/prysm/genesis.ssz"</span> ##下载的创世文件路径
suggested<span class="hljs-operator">-</span>fee<span class="hljs-operator">-</span>recipient: <span class="hljs-string">"0x6ead271a45acc328af22b369870509471a46f59d"</span> ##fee接收钱包地址
grpc<span class="hljs-operator">-</span>gateway<span class="hljs-operator">-</span>port: <span class="hljs-string">"7500"</span>
grpc<span class="hljs-operator">-</span>gateway<span class="hljs-operator">-</span>host: <span class="hljs-string">"0.0.0.0"</span>
</code></pre><pre data-type="codeBlock" text="## 启动并且同步eth2节点
./prysm.sh beacon-chain --prater --config-file=prysm.yaml
"><code>## 启动并且同步eth2节点
./prysm.sh beacon<span class="hljs-operator">-</span>chain <span class="hljs-operator">-</span><span class="hljs-operator">-</span>prater <span class="hljs-operator">-</span><span class="hljs-operator">-</span>config<span class="hljs-operator">-</span>file<span class="hljs-operator">=</span>prysm.yaml
</code></pre><p>如果想要快速同步需要拿到checkpoint的数据，可以从infura拿到api然后下载，</p><pre data-type="codeBlock" text="从源码编译之后
go run github.com/prysmaticlabs/prysm/cmd/prysmctl checkpoint save --beacon-node-host=API
然后在配置文件中加入下载好的文件的路径即可。
checkpoint-block: &quot;/home/data/prysm/block_prater_altair_3303360-0xff191dd6f5eb096171344c94f88b708f30baa443404363ae25359e6ddcb86812.ssz&quot;
checkpoint-state: &quot;/home/data/prysm/state_prater_altair_3303360-0xfe5ab02a48e6af7f90e0cf8d995590b216f1efebca115fe3e3df747b81d530ed.ssz&quot;
"><code>从源码编译之后
go run github.com/prysmaticlabs<span class="hljs-operator">/</span>prysm<span class="hljs-operator">/</span>cmd<span class="hljs-operator">/</span>prysmctl checkpoint save <span class="hljs-operator">-</span><span class="hljs-operator">-</span>beacon<span class="hljs-operator">-</span>node<span class="hljs-operator">-</span>host<span class="hljs-operator">=</span>API
然后在配置文件中加入下载好的文件的路径即可。
checkpoint<span class="hljs-operator">-</span><span class="hljs-built_in">block</span>: <span class="hljs-string">"/home/data/prysm/block_prater_altair_3303360-0xff191dd6f5eb096171344c94f88b708f30baa443404363ae25359e6ddcb86812.ssz"</span>
checkpoint<span class="hljs-operator">-</span>state: <span class="hljs-string">"/home/data/prysm/state_prater_altair_3303360-0xfe5ab02a48e6af7f90e0cf8d995590b216f1efebca115fe3e3df747b81d530ed.ssz"</span>
</code></pre><h4 id="h-" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">验证者</h4><p>ETH2节点同步好之后即可做验证者。</p><p>1.需要用stakeing deposit生成一个验证器密钥，下载地址如下</p><div data-type="embedly" src="https://github.com/ethereum/staking-deposit-cli" data="{&quot;provider_url&quot;:&quot;https://github.com&quot;,&quot;description&quot;:&quot;⚠️ [Deprecated] ⚠️ Secure key generation for deposits - ethereum/staking-deposit-cli&quot;,&quot;title&quot;:&quot;GitHub - ethereum/staking-deposit-cli: ⚠️ [Deprecated] ⚠️ Secure key generation for deposits&quot;,&quot;author_name&quot;:&quot;ethereum&quot;,&quot;thumbnail_width&quot;:1200,&quot;url&quot;:&quot;https://github.com/ethereum/staking-deposit-cli&quot;,&quot;thumbnail_url&quot;:&quot;https://storage.googleapis.com/papyrus_images/5658390c4181e9ced7da7065cc8a0929f9fad003a3f90471379128e45f485103.png&quot;,&quot;author_url&quot;:&quot;https://github.com/ethereum&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;GitHub&quot;,&quot;type&quot;:&quot;link&quot;,&quot;thumbnail_height&quot;:600,&quot;image&quot;:{&quot;img&quot;:{&quot;width&quot;:1200,&quot;height&quot;:600,&quot;src&quot;:&quot;https://storage.googleapis.com/papyrus_images/5658390c4181e9ced7da7065cc8a0929f9fad003a3f90471379128e45f485103.png&quot;}}}" format="small"><link rel="preload" as="image" href="https://storage.googleapis.com/papyrus_images/5658390c4181e9ced7da7065cc8a0929f9fad003a3f90471379128e45f485103.png"/><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://github.com/ethereum/staking-deposit-cli" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>GitHub - ethereum/staking-deposit-cli: ⚠️ [Deprecated] ⚠️ Secure key generation for deposits</h2><p>⚠️ [Deprecated] ⚠️ Secure key generation for deposits - ethereum/staking-deposit-cli</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://github.com</span></div><img src="https://storage.googleapis.com/papyrus_images/5658390c4181e9ced7da7065cc8a0929f9fad003a3f90471379128e45f485103.png"/></div></a></div></div><p>./deposit new-mnemonic --num_validators=1 --mnemonic_language=english --chain=prater</p><p>2.导入到prysm账户里面</p><p>./prysm.sh validator accounts import --keys-dir= --prater 3.在官方平台进行eth1链上的存款存入,这个时候需要32个测试ETH，可以去各种水龙头领也可以去社区请求支援。 <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://prater.launchpad.ethereum.org/en/overview">https://prater.launchpad.ethereum.org/en/overview</a> 4.运行验证者 ./prysm.sh validator --wallet-dir= --prater <strong>总结： 对于小白用户难度极高，非兴趣爱好者请勿尝试，其中的各种坑不少，文档更新不及时。但是如果研究明白搭建其他任意链节点都相对容易，很多激励测试网也是搭建节点的玩法，熊市多学习总会有用的～</strong></p>]]></content:encoded>
            <author>daniel-32@newsletter.paragraph.com (Daniel )</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/f39f0b5ac64aac6b9f86cd1624899ab1bd41b26c5ca539ccd470522dcd1d317b.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[如何尽可能的保证钱包安全,带你囤币穿越熊市]]></title>
            <link>https://paragraph.com/@daniel-32/HZ8gyHRDiKIIdaxgvWDo</link>
            <guid>HZ8gyHRDiKIIdaxgvWDo</guid>
            <pubDate>Mon, 13 Jun 2022 06:11:15 GMT</pubDate>
            <description><![CDATA[手把手教学怎么尽可能的保证钱包安全 非常适合囤币党如何保护自己的币 理论小知识：什么是助记词，私钥，钱包 现在常见的钱包基本上都是用助记词生成私钥，私钥可以计算出公钥，进而转化成钱包地址。常见公链钱包的助记词基本上都是根据BTC的BIP-32协议，由12-24个单词组成，然后生成HD钱包。HD钱包区别于单个私钥钱包不同的点在于，可以根据助记词+derivation_path生成多个钱包，这也是为什么钱包软件可以直接根据一个身份钱包直接生成多个钱包的逻辑。 基于这些理论，几乎所有公链都可以用同一个助记词去生成多个钱包，也就是有一个助记词几乎通用所有公链，保管好一个助记词即可玩遍所有链。在这种情况下如果想多账号撸空投，多开测试账号等，不需要记住额外的助记词，专门弄一个薅羊毛助记词，就可以适用所有场景。 理论小知识：什么硬件钱包 硬件钱包一般是将私钥存储在安全的硬件设备中，与网络计算机等环境隔离起来，使用过程中就是硬件钱包用私钥负责消息发送的签名，私钥不外漏，直接将签名好的消息发送到计算机然后上链。硬件钱包一般都有专用的芯片级加密私钥，在私钥保管上是绝对安全，但是区块链安全问题不仅仅是...]]></description>
            <content:encoded><![CDATA[<p><em>手把手教学怎么尽可能的保证钱包安全</em></p><p><em>非常适合囤币党如何保护自己的币</em></p><p><strong>理论小知识：什么是助记词，私钥，钱包</strong></p><p>现在常见的钱包基本上都是用助记词生成私钥，私钥可以计算出公钥，进而转化成钱包地址。常见公链钱包的助记词基本上都是根据BTC的BIP-32协议，由12-24个单词组成，然后生成HD钱包。HD钱包区别于单个私钥钱包不同的点在于，可以根据助记词+derivation_path生成多个钱包，这也是为什么钱包软件可以直接根据一个身份钱包直接生成多个钱包的逻辑。</p><p>基于这些理论，几乎所有公链都可以用同一个助记词去生成多个钱包，也就是有一个助记词几乎通用所有公链，保管好一个助记词即可玩遍所有链。在这种情况下如果想多账号撸空投，多开测试账号等，不需要记住额外的助记词，专门弄一个薅羊毛助记词，就可以适用所有场景。</p><p><strong>理论小知识：什么硬件钱包</strong></p><p>硬件钱包一般是将私钥存储在安全的硬件设备中，与网络计算机等环境隔离起来，使用过程中就是硬件钱包用私钥负责消息发送的签名，私钥不外漏，直接将签名好的消息发送到计算机然后上链。硬件钱包一般都有专用的芯片级加密私钥，在私钥保管上是绝对安全，但是区块链安全问题不仅仅是私钥管理，所以也不能保证绝对安全。</p><p><strong>硬件钱包推荐</strong></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.ledger.com/">Ledger</a> x：如果想玩的链多的话，并且链上交互很多，推荐Ledger x，单个硬件钱包能装很多个应用，可以同时支持很多条链，基本上有一个Ledger x不用担心玩链的钱包问题了。也有手机和桌面客户端，也支持各种浏览器钱包。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.ledger.com/">Ledger</a> s: 支持同时安全2-3个应用，价格便宜，适合玩的链少，链上交互也比较方便。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://onekey.so/">oneKey</a> : 国内购买方便，支持evm，有自己的应用和钱包，对链上交互友好，非evm公链支持较少。链玩的少可以考虑这款。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://imkey.im/">imkey</a>： imtoken的硬件钱包，国内购买也方便，适合当冷钱包。</p><p><strong>总结：硬件钱包有很多款，适合自己的才是最好的。但是购买硬件钱包一定要注意风险，只能去官网购买，严禁去淘宝等过一手平台购买。像Ledger这种无国内官方渠道的，需要走海淘自己转运。硬件钱包到手后需要确保无拆封，一般都有防拆封的包装，到自己手上一定要是原装。</strong></p><p><strong>理论小知识：什么是冷钱包,热钱包</strong></p><p>通俗来讲，热钱包就是将私钥存储在手机电脑等设备中，很方便就能进行交互，冷钱包就是私钥离线储存，无论你是写在纸上，使用硬件钱包都算。但是我个人觉得，这样划分不一定有效。如果要保证绝对安全，最有效的冷热钱包之分应该是这样的</p><p>冷钱包： 私钥，助记词不联网，<strong>没有公链上面的任何授权，不进行任何合约交互等，仅作为当前公链币的存储，和必要时的转账</strong>。</p><p><strong>如何尽可能保证币的安全方法：</strong></p><p><strong>钱包分级：</strong> 将自己手上的钱包进行分级，每一级别只能干这个级别的事情，并且严格执行。举例说明，我一般分为这几种，冷钱包，主要热钱包，小钱包，测试钱包。</p><p><strong>冷钱包</strong>上面已经说明了，基本上就是存币用的，而且只存原生币，一般我会选择硬件钱包作为冷钱包，然后币存进去之后直接锁在保险柜，正常情况也不会怎么使用，基本上放里面拿个几年轻轻松松。</p><p>大<strong>热钱包</strong>，这个可能就是与链上大额交互比较多，或者存一些常用的高价值的币，这个时候我一般也是使用硬件钱包，而且只做安全靠谱的交互，一般来说就是一些大dapp项目，然后在使用完之后，也会取消所有合约授权。</p><p><strong>小钱包</strong>，这个一般就放价值不多的币，直接使用私钥钱包，方便交互，在一些新项目试试水，临时的小金额交易，做做各种测试交互之类的。</p><p><strong>测试钱包</strong>，这个我一般就用助记词生成一堆钱包，成百上千个随便用用，看到好的测试网撸空投之类的，也会批量去操作一波，保管好助记词即可。</p><p><strong>钱包软件： 尽可能选择知名度高，用户多的钱包。大资金量的钱包不要轻易尝试新钱包软件等。</strong></p><p><strong>助记词保管：</strong></p><p>硬件钱包的助记词尽量记在纸上（或者有专用的助记词保管钢板），建议将同一个助记词保管两份，分在两个不同的地方保管。最重要的钱包可以少记录1-2个单词，然后用脑子记住剩下的，或者打乱1-2个顺序，脑子记住正确顺序，或者用自己的算法转化，反正只要自己脑子能记住一部分，就更加的安全了。（如果容易忘事建议不要这么操作）</p><p>因为做了钱包分级，所以可以根据自己的钱包来用不同的方式管理助记词，钱包安全级别越高，助记词越需要安全的保管。像测试钱包助记词，一般来说保存在电脑上都行。</p><p><strong>注意：</strong></p><p><strong>1.除了刚生成钱包或者导入钱包的时候，任何地方都不要输入自己的助记词，凡是要求输入助记词的网站一律诈骗。</strong></p><p><strong>2.导入钱包输入助记词不能用复制粘贴等，必须手打。现在各种app都能读取剪贴版，在复制的过程中基本已经泄漏。私钥同理。</strong></p><p>3.纸质助记词别忘了放哪了。放的地方也要保证安全。</p><p><strong>链上安全：</strong></p><p>链上没有绝对的安全，只要操作就可能有风险。但是我们可以尽可能的降低风险。在做好钱包分级之后，如果被盗，损失已经可以降到最低。</p><ol><li><p>每次点链接进网站确保是官方网站，不要乱点链接，点进链接不要乱签名，不要乱授权。</p></li><li><p>乱空投的各种币，NFT等不要关注，有些貔貅币，偷授权币等等，不贪就不会被黑，正规空投一般都有正规的项目方，官方规则等。</p></li><li><p>合约交互，只玩自己熟悉切确保安全的项目，科学家可以自己大致过一下合约，合约不开源不碰，开源就算看一遍也可能会有坑，没法保证百分百安全。</p></li><li><p>尽可能的降低杠杆和没有杠杆，无借贷，不爆仓，少玩defi更不要玩cefi。</p></li><li><p>检查自己的各种链上放的资产，stake，lp等等能取出就取出，过桥资产都回原生链。</p></li><li><p>每当熊市会有各种幺蛾子出来，保护好自己的币才是最重要的，不要贪收益。</p></li></ol><p><strong>交易所安全：</strong></p><p>交易所不要放大量资金，做一下资金配置，一般熊市少操作，所以也不需要那么多钱放交易所。尽量认准大所，二线交易所资金也尽可能的少放。一定要配置google两步验证，如果可以的话，两个手机，一个手机交易所，一个手机负责谷歌验证码。我一般的想法是，如果这个交易所跑路了，会不会有极大的损失，损失多少你能够接受。这样放多少资金在交易所自己就能评估了。</p><p>总结： 世上没有绝对的安全，但是可以尽可能的降低风险，不被黑被盗留有本金才有更多的可能性。留得青山在，不怕没柴烧。</p><div data-type="embedly" src="https://twitter.com/Daniel_eth2" data="{&quot;provider_url&quot;:&quot;https://twitter.com&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;title&quot;:&quot;JavaScript is not available.&quot;,&quot;url&quot;:&quot;https://twitter.com/Daniel_eth2&quot;,&quot;html&quot;:&quot;&lt;a class=\&quot;twitter-timeline\&quot; href=\&quot;https://twitter.com/Daniel_eth2?ref_src=twsrc%5Etfw\&quot;&gt;Tweets by Daniel_eth2&lt;/a&gt;\n&lt;script async src=\&quot;https://platform.twitter.com/widgets.js\&quot; charset=\&quot;utf-8\&quot;&gt;&lt;/script&gt;&quot;,&quot;provider_name&quot;:&quot;Twitter&quot;,&quot;cache_age&quot;:3153600000,&quot;type&quot;:&quot;rich&quot;}" format="iframe"></div>]]></content:encoded>
            <author>daniel-32@newsletter.paragraph.com (Daniel )</author>
        </item>
        <item>
            <title><![CDATA[一文教懂小白也能轻松参加的IronFish有奖测试网（公链明牌空投）]]></title>
            <link>https://paragraph.com/@daniel-32/ironfish</link>
            <guid>jv6Png4PO17r26wawSJi</guid>
            <pubDate>Sun, 29 May 2022 08:32:38 GMT</pubDate>
            <description><![CDATA[看完此文你能收获什么 6.2号之后更新版本～需要升级一下。（升级请看最后） 了解服务器基础知识，理解节点运行，一定能收获IronFish空投。 运行节点有服务器成本，非投资建议DYOR IronFish背景 Iron Fish 由 Microsoft、Tilt 和 AirBnb 的前工程师 Elena Nadolinski 领导,A16z领投链接。 基于零知识证明的隐私公链。什么是IronFish激励测试网IronFish测试网将从 2022 年 5 月 10 日 @ 12:00 PDT 开始运行，直到 Iron Fish 节点稳定、功能完整并准备好进入主网 🎉，参与节点搭建或者POW爆块之后交易都可以获取积分，官方已经为 $IRON 预留了一部分创世区块，专门用于受激励的测试网用户。符合资格后，第一阶段和第二阶段积分将在 $IRON 主网启动时按比例转换为该区块的代币。 说简单点，就是参与一定有空投，节点运行每12个小时可以获得10分，pow根据算力来获得测试网代币，然后刷交易获取积分。最后上线根据积分转化成主网代币。官方原版教程懂编程基础的可以直接去看原版官方教程，不需要用...]]></description>
            <content:encoded><![CDATA[<p><strong>看完此文你能收获什么</strong></p><p>6.2号之后更新版本～需要升级一下。（升级请看最后）</p><p>了解服务器基础知识，理解节点运行，一定能收获IronFish空投。</p><p>运行节点有服务器成本，非投资建议DYOR</p><p><strong>IronFish背景</strong></p><p>Iron Fish 由 Microsoft、Tilt 和 AirBnb 的前工程师 Elena Nadolinski 领导,<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://a16z.com/2021/11/30/investing-in-iron-fish/">A16z领投链接</a>。</p><p>基于零知识证明的隐私公链。</p><h4 id="h-ironfish" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">什么是IronFish激励测试网</h4><p>IronFish测试网将从 2022 年 5 月 10 日 @ 12:00 PDT 开始运行，直到 Iron Fish 节点稳定、功能完整并准备好进入主网 🎉，参与节点搭建或者POW爆块之后交易都可以获取积分，官方已经为 $IRON 预留了一部分创世区块，专门用于受<strong>激励</strong>的测试网用户。符合资格后，第一阶段和第二阶段积分将在 $IRON 主网启动时按比例转换为该区块的代币。</p><p><strong>说简单点，就是参与一定有空投，节点运行每12个小时可以获得10分，pow根据算力来获得测试网代币，然后刷交易获取积分。最后上线根据积分转化成主网代币。</strong></p><h4 id="h-" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">官方原版教程</h4><p>懂编程基础的可以直接去看原版官方教程，不需要用一键脚本。</p><div data-type="embedly" src="https://ironfish.network/docs/onboarding/installation-iron-fish" data="{&quot;provider_url&quot;:&quot;https://ironfish.network&quot;,&quot;description&quot;:&quot;Install Node.js LTS (on Windows, choose 64-bit/x64). On Mac and Linux, You can also install Node.js through nvm. On Windows, be sure to check \&quot;Also install required tools\&quot; during installation. On Linux, run the following to install the build-essential package: sudo apt update sudo apt install build-essential Next, install a command-line git client.&quot;,&quot;title&quot;:&quot;Iron Fish Dev Docs | Install Iron Fish - NPM&quot;,&quot;url&quot;:&quot;https://ironfish.network/developers/documentation/install-npm&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;Ironfish&quot;,&quot;type&quot;:&quot;link&quot;}" format="small"><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://ironfish.network/docs/onboarding/installation-iron-fish" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>Iron Fish Dev Docs | Install Iron Fish - NPM</h2><p>Install Node.js LTS (on Windows, choose 64-bit/x64). On Mac and Linux, You can also install Node.js through nvm. On Windows, be sure to check &quot;Also install required tools&quot; during installation. On Linux, run the following to install the build-essential package: sudo apt update sudo apt install build-essential Next, install a command-line git client.</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://ironfish.network</span></div></div></a></div></div><h4 id="h-" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">小白手把手教程</h4><p>1.首先需要去官方网站注册账号，填入邮箱之后会发送验证信息到邮箱，然后进邮箱登陆.</p><p>然后需要填写一些资料，都比较常规。<strong>注意Graffiti</strong>* 这个就是你的账户节点绑定的name，后面运行脚本需要填入这个。看到下图这个界面就代表注册ok。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://testnet.ironfish.network/login">https://testnet.ironfish.network/login</a></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/844e4f9e167a1b847f1c4ac4294e884357a080eb585cdfc9fb113ca66b0c6e00.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><strong>2</strong>.需要购买服务器，必须海外服务器（不然会很慢），为了避嫌做推广就自己看着买了。需要<strong>Ubuntu</strong>系统，系统版本18.04或者20都行。</p><p>说下<strong>硬件要求</strong>为了在激励测试网上运行 Ironfish 节点，官方建议如下，实际测试下来差不多最低要求这个配置。</p><ul><li><p>CPU: 4 核</p></li><li><p>内存：8GiB RAM</p></li></ul><p><strong>3</strong>.脚本教程来了</p><p>举例说明，我现在购买好了一台服务器,ssh连接上服务器，（不懂Google）。一键脚本已经<strong>开源（不要再来跟我说安全性了，有疑惑的自己看代码，代码绝对安全无后门）</strong>，连接上服务器之后输入底下命令。</p><pre data-type="codeBlock" text="## 第一步获取root权限,下载脚本授权
sudo su 
cd ~ &amp;&amp; wget https://github.com/8hfq/Daniel-onekey-install/releases/download/1.1.0/ironfish-daniel.sh &amp;&amp; chmod +x ironfish-daniel.sh
"><code><span class="hljs-comment">## 第一步获取root权限,下载脚本授权</span>
sudo su 
<span class="hljs-built_in">cd</span> ~ &#x26;&#x26; wget https://github.com/8hfq/Daniel-onekey-install/releases/download/1.1.0/ironfish-daniel.sh &#x26;&#x26; <span class="hljs-built_in">chmod</span> +x ironfish-daniel.sh
</code></pre><pre data-type="codeBlock" text="## 第一次执行脚本安装docker 输入
./ironfish-daniel.sh
输入1执行，等待一会。出现docker 安装完成就好了。
"><code>## 第一次执行脚本安装docker 输入
./ironfish<span class="hljs-operator">-</span>daniel.sh
输入<span class="hljs-number">1</span>执行，等待一会。出现docker 安装完成就好了。
</code></pre><pre data-type="codeBlock" text="## 再次执行脚本安装Ironfish
./ironfish-daniel.sh
输入数字2，之后手动输入官方注册的ID，然后输入Y确认，等待出现启动成功！
"><code>## 再次执行脚本安装Ironfish
./ironfish<span class="hljs-operator">-</span>daniel.sh
输入数字<span class="hljs-number">2</span>，之后手动输入官方注册的ID，然后输入Y确认，等待出现启动成功！
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/5a87c1de15fbbae0d25452688e4fa3a916fe57ac5eec2c2accf628edcacdd5c4.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>再次执行脚本输入3</p><pre data-type="codeBlock" text="再次执行脚本输入3
./ironfish-daniel.sh
"><code>再次执行脚本输入<span class="hljs-number">3</span>
./ironfish<span class="hljs-operator">-</span>daniel.sh
</code></pre><p>检查blockGraffiti 是否为你的节点名字，enableTelemetry 是true。</p><p>Syncer显示SYNCING，Telemetry显示STARTED 。整体如下图，节点搭建完毕。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a631e1fd0651462d3bee816c6ddb301116eac15d344a2bf5cf4693668206d062.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><h3 id="h-62" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">6.2号升级</h3><p>如果你的脚本是在6.2号之前运行的，请注意需要升级。如果是6.2号之后跑起来的不需要升级。输入一下命令升级完成。如果涉及到pow需要备份钱包私钥！重要❗️</p><pre data-type="codeBlock" text="sudo su
cd ~ &amp;&amp; wget -O ironfish-daniel.sh https://github.com/8hfq/Daniel-onekey-install/releases/download/1.1.0/ironfish-daniel.sh &amp;&amp; chmod +x ironfish-daniel.sh
./ironfish-daniel.sh
然后输入4，填入要求输入的内容升级完成。
"><code>sudo su
cd <span class="hljs-operator">~</span> <span class="hljs-operator">&#x26;</span><span class="hljs-operator">&#x26;</span> wget <span class="hljs-operator">-</span>O ironfish<span class="hljs-operator">-</span>daniel.sh https:<span class="hljs-comment">//github.com/8hfq/Daniel-onekey-install/releases/download/1.1.0/ironfish-daniel.sh &#x26;&#x26; chmod +x ironfish-daniel.sh</span>
./ironfish<span class="hljs-operator">-</span>daniel.sh
然后输入<span class="hljs-number">4</span>，填入要求输入的内容升级完成。
</code></pre><p><strong>常见的问题</strong></p><ol><li><p>如果重新连接ssh之后不知道怎么找到脚本，输入以下命令即可</p><pre data-type="codeBlock" text="sudo su 
cd ~
"><code>sudo su 
<span class="hljs-built_in">cd</span> ~
</code></pre></li></ol><p><strong>2. 怎么获取积分</strong></p><p><strong>第一种</strong> 节点如果正常运行每12小时可以获得10积分，在官方可以直接查看</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/4d7fe4a14949a00dd3e665d4bed07577942ddc005bd7d4f291c97894264f2923.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><strong>第二种 参与pow挖矿，需要cpu算力，小白玩家不建议参与！</strong></p><p>这个是高成本的玩法，pow参与挖矿爆块获取代币之后刷交易就可以领积分，投入风险收益都不太确定。<s>我这里有完整的多冗余节点和大算力设备，做了个自用矿池，有需要加入我的矿池一起来爆块的可以联系我～支持国内服务器哦～</s></p><p><strong>3.关于钱包账号问题</strong></p><p>启动node会默认创建钱包，以下是对钱包的操作命令，默认钱包名字是default，也就是如果你要导出钱包私钥就输入下面命令。建议导出备用。</p><pre data-type="codeBlock" text="# 查看钱包
docker exec -it node bash -c &quot;ironfish accounts:list&quot;
# 创建新钱包
docker exec -it node bash -c &quot;ironfish accounts:create&quot;
# 设置为默认钱包
docker exec -it node bash -c &quot;ironfish accounts:use 钱包名称&quot;
# 导出钱包密钥
docker exec -it node bash -c &quot;ironfish accounts:export 钱包名称&quot;
# 导入钱包密钥
docker exec -it node bash -c &quot;ironfish accounts:import&quot;
"><code><span class="hljs-comment"># 查看钱包</span>
docker <span class="hljs-built_in">exec</span> -it node bash -c <span class="hljs-string">"ironfish accounts:list"</span>
<span class="hljs-comment"># 创建新钱包</span>
docker <span class="hljs-built_in">exec</span> -it node bash -c <span class="hljs-string">"ironfish accounts:create"</span>
<span class="hljs-comment"># 设置为默认钱包</span>
docker <span class="hljs-built_in">exec</span> -it node bash -c <span class="hljs-string">"ironfish accounts:use 钱包名称"</span>
<span class="hljs-comment"># 导出钱包密钥</span>
docker <span class="hljs-built_in">exec</span> -it node bash -c <span class="hljs-string">"ironfish accounts:export 钱包名称"</span>
<span class="hljs-comment"># 导入钱包密钥</span>
docker <span class="hljs-built_in">exec</span> -it node bash -c <span class="hljs-string">"ironfish accounts:import"</span>
</code></pre><h3 id="h-dyor" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">总结： 经过上次学习之后，我相信运行测试网节点对小白用户略微简单，配合上脚本基本快速简单操作，成本就是服务器成本，愿意动手的可以多尝试，明牌空投，但是有成本+空投收益未知，DYOR～</h3><p>只分享干货～各位大佬感兴趣关注一下呗。</p><div data-type="embedly" src="https://twitter.com/Daniel_eth2" data="{&quot;provider_url&quot;:&quot;https://twitter.com&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;title&quot;:&quot;JavaScript is not available.&quot;,&quot;url&quot;:&quot;https://twitter.com/Daniel_eth2&quot;,&quot;html&quot;:&quot;&lt;a class=\&quot;twitter-timeline\&quot; href=\&quot;https://twitter.com/Daniel_eth2?ref_src=twsrc%5Etfw\&quot;&gt;Tweets by Daniel_eth2&lt;/a&gt;\n&lt;script async src=\&quot;https://platform.twitter.com/widgets.js\&quot; charset=\&quot;utf-8\&quot;&gt;&lt;/script&gt;&quot;,&quot;provider_name&quot;:&quot;Twitter&quot;,&quot;cache_age&quot;:3153600000,&quot;type&quot;:&quot;rich&quot;}" format="iframe"></div>]]></content:encoded>
            <author>daniel-32@newsletter.paragraph.com (Daniel )</author>
        </item>
        <item>
            <title><![CDATA[一文读懂LayerZero及其应用Stargate跨链桥]]></title>
            <link>https://paragraph.com/@daniel-32/layerzero-stargate</link>
            <guid>kdOCQpz7hIH5CZSHg4ch</guid>
            <pubDate>Thu, 26 May 2022 13:48:50 GMT</pubDate>
            <description><![CDATA[本文会深入浅出讲解LayerZero的实现以及原理 让每个人都能读懂LayerZero，所有知识内容均截止2022/05/26 未发币，非投资建议！LayerZero是什么介绍： LayerZero是一种多链的互操作性协议，专门为跨链传递轻量级消息。理论上可以做到对任意支持智能合约的链进行消息传送，简单来讲就是如果我在A链发送一条消息，其中部分信息可以传递到B链上，让B链的智能合约来处理。更通俗的理解方式就是让不同的链能够相互沟通，这样数据也能够互通。LayerZero并不是一条公链或者是应用生态，而是更底层的一种协议，基于它可以开发出很多多链生态。背景：3月31日，LayerZero Labs以10亿美元估值获得1.35亿美元的A+轮投资。本轮由FTX Ventures、红杉资本与a16z领投，Coinbase Ventures、PayPal Ventures、Tiger Global和Uniswap Labs等参投。最近正以30亿美元估值进行融资谈判，FTX Ventures已承诺领投，但尚不清楚是否有其他投资者同意参投。如何实现多链通信首先需要弄明白三个概念： 1.Endp...]]></description>
            <content:encoded><![CDATA[<p><em>本文会深入浅出讲解LayerZero的实现以及原理</em></p><p><em>让每个人都能读懂LayerZero，所有知识内容均截止2022/05/26</em></p><p><em>未发币，非投资建议！</em></p><h3 id="h-layerzero" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">LayerZero是什么</h3><p><strong>介绍：</strong> LayerZero是一种多链的互操作性协议，专门为跨链传递轻量级消息。理论上可以做到对任意支持智能合约的链进行消息传送，简单来讲就是如果我在A链发送一条消息，其中部分信息可以传递到B链上，让B链的智能合约来处理。更通俗的理解方式就是让不同的链能够相互沟通，这样数据也能够互通。LayerZero并不是一条公链或者是应用生态，而是更底层的一种协议，基于它可以开发出很多多链生态。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/fae7554fd5a6a3ca38f16d1475040c62e44b9e83701deedbce92512bdf74bb90.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>背景：3月31日，LayerZero Labs以10亿美元估值获得1.35亿美元的A+轮投资。本轮由FTX Ventures、红杉资本与a16z领投，Coinbase Ventures、PayPal Ventures、Tiger Global和Uniswap Labs等参投。<strong>最近正以30亿美元估值</strong>进行融资谈判，FTX Ventures已承诺领投，但尚不清楚是否有其他投资者同意参投。</p><h4 id="h-" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">如何实现多链通信</h4><p>首先需要弄明白三个概念：</p><p>1.Endpoints:部署在每条链上的智能合约，消息传递的出入口。</p><p>2.Relayer:链下中继器，主要职责是将交易证明和用户支付费用从源链传递到目标链。</p><p>3.Oracle:链下预言机，主要职责是将通用的区块链数据（例如块头、交易回执等）从源链传递到目标链。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/7e04d06131707fe073233eb4d53342e0d512033670acfe0a2c85c5723866d58d.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>当我要跨链从A链传递到B链消息的时候，逻辑上是这么执行的：A链发送消息tA到A链上的某个跨链合约，合约调用A链的Endpoint，<strong>然后LayerZero通过要求两个独立的实体(Oracle和Relayer)确认交易，从而确保了跨链通信的有效性</strong>。假设两个实体没有共谋（一起做恶），如果<strong>Oracle</strong>可以为链A上包含tA的区块生成块头，<strong>Relayer</strong>可以独立生成该区块上tA的交易证明，以及块头和交易证明实际上是一致的，那么通信协议可以在保证tA在链A上稳定提交的前提下将消息传递给链B上的客户端。简单理解就是双重机制交叉验证，生态方可以自建Relayer加上引入第三方Oracle来确保了跨链消息的安全性，即避免了项目方单方面作恶，也避免了预言机单方面作恶。</p><p><strong>经济</strong>：每一次LayerZero跨链交易中用户需要一次性支付三笔费用。</p><ul><li><p>用于移动块数据的Oracle费用。</p></li><li><p>用于传递带有证明的消息的Relayer费用。</p></li><li><p>支付给LayerZero的开发费用，目前是用原生链代币支付。</p></li></ul><p><strong>现状分析</strong>：官方提供生产环境Relayer，但目前并未开源，后续开源的话任何人都可以部署自己的Relayer，即有可能成为节点公开市场竞价的方式，降低用户成本，提高服务质量。Oracle目前官方默认是Chainlink，也可以自己开发。而第三部分费用即有可能未来使用LayerZero官方代币支付。跨链消息上面目前仅支持EVM公链，未来会兼容Cosmos，Solana等。</p><p><strong>合约解决方案</strong>：</p><p>OFT20，全链ERC20代币方案，使用这个合约可以直接原生直接支持多链发币，类似于STG，跨链无需在某条链上抵押然后在另外一条链上生成衍生品，而是直接锁仓燃烧生成机制（不懂可以看下上一篇分析cBridge的文章）。</p><p>ONFT721，全链ERC721合约，允许在不同的链上铸造NFT。为确保两条链不能铸币相同<code>NFT的id</code>，每条链上的每个合约只允许<code>NFTid</code>在一定范围内铸造。</p><div data-type="embedly" src="https://github.com/LayerZero-Labs/solidity-examples" data="{&quot;provider_url&quot;:&quot;https://github.com&quot;,&quot;description&quot;:&quot;example contracts. Contribute to LayerZero-Labs/endpoint-v1-solidity-examples development by creating an account on GitHub.&quot;,&quot;title&quot;:&quot;GitHub - LayerZero-Labs/endpoint-v1-solidity-examples: example contracts&quot;,&quot;author_name&quot;:&quot;LayerZero-Labs&quot;,&quot;thumbnail_width&quot;:1200,&quot;url&quot;:&quot;https://github.com/LayerZero-Labs/endpoint-v1-solidity-examples&quot;,&quot;thumbnail_url&quot;:&quot;https://storage.googleapis.com/papyrus_images/a9e39763674aeed5e9841b30e226700300dae1f5ecc4c2ca3b6476fdba9c5a51.png&quot;,&quot;author_url&quot;:&quot;https://github.com/LayerZero-Labs&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;GitHub&quot;,&quot;type&quot;:&quot;link&quot;,&quot;thumbnail_height&quot;:600,&quot;image&quot;:{&quot;img&quot;:{&quot;width&quot;:1200,&quot;height&quot;:600,&quot;src&quot;:&quot;https://storage.googleapis.com/papyrus_images/a9e39763674aeed5e9841b30e226700300dae1f5ecc4c2ca3b6476fdba9c5a51.png&quot;}}}" format="small"><link rel="preload" as="image" href="https://storage.googleapis.com/papyrus_images/a9e39763674aeed5e9841b30e226700300dae1f5ecc4c2ca3b6476fdba9c5a51.png"/><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://github.com/LayerZero-Labs/solidity-examples" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>GitHub - LayerZero-Labs/endpoint-v1-solidity-examples: example contracts</h2><p>example contracts. Contribute to LayerZero-Labs/endpoint-v1-solidity-examples development by creating an account on GitHub.</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://github.com</span></div><img src="https://storage.googleapis.com/papyrus_images/a9e39763674aeed5e9841b30e226700300dae1f5ecc4c2ca3b6476fdba9c5a51.png"/></div></a></div></div><h3 id="h-stargate" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Stargate跨链桥</h3><p>Stargate跨链桥由LayerZero Labs团队开发，官方根据LayerZero开发出来的第一个应用生态。上线几天TVL达到30多亿，目前7亿多。跨链底层就是LayerZero，所以跨链资产都是原生资产，目前仅支持稳定币和生态代币STG。跨链逻辑跟LayerZero一样就不复述了，因为主要是稳定币跨链就重点讲一下资产流动性。</p><p><strong>资产流动性</strong>方面，一般跨链桥都会遇到倾斜的问题，即某一条链资产极少，那么跨链到这条链就会出现资金池不足的问题，Stargate的解决方案是引入Delta算法，一种资源平衡算法，统一流动性，资产软分区，既在所有链上实现统一的原生资产流动性，又能确保跨链请求一定成功。（Delta算法具体很复杂，可以看官方论文。）</p><p><strong>现状</strong> :Stargate 目前仅支持ETH等7条兼容evm公链，并未上线Solana、Terra、Cosmos Hub等，Pool收益在4-5%左右。</p><p><strong>总结</strong> LayerZero的跨链消息是未来构建多链应用生态的一种基础，多链dapp的玩法可能有质的突破，各种defi协议将有可能直接跨链实现，用户体验也能得到提升。但是目前较多服务尚未开源，多链尚未支持非EVM公链，还有很多build空间。多链赛道目前阶段的融资龙头，目前暂未发币，值得关注。</p><p>建议配合上篇文章一起阅读更佳</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/0x6EaD271a45ACc328Af22b369870509471a46f59D/zPMxu9CWa4Me5RFRbJsnFy9ndtaJbs3LApUkiaYjssw">https://mirror.xyz/0x6EaD271a45ACc328Af22b369870509471a46f59D/zPMxu9CWa4Me5RFRbJsnFy9ndtaJbs3LApUkiaYjssw</a></p><p>持续分享更多有意思的小知识～求一波关注～</p><div data-type="embedly" src="https://twitter.com/Daniel_eth2" data="{&quot;provider_url&quot;:&quot;https://twitter.com&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;title&quot;:&quot;JavaScript is not available.&quot;,&quot;url&quot;:&quot;https://twitter.com/Daniel_eth2&quot;,&quot;html&quot;:&quot;&lt;a class=\&quot;twitter-timeline\&quot; href=\&quot;https://twitter.com/Daniel_eth2?ref_src=twsrc%5Etfw\&quot;&gt;Tweets by Daniel_eth2&lt;/a&gt;\n&lt;script async src=\&quot;https://platform.twitter.com/widgets.js\&quot; charset=\&quot;utf-8\&quot;&gt;&lt;/script&gt;&quot;,&quot;provider_name&quot;:&quot;Twitter&quot;,&quot;cache_age&quot;:3153600000,&quot;type&quot;:&quot;rich&quot;}" format="iframe"></div>]]></content:encoded>
            <author>daniel-32@newsletter.paragraph.com (Daniel )</author>
        </item>
        <item>
            <title><![CDATA[人人都当科学家之免Gas体验mint爱死机]]></title>
            <link>https://paragraph.com/@daniel-32/gas-mint</link>
            <guid>GerVgoldvOeyOlI4EMJO</guid>
            <pubDate>Sat, 21 May 2022 13:03:28 GMT</pubDate>
            <description><![CDATA[本文会详细讲解如何批量账号mint爱死机NFT以及原理。 因为无限mint已经不值手续费，故主要教学思路，无投资建议。 使用测试网模拟教学，小白用户可以无需任何Gas费用体验合约mint。 并无直接使用的脚本（需要脚本的可以去找一下用小狐狸直接mint，程序开源安全～）读懂合约官方爱死机NFT合约地址： [https://etherscan.io/address/0xfd43d1da000558473822302e1d44d81da2e4cc0d#code] 首先合约是ERC1155，而不是常用NFT的ERC721合约，这两点有什么不同呢。ERC721也就是我们常说的NFT，非同质化代币，每一个代币都是独一无二的，可以有自己的属性特征等。而ERC1155则是既有非同质化代币也有同质化代币，每一个种类型的代币可以有与他相同的存在。具体举例说明，一个游戏中可以有很多种不同的装备，但是同样的装备也可以有很多件，那么这个场景就很适用于ERC1155。而爱死机的nft主要有9种，每一种可以有无数个，细心的同学会发现在opensea上面显示和购买的方式与其他绝大多数都会不一样，例如同一个nf...]]></description>
            <content:encoded><![CDATA[<p>本文会详细讲解如何<strong>批量账号</strong>mint爱死机NFT以及原理。</p><p>因为无限mint已经不值手续费，故主要<strong>教学思路，无投资建议。</strong></p><p>使用测试网模拟教学，小白用户可以无需任何Gas费用体验合约mint。</p><p>并无直接使用的脚本（需要脚本的可以去找一下用小狐狸直接mint，程序开源安全～）</p><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">读懂合约</h3><p>官方爱死机NFT合约地址：</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://etherscan.io/address/0xfd43d1da000558473822302e1d44d81da2e4cc0d#code%5D">[https://etherscan.io/address/0xfd43d1da000558473822302e1d44d81da2e4cc0d#code]</a></p><p>首先合约是ERC1155，而不是常用NFT的ERC721合约，这两点有什么不同呢。ERC721也就是我们常说的NFT，非同质化代币，每一个代币都是独一无二的，可以有自己的属性特征等。而ERC1155则是既有非同质化代币也有同质化代币，每一个种类型的代币可以有与他相同的存在。具体举例说明，一个游戏中可以有很多种不同的装备，但是同样的装备也可以有很多件，那么这个场景就很适用于ERC1155。而爱死机的nft主要有9种，每一种可以有无数个，细心的同学会发现在opensea上面显示和购买的方式与其他绝大多数都会不一样，例如同一个nft会显示有多少人拥有，总量是多少等。因为是同质化的，每个人手上持有的相同的nft也是一样的，交易方式就有点像币圈的挂单吃单。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a0bcfc92c3d93d6d3411d7f1c3725ee0a25499b0b34111cb1b6f5cb31a92d328.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>然后我们详细看一下mint的function，每一行我都配上了中文解析，可以发现并没有数量限制，但是有暂停功能，而且使用EIP1271，<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/OpenZeppelin">OpenZeppelin</a>的SignatureChecker来检测签名，也就是如果我们能拿到官方的签名即可mint，无需去看视频。</p><pre data-type="codeBlock" text="    function mint(
        uint256 _category, ## 种类
        bytes memory _data, ## 签名中的V，实际逻辑中并无使用。
        bytes memory _signature ## 签名
    ) external nonReentrant whenNotPaused {
        require(isSignatureValid(_category, _signature), &quot;LDRT: Invalid signature&quot;); ## 验证签名
        require(_category &gt;= 1, &quot;LDRT: Invalid category. It is less than 1.&quot;); ## 验证输入的种类id要大于等于1
        require(_category &lt;= 9, &quot;LDRT: Invalid category. It is greater than 9.&quot;); ## 验证输入的种类id要小于等于9

        bytes32 hashAdrrCategory = keccak256(abi.encodePacked(msg.sender, _category)); 
        bool hasMinted = categoriesMinted[hashAdrrCategory]; 
        require(
            !hasMinted,
            &quot;LDRT: Address already has token for that category.&quot;
        );  ##上面几行验证一个地址只能mint 1个同一个种类的
        categoriesMinted[hashAdrrCategory] = true; ##存放这个地址已经mint过这个种类
        // 1 is because it will mint 1 token for that category
        _mint(msg.sender, _category, 1, _data); ## mint nft
    }
"><code>    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">mint</span>(<span class="hljs-params">
        <span class="hljs-keyword">uint256</span> _category, ## 种类
        <span class="hljs-keyword">bytes</span> <span class="hljs-keyword">memory</span> _data, ## 签名中的V，实际逻辑中并无使用。
        <span class="hljs-keyword">bytes</span> <span class="hljs-keyword">memory</span> _signature ## 签名
    </span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title">nonReentrant</span> <span class="hljs-title">whenNotPaused</span> </span>{
        <span class="hljs-built_in">require</span>(isSignatureValid(_category, _signature), <span class="hljs-string">"LDRT: Invalid signature"</span>); ## 验证签名
        <span class="hljs-built_in">require</span>(_category <span class="hljs-operator">></span><span class="hljs-operator">=</span> <span class="hljs-number">1</span>, <span class="hljs-string">"LDRT: Invalid category. It is less than 1."</span>); ## 验证输入的种类id要大于等于<span class="hljs-number">1</span>
        <span class="hljs-built_in">require</span>(_category <span class="hljs-operator">&#x3C;</span><span class="hljs-operator">=</span> <span class="hljs-number">9</span>, <span class="hljs-string">"LDRT: Invalid category. It is greater than 9."</span>); ## 验证输入的种类id要小于等于<span class="hljs-number">9</span>

        <span class="hljs-keyword">bytes32</span> hashAdrrCategory <span class="hljs-operator">=</span> <span class="hljs-built_in">keccak256</span>(<span class="hljs-built_in">abi</span>.<span class="hljs-built_in">encodePacked</span>(<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>, _category)); 
        <span class="hljs-keyword">bool</span> hasMinted <span class="hljs-operator">=</span> categoriesMinted[hashAdrrCategory]; 
        <span class="hljs-built_in">require</span>(
            <span class="hljs-operator">!</span>hasMinted,
            <span class="hljs-string">"LDRT: Address already has token for that category."</span>
        );  ##上面几行验证一个地址只能mint <span class="hljs-number">1</span>个同一个种类的
        categoriesMinted[hashAdrrCategory] <span class="hljs-operator">=</span> <span class="hljs-literal">true</span>; ##存放这个地址已经mint过这个种类
        <span class="hljs-comment">// 1 is because it will mint 1 token for that category</span>
        _mint(<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>, _category, <span class="hljs-number">1</span>, _data); ## mint nft
    }
</code></pre><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">如何拿到签名</h3><p>先理解签名，相当于将你的地址和你要mint的nft的种类id打包成消息，然后将这个消息进行签名，签名需要官方的私钥签名，那我们肯定没有。这个时候就得去看正规途径是如何mint nft的，也就是看视频扫二维码怎么mint，一般经过抓包分析之后就可以伪造请求，我常用抓包软件charles。不过这次抓包是朋友直接发给我的。下次有空详细讲解一下抓包，无论是电脑手机还是其他硬件，很多Gamefi交互，刷交互等都用得上。直接贴获取签名的python代码。</p><pre data-type="codeBlock" text="def get_sign(address, category):
    headers = {
        &apos;Authority&apos;: &apos;us-central1-ldr-prod.cloudfunctions.net&apos;,
        &apos;Accept&apos;: &apos;application/json, text/plain, */*&apos;,
        &apos;Accept-Language&apos;: &apos;zh-CN,zh;q=0.9&apos;,
        &apos;Origin&apos;: &apos;https://lovedeathandart.com&apos;,
        &apos;Referer&apos;: &apos;https://lovedeathandart.com/&apos;,
        &apos;Sec-Fetch-Dest&apos;: &apos;empty&apos;,
        &apos;Sec-Fetch-Mode&apos;: &apos;cors&apos;,
        &apos;Sec-Fetch-Site&apos;: &apos;cross-site&apos;,
        &apos;User-Agent&apos;: &apos;Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1&apos;,
    }

    json_data = {
        &apos;address&apos;: address,
        &apos;category&apos;: category,
    }

    response = requests.post(&apos;https://us-central1-ldr-prod.cloudfunctions.net/api/sign&apos;, headers=headers,
                             json=json_data)
    print(response.json()[&quot;v&quot;], response.json()[&quot;signature&quot;])
    return response.json()[&quot;v&quot;], response.json()[&quot;signature&quot;]
"><code>def get_sign(<span class="hljs-keyword">address</span>, category):
    headers <span class="hljs-operator">=</span> {
        <span class="hljs-string">'Authority'</span>: <span class="hljs-string">'us-central1-ldr-prod.cloudfunctions.net'</span>,
        <span class="hljs-string">'Accept'</span>: <span class="hljs-string">'application/json, text/plain, */*'</span>,
        <span class="hljs-string">'Accept-Language'</span>: <span class="hljs-string">'zh-CN,zh;q=0.9'</span>,
        <span class="hljs-string">'Origin'</span>: <span class="hljs-string">'https://lovedeathandart.com'</span>,
        <span class="hljs-string">'Referer'</span>: <span class="hljs-string">'https://lovedeathandart.com/'</span>,
        <span class="hljs-string">'Sec-Fetch-Dest'</span>: <span class="hljs-string">'empty'</span>,
        <span class="hljs-string">'Sec-Fetch-Mode'</span>: <span class="hljs-string">'cors'</span>,
        <span class="hljs-string">'Sec-Fetch-Site'</span>: <span class="hljs-string">'cross-site'</span>,
        <span class="hljs-string">'User-Agent'</span>: <span class="hljs-string">'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1'</span>,
    }

    json_data <span class="hljs-operator">=</span> {
        <span class="hljs-string">'address'</span>: <span class="hljs-keyword">address</span>,
        <span class="hljs-string">'category'</span>: category,
    }

    response <span class="hljs-operator">=</span> requests.post(<span class="hljs-string">'https://us-central1-ldr-prod.cloudfunctions.net/api/sign'</span>, headers<span class="hljs-operator">=</span>headers,
                             json<span class="hljs-operator">=</span>json_data)
    print(response.json()[<span class="hljs-string">"v"</span>], response.json()[<span class="hljs-string">"signature"</span>])
    <span class="hljs-keyword">return</span> response.json()[<span class="hljs-string">"v"</span>], response.json()[<span class="hljs-string">"signature"</span>]
</code></pre><p>其实这个签名就是简单的输入了address和category即可拿到签名，爱死机官方并没有做其他鉴权或者限制，也就是任何一个用户都可以调用接口直接拿到签名。</p><h3 id="h-mint" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">如何批量化脚本Mint</h3><p>昨天看到已经有网页端链接小狐狸mint的开源代码，对于小白用户来说已经很好用了，但是作为“科学家”任何东西肯定要掌握在自己手上，多钱包肯定批量直接mint更方便。这个时候就需要学会如何直接在代码里面调用合约。python可以直接配合brownie框架(需要学习)，简单举例一行代码即可调用合约LDR=Contract.from_explorer(&quot;合约地址&quot;)，当然也可以填入abi的方式进行合约调用。这个时候如果有多个钱包也就是读出每个钱包，然后分别mint就行了，无任何上限，除非官方关闭获取签名接口或者暂停合约mint。</p><pre data-type="codeBlock" text="def mint_nft():
    account = get_account()
    for i in range(1,10):
        data, sign = get_sign(str(account), str(i))
        LDR = Contract.from_explorer(&quot;0x2818Fae15D09744c0Ec5B98DbE539428058891B4&quot;)
        LDR.mint(str(i), data, sign, {&quot;from&quot;: account})
        print(&quot;mint over&quot;)
"><code>def <span class="hljs-built_in">mint_nft</span>():
    account = <span class="hljs-built_in">get_account</span>()
    for i in <span class="hljs-built_in">range</span>(<span class="hljs-number">1</span>,<span class="hljs-number">10</span>):
        data, sign = <span class="hljs-built_in">get_sign</span>(<span class="hljs-built_in">str</span>(account), <span class="hljs-built_in">str</span>(i))
        LDR = Contract.<span class="hljs-built_in">from_explorer</span>(<span class="hljs-string">"0x2818Fae15D09744c0Ec5B98DbE539428058891B4"</span>)
        LDR.<span class="hljs-built_in">mint</span>(<span class="hljs-built_in">str</span>(i), data, sign, {"from": account})
        <span class="hljs-built_in">print</span>("mint over")
</code></pre><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">小白用户怎么体验</h3><p>如果既不想看合约又不想写代码，就想单纯的体验下怎么直接从合约mint nft，而不是从官方网站mint，那么可以看下文如何免Gas mint。建议用<strong>新钱包空钱包</strong>操作～</p><p>我已经将相同的合约部署在了polygon testnet，并且去除了签名限制。（合约开源安全）所以可以直接在polygon测试网玩一玩。</p><p>1.首先领水龙头，也就是测试代币，输入自己的地址确认即可。</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://faucet.polygon.technology/">https://faucet.polygon.technology/</a></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/8b9b884bf5b99d5b26c386ade530db2a4d28d67ae2984a07872ccc1e9f7799f0.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>2.将自己的小狐狸钱包切换到polygon测试网，不会的话去chainlist添加，如下图右下角。这个时候你会发现钱包里面有matic代币。没有的话就多等等或者去水龙头在领一次。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/288f79611b63ad45a1dd4dfa983e3401d8daa8ac186b2907094a2748d5564028.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>3.去浏览器上面调用合约链接如下</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mumbai.polygonscan.com/address/0x2818Fae15D09744c0Ec5B98DbE539428058891B4#code">https://mumbai.polygonscan.com/address/0x2818Fae15D09744c0Ec5B98DbE539428058891B4#code</a></p><p>找到Contract，点击Write，点击Connect to web3，链接小狐狸</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/51fe8d4032733ac3cdad00113953055d96aef8d9e9032aeb94b18ebe0aa5b5fc.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>找到mint，第一个参数就是1-9里面的种类，因为去掉了签名，所以第二和第三参数按照格式随便填，然后点击write，就可以发送消息。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/62735b5838dda2e2a500461516cccb6f20793046585cf1a69b89b750425b3164.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>4.去opensea测试网检查是否有nft，如果出现拥有LDR的nft即成功，没有图片是因为这个nft并没有设置url，也就是没有设置图片。</p><div data-type="embedly" src="https://testnets.opensea.io/account" data="{&quot;provider_url&quot;:&quot;https://support.opensea.io&quot;,&quot;description&quot;:&quot;Testnets are no longer supported on OpenSea&quot;,&quot;title&quot;:&quot;Farewell, Testnets 👋 | OpenSea Help Center&quot;,&quot;thumbnail_width&quot;:800,&quot;url&quot;:&quot;https://support.opensea.io/en/articles/11833955-farewell-testnets&quot;,&quot;thumbnail_url&quot;:&quot;https://storage.googleapis.com/papyrus_images/c0930229b0560bcc523ee5a7bdde2b7eed9341644b1cb3c0b7fbb934ba6c2c20.jpg&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;Opensea&quot;,&quot;type&quot;:&quot;link&quot;,&quot;thumbnail_height&quot;:499,&quot;image&quot;:{&quot;img&quot;:{&quot;width&quot;:800,&quot;height&quot;:499,&quot;src&quot;:&quot;https://storage.googleapis.com/papyrus_images/c0930229b0560bcc523ee5a7bdde2b7eed9341644b1cb3c0b7fbb934ba6c2c20.jpg&quot;}}}" format="small"><link rel="preload" as="image" href="https://storage.googleapis.com/papyrus_images/c0930229b0560bcc523ee5a7bdde2b7eed9341644b1cb3c0b7fbb934ba6c2c20.jpg"/><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://testnets.opensea.io/account" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>Farewell, Testnets 👋 | OpenSea Help Center</h2><p>Testnets are no longer supported on OpenSea</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://support.opensea.io</span></div><img src="https://storage.googleapis.com/papyrus_images/c0930229b0560bcc523ee5a7bdde2b7eed9341644b1cb3c0b7fbb934ba6c2c20.jpg"/></div></a></div></div><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/87188b970f6bf3a168cbad35896344e4a121eb4310c32184ce4479983a8e2362.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><h3 id="h-nftmintmintmintjspythonnft" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">总结： 绝大多数的nft，如果知道合约地址，即可使用类似思路进行抢mint，如果有编程基础，可以尝试直接在开mint前直接提前准备好调用合约，定时执行。有些合约是固定高度开放，有些会是发送消息来当开关，即可读取消息池来做到快速甚至同一个高度直接mint，因为不同合约实现思路和玩法会不同，需要自己针对项目进行代码修正。整体来说，如果快速上手js或者python，都可以做到更快的调用合约，抢土狗抢nft等都可以玩，有兴趣的可以学习一下。</h3><p>ps:我心中认为的是科学家是深度钻研技术的人，也就是科研方向。我自身只是个简单的build，并称不上科学家～取这个标题就是让感兴趣的大家一起来build。</p><p>watch to earn貌似也是个不错的思路，但是如何做到安全性上的保证是需要思考的。</p><p>持续分享更多有意思的小知识～求一波关注～</p><div data-type="embedly" src="https://twitter.com/Daniel_eth2" data="{&quot;provider_url&quot;:&quot;https://twitter.com&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;title&quot;:&quot;JavaScript is not available.&quot;,&quot;url&quot;:&quot;https://twitter.com/Daniel_eth2&quot;,&quot;html&quot;:&quot;&lt;a class=\&quot;twitter-timeline\&quot; href=\&quot;https://twitter.com/Daniel_eth2?ref_src=twsrc%5Etfw\&quot;&gt;Tweets by Daniel_eth2&lt;/a&gt;\n&lt;script async src=\&quot;https://platform.twitter.com/widgets.js\&quot; charset=\&quot;utf-8\&quot;&gt;&lt;/script&gt;&quot;,&quot;provider_name&quot;:&quot;Twitter&quot;,&quot;cache_age&quot;:3153600000,&quot;type&quot;:&quot;rich&quot;}" format="iframe"></div>]]></content:encoded>
            <author>daniel-32@newsletter.paragraph.com (Daniel )</author>
        </item>
        <item>
            <title><![CDATA[简单就能读懂跨链桥之Celer cBridge&MultiChain]]></title>
            <link>https://paragraph.com/@daniel-32/celer-cbridge-multichain</link>
            <guid>hFq5WpG1g3FlP4NkWGyO</guid>
            <pubDate>Thu, 19 May 2022 10:27:09 GMT</pubDate>
            <description><![CDATA[本文深入浅出详细讲解cBridge和MultiChain的原理，让每一个人都能理解跨链桥。 读完此文会收获，哦原来跨链桥是这么回事～ 文中提及的数据均截止2022/05/19。非投资建议。 本文为DeFieye X Celer征文大赛提交作品。什么是跨链桥如今是个多链的时代，以ETH为例，各种兼容evm的公链就有许多，当你用小狐狸能够切换一下网络就能使用的公链都是evm兼容的，非evm兼容的也有不少比如说BTC，还有前段时间爆火的Terra，这个时候如果想要将各种链上的代币流通起来，各种代币去不同的链上流转，搬砖套利玩defi等就需要使用跨链桥。跨链桥的种类跨链桥从技术原理上来说种类目前已经很多种，本文重点讲解的cBridge和Multi是币安官方推荐，加上技术层面类似，也略有不同，可以放在一起讲解更容易理解，后面会讲更多不一样技术类型的跨链桥。币安桥有句话一直都比较流行，币安就是最好的桥。速度尚可，手续费不贵，安全性佳，中心化背书无需担心被黑被盗风险的币安交易所，一直都可以被大家当桥使用，缺点是支持的链较少。里面的逻辑其实很简单，举例你把btc存在了交易所，这个时候你选择提wb...]]></description>
            <content:encoded><![CDATA[<p><em>本文深入浅出详细讲解cBridge和MultiChain的原理，让每一个人都能理解跨链桥。</em></p><p><em>读完此文会收获，哦原来跨链桥是这么回事～</em></p><p><em>文中提及的数据均截止2022/05/19。非投资建议。</em></p><p><em>本文为DeFieye X Celer征文大赛提交作品。</em></p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">什么是跨链桥</h2><p>如今是个多链的时代，以ETH为例，各种兼容evm的公链就有许多，当你用小狐狸能够切换一下网络就能使用的公链都是evm兼容的，非evm兼容的也有不少比如说BTC，还有前段时间爆火的Terra，这个时候如果想要将各种链上的代币流通起来，各种代币去不同的链上流转，搬砖套利玩defi等就需要使用跨链桥。</p><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">跨链桥的种类</h2><p>跨链桥从技术原理上来说种类目前已经很多种，本文重点讲解的cBridge和Multi是币安官方推荐，加上技术层面类似，也略有不同，可以放在一起讲解更容易理解，后面会讲<strong>更多不一样技术类型</strong>的跨链桥。</p><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"></h3><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/5a43fdcc840f2b99906df3430d7559447b63cbe535b8000ac87e79cc21d395d9.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><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">币安桥</h3><p>有句话一直都比较流行，币安就是最好的桥。速度尚可，手续费不贵，安全性佳，中心化背书无需担心被黑被盗风险的币安交易所，一直都可以被大家当桥使用，缺点是支持的链较少。里面的逻辑其实很简单，举例你把btc存在了交易所，这个时候你选择提wbtc到eth链上，其实就是币安帮你保管btc链上的btc，然后把它eth链上的wbtc转给你。一笔简单的跨链就完成了。</p><h3 id="h-multichain" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">MultiChain</h3><div data-type="embedly" src="https://multichain.org/" data="{&quot;provider_url&quot;:&quot;https://multichain.org&quot;,&quot;description&quot;:&quot;Multichain is a cross-chain router protocol; an infrustructure for multi-chain ecosystem, envisioned to become the ultimate router for Web 3. Non-custodial+MPC, Non Slippage Swap, Multichain Router&quot;,&quot;title&quot;:&quot;Multichain- Cross Chain Router Protocol (CRP)&quot;,&quot;url&quot;:&quot;https://multichain.org/&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;Multichain&quot;,&quot;type&quot;:&quot;link&quot;}" format="small"><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://multichain.org/" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>Multichain- Cross Chain Router Protocol (CRP)</h2><p>Multichain is a cross-chain router protocol; an infrustructure for multi-chain ecosystem, envisioned to become the ultimate router for Web 3. Non-custodial+MPC, Non Slippage Swap, Multichain Router</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://multichain.org</span></div></div></a></div></div><p><strong>基本情况介绍</strong> ：支持多种evm链，支持多种代币，也支持部分btc，ltc等公链代币。项目原来名字叫Anyswap，后面改名叫MultiChain，现在代币名为Multi。有意思的是币安还重新上架，将币价拉翻倍还多，我称它为改名拉盘法。截止5/19，总TVL $3.89B,支持2184种token和48条链。</p><p><strong>怎么跨链</strong>：Multichain是由多个MPC NODE组成一个分布式基于安全多方计算（SMPC）的阈值分布式签名算法（TSS），具体原理可以看下代码。<strong>简单点理解就是</strong>当你发起跨链请求的时候，多个node会监听到这条消息，然后通过算法达成共识，通过了多少个节点确认你已经完成了原来链的转账，然后再告诉另一条链资金池需要向你发送这么多代币了。目前总共有31个节点，节点详细信息暂未公布。</p><p><strong>具体理解跨链逻辑</strong>：<strong>主要分三种情况（详细可以看官方文档）</strong></p><ol><li><p><strong>原生资产</strong>：每条链本来就存在代币跨链。<strong>举例说明</strong>，USDC目前存在于各种链上，现在我想要把100个USDC从eth链跨到bsc链，这个时候就需要multi有流动资金池子，也就是bsc链上也需要有足够多的USDC&gt;100。具体的细节是，当我转账100个USDC到eth链上的池子的时候，eth链上会铸造出相同数量的100个anyUSDC,这个时候SMPC会检测到我转账的信息，确认好之后在bsc链上铸造100个anyUSDC，并且销毁掉eth链上的100个anyUSDC。如果这个时候bsc链上的资金池USDC数量大于100，就会直接将100个USDC转到我的钱包，然后将anyUSDC销毁掉。这个时候就完成了一次跨链，但是如果bsc链上资金不足，就会直接给我转100个anyUSDC，啥时候资金够了就可以去换成USDC，或者也可以跨到其他链上。</p></li><li><p><strong>过桥资产</strong>：其他链并没有这个代币。<strong>举例说明</strong>，MIM本身只存在于eth链上，然后使用了Multichain提供的合约来铸造到其他链上，这个时候就不需要资金池了，用户的跨链本质上来说是在原生链上面抵押，然后要去跨的链上铸造。也就是流动性是无上限的，在multi的pool里面可以看到，如果一个币跨链池子里面写的Unlimited，那么就是这种模式。跨回来的话就是燃烧这条链上的币，将原生币返回给用户。</p></li><li><p><strong>混合资产</strong>： 故名思义，即有原生资产也有过桥资产。在部分链上是走的1的逻辑，在部分链上是走的2的逻辑。</p></li></ol><p><strong>代币经济</strong>：Multi是MultiChain的治理代币，目前价格$7左右，总供应量10亿，目前流通量18,363,292(不确定是否统计了Any的数量),总市值$125,457,524。在最近的治理中，推出了veMulti的玩法，目前只能将Multi ，stake锁仓2周-4年生成不同数量的veMulti，享受过桥手续费的收益分红，目前年化130%。预测后续会出现跟veCRV类似的方案，对pool进行贿赂，来提升流动性激励。近30天手续费收入$2,290,331，用户78,333，属于跨链桥里面数据比较亮眼的。</p><p><strong>总结</strong>：资金池较深，支持的链多，手续费低，市场占用量大，代码几乎都开源，更新频率较高。风险：中途出现过被黑情况，一次是因漏洞导致MPC私钥被盗池子被盗，还有一次是合约漏洞导致用户授权被盗。MPC节点数据不透明，需要警惕Ronin事件再次发生。后续应该会有更多的链上玩法，nft跨链，defi等。华人团队国产之光，希望能越做越好～</p><h3 id="h-cbridge" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">cBridge</h3><div data-type="embedly" src="https://cbridge.celer.network/" data="{&quot;provider_url&quot;:&quot;https://cbridge.celer.network&quot;,&quot;description&quot;:&quot;cBridge is a multi-chain, cross-layer asset bridge offering instant transfer with the most number of chains, lowest fee and zero trust.&quot;,&quot;title&quot;:&quot;The Best Crypto &amp; Binance Bridge | cBridge&quot;,&quot;url&quot;:&quot;https://cbridge.celer.network/&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;Celer&quot;,&quot;type&quot;:&quot;link&quot;}" format="small"><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://cbridge.celer.network/" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>The Best Crypto &amp; Binance Bridge | cBridge</h2><p>cBridge is a multi-chain, cross-layer asset bridge offering instant transfer with the most number of chains, lowest fee and zero trust.</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://cbridge.celer.network</span></div></div></a></div></div><p><strong>基本情况介绍</strong> ：支持多种evm链，支持多种代币跨链，暂时不支持非evm公链，也就是只支持能在小狐狸上面能连上的链。截止5/19，总TVL $0.46B,支持116种token和31条链。</p><p><strong>怎么跨链</strong>：通过 SGN 进行去中心化的桥，与Multi的MPC节点不同的是，SGN是基于Cosmos链打造出来的跨链网关及监管服务，SGN作为一个去中心化的区块链而非去中心化服务，它是基于的权益证明 (PoS) 区块链，CELR 作为权益资产，它的作用是既要作为流动性池子管理器，也为提供了PoS的安全性，也承担了网关和调度的作用，所以是Celer的核心组成部分。也就是只有持有全网抵押超过2/3才能作恶，目前全网抵押1,545,937,790 ，总流通5,645,454,935,也就是说想在SGN上面作恶的成本及难度较大。用户在发送跨链请求的时候，SGN会根据规则来制定一个节点分配给这次交易，来完成跨链，如果节点掉线也会有赔偿机制和对节点进行惩罚。</p><p><strong>具体理解跨链逻辑</strong>：<strong>主要分两种情况</strong></p><ol><li><p><strong>原生资产</strong>：每条链本来就存在代币跨链。大致类似于Multi,说一下<strong>不同的点</strong>。首先是用户通过源链上的合约请求SGN查询当前状态，根据两个流动性池的余额动态调整过桥手续费等。然后SGN此时会监控并接收交易，交易信息也会写到SGN链上，直到交易完成。所以与multi固定比例的手续费不同，cBridge每次交易的手续费是根据流动性时刻变化的。</p></li><li><p><strong>过桥资产</strong>：其他链并没有这个代币。同Multi类似的点也是燃烧铸造机制。这个cbridge有更详细的介绍，TokenVault合约负责存用户原生代币，PeggedToken负责在要跨的链上。简单一句话理解，你锁币我就铸造，你燃烧我就释放。</p></li></ol><p><strong>代币经济</strong>： CELR是Celer cBridge治理代币，目前价格$0.0159左右，总供应量100亿，目前流通量56亿多，总市值$90,577,477。Celr也承担了SGN链的POS作用，普通用户也可以直接将Celr抵押到节点即可享受跨链桥手续费收入。Defi的玩法是用户提供资金流动性也可以获得挖矿奖励和交易费用，但是资金可能会在不同的链上流通，比如说你在eth链上存入了100USDC，可能过几天币分散到其他链上。类似于AMM的机制，也可能会有无常损失，但是绝大多数情况下AMM曲线接近1，所以无常损失金额可能性极小。</p><p><strong>总结</strong>：资金池深度也很不错，支持的链多，手续费有小波动，项目方新推出Celer IM跨链消息框架，允许多链dApp直接通过IM，将多链上的流动性、用户体验应用逻辑等联系起来，也就是cBridge仅仅是建立在 Celer IM 之上的资产桥梁。未来叙事空间很大，基于IM可以衍生出各种跨链生态，同样也是华人团队国产之光，希望能越做越好～</p><p><strong>大总结：多链与跨链一直以来都有争议，但是多链互通是web3的必然需求。</strong></p><p>目前跨链桥等也新诞生出了各种其他的技术，后续有空分析，尽量将生涩的技术性话题讲的通俗易懂，让每个人都能大致理解里面的运转过程和逻辑。最后，刚刚加入Twitter ，会分享更多有趣的Web3玩法，希望大家关注一波～谢谢大家支持～</p><div data-type="embedly" src="https://twitter.com/Daniel_eth2" data="{&quot;provider_url&quot;:&quot;https://twitter.com&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;title&quot;:&quot;JavaScript is not available.&quot;,&quot;url&quot;:&quot;https://twitter.com/Daniel_eth2&quot;,&quot;html&quot;:&quot;&lt;a class=\&quot;twitter-timeline\&quot; href=\&quot;https://twitter.com/Daniel_eth2?ref_src=twsrc%5Etfw\&quot;&gt;Tweets by Daniel_eth2&lt;/a&gt;\n&lt;script async src=\&quot;https://platform.twitter.com/widgets.js\&quot; charset=\&quot;utf-8\&quot;&gt;&lt;/script&gt;&quot;,&quot;provider_name&quot;:&quot;Twitter&quot;,&quot;cache_age&quot;:3153600000,&quot;type&quot;:&quot;rich&quot;}" format="iframe"></div>]]></content:encoded>
            <author>daniel-32@newsletter.paragraph.com (Daniel )</author>
        </item>
        <item>
            <title><![CDATA[一文教懂小白也能轻松参加的新兴豪华投资阵容公链Aptos测试网。]]></title>
            <link>https://paragraph.com/@daniel-32/aptos</link>
            <guid>xnlAV6n8Jjk30TpJ5OJB</guid>
            <pubDate>Tue, 17 May 2022 10:54:01 GMT</pubDate>
            <description><![CDATA[看完此文你能收获什么 了解服务器基础知识，理解节点运行，可能收获Aptos空投。Aptos背景投资阵容豪华，Aptos 完成 2 亿美元战略融资，a16z领投，Tiger Global、Katie Haun、Multicoin Capital、Three Arrows Capital、FTX Ventures 和 Coinbase Ventures 等参投。咱不做项目分析，直接说重点，对项目感兴趣的可以DYOR。什么是Aptos激励测试网5月13日注册5月24日开始主要成果注册和跟踪网站将在 IT1 开始前提供最初限制为 100 个验证节点（将在后续阶段扩展）使用 GitHub 的去中心化网络启动工具运行生产级验证器的文档目标使用 GitHub / Genesis 工具执行去中心化网络启动通过 Aptos 衡量的测试网完成保持在线并参与说简单点，就是参与可能有空投，具体规则还没完全定下来。官方原版教程懂编程基础的可以直接去看原版官方教程，不需要用一键脚本。使用 Docker | Aptos WikiAIT-3 激励测试网教程（Incentivized Testnet Tutori...]]></description>
            <content:encoded><![CDATA[<p><strong>看完此文你能收获什么</strong></p><p>了解服务器基础知识，理解节点运行，可能收获Aptos空投。</p><h4 id="h-aptos" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">Aptos背景</h4><p>投资阵容豪华，Aptos 完成 2 亿美元战略融资，a16z领投，Tiger Global、Katie Haun、Multicoin Capital、Three Arrows Capital、FTX Ventures 和 Coinbase Ventures 等参投。咱不做项目分析，直接说重点，对项目感兴趣的可以DYOR。</p><h4 id="h-aptos" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">什么是Aptos激励测试网</h4><ul><li><p>5月13日注册</p></li><li><p>5月24日开始</p></li><li><p>主要成果</p><ul><li><p>注册和跟踪网站将在 IT1 开始前提供</p></li><li><p>最初限制为 100 个验证节点（将在后续阶段扩展）</p></li><li><p>使用 GitHub 的去中心化网络启动工具</p></li><li><p>运行生产级验证器的文档</p></li></ul></li><li><p>目标</p><ul><li><p>使用 GitHub / Genesis 工具执行去中心化网络启动</p></li><li><p>通过 Aptos 衡量的测试网完成保持在线并参与</p></li></ul></li></ul><p><strong>说简单点，就是参与可能有空投，具体规则还没完全定下来。</strong></p><h4 id="h-" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">官方原版教程</h4><p>懂编程基础的可以直接去看原版官方教程，不需要用一键脚本。</p><div data-type="embedly" src="https://wiki.aptos.movemove.org/jiao-cheng/ce-shi-wang-testnet/she-qu-jiao-cheng/shi-yong-docker" data="{&quot;provider_url&quot;:&quot;https://wiki.aptos.movemove.org&quot;,&quot;description&quot;:&quot;AIT-3 激励测试网教程（Incentivized Testnet Tutorial）&quot;,&quot;title&quot;:&quot;使用 Docker | Aptos Wiki&quot;,&quot;mean_alpha&quot;:254.966666667,&quot;thumbnail_width&quot;:1200,&quot;url&quot;:&quot;https://wiki.aptos.movemove.org/jiao-cheng/ce-shi-wang-testnet/she-qu-jiao-cheng/shi-yong-docker&quot;,&quot;thumbnail_url&quot;:&quot;https://storage.googleapis.com/papyrus_images/225a879648b64350e838a46c65b5cba4c9d68c43128509981f07a8fa3eb303c3.png&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;Movemove&quot;,&quot;type&quot;:&quot;link&quot;,&quot;thumbnail_height&quot;:630,&quot;image&quot;:{&quot;img&quot;:{&quot;width&quot;:1200,&quot;height&quot;:630,&quot;src&quot;:&quot;https://storage.googleapis.com/papyrus_images/225a879648b64350e838a46c65b5cba4c9d68c43128509981f07a8fa3eb303c3.png&quot;}}}" format="small"><link rel="preload" as="image" href="https://storage.googleapis.com/papyrus_images/225a879648b64350e838a46c65b5cba4c9d68c43128509981f07a8fa3eb303c3.png"/><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://wiki.aptos.movemove.org/jiao-cheng/ce-shi-wang-testnet/she-qu-jiao-cheng/shi-yong-docker" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>使用 Docker | Aptos Wiki</h2><p>AIT-3 激励测试网教程（Incentivized Testnet Tutorial）</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://wiki.aptos.movemove.org</span></div><img src="https://storage.googleapis.com/papyrus_images/225a879648b64350e838a46c65b5cba4c9d68c43128509981f07a8fa3eb303c3.png"/></div></a></div></div><h4 id="h-" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">小白手把手教程</h4><p>1.首先需要去官方网站注册账号，待会需要用</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://community.aptoslabs.com/">https://community.aptoslabs.com/</a></p><p><strong>2</strong>.需要购买服务器，推荐海外服务器，为了避嫌做推广就自己看着买了，按时付费或者一个月都行。需要<strong>Ubuntu</strong>系统，系统版本18.04或者20都行。</p><p>说下<strong>硬件要求</strong>为了在激励测试网上运行 aptos 节点，官方建议如下，实际测试下来可以适当降低配置，缩减成本，底下说的端口需要在服务器运行商那里打开，具体得根据各种服务商配置来处理，不会就Google XXX怎么开放端口。</p><ul><li><p>CPU: 4 核（Intel Xeon Skylake 或更新版本）</p></li><li><p>内存：8GiB RAM</p></li><li><p>对于验证节点：</p><ul><li><p>打开 TCP 端口 6180，让验证者相互通信。</p></li><li><p>打开 TCP 端口 9101，用于获取验证器指标以验证运行状况统计信息。 （仅在注册阶段需要）</p></li></ul></li></ul><p><strong>3</strong>.脚本教程来了</p><p>举例说明，我现在购买好了一台服务器公网 ip是 43.130.XXX.XXX,ssh连接上服务器，（不懂Google）。一键脚本已经开源，连接上服务器之后输入底下命令。</p><div data-type="embedly" src="https://github.com/8hfq/Aptos-onekey-install" data="{&quot;provider_url&quot;:&quot;https://github.com&quot;,&quot;description&quot;:&quot;Contribute to danieleth2/Daniel-onekey-install development by creating an account on GitHub.&quot;,&quot;title&quot;:&quot;GitHub - danieleth2/Daniel-onekey-install&quot;,&quot;author_name&quot;:&quot;danieleth2&quot;,&quot;thumbnail_width&quot;:1200,&quot;url&quot;:&quot;https://github.com/danieleth2/Daniel-onekey-install&quot;,&quot;thumbnail_url&quot;:&quot;https://storage.googleapis.com/papyrus_images/fbf8fac76f03ade9d124ae1864d02893af57e4eb3177d575b9d1121c7b35a8cd.png&quot;,&quot;author_url&quot;:&quot;https://github.com/danieleth2&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;GitHub&quot;,&quot;type&quot;:&quot;link&quot;,&quot;thumbnail_height&quot;:600,&quot;image&quot;:{&quot;img&quot;:{&quot;width&quot;:1200,&quot;height&quot;:600,&quot;src&quot;:&quot;https://storage.googleapis.com/papyrus_images/fbf8fac76f03ade9d124ae1864d02893af57e4eb3177d575b9d1121c7b35a8cd.png&quot;}}}" format="small"><link rel="preload" as="image" href="https://storage.googleapis.com/papyrus_images/fbf8fac76f03ade9d124ae1864d02893af57e4eb3177d575b9d1121c7b35a8cd.png"/><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://github.com/8hfq/Aptos-onekey-install" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>GitHub - danieleth2/Daniel-onekey-install</h2><p>Contribute to danieleth2/Daniel-onekey-install development by creating an account on GitHub.</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://github.com</span></div><img src="https://storage.googleapis.com/papyrus_images/fbf8fac76f03ade9d124ae1864d02893af57e4eb3177d575b9d1121c7b35a8cd.png"/></div></a></div></div><pre data-type="codeBlock" text="## 第一步获取root权限,下载脚本授权
sudo su 
cd ~ &amp;&amp; wget https://github.com/8hfq/Daniel-onekey-install/releases/download/1.0.0/aptos-daniel.sh &amp;&amp; chmod +x aptos-daniel.sh
"><code><span class="hljs-comment">## 第一步获取root权限,下载脚本授权</span>
sudo su 
<span class="hljs-built_in">cd</span> ~ &#x26;&#x26; wget https://github.com/8hfq/Daniel-onekey-install/releases/download/1.0.0/aptos-daniel.sh &#x26;&#x26; <span class="hljs-built_in">chmod</span> +x aptos-daniel.sh
</code></pre><pre data-type="codeBlock" text="## 第一次执行脚本安装docker，输入1
./aptos-daniel.sh
输入会出现以下界面
"><code>## 第一次执行脚本安装docker，输入<span class="hljs-number">1</span>
./aptos<span class="hljs-operator">-</span>daniel.sh
输入会出现以下界面
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d13065b4d70294f5f620691f1259b8bd5e422f42785c66a578369caeec1ee881.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>输入1执行，等待一会。出现Docker Compose version v2.5.0即安装完毕。</p><pre data-type="codeBlock" text="## 再次执行脚本安装aptos
./aptos-daniel.sh
输入数字2，之后输入服务器的外网ip，再输入节点名字（自己取）
"><code>## 再次执行脚本安装aptos
./aptos<span class="hljs-operator">-</span>daniel.sh
输入数字<span class="hljs-number">2</span>，之后输入服务器的外网ip，再输入节点名字（自己取）
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/453f5463723d29a6200ad6a864e550e274032c574c1a3b2c7590a328e2188d38.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>等待一会，出现Container testnet-validator-1 Started即成功</p><pre data-type="codeBlock" text="再次执行脚本输入3
./aptos-daniel.sh
"><code>再次执行脚本输入<span class="hljs-number">3</span>
./aptos<span class="hljs-operator">-</span>daniel.sh
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/801c09cc68f7e27e7cf611a79cecd68dcb624e9b302c366e44af48d544299cc5.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>会显示节点的各种信息，之后去官网填NODE VERIFICATION</p><p>PUBLIC KEYS与脚本读取出来的字段一一对应填上去</p><p>VALIDATOR NODE填，除了ADDRESS填自己的公网ip，其他端口按照图片上面填。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/237a8007717d8b6e5da558803cd0d389a540b2e5a7c1578b1fa8f22471fe7df5.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>填完确认好之后需要做KYC认证，按照下图第二步点进去自己KYC即可。</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/1b86ec2855f07629ab0f2ae6d44cf318d38161d16b23cd4816317e671d688e9a.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><h3 id="h-psiphhhh" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">总结： 运行测试网节点对小白用户略有难度，但是配合上脚本其实愿意动手的话就很容易，奖励未知，成本就是服务器成本，愿意动手的可以多尝试，多学点总不会错的～ PS：在我发出这篇文章的时候上图ip的服务器已经注销了，所以不用想着对我做坏事了hhhh</h3><p>最后，刚刚加入Twitter ，会分享更多有趣的链上玩法，希望大家关注一波～谢谢大家支持～</p><div data-type="embedly" src="https://twitter.com/Daniel_eth2" data="{&quot;provider_url&quot;:&quot;https://twitter.com&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;title&quot;:&quot;JavaScript is not available.&quot;,&quot;url&quot;:&quot;https://twitter.com/Daniel_eth2&quot;,&quot;html&quot;:&quot;&lt;a class=\&quot;twitter-timeline\&quot; href=\&quot;https://twitter.com/Daniel_eth2?ref_src=twsrc%5Etfw\&quot;&gt;Tweets by Daniel_eth2&lt;/a&gt;\n&lt;script async src=\&quot;https://platform.twitter.com/widgets.js\&quot; charset=\&quot;utf-8\&quot;&gt;&lt;/script&gt;&quot;,&quot;provider_name&quot;:&quot;Twitter&quot;,&quot;cache_age&quot;:3153600000,&quot;type&quot;:&quot;rich&quot;}" format="iframe"></div>]]></content:encoded>
            <author>daniel-32@newsletter.paragraph.com (Daniel )</author>
        </item>
    </channel>
</rss>