<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[JRBC - 江西软件职业技术大学区块链协会]]></title><description><![CDATA[JRBC - 江西软件职业技术大学区块链协会]]></description><link>https://www.thinkingsolidity.com/</link><image><url>https://www.thinkingsolidity.com/favicon.png</url><title>JRBC - 江西软件职业技术大学区块链协会</title><link>https://www.thinkingsolidity.com/</link></image><generator>Ghost 4.16</generator><lastBuildDate>Thu, 07 May 2026 10:49:15 GMT</lastBuildDate><atom:link href="https://www.thinkingsolidity.com/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Hemera，新一代链上数据分析]]></title><description><![CDATA[<p><strong>Hemera &#x65B0;&#x4E00;&#x4EE3;&#x94FE;&#x4E0A;&#x6570;&#x636E;&#x5206;&#x6790;</strong><br>Hemera &#x662F;&#x4E00;&#x6B3E;&#x5168;&#x65B0;&#x7684;&#x94FE;&#x4E0A;&#x6570;&#x636E;&#x5206;&#x6790;&#x5DE5;&#x5177;&#xFF0C;&#x4E13;&#x4E3A;&#x533A;&#x5757;&#x94FE;&#x4E16;&#x754C;&#x8BBE;&#x8BA1;&#xFF0C;&#x65E8;&#x5728;&#x63D0;&#x4F9B;&#x66F4;&#x52A0;&#x5168;&#x9762;&#x3001;&#x667A;&#x80FD;&#x548C;&#x9AD8;&#x6548;</p>]]></description><link>https://www.thinkingsolidity.com/hemera-xin-yi-dai-lian-shang-shu-ju-fen-xi/</link><guid isPermaLink="false">6739d408903d7005b6870d9e</guid><category><![CDATA[Hemera]]></category><dc:creator><![CDATA[JRBC 技术部]]></dc:creator><pubDate>Sun, 17 Nov 2024 11:58:55 GMT</pubDate><content:encoded><![CDATA[<p><strong>Hemera &#x65B0;&#x4E00;&#x4EE3;&#x94FE;&#x4E0A;&#x6570;&#x636E;&#x5206;&#x6790;</strong><br>Hemera &#x662F;&#x4E00;&#x6B3E;&#x5168;&#x65B0;&#x7684;&#x94FE;&#x4E0A;&#x6570;&#x636E;&#x5206;&#x6790;&#x5DE5;&#x5177;&#xFF0C;&#x4E13;&#x4E3A;&#x533A;&#x5757;&#x94FE;&#x4E16;&#x754C;&#x8BBE;&#x8BA1;&#xFF0C;&#x65E8;&#x5728;&#x63D0;&#x4F9B;&#x66F4;&#x52A0;&#x5168;&#x9762;&#x3001;&#x667A;&#x80FD;&#x548C;&#x9AD8;&#x6548;&#x7684;&#x6570;&#x636E;&#x6D1E;&#x5BDF;&#x3002;&#x5B83;&#x7ED3;&#x5408;&#x4E86;&#x5148;&#x8FDB;&#x7684;&#x6280;&#x672F;&#xFF0C;&#x652F;&#x6301;&#x5BF9;&#x533A;&#x5757;&#x94FE;&#x4E0A;&#x4E0D;&#x65AD;&#x589E;&#x957F;&#x7684;&#x5E9E;&#x5927;&#x6570;&#x636E;&#x96C6;&#x8FDB;&#x884C;&#x6DF1;&#x5EA6;&#x6316;&#x6398;&#x4E0E;&#x5B9E;&#x65F6;&#x5206;&#x6790;&#xFF0C;&#x5E2E;&#x52A9;&#x5F00;&#x53D1;&#x8005;&#x3001;&#x5206;&#x6790;&#x5E08;&#x4EE5;&#x53CA;&#x7814;&#x7A76;&#x4EBA;&#x5458;&#x5FEB;&#x901F;&#x83B7;&#x53D6;&#x94FE;&#x4E0A;&#x7684;&#x52A8;&#x6001;&#x4FE1;&#x606F;&#x548C;&#x91CD;&#x8981;&#x8D8B;&#x52BF;&#x3002;</p><p>&#x4E0E;&#x4F20;&#x7EDF;&#x7684;&#x94FE;&#x4E0A;&#x6570;&#x636E;&#x5DE5;&#x5177;&#x76F8;&#x6BD4;&#xFF0C;Hemera &#x4E0D;&#x4EC5;&#x5173;&#x6CE8;&#x6570;&#x636E;&#x7684;&#x91C7;&#x96C6;&#x548C;&#x5C55;&#x793A;&#xFF0C;&#x66F4;&#x6CE8;&#x91CD;&#x6570;&#x636E;&#x7684;&#x4EF7;&#x503C;&#x6316;&#x6398;&#x548C;&#x667A;&#x80FD;&#x5316;&#x5E94;&#x7528;&#x3002;&#x901A;&#x8FC7;&#x652F;&#x6301;&#x591A;&#x94FE;&#x7ED3;&#x6784;&#x7684;&#x6570;&#x636E;&#x805A;&#x5408;&#x5206;&#x6790;&#xFF0C;Hemera &#x5E2E;&#x52A9;&#x7528;&#x6237;&#x5B9E;&#x73B0;&#x66F4;&#x6DF1;&#x5165;&#x7684;&#x6D1E;&#x5BDF;&#x3002;&#x4F8B;&#x5982;&#xFF0C;&#x5B83;&#x80FD;&#x591F;&#x8FC5;&#x901F;&#x8FFD;&#x8E2A;&#x533A;&#x5757;&#x94FE;&#x4E0A;&#x7684;&#x4EA4;&#x6613;&#x8DEF;&#x5F84;&#xFF0C;&#x5206;&#x6790;&#x8D44;&#x91D1;&#x6D41;&#x52A8;&#xFF0C;&#x8BC6;&#x522B;&#x5173;&#x952E;&#x7684;&#x4EA4;&#x4E92;&#x8282;&#x70B9;&#xFF0C;&#x4ECE;&#x800C;&#x63ED;&#x793A;&#x51FA;&#x9690;&#x85CF;&#x5728;&#x94FE;&#x4E0A;&#x590D;&#x6742;&#x4EA4;&#x4E92;&#x80CC;&#x540E;&#x7684;&#x5546;&#x4E1A;&#x903B;&#x8F91;&#x4E0E;&#x5E02;&#x573A;&#x52A8;&#x5411;&#x3002;</p><p>Hemera &#x7684;&#x8BBE;&#x8BA1;&#x7406;&#x5FF5;&#x8FD8;&#x4F53;&#x73B0;&#x4E86;&#x5F00;&#x653E;&#x6027;&#x4E0E;&#x6613;&#x7528;&#x6027;&#x3002;&#x501F;&#x52A9;&#x73B0;&#x4EE3;&#x5316;&#x7684;&#x53EF;&#x89C6;&#x5316;&#x754C;&#x9762;&#x548C; API &#x63A5;&#x53E3;&#xFF0C;&#x7528;&#x6237;&#x53EF;&#x4EE5;&#x65B9;&#x4FBF;&#x5730;&#x81EA;&#x5B9A;&#x4E49;&#x67E5;&#x8BE2;&#x548C;&#x521B;&#x5EFA;&#x5206;&#x6790;&#x6A21;&#x578B;&#xFF0C;&#x65E0;&#x8BBA;&#x662F;&#x9700;&#x8981;&#x57FA;&#x7840;&#x7684;&#x533A;&#x5757;&#x94FE;&#x6570;&#x636E;&#x7EDF;&#x8BA1;&#xFF0C;&#x8FD8;&#x662F;&#x9AD8;&#x7EA7;&#x7684;&#x6570;&#x636E;&#x79D1;&#x5B66;&#x5206;&#x6790;&#x9700;&#x6C42;&#xFF0C;Hemera &#x90FD;&#x80FD;&#x8F7B;&#x677E;&#x6EE1;&#x8DB3;&#x3002;&#x6B64;&#x5916;&#xFF0C;Hemera &#x91C7;&#x7528;&#x9AD8;&#x5EA6;&#x4F18;&#x5316;&#x7684;&#x6570;&#x636E;&#x5B58;&#x50A8;&#x4E0E;&#x8BA1;&#x7B97;&#x6280;&#x672F;&#xFF0C;&#x786E;&#x4FDD;&#x5728;&#x9762;&#x5BF9;&#x5927;&#x89C4;&#x6A21;&#x94FE;&#x4E0A;&#x6570;&#x636E;&#x65F6;&#xFF0C;&#x4F9D;&#x7136;&#x80FD;&#x591F;&#x4FDD;&#x6301;&#x826F;&#x597D;&#x7684;&#x6027;&#x80FD;&#x548C;&#x54CD;&#x5E94;&#x901F;&#x5EA6;&#x3002;</p><p>&#x901A;&#x8FC7; Hemera&#xFF0C;&#x533A;&#x5757;&#x94FE;&#x7684;&#x6570;&#x636E;&#x4E0D;&#x518D;&#x662F;&#x5B64;&#x7ACB;&#x7684;&#x8BB0;&#x5F55;&#xFF0C;&#x800C;&#x662F;&#x53EF;&#x4EE5;&#x88AB;&#x63A2;&#x7D22;&#x3001;&#x5173;&#x8054;&#x548C;&#x6DF1;&#x5165;&#x89E3;&#x8BFB;&#x7684;&#x4E30;&#x5BCC;&#x8D44;&#x4EA7;&#x3002;&#x65E0;&#x8BBA;&#x662F;&#x5F00;&#x53D1;&#x53BB;&#x4E2D;&#x5FC3;&#x5316;&#x5E94;&#x7528;&#xFF08;DApp&#xFF09;&#xFF0C;&#x7814;&#x7A76; DeFi &#x751F;&#x6001;&#xFF0C;&#x8FD8;&#x662F;&#x5206;&#x6790; NFT &#x5E02;&#x573A;&#xFF0C;Hemera &#x90FD;&#x662F;&#x4E0D;&#x53EF;&#x6216;&#x7F3A;&#x7684;&#x5F3A;&#x529B;&#x52A9;&#x624B;&#x3002;&#x5B83;&#x7684;&#x667A;&#x80FD;&#x5316;&#x94FE;&#x4E0A;&#x6570;&#x636E;&#x5206;&#x6790;&#x80FD;&#x529B;&#xFF0C;&#x6B63;&#x5F15;&#x9886;&#x7740;&#x533A;&#x5757;&#x94FE;&#x6570;&#x636E;&#x5206;&#x6790;&#x8FDB;&#x5165;&#x4E00;&#x4E2A;&#x5168;&#x65B0;&#x7684;&#x65F6;&#x4EE3;&#x3002;</p><h2 id="1%E4%BB%8B%E7%BB%8D-hemera-protocol"><strong>1.&#x4ECB;&#x7ECD; Hemera Protocol</strong></h2><p><br><strong>&#x4EC0;&#x4E48;&#x662F; Hemera&#xFF1F;</strong><br>Hemera&#x662F;&#x4E00;&#x79CD;&#x4EE5;&#x8D26;&#x6237;&#x4E3A;&#x4E2D;&#x5FC3;&#x7684;&#x53EF;&#x7F16;&#x7A0B;&#x7D22;&#x5F15;&#x534F;&#x8BAE;&#xFF08;Account-Centric Indexing, ACI&#xFF09;&#xFF0C;&#x4E13;&#x6CE8;&#x4E8E;&#x7B80;&#x5316;&#x94FE;&#x4E0A;&#x6570;&#x636E;&#x7684;&#x8BBF;&#x95EE;&#x548C;&#x7BA1;&#x7406;&#x3002;&#x4E0D;&#x540C;&#x4E8E;&#x4F20;&#x7EDF;&#x7684;&#x533A;&#x5757;&#x94FE;&#x7D22;&#x5F15;&#x65B9;&#x5F0F;&#xFF0C;Hemera&#x57FA;&#x4E8E;&#x7528;&#x6237;&#x8D26;&#x6237;&#x800C;&#x975E;&#x6BCF;&#x4E2A;&#x4EA4;&#x6613;&#x8FDB;&#x884C;&#x7D22;&#x5F15;&#xFF0C;&#x4ECE;&#x800C;&#x63D0;&#x5347;&#x6570;&#x636E;&#x8BBF;&#x95EE;&#x6548;&#x7387;&#x3001;&#x51CF;&#x5C11;&#x8D44;&#x6E90;&#x6D88;&#x8017;&#xFF0C;&#x7279;&#x522B;&#x9002;&#x7528;&#x4E8E;&#x5F00;&#x53D1;&#x4EBA;&#x5458;&#x548C;&#x94FE;&#x4E0A;&#x5E94;&#x7528;&#x7684;&#x6570;&#x636E;&#x7BA1;&#x7406;&#x9700;&#x6C42;&#x3002;<br></p><p><strong>&#x4F20;&#x7EDF;&#x533A;&#x5757;&#x94FE;&#x6570;&#x636E;&#x8BBF;&#x95EE;&#x7684;&#x6311;&#x6218;</strong><br>1.<strong>&#x6548;&#x7387;&#x4F4E;</strong>&#xFF1A;&#x6570;&#x636E;&#x8BBF;&#x95EE;&#x8D39;&#x65F6;&#x4E14;&#x8017;&#x8D39;&#x5927;&#x91CF;&#x8D44;&#x6E90;&#x3002;<br>2.<strong>&#x6210;&#x672C;&#x9AD8;</strong>&#xFF1A;&#x590D;&#x6742;&#x67E5;&#x8BE2;&#x9891;&#x7E41;&#x8C03;&#x7528;&#xFF0C;&#x5BFC;&#x81F4;&#x9AD8;&#x57FA;&#x7840;&#x8BBE;&#x65BD;&#x6210;&#x672C;&#x3002;<br>3.<strong>&#x6570;&#x636E;&#x81A8;&#x80C0;</strong>&#xFF1A;&#x4F20;&#x7EDF;&#x7D22;&#x5F15;&#x65B9;&#x5F0F;&#x5BF9;&#x6BCF;&#x4E2A;&#x4E8B;&#x4EF6;&#x6216;&#x4EA4;&#x6613;&#x5EFA;&#x7ACB;&#x7D22;&#x5F15;&#xFF0C;&#x5BFC;&#x81F4;&#x5197;&#x4F59;&#x6570;&#x636E;&#x91CF;&#x5927;&#x3002;</p><p><br><strong>Hemera &#x5982;&#x4F55;&#x5E94;&#x5BF9;&#x8FD9;&#x4E9B;&#x6311;&#x6218;&#xFF1F;</strong><br>1<strong>.&#x7528;&#x6237;&#x7EA7;&#x6570;&#x636E;&#x8BBF;&#x95EE;</strong>&#xFF1A;&#x901A;&#x8FC7;&#x4EE5;&#x8D26;&#x6237;&#x4E3A;&#x4E2D;&#x5FC3;&#x7684;&#x7D22;&#x5F15;&#x7B80;&#x5316;&#x6570;&#x636E;&#x8BBF;&#x95EE;&#x6D41;&#x7A0B;&#x3002;<br>2.<strong>&#x5B9E;&#x65F6;&#x7528;&#x6237;&#x884C;&#x4E3A;&#x6D1E;&#x5BDF;</strong>&#xFF1A;&#x652F;&#x6301;&#x8DE8;&#x94FE;&#x5B9E;&#x65F6;&#x5206;&#x6790;&#x7528;&#x6237;&#x884C;&#x4E3A;&#x3002;<br>3.<strong>&#x7075;&#x6D3B;&#x7684;&#x7528;&#x6237;&#x5B9A;&#x4E49;&#x51FD;&#x6570;&#xFF08;UDF&#xFF09;</strong>&#xFF1A;&#x63D0;&#x4F9B;&#x5185;&#x7F6E;&#x51FD;&#x6570;&#x5E93;&#x5E76;&#x652F;&#x6301;&#x81EA;&#x5B9A;&#x4E49;UDF&#xFF0C;&#x65B9;&#x4FBF;&#x5F00;&#x53D1;&#x8005;&#x8FDB;&#x884C;&#x7279;&#x5B9A;&#x7684;&#x6570;&#x636E;&#x63D0;&#x53D6;&#x548C;&#x5206;&#x6790;&#x3002;</p><p><br><strong>Hemera &#x5E94;&#x7528;&#x573A;&#x666F;</strong><br>1.<strong>&#x533A;&#x5757;&#x94FE;&#x6D4F;&#x89C8;&#x5668;</strong>&#xFF1A;&#x9AD8;&#x6548;&#x63A2;&#x7D22;&#x94FE;&#x4E0A;&#x6570;&#x636E;&#x3002;<br>2.<strong>&#x6295;&#x8D44;&#x7EC4;&#x5408;&#x8FFD;&#x8E2A;</strong>&#xFF1A;&#x5FEB;&#x901F;&#x83B7;&#x53D6;&#x548C;&#x5206;&#x6790;&#x8D44;&#x4EA7;&#x6295;&#x8D44;&#x7EC4;&#x5408;&#x3002;<br>3.<strong>&#x8EAB;&#x4EFD;&#x89E3;&#x51B3;&#x65B9;&#x6848;</strong>&#xFF1A;&#x4FBF;&#x6377;&#x5730;&#x6784;&#x5EFA;&#x4EE5;&#x7528;&#x6237;&#x4E3A;&#x4E2D;&#x5FC3;&#x7684;&#x53BB;&#x4E2D;&#x5FC3;&#x5316;&#x8EAB;&#x4EFD;&#x8D26;&#x6237;&#x3002;</p><h2 id="2-%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE"><br>2. &#x73AF;&#x5883;&#x914D;&#x7F6E;</h2><p><br>&#x4E3A;&#x4E86;&#x987A;&#x5229;&#x8FD0;&#x884C;Hemera&#x9879;&#x76EE;&#xFF0C;&#x9700;&#x8981;&#x5B89;&#x88C5;&#x4EE5;&#x4E0B;&#x8F6F;&#x4EF6;&#x548C;&#x5F00;&#x53D1;&#x73AF;&#x5883;&#xFF1A;</p><p><strong>1.Python</strong>&#xFF1A;&#x94FE;&#x4E0A;&#x6570;&#x636E;&#x5904;&#x7406;&#x7684;&#x5FC5;&#x5907;&#x8BED;&#x8A00;&#x73AF;&#x5883;&#xFF0C;&#x53C2;&#x8003;&#x5B89;&#x88C5;&#x6559;&#x7A0B;&#xFF1A;<a href="https://blog.csdn.net/qq_53280175/article/details/121107748">Python&#x5B89;&#x88C5;&#x6559;&#x7A0B;</a>&#x3002;<br><strong>2.PostgreSQL</strong>&#xFF1A;&#x6570;&#x636E;&#x5E93;&#x7BA1;&#x7406;&#x7CFB;&#x7EDF;&#xFF0C;&#x7528;&#x4E8E;&#x5B58;&#x50A8;&#x548C;&#x7BA1;&#x7406;&#x94FE;&#x4E0A;&#x6570;&#x636E;&#xFF0C;&#x53C2;&#x8003;&#x5B89;&#x88C5;&#x6559;&#x7A0B;&#xFF1A;<a href="https://blog.csdn.net/weixin_54787369/article/details/141348101">PostgreSQL&#x5B89;&#x88C5;&#x6559;&#x7A0B;</a>&#x3002;&#x82E5;&#x51FA;&#x73B0;&#x5B89;&#x88C5;&#x95EE;&#x9898;&#xFF0C;&#x53C2;&#x8003;&#x89E3;&#x51B3;&#x6559;&#x7A0B;&#xFF1A;<a href="https://blog.csdn.net/feriman/article/details/119519772">PostgreSQL&#x5B89;&#x88C5;&#x8FC7;&#x7A0B;&#x95EE;&#x9898;&#x89E3;&#x51B3;&#x6559;&#x7A0B;</a><br><strong>3.PostgreSQL&#x53EF;&#x89C6;&#x5316;&#x5DE5;&#x5177;</strong>&#xFF1A;&#x5EFA;&#x8BAE;&#x5B89;&#x88C5;Navicat&#x6216;Workbench&#x7B49;&#x53EF;&#x89C6;&#x5316;&#x5DE5;&#x5177;&#x8FDB;&#x884C;&#x6570;&#x636E;&#x5E93;&#x7BA1;&#x7406;&#x3002;<br><strong>4.WSL&#xFF08;Windows&#x5B50;&#x7CFB;&#x7EDF;</strong>&#xFF09;&#xFF1A;&#x5728;Windows&#x4E0A;&#x8FD0;&#x884C;Linux&#x73AF;&#x5883;&#x7684;&#x5FC5;&#x5907;&#x5DE5;&#x5177;&#xFF0C;&#x65B9;&#x4FBF;&#x5F00;&#x53D1;&#x8005;&#x4F7F;&#x7528;Linux&#x547D;&#x4EE4;&#x884C;&#x548C;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#xFF0C;&#x8BE6;&#x7EC6;&#x5B89;&#x88C5;&#x6307;&#x5357;&#xFF1A;<a href="https://blog.csdn.net/weixin_44301630/article/details/122390018">WSL&#x5B89;&#x88C5;&#x6559;&#x7A0B;&#x3002;</a></p><h2 id="3-%E8%8E%B7%E5%8F%96%E9%A1%B9%E7%9B%AE%E6%BA%90%E7%A0%81"><br>3. &#x83B7;&#x53D6;&#x9879;&#x76EE;&#x6E90;&#x7801;</h2><p><br><strong>&#x514B;&#x9686;&#x6E90;&#x7801;</strong><br>&#x5BF9;&#x4E8E;&#x6709;&#x4E00;&#x5B9A;&#x5F00;&#x53D1;&#x7ECF;&#x9A8C;&#x7684;&#x7528;&#x6237;&#xFF0C;&#x53EF;&#x4ECE;GitHub&#x514B;&#x9686;Hemera&#x9879;&#x76EE;&#x6E90;&#x7801;&#x5E76;&#x81EA;&#x884C;&#x914D;&#x7F6E;&#x73AF;&#x5883;&#xFF1A;</p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/11/image-33.png" class="kg-image" alt loading="lazy" width="1614" height="240"></figure><p><br>&#x63D0;&#x793A;&#xFF1A;&#x8BF7;&#x786E;&#x4FDD;&#x5DF2;&#x5B89;&#x88C5;Git&#xFF0C;&#x53C2;&#x8003;&#x5B89;&#x88C5;&#x6559;&#x7A0B;&#xFF1A;<a href="https://blog.csdn.net/mukes/article/details/115693833">Git&#x8BE6;&#x7EC6;&#x5B89;&#x88C5;&#x6559;&#x7A0B;&#x3002;</a></p><h2 id="4hemerea%E5%85%A5%E9%97%A8demo">4.Hemerea&#x5165;&#x95E8;demo</h2><p><br><strong>Demo &#x8FD0;&#x884C;&#x6B65;&#x9AA4;</strong><br> &#xA0;<strong> &#xA0; 1.&#x521B;&#x5EFA;&#x9879;&#x76EE;&#x6587;&#x4EF6;&#x5939;</strong></p><p> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0;&#x5728;&#x4E3B;&#x76EE;&#x5F55;&#x4E0B;&#x521B;&#x5EFA; code/hemere &#x6587;&#x4EF6;&#x5939;&#xFF0C;&#x7528;&#x4E8E;&#x5B58;&#x653E;&#x9879;&#x76EE;&#x4EE3;&#x7801;&#xFF1A;</p><p> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0;mkdir -p ~/code/hemere<br><br> &#xA0; &#xA0; <strong>2.&#x8FDB;&#x5165;&#x6587;&#x4EF6;&#x5939;</strong></p><p> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#x8FDB;&#x5165;&#x521A;&#x521B;&#x5EFA;&#x7684; code/hemere &#x6587;&#x4EF6;&#x5939;&#xFF1A;</p><p> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; cd ~/code/hemere<br><br> &#xA0; &#xA0;<strong>3.&#x68C0;&#x67E5; Git &#x7248;&#x672C;</strong></p><p> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#x786E;&#x8BA4;&#x5B89;&#x88C5;&#x4E86; Git&#xFF0C;&#x5E76;&#x68C0;&#x67E5; Git &#x7248;&#x672C;&#xFF1A;</p><p> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0;git --version<br></p><p> &#xA0; &#xA0;<strong>4.&#x514B;&#x9686;&#x4EE3;&#x7801;&#x4ED3;&#x5E93;</strong></p><p> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#x4ECE;GitHub&#x514B;&#x9686;Hemera&#x9879;&#x76EE;&#x6E90;&#x7801;&#x5230;&#x672C;&#x5730;&#xFF1A;</p><p> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0;git clone <a href="https://github.com/HemeraProtocol/hemera-indexer.git">https://github.com/HemeraProtocol/hemera-indexer.git</a><br><br> &#xA0; &#xA0; 5.&#x8FDB;&#x5165;&#x9879;&#x76EE;&#x76EE;&#x5F55;</p><p> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#x8FDB;&#x5165;&#x4E0B;&#x8F7D;&#x7684;&#x9879;&#x76EE;&#x6587;&#x4EF6;&#x5939; hemera-indexer&#xFF1A;</p><p> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; cd hemera-indexer/<br> &#xA0; &#xA0; <strong>6.&#x5B89;&#x88C5; Python &#x5F00;&#x53D1;&#x73AF;&#x5883;</strong></p><p> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0;&#x5B89;&#x88C5; Python 3.9.5 &#x73AF;&#x5883;&#xFF1A;</p><p> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0;sudo apt install python3<br> &#xA0; &#xA0;<strong> 7.&#x5B89;&#x88C5; Python &#x865A;&#x62DF;&#x73AF;&#x5883;&#x7BA1;&#x7406;&#x5DE5;&#x5177;</strong></p><p> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0;&#x5B89;&#x88C5; venv&#xFF0C;&#x7528;&#x4E8E;&#x521B;&#x5EFA;Python&#x865A;&#x62DF;&#x73AF;&#x5883;&#xFF1A;</p><p> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; sudo apt install python3-venv<br> &#xA0; &#xA0; <strong>8.&#x68C0;&#x67E5; Python &#x7248;&#x672C;</strong></p><p> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#x786E;&#x8BA4; Python &#x5B89;&#x88C5;&#x6B63;&#x786E;&#x5E76;&#x67E5;&#x770B;&#x7248;&#x672C;&#xFF1A;</p><p> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0;python3 --version<br> &#xA0; &#xA0; <strong>9.&#x521B;&#x5EFA; Python &#x865A;&#x62DF;&#x73AF;&#x5883;</strong></p><p> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#x5728;&#x9879;&#x76EE;&#x6587;&#x4EF6;&#x5939;&#x4E2D;&#x521B;&#x5EFA;&#x865A;&#x62DF;&#x73AF;&#x5883; venv&#xFF1A;</p><p> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; python3 -m venv ./venv<br><br> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0;&#x5230;&#x6B64;&#x4E3A;&#x6B62;&#x5168;&#x90E8;&#x5B8C;&#x6210;&#x4F1A;&#x5728;~/code/hemere/hemera-indexer&#x76EE;&#x5F55;&#x4E0B;&#x9762;&#x770B;&#x89C1;&#x4E00;&#x4E2A;venv&#x6587;&#x4EF6;&#x5939;&#xFF0C;&#x8BF4;&#x660E;Python&#x865A;&#x62DF;&#x73AF;&#x5883;&#x521B;&#x5EFA;&#x6210;&#x529F;</p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/11/image-31.png" class="kg-image" alt loading="lazy" width="2259" height="825"></figure><p><strong> &#xA0; &#xA0; 10.&#x5B89;&#x88C5;&#x4F9D;&#x8D56;&#x7BA1;&#x7406;&#x5DE5;&#x5177; Make</strong></p><p> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; Make&#x7528;&#x4E8E;&#x81EA;&#x52A8;&#x5316;&#x4F9D;&#x8D56;&#x7BA1;&#x7406;&#xFF0C;&#x786E;&#x4FDD;&#x7CFB;&#x7EDF;&#x4E2D;&#x5DF2;&#x5B89;&#x88C5;&#xFF1A;</p><p> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0;sudo apt install make<br> &#xA0; &#xA0;<strong>11.&#x4E0B;&#x8F7D;&#x9879;&#x76EE;&#x4F9D;&#x8D56;</strong></p><p> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0;&#x4F7F;&#x7528; Make &#x4E0B;&#x8F7D;&#x548C;&#x6574;&#x7406;&#x9879;&#x76EE;&#x4F9D;&#x8D56;&#xFF1A;</p><p> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0;make development<br><br> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0;&#x4E0B;&#x8F7D;&#x6240;&#x6709;&#x4F9D;&#x8D56;&#x4E4B;&#x540E;&#x4F1A;&#x63D0;&#x793A;&#xFF1A;source .venv/bin/activate</p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/11/image-32.png" class="kg-image" alt loading="lazy" width="2127" height="1095"></figure><p><strong> &#xA0; 12.&#x6FC0;&#x6D3B;&#x865A;&#x62DF;&#x73AF;&#x5883;</strong></p><p> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0;&#x8FDB;&#x5165; Python &#x865A;&#x62DF;&#x73AF;&#x5883;&#xFF1A;</p><p> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; source .venv/bin/activate<br><br> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0;&#x8981;&#x9000;&#x51FA;&#x865A;&#x62DF;&#x73AF;&#x5883;&#xFF0C;&#x8BF7;&#x8FD0;&#x884C;&#xFF1A;</p><p> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; deactivate</p><p><br> &#xA0; <strong>13.&#x8FD0;&#x884C; Demo</strong></p><p> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#x8FD0;&#x884C; Demo &#x811A;&#x672C;&#x4EE5;&#x83B7;&#x53D6;&#x7279;&#x5B9A;&#x533A;&#x5757;&#x4E0A;&#x7684;&#x6570;&#x636E;&#x3002;&#x672C;&#x793A;&#x4F8B;&#x4E2D;&#xFF0C;&#x5C06;&#x67E5;&#x8BE2;&#x533A;&#x5757; 100001 &#x5230; 100003 &#x7684;&#x4FE1;&#x606F;&#xFF1A;</p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/11/image-34.png" class="kg-image" alt loading="lazy" width="1531" height="208"></figure><p> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#x8FD0;&#x884C;&#x6548;&#x679C;&#x5C55;&#x793A;&#xFF1A;</p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/11/image-30.png" class="kg-image" alt loading="lazy" width="2309" height="753"></figure><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/11/image-29.png" class="kg-image" alt loading="lazy" width="2323" height="777"></figure><h2 id="5%E7%94%A8%E6%88%B7%E5%AE%9A%E4%B9%89%E5%87%BD%E6%95%B0-user-defined-functions-udf">5.&#x7528;&#x6237;&#x5B9A;&#x4E49;&#x51FD;&#x6570; (User-Defined Functions, UDF)</h2><p><br> <strong>1.&#x4EC0;&#x4E48;&#x662F; UDF&#xFF1F;</strong><br> &#xA0; &#xA0; &#xA0; &#xA0; &#x7528;&#x6237;&#x5B9A;&#x4E49;&#x51FD;&#x6570;&#xFF08;UDF&#xFF09;&#x5141;&#x8BB8;&#x5F00;&#x53D1;&#x8005;&#x7F16;&#x5199;&#x81EA;&#x5B9A;&#x4E49;&#x7684;&#x67E5;&#x8BE2;&#x51FD;&#x6570;&#xFF0C;&#x4EE5;&#x4FBF;&#x66F4;&#x7075;&#x6D3B;&#x9AD8;&#x6548;&#x5730;&#x63D0;&#x53D6;&#x7279;&#x5B9A;&#x6570;&#x636E;&#x3002;Hemera&#x5185;&#x7F6E;&#x4E86;&#x591A;&#x4E2A;&#x9884;&#x6784;&#x5EFA;&#x7684;UDF&#x793A;&#x4F8B;&#xFF0C;&#x5982;&#x63D0;&#x53D6;&#x8D26;&#x6237;&#x4F59;&#x989D;&#x3001;&#x4E8B;&#x4EF6;&#x65E5;&#x5FD7;&#x7B49;&#xFF0C;&#x5F00;&#x53D1;&#x8005;&#x53EF;&#x4EE5;&#x6839;&#x636E;&#x9700;&#x6C42;&#x8FDB;&#x4E00;&#x6B65;&#x8C03;&#x6574;&#xFF0C;&#x751A;&#x81F3;&#x521B;&#x5EFA;&#x5168;&#x65B0;&#x7684;UDF&#x4EE5;&#x6EE1;&#x8DB3;&#x7279;&#x5B9A;&#x7684;&#x4E1A;&#x52A1;&#x9700;&#x6C42;&#x3002;</p><p><strong>2.UDF &#x7684;&#x5DE5;&#x4F5C;&#x539F;&#x7406;</strong><br> &#xA0;UDF&#x5305;&#x542B;&#x4EE5;&#x4E0B;&#x6838;&#x5FC3;&#x7EC4;&#x4EF6;&#xFF1A;</p><p> &#xA0;<strong> 1.&#x6570;&#x636E;&#x6A21;&#x578B;</strong>&#xFF1A;&#x5B9A;&#x4E49;UDF&#x4E2D;&#x5904;&#x7406;&#x7684;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x3002;<br> &#xA0; <strong>2.&#x6570;&#x636E;&#x7C7B;</strong>&#xFF1A;&#x7EC4;&#x7EC7;&#x8F93;&#x5165;&#x548C;&#x8F93;&#x51FA;&#x6570;&#x636E;&#x7684;&#x7C7B;&#x578B;&#xFF0C;&#x4EE5;&#x63D0;&#x5347;&#x6548;&#x7387;&#x3002;<br> &#xA0; 3<strong>.&#x4E1A;&#x52A1;&#x903B;&#x8F91;</strong>&#xFF1A;&#x5B9A;&#x4E49;UDF&#x7684;&#x6838;&#x5FC3;&#x903B;&#x8F91;&#xFF0C;&#x7528;&#x4E8E;&#x6570;&#x636E;&#x5904;&#x7406;&#x548C;&#x8F6C;&#x6362;&#x3002;</p><h2 id="6-%E6%9E%84%E5%BB%BA%E5%92%8C%E9%83%A8%E7%BD%B2%E6%82%A8%E7%9A%84%E7%AC%AC%E4%B8%80%E4%B8%AA-udf"><br>6. &#x6784;&#x5EFA;&#x548C;&#x90E8;&#x7F72;&#x60A8;&#x7684;&#x7B2C;&#x4E00;&#x4E2A; UDF</h2><p><br><strong>&#x73AF;&#x5883;&#x914D;&#x7F6E;</strong><br> &#xA0; &#xA0; 1<strong>.&#x4F7F;&#x7528;Docker</strong>&#xFF1A;&#x9002;&#x7528;&#x4E8E;&#x5FEB;&#x901F;&#x90E8;&#x7F72;&#x73AF;&#x5883;&#x3002;<br> &#xA0; &#xA0; &#xA0; &#xA0;&#x6B65;&#x9AA4;1&#xFF1A;&#x5B89;&#x88C5;Docker&#x3002;<br> &#xA0; &#xA0; &#xA0; &#xA0;&#x6B65;&#x9AA4;2&#xFF1A;&#x514B;&#x9686;hemera-indexer&#x4ED3;&#x5E93;&#x3002;<br> &#xA0; &#xA0; &#xA0; &#xA0;&#x6B65;&#x9AA4;3&#xFF1A;&#x83B7;&#x53D6;&#x76EE;&#x6807;EVM&#x94FE;&#x7684;RPC URL&#x3002;<br> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0;&#x66F4;&#x591A;Docker&#x4F7F;&#x7528;&#x8BF4;&#x660E;&#x8BE6;&#x89C1;&#xFF1A;<a href="https://blog.csdn.net/mukes/article/details/115693833">Docker&#x6587;&#x6863;</a>&#x3002;<br> &#xA0; &#xA0; 2.<strong>&#x4ECE;&#x6E90;&#x7801;&#x6784;&#x5EFA;</strong>&#xFF1A;&#x9002;&#x7528;&#x4E8E;&#x5F00;&#x53D1;&#x548C;&#x8C03;&#x8BD5;&#x3002;<br> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#x5B89;&#x88C5;&#x5F00;&#x53D1;&#x5DE5;&#x5177;&#xFF08;Linux/Unix&#x73AF;&#x5883;&#xFF09;&#x3002;<br> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#x6267;&#x884C; make development &#x542F;&#x52A8;&#x5F00;&#x53D1;&#x73AF;&#x5883;&#x3002;<br> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#x914D;&#x7F6E; PostgreSQL &#x5B9E;&#x4F8B;&#x3002;<br> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#x8FD0;&#x884C; hemera.py stream &#x542F;&#x52A8;&#x7D22;&#x5F15;&#x5668;&#x3002;<br> &#xA0; &#xA0; &#xA0; &#xA0; &#xA0; &#xA0;&#x8BE6;&#x7EC6;&#x5B89;&#x88C5;&#x6307;&#x5357;&#x53C2;&#x89C1;&#xFF1A;<a href="https://github.com/HemeraProtocol/hemera-indexer">&#x6E90;&#x7801;&#x6784;&#x5EFA;&#x6587;&#x6863;&#x3002;</a><br><strong>&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x7B80;&#x5355;&#x7684; UDF &#x6B65;&#x9AA4;</strong><br> &#xA0; 1.<strong>&#x5B9A;&#x4E49;&#x6570;&#x636E;&#x7C7B;</strong>&#xFF1A;&#x4F8B;&#x5982;&#xFF0C;&#x4E3A;ERC721 Token Mint&#x5B9A;&#x4E49;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x3002;<br> &#xA0; 2.<strong>&#x5B9E;&#x73B0;&#x6570;&#x636E;&#x5E93;&#x6A21;&#x578B;</strong>&#xFF1A;&#x5728;PostgreSQL&#x4E2D;&#x5B9A;&#x4E49;ERC721 Token Mint&#x4E8B;&#x4EF6;&#x7684;&#x6570;&#x636E;&#x5B58;&#x50A8;&#x6A21;&#x578B;&#x3002;<br> &#xA0;3<strong>.&#x5B9E;&#x73B0;UDF&#x4EFB;&#x52A1;</strong>&#xFF1A;&#x5728;UDF&#x4E2D;&#x5B9E;&#x73B0;&#x6570;&#x636E;&#x5904;&#x7406;&#x903B;&#x8F91;&#xFF0C;&#x8FC7;&#x6EE4;&#x548C;&#x63D0;&#x53D6;&#x94FE;&#x4E0A;&#x4E8B;&#x4EF6;&#x3002;<br> &#xA0;4.<strong>&#x6D4B;&#x8BD5; UDF</strong>&#xFF1A;&#x7F16;&#x5199;&#x5355;&#x5143;&#x6D4B;&#x8BD5;&#x4EE5;&#x9A8C;&#x8BC1;UDF&#x7684;&#x51C6;&#x786E;&#x6027;&#x3002;<br> &#xA0;5.<strong>&#x90E8;&#x7F72; UDF</strong>&#xFF1A;&#x5C06;UDF&#x6587;&#x4EF6;&#x52A0;&#x5165;Hemera&#x7D22;&#x5F15;&#x5668;&#x76EE;&#x5F55;&#xFF0C;&#x66F4;&#x65B0;&#x914D;&#x7F6E;&#x5E76;&#x91CD;&#x542F;&#x7D22;&#x5F15;&#x5668;&#x4EE5;&#x52A0;&#x8F7D;&#x65B0;&#x529F;&#x80FD;&#x3002;<br>&#x4EE3;&#x7801;&#x793A;&#x4F8B;&#xFF1A;<a href="https://github.com/HemeraProtocol/hemera-indexer">ERC721 Token Mint Tracker &#x793A;&#x4F8B;&#x4EE3;&#x7801;&#x3002;</a></p><h2 id="7%E9%AB%98%E7%BA%A7-udf-%E5%BC%80%E5%8F%91%E4%B8%8E%E5%AE%9E%E9%99%85%E5%BA%94%E7%94%A8">7.&#x9AD8;&#x7EA7; UDF &#x5F00;&#x53D1;&#x4E0E;&#x5B9E;&#x9645;&#x5E94;&#x7528;</h2><p><br><strong>&#x5B9E;&#x6218;&#x793A;&#x4F8B;&#xFF1A;ERC20 Token &#x8FFD;&#x8E2A;</strong><br>&#x76EE;&#x6807;&#x662F;&#x5F00;&#x53D1;&#x4E00;&#x4E2A;UDF&#xFF0C;&#x8FFD;&#x8E2A;&#x6307;&#x5B9A;&#x94B1;&#x5305;&#x5730;&#x5740;&#x7684;ERC20 Token&#x4EA4;&#x6613;&#x6D41;&#x91CF;&#xFF0C;&#x5305;&#x62EC;&#x6240;&#x6709;&#x6536;&#x6B3E;&#x548C;&#x4ED8;&#x6B3E;&#x7684;&#x7D2F;&#x8BA1;&#x6570;&#x91CF;&#x3002;UDF&#x8F93;&#x5165;&#x548C;&#x8F93;&#x51FA;&#x5982;&#x4E0B;&#xFF1A;</p><p> &#xA0; &#xA0; 1.&#x8F93;&#x5165;&#xFF1A;&#x94B1;&#x5305;&#x5730;&#x5740;&#x3002;<br> &#xA0; &#xA0; &#xA0;2.&#x8F93;&#x51FA;&#xFF1A;&#x8FD4;&#x56DE;&#x8BE5;&#x5730;&#x5740;&#x63A5;&#x6536;&#x548C;&#x53D1;&#x9001;&#x7684;ERC20 Token&#x7D2F;&#x8BA1;&#x6570;&#x989D;&#x3002;<br><strong>UDF &#x7684;&#x5B9E;&#x9645;&#x5E94;&#x7528;&#x573A;&#x666F;</strong><br> &#xA0; &#xA0; &#xA0;1.&#x533A;&#x5757;&#x94FE;&#x6D4F;&#x89C8;&#x5668;&#xFF1A;&#x901A;&#x8FC7;&#x7ED3;&#x5408;&#x591A;&#x79CD;UDF&#x5B9E;&#x73B0;&#x94FE;&#x4E0A;&#x4EA4;&#x4E92;&#x7684;&#x53EF;&#x89C6;&#x5316;&#x3002;<br> &#xA0; &#xA0; &#xA0;2.&#x94FE;&#x4E0A;&#x793E;&#x4EA4;&#x56FE;&#x8C31;&#xFF1A;&#x5206;&#x6790;&#x5730;&#x5740;&#x4E4B;&#x95F4;&#x7684;&#x4EA4;&#x4E92;&#xFF0C;&#x6784;&#x5EFA;&#x53BB;&#x4E2D;&#x5FC3;&#x5316;&#x7684;&#x793E;&#x4EA4;&#x56FE;&#x8C31;&#x3002;<br> &#xA0; &#xA0; &#xA0;3.DeFi&#x6295;&#x8D44;&#x7EC4;&#x5408;&#x8FFD;&#x8E2A;&#xFF1A;&#x805A;&#x5408;&#x591A;&#x79CD;DeFi&#x534F;&#x8BAE;&#x7684;&#x6570;&#x636E;&#xFF0C;&#x4EE5;&#x4FBF;&#x7528;&#x6237;&#x5B9E;&#x65F6;&#x8DDF;&#x8E2A;&#x6295;&#x8D44;&#x7EC4;&#x5408;&#x3002;<br><strong>UDF &#x6027;&#x80FD;&#x4F18;&#x5316;</strong><br> &#xA0; <strong>1.&#x6570;&#x636E;&#x7ED3;&#x6784;&#x4F18;&#x5316;</strong>&#xFF1A;&#x4F7F;&#x7528;&#x96C6;&#x5408;&#x7B49;&#x9AD8;&#x6548;&#x6570;&#x636E;&#x7ED3;&#x6784;&#xFF0C;&#x52A0;&#x5FEB;&#x67E5;&#x8BE2;&#x901F;&#x5EA6;&#x3002;<br> &#xA0; <strong>2.&#x6279;&#x5904;&#x7406;</strong>&#xFF1A;&#x5C06;&#x6570;&#x636E;&#x5206;&#x6279;&#x5904;&#x7406;&#xFF0C;&#x51CF;&#x5C11;&#x5355;&#x6B21;RPC&#x8C03;&#x7528;&#x538B;&#x529B;&#x3002;<br> &#xA0; <strong>3.&#x7F13;&#x5B58;</strong>&#xFF1A;&#x7F13;&#x5B58;&#x9891;&#x7E41;&#x8BBF;&#x95EE;&#x7684;&#x6570;&#x636E;&#xFF0C;&#x63D0;&#x5347;&#x54CD;&#x5E94;&#x901F;&#x5EA6;&#x3002;<br> &#xA0; <strong>4.&#x5E76;&#x884C;&#x5904;&#x7406;</strong>&#xFF1A;&#x5C06;&#x4EFB;&#x52A1;&#x5206;&#x5757;&#xFF0C;&#x5E76;&#x4F7F;&#x7528;&#x591A;&#x5DE5;&#x4F5C;&#x8282;&#x70B9;&#x5E76;&#x884C;&#x6267;&#x884C;&#xFF0C;&#x63D0;&#x9AD8;&#x5904;&#x7406;&#x6548;&#x7387;&#x3002;</p><h2 id="8-hemera-%E7%94%9F%E6%80%81%E7%B3%BB%E7%BB%9F%E4%B8%8E%E5%BC%80%E5%8F%91%E8%80%85%E6%94%AF%E6%8C%81"><br>8. Hemera &#x751F;&#x6001;&#x7CFB;&#x7EDF;&#x4E0E;&#x5F00;&#x53D1;&#x8005;&#x652F;&#x6301;</h2><p><br>Hemera&#x79EF;&#x6781;&#x652F;&#x6301;&#x5F00;&#x53D1;&#x8005;&#x53C2;&#x4E0E;&#x751F;&#x6001;&#x5EFA;&#x8BBE;&#xFF0C;&#x5E76;&#x63D0;&#x4F9B;&#x8BE6;&#x7EC6;&#x7684;&#x5F00;&#x53D1;&#x6307;&#x5357;&#x548C;&#x6280;&#x672F;&#x652F;&#x6301;&#xFF0C;&#x5F00;&#x53D1;&#x8005;&#x53EF;&#x4EE5;&#x5728;&#x751F;&#x6001;&#x7CFB;&#x7EDF;&#x4E2D;&#x8D21;&#x732E;&#x81EA;&#x5DF1;&#x7684;UDF&#x6A21;&#x5757;&#x3002;Hemera&#x7684;&#x652F;&#x6301;&#x5185;&#x5BB9;&#x5305;&#x62EC;&#xFF1A;</p><p> &#xA0; &#xA0;1.&#x6587;&#x6863;&#x548C;&#x6559;&#x7A0B;&#xFF1A;<a href="https://docs.thehemera.com">Hemera&#x6587;&#x6863;</a><br> &#xA0; &#xA0;2.GitHub&#x4ED3;&#x5E93;&#xFF1A;<a href="https://github.com/HemeraProtocol/hemera-indexer">Hemera Protocol GitHub</a><br> &#xA0; &#xA0;3.&#x793E;&#x533A;&#x652F;&#x6301;&#xFF1A;<a href="https://discord.gg/socialscan">Discord&#x793E;&#x533A;</a></p><p>&#x6B64;&#x5916;&#xFF0C;Hemera&#x63D0;&#x4F9B; UDF&#x6784;&#x5EFA;&#x8005;&#x8BA1;&#x5212;&#xFF0C;&#x9F13;&#x52B1;&#x5F00;&#x53D1;&#x8005;&#x521B;&#x5EFA;&#x548C;&#x5206;&#x4EAB;UDF&#x7684;&#x5B9E;&#x9645;&#x5E94;&#x7528;&#x6848;&#x4F8B;&#x3002;&#x66F4;&#x591A;&#x8BE6;&#x60C5;&#x8BF7;&#x8BBF;&#x95EE;&#xFF1A;<a href="https://hemera-devrel.notion.site/UDF-Builder-Program-1283bbc7e8fc806b961bf0a2ea5f1e94">UDF&#x6784;&#x5EFA;&#x8005;&#x8BA1;&#x5212;&#x3002;</a></p><p>&#x4F5C;&#x8005;&#xFF1A;<a href="https://blog.csdn.net/2201_75660229?type=blog">&#x5362;&#x83DC;&#x83DC;&#x7684;&#x7F16;&#x7A0B;&#x5C0F;&#x7A9D;</a> &#xFF0C;<a href="https://blog.csdn.net/qq_39961030?type=blog">&#x53EF;&#x7231;&#x6770;&#x5C3C;&#x9F9F;</a><br>&#x2014;&#x2014;&#x2014;&#x2014;&#x2014;&#x2014;&#x2014;&#x2014;&#x2014;&#x2014;&#x2014;&#x2014;&#x2014;&#x2014;&#x2014;&#x2014;</p><p>&#x539F;&#x6587;&#x94FE;&#x63A5;&#xFF1A;<a href="https://blog.csdn.net/A_mikey/article/details/143776862">https://blog.csdn.net/A_mikey/article/details/143776862</a></p>]]></content:encoded></item><item><title><![CDATA[Sui move共学 task1]]></title><description><![CDATA[<p><strong>&#x5F15;&#x8A00;</strong><br> &#xA0; &#xA0;&#x5728;&#x533A;&#x5757;&#x94FE;&#x6280;&#x672F;&#x8FC5;&#x731B;&#x53D1;&#x5C55;&#x7684;&#x4ECA;&#x5929;&#xFF0C;&#x5B66;&#x4E60;&#x65B0;&#x5174;&#x7684;&#x7F16;&#x7A0B;&#x8BED;&#x8A00;&#x53D8;&#x5F97;&#x5C24;&#x4E3A;&#x91CD;&#x8981;&#x3002;Move&#x8BED;&#x8A00;&#x4F5C;&#x4E3A;Sui&#x533A;&#x5757;&#x94FE;&#x7684;&#x6838;&#x5FC3;&#x7F16;&#x7A0B;&#x8BED;&#x8A00;</p>]]></description><link>https://www.thinkingsolidity.com/suixue-xi-task1/</link><guid isPermaLink="false">6731d8f7903d7005b6870d4a</guid><category><![CDATA[SUI Move 语言]]></category><dc:creator><![CDATA[JRBC 技术部]]></dc:creator><pubDate>Mon, 11 Nov 2024 10:23:20 GMT</pubDate><content:encoded><![CDATA[<p><strong>&#x5F15;&#x8A00;</strong><br> &#xA0; &#xA0;&#x5728;&#x533A;&#x5757;&#x94FE;&#x6280;&#x672F;&#x8FC5;&#x731B;&#x53D1;&#x5C55;&#x7684;&#x4ECA;&#x5929;&#xFF0C;&#x5B66;&#x4E60;&#x65B0;&#x5174;&#x7684;&#x7F16;&#x7A0B;&#x8BED;&#x8A00;&#x53D8;&#x5F97;&#x5C24;&#x4E3A;&#x91CD;&#x8981;&#x3002;Move&#x8BED;&#x8A00;&#x4F5C;&#x4E3A;Sui&#x533A;&#x5757;&#x94FE;&#x7684;&#x6838;&#x5FC3;&#x7F16;&#x7A0B;&#x8BED;&#x8A00;&#xFF0C;&#x4E0D;&#x4EC5;&#x5177;&#x5907;&#x9AD8;&#x6548;&#x7684;&#x5B89;&#x5168;&#x6027;&#x548C;&#x53EF;&#x6269;&#x5C55;&#x6027;&#xFF0C;&#x8FD8;&#x4E3A;&#x5F00;&#x53D1;&#x8005;&#x63D0;&#x4F9B;&#x4E86;&#x4E30;&#x5BCC;&#x7684;&#x529F;&#x80FD;&#x3002;&#x4E3A;&#x4E86;&#x9F13;&#x52B1;&#x66F4;&#x591A;&#x4EBA;&#x638C;&#x63E1;&#x8FD9;&#x95E8;&#x8BED;&#x8A00;&#xFF0C;&quot;Let&apos;s Move&quot;&#x6FC0;&#x52B1;&#x8BA1;&#x5212;&#x5E94;&#x8FD0;&#x800C;&#x751F;&#x3002;&#x901A;&#x8FC7;&#x53C2;&#x4E0E;&#x8FD9;&#x4E00;&#x8BA1;&#x5212;&#xFF0C;&#x5F00;&#x53D1;&#x8005;&#x53EF;&#x4EE5;&#x5728;&#x5B66;&#x4E60;Move&#x8BED;&#x8A00;&#x7684;&#x540C;&#x65F6;&#xFF0C;&#x83B7;&#x53D6;SUI&#x4EE3;&#x5E01;&#x5956;&#x52B1;&#x3002;&#x8FD9;&#x4E0D;&#x4EC5;&#x662F;&#x4E00;&#x79CD;&#x5B66;&#x4E60;&#x65B9;&#x5F0F;&#xFF0C;&#x4E5F;&#x4E3A;&#x5F00;&#x53D1;&#x8005;&#x63D0;&#x4F9B;&#x4E86;&#x5B9E;&#x8DF5;&#x7684;&#x673A;&#x4F1A;&#xFF0C;&#x8BA9;&#x4ED6;&#x4EEC;&#x5728;&#x5B9E;&#x9645;&#x64CD;&#x4F5C;&#x4E2D;&#x7406;&#x89E3;&#x533A;&#x5757;&#x94FE;&#x7684;&#x8FD0;&#x4F5C;&#x673A;&#x5236;&#x3002;&#x63A5;&#x4E0B;&#x6765;&#xFF0C;&#x6211;&#x4EEC;&#x5C06;&#x8BE6;&#x7EC6;&#x4ECB;&#x7ECD;&#x5982;&#x4F55;&#x5B8C;&#x6210;&#x8BE5;&#x8BA1;&#x5212;&#x4E2D;&#x7684;&#x4EFB;&#x52A1;&#xFF0C;&#x5E2E;&#x52A9;&#x4F60;&#x5FEB;&#x901F;&#x4E0A;&#x624B;Move&#x8BED;&#x8A00;&#xFF0C;&#x5E76;&#x6210;&#x529F;&#x5C06;&#x5408;&#x7EA6;&#x90E8;&#x7F72;&#x5230;Sui&#x533A;&#x5757;&#x94FE;&#x4E0A;&#x3002;</p><p><strong>1.&#x6253;&#x5F00;sui&#x7684;&#x94FE;&#x63A5; <a href="https://github.com/move-cn/letsmove?tab=readme-ov-file">&#x70B9;&#x51FB;</a>&#x8FD9;&#x91CC;&#x8DF3;&#x8F6C;&#x5230;GitHub</strong></p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/11/image-1.png" class="kg-image" alt loading="lazy" width="1919" height="1041"></figure><p><strong>&#x63A5;&#x4E0B;&#x6765;&#x6211;&#x4EEC;&#x6765;&#x4E00;&#x8D77;&#x5B8C;&#x6210;task1&#x5427;&#xFF01;</strong></p><h2 id="%E4%B8%80%E3%80%81%E7%82%B9%E5%87%BB-%E5%AD%A6%E4%B9%A0%E4%BB%BB%E5%8A%A1">&#x4E00;&#x3001;&#x70B9;&#x51FB; &#xA0;&#x5B66;&#x4E60;&#x4EFB;&#x52A1;</h2><p><br>&#x5B9D;&#x5B50;&#x4EEC;&#x53EF;&#x4EE5;&#x5148;&#x8FDB;q&#x7FA4;&#xFF0C;&#x56E0;&#x4E3A;&#x5230;&#x65F6;&#x5019;&#x63D0;pr&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x9700;&#x8981;&#x5728;&#x7FA4;&#x91CC;&#x53D1;&#x81EA;&#x5DF1;&#x7684;GitHub&#x5730;&#x5740;&#x7684;&#xFF0C;&#x4E0D;&#x7136;&#x4E0D;&#x8BA9;&#x5408;&#x5E76;&#x3002;&#x7136;&#x540E;&#x6709;&#x4E00;&#x4E9B;b&#x7AD9;&#x4E0A;&#x7684;&#x5B66;&#x4E60;&#x8D44;&#x6599;&#xFF0C;&#x8BFE;&#x7A0B;&#x6E90;&#x7801;&#x53EF;&#x4EE5;&#x83B7;&#x53D6;&#xFF0C;&#x5927;&#x5BB6;&#x81EA;&#x884C;&#x67E5;&#x770B;&#x3002;</p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/11/image-2.png" class="kg-image" alt loading="lazy" width="1913" height="1018"></figure><h2 id="%E4%BA%8C%E3%80%81%E6%9F%A5%E7%9C%8Breadmemd">&#x4E8C;&#x3001;&#x67E5;&#x770B;readme.md</h2><p><br>&#x5728;&#x4EFB;&#x52A1;&#x5217;&#x8868;&#x4E2D;&#xFF0C;&#x70B9;&#x51FB; README.md &#x6587;&#x4EF6;&#xFF0C;&#x53EF;&#x4EE5;&#x4E86;&#x89E3;&#x4EFB;&#x52A1;&#x7684;&#x5177;&#x4F53;&#x8981;&#x6C42;&#x548C;&#x6B65;&#x9AA4;&#x3002;&#x8FD9;&#x662F;&#x5F00;&#x5C55;&#x5B66;&#x4E60;&#x7684;&#x57FA;&#x7840;&#x6750;&#x6599;&#xFF0C;&#x91CC;&#x9762;&#x5305;&#x542B;&#x4E86;&#x9879;&#x76EE;&#x7684;&#x80CC;&#x666F;&#x4FE1;&#x606F;&#x3001;&#x4EFB;&#x52A1;&#x76EE;&#x6807;&#x548C;&#x5982;&#x4F55;&#x8FDB;&#x884C;&#x7684;&#x8BE6;&#x7EC6;&#x8BF4;&#x660E;&#x3002;</p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/11/image-3.png" class="kg-image" alt loading="lazy" width="1919" height="1019"></figure><p>&#x53EF;&#x4EE5;&#x67E5;&#x770B;&#x4EFB;&#x52A1;</p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/11/image-4.png" class="kg-image" alt loading="lazy" width="1918" height="1024"></figure><p>&#x200B;</p><h2 id="%E4%B8%89%E3%80%81%E7%82%B9%E5%87%BB01helloxu200md">&#x4E09;&#x3001;&#x70B9;&#x51FB;01.hello_xu200.md</h2><p><br>&#x8FD9;&#x4E2A;&#x6307;&#x5357;&#x5C06;&#x4E3A;&#x4F60;&#x63D0;&#x4F9B;&#x5B8C;&#x6210;&#x7B2C;&#x4E00;&#x4E2A;&#x5408;&#x7EA6;&#x4E0A;&#x94FE;&#x6240;&#x9700;&#x7684;&#x5177;&#x4F53;&#x6B65;&#x9AA4;&#x548C;&#x793A;&#x4F8B;&#x4EE3;&#x7801;&#xFF0C;&#x662F;&#x4F60;&#x52A8;&#x624B;&#x5B9E;&#x8DF5;&#x7684;&#x91CD;&#x8981;&#x53C2;&#x8003;&#x3002;</p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/11/image-6.png" class="kg-image" alt loading="lazy" width="1917" height="968"></figure><p>&#x6839;&#x636E;&#x8FD9;&#x4E2A;&#x6307;&#x5357;&#xFF0C;&#x6765;&#x5B8C;&#x6210;&#x7B2C;&#x4E00;&#x4E2A;&#x5408;&#x7EA6;&#x4E0A;&#x94FE;</p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/11/image-5.png" class="kg-image" alt loading="lazy" width="1919" height="997"></figure><p></p><h2 id="%E5%9B%9B%E3%80%81%E5%AE%8C%E6%88%90%E7%AC%AC%E4%B8%80%E4%B8%AA%E5%90%88%E7%BA%A6%E4%B8%8A%E9%93%BE">&#x56DB;&#x3001;&#x5B8C;&#x6210;&#x7B2C;&#x4E00;&#x4E2A;&#x5408;&#x7EA6;&#x4E0A;&#x94FE;</h2><p><strong><br>&#xFF08;&#x4E00;&#xFF09;&#x5B89;&#x88C5;Sui CLI</strong><br><a href="https://docs.sui.io/guides/developer/getting-started/sui-install">https://docs.sui.io/guides/developer/getting-started/sui-install</a></p><p><strong>1&#x3001;&#x9009;&#x62E9;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;:</strong><br>&#x6211;&#x9009;&#x62E9;&#x7684;&#x662F;Windows&#x7684;&#xFF0C;&#x7136;&#x540E;&#x70B9;&#x8FDB;&#x8FD9;&#x4E2A;&#x94FE;&#x63A5;&#x3002;</p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/11/image-7.png" class="kg-image" alt loading="lazy" width="1916" height="1016"></figure><p><strong>2&#x3001;&#x67E5;&#x627E;&#x7248;&#x672C;</strong><br>&#x70B9;&#x8FDB;&#x6765;&#x4E4B;&#x540E;&#xFF0C;&#x53F3;&#x8FB9;&#x7A97;&#x683C;&#x6709;&#x4E2A;Releases&#xFF0C;&#x70B9;&#x51FB;+&#x53F7;&#xFF0C;&#x67E5;&#x770B;&#x66F4;&#x591A;&#x7248;&#x672C;&#x3002;</p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/11/image-8.png" class="kg-image" alt loading="lazy" width="1914" height="1013"></figure><p><strong>3&#x3001;&#x4E0B;&#x8F7D;&#x5E76;&#x89E3;&#x538B;</strong><br>&#x6211;&#x8FD9;&#x91CC;&#x9009;&#x62E9;&#x7684;&#x662F;&#x8FD9;&#x4E2A;&#x7248;&#x672C;&#xFF0C;&#x5927;&#x5BB6;&#x4E0B;&#x8F7D;&#x5B8C;&#x6210;&#x540E;&#xFF0C;&#x89E3;&#x538B;&#x3002;</p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/11/image-9.png" class="kg-image" alt loading="lazy" width="1919" height="950"></figure><p>&#x89E3;&#x538B;&#x4E4B;&#x540E;&#x5982;&#x56FE;</p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/11/image-10.png" class="kg-image" alt loading="lazy" width="1132" height="639"></figure><p><strong>4&#x3001;&#x914D;&#x7F6E;&#x73AF;&#x5883;&#x53D8;&#x91CF;</strong><br>&#x5C06;&#x6B64;&#x76EE;&#x5F55;&#x5730;&#x5740;&#x590D;&#x5236;&#xFF0C;&#x7136;&#x540E;&#x914D;&#x7F6E;&#x5230;&#x7CFB;&#x7EDF;&#x7684;&#x73AF;&#x5883;&#x53D8;&#x91CF;&#x91CC;&#x9762;&#x3002;</p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/11/image-11.png" class="kg-image" alt loading="lazy" width="1125" height="609"></figure><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/11/image-12.png" class="kg-image" alt loading="lazy" width="1919" height="1015"></figure><p><strong>5&#x3001;&#x67E5;&#x770B;sui&#x7684;&#x7248;&#x672C;&#x4FE1;&#x606F;</strong><br>&#x8F93;&#x5165;: &#xA0; &#xA0;sui --version</p><p>&#x67E5;&#x770B;&#x7248;&#x672C;&#x4FE1;&#x606F;&#xFF0C;&#x8868;&#x660E;&#x6B63;&#x5728;&#x4F7F;&#x7528; Sui &#x7684;&#x7248;&#x672C; 1.35.2&#xFF0C;&#x540E;&#x9762;&#x7684;&#x90E8;&#x5206;&#x662F;&#x8BE5;&#x7248;&#x672C;&#x7684;&#x6784;&#x5EFA;&#x54C8;&#x5E0C;&#x503C;&#xFF08;4e46da89efd5&#xFF09;&#x8FD9;&#x6837;&#x5C31;&#x5B8C;&#x6210;&#x597D;sui cli&#x7684;&#x5B89;&#x88C5;&#x5566;&#x3002;</p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/11/image-13.png" class="kg-image" alt loading="lazy" width="506" height="267"></figure><p><strong>&#xFF08;&#x4E8C;&#xFF09;&#x5B8C;&#x6210;Sui&#x94B1;&#x5305;&#x5B89;&#x88C5;</strong><br><strong>1&#x3001;&#x9009;&#x62E9;&#x94B1;&#x5305;</strong><br><strong>&#x622A;&#x81F3;&#x76EE;&#x524D;&#xFF0C;&#x751F;&#x6001;&#x9879;&#x76EE;&#x6536;&#x5F55;&#x5E73;&#x53F0;<a href="http://mp.weixin.qq.com/s?__biz=MzkzNjQ2NTE2Ng==&amp;mid=2247483887&amp;idx=1&amp;sn=2cf46f3693a36c36a3bdbe4ddbf1ec5d&amp;chksm=c29f078ef5e88e9845d634c5106ffa0d5b3e37ab96cb3274181d83e8bb24d09a1376e0a86eae&amp;scene=21#wechat_redirect">Sui Directory</a>&#x4E0A;&#x5217;&#x51FA;&#x4E86;11&#x6B3E;&#x94B1;&#x5305;</strong>&#x3002;&#x9664;&#x4E86;&#x7B80;&#x5355;&#x7684;&#x5B58;&#x50A8;SUI&#x529F;&#x80FD;&#x4E4B;&#x5916;&#xFF0C;&#x8FD9;&#x4E9B;&#x94B1;&#x5305;&#x8FD8;&#x63D0;&#x4F9B;&#x4E86;&#x4E30;&#x5BCC;&#x7684;&#x529F;&#x80FD;&#xFF0C;&#x4F8B;&#x5982;&#x94F8;&#x9020;NFT&#x548C;&#x63A2;&#x7D22;Web3&#x7684;apps&#x3002;</p><p>&#x4E3E;&#x4F8B;&#x6765;&#x8BF4;&#xFF0C;Ethos&#x94B1;&#x5305;&#x5305;&#x62EC;&#x4E00;&#x4E2A;&#x5730;&#x5740;&#x7C3F;&#xFF0C;&#x4F60;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x5B83;&#x66F4;&#x5BB9;&#x6613;&#x5730;&#x5411;&#x670B;&#x53CB;&#x53D1;&#x9001;tokens&#xFF0C;&#x4E5F;&#x53EF;&#x4EE5;&#x5728;apps&#x4E2D;&#x76F4;&#x63A5;&#x8D2D;&#x4E70;&#x548C;&#x4EA4;&#x6613;tokens&#xFF0C;&#x800C;&#x65E0;&#x9700;&#x4ECE;&#x4EA4;&#x6613;&#x6240;&#x8D2D;&#x4E70;&#x3002;&#x60A8;&#x53EF;&#x4EE5;&#x5728;Suiet&#x94B1;&#x5305;&#x7684;&#x6D4F;&#x89C8;&#x5668;&#x4E2D;&#x53D1;&#x73B0;&#x66F4;&#x591A;Web3 apps&#x3002;ComingChat&#x5219;&#x5728;&#x5BA2;&#x6237;&#x7AEF;&#x63D0;&#x4F9B;&#x4E86;&#x52A0;&#x5BC6;&#x804A;&#x5929;&#x7B49;&#x5176;&#x4ED6;&#x529F;&#x80FD;&#x3002;</p><p>&#x60A8;&#x53EF;&#x4EE5;&#x9009;&#x62E9;&#x4EFB;&#x610F;&#x4E00;&#x6B3E;&#x80FD;&#x591F;&#x6EE1;&#x8DB3;&#x60A8;&#x9700;&#x6C42;&#x7684;&#x94B1;&#x5305;&#xFF0C;&#x65E0;&#x9700;&#x62C5;&#x5FC3;&#xFF0C;&#x60A8;&#x8FD8;&#x53EF;&#x4EE5;&#x5B89;&#x88C5;&#x548C;&#x4F7F;&#x7528;&#x591A;&#x4E2A;&#x94B1;&#x5305;&#xFF0C;&#x6BCF;&#x4E2A;&#x94B1;&#x5305;&#x90FD;&#x53EF;&#x4EE5;&#x663E;&#x793A;&#x60A8;&#x5728;Sui&#x4E0A;&#x62E5;&#x6709;&#x7684;tokens&#x6570;&#x91CF;&#x3002;&#x60A8;&#x8FD8;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x4E00;&#x4E2A;&#x94B1;&#x5305;&#x521B;&#x5EFA;&#x591A;&#x4E2A;&#x8D26;&#x6237;&#xFF0C;&#x6BCF;&#x4E2A;&#x8D26;&#x6237;&#x4E2D;&#x653E;&#x7F6E;&#x4E0D;&#x540C;&#x6570;&#x91CF;&#x7684;tokens&#x3002;</p><p><strong>2&#x3001;&#x5B89;&#x88C5; Suiet Wallet</strong><br>&#x53EF;&#x4EE5;&#x76F4;&#x63A5;&#x70B9;&#x51FB; Suiet Wallet &#x7136;&#x540E;&#x6DFB;&#x52A0;&#x6269;&#x5C55;&#x7A0B;&#x5E8F;</p><p>Sui Wallet &#x662F;&#x5B98;&#x65B9;&#x63A8;&#x51FA;&#x7684;&#x94B1;&#x5305;&#xFF0C;&#x4E3B;&#x8981;&#x7528;&#x4E8E;&#x7BA1;&#x7406; Sui &#x533A;&#x5757;&#x94FE;&#x4E0A;&#x7684;&#x8D44;&#x4EA7;&#x548C;&#x4EA4;&#x6613;&#xFF0C;&#x529F;&#x80FD;&#x76F8;&#x5BF9;&#x57FA;&#x7840;&#x4E14;&#x7A33;&#x5B9A;&#x3002;&#x800C; Suiet Wallet &#x5219;&#x662F;&#x4E00;&#x4E2A;&#x793E;&#x533A;&#x9A71;&#x52A8;&#x7684;&#x94B1;&#x5305;&#xFF0C;&#x901A;&#x5E38;&#x4F1A;&#x96C6;&#x6210;&#x66F4;&#x591A;&#x7684;&#x529F;&#x80FD;&#xFF0C;&#x4F8B;&#x5982;&#x8DE8;&#x94FE;&#x652F;&#x6301;&#x3001;&#x53BB;&#x4E2D;&#x5FC3;&#x5316;&#x5E94;&#x7528;&#xFF08;DApp&#xFF09;&#x7684;&#x96C6;&#x6210;&#x7B49;&#xFF0C;&#x53EF;&#x80FD;&#x5728;&#x7528;&#x6237;&#x4F53;&#x9A8C;&#x548C;&#x754C;&#x9762;&#x8BBE;&#x8BA1;&#x4E0A;&#x66F4;&#x4E3A;&#x7075;&#x6D3B;&#x548C;&#x521B;&#x65B0;&#x3002;&#x603B;&#x7684;&#x6765;&#x8BF4;&#xFF0C;&#x9009;&#x62E9;&#x54EA;&#x4E2A;&#x94B1;&#x5305;&#x53D6;&#x51B3;&#x4E8E;&#x4F60;&#x7684;&#x9700;&#x6C42;&#xFF0C;&#x6BD4;&#x5982;&#x4F60;&#x66F4;&#x770B;&#x91CD;&#x5B98;&#x65B9;&#x652F;&#x6301;&#x8FD8;&#x662F;&#x5E0C;&#x671B;&#x5C1D;&#x8BD5;&#x66F4;&#x4E30;&#x5BCC;&#x7684;&#x529F;&#x80FD;&#x3002;</p><p><strong>&#x6211;&#x8FD9;&#x91CC;&#x662F;&#x6DFB;&#x52A0;&#x793E;&#x533A;&#x7248;&#x7684;&#x94B1;&#x5305;&#xFF0C;&#x4E5F;&#x5C31;&#x662F;Suiet Wallet&#x3002;</strong></p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/11/image-14.png" class="kg-image" alt loading="lazy" width="1919" height="993"></figure><p><strong>3&#x3001;&#x6DFB;&#x52A0;&#x81F3;&#x8C37;&#x6B4C;&#x6D4F;&#x89C8;&#x5668;&#x4E2D;</strong></p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/11/image-15.png" class="kg-image" alt loading="lazy" width="794" height="558"></figure><p><strong>4&#x3001;&#x521B;&#x5EFA;&#x5E10;&#x6237;</strong><br>&#x5B89;&#x88C5;&#x597D;&#x94B1;&#x5305;&#x6269;&#x5C55;&#x7A0B;&#x5E8F;&#x540E;&#xFF0C;&#x754C;&#x9762;&#x4E0A;&#x5C06;&#x663E;&#x793A;&#x300C;<strong>&#x521B;&#x5EFA;&#x65B0;&#x94B1;&#x5305;&#xFF08;create a new wallet &#xFF09;</strong>&#x300D;&#x548C;&#x300C;<strong>&#x5BFC;&#x5165;&#x73B0;&#x6709;&#x94B1;&#x5305;&#xFF08;import an existing one&#xFF09;</strong>&#x300D;&#x7684;&#x9009;&#x9879;&#x3002;&#x60A8;&#x53EF;&#x4EE5;&#x5728;&#x6B64;&#x94B1;&#x5305;&#x4E2D;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x8D26;&#x6237;&#xFF0C;&#x7136;&#x540E;&#x5C06;&#x8BE5;&#x8D26;&#x6237;&#x5BFC;&#x5165;&#x5176;&#x4ED6;&#x94B1;&#x5305;&#x3002;&#x4F7F;&#x7528;&#x5176;&#x4E2D;&#x4EFB;&#x4F55;&#x4E00;&#x4E2A;&#x94B1;&#x5305;&#x90FD;&#x5C06;&#x663E;&#x793A;&#x60A8;&#x5728;Sui&#x4E0A;&#x7684;tokens&#x6570;&#x91CF;&#x3002;</p><p>&#x521B;&#x5EFA;&#x65B0;&#x8D26;&#x6237;&#x65F6;&#xFF0C;&#x60A8;&#x9700;&#x8981;&#x8BBE;&#x7F6E;&#x4E00;&#x4E2A;&#x5BC6;&#x7801;&#xFF08;<strong>&#x6CE8;&#x610F;&#x4E0D;&#x662F;&#x5BC6;&#x94A5;</strong>&#xFF09;&#x3002;&#x4F7F;&#x7528;&#x5E38;&#x89C4;&#x65B9;&#x6CD5;&#x8BBE;&#x7F6E;&#x5373;&#x53EF;&#xFF0C;&#x4F8B;&#x5982;&#x4F7F;&#x7528;&#x5B57;&#x6BCD;&#x3001;&#x6570;&#x5B57;&#x548C;&#x7279;&#x6B8A;&#x5B57;&#x7B26;&#x7684;&#x7EC4;&#x5408;&#xFF0C;&#x540C;&#x65F6;&#xFF0C;&#x8BF7;&#x52A1;&#x5FC5;&#x5B89;&#x5168;&#x4FDD;&#x5B58;&#x60A8;&#x7684;&#x5BC6;&#x7801;&#x3002;</p><p>&#x6B64;&#x65F6;&#xFF0C;&#x94B1;&#x5305;&#x6269;&#x5C55;&#x7A0B;&#x5E8F;&#x5C06;&#x751F;&#x6210;&#x4E00;&#x7EC4;&#x7528;&#x4E8E;&#x627E;&#x56DE;&#x94B1;&#x5305;&#x7684;&#x77ED;&#x8BED;&#x7528;&#x4E8E;&#x4FDD;&#x62A4;&#x94B1;&#x5305;&#x7684;&#x5B89;&#x5168;&#xFF0C;&#x8FD9;&#x4E9B;&#x77ED;&#x8BED;&#x4E5F;&#x79F0;&#x4E3A;&#x52A9;&#x8BB0;&#x8BCD;&#xFF0C;&#x901A;&#x5E38;&#x7531;12&#x4E2A;&#x5355;&#x8BCD;&#x7EC4;&#x6210;&#xFF08;&#x6709;&#x4E9B;&#x94B1;&#x5305;&#x4F1A;&#x66F4;&#x591A;&#xFF09;&#x3002;<strong>&#x8BF7;&#x52A1;&#x5FC5;&#x4FDD;&#x5B58;&#x597D;&#x60A8;&#x7684;&#x52A9;&#x8BB0;&#x8BCD;&#xFF0C;&#x5E76;&#x5C06;&#x5176;&#x79BB;&#x7EBF;&#x5B89;&#x5168;&#x5730;&#x5B58;&#x50A8;&#x3002;&#x5982;&#x679C;&#x60A8;&#x4E22;&#x5931;&#x4E86;&#x52A9;&#x8BB0;&#x8BCD;&#xFF0C;&#x5C06;&#x65E0;&#x6CD5;&#x8BBF;&#x95EE;&#x60A8;&#x7684;&#x94B1;&#x5305;&#x3002;</strong></p><p><strong>5&#x3001;&#x4F7F;&#x7528;&#x94B1;&#x5305;</strong><br>&#x5982;&#x679C;&#x60A8;&#x4ECE;CEX&#x4E2D;&#x8D2D;&#x4E70;tokens&#xFF0C;&#x60A8;&#x9700;&#x8981;&#x5411;&#x4EA4;&#x6613;&#x6240;&#x63D0;&#x4F9B;&#x60A8;&#x7684;&#x516C;&#x94A5;&#x3002;<strong>&#x516C;&#x94A5;&#x901A;&#x5E38;&#x4F1A;&#x5F88;&#x660E;&#x663E;&#x7684;&#x663E;&#x793A;&#x5728;&#x94B1;&#x5305;&#x754C;&#x9762;&#xFF0C;&#x70B9;&#x51FB;&#x4E00;&#x6B21;&#x5373;&#x53EF;&#x5C06;&#x5176;&#x590D;&#x5236;</strong>&#x3002;&#x4F7F;&#x5176;&#x4ED6;&#x4EBA;&#x6216;&#x516C;&#x53F8;&#x53EF;&#x901A;&#x8FC7;&#x516C;&#x94A5;&#x5411;&#x60A8;&#x53D1;&#x9001;tokens&#x3001;NFT&#x548C;&#x5176;&#x4ED6;&#x6570;&#x5B57;&#x8D44;&#x4EA7;&#x3002;</p><p>&#x516C;&#x94A5;&#x7531;&#x4E00;&#x957F;&#x4E32;&#x6570;&#x5B57;&#x548C;&#x5B57;&#x6BCD;&#x7EC4;&#x6210;&#xFF0C;&#x7C7B;&#x4F3C;&#x4E8E;&#xFF1A;</p><p>0x06fe7f254m20119a0c39fa6f62r96b8494c3af1aa5a5bf84439f44c405675d</p><p>*&#x8BF7;&#x6CE8;&#x610F;&#xFF0C;&#x51FA;&#x4E8E;&#x5B89;&#x5168;&#x8003;&#x8651;&#xFF0C;&#x4E0A;&#x8FF0;&#x516C;&#x94A5;&#x5728;&#x957F;&#x5EA6;&#x548C;&#x5B57;&#x7B26;&#x65B9;&#x9762;&#x53EF;&#x80FD;&#x4E0E;&#x5B9E;&#x9645;&#x516C;&#x94A5;&#x7565;&#x6709;&#x4E0D;&#x540C;&#x3002;</p><p>&#x5F53;&#x60A8;&#x8FDB;&#x5165;Sui&#x4E0A;&#x9700;&#x8981;&#x652F;&#x4ED8;&#x7684;app&#x65F6;&#xFF0C;&#x94B1;&#x5305;&#x6269;&#x5C55;&#x7A0B;&#x5E8F;&#x4F1A;&#x81EA;&#x52A8;&#x5F00;&#x542F;&#xFF0C;&#x5E76;&#x8BF7;&#x6C42;&#x60A8;&#x5BF9;&#x8BE5;&#x4EA4;&#x6613;&#x8FDB;&#x884C;&#x6279;&#x51C6;&#x3002;<strong>&#x5982;&#x679C;&#x8D85;&#x8FC7;&#x8BBE;&#x5B9A;&#x65F6;&#x95F4;&#xFF0C;&#x5219;&#x9700;&#x8981;&#x60A8;&#x91CD;&#x65B0;&#x8F93;&#x5165;&#x94B1;&#x5305;&#x7684;&#x5BC6;&#x7801;&#x6253;&#x5F00;&#x94B1;&#x5305;&#x3002;</strong></p><p>&#x94B1;&#x5305;&#x8FD8;&#x652F;&#x6301;&#x60A8;&#x76F4;&#x63A5;&#x53D1;&#x9001;tokens&#x5230;&#x53E6;&#x4E00;&#x4E2A;&#x94B1;&#x5305;&#xFF0C;&#x6B64;&#x65F6;&#x60A8;&#x9700;&#x8981;&#x5176;&#x4ED6;&#x94B1;&#x5305;&#x6240;&#x6709;&#x8005;&#x63D0;&#x4F9B;&#x5176;&#x516C;&#x94A5;&#x624D;&#x80FD;&#x53D1;&#x9001;&#x3002;</p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/11/image-16.png" class="kg-image" alt loading="lazy" width="458" height="484"></figure><p><strong>&#xFF08;&#x4E09;&#xFF09;&#x5B89;&#x88C5;&#x597D;&#x7F16;&#x8F91;&#x5668;</strong><br><strong>&#x6211;&#x8FD9;&#x91CC;&#x9009;&#x62E9;&#x7528;vscode &#x6765;&#x5B89;&#x88C5;move&#x63D2;&#x4EF6;&#x3002;</strong></p><p><strong>1&#x3001;&#x6253;&#x5F00;&#x63D2;&#x4EF6;&#x5E02;&#x573A;</strong><br>&#x9996;&#x5148;&#x6253;&#x5F00;&#x63D2;&#x4EF6;&#x5E02;&#x573A; &#x5728;vscode&#x53F3;&#x8FB9;&#x7BAD;&#x5934;&#x6240;&#x6307;&#x56FE;&#x6807;&#x70B9;&#x4E00;&#x4E0B;&#xFF0C;</p><p>&#x70B9;&#x51FB;&#x5B89;&#x88C5;(install)&#x6309;&#x94AE;&#xFF0C;&#x7B49;&#x5F85;&#x63D2;&#x4EF6;&#x5B89;&#x88C5;&#x5B8C;&#x6210;</p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/11/image-17.png" class="kg-image" alt loading="lazy" width="1016" height="450"></figure><p><strong>2&#x3001;&#x5B89;&#x88C5;&#x4F9D;&#x8D56;&#x63D2;&#x4EF6;</strong><br>&#x5B98;&#x65B9;&#x63D2;&#x4EF6;&#x6709;&#x4E2A;&#x4F9D;&#x8D56;&#x9879;&#x63D2;&#x4EF6;&#x4E5F;&#x9700;&#x8981;&#x4E00;&#x5E76;&#x5B89;&#x88C5;</p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/11/image-18.png" class="kg-image" alt loading="lazy" width="1219" height="435"></figure><p>&#x63D2;&#x4EF6;&#x5B89;&#x88C5;&#x540E;&#x5FC5;&#x987B;&#x8981;&#x8FDB;&#x884C;&#x8BBE;&#x7F6E;&#x624D;&#x80FD;&#x4F7F;&#x7528;,&#x5F88;&#x591A;&#x540C;&#x5B66;&#x5230;&#x4E86;&#x8FD9;&#x4E00;&#x6B65;&#x4F1A;&#x78B0;&#x5230;&#x63D2;&#x4EF6;&#x4E0D;&#x8D77;&#x4F5C;&#x7528;&#x7684;&#x95EE;&#x9898;</p><p><strong>3&#x3001;&#x914D;&#x7F6E;&#x63D2;&#x4EF6;&#x8BBE;&#x7F6E;</strong><br>&#x9996;&#x5148;&#x8FDB;&#x5165;&#x5230;&#x63D2;&#x4EF6;&#x8BBE;&#x7F6E;&#x754C;&#x9762;</p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/11/image-19.png" class="kg-image" alt loading="lazy" width="1131" height="552"></figure><p>&#x8FDB;&#x5165;&#x5230; settings&#x754C;&#x9762;</p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/11/image-20.png" class="kg-image" alt loading="lazy" width="1821" height="812"></figure><p>&#x70B9;&#x51FB; edit in settings.json &#x6309;&#x94AE;</p><p>&#x628A;exe&#x7684;&#x5168;&#x8DEF;&#x5F84;+&#x540D;&#x79F0;&#x90FD;&#x586B;&#x8FDB;&#x53BB;&#x4E86;&#xFF0C;&#x8BB0;&#x5F97;&#x8981;&#x4F7F;&#x7528;&#x53CC;&#x659C;&#x6760; \ &#x6765;&#x8868;&#x793A;&#x8DEF;&#x5F84;&#x7684;&#x659C;&#x6760; (win&#x7CFB;&#x7EDF;)</p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/11/image-21.png" class="kg-image" alt loading="lazy" width="1201" height="393"></figure><p><strong>&#xFF08;&#x56DB;&#xFF09;&#x63A5;&#x4E0B;&#x6765;&#x4FBF;&#x53EF;&#x4EE5;&#x6839;&#x636E;&#x8FD9;&#x4E2A;&#x4EFB;&#x52A1;&#x6307;&#x5357;&#xFF0C;&#x6765;&#x5B8C;&#x6210;&#x5566;&#x3002;</strong></p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/11/image-22.png" class="kg-image" alt loading="lazy" width="1919" height="1019"></figure><p><strong>1&#x3001;&#x8F93;&#x5165;&#x6B64;url &#x521B;&#x5EFA;fork</strong><br><a href="https://github.com/move-cn/letsmove?tab=readme-ov-file">https://github.com/move-cn/letsmove?tab=readme-ov-file</a></p><p>&#x7136;&#x540E;&#x70B9;&#x51FB;folk&#x6309;&#x94AE;</p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/11/image-23.png" class="kg-image" alt loading="lazy" width="1919" height="1020"></figure><p>&#x70B9;&#x51FB;&#x521B;&#x5EFA;fork</p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/11/image-24.png" class="kg-image" alt loading="lazy" width="1917" height="815"></figure><p><strong>2&#x3001;&#x5728;&#x81EA;&#x5DF1;&#x7684;GitHub&#x4ED3;&#x5E93;&#x91CC;&#x53EF;&#x4EE5;&#x770B;&#x5230;&#x521A;&#x521A;fork&#x7684;&#x4ED3;&#x5E93;&#xFF0C; &#x4E5F;&#x5C31;&#x662F;&#x526F;&#x672C;&#x4ED3;&#x5E93;</strong></p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/11/image-25.png" class="kg-image" alt loading="lazy" width="1914" height="964"></figure><p><strong>&#x7136;&#x540E;&#x514B;&#x9686;&#x9879;&#x76EE;&#x548C;&#x6700;&#x540E;&#x7684;&#x63D0;pr&#x90FD;&#x53EF;&#x4EE5;&#x53C2;&#x8003;&#x8FD9;&#x4F4D;&#x5927;&#x4F6C;&#x7684;&#x6587;&#x7AE0;&#x54E6;&#x3002;</strong></p><p><a href="https://hua1223.blog.csdn.net/article/details/143079404?spm=1001.2014.3001.5502">&#x9707;&#x60CA;&#xFF01;&#x539F;&#x6765;&#x8D21;&#x732E;&#x5F00;&#x6E90;&#x4EE3;&#x7801;&#x8FD9;&#x4E48;&#x7B80;&#x5355;&#xFF0C;&#x5206;&#x5206;&#x949F;&#x4E0A;&#x624B;&#xFF01;_&#x5F00;&#x6E90;&#x4EE3;&#x7801;&#x5982;&#x4F55;&#x8D21;&#x732E;-CSDN&#x535A;&#x5BA2;</a></p><p><strong>&#xFF08;&#x4E94;&#xFF09;&#x521B;&#x5EFA;&#x548C;&#x90E8;&#x7F72;&#x4E00;&#x4E2A;&#x57FA;&#x4E8E; Sui &#x533A;&#x5757;&#x94FE;&#x7684; Move &#x9879;&#x76EE;</strong><br><strong>1&#x3001;&#x521B;&#x5EFA;&#x9879;&#x76EE;</strong></p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/11/image-35.png" class="kg-image" alt loading="lazy" width="1624" height="160"></figure><p>2&#x3001;&#x5207;&#x6362;&#x76EE;&#x5F55;</p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/11/image-36.png" class="kg-image" alt loading="lazy" width="1609" height="85"></figure><p>3&#x3001;&#x6784;&#x5EFA;&#x9879;&#x76EE;</p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/11/image-37.png" class="kg-image" alt loading="lazy" width="1597" height="102"></figure><p>4&#x3001;&#x6D4B;&#x8BD5;&#x9879;&#x76EE;</p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/11/image-38.png" class="kg-image" alt loading="lazy" width="1600" height="105"></figure><p>5&#x3001;&#x67E5;&#x770B;&#x5730;&#x5740;</p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/11/image-39.png" class="kg-image" alt loading="lazy" width="1591" height="103"></figure><p>6&#x3001;&#x53D1;&#x5E03;&#x5408;&#x7EA6;</p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/11/image-40.png" class="kg-image" alt loading="lazy" width="1591" height="193"></figure><p><strong>&#x8FD9;&#x6574;&#x4E2A;&#x8FC7;&#x7A0B;&#x5C31;&#x662F;&#x521B;&#x5EFA;&#x3001;&#x6784;&#x5EFA;&#x3001;&#x6D4B;&#x8BD5;&#x5E76;&#x6700;&#x7EC8;&#x53D1;&#x5E03;&#x4E00;&#x4E2A; Move &#x9879;&#x76EE;&#x5230; Sui &#x533A;&#x5757;&#x94FE;&#x7684;&#x57FA;&#x672C;&#x6D41;&#x7A0B;&#x3002;</strong></p><p><strong>&#x4E94;&#x3001;&#x6700;&#x540E;&#x63D0;pr&#x5B8C;&#x6210;task1</strong><br>&#x63D0;pr&#x8BF7;&#x53C2;&#x8003;&#x6587;&#x7AE0;&#x63D0;&#x5230;&#x7684;&#x5927;&#x4F6C;&#x5199;&#x7684;&#x6587;&#x7AE0;&#x54E6;&#x3002;</p><p>&#x603B;&#x7ED3;<br> &#xA0; &#x901A;&#x8FC7;&#x672C;&#x6B21;&quot;Let&apos;s Move&quot;&#x6FC0;&#x52B1;&#x8BA1;&#x5212;&#x7684;&#x5B66;&#x4E60;&#xFF0C;&#x6211;&#x4EEC;&#x4E0D;&#x4EC5;&#x638C;&#x63E1;&#x4E86;&#x5982;&#x4F55;&#x4F7F;&#x7528;Sui CLI&#x5B89;&#x88C5;&#x548C;&#x914D;&#x7F6E;&#x73AF;&#x5883;&#xFF0C;&#x8FD8;&#x4E86;&#x89E3;&#x4E86;&#x5982;&#x4F55;&#x9009;&#x62E9;&#x548C;&#x4F7F;&#x7528;&#x94B1;&#x5305;&#x7BA1;&#x7406;&#x6211;&#x4EEC;&#x7684;&#x6570;&#x5B57;&#x8D44;&#x4EA7;&#x3002;&#x901A;&#x8FC7;&#x521B;&#x5EFA;&#x3001;&#x6784;&#x5EFA;&#x548C;&#x53D1;&#x5E03;Move&#x9879;&#x76EE;&#x7684;&#x6574;&#x4E2A;&#x6D41;&#x7A0B;&#xFF0C;&#x6211;&#x4EEC;&#x6DF1;&#x523B;&#x4F53;&#x4F1A;&#x5230;&#x4E86;&#x533A;&#x5757;&#x94FE;&#x5F00;&#x53D1;&#x7684;&#x4E50;&#x8DA3;&#x4E0E;&#x6311;&#x6218;&#x3002;&#x6BCF;&#x4E00;&#x6B65;&#x7684;&#x5B9E;&#x8DF5;&#x90FD;&#x662F;&#x5BF9;&#x7406;&#x8BBA;&#x77E5;&#x8BC6;&#x7684;&#x5DE9;&#x56FA;&#xFF0C;&#x800C;&#x6700;&#x7EC8;&#x7684;&#x63D0;PR&#x8FC7;&#x7A0B;&#x5219;&#x4F7F;&#x6211;&#x4EEC;&#x6709;&#x673A;&#x4F1A;&#x53C2;&#x4E0E;&#x5230;&#x5F00;&#x6E90;&#x793E;&#x533A;&#x4E2D;&#xFF0C;&#x8D21;&#x732E;&#x81EA;&#x5DF1;&#x7684;&#x529B;&#x91CF;&#x3002;&#x5E0C;&#x671B;&#x901A;&#x8FC7;&#x672C;&#x6B21;&#x4EFB;&#x52A1;&#xFF0C;&#x80FD;&#x591F;&#x6FC0;&#x52B1;&#x66F4;&#x591A;&#x7684;&#x5F00;&#x53D1;&#x8005;&#x52A0;&#x5165;&#x5230;Move&#x8BED;&#x8A00;&#x7684;&#x5B66;&#x4E60;&#x4E0E;&#x5E94;&#x7528;&#x4E2D;&#xFF0C;&#x4E3A;&#x672A;&#x6765;&#x7684;&#x533A;&#x5757;&#x94FE;&#x6280;&#x672F;&#x53D1;&#x5C55;&#x8D21;&#x732E;&#x667A;&#x6167;&#x4E0E;&#x529B;&#x91CF;&#x3002;</p><p>&#x4F5C;&#x8005;&#xFF1A; <a href="https://blog.csdn.net/yoona333?type=blog">yoona1020</a>&#x3001;<a href="https://hua1223.blog.csdn.net/?type=blog">&#x82B1;&#x82B1;&#x82B1;1</a><br>&#x2014;&#x2014;&#x2014;&#x2014;&#x2014;&#x2014;&#x2014;&#x2014;&#x2014;&#x2014;&#x2014;&#x2014;&#x2014;&#x2014;&#x2014;&#x2014;</p><p>&#x539F;&#x6587;&#x94FE;&#x63A5;&#xFF1A;<a href="https://blog.csdn.net/A_mikey/article/details/143688044">https://blog.csdn.net/A_mikey/article/details/143688044</a></p>]]></content:encoded></item><item><title><![CDATA[Mina protocol - 体验教程]]></title><description><![CDATA[<h2 id="%E4%B8%80%E3%80%81%E9%9B%B6%E7%9F%A5%E8%AF%86%E8%AF%81%E6%98%8E-zero-knowledge-proof">&#x4E00;&#x3001;&#x96F6;&#x77E5;&#x8BC6;&#x8BC1;&#x660E;<strong>( Zero Knowledge Proof )</strong></h2><blockquote>&#x96F6;&#x77E5;&#x8BC6;&#x8BC1;&#x660E;&#x662F;&#x4E00;&#x79CD;&#x5BC6;&#x7801;&#x5B66;&#x534F;&#x8BAE;&#xFF0C;&#x5141;&#x8BB8;&#x8BC1;&#x660E;&#x8005;&#x5728;&#x4E0D;&#x6CC4;&#x9732;&#x4EFB;&#x4F55;&#x989D;&#x5916;&#x4FE1;&#x606F;&#x7684;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;&#x5411;&#x9A8C;&#x8BC1;&#x8005;&#x8BC1;&#x660E;</blockquote>]]></description><link>https://www.thinkingsolidity.com/mina/</link><guid isPermaLink="false">66e5c193903d7005b6870b08</guid><category><![CDATA[零知识证明]]></category><dc:creator><![CDATA[Echo_留蝉]]></dc:creator><pubDate>Sat, 14 Sep 2024 19:20:36 GMT</pubDate><content:encoded><![CDATA[<h2 id="%E4%B8%80%E3%80%81%E9%9B%B6%E7%9F%A5%E8%AF%86%E8%AF%81%E6%98%8E-zero-knowledge-proof">&#x4E00;&#x3001;&#x96F6;&#x77E5;&#x8BC6;&#x8BC1;&#x660E;<strong>( Zero Knowledge Proof )</strong></h2><blockquote>&#x96F6;&#x77E5;&#x8BC6;&#x8BC1;&#x660E;&#x662F;&#x4E00;&#x79CD;&#x5BC6;&#x7801;&#x5B66;&#x534F;&#x8BAE;&#xFF0C;&#x5141;&#x8BB8;&#x8BC1;&#x660E;&#x8005;&#x5728;&#x4E0D;&#x6CC4;&#x9732;&#x4EFB;&#x4F55;&#x989D;&#x5916;&#x4FE1;&#x606F;&#x7684;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;&#x5411;&#x9A8C;&#x8BC1;&#x8005;&#x8BC1;&#x660E;&#x81EA;&#x5DF1;&#x77E5;&#x9053;&#x67D0;&#x4E2A;&#x7279;&#x5B9A;&#x7684;&#x79D8;&#x5BC6;&#x6216;&#x4FE1;&#x606F;&#x3002;&#x7B80;&#x5355;&#x6765;&#x8BF4;&#xFF0C;&#x8BC1;&#x660E;&#x8005;&#x53EF;&#x4EE5;&#x8BC1;&#x660E;&#x81EA;&#x5DF1;&#x201C;&#x77E5;&#x9053;&#x201D;&#x67D0;&#x4EF6;&#x4E8B;&#xFF0C;&#x800C;&#x65E0;&#x9700;&#x900F;&#x9732;&#x8FD9;&#x4EF6;&#x4E8B;&#x7684;&#x5177;&#x4F53;&#x5185;&#x5BB9;&#x3002;</blockquote><p><strong>&#x96F6;&#x77E5;&#x8BC6;&#x8BC1;&#x660E;&#x7684;&#x91CD;&#x8981;&#x6027;&#x5728;&#x4E8E;&#x5B83;&#x80FD;&#x5728;&#x4FDD;&#x62A4;&#x9690;&#x79C1;&#x7684;&#x540C;&#x65F6;&#xFF0C;&#x786E;&#x4FDD;&#x4FE1;&#x606F;&#x7684;&#x771F;&#x5B9E;&#x6027;&#x548C;&#x53EF;&#x9760;&#x6027;&#x3002;</strong></p><hr><p>&#x96F6;&#x77E5;&#x8BC6;&#x8BC1;&#x660E;&#x901A;&#x5E38;&#x751F;&#x6210;&#x5F88;&#x9EBB;&#x70E6;&#xFF0C;&#x4F46;&#x662F;&#x9A8C;&#x8BC1;&#x5F88;&#x8FC5;&#x901F;&#xFF0C;&#x5176;&#x4E3B;&#x8981;&#x7684;<strong>&#x8FD0;&#x7528;&#x573A;&#x666F;</strong>&#x662F;&#xFF1A;<br>- &#x9690;&#x79C1;&#x4FDD;&#x62A4;&#xFF1A;&#x9A8C;&#x8D44;&#x3001;&#x6295;&#x7968;&#x3001;&#x4EA4;&#x6613;<br>- &#x8BA1;&#x7B97;&#x538B;&#x7F29;&#xFF1A;&#x533A;&#x5757;&#x94FE;&#x6269;&#x5BB9;</p><hr><h3 id="1-%E9%9B%B6%E7%9F%A5%E8%AF%86%E8%AF%81%E6%98%8E%EF%BC%88zkp%EF%BC%89%E7%9A%84%E5%9F%BA%E6%9C%AC%E6%B5%81%E7%A8%8B%EF%BC%9A">1. &#x96F6;&#x77E5;&#x8BC6;&#x8BC1;&#x660E;&#xFF08;ZKP&#xFF09;&#x7684;&#x57FA;&#x672C;&#x6D41;&#x7A0B;&#xFF1A;</h3><p>1) <strong>&#x7F16;&#x8BD1;&#xFF08;Compile&#xFF09;</strong><br>&#x8F93;&#x5165;&#xFF1A;program<br>&#x8F93;&#x51FA;&#xFF1A;verification_key&#xFF08;&#x9A8C;&#x8BC1;&#x5BC6;&#x94A5;&#xFF0C;&#x7C7B;&#x578B;&#x4E3A;&#x5B57;&#x7B26;&#x4E32;&#xFF09;</p><p>2) <strong>&#x8BC1;&#x660E;&#xFF08;Prove&#xFF09;</strong><br>&#x8F93;&#x5165;&#xFF1A;program&#xFF0C;public_inputs&#xFF08;&#x516C;&#x5171;&#x8F93;&#x5165;&#xFF09;&#xFF0C;private_inputs&#xFF08;&#x79C1;&#x6709;&#x8F93;&#x5165;&#xFF09;<br>&#x8F93;&#x51FA;&#xFF1A;proof&#xFF08;&#x8BC1;&#x660E;&#xFF0C;&#x7C7B;&#x578B;&#x4E3A;&#x5B57;&#x7B26;&#x4E32;&#xFF09;</p><p>3) <strong>&#x9A8C;&#x8BC1;&#xFF08;Verify&#xFF09;</strong><br>&#x8F93;&#x5165;&#xFF1A;proof&#xFF0C;public_inputs&#xFF0C;verification_key<br>&#x8F93;&#x51FA;&#xFF1A;&#x5E03;&#x5C14;&#x503C;&#xFF08;&#x8FD4;&#x56DE;true &#x6216; false &#x4EE5;&#x9A8C;&#x8BC1;&#x8BC1;&#x660E;&#x7684;&#x6709;&#x6548;&#x6027;&#xFF09;</p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/09/WechatIMG189.jpg" class="kg-image" alt loading="lazy" width="1694" height="784"></figure><p><strong>&#x5DE5;&#x4F5C;&#x6D41;&#x7A0B;&#xFF1A;</strong></p><p><strong>Prover Function&#xFF08;&#x8BC1;&#x660E;&#x8005;&#x51FD;&#x6570;&#xFF09;</strong><br>&#x2022;	&#x901A;&#x8FC7;&#x79C1;&#x6709;&#x8F93;&#x5165;&#x548C;&#x516C;&#x5171;&#x8F93;&#x5165;&#x751F;&#x6210;&#x96F6;&#x77E5;&#x8BC6;&#x8BC1;&#x660E;&#x3002;</p><p><strong>Verifier Function&#xFF08;&#x9A8C;&#x8BC1;&#x8005;&#x51FD;&#x6570;&#xFF09;</strong><br>&#x2022;	&#x63A5;&#x6536;&#x96F6;&#x77E5;&#x8BC6;&#x8BC1;&#x660E;&#x4E0E;&#x516C;&#x5171;&#x8F93;&#x5165;&#xFF0C;&#x5E76;&#x901A;&#x8FC7;&#x9A8C;&#x8BC1;&#x5BC6;&#x94A5;&#x8FDB;&#x884C;&#x9A8C;&#x8BC1;&#xFF0C;&#x8FD4;&#x56DE;true &#x6216; false&#x3002;</p><hr><h3 id="2-zkapp-%E7%9A%84%E4%BC%98%E5%8A%BF%EF%BC%9A">2. zkApp &#x7684;&#x4F18;&#x52BF;&#xFF1A;</h3><p>1.	zkApp &#x4F7F;&#x7528; TypeScript &#x7F16;&#x5199;&#xFF0C;&#x652F;&#x6301;&#x5728;&#x6D4F;&#x89C8;&#x5668;&#x4E2D;&#x76F4;&#x63A5;&#x8FD0;&#x884C;&#x3002;<br>2.	<strong>&#x53EF;&#x7F16;&#x7A0B;&#x9690;&#x79C1;&#xFF08;Programmable Privacy&#xFF09;&#xFF1A;</strong>&#x63D0;&#x4F9B;&#x7075;&#x6D3B;&#x7684;&#x9690;&#x79C1;&#x914D;&#x7F6E;&#xFF0C;&#x5141;&#x8BB8;&#x5F00;&#x53D1;&#x8005;&#x6839;&#x636E;&#x9700;&#x6C42;&#x7F16;&#x5199;&#x9690;&#x79C1;&#x529F;&#x80FD;&#x3002;<br>3.	<strong>&#x94FE;&#x4E0B;&#x6267;&#x884C;&#x4E0E;&#x94FE;&#x4E0A;&#x9A8C;&#x8BC1;&#xFF08;Offchain Execution &amp; Onchain Verification&#xFF09;&#xFF1A;</strong>zkApp &#x53EF;&#x4EE5;&#x5728;&#x94FE;&#x4E0B;&#x6267;&#x884C;&#x8BA1;&#x7B97;&#xFF0C;&#x94FE;&#x4E0A;&#x53EA;&#x505A;&#x9A8C;&#x8BC1;&#xFF0C;&#x4ECE;&#x800C;&#x51CF;&#x5C11;&#x4E86;Gas&#x8D39;&#x7528;&#x3002;<br>4.	<strong>&#x65E0;&#x9700;&#x53EF;&#x4FE1;&#x8BBE;&#x7F6E;&#xFF08;No Trusted Setup&#xFF09;&#xFF1A;</strong>zkApp &#x4E0D;&#x4F9D;&#x8D56;&#x4E8E;&#x4F20;&#x7EDF;&#x7684;&#x53EF;&#x4FE1;&#x8BBE;&#x7F6E;&#x6B65;&#x9AA4;&#xFF0C;&#x7B80;&#x5316;&#x4E86;&#x7CFB;&#x7EDF;&#x590D;&#x6742;&#x5EA6;&#x3002;<br>5.	<strong>&#x53EF;&#x7EC4;&#x5408;&#x6027;&#x4E0E; zkRollup &#x98CE;&#x683C;&#x7684;&#x6269;&#x5C55;&#x6027;&#xFF08;Composability and zkRollup-style Scaling&#xFF09;&#xFF1A;</strong>zkApp &#x901A;&#x8FC7;&#x9012;&#x5F52;&#x6269;&#x5C55;&#x652F;&#x6301;&#x53EF;&#x7EC4;&#x5408;&#x6027;&#x548C; Rollup &#x98CE;&#x683C;&#x7684;&#x6269;&#x5C55;&#x6027;&#xFF0C;&#x63D0;&#x5347;&#x4E86;&#x7CFB;&#x7EDF;&#x7684;&#x53EF;&#x6269;&#x5C55;&#x6027;&#x3002;<br>6.	<strong>&#x901A;&#x8FC7; Mina &#x533A;&#x5757;&#x94FE;&#x5B9E;&#x73B0;&#x4E92;&#x64CD;&#x4F5C;&#x6027;&#xFF08;Interoperability through Mina&#x2019;s succinct blockchain&#xFF09;&#xFF1A;</strong>zkApp &#x901A;&#x8FC7; Mina &#x7684;&#x7CBE;&#x7B80;&#x533A;&#x5757;&#x94FE;&#x5B9E;&#x73B0;&#x4E86;&#x8DE8;&#x94FE;&#x4E92;&#x64CD;&#x4F5C;&#x6027;&#x3002;</p><hr><h3 id="3-zkapp-%E6%AF%8F%E4%B8%AA%E6%96%B9%E6%B3%95%E7%9A%84%E7%BC%96%E8%AF%91%E8%BF%87%E7%A8%8B%EF%BC%9A">3. zkApp &#x6BCF;&#x4E2A;&#x65B9;&#x6CD5;&#x7684;&#x7F16;&#x8BD1;&#x8FC7;&#x7A0B;&#xFF1A;</h3><p><strong>&#x6BCF;&#x4E2A; zkApp &#x7684;&#x65B9;&#x6CD5;</strong>&#x5B9E;&#x9645;&#x4E0A;&#x88AB;&#x7F16;&#x8BD1;&#x6210;&#x4E00;&#x4E2A;&#x7A0B;&#x5E8F;&#xFF0C;&#x8BE5;&#x7A0B;&#x5E8F;&#x5177;&#x6709;&#x4EE5;&#x4E0B;&#x4E24;&#x4E2A;&#x8981;&#x7D20;&#xFF1A;</p><ol><li><strong>&#x8F93;&#x5165;&#xFF08;Input&#xFF09;&#xFF1A;</strong>&#x65B9;&#x6CD5;&#x7684;&#x53C2;&#x6570;&#xFF08;arguments&#xFF09;&#x548C;&#x94FE;&#x4E0A;&#x72B6;&#x6001;&#xFF08;on-chain values&#xFF09;&#x3002;</li><li><strong>&#x8F93;&#x51FA;&#xFF08;Output&#xFF09;&#xFF1A;</strong>&#x6267;&#x884C;&#x7684;&#x66F4;&#x65B0;&#x5217;&#x8868;&#x4EE5;&#x53CA;&#x4E0E;&#x94FE;&#x4E0A;&#x72B6;&#x6001;&#x76F8;&#x5173;&#x7684;&#x524D;&#x63D0;&#x6761;&#x4EF6;&#x5217;&#x8868;&#x3002;</li></ol><p>zkApp &#x4E2D;&#x7684;&#x667A;&#x80FD;&#x5408;&#x7EA6;&#x7684;&#x6267;&#x884C;&#x6D41;&#x7A0B;&#x53EF;&#x4EE5;&#x88AB;&#x63CF;&#x8FF0;&#x4E3A;&#xFF1A;</p><p>zkCircuits(<strong>State0</strong>(public), private inputs) ===&gt; Tx[proof, updates] ===&gt; <strong>State1</strong><br><strong>&#x89E3;&#x91CA;</strong>&#xFF1A;zkCircuits &#x5904;&#x7406;&#x521D;&#x59CB;&#x72B6;&#x6001;&#xFF08;State0&#xFF09;&#xFF0C;&#x63A5;&#x53D7;&#x516C;&#x5171;&#x548C;&#x79C1;&#x6709;&#x8F93;&#x5165;&#xFF0C;&#x751F;&#x6210;&#x4EA4;&#x6613;&#x8BC1;&#x660E;&#xFF08;Tx proof&#xFF09;&#x548C;&#x66F4;&#x65B0;&#x5217;&#x8868;&#xFF08;updates&#xFF09;&#xFF0C;&#x6700;&#x7EC8;&#x66F4;&#x65B0;&#x5230;&#x65B0;&#x7684;&#x72B6;&#x6001;&#xFF08;State1&#xFF09;&#x3002;</p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/09/WX20240915-024351@2x.png" class="kg-image" alt loading="lazy" width="1310" height="670"></figure><ul><li>&#x65B9;&#x6CD5;&#x7684;&#x53C2;&#x6570;&#x5305;&#x542B;&#x79C1;&#x6709;&#x8F93;&#x5165;&#x548C;&#x667A;&#x80FD;&#x5408;&#x7EA6;&#x7684;&#x67D0;&#x4E9B;&#x72B6;&#x6001;&#x3002;</li><li>&#x65B9;&#x6CD5;&#x8FD8;&#x5229;&#x7528;&#x5916;&#x90E8;&#x4E16;&#x754C;&#x7684;&#x72B6;&#x6001;&#x4FE1;&#x606F;&#xFF0C;&#x751F;&#x6210;&#x5BF9;&#x667A;&#x80FD;&#x5408;&#x7EA6;&#x72B6;&#x6001;&#x548C;&#x5916;&#x90E8;&#x4E16;&#x754C;&#x72B6;&#x6001;&#x7684;&#x66F4;&#x65B0;&#x3002;</li></ul><h2 id="%E4%BA%8C%E3%80%81%E6%90%AD%E5%BB%BA%E7%AC%AC%E4%B8%80%E4%B8%AAzkapp">&#x4E8C;&#x3001;&#x642D;&#x5EFA;&#x7B2C;&#x4E00;&#x4E2A;zkapp</h2><ul><li>&#x7F16;&#x5199;&#x4E00;&#x4E2A;&#x57FA;&#x672C;&#x7684;&#x667A;&#x80FD;&#x5408;&#x7EA6;&#xFF0C;&#x8BE5;&#x5408;&#x7EA6;&#x5B58;&#x50A8;&#x4E00;&#x4E2A;&#x4F5C;&#x4E3A;&#x94FE;&#x4E0A;&#x72B6;&#x6001;&#x7684;&#x6570;&#x5B57;&#x3002;</li><li>&#x5408;&#x7EA6;&#x903B;&#x8F91;&#x5141;&#x8BB8;&#x4EC5;&#x901A;&#x8FC7;&#x5176;&#x5E73;&#x65B9;&#x6765;&#x66FF;&#x6362;&#x8FD9;&#x4E2A;&#x6570;&#x5B57;&#xFF1B;&#x4F8B;&#x5982;&#xFF0C;3 -&gt; 9 -&gt; 81&#xFF0C;&#x4F9D;&#x6B64;&#x7C7B;&#x63A8;&#x3002;</li><li>&#x4F7F;&#x7528;<strong>zkApp CLI</strong>&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x9879;&#x76EE;&#x3002;</li><li>&#x7F16;&#x5199;&#x4F60;&#x7684;&#x667A;&#x80FD;&#x5408;&#x7EA6;&#x4EE3;&#x7801;&#x3002;</li><li>&#x4F7F;&#x7528;&#x6A21;&#x62DF;&#x7684;&#x672C;&#x5730; Mina &#x533A;&#x5757;&#x94FE;&#x4E0E;&#x667A;&#x80FD;&#x5408;&#x7EA6;&#x8FDB;&#x884C;&#x4EA4;&#x4E92;&#x3002;</li></ul><h3 id="%E5%85%88%E5%86%B3%E6%9D%A1%E4%BB%B6">&#x5148;&#x51B3;&#x6761;&#x4EF6;</h3><ul><li>Node.JS v18+</li><li>NPM v10+</li><li>git v2+</li></ul><h3 id="1-%E4%B8%8B%E8%BD%BD%E6%88%96%E8%80%85%E6%9B%B4%E6%96%B0-zkapp-cli%E2%80%8B">1. &#x4E0B;&#x8F7D;&#x6216;&#x8005;&#x66F4;&#x65B0; zkApp CLI<a href="https://docs.minaprotocol.com/zkapps/writing-a-zkapp/introduction-to-zkapps/getting-started-zkapps#1-install-or-update-the-zkapp-cli">&#x200B;</a></h3><pre><code class="language-sh">npm install -g zkapp-cli</code></pre><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/09/image-3.png" class="kg-image" alt loading="lazy" width="1240" height="510"></figure><h3 id="2-%E5%88%9B%E5%BB%BA%E4%B8%80%E4%B8%AA%E6%96%B0%E9%A1%B9%E7%9B%AE">2. &#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x65B0;&#x9879;&#x76EE;</h3><p>- Zk project &#x547D;&#x4EE4;&#x80FD;&#x591F;&#x4E3A;&#x4F60;&#x7684;&#x9879;&#x76EE;&#x751F;&#x6210;&#x7528;&#x6237;&#x754C;&#x9762;&#x3002;<br>- &#x8BF7;&#x9009;&#x62E9;<strong>none</strong>&#x9009;&#x9879;&#x3002;<a href="https://docs.minaprotocol.com/zkapps/writing-a-zkapp/introduction-to-zkapps/getting-started-zkapps#2-create-a-project">&#x200B;</a></p><pre><code class="language-sh">$ zk project &lt;project-name&gt;</code></pre><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/09/image-4.png" class="kg-image" alt loading="lazy" width="1242" height="454"></figure><h3 id="3-%E5%87%86%E5%A4%87%E9%A1%B9%E7%9B%AE">3. &#x51C6;&#x5907;&#x9879;&#x76EE;</h3><p>&#x9996;&#x5148;&#x5220;&#x9664;&#x65B0;&#x9879;&#x76EE;&#x9644;&#x5E26;&#x7684;&#x9ED8;&#x8BA4;&#x6587;&#x4EF6;&#x3002;</p><pre><code class="language-shell">rm src/Add.ts
rm src/Add.test.ts
rm src/interact.ts</code></pre><p>&#x521B;&#x5EFA;&#x65B0;&#x6587;&#x4EF6;&#xFF1A;</p><pre><code class="language-shell">zk file src/Square
touch src/main.ts</code></pre><ul><li><strong>zk file</strong>&#x547D;&#x4EE4;&#x521B;&#x5EFA;&#x4E86;<strong>src/square.ts</strong>&#x548C;<strong>src/Square.test.ts</strong>&#x6D4B;&#x8BD5;&#x6587;&#x4EF6;&#x3002;</li></ul><h3 id="4-%E7%BC%96%E5%86%99-indexts">4. &#x7F16;&#x5199; index.ts</h3><p>&#x5728;&#x6587;&#x672C;&#x7F16;&#x8F91;&#x5668;&#x4E2D;&#x6253;&#x5F00; src/index.ts &#x5E76;&#x5C06;&#x5176;&#x66F4;&#x6539;&#x4E3A;&#x5982;&#x4E0B;&#x6240;&#x793A;&#xFF1A;</p><pre><code class="language-typescript">import { Square } from &apos;./Square.js&apos;;

export { Square };</code></pre><p><strong>src/index.ts </strong>&#x6587;&#x4EF6;&#x5305;&#x542B;&#x4E86;&#x4F60;&#x5E0C;&#x671B;&#x4ECE;&#x667A;&#x80FD;&#x5408;&#x7EA6;&#x9879;&#x76EE;&#x5916;&#x90E8;&#xFF08;&#x4F8B;&#x5982;&#x4ECE;&#x7528;&#x6237;&#x754C;&#x9762;&#xFF09;&#x8FDB;&#x884C;&#x8C03;&#x7528;&#x7684;&#x6240;&#x6709;&#x5BFC;&#x51FA;&#x5185;&#x5BB9;&#x3002;</p><p><strong>5. &#x7F16;&#x5199; zkapp &#x667A;&#x80FD;&#x5408;&#x7EA6;</strong></p><p>&#x5728;<strong>src/Square.ts</strong>&#x6587;&#x4EF6;&#x4E2D;&#x7F16;&#x5199;&#x4F60;&#x7684;&#x667A;&#x80FD;&#x5408;&#x7EA6;&#x3002;</p><pre><code class="language-typescript">/*

Field&#xFF1A;o1js&#x4E2D;&#x7684;&#x539F;&#x751F;&#x6570;&#x5B57;&#x7C7B;&#x578B;&#x3002;&#x4F60;&#x53EF;&#x4EE5;&#x5C06;Field&#x5143;&#x7D20;&#x89C6;&#x4E3A;&#x65E0;&#x7B26;&#x53F7;&#x6574;&#x6570;&#x3002;Field&#x5143;&#x7D20;&#x662F;o1js&#x4E2D;&#x6700;&#x57FA;&#x7840;&#x7684;&#x7C7B;&#x578B;&#xFF0C;&#x6240;&#x6709;&#x5176;&#x4ED6;o1js&#x517C;&#x5BB9;&#x7C7B;&#x578B;&#x90FD;&#x662F;&#x57FA;&#x4E8E; Field&#x5143;&#x7D20;&#x6784;&#x5EFA;&#x7684;&#x3002;
SmartContract&#xFF1A;&#x521B;&#x5EFA;zkApp&#x667A;&#x80FD;&#x5408;&#x7EA6;&#x7684;&#x7C7B;&#x3002;
state&#xFF1A;&#x5728;zkApp&#x667A;&#x80FD;&#x5408;&#x7EA6;&#x4E2D;&#x4F7F;&#x7528;&#x7684;&#x4FBF;&#x6377;&#x88C5;&#x9970;&#x5668;&#xFF0C;&#x7528;&#x4E8E;&#x521B;&#x5EFA;&#x5BF9;zkApp&#x8D26;&#x6237;&#x4E2D;&#x94FE;&#x4E0A;&#x5B58;&#x50A8;&#x72B6;&#x6001;&#x7684;&#x5F15;&#x7528;&#x3002;
State&#xFF1A;&#x5728;zkApp&#x667A;&#x80FD;&#x5408;&#x7EA6;&#x4E2D;&#x4F7F;&#x7528;&#x7684;&#x7C7B;&#xFF0C;&#x7528;&#x4E8E;&#x5728;zkApp&#x8D26;&#x6237;&#x4E2D;&#x521B;&#x5EFA;&#x94FE;&#x4E0A;&#x5B58;&#x50A8;&#x7684;&#x72B6;&#x6001;&#x3002;
method&#xFF1A;&#x5728;zkApp&#x667A;&#x80FD;&#x5408;&#x7EA6;&#x4E2D;&#x4F7F;&#x7528;&#x7684;&#x4FBF;&#x6377;&#x88C5;&#x9970;&#x5668;&#xFF0C;&#x7528;&#x4E8E;&#x521B;&#x5EFA;&#x667A;&#x80FD;&#x5408;&#x7EA6;&#x4E2D;&#x7684;&#x65B9;&#x6CD5;&#xFF08;&#x7C7B;&#x4F3C;&#x51FD;&#x6570;&#xFF09;&#x3002;&#x4F7F;&#x7528;&#x6B64;&#x88C5;&#x9970;&#x5668;&#x7684;&#x65B9;&#x6CD5;&#x662F;&#x7528;&#x6237;&#x4E0E;&#x667A;&#x80FD;&#x5408;&#x7EA6;&#x4EA4;&#x4E92;&#x7684;&#x5165;&#x53E3;&#x70B9;&#x3002;

*/ 
import { Field, SmartContract, state, State, method } from &apos;o1js&apos;;

// &#x540D;&#x4E3A; Square &#x7684;&#x667A;&#x80FD;&#x5408;&#x7EA6;&#x6709;&#x4E00;&#x4E2A;&#x94FE;&#x4E0A;&#x72B6;&#x6001;&#x5143;&#x7D20;&#xFF0C;&#x540D;&#x4E3A;num&#xFF0C;&#x7C7B;&#x578B;&#x4E3A;Field&#xFF0C;
// zkApp&#x53EF;&#x4EE5;&#x62E5;&#x6709;&#x6700;&#x591A;&#x516B;&#x4E2A;&#x94FE;&#x4E0A;&#x72B6;&#x6001;&#x5B57;&#x6BB5;
export class Square extends SmartContract {
    @state(Field) num = State&lt;Field&gt;();
    init() {
        super.init(); // &#x6DFB;&#x52A0;init&#x65B9;&#x6CD5;&#xFF0C;&#x7528;&#x4E8E;&#x5728;&#x90E8;&#x7F72;&#x65F6;&#x8BBE;&#x7F6E;&#x667A;&#x80FD;&#x5408;&#x7EA6;&#x7684;&#x521D;&#x59CB;&#x72B6;&#x6001;
        this.num.set(Field(3)); // &#x5C06;&#x94FE;&#x4E0A;&#x72B6;&#x6001;num&#x521D;&#x59CB;&#x5316;&#x4E3A;&#x503C; 3
    }
    
    // &#x5982;&#x679C;&#x7528;&#x6237;&#x5411;update()&#x65B9;&#x6CD5;&#x63D0;&#x4F9B;&#x7684;&#x6570;&#x5B57;&#xFF08;&#x4F8B;&#x5982; 9&#xFF09;&#x662F;&#x73B0;&#x6709;&#x94FE;&#x4E0A;&#x72B6;&#x6001;num&#x7684;&#x5E73;&#x65B9;&#xFF08;&#x4F8B;&#x5982; 3&#xFF09;&#xFF0C;&#x5219;&#x5C06;&#x94FE;&#x4E0A;&#x5B58;&#x50A8;&#x7684;num&#x503C;&#x66F4;&#x65B0;&#x4E3A;&#x63D0;&#x4F9B;&#x7684;&#x503C;&#xFF08;&#x5728;&#x6B64;&#x60C5;&#x51B5;&#x4E0B;&#x4E3A; 9&#xFF09;&#x3002;
    // &#x5982;&#x679C;&#x7528;&#x6237;&#x63D0;&#x4F9B;&#x7684;&#x6570;&#x5B57;&#x4E0D;&#x6EE1;&#x8DB3;&#x8FD9;&#x4E9B;&#x6761;&#x4EF6;&#xFF0C;&#x4ED6;&#x4EEC;&#x5C06;&#x65E0;&#x6CD5;&#x751F;&#x6210;&#x8BC1;&#x660E;&#x6216;&#x66F4;&#x65B0;&#x94FE;&#x4E0A;&#x72B6;&#x6001;&#x3002;
    @method async update(square: Field) {
        const currentstate = this.num.get(); 
        this.num.requireEquals(currentstate); 
        square.assertEquals(currentstate.mul(currentstate));
        this.num.set(square);
    }
}
</code></pre><p>&#x5F53;&#x7528;&#x6237;&#x8C03;&#x7528;&#x667A;&#x80FD;&#x5408;&#x7EA6;&#x4E0A;&#x7684;&#x65B9;&#x6CD5;&#x65F6;&#xFF0C;&#x6240;&#x6709;&#x65AD;&#x8A00;&#x5FC5;&#x987B;&#x4E3A;&#x771F;&#xFF0C;&#x624D;&#x80FD;&#x4ECE;&#x8BE5;&#x667A;&#x80FD;&#x5408;&#x7EA6;&#x751F;&#x6210;&#x96F6;&#x77E5;&#x8BC6;&#x8BC1;&#x660E;&#x3002;Mina&#x7F51;&#x7EDC;&#x53EA;&#x6709;&#x5728;&#x9644;&#x52A0;&#x7684;&#x8BC1;&#x660E;&#x6709;&#x6548;&#x65F6;&#x624D;&#x4F1A;&#x63A5;&#x53D7;&#x4EA4;&#x6613;&#x5E76;&#x66F4;&#x65B0;&#x94FE;&#x4E0A;&#x72B6;&#x6001;&#x3002;</p><h3 id="6-%E4%B8%8E%E6%99%BA%E8%83%BD%E5%90%88%E7%BA%A6%E4%BA%A4%E4%BA%92">6. &#x4E0E;&#x667A;&#x80FD;&#x5408;&#x7EA6;&#x4EA4;&#x4E92;</h3><p>&#x63A5;&#x4E0B;&#x6765;&#xFF0C;&#x7F16;&#x5199;&#x4E00;&#x4E2A;&#x4E0E;&#x667A;&#x80FD;&#x5408;&#x7EA6;&#x4EA4;&#x4E92;&#x7684;&#x811A;&#x672C;&#x3002;&#x5728; <strong>src</strong> &#x6587;&#x4EF6;&#x5939;&#x4E0B;&#x521B;&#x5EFA; <strong>main.ts </strong>&#x6587;&#x4EF6;&#xFF0C;&#x4EE5;&#x4FBF;&#x4F60;&#x80FD;&#x591F;&#x4E0E;&#x667A;&#x80FD;&#x5408;&#x7EA6;&#x8FDB;&#x884C;&#x4EA4;&#x4E92;&#x3002;</p><pre><code class="language-typescript">/*
    Field&#xFF1A;&#x4E0E;&#x4E4B;&#x524D;&#x5B66;&#x5230;&#x7684;&#x76F8;&#x540C;&#x7684; o1js &#x65E0;&#x7B26;&#x53F7;&#x6574;&#x6570;&#x7C7B;&#x578B;&#x3002;
    Mina&#xFF1A;&#x7528;&#x4E8E;&#x6A21;&#x62DF;&#x672C;&#x5730; Mina &#x533A;&#x5757;&#x94FE;&#xFF0C;&#x65B9;&#x4FBF;&#x5C06;&#x667A;&#x80FD;&#x5408;&#x7EA6;&#x90E8;&#x7F72;&#x5230;&#x5176;&#x4E2D;&#xFF0C;&#x5E76;&#x50CF;&#x7528;&#x6237;&#x4E00;&#x6837;&#x4E0E;&#x5176;&#x4EA4;&#x4E92;&#x3002;
    PrivateKey&#xFF1A;&#x4E00;&#x4E2A;&#x5305;&#x542B;&#x7528;&#x4E8E;&#x64CD;&#x4F5C;&#x79C1;&#x94A5;&#x7684;&#x51FD;&#x6570;&#x7684;&#x7C7B;&#x3002;
    AccountUpdate&#xFF1A;&#x751F;&#x6210;&#x4E00;&#x4E2A;&#x53EF;&#x4EE5;&#x66F4;&#x65B0; zkApp &#x8D26;&#x6237;&#x7684;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x7684;&#x7C7B;&#x3002;
*/
import { Square } from &apos;./Square.js&apos;;
import { Field, Mina, PrivateKey, AccountUpdate } from &apos;o1js&apos;;

// &#x521D;&#x59CB;&#x5316;&#x672C;&#x5730;&#x533A;&#x5757;&#x94FE;
const useProof = false; // &#x8BBE;&#x7F6E;&#x662F;&#x5426;&#x4F7F;&#x7528;&#x8BC1;&#x660E;
const Local = await Mina.LocalBlockchain({ proofsEnabled: useProof });
Mina.setActiveInstance(Local);

// &#x6A21;&#x62DF;&#x672C;&#x5730;&#x533A;&#x5757;&#x94FE;&#x63D0;&#x4F9B;&#x4E86;&#x9884;&#x5148;&#x8D44;&#x52A9;&#x7684;&#x8D26;&#x6237;
const deployerAccount = Local.testAccounts[0];
const deployerKey = deployerAccount.key;
const senderAccount = Local.testAccounts[1];
const senderKey = senderAccount.key;
// ----------------------------------------------------

// &#x521B;&#x5EFA;&#x516C;&#x94A5;/&#x79C1;&#x94A5;&#x5BF9;&#x3002;&#x516C;&#x94A5;&#x662F;&#x60A8;&#x7684;&#x5730;&#x5740;&#x4EE5;&#x53CA;&#x5C06; zkApp &#x90E8;&#x7F72;&#x5230;&#x7684;&#x4F4D;&#x7F6E;
const zkAppPrivateKey = PrivateKey.random();
const zkAppAddress = zkAppPrivateKey.toPublicKey();

// &#x521B;&#x5EFA;&#x4E00;&#x4E2A; Square &#x5B9E;&#x4F8B;&#xFF0C;&#x5E76;&#x5C06;&#x5176;&#x90E8;&#x7F72;&#x5230; zkAppAddress
const zkAppInstance = new Square(zkAppAddress);
const deployTxn = await Mina.transaction(deployerAccount, async () =&gt; {
    AccountUpdate.fundNewAccount(deployerAccount);
    await zkAppInstance.deploy();
});
await deployTxn.sign([deployerKey, zkAppPrivateKey]).send(); // &#x53D1;&#x9001;&#x7B7E;&#x540D;

// &#x83B7;&#x53D6;&#x90E8;&#x7F72;&#x540E; Square &#x7684;&#x521D;&#x59CB;&#x72B6;&#x6001;
const num0 = zkAppInstance.num.get();
console.log(&apos;state after init:&apos;, num0.toString());

// ----------------------------------------------------
// &#x521B;&#x5EFA;&#x4E86;&#x4E00;&#x4E2A;&#x65B0;&#x4EA4;&#x6613;&#xFF0C;&#x5C1D;&#x8BD5;&#x5C06;&#x5B57;&#x6BB5;&#x66F4;&#x65B0;&#x4E3A;&#x503C;9&#x3002;
const txn1 = await Mina.transaction(senderAccount, async () =&gt; {
    await zkAppInstance.update(Field(9));
});
await txn1.prove();
await txn1.sign([senderKey]).send();

const num1 = zkAppInstance.num.get();
console.log(&apos;state after txn1:&apos;, num1.toString());

// ----------------------------------------------------
// &#x5C1D;&#x8BD5;&#x4E00;&#x4E2A;&#x5931;&#x8D25;&#x7684;&#x4EA4;&#x6613;,&#x770B;&#x4E00;&#x770B;&#x7ED3;&#x679C;&#x4F1A;&#x662F;&#x600E;&#x6837;
try {
    const txn2 = await Mina.transaction(senderAccount, async () =&gt; {
        await zkAppInstance.update(Field(75));
    });
    await txn2.prove();
    await txn2.sign([senderKey]).send();
} catch (error: any) {
    console.log(error.message);
}
const num2 = zkAppInstance.num.get();
console.log(&apos;state after txn2:&apos;, num2.toString());

// ----------------------------------------------------

const txn3 = await Mina.transaction(senderAccount, async () =&gt; {
    await zkAppInstance.update(Field(81));
});
await txn3.prove();
await txn3.sign([senderKey]).send();

const num3 = zkAppInstance.num.get();
console.log(&apos;state after txn3:&apos;, num3.toString());

// ----------------------------------------------------</code></pre><h3 id="7-%E6%9E%84%E5%BB%BA%E5%B9%B6%E8%BF%90%E8%A1%8C%E6%99%BA%E8%83%BD%E5%90%88%E7%BA%A6">7. &#x6784;&#x5EFA;&#x5E76;&#x8FD0;&#x884C;&#x667A;&#x80FD;&#x5408;&#x7EA6;</h3><p>&#x73B0;&#x5728;&#xFF0C;Square &#x667A;&#x80FD;&#x5408;&#x7EA6;&#x5DF2;&#x7ECF;&#x5B8C;&#x6210;&#xFF0C;&#x4EE5;&#x4E0B;&#x547D;&#x4EE4;&#x5C06;&#x4EE5;&#x6A21;&#x62DF;&#x672C;&#x5730;&#x533A;&#x5757;&#x94FE;&#x8FD0;&#x884C;&#x60A8;&#x7684;&#x9879;&#x76EE;&#x3002;<br>&#x8981;&#x5C06; TypeScript &#x4EE3;&#x7801;&#x7F16;&#x8BD1;&#x6210; JavaScript&#xFF0C;&#x8BF7;&#x4F7F;&#x7528;&#xFF1A;</p><pre><code class="language-shell">npm run build</code></pre><p>&#x8981;&#x8FD0;&#x884C; JavaScript &#x4EE3;&#x7801;&#xFF1A;</p><pre><code class="language-shell">node build/src/main.js</code></pre><p>&#x60A8;&#x53EF;&#x4EE5;&#x9009;&#x62E9;&#x5C06;&#x8FD9;&#x4E9B;&#x547D;&#x4EE4;&#x5408;&#x5E76;&#x4E3A;&#x4E00;&#x884C;&#xFF1A;</p><pre><code class="language-shell">npm run build &amp;&amp; node build/src/main.js</code></pre><h3 id="8-%E8%BF%90%E8%A1%8C%E7%BB%93%E6%9E%9C">8. &#x8FD0;&#x884C;&#x7ED3;&#x679C;</h3><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/09/image-6.png" class="kg-image" alt loading="lazy" width="1752" height="226"></figure>]]></content:encoded></item><item><title><![CDATA[DePINs 知识介绍]]></title><description><![CDATA[<blockquote><strong>Decentralized Physical Infrastructure Networks (DePINs) </strong>&#x6B63;&#x5728;&#x8FC5;&#x901F;&#x5D1B;&#x8D77;&#xFF0C;&#x6210;&#x4E3A;<strong>&#x533A;&#x5757;&#x94FE;&#x548C;&#x7269;&#x8054;&#x7F51;&#xFF08;IoT&#xFF09;&#x9886;&#x57DF;</strong>&#x7684;&#x91CD;&#x8981;&#x521B;&#x65B0;&#x4E4B;&#x4E00;&#x3002;<br><br>DePIN&#x662F;&#x4E00;&#x79CD;&#x5229;&#x7528;&#x533A;&#x5757;&#x94FE;&#x6280;&#x672F;&#x548C;&#x4EE3;&#x5E01;&#x6FC0;&#x52B1;</blockquote>]]></description><link>https://www.thinkingsolidity.com/de-pin/</link><guid isPermaLink="false">6692b02e903d7005b6870840</guid><category><![CDATA[新手小白入门计划]]></category><category><![CDATA[其他]]></category><dc:creator><![CDATA[Echo_留蝉]]></dc:creator><pubDate>Sat, 13 Jul 2024 17:48:21 GMT</pubDate><content:encoded><![CDATA[<blockquote><strong>Decentralized Physical Infrastructure Networks (DePINs) </strong>&#x6B63;&#x5728;&#x8FC5;&#x901F;&#x5D1B;&#x8D77;&#xFF0C;&#x6210;&#x4E3A;<strong>&#x533A;&#x5757;&#x94FE;&#x548C;&#x7269;&#x8054;&#x7F51;&#xFF08;IoT&#xFF09;&#x9886;&#x57DF;</strong>&#x7684;&#x91CD;&#x8981;&#x521B;&#x65B0;&#x4E4B;&#x4E00;&#x3002;<br><br>DePIN&#x662F;&#x4E00;&#x79CD;&#x5229;&#x7528;&#x533A;&#x5757;&#x94FE;&#x6280;&#x672F;&#x548C;&#x4EE3;&#x5E01;&#x6FC0;&#x52B1;&#x673A;&#x5236;&#xFF0C;&#x521B;&#x5EFA;&#x548C;&#x7BA1;&#x7406;&#x7269;&#x7406;&#x57FA;&#x7840;&#x8BBE;&#x65BD;&#x7684;&#x5206;&#x6563;&#x5316;&#x7CFB;&#x7EDF;&#x3002;&#x8FD9;&#x4E9B;&#x7F51;&#x7EDC;&#x4E0D;&#x4EC5;&#x9650;&#x4E8E;&#x6570;&#x636E;&#x5B58;&#x50A8;&#x548C;&#x8BA1;&#x7B97;&#xFF0C;&#x8FD8;&#x6DB5;&#x76D6;&#x4E86;<strong>&#x65E0;&#x7EBF;&#x7F51;&#x7EDC;&#x3001;&#x80FD;&#x6E90;&#x7F51;&#x683C;&#x3001;&#x8FD0;&#x8F93;&#x7CFB;&#x7EDF;</strong>&#x7B49;&#x73B0;&#x5B9E;&#x4E16;&#x754C;&#x7684;&#x57FA;&#x7840;&#x8BBE;&#x65BD;&#x3002;</blockquote><hr><h3 id="%E4%B8%80%E3%80%81%E4%BB%80%E4%B9%88%E6%98%AFdepin%EF%BC%9F">&#x4E00;&#x3001;&#x4EC0;&#x4E48;&#x662F;DePIN&#xFF1F;</h3><p>DePIN&#xFF0C;&#x5168;&#x79F0;Decentralized Physical Infrastructure Networks&#xFF0C;&#x5373;&#x5206;&#x6563;&#x7269;&#x7406;&#x57FA;&#x7840;&#x8BBE;&#x65BD;&#x7F51;&#x7EDC;&#xFF0C;&#x662F;&#x4E00;&#x79CD;&#x901A;&#x8FC7; <strong>&#x533A;&#x5757;&#x94FE;&#x6280;&#x672F;</strong> &#x548C; <strong>&#x7269;&#x8054;&#x7F51;IoT</strong> &#x5C06;&#x7269;&#x7406;&#x57FA;&#x7840;&#x8BBE;&#x65BD;&#x53BB;&#x4E2D;&#x5FC3;&#x5316;&#x7BA1;&#x7406;&#x7684;&#x65B0;&#x65B9;&#x5F0F;&#x3002;&#x5176;&#x6838;&#x5FC3;&#x7406;&#x5FF5;&#x662F;&#x901A;&#x8FC7;&#x4EE3;&#x5E01;&#x6FC0;&#x52B1;&#x673A;&#x5236;&#xFF0C;&#x9F13;&#x52B1;&#x4E2A;&#x4EBA;&#x548C;&#x4F01;&#x4E1A;&#x5171;&#x4EAB;&#x548C;&#x7BA1;&#x7406;&#x7269;&#x7406;&#x8D44;&#x6E90;&#xFF0C;&#x4ECE;&#x800C;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x66F4;&#x6C11;&#x4E3B;&#x3001;&#x66F4;&#x9AD8;&#x6548;&#x7684;<strong>&#x57FA;&#x7840;&#x8BBE;&#x65BD;&#x7BA1;&#x7406;&#x6A21;&#x5F0F;</strong>&#x3002;</p><h3 id="%E4%BA%8C%E3%80%81depin%E7%9A%84%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86">&#x4E8C;&#x3001;DePIN&#x7684;&#x5DE5;&#x4F5C;&#x539F;&#x7406;</h3><p>DePIN&#x7684;&#x5DE5;&#x4F5C;&#x539F;&#x7406;&#x4E3B;&#x8981;&#x5305;&#x62EC;&#x4EE5;&#x4E0B;&#x51E0;&#x4E2A;&#x65B9;&#x9762;&#xFF1A;</p><ol><li><strong>&#x7269;&#x7406;&#x57FA;&#x7840;&#x8BBE;&#x65BD;</strong>&#xFF1A;DePIN&#x9700;&#x8981;&#x5728;&#x73B0;&#x5B9E;&#x4E16;&#x754C;&#x4E2D;&#x5EFA;&#x7ACB;&#x548C;&#x7EF4;&#x62A4;&#x7269;&#x7406;&#x57FA;&#x7840;&#x8BBE;&#x65BD;&#xFF0C;&#x8FD9;&#x4E9B;&#x57FA;&#x7840;&#x8BBE;&#x65BD;&#x53EF;&#x4EE5;&#x662F;&#x6570;&#x636E;&#x5B58;&#x50A8;&#x8BBE;&#x5907;&#x3001;&#x65E0;&#x7EBF;&#x70ED;&#x70B9;&#x3001;&#x8BA1;&#x7B97;&#x8BBE;&#x5907;&#x7B49;&#x3002;</li><li><strong>&#x533A;&#x5757;&#x94FE;&#x67B6;&#x6784;</strong>&#xFF1A;&#x533A;&#x5757;&#x94FE;&#x4F5C;&#x4E3A;&#x4E00;&#x4E2A;&#x4E0D;&#x53EF;&#x7BE1;&#x6539;&#x7684;&#x8D26;&#x672C;&#xFF0C;&#x8BB0;&#x5F55;&#x6240;&#x6709;&#x7684;&#x4EA4;&#x6613;&#x548C;&#x6570;&#x636E;&#x4EA4;&#x6362;&#xFF0C;&#x786E;&#x4FDD;&#x900F;&#x660E;&#x5EA6;&#x548C;&#x4FE1;&#x4EFB;&#x3002;</li><li><strong>&#x4EE3;&#x5E01;&#x6FC0;&#x52B1;</strong>&#xFF1A;&#x901A;&#x8FC7;&#x4EE3;&#x5E01;&#x6FC0;&#x52B1;&#x673A;&#x5236;&#xFF0C;&#x9F13;&#x52B1;&#x8D44;&#x6E90;&#x63D0;&#x4F9B;&#x8005;&#x5171;&#x4EAB;&#x8D44;&#x6E90;&#xFF0C;&#x5E76;&#x4E3A;&#x7F51;&#x7EDC;&#x7684;&#x4F7F;&#x7528;&#x8005;&#x63D0;&#x4F9B;&#x7ECF;&#x6D4E;&#x6FC0;&#x52B1;&#x3002;</li><li><strong>&#x667A;&#x80FD;&#x5408;&#x7EA6;</strong>&#xFF1A;&#x667A;&#x80FD;&#x5408;&#x7EA6;&#x81EA;&#x52A8;&#x7BA1;&#x7406;&#x8D44;&#x6E90;&#x5171;&#x4EAB;&#x7684;&#x6761;&#x6B3E;&#x548C;&#x6761;&#x4EF6;&#xFF0C;&#x786E;&#x4FDD;&#x7F51;&#x7EDC;&#x7684;&#x9AD8;&#x6548;&#x8FD0;&#x884C;&#x3002;</li></ol><h3 id="%E4%B8%89%E3%80%81depin%E7%9A%84%E4%BC%98%E5%8A%BF">&#x4E09;&#x3001;DePIN&#x7684;&#x4F18;&#x52BF;</h3><ul><li><strong>&#x5206;&#x6563;&#x5316;&#x7BA1;&#x7406;</strong>&#xFF1A;&#x6D88;&#x9664;&#x4E2D;&#x5FC3;&#x5316;&#x63A7;&#x5236;&#x70B9;&#xFF0C;&#x589E;&#x5F3A;&#x7CFB;&#x7EDF;&#x7684;&#x5B89;&#x5168;&#x6027;&#x548C;&#x5F39;&#x6027;&#x3002;</li><li><strong>&#x6210;&#x672C;&#x6548;&#x76CA;</strong>&#xFF1A;&#x901A;&#x8FC7;&#x70B9;&#x5BF9;&#x70B9;&#x4EA4;&#x6613;&#x964D;&#x4F4E;&#x6210;&#x672C;&#xFF0C;&#x6D88;&#x9664;&#x4F20;&#x7EDF;&#x7684;&#x4E2D;&#x95F4;&#x8D39;&#x7528;&#x3002;</li><li><strong>&#x900F;&#x660E;&#x5EA6;&#x548C;&#x4FE1;&#x4EFB;</strong>&#xFF1A;&#x533A;&#x5757;&#x94FE;&#x6280;&#x672F;&#x786E;&#x4FDD;&#x6240;&#x6709;&#x7684;&#x4EA4;&#x6613;&#x548C;&#x6570;&#x636E;&#x4EA4;&#x6362;&#x90FD;&#x662F;&#x900F;&#x660E;&#x4E14;&#x53EF;&#x4FE1;&#x7684;&#x3002;</li><li><strong>&#x521B;&#x65B0;&#x548C;&#x7ADE;&#x4E89;</strong>&#xFF1A;&#x964D;&#x4F4E;&#x8FDB;&#x5165;&#x95E8;&#x69DB;&#xFF0C;&#x9F13;&#x52B1;&#x66F4;&#x591A;&#x7684;&#x53C2;&#x4E0E;&#x8005;&#x52A0;&#x5165;&#xFF0C;&#x4FC3;&#x8FDB;&#x5E02;&#x573A;&#x7ADE;&#x4E89;&#x548C;&#x521B;&#x65B0;&#x3002;</li></ul><h3 id="%E5%9B%9B%E3%80%81depin%E7%9A%84%E5%BA%94%E7%94%A8%E5%9C%BA%E6%99%AF">&#x56DB;&#x3001;DePIN&#x7684;&#x5E94;&#x7528;&#x573A;&#x666F;</h3><!--kg-card-begin: markdown--><p><strong>1. &#x6570;&#x636E;&#x5B58;&#x50A8;&#xFF1A;</strong></p>
<ul>
<li><a href="https://filecoin.io/zh-cn/">Filecoin</a>&#xFF0C;&#x901A;&#x8FC7;&#x9F13;&#x52B1;&#x7528;&#x6237;&#x5171;&#x4EAB;&#x672A;&#x4F7F;&#x7528;&#x7684;&#x5B58;&#x50A8;&#x7A7A;&#x95F4;&#xFF0C;&#x63D0;&#x4F9B;&#x53BB;&#x4E2D;&#x5FC3;&#x5316;&#x7684;&#x6570;&#x636E;&#x5B58;&#x50A8;&#x670D;&#x52A1;&#x3002;&#x8BE5;&#x5E73;&#x53F0;&#x5229;&#x7528;&#x533A;&#x5757;&#x94FE;&#x6280;&#x672F;&#xFF0C;&#x786E;&#x4FDD;&#x6570;&#x636E;&#x5B58;&#x50A8;&#x548C;&#x68C0;&#x7D22;&#x7684;&#x5B89;&#x5168;&#x6027;&#x548C;&#x53EF;&#x9760;&#x6027;&#x3002;</li>
</ul>
<p><strong>2. &#x8BA1;&#x7B97;&#x8D44;&#x6E90;&#xFF1A;</strong></p>
<ul>
<li><a href="https://render.com/">Render Network (RNDR)</a> &#x662F;&#x4E00;&#x4E2A;&#x5206;&#x5E03;&#x5F0F; GPU &#x6E32;&#x67D3;&#x670D;&#x52A1;&#x5E73;&#x53F0;&#xFF0C;&#x901A;&#x8FC7;&#x5C06; GPU &#x8BA1;&#x7B97;&#x80FD;&#x529B;&#x6574;&#x5408;&#x5728;&#x4E00;&#x8D77;&#xFF0C;&#x4E3A;&#x9700;&#x8981;&#x9AD8;&#x6027;&#x80FD;&#x8BA1;&#x7B97;&#x8D44;&#x6E90;&#x7684;&#x7528;&#x6237;&#x63D0;&#x4F9B;&#x670D;&#x52A1;&#x3002;&#x8BE5;&#x5E73;&#x53F0;&#x8BB0;&#x5F55;&#x6240;&#x6709;&#x7684;&#x8BA1;&#x7B97;&#x8FC7;&#x7A0B;&#xFF0C;&#x5E76;&#x901A;&#x8FC7;&#x533A;&#x5757;&#x94FE;&#x6280;&#x672F;&#x786E;&#x4FDD;&#x900F;&#x660E;&#x548C;&#x53EF;&#x4FE1;&#x3002;</li>
</ul>
<p><strong>3. &#x65E0;&#x7EBF;&#x7F51;&#x7EDC;&#xFF1A;</strong></p>
<ul>
<li><a href="https://www.helium.com/">Helium</a> &#x521B;&#x5EFA;&#x4E86;&#x4E00;&#x4E2A;&#x53BB;&#x4E2D;&#x5FC3;&#x5316;&#x7684;&#x65E0;&#x7EBF;&#x7F51;&#x7EDC;&#xFF0C;&#x901A;&#x8FC7;&#x6FC0;&#x52B1;&#x7528;&#x6237;&#x5171;&#x4EAB;&#x65E0;&#x7EBF;&#x70ED;&#x70B9;&#xFF0C;&#x63D0;&#x4F9B;&#x5EC9;&#x4EF7;&#x4E14;&#x5E7F;&#x6CDB;&#x7684;&#x65E0;&#x7EBF;&#x8FDE;&#x63A5;&#x670D;&#x52A1;&#x3002;&#x7528;&#x6237;&#x53EF;&#x4EE5;&#x90E8;&#x7F72; Helium &#x70ED;&#x70B9;&#x8BBE;&#x5907;&#xFF0C;&#x8FD9;&#x4E9B;&#x8BBE;&#x5907;&#x4E0D;&#x4EC5;&#x63D0;&#x4F9B;&#x65E0;&#x7EBF;&#x8FDE;&#x63A5;&#xFF0C;&#x8FD8;&#x80FD;&#x901A;&#x8FC7;&#x52A0;&#x5165;&#x7F51;&#x7EDC;&#x83B7;&#x5F97;&#x52A0;&#x5BC6;&#x8D27;&#x5E01;&#x5956;&#x52B1;</li>
<li><a href="https://wicrypt.com/">Wicrypt</a> &#x4E13;&#x6CE8;&#x4E8E;&#x89E3;&#x51B3;&#x975E;&#x6D32;&#x5730;&#x533A;&#x4E92;&#x8054;&#x7F51;&#x8FDE;&#x63A5;&#x95EE;&#x9898;&#xFF0C;&#x63D0;&#x4F9B;&#x4E86;&#x4E00;&#x7CFB;&#x5217;&#x957F;&#x8DDD;&#x79BB;WiFi&#x8DEF;&#x7531;&#x5668;&#x4EA7;&#x54C1;&#x3002;&#x5176;&#x4E2D; <strong>Spider Wi-Fi Hotspot</strong> &#x53EF;&#x4EE5;&#x652F;&#x6301;&#x591A;&#x8FBE;<strong>70</strong>&#x4E2A;&#x8BBE;&#x5907;&#x540C;&#x65F6;&#x8FDE;&#x63A5;&#xFF0C;&#x8986;&#x76D6;&#x8DDD;&#x79BB;&#x53EF;&#x8FBE;<strong>200</strong>&#x7C73;&#x3002;&#x901A;&#x8FC7; SIM&#x5361;&#x69FD; &#x548C; 4G-LTE&#x63A5;&#x6536;&#x529F;&#x80FD;&#xFF0C;&#x7528;&#x6237;&#x53EF;&#x4EE5;&#x83B7;&#x5F97;&#x9AD8;&#x8FBE; 300 Mbps&#x7684; WiFi &#x4E92;&#x8054;&#x7F51;&#x8FDE;&#x63A5;&#x3002;</li>
</ul>
<p><strong>4. &#x89C6;&#x9891;&#x6D41;&#x5A92;&#x4F53;&#xFF1A;</strong></p>
<ul>
<li><a href="https://www.thetatoken.org/">Theta</a> &#x7F51;&#x7EDC;&#x901A;&#x8FC7;&#x5171;&#x4EAB;&#x5E26;&#x5BBD;&#x548C;&#x5B58;&#x50A8;&#xFF0C;&#x4E3A;&#x5168;&#x7403;&#x7528;&#x6237;&#x63D0;&#x4F9B;&#x9AD8;&#x8D28;&#x91CF;&#x7684;&#x89C6;&#x9891;&#x6D41;&#x5A92;&#x4F53;&#x670D;&#x52A1;&#x3002;</li>
<li><a href="https://www.natix.network/">NATIX</a> &#x662F;&#x4E00;&#x4E2A;&#x5229;&#x7528;&#x667A;&#x80FD;&#x624B;&#x673A;&#x8FDB;&#x884C;&#x8857;&#x666F;&#x91C7;&#x96C6;&#x7684;&#x9879;&#x76EE;&#x3002;&#x901A;&#x8FC7;&#x5728;&#x667A;&#x80FD;&#x624B;&#x673A;&#x4E0A;&#x5B89;&#x88C5; NATIX &#x5E94;&#x7528;&#xFF0C;&#x7528;&#x6237;&#x53EF;&#x4EE5;&#x8D21;&#x732E;&#x8857;&#x666F;&#x6570;&#x636E;&#xFF0C;&#x8FD9;&#x4E9B;&#x6570;&#x636E;&#x7528;&#x4E8E;&#x521B;&#x5EFA;&#x66F4;&#x7CBE;&#x51C6;&#x548C;&#x5B9E;&#x65F6;&#x7684;&#x5730;&#x56FE;&#x3002;&#x8BE5;&#x5E94;&#x7528;&#x5229;&#x7528;&#x624B;&#x673A;&#x7684;&#x591A;&#x79CD;&#x4F20;&#x611F;&#x5668;&#xFF08;&#x5982;&#x6444;&#x50CF;&#x5934;&#x3001;&#x9EA6;&#x514B;&#x98CE;&#x3001;&#x52A0;&#x901F;&#x5EA6;&#x8BA1;&#x7B49;&#xFF09;&#x6765;&#x5B9E;&#x73B0;&#x8FD9;&#x4E00;&#x76EE;&#x6807;&#x3002;&#x7528;&#x6237;&#x53EF;&#x4EE5;&#x514D;&#x8D39;&#x4E0B;&#x8F7D;&#x5E76;&#x4F7F;&#x7528;&#x5E94;&#x7528;&#xFF0C;&#x751A;&#x81F3;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x63A8;&#x8350;&#x7801;&#x83B7;&#x53D6;&#x5956;&#x52B1;&#x79EF;&#x5206;&#x3002;</li>
<li><a href="https://dimo.zone/">DIMO</a>&#x8BBE;&#x5907;&#x5B89;&#x88C5;&#x5728;&#x6C7D;&#x8F66;&#x4E0A;&#xFF0C;&#x53EF;&#x4EE5;&#x5B9E;&#x65F6;&#x63D0;&#x4F9B;&#x8F66;&#x8F86;&#x6570;&#x636E;&#xFF0C;&#x5E76;&#x5C06;&#x533F;&#x540D;&#x5316;&#x7684;&#x6570;&#x636E;&#x63D0;&#x4F9B;&#x7ED9;&#x7B2C;&#x4E09;&#x65B9;&#x5F00;&#x53D1;&#x8005;&#x4F7F;&#x7528;&#x3002;&#x7528;&#x6237;&#x901A;&#x8FC7;&#x8D21;&#x732E;&#x6570;&#x636E;&#x53EF;&#x4EE5;&#x83B7;&#x5F97;&#x4EE3;&#x5E01;&#x5956;&#x52B1;&#x3002;</li>
</ul>
<!--kg-card-end: markdown--><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/07/image-1.png" class="kg-image" alt loading="lazy" width="2878" height="1350"></figure><h3 id="%E4%BA%94%E3%80%81depin%E7%9A%84%E6%8C%91%E6%88%98">&#x4E94;&#x3001;DePIN&#x7684;&#x6311;&#x6218;</h3><p>&#x5C3D;&#x7BA1;DePIN&#x5177;&#x6709;&#x8BB8;&#x591A;&#x4F18;&#x52BF;&#xFF0C;&#x4F46;&#x5176;&#x53D1;&#x5C55;&#x4E5F;&#x9762;&#x4E34;&#x4E00;&#x4E9B;&#x6311;&#x6218;&#xFF1A;</p><ul><li><strong>&#x6280;&#x672F;&#x590D;&#x6742;&#x6027;</strong>&#xFF1A;&#x533A;&#x5757;&#x94FE;&#x6280;&#x672F;&#x548C;IoT&#x7684;&#x7ED3;&#x5408;&#x589E;&#x52A0;&#x4E86;&#x7CFB;&#x7EDF;&#x7684;&#x590D;&#x6742;&#x6027;&#xFF0C;&#x8981;&#x6C42;&#x66F4;&#x9AD8;&#x7684;&#x6280;&#x672F;&#x6C34;&#x5E73;&#x3002;</li><li><strong>&#x76D1;&#x7BA1;&#x4E0D;&#x786E;&#x5B9A;&#x6027;</strong>&#xFF1A;&#x4E0D;&#x540C;&#x56FD;&#x5BB6;&#x548C;&#x5730;&#x533A;&#x7684;&#x76D1;&#x7BA1;&#x653F;&#x7B56;&#x5DEE;&#x5F02;&#x8F83;&#x5927;&#xFF0C;&#x53EF;&#x80FD;&#x5F71;&#x54CD;DePIN&#x7684;&#x5168;&#x7403;&#x63A8;&#x5E7F;&#x3002;</li><li><strong>&#x521D;&#x59CB;&#x8D44;&#x672C;&#x6295;&#x5165;</strong>&#xFF1A;&#x5EFA;&#x7ACB;&#x548C;&#x7EF4;&#x62A4;&#x7269;&#x7406;&#x57FA;&#x7840;&#x8BBE;&#x65BD;&#x9700;&#x8981;&#x8F83;&#x9AD8;&#x7684;&#x521D;&#x59CB;&#x8D44;&#x672C;&#x6295;&#x5165;&#x3002;</li></ul><h3 id="%E5%85%AD%E3%80%81%E7%BB%93%E8%AE%BA">&#x516D;&#x3001;&#x7ED3;&#x8BBA;</h3><p>DePIN&#x4EE3;&#x8868;&#x4E86;&#x57FA;&#x7840;&#x8BBE;&#x65BD;&#x7BA1;&#x7406;&#x7684;&#x65B0;&#x8303;&#x5F0F;&#xFF0C;&#x901A;&#x8FC7;&#x533A;&#x5757;&#x94FE;&#x548C;IoT&#x6280;&#x672F;&#x7684;&#x7ED3;&#x5408;&#xFF0C;&#x521B;&#x9020;&#x4E86;&#x4E00;&#x4E2A;&#x66F4;&#x5B89;&#x5168;&#x3001;&#x66F4;&#x9AD8;&#x6548;&#x3001;&#x66F4;&#x900F;&#x660E;&#x7684;&#x7BA1;&#x7406;&#x6A21;&#x5F0F;&#x3002;&#x5C3D;&#x7BA1;&#x9762;&#x4E34;&#x6280;&#x672F;&#x548C;&#x76D1;&#x7BA1;&#x4E0A;&#x7684;&#x6311;&#x6218;&#xFF0C;&#x4F46;&#x968F;&#x7740;&#x6280;&#x672F;&#x7684;&#x8FDB;&#x6B65;&#x548C;&#x5E02;&#x573A;&#x7684;&#x6269;&#x5927;&#xFF0C;DePIN&#x6709;&#x671B;&#x5728;&#x672A;&#x6765;&#x51E0;&#x5E74;&#x5185;&#x5F7B;&#x5E95;&#x6539;&#x53D8;&#x6211;&#x4EEC;&#x7BA1;&#x7406;&#x548C;&#x5229;&#x7528;&#x7269;&#x7406;&#x8D44;&#x6E90;&#x7684;&#x65B9;&#x5F0F;&#x3002;</p>]]></content:encoded></item><item><title><![CDATA[新手小白丝滑入门web3（二）]]></title><description><![CDATA[<hr><blockquote>&#x9700;&#x6C42;&#x4E0E;&#x521B;&#x65B0;&#x76F8;&#x8F85;&#x76F8;&#x6210;&#xFF0C;&#x901A;&#x8FC7;&#x4E86;&#x89E3;&#x533A;&#x5757;&#x94FE;&#x7684;&#x5386;&#x53F2;&#x4E8B;&#x4EF6;&#xFF0C;&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x770B;&#x5230;&#x5B83;&#x7684;&#x53D1;&#x5C55;&#x65B9;&#x5411;&#x3002;</blockquote><h2 id="%E4%B8%80%E3%80%81%E5%8E%86%E5%8F%B2%E8%BF%9B%E7%A8%8B">&#x4E00;&#x3001;&#x5386;&#x53F2;&#x8FDB;&#x7A0B;</h2><ol><li><strong>&#x8D77;&#x6E90;&#xFF1A;</strong><br>- 1976&#x5E74;&#xFF0C;&#x5BC6;</li></ol>]]></description><link>https://www.thinkingsolidity.com/web3xin-shou-ru-men/</link><guid isPermaLink="false">6656e36a903d7005b68707e7</guid><category><![CDATA[新手小白入门计划]]></category><dc:creator><![CDATA[Echo_留蝉]]></dc:creator><pubDate>Wed, 29 May 2024 08:23:12 GMT</pubDate><content:encoded><![CDATA[<hr><blockquote>&#x9700;&#x6C42;&#x4E0E;&#x521B;&#x65B0;&#x76F8;&#x8F85;&#x76F8;&#x6210;&#xFF0C;&#x901A;&#x8FC7;&#x4E86;&#x89E3;&#x533A;&#x5757;&#x94FE;&#x7684;&#x5386;&#x53F2;&#x4E8B;&#x4EF6;&#xFF0C;&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x770B;&#x5230;&#x5B83;&#x7684;&#x53D1;&#x5C55;&#x65B9;&#x5411;&#x3002;</blockquote><h2 id="%E4%B8%80%E3%80%81%E5%8E%86%E5%8F%B2%E8%BF%9B%E7%A8%8B">&#x4E00;&#x3001;&#x5386;&#x53F2;&#x8FDB;&#x7A0B;</h2><ol><li><strong>&#x8D77;&#x6E90;&#xFF1A;</strong><br>- 1976&#x5E74;&#xFF0C;&#x5BC6;&#x7801;&#x5B66;&#x5927;&#x5E08;Diffie&#x548C;Hellman&#x53D1;&#x8868;&#x4E86;&#x8BBA;&#x6587;&#x300A;&#x5BC6;&#x7801;&#x5B66;&#x7684;&#x65B0;&#x65B9;&#x5411;&#x300B;&#xFF0C;&#x5960;&#x5B9A;&#x4E86;&#x672A;&#x6765;&#x5BC6;&#x7801;&#x5B66;&#x53D1;&#x5C55;&#x7684;&#x65B9;&#x5411;&#xFF0C;&#x5305;&#x62EC;&#x975E;&#x5BF9;&#x79F0;&#x52A0;&#x5BC6;&#x3001;&#x692D;&#x5706;&#x66F2;&#x7EBF;&#x7B97;&#x6CD5;&#x3001;&#x54C8;&#x5E0C;&#x7B49;&#x3002;<br><br>- &#x540C;&#x5E74;&#xFF0C;&#x7ECF;&#x6D4E;&#x5B66;&#x5BB6;&#x54C8;&#x8036;&#x514B;&#xFF08;Hayek&#xFF09;&#x51FA;&#x7248;&#x4E86;&#x300A;&#x8D27;&#x5E01;&#x7684;&#x975E;&#x56FD;&#x5BB6;&#x5316;&#x300B;&#xFF0C;&#x63D0;&#x51FA;&#x975E;&#x4E3B;&#x6743;&#x8D27;&#x5E01;&#x548C;&#x53BB;&#x4E2D;&#x5FC3;&#x5316;&#x8D27;&#x5E01;&#x7684;&#x7406;&#x5FF5;&#xFF0C;&#x4E3A;&#x533A;&#x5757;&#x94FE;&#x7684;&#x8BDE;&#x751F;&#x94FA;&#x5E73;&#x9053;&#x8DEF;&#x3002;<br></li><li><strong>&#x5BC6;&#x7801;&#x5B66;&#x7684;&#x53D1;&#x5C55;</strong>&#xFF1A;<br>- 1980&#x5E74;&#xFF0C;RSA&#x7B97;&#x6CD5;&#x8BDE;&#x751F;&#xFF0C;&#x4E3A;&#x975E;&#x5BF9;&#x79F0;&#x52A0;&#x5BC6;&#x4F53;&#x7CFB;&#x5960;&#x5B9A;&#x57FA;&#x7840;&#x3002;<br><br>- 1982&#x5E74;&#xFF0C;Lamport&#x63D0;&#x51FA;&#x62DC;&#x5360;&#x5EF7;&#x5C06;&#x519B;&#x95EE;&#x9898;&#xFF0C;&#x6807;&#x5FD7;&#x7740;&#x5206;&#x5E03;&#x5F0F;&#x8BA1;&#x7B97;&#x7684;&#x53EF;&#x9760;&#x6027;&#x7406;&#x8BBA;&#x8FDB;&#x5165;&#x5B9E;&#x8D28;&#x6027;&#x9636;&#x6BB5;&#x3002;<br><br>- 1985&#x5E74;&#xFF0C;Koblitz&#x548C;Miller&#x72EC;&#x7ACB;&#x63D0;&#x51FA;&#x692D;&#x5706;&#x66F2;&#x7EBF;&#x52A0;&#x5BC6;&#xFF08;ECC&#xFF09;&#x7B97;&#x6CD5;&#xFF0C;&#x4F7F;&#x975E;&#x5BF9;&#x79F0;&#x52A0;&#x5BC6;&#x5B9E;&#x7528;&#x5316;&#x3002;<br></li><li><strong>&#x5BC6;&#x7801;&#x5B66;&#x8D27;&#x5E01;&#x7684;&#x96CF;&#x5F62;</strong>&#xFF1A;<br>- 1997&#x5E74;&#xFF0C;HashCash&#x65B9;&#x6CD5;&#xFF08;&#x7B2C;&#x4E00;&#x4EE3;POW&#x7B97;&#x6CD5;&#xFF09;&#x51FA;&#x73B0;&#xFF0C;&#x7528;&#x4E8E;&#x53CD;&#x5783;&#x573E;&#x90AE;&#x4EF6;&#x3002;<br><br>- 1998&#x5E74;&#xFF0C;&#x6234;&#x4F1F;&#x548C;&#x5C3C;&#x514B;&#xB7;&#x8428;&#x535A;&#x63D0;&#x51FA;&#x5BC6;&#x7801;&#x5B66;&#x8D27;&#x5E01;&#x7684;&#x6982;&#x5FF5;&#xFF0C;&#x4E3A;&#x6BD4;&#x7279;&#x5E01;&#x7684;&#x7CBE;&#x795E;&#x5148;&#x9A71;&#x3002;<br></li><li><strong>&#x70B9;&#x5BF9;&#x70B9;&#x7F51;&#x7EDC;</strong>&#xFF1A;<br>- 1999-2001&#x5E74;&#xFF0C;Napster&#x3001;EDonkey 2000&#x548C;BitTorrent&#x5206;&#x522B;&#x5148;&#x540E;&#x51FA;&#x73B0;&#xFF0C;&#x5960;&#x5B9A;&#x4E86;P2P&#x7F51;&#x7EDC;&#x8BA1;&#x7B97;&#x7684;&#x57FA;&#x7840;&#x3002;<br></li><li><strong>&#x6BD4;&#x7279;&#x5E01;&#x7684;&#x8BDE;&#x751F;</strong>&#xFF1A;<br>- 2008&#x5E74;&#xFF0C;&#x4E2D;&#x672C;&#x806A;&#x53D1;&#x8868;&#x300A;&#x6BD4;&#x7279;&#x5E01;&#xFF1A;&#x70B9;&#x5BF9;&#x70B9;&#x7684;&#x7535;&#x5B50;&#x73B0;&#x91D1;&#x7CFB;&#x7EDF;&#x300B;&#x8BBA;&#x6587;&#xFF0C;&#x5F00;&#x542F;&#x4E86;&#x6BD4;&#x7279;&#x5E01;&#x65F6;&#x4EE3;&#x3002;<br><br>- 2009&#x5E74;&#xFF0C;&#x4E2D;&#x672C;&#x806A;&#x6316;&#x6398;&#x521B;&#x59CB;&#x533A;&#x5757;&#xFF0C;&#x6BD4;&#x7279;&#x5E01;&#x6B63;&#x5F0F;&#x8BDE;&#x751F;&#x3002;<br></li><li><strong>&#x533A;&#x5757;&#x94FE;&#x7684;&#x6F14;&#x8FDB;</strong>&#xFF1A;<br>- <strong>&#x533A;&#x5757;&#x94FE;1.0</strong>&#xFF1A;&#x59CB;&#x4E8E;&#x6BD4;&#x7279;&#x5E01;&#xFF0C;&#x533A;&#x5757;&#x94FE;&#x7684;&#x96CF;&#x5F62;&#x3002;&#x4E3B;&#x8981;&#x5173;&#x6CE8;&#x6570;&#x5B57;&#x8D27;&#x5E01;&#x548C;&#x652F;&#x4ED8;&#x529F;&#x80FD;&#x3002;<br><br>		&#x6BD4;&#x7279;&#x5E01;&#xFF08;Bitcoin&#xFF09;&#x5347;&#x7EA7;&#x4E8B;&#x4EF6;&#xFF1A;<br>			- 2017&#x5E74;&#xFF0C;Segregated Witness (SegWit)&#xFF1A; SegWit&#x901A;&#x8FC7;&#x5206;&#x79BB;&#x7B7E;&#x540D;&#x6570;&#x636E;&#x548C;&#x4EA4;&#x6613;&#x6570;&#x636E;&#x6765;&#x6539;&#x5584;&#x6BD4;&#x7279;&#x5E01;&#x7684;&#x6269;&#x5C55;&#x6027;&#xFF0C;&#x540C;&#x65F6;&#x8FD8;&#x4E3A;&#x5B9E;&#x65BD;&#x7B2C;&#x4E8C;&#x5C42;&#x89E3;&#x51B3;&#x65B9;&#x6848;&#xFF08;&#x5982;&#x95EA;&#x7535;&#x7F51;&#x7EDC;&#xFF09;&#x94FA;&#x5E73;&#x4E86;&#x9053;&#x8DEF;&#x3002;<br>			- 2021&#x5E74;&#xFF0C;Taproot&#xFF1A; &#x901A;&#x8FC7;&#x5F15;&#x5165;&#x65B0;&#x7684;&#x7B7E;&#x540D;&#x65B9;&#x6848;&#x548C;&#x667A;&#x80FD;&#x5408;&#x7EA6;&#x529F;&#x80FD;&#xFF0C;&#x63D0;&#x9AD8;&#x4E86;&#x6BD4;&#x7279;&#x5E01;&#x7684;&#x9690;&#x79C1;&#x6027;&#x548C;&#x53EF;&#x6269;&#x5C55;&#x6027;&#xFF0C;&#x540C;&#x65F6;&#x964D;&#x4F4E;&#x4E86;&#x94FE;&#x4E0A;&#x667A;&#x80FD;&#x5408;&#x7EA6;&#x7684;&#x6210;&#x672C;&#x3002;<br><br>- <strong>&#x533A;&#x5757;&#x94FE;2.0</strong>&#xFF1A;&#x4EE5;&#x4EE5;&#x592A;&#x574A;&#x4E3A;&#x4E2D;&#x5FC3;&#xFF0C;&#x5F15;&#x5165;&#x667A;&#x80FD;&#x5408;&#x7EA6;<br><br>- <strong>&#x533A;&#x5757;&#x94FE;3.0</strong>&#xFF1A;Cardano&#x7B49;&#x65B0;&#x4E00;&#x4EE3;&#x533A;&#x5757;&#x94FE;&#x5E73;&#x53F0;&#x51FA;&#x73B0;&#xFF0C;&#x5C06;&#x5E94;&#x7528;&#x6269;&#x5C55;&#x81F3;&#x7269;&#x6D41;&#x3001;&#x4EBA;&#x529B;&#x8D44;&#x6E90;&#x3001;&#x79D1;&#x5B66;&#x3001;&#x6559;&#x80B2;&#x7B49;&#x5404;&#x884C;&#x5404;&#x4E1A;&#x3002;</li></ol><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/05/image-2.png" class="kg-image" alt loading="lazy" width="2787" height="562"></figure><h2 id="%E4%BA%8C%E3%80%81%E4%BB%80%E4%B9%88%E6%98%AF%E5%8C%BA%E5%9D%97%E9%93%BElayer0%E3%80%81layer1%E3%80%81layer2%EF%BC%9F">&#x4E8C;&#x3001;&#x4EC0;&#x4E48;&#x662F;&#x533A;&#x5757;&#x94FE;Layer0&#x3001;Layer1&#x3001;Layer2&#xFF1F;</h2><blockquote>&#x5728;&#x533A;&#x5757;&#x94FE;&#x9886;&#x57DF;&#xFF0C;Layer0&#x3001;Layer1&#x548C;Layer2&#x662F;&#x7528;&#x6765;&#x63CF;&#x8FF0;&#x4E0D;&#x540C;&#x5C42;&#x6B21;&#x7684;&#x6280;&#x672F;&#x89E3;&#x51B3;&#x65B9;&#x6848;&#x7684;&#x672F;&#x8BED;&#x3002;&#x8FD9;&#x4E9B;&#x672F;&#x8BED;&#x901A;&#x5E38;&#x7528;&#x4E8E;&#x63CF;&#x8FF0;&#x533A;&#x5757;&#x94FE;&#x7CFB;&#x7EDF;&#x7684;&#x5C42;&#x6B21;&#x7ED3;&#x6784;&#x4EE5;&#x53CA;&#x4E0D;&#x540C;&#x5C42;&#x6B21;&#x4E4B;&#x95F4;&#x7684;&#x5173;&#x7CFB;&#x3002;</blockquote><p><strong>Layer0&#xFF08;&#x96F6;&#x5C42;&#xFF09;&#xFF1A;</strong> Layer0&#x901A;&#x5E38;&#x6307;&#x7684;&#x662F;&#x5E95;&#x5C42;&#x57FA;&#x7840;&#x8BBE;&#x65BD;&#xFF0C;&#x5373;&#x533A;&#x5757;&#x94FE;&#x7F51;&#x7EDC;&#x672C;&#x8EAB;&#x3002;&#x8FD9;&#x5305;&#x62EC;&#x5E95;&#x5C42;&#x7684;&#x5171;&#x8BC6;&#x673A;&#x5236;&#xFF08;&#x5982;&#xFF1A;POW&#x3001;POS&#xFF09;&#x3001;&#x533A;&#x5757;&#x94FE;&#x534F;&#x8BAE;&#x3001;&#x7F51;&#x7EDC;&#x5B89;&#x5168;&#x6027;&#xFF08;&#x5982;&#xFF1A;&#x53CC;&#x91CD;&#x652F;&#x4ED8;&#x3001;&#x9632;&#x6B62;&#x7F51;&#x7EDC;&#x653B;&#x51FB;&#xFF09;&#x3001;&#x52A0;&#x5BC6;&#x7B97;&#x6CD5;&#x7B49;&#x3002;&#x5176;&#x76EE;&#x6807;&#x662F;&#x63D0;&#x4F9B;&#x4E00;&#x4E2A;&#x53EF;&#x9760;&#x3001;&#x5B89;&#x5168;&#x4E14;&#x9AD8;&#x6548;&#x7684;&#x57FA;&#x7840;&#xFF0C;&#x4EE5;&#x652F;&#x6301;&#x66F4;&#x9AD8;&#x5C42;&#x6B21;&#x7684;&#x533A;&#x5757;&#x94FE;&#x534F;&#x8BAE;&#x3002;</p><p><strong>Layer1&#xFF08;&#x4E00;&#x5C42;&#xFF09;&#xFF1A;</strong> Layer1&#x662F;&#x6784;&#x5EFA;&#x5728;Layer0&#x4E4B;&#x4E0A;&#x7684;&#x7B2C;&#x4E00;&#x5C42;&#x534F;&#x8BAE;&#x6216;&#x533A;&#x5757;&#x94FE;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x3002;Layer1&#x901A;&#x5E38;&#x662F;&#x6307;&#x539F;&#x751F;&#x4E8E;&#x5E95;&#x5C42;&#x533A;&#x5757;&#x94FE;&#x7F51;&#x7EDC;&#x4E0A;&#x7684;&#x534F;&#x8BAE;&#x548C;&#x667A;&#x80FD;&#x5408;&#x7EA6;&#xFF0C;&#x4F8B;&#x5982;&#x4EE5;&#x592A;&#x574A;&#x4E0A;&#x7684;&#x667A;&#x80FD;&#x5408;&#x7EA6;&#x548C;ERC-20&#x4EE3;&#x5E01;&#x6807;&#x51C6;&#x3002;Layer1&#x63D0;&#x4F9B;&#x4E86;&#x57FA;&#x672C;&#x7684;&#x533A;&#x5757;&#x94FE;&#x529F;&#x80FD;&#xFF0C;&#x5305;&#x62EC;&#x8D26;&#x6237;&#x548C;&#x8D44;&#x4EA7;&#x7BA1;&#x7406;&#x3001;&#x667A;&#x80FD;&#x5408;&#x7EA6;&#x6267;&#x884C;&#x7B49;&#x3002;</p><p><strong>Layer2&#xFF08;&#x4E8C;&#x5C42;&#xFF09;&#xFF1A;</strong> Layer2&#x662F;&#x5EFA;&#x7ACB;&#x5728;Layer1&#x4E4B;&#x4E0A;&#x7684;&#x7B2C;&#x4E8C;&#x5C42;&#x89E3;&#x51B3;&#x65B9;&#x6848;&#xFF0C;<strong>&#x65E8;&#x5728;&#x589E;&#x5F3A;&#x533A;&#x5757;&#x94FE;&#x7684;&#x6269;&#x5C55;&#x6027;&#x3001;&#x4E92;&#x64CD;&#x4F5C;&#x6027;&#x548C;&#x529F;&#x80FD;&#x6027;</strong>&#x3002;Layer2&#x89E3;&#x51B3;&#x65B9;&#x6848;&#x53EF;&#x4EE5;&#x662F;&#x4EFB;&#x4F55;&#x5728;Layer1&#x4E4B;&#x4E0A;&#x6784;&#x5EFA;&#x7684;&#x6280;&#x672F;&#xFF0C;&#x5305;&#x62EC;&#x95EA;&#x7535;&#x7F51;&#x7EDC;&#x3001;&#x72B6;&#x6001;&#x901A;&#x9053;&#x3001;&#x4FA7;&#x94FE;&#x3001;Plasma&#x7B49;&#x3002;&#x8FD9;&#x4E9B;&#x89E3;&#x51B3;&#x65B9;&#x6848;&#x901A;&#x8FC7;&#x5728;Layer1&#x4E4B;&#x5916;&#x8FDB;&#x884C;&#x4EA4;&#x6613;&#x548C;&#x72B6;&#x6001;&#x7BA1;&#x7406;&#xFF0C;&#x63D0;&#x9AD8;&#x4E86;&#x4EA4;&#x6613;&#x541E;&#x5410;&#x91CF;&#x548C;&#x6027;&#x80FD;&#xFF0C;&#x5E76;&#x964D;&#x4F4E;&#x4E86;&#x4EA4;&#x6613;&#x6210;&#x672C;&#x3002;</p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/05/-------.png" class="kg-image" alt loading="lazy" width="909" height="401"></figure><h2 id="%E4%B8%89%E3%80%81%E5%BA%94%E7%94%A8%E7%9A%84%E5%8F%91%E5%B1%95%E8%BF%87%E7%A8%8B">&#x4E09;&#x3001;&#x5E94;&#x7528;&#x7684;&#x53D1;&#x5C55;&#x8FC7;&#x7A0B;</h2><ol><li><strong>&#x6982;&#x5FF5;&#x9A8C;&#x8BC1;&#x9636;&#x6BB5;&#xFF08;2009-2013&#x5E74;&#xFF09;&#xFF1A;</strong> &#x533A;&#x5757;&#x94FE;&#x6280;&#x672F;&#x6700;&#x521D;&#x51FA;&#x73B0;&#x5728;&#x6BD4;&#x7279;&#x5E01;&#x767D;&#x76AE;&#x4E66;&#x4E2D;&#xFF0C;&#x65E8;&#x5728;&#x4F5C;&#x4E3A;&#x4E00;&#x79CD;&#x53BB;&#x4E2D;&#x5FC3;&#x5316;&#x7684;&#x6570;&#x5B57;&#x8D27;&#x5E01;&#x7CFB;&#x7EDF;&#x3002;&#x5728;&#x8FD9;&#x4E2A;&#x9636;&#x6BB5;&#xFF0C;&#x4EBA;&#x4EEC;&#x4E3B;&#x8981;&#x5C06;&#x6CE8;&#x610F;&#x529B;&#x96C6;&#x4E2D;&#x5728;&#x6BD4;&#x7279;&#x5E01;&#x8FD9;&#x4E00;&#x52A0;&#x5BC6;&#x8D27;&#x5E01;&#x7684;&#x53D1;&#x5C55;&#xFF0C;&#x4EE5;&#x9A8C;&#x8BC1;&#x533A;&#x5757;&#x94FE;&#x6280;&#x672F;&#x7684;&#x53EF;&#x884C;&#x6027;&#x3002;</li><li><strong>&#x53BB;&#x4E2D;&#x5FC3;&#x5316;&#x91D1;&#x878D;&#xFF08;DeFi&#xFF09;&#x548C;&#x667A;&#x80FD;&#x5408;&#x7EA6;&#x7684;&#x5174;&#x8D77;&#xFF08;2013-2017&#x5E74;&#xFF09;&#xFF1A;</strong> &#x968F;&#x7740;&#x5BF9;&#x533A;&#x5757;&#x94FE;&#x6280;&#x672F;&#x7684;&#x8BA4;&#x77E5;&#x4E0D;&#x65AD;&#x52A0;&#x6DF1;&#xFF0C;&#x4EBA;&#x4EEC;&#x5F00;&#x59CB;&#x610F;&#x8BC6;&#x5230;&#x533A;&#x5757;&#x94FE;&#x4E0D;&#x4EC5;&#x53EF;&#x4EE5;&#x7528;&#x4F5C;&#x6570;&#x5B57;&#x8D27;&#x5E01;&#xFF0C;&#x8FD8;&#x53EF;&#x4EE5;&#x6784;&#x5EFA;&#x667A;&#x80FD;&#x5408;&#x7EA6;&#x548C;&#x53BB;&#x4E2D;&#x5FC3;&#x5316;&#x5E94;&#x7528;&#x3002;&#x4EE5;&#x592A;&#x574A;&#x7684;&#x63A8;&#x51FA;&#x4F7F;&#x5F97;&#x667A;&#x80FD;&#x5408;&#x7EA6;&#x5F97;&#x4EE5;&#x5B9E;&#x73B0;&#xFF0C;&#x5E76;&#x4FC3;&#x8FDB;&#x4E86;&#x53BB;&#x4E2D;&#x5FC3;&#x5316;&#x91D1;&#x878D;&#xFF08;DeFi&#xFF09;&#x7684;&#x5174;&#x8D77;&#xFF0C;&#x5305;&#x62EC;&#x53BB;&#x4E2D;&#x5FC3;&#x5316;&#x4EA4;&#x6613;&#x6240;&#xFF08;DEX&#xFF09;&#x3001;&#x501F;&#x8D37;&#x5E73;&#x53F0;&#x3001;&#x7A33;&#x5B9A;&#x5E01;&#x7B49;&#xFF0C;&#x533A;&#x5757;&#x94FE; L1 &#x5F00;&#x59CB;&#x84EC;&#x52C3;&#x53D1;&#x5C55;&#x3002;</li><li><strong>&#x4F01;&#x4E1A;&#x533A;&#x5757;&#x94FE;&#x5E94;&#x7528;&#x7684;&#x63A2;&#x7D22;&#xFF08;2015&#x5E74;&#x81F3;&#x4ECA;&#xFF09;&#xFF1A;</strong> &#x968F;&#x7740;&#x533A;&#x5757;&#x94FE;&#x6280;&#x672F;&#x7684;&#x4E0D;&#x65AD;&#x6210;&#x719F;&#x548C;&#x53D1;&#x5C55;&#xFF0C;&#x8D8A;&#x6765;&#x8D8A;&#x591A;&#x7684;&#x4F01;&#x4E1A;&#x5F00;&#x59CB;&#x63A2;&#x7D22;&#x5982;&#x4F55;&#x5C06;&#x533A;&#x5757;&#x94FE;&#x5E94;&#x7528;&#x4E8E;&#x4ED6;&#x4EEC;&#x7684;&#x4E1A;&#x52A1;&#x4E2D;&#x3002;&#x5728;&#x8FD9;&#x4E2A;&#x9636;&#x6BB5;&#xFF0C;&#x5927;&#x578B;&#x4F01;&#x4E1A;&#x548C;&#x673A;&#x6784;&#x5F00;&#x59CB;&#x5C1D;&#x8BD5;&#x533A;&#x5757;&#x94FE;&#x6280;&#x672F;&#xFF0C;&#x5C24;&#x5176;&#x662F;&#x5728;&#x4F9B;&#x5E94;&#x94FE;&#x7BA1;&#x7406;&#x3001;&#x8DE8;&#x5883;&#x652F;&#x4ED8;&#x3001;&#x6570;&#x5B57;&#x8EAB;&#x4EFD;&#x9A8C;&#x8BC1;&#x7B49;&#x9886;&#x57DF;&#x3002;</li><li><strong>Layer2 &#x89E3;&#x51B3;&#x65B9;&#x6848;&#x7684;&#x53D1;&#x5C55;&#xFF08;2018&#x5E74;&#x81F3;&#x4ECA;&#xFF09;&#xFF1A;</strong> &#x968F;&#x7740;&#x5BF9;&#x533A;&#x5757;&#x94FE;&#x53EF;&#x6269;&#x5C55;&#x6027;&#x548C;&#x6027;&#x80FD;&#x7684;&#x9700;&#x6C42;&#xFF08;&#x9AD8;&#x624B;&#x7EED;&#x8D39;&#x3001;&#x4EA4;&#x6613;&#x901F;&#x5EA6;&#x6162;&#xFF09;&#x4E0D;&#x65AD;&#x589E;&#x957F;&#xFF0C;Layer2 &#x89E3;&#x51B3;&#x65B9;&#x6848;&#x5F00;&#x59CB;&#x6210;&#x4E3A;&#x5173;&#x6CE8;&#x7126;&#x70B9;&#x3002;&#x8FD9;&#x4E9B;&#x89E3;&#x51B3;&#x65B9;&#x6848;&#x5305;&#x62EC;&#x95EA;&#x7535;&#x7F51;&#x7EDC;&#x3001;Raiden Network&#x3001;Plasma &#x7B49;&#xFF0C;&#x65E8;&#x5728;&#x901A;&#x8FC7;&#x5728;&#x94FE;&#x4E0B;&#x8FDB;&#x884C;&#x4EA4;&#x6613;&#x548C;&#x72B6;&#x6001;&#x7BA1;&#x7406;&#x6765;&#x63D0;&#x9AD8;&#x4EA4;&#x6613;&#x541E;&#x5410;&#x91CF;&#x548C;&#x6027;&#x80FD;&#xFF0C;&#x5E76;&#x964D;&#x4F4E;&#x4EA4;&#x6613;&#x6210;&#x672C;&#x3002;</li><li><strong>NFT &#x548C;&#x5143;&#x5B87;&#x5B99;&#x7684;&#x5D1B;&#x8D77;&#xFF08;2020&#x5E74;&#x81F3;&#x4ECA;&#xFF09;&#xFF1A;</strong> &#x8FD1;&#x5E74;&#x6765;&#xFF0C;&#x975E;&#x540C;&#x8D28;&#x5316;&#x4EE3;&#x5E01;&#xFF08;NFT&#xFF09;&#x548C;&#x5143;&#x5B87;&#x5B99;&#x6210;&#x4E3A;&#x4E86;&#x533A;&#x5757;&#x94FE;&#x5E94;&#x7528;&#x7684;&#x65B0;&#x70ED;&#x70B9;&#x3002;NFT &#x6280;&#x672F;&#x4F7F;&#x5F97;&#x6570;&#x5B57;&#x8D44;&#x4EA7;&#x7684;&#x552F;&#x4E00;&#x6027;&#x548C;&#x6240;&#x6709;&#x6743;&#x53EF;&#x4EE5;&#x5F97;&#x5230;&#x786E;&#x6743;&#xFF0C;&#x4ECE;&#x800C;&#x63A8;&#x52A8;&#x4E86;&#x6570;&#x5B57;&#x827A;&#x672F;&#x3001;&#x6E38;&#x620F;&#x3001;&#x865A;&#x62DF;&#x5730;&#x4EA7;&#x7B49;&#x9886;&#x57DF;&#x7684;&#x53D1;&#x5C55;&#x3002;&#x540C;&#x65F6;&#xFF0C;&#x5143;&#x5B87;&#x5B99;&#x7684;&#x6982;&#x5FF5;&#x4E5F;&#x5438;&#x5F15;&#x4E86;&#x8D8A;&#x6765;&#x8D8A;&#x591A;&#x7684;&#x5173;&#x6CE8;&#xFF0C;&#x4EBA;&#x4EEC;&#x5F00;&#x59CB;&#x63A2;&#x7D22;&#x5229;&#x7528;&#x533A;&#x5757;&#x94FE;&#x6280;&#x672F;&#x6784;&#x5EFA;&#x865A;&#x62DF;&#x4E16;&#x754C;&#xFF0C;&#x5E76;&#x5728;&#x5176;&#x4E2D;&#x8FDB;&#x884C;&#x5404;&#x79CD;&#x4EA4;&#x4E92;&#x548C;&#x4EA4;&#x6613;&#x3002;</li></ol><h2 id="%E5%9B%9B%E3%80%81%E6%80%BB%E7%BB%93">&#x56DB;&#x3001;&#x603B;&#x7ED3;</h2><p>&#x4EBA;&#x4EEC;&#x5BF9;&#x4E8E;&#x533A;&#x5757;&#x94FE;&#x7684;&#x8BA4;&#x77E5;&#x662F;&#x5448;&#x87BA;&#x65CB;&#x5F0F;&#x4E0D;&#x65AD;&#x4E0A;&#x5347;&#x7684;&#xFF0C;&#x73B0;&#x5728;&#x533A;&#x5757;&#x94FE;&#x7684;&#x5E94;&#x7528;&#x5F88;&#x591A;&#xFF0C;&#x4F46;&#x662F;&#x70C2;&#x9879;&#x76EE;&#x3001;&#x9A97;&#x5C40;&#x4E5F;&#x5F88;&#x591A;&#xFF0C;&#x64E6;&#x4EAE;&#x81EA;&#x5DF1;&#x7684;&#x773C;&#x775B;&#xFF0C;&#x4FDD;&#x6301;&#x6E05;&#x9192;&#x7684;&#x5934;&#x8111;&#x3002;</p>]]></content:encoded></item><item><title><![CDATA[笔记]]></title><description><![CDATA[<p><strong><strong>&#x590D;&#x4E60;&#x4E86;nodejs&#x7684;&#x4E0A;&#x8282;&#x8BFE;&#x7684;&#x77E5;&#x8BC6;&#x70B9;</strong></strong></p><p>l 1&#x3001;&#x67E5;&#x770B;&#x5F53;&#x524D;&#x9879;&#x76EE;&#x7684;&#x4F9D;&#x8D56;&#x6A21;&#x5757;&#xFF1A;</p><p>&#x5728;&#x547D;&#x4EE4;&#x884C;&#x8F93;&#x5165;npm ls(npm list)&#xFF0C;&#x53EF;&#x4EE5;&#x67E5;&#x770B;&#x5F53;&#x524D;&#x6587;&#x4EF6;&#x5939;&#x4E0B;&#x5B89;&#x88C5;</p>]]></description><link>https://www.thinkingsolidity.com/eqweqeqeqwew/</link><guid isPermaLink="false">65f2da5d903d7005b68707bf</guid><dc:creator><![CDATA[JRBC 投研/运营部]]></dc:creator><pubDate>Mon, 25 Mar 2024 00:47:53 GMT</pubDate><content:encoded><![CDATA[<p><strong><strong>&#x590D;&#x4E60;&#x4E86;nodejs&#x7684;&#x4E0A;&#x8282;&#x8BFE;&#x7684;&#x77E5;&#x8BC6;&#x70B9;</strong></strong></p><p>l 1&#x3001;&#x67E5;&#x770B;&#x5F53;&#x524D;&#x9879;&#x76EE;&#x7684;&#x4F9D;&#x8D56;&#x6A21;&#x5757;&#xFF1A;</p><p>&#x5728;&#x547D;&#x4EE4;&#x884C;&#x8F93;&#x5165;npm ls(npm list)&#xFF0C;&#x53EF;&#x4EE5;&#x67E5;&#x770B;&#x5F53;&#x524D;&#x6587;&#x4EF6;&#x5939;&#x4E0B;&#x5B89;&#x88C5;&#x7684;&#x6A21;&#x5757;</p><p>npm install express &#xA0; &#xA0; &#xA0; &#xA0; &#xA0;# &#x5C40;&#x90E8;&#x5B89;&#x88C5;</p><p>npm install express -g &#xA0; # &#x5168;&#x5C40;&#x5B89;&#x88C5;</p><h3 id="l-%E6%9C%AC%E5%9C%B0%E5%AE%89%E8%A3%85%E3%80%82">l &#x672C;&#x5730;&#x5B89;&#x88C5;&#x3002;</h3><p>&#x5C06;&#x5B89;&#x88C5;&#x5305;&#x653E;&#x5728; ./node_modules &#x4E0B;&#xFF08;&#x8FD0;&#x884C; npm &#x547D;&#x4EE4;&#x65F6;&#x6240;&#x5728;&#x7684;&#x76EE;&#x5F55;&#xFF09;&#xFF0C;&#x5982;&#x679C;&#x6CA1;&#x6709; node_modules &#x76EE;&#x5F55;&#xFF0C;&#x4F1A;&#x5728;&#x5F53;&#x524D;&#x6267;&#x884C; npm &#x547D;&#x4EE4;&#x7684;&#x76EE;&#x5F55;&#x4E0B;&#x751F;&#x6210; node_modules &#x76EE;&#x5F55;&#x3002;</p><p>&#x53EF;&#x4EE5;&#x901A;&#x8FC7; require() &#x6765;&#x5F15;&#x5165;&#x672C;&#x5730;&#x5B89;&#x88C5;&#x7684;&#x5305;&#x3002;</p><p>l &#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x4EE5;&#x4E0B;&#x547D;&#x4EE4;&#x6765;&#x5378;&#x8F7D; Node.js &#x6A21;&#x5757;&#x3002;</p><p>npm uninstall express</p><p>l &#x5378;&#x8F7D;&#x540E;&#xFF0C;&#x4F60;&#x53EF;&#x4EE5;&#x5230; /node_modules/ &#x76EE;&#x5F55;&#x4E0B;&#x67E5;&#x770B;&#x5305;&#x662F;&#x5426;&#x8FD8;&#x5B58;&#x5728;&#xFF0C;&#x6216;&#x8005;&#x4F7F;&#x7528;&#x4EE5;&#x4E0B;&#x547D;&#x4EE4;&#x67E5;&#x770B;&#xFF1A;</p><p>npm ls</p><p>npm uninstall express -g &#x5378;&#x8F7D;&#x5168;&#x5C40;</p><p>5&#x3001;</p><p>l &#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x4EE5;&#x4E0B;&#x547D;&#x4EE4;&#x66F4;&#x65B0;&#x6A21;&#x5757;&#xFF1A;</p><p>npm update express</p><p>npm &#xA0;i <a href="mailto:moment@2.22.2">moment@2.22.2</a></p><p><strong><strong>&#x7B2C;&#x4E8C;</strong></strong></p><p>&#x521D;&#x6B65;&#x7684;&#x4ECB;&#x7ECD;&#x4E86;&#x5F02;&#x6B65;&#x7F16;&#x7A0B;&#x548C;&#x540C;&#x6B65;&#x7F16;&#x7A0B;&#x4EE5;&#x53CA;await&#x5173;&#x952E;&#x5B57;&#x7684;&#x4F5C;&#x7528;&#xFF0C;&#x522B;&#x53BB;&#x4E3E;&#x4E86;&#x4E00;&#x4E2A;&#x5B9E;&#x4F8B;&#x6765;&#x6F14;&#x793A;&#x3002;</p><p>async&#x662F;&#x7528;&#x6765;&#x5B9A;&#x4E49;&#x5F02;&#x6B65;&#x51FD;&#x6570;&#x7684;&#x5173;&#x952E;&#x5B57;&#xFF0C;&#x5E76;&#x4E14;await&#x5173;&#x952E;&#x5B57;&#x667A;&#x80FD;&#x5728;&#x5F02;&#x6B65;&#x51FD;&#x6570;&#x5185;&#x90E8;&#x4F7F;&#x7528;&#xFF0C;&#x8981;&#x6267;&#x884C;&#x7684;&#x4EE3;&#x7801;&#x52A0;&#x4E86;await&#x5173;&#x952E;&#x5B57;&#x540E;&#xFF0C;&#x8981;&#x7B49;&#x8BE5;&#x4EE3;&#x7801;&#x6267;&#x884C;&#x5B8C;&#x4E4B;&#x540E;&#x624D;&#x53EF;&#x4EE5;&#x6267;&#x884C;&#x4E0B;&#x4E00;&#x6B65;&#x3002;</p><p>&#x63A5;&#x7740;&#x7ED9;&#x4E86;&#x4E00;&#x4E2A;nodejs&#x7684;&#x5B9E;&#x4F8B;(&#x4E3B;&#x8981;&#x5C06;http&#x8BF7;&#x6C42;&#x62A5;&#x6587;&#x548C;&#x54CD;&#x5E94;&#x62A5;&#x6587;&#x548C;&#x4F55;&#x5982;&#x5728;&#x6D4F;&#x89C8;&#x5668;&#x4E2D;&#x53BB;&#x770B;&#x62A5;&#x6587;)</p><p>&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x6587;&#x4EF6;&#x5939;&#xFF0C;&#x5728;&#x91CC;&#x9762;&#x5728;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x9879;&#x76EE;&#xFF0C;&#x8FDB;&#x5165;&#x9879;&#x76EE;&#x76EE;&#x5F55;&#xFF0C;&#x5728;&#x663E;&#x793A;&#x76EE;&#x5F55;&#x4F4D;&#x7F6E;&#x90A3;&#x5C06;&#x8FD9;&#x4E2A;&#x6846;&#x5185;&#x4E1C;&#x897F;&#x5168;&#x90E8;&#x5220;&#x9664;&#xFF0C;&#x7136;&#x540E;&#x8F93;&#x5165;cmd&#x8FDB;&#x5165;&#x5230;&#x547D;&#x4EE4;&#x63A7;&#x5236;&#x53F0;&#xFF0C;&#x7136;&#x540E;&#x8F93;&#x5165;npm i http &#x4E0B;&#x8F7D;&#x5E76;&#x5B89;&#x88C5;&#x540D;&#x4E3A;http&#x7684;&#x8F6F;&#x4EF6;&#x5305;&#x3002;&#x8FD9;&#x5C06;&#x4F7F;&#x4F60;&#x80FD;&#x591F;&#x5728;&#x4F60;&#x7684;Node.js&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x4E2D;&#x4F7F;&#x7528;http&#x6A21;&#x5757;&#xFF0C;&#x4EE5;&#x4FBF;&#x5904;&#x7406;HTTP&#x8BF7;&#x6C42;&#x548C;&#x54CD;&#x5E94;&#x3002;</p><p>&#x63A5;&#x7740;&#x5C06;&#x8001;&#x5E08;&#x7ED9;&#x7684;&#x5B9E;&#x4F8B;&#x653E;&#x5165;&#x9879;&#x76EE;&#x6587;&#x4EF6;&#x5939;&#x4E2D;&#xFF0C;&#x5E76;&#x5728;vscode&#x4E2D;&#x6253;&#x5F00;&#x8FD9;&#x4E2A;&#x9879;&#x76EE;&#xFF0C;&#x8FD9;&#x4E2A;&#x9879;&#x76EE;&#x4E2D;js&#x6587;&#x4EF6;&#x5F15;&#x5165; required &#x6A21;&#x5757;&#xFF1A;&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x4F7F;&#x7528; require&#x5165; Node.js&#x6A21;&#x5757;&#xFF0C;&#x5F00;&#x59CB;&#x8BB2;&#x89E3;&#x4E86;&#x5982;&#x4F55;&#x770B;&#x8BF7;&#x6C42;&#x62A5;&#x6587;&#x548C;&#x54CD;&#x5E94;&#x62A5;&#x6587;&#xFF0C;<strong><strong>&#x8BF7;&#x6C42;&#x62A5;&#x6587;:1&#x3001;</strong></strong>&#x8BF7;&#x6C42;&#x884C;&#x91CC;&#x6709;&#x8BF7;&#x6C42;&#x7684;&#x65B9;&#x6CD5;&#x4EE5;&#x53CA;&#x8DEF;&#x7531;&#x4EE5;&#x53CA;http&#x534F;&#x8BAE;&#x548C;&#x5730;&#x5740;&#xFF0C;2&#x3001;&#x8BF7;&#x6C42;&#x5934;&#x90E8;&#x53EF;&#x4EE5;&#x770B;&#x5B83;&#x5305;&#x542B;&#x5173;&#x4E8E;&#x8BF7;&#x6C42;&#x7684;&#x9644;&#x52A0;&#x4FE1;&#x606F;,&#x6587;&#x672C;&#x6570;&#x636E;&#x4F7F;&#x7528;&#x54EA;&#x79CD;&#x7F16;&#x7801;&#x683C;&#x5F0F;&#x8FDB;&#x884C;&#x7F16;&#x7801;&#x548C;&#x89E3;&#x7801;&#xFF0C;3&#x3001;&#x8BF7;&#x6C42;&#x4F53;&#x53EF;&#x4EE5;&#x770B;&#x5B83;&#x7684;&#x8BF7;&#x6C42;&#x6570;&#x636E;&#x3002;<strong><strong>&#x54CD;&#x5E94;&#x62A5;&#x6587;&#xFF1A;</strong></strong>1&#x3001;&#x72B6;&#x6001;&#x884C;&#x53EF;&#x4EE5;&#x770B;http&#x534F;&#x8BAE;&#xFF0C;&#x72B6;&#x6001;&#x4FE1;&#x606F;&#xFF0C;2&#x3001;&#x54CD;&#x5E94;&#x5934;&#x90E8;&#x53EF;&#x4EE5;&#x770B;&#x7528;&#x4EC0;&#x4E48;&#x7F16;&#x7801;&#x683C;&#x5F0F;&#x7B49;&#xFF0C;3&#x3001;&#x54CD;&#x5E94;&#x4F53;&#x770B;html&#x5185;&#x5BB9;&#x548C;&#x6570;&#x636E;</p><p>&#x8BB2;&#x89E3;&#x4E86;&#x521B;&#x5EFA;&#x670D;&#x52A1;&#x5668;&#x7684;&#x4EE3;&#x7801;&#x4E00;&#x4E9B;&#x53C2;&#x6570;(request,response)&#x4EE5;&#x53CA;&#x4E3A;&#x4EC0;&#x4E48;&#x4F20;&#x8FD9;&#x4FE9;&#x4E2A;&#x53C2;&#x6570;,&#x8FD9;&#x4FE9;&#x4E2A;&#x53C2;&#x6570;&#xFF08;&#x4E5F;&#x53EF;&#x4EE5;&#x53BB;&#x5176;&#x4ED6;&#x540D;&#x5B57;&#xFF09;&#x7684;&#x4E3B;&#x8981;&#x662F;&#x5E2E;&#x6211;&#x4EEC;&#x53BB;&#x5206;&#x5272;&#x62A5;&#x6587;&#xFF0C;&#x5982;&#x679C;&#x6CA1;&#x6709;&#x8FD9;&#x4FE9;&#x4E2A;&#x53C2;&#x6570;&#x6211;&#x4EEC;&#x9700;&#x8981;&#x4EBA;&#x5DE5;&#x53BB;&#x5206;&#x5272;&#x62A5;&#x6587;&#xFF0C;&#x63A5;&#x7740;&#x8BB2;&#x89E3;&#x4E86;url&#x548C;method&#xFF0C;&#x4EE5;&#x53CA;&#x7EC6;&#x8BB2;&#x4E86;&#x6211;&#x4EEC;&#x5728;go&#x8BED;&#x8A00;&#x4E2D;&#x7528;&#x7684;&#x8DEF;&#x7531;&#x5982;&#x4F55;&#x8DF3;&#x8F6C;&#x7684;&#x5E95;&#x5C42;&#x4E00;&#x70B9;&#x7684;&#x4EE3;&#x7801;&#xFF0C;&#x7528;&#x4E86;if else&#x53BB;&#x5224;&#x65AD;&#x5E94;&#x8BE5;&#x8D70;&#x90A3;&#x4E2A;&#x8DEF;&#x5F84;&#x548C;&#x505A;&#x7684;&#x64CD;&#x4F5C;&#xFF0C;&#x5728;&#x7EC8;&#x7AEF;&#x7528;nodejs&#x7684;&#x547D;&#x4EE4;&#x5F00;&#x542F;&#x670D;&#x52A1;&#x5668;&#xFF0C;&#x7136;&#x540E;&#x770B;&#x6548;&#x679C;&#x662F;&#x5426;&#x4E0E;&#x8001;&#x5E08;&#x4E00;&#x6837;&#x3002;</p><p>DAPP&#x5C06;&#x4E86;&#x4F5C;&#x4E1A;&#x5C31;&#x662F;&#x8F66;&#x9669;&#x5408;&#x7EA6;&#x7684;&#x6D4B;&#x8BD5;&#x3002;</p>]]></content:encoded></item><item><title><![CDATA[【AI赛道】Clore.AI]]></title><description><![CDATA[<blockquote>Clore.ai &#x662F;&#x4E00;&#x4E2A;&#x521B;&#x65B0;&#x5E73;&#x53F0;&#xFF0C;&#x8FDE;&#x63A5;&#x4E86;&#x5E0C;&#x671B;&#x5229;&#x7528;&#x9AD8;&#x6027;&#x80FD;GPU&#x8FDB;&#x884C;&#x5404;&#x79CD;&#x4EFB;&#x52A1;&#x7684;&#x4E2A;&#x4EBA;&#x548C;&#x4F01;&#x4E1A;&#xFF0C;&#x4F8B;&#x5982;&#x4EBA;&#x5DE5;&#x667A;&#x80FD;&#x8BAD;&#x7EC3;&#x3001;&#x89C6;&#x9891;&#x6E32;&#x67D3;&#x548C;&#x52A0;&#x5BC6;</blockquote>]]></description><link>https://www.thinkingsolidity.com/aisai-dao-clore-ai/</link><guid isPermaLink="false">65efe7f8903d7005b68705dd</guid><category><![CDATA[Token]]></category><dc:creator><![CDATA[Echo_留蝉]]></dc:creator><pubDate>Tue, 12 Mar 2024 06:57:34 GMT</pubDate><media:content url="https://www.thinkingsolidity.com/content/images/2024/03/20240312-152723.jpg" medium="image"/><content:encoded><![CDATA[<blockquote>Clore.ai &#x662F;&#x4E00;&#x4E2A;&#x521B;&#x65B0;&#x5E73;&#x53F0;&#xFF0C;&#x8FDE;&#x63A5;&#x4E86;&#x5E0C;&#x671B;&#x5229;&#x7528;&#x9AD8;&#x6027;&#x80FD;GPU&#x8FDB;&#x884C;&#x5404;&#x79CD;&#x4EFB;&#x52A1;&#x7684;&#x4E2A;&#x4EBA;&#x548C;&#x4F01;&#x4E1A;&#xFF0C;&#x4F8B;&#x5982;&#x4EBA;&#x5DE5;&#x667A;&#x80FD;&#x8BAD;&#x7EC3;&#x3001;&#x89C6;&#x9891;&#x6E32;&#x67D3;&#x548C;&#x52A0;&#x5BC6;&#x8D27;&#x5E01;&#x6316;&#x77FF;&#x3002;&#x901A;&#x8FC7;&#x63D0;&#x4F9B;&#x7528;&#x6237;&#x53CB;&#x597D;&#x7684;&#x5E02;&#x573A;&#xFF0C;Clore.ai &#x8BA9;&#x7528;&#x6237;&#x4EE5;<strong>&#x5177;&#x6709;&#x7ADE;&#x4E89;&#x529B;&#x7684;&#x4EF7;&#x683C;</strong>&#x548C;<strong>&#x7075;&#x6D3B;&#x7684;&#x65B9;&#x5F0F;</strong>&#x8BBF;&#x95EE;&#x5F3A;&#x5927;&#x7684;&#x8BA1;&#x7B97;&#x8D44;&#x6E90; &#x3002;</blockquote><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/03/image-10.png" class="kg-image" alt="&#x3010;AI&#x8D5B;&#x9053;&#x3011;Clore.AI" loading="lazy" width="1872" height="924"></figure><h3 id="%E4%B8%80%E3%80%81%E9%A1%B9%E7%9B%AE%E7%89%B9%E7%82%B9%EF%BC%9A">&#x4E00;&#x3001;&#x9879;&#x76EE;&#x7279;&#x70B9;&#xFF1A;</h3><ol><li><strong>&#x5FEB;&#x901F;&#x7684;&#x79DF;&#x8D41;&#x542F;&#x52A8;&#x6D41;&#x7A0B;</strong>&#x548C;<strong>&#x5206;&#x949F;&#x8BA1;&#x8D39;&#x7CFB;&#x7EDF;</strong>&#x786E;&#x4FDD;&#x79DF;&#x6237;&#x548C;&#x623F;&#x4E1C;&#x90FD;&#x80FD;&#x6709;&#x6548;&#x5730;&#x5229;&#x7528;&#x81EA;&#x5DF1;&#x7684;&#x8D44;&#x6E90;&#x3002;</li><li><strong>&#x623F;&#x4E1C;&#x53EF;&#x4EE5;&#x5229;&#x7528;&#x540E;&#x53F0;&#x6316;&#x77FF;</strong>&#xFF0C;&#x5373;&#x4F7F;&#x5728;&#x7B49;&#x5F85;&#x79DF;&#x6237;&#x65F6;&#xFF0C;&#x4ED6;&#x4EEC;&#x7684;&#x8BBE;&#x5907;&#x4E5F;&#x80FD;&#x8D5A;&#x53D6;&#x6536;&#x5165;&#x3002;</li><li>Clore.ai&#x610F;&#x8BC6;&#x5230;&#x73AF;&#x5883;&#x53EF;&#x6301;&#x7EED;&#x6027;&#x7684;&#x91CD;&#x8981;&#x6027;&#xFF0C;&#x81F4;&#x529B;&#x4E8E;&#x901A;&#x8FC7;&#x9F13;&#x52B1;&#x623F;&#x4E1C;&#x4F7F;&#x7528;&#x53EF;&#x518D;&#x751F;&#x80FD;&#x6E90;&#x6765;&#x51CF;&#x5C11;&#x78B3;&#x8DB3;&#x8FF9;&#x3002;&#x6B64;&#x5916;&#xFF0C;&#x8BE5;&#x5E73;&#x53F0;&#x79EF;&#x6781;&#x7814;&#x7A76;&#x548C;&#x5B9E;&#x65BD;&#x8282;&#x80FD;&#x89E3;&#x51B3;&#x65B9;&#x6848;&#xFF0C;&#x4E3A;&#x79D1;&#x6280;&#x884C;&#x4E1A;&#x7684;&#x53EF;&#x6301;&#x7EED;&#x672A;&#x6765;&#x505A;&#x51FA;&#x8D21;&#x732E;&#x3002;</li><li>Clore.ai&#x53E6;&#x4E00;&#x4E2A;&#x503C;&#x5F97;&#x6CE8;&#x610F;&#x7684;&#x7279;&#x70B9;&#x662F;&#x5E73;&#x53F0;<strong>&#x5BF9;&#x5B89;&#x5168;&#x6027;&#x548C;&#x6570;&#x636E;&#x4FDD;&#x62A4;</strong>&#x7684;&#x627F;&#x8BFA;&#x3002;&#x901A;&#x8FC7;&#x5F3A;&#x5927;&#x7684;&#x52A0;&#x5BC6;&#x534F;&#x8BAE;&#x548C;&#x4E25;&#x683C;&#x7684;&#x6570;&#x636E;&#x9690;&#x79C1;&#x653F;&#x7B56;&#xFF0C;Clore.ai&#x786E;&#x4FDD;&#x7528;&#x6237;&#x7684;&#x654F;&#x611F;&#x4FE1;&#x606F;&#x4FDD;&#x6301;&#x5B89;&#x5168;&#xFF0C;&#x4FC3;&#x8FDB;&#x793E;&#x533A;&#x5185;&#x7684;&#x4FE1;&#x4EFB;&#x3002;</li><li>Clore.ai&#x62E5;&#x6709;&#x81EA;&#x5DF1;&#x7684;&#x672C;&#x5730;&#x6570;&#x5B57;&#x8D27;&#x5E01;Clore Coin&#x3002;Clore Coin&#x662F;&#x57FA;&#x4E8E;KaWPOW&#x7B97;&#x6CD5;&#x7684;&#x5DE5;&#x4F5C;&#x8BC1;&#x660E;&#x533A;&#x5757;&#x94FE;&#xFF0C;&#x7528;&#x4E8E;&#x5956;&#x52B1;&#x623F;&#x4E1C;&#x5E76;&#x9F13;&#x52B1;&#x5E73;&#x53F0;&#x53C2;&#x4E0E;&#x3002;</li></ol><h3 id="%E4%BA%8C%E3%80%81%E7%A4%BE%E4%BA%A4%E5%AA%92%E4%BD%93%EF%BC%9A">&#x4E8C;&#x3001;&#x793E;&#x4EA4;&#x5A92;&#x4F53;&#xFF1A;</h3><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th>&#x5A92;&#x4F53;</th>
<th>&#x7F51;&#x5740;</th>
<th>&#x4EBA;&#x6570;</th>
</tr>
</thead>
<tbody>
<tr>
<td>&#x5B98;&#x7F51;</td>
<td><a href="https://clore.ai">https://clore.ai</a></td>
<td>&#x672A;&#x77E5;</td>
</tr>
<tr>
<td>Twitter</td>
<td><a href="https://twitter.com/clore_ai">https://twitter.com/clore_ai</a></td>
<td>22.6K Followers</td>
</tr>
<tr>
<td>Telegram</td>
<td><a href="https://t.me/clorechat">https://t.me/clorechat</a></td>
<td>5134 Followers</td>
</tr>
<tr>
<td>Discord</td>
<td><a href="https://discord.com/invite/cloreai">https://discord.com/invite/cloreai</a></td>
<td>4694 Followers</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><h3 id="%E4%B8%89%E3%80%81%E4%BB%A3%E5%B8%81%E4%BB%B7%E6%A0%BC%E5%92%8C%E6%8C%81%E6%9C%89%E8%80%85%E4%BF%A1%E6%81%AF">&#x4E09;&#x3001;&#x4EE3;&#x5E01;&#x4EF7;&#x683C;&#x548C;&#x6301;&#x6709;&#x8005;&#x4FE1;&#x606F;<br></h3><img src="https://www.thinkingsolidity.com/content/images/2024/03/20240312-152723.jpg" alt="&#x3010;AI&#x8D5B;&#x9053;&#x3011;Clore.AI"><p>CLORE&#x7684;&#x5F53;&#x524D;&#x4EF7;&#x683C;&#x4E3A;$0.340119&#xFF0C;&#x5728;&#x8FC7;&#x53BB;7&#x5929;&#x5185;&#x4E0A;&#x6DA8;&#x4E86;70.54%&#x3002;&#x5176;&#x5E02;&#x503C;&#x6392;&#x540D;&#x4E0A;&#x5347;&#x4E86;125&#x4E2A;&#x4F4D;&#x7F6E;&#xFF0C;&#x76EE;&#x524D;&#x6392;&#x540D;&#x7B2C;511&#x4F4D;&#x3002;24&#x5C0F;&#x65F6;&#x4EA4;&#x6613;&#x91CF;&#x4E3A;6256352&#xFF0C;&#x76EE;&#x524D;&#x6301;&#x6709;&#x8005;&#x6570;&#x91CF;&#x4E0D;&#x53EF;&#x8BB0;&#x3002;</p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/03/----_20240312140014-1.png" class="kg-image" alt="&#x3010;AI&#x8D5B;&#x9053;&#x3011;Clore.AI" loading="lazy" width="922" height="322"></figure><h3 id="%E5%9B%9B%E3%80%81%E4%BB%A3%E5%B8%81%E6%B6%A8%E8%B7%8C%E6%8C%87%E6%A0%87">&#x56DB;&#x3001;&#x4EE3;&#x5E01;&#x6DA8;&#x8DCC;&#x6307;&#x6807;</h3><!--kg-card-begin: markdown--><ol>
<li><strong>&#x4EE3;&#x5E01;:</strong>  CLORE</li>
<li><strong>&#x4EF7;&#x683C;:</strong>  $0.349539</li>
<li><strong>&#x7C7B;&#x522B;:</strong>  AI</li>
<li><strong>&#x65E5;&#x671F;:</strong>  2024-03-12</li>
<li>&#x1F4C8; <strong>&#x770B;&#x6DA8;&#x6307;&#x6807;&#xFF1A;</strong>
<ul>
<li>CLORE&#x662F;&#x4EBA;&#x5DE5;&#x667A;&#x80FD;&#x9886;&#x57DF;&#x7684;&#x4E00;&#x90E8;&#x5206;&#xFF0C;&#x5728;&#x8FC7;&#x53BB;7&#x5929;&#x5167;AI&#x4EE3;&#x5E01;&#x5E73;&#x5747;&#x4E0A;&#x6DA8;&#x4E86;33.2%&#xFF0C;&#x800C;CLORE&#x672C;&#x8EAB;&#x4E0A;&#x6DA8;&#x4E86;78.66%&#x3002;&#x6295;&#x8D44;&#x8005;&#x5BF9;CLORE&#x7684;&#x4FE1;&#x5FC3;&#x9AD8;&#x4E0E;&#x5176;&#x4ED6; AI &#x4EE3;&#x5E63;&#x3002;</li>
<li>&#x76EE;&#x524D;&#x5E02;&#x573A;&#x4ECD;&#x5904;&#x4E8E;&#x4E0A;&#x5347;&#x8D8B;&#x52BF;&#xFF0C;CLORE&#x4EE3;&#x5E01;&#x7684;&#x5F53;&#x524D;&#x4EF7;&#x683C;&#x9AD8;&#x4E8E;&#x79FB;&#x52A8;&#x5E73;&#x5747;&#x7EBF; (MA)&#xFF0C;&#x4E14;MA&#x5448;&#x73B0;&#x4E0A;&#x5347;&#x8D8B;&#x52BF;&#xFF0C;&#x53EF;&#x80FD;&#x8868;&#x660E;&#x5E02;&#x573A;&#x6B63;&#x5728;&#x5411;&#x4E0A;&#x8D70;&#x3002;</li>
</ul>
</li>
<li>&#x1F9D0; <strong>&#x4E2D;&#x6027;&#x6307;&#x6807;</strong>&#xFF1A;
<ul>
<li>&#x76EE;&#x524D;CLORE&#x4EE3;&#x5E01;&#x4EF7;&#x683C;&#x4ECB;&#x4E8E;&#x4E2D;&#x95F4;&#x548C;&#x4E0A;&#x90E8;&#x5E26;&#x4E4B;&#x95F4;&#xFF0C;&#x663E;&#x793A;&#x8FD1;&#x671F;&#x8868;&#x73B0;&#x76F8;&#x5BF9;&#x5F3A;&#x52B2;&#x3002;&#x4E2D;&#x95F4;&#x5E26;&#x53EF;&#x80FD;&#x5145;&#x5F53;&#x652F;&#x6491;&#xFF0C;&#x800C;&#x4E0A;&#x90E8;&#x5E26;&#x53EF;&#x80FD;&#x662F;&#x77ED;&#x671F;&#x76EE;&#x6807;&#x3002;</li>
<li>&#x76EE;&#x524D;&#x7684;RSI&#x4E3A;65.88&#xFF0C;&#x8868;&#x660E;&#x5E02;&#x573A;&#x5904;&#x4E8E;&#x4E2D;&#x6027;&#x72B6;&#x6001;&#xFF0C;&#x6CA1;&#x6709;&#x660E;&#x786E;&#x7684;&#x8D85;&#x4E70;&#x6216;&#x8D85;&#x5356;&#x4FE1;&#x53F7;&#x3002;</li>
</ul>
</li>
<li>&#x1F4C9; <strong>&#x770B;&#x8DCC;&#x6307;&#x6807;&#xFF1A;</strong>
<ul>
<li>CEX&#x6C38;&#x7EED;&#x5408;&#x7EA6; (CEX perpetual): &#x76EE;&#x524D;&#x6700;&#x5927;&#x7684;CLORE&#x4EE3;&#x5E01;&#x6C38;&#x7EED;&#x4EA4;&#x6613;&#x6240;&#x662F;MEXC (Futures)&#x3002;</li>
<li>CLORE&#x76EE;&#x524D;&#x4E3B;&#x8981;&#x88AB;&#x505A;&#x7A7A;&#xFF0C;&#x5F53;&#x524D;&#x8D44;&#x91D1;&#x8D39;&#x7387;&#x4E3A;-1.0%&#x3002;&#x8FD9;&#x610F;&#x5473;&#x8457;&#x505A;&#x7A7A;&#x4EA4;&#x6613;&#x8005;&#x9884;&#x671F;CLORE&#x4EF7;&#x683C;&#x4E0B;&#x8DCC;&#xFF0C;&#x5E76;&#x613F;&#x610F;&#x652F;&#x4ED8;1.0%&#x7684;&#x8D39;&#x7528; (&#x901A;&#x5E38;&#x6BCF;8&#x6216;4&#x5C0F;&#x65F6;&#x4E00;&#x6B21;) &#x7ED9;&#x591A;&#x5934;&#x4EA4;&#x6613;&#x8005;&#x3002;&#x8FC7;&#x53BB;24&#x5C0F;&#x65F6;&#x7684;&#x4EA4;&#x6613;&#x91CF;&#x4E3A;$356,371.51&#x3002;</li>
</ul>
</li>
<li>&#x1F3E6; <strong>&#x8D2D;&#x4E70;&#x65B9;&#x5F0F;:</strong>
<ul>
<li>CEX: &#x76EE;&#x524D;&#x5177;&#x6709;&#x6700;&#x9AD8;CLORE&#x4EA4;&#x6613;&#x91CF;&#x7684;&#x4E2D;&#x5FC3;&#x5316;&#x4EA4;&#x6613;&#x6240;&#x662F;<a href="https://www.mexc.com/">MEXC</a>&#xFF0C;<a href="https://www.gate.io/signup/UVISXQpe?ref_type=103">Gate.io</a>&#xFF0C;<a href="https://www.bgportable.com/referral/register?clacCode=K9FPQW33&amp;from=%2Fzh-CN%2Fevents%2Freferral&amp;source=events">Bitget</a>&#x3002;</li>
<li>DEX: &#x76EE;&#x524D;24&#x5C0F;&#x65F6;&#x4EA4;&#x6613;&#x91CF;&#x6700;&#x9AD8;&#x7684;DEX&#x5C1A;&#x4E0D;&#x53EF;&#x7528;&#x3002;</li>
</ul>
</li>
</ol>
<!--kg-card-end: markdown--><p> </p>]]></content:encoded></item><item><title><![CDATA[新手入门web3.0（学习计划）]]></title><description><![CDATA[<h1 id="%E9%98%B6%E6%AE%B5%E4%B8%80%EF%BC%9A%E5%85%A5%E9%97%A8%E5%9F%BA%E7%A1%80">&#x9636;&#x6BB5;&#x4E00;&#xFF1A;&#x5165;&#x95E8;&#x57FA;&#x7840;</h1><!--kg-card-begin: html--><table>
<thead>
<tr>
<th>.</th>
<th>&#x6280;&#x672F;&#x4EBA;&#x5458;</th>
<th>&#x975E;&#x6280;&#x672F;&#x4EBA;&#x5458;</th>
</tr>
</thead>
<tbody>
<tr>
<td>&#x1F680;&#x63A8;&#x8350;&#x65F6;&#x95F4;</td>
<td>2-3&#x5468;</td>
<td>1-2&#x5468;</td>
</tr>
<tr>
<td>&#x2753;&#x4E86;&#x89E3;&#x533A;&#x5757;&#x94FE;&#x57FA;&#x7840;&#x77E5;&#x8BC6;</td>
<td>&#x221A;</td>
<td>&#x221A;</td>
</tr>
<tr>
<td>&#x1F4D5;&#x5B66;&#x4E60;&#x52A0;&#x5BC6;&#x5B66;&#x57FA;&#x7840;</td>
<td>&#x221A;</td>
<td>&#x221A;</td>
</tr>
<tr>
<td>&#x1F50D;&#x719F;</td></tr></tbody></table>]]></description><link>https://www.thinkingsolidity.com/xin-shou-ru-men-web3-0/</link><guid isPermaLink="false">65ea872d903d7005b6870495</guid><category><![CDATA[新手小白入门计划]]></category><dc:creator><![CDATA[Echo_留蝉]]></dc:creator><pubDate>Fri, 08 Mar 2024 05:35:09 GMT</pubDate><content:encoded><![CDATA[<h1 id="%E9%98%B6%E6%AE%B5%E4%B8%80%EF%BC%9A%E5%85%A5%E9%97%A8%E5%9F%BA%E7%A1%80">&#x9636;&#x6BB5;&#x4E00;&#xFF1A;&#x5165;&#x95E8;&#x57FA;&#x7840;</h1><!--kg-card-begin: html--><table>
<thead>
<tr>
<th>.</th>
<th>&#x6280;&#x672F;&#x4EBA;&#x5458;</th>
<th>&#x975E;&#x6280;&#x672F;&#x4EBA;&#x5458;</th>
</tr>
</thead>
<tbody>
<tr>
<td>&#x1F680;&#x63A8;&#x8350;&#x65F6;&#x95F4;</td>
<td>2-3&#x5468;</td>
<td>1-2&#x5468;</td>
</tr>
<tr>
<td>&#x2753;&#x4E86;&#x89E3;&#x533A;&#x5757;&#x94FE;&#x57FA;&#x7840;&#x77E5;&#x8BC6;</td>
<td>&#x221A;</td>
<td>&#x221A;</td>
</tr>
<tr>
<td>&#x1F4D5;&#x5B66;&#x4E60;&#x52A0;&#x5BC6;&#x5B66;&#x57FA;&#x7840;</td>
<td>&#x221A;</td>
<td>&#x221A;</td>
</tr>
<tr>
<td>&#x1F50D;&#x719F;&#x6089;&#x4EE5;&#x592A;&#x574A;</td>
<td>&#x221A;</td>
<td>&#x221A;</td>
</tr>
<tr>
<td>&#x1F600;Solidity&#x57FA;&#x672C;&#x8BED;&#x6CD5;</td>
<td>&#x638C;&#x63E1;</td>
<td>&#x719F;&#x6089;</td>
</tr>
</tbody>
</table><!--kg-card-end: html--><p><strong>&#x5B66;&#x4E60;&#x8D44;&#x6599;&#xFF1A;</strong></p><ul><li>&#x5317;&#x4EAC;&#x5927;&#x5B66;&#x8096;&#x81FB;&#x8001;&#x5E08;&#x7684;&#x8BFE;&#x662F;&#x7CBE;&#x534E;&#xFF0C;&#x4E00;&#x5B9A;&#x8981;&#x770B;&#xFF01;&#xFF01;&#xFF01;&#xFF01;&#x6709;&#x57FA;&#x7840;&#x7684;&#x540C;&#x5B66;&#x4E5F;&#x53EF;&#x4EE5;&#x53BB;&#x770B;&#xFF0C;&#x4F60;&#x4F1A;&#x6709;&#x5F88;&#x591A;&#x65B0;&#x7684;&#x6536;&#x83B7;&#xFF0C;&#x6211;&#x5F53;&#x65F6;&#x5C31;&#x662F;&#x6BCF;&#x4E00;&#x96C6;&#x90FD;&#x505A;&#x4E86;&#x7B14;&#x8BB0;&#xFF0C;&#x5E72;&#x8D27;&#x8D85;&#x591A;&#x3002;<br>B&#x7AD9;&#x7F51;&#x5740;&#xFF1A;<a href="https://www.bilibili.com/video/BV1Vt411X7JF/?spm_id_from=333.337.search-card.all.click&amp;vd_source=6e2f6be95b1505776bf456848f7a47fa">https://www.bilibili.com/video/BV1Vt411X7JF/?spm_id_from=333.337.search-card.all.click&amp;vd_source=6e2f6be95b1505776bf456848f7a47fa</a></li></ul><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/03/image-2.png" class="kg-image" alt loading="lazy" width="1404" height="815"></figure><p><br>&#x8FD9;&#x4E2A;&#x662F;&#x6211;&#x5F53;&#x65F6;&#x5B66;&#x4E60;&#x53C2;&#x8003;&#x7684;&#x535A;&#x4E3B;&#x5199;&#x7684;&#x7B14;&#x8BB0;&#xFF0C;&#x8BB0;&#x5F55;&#x7684;&#x975E;&#x5E38;&#x8BE6;&#x7EC6;:<br><a href="https://blog.csdn.net/Mu_Xiaoye/article/details/104299664">https://blog.csdn.net/Mu_Xiaoye/article/details/104299664</a></p><ul><li><strong>&#x4E66;&#x7C4D;&#xFF08;&#x53EF;&#x9009;&#xFF09;&#xFF1A;</strong>&#x300A;&#x7CBE;&#x901A;&#x4EE5;&#x592A;&#x574A;&#x300B;&#x3001;&#x300A;&#x533A;&#x5757;&#x94FE;&#x57FA;&#x7840;&#x77E5;&#x8BC6;25&#x8BB2;&#x300B;&#xFF0C;&#x6709;&#x9700;&#x8981;&#x7684;&#x670B;&#x53CB;&#x53EF;&#x4EE5;&#x8BC4;&#x8BBA;&#x533A;&#x627E;&#x6211;&#x8981;&#x3002;</li></ul><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/03/image-3.png" class="kg-image" alt loading="lazy" width="1102" height="681"></figure><h1 id="%E9%98%B6%E6%AE%B5%E4%BA%8C%EF%BC%9A%E6%B7%B1%E5%85%A5%E5%AD%A6%E4%B9%A0">&#x9636;&#x6BB5;&#x4E8C;&#xFF1A;&#x6DF1;&#x5165;&#x5B66;&#x4E60;</h1><!--kg-card-begin: html--><table>
<thead>
<tr>
<th>.</th>
<th>&#x6280;&#x672F;&#x4EBA;&#x5458;</th>
<th>&#x975E;&#x6280;&#x672F;&#x4EBA;&#x5458;</th>
</tr>
</thead>
<tbody>
<tr>
<td>&#x1F680;&#x63A8;&#x8350;&#x65F6;&#x95F4;</td>
<td>3&#x5468;</td>
<td>1&#x5468;</td>
</tr>
<tr>
<td>&#x2753;&#x5B66;&#x4E60;&#x4EC0;&#x4E48;&#x662F;DApps</td>
<td>&#x221A;</td>
<td>&#x221A;</td>
</tr>
<tr>
<td>&#x1F4D5;&#x5B66;&#x4E60;web3.js</td>
<td>&#x221A;</td>
<td>&#xD7;</td>
</tr>
<tr>
<td>&#x1F50D;&#x6DF1;&#x5165;&#x667A;&#x80FD;&#x5408;&#x7EA6;</td>
<td>&#x221A;</td>
<td>&#xD7;</td>
</tr>
</tbody>
</table><!--kg-card-end: html--><h2 id="%E4%B8%80%E3%80%81%E4%BA%86%E8%A7%A3%E5%8E%BB%E4%B8%AD%E5%BF%83%E5%8C%96%E5%BA%94%E7%94%A8%EF%BC%88dapps%EF%BC%89">&#x4E00;&#x3001;&#x4E86;&#x89E3;&#x53BB;&#x4E2D;&#x5FC3;&#x5316;&#x5E94;&#x7528;&#xFF08;DApps&#xFF09;</h2><ul><li>&#x5B66;&#x4E60;&#x4EC0;&#x4E48;&#x662F;DApps&#xFF0C;&#x5B83;&#x4EEC;&#x7684;&#x4F18;&#x52BF;&#x548C;&#x6311;&#x6218;&#x3002;</li><li>&#x4E86;&#x89E3;DApps&#x7684;&#x5DE5;&#x4F5C;&#x539F;&#x7406;&#x548C;&#x751F;&#x6001;&#x7CFB;&#x7EDF;&#x3002;</li></ul><p>&#x5173;&#x4E8E;dapp&#x7684;&#x6982;&#x5FF5;b&#x7AD9;&#x6709;&#x89C6;&#x9891;&#x8BB2;&#x89E3;&#x90FD;&#x5927;&#x5DEE;&#x4E0D;&#x5DEE;&#xFF0C;&#x6280;&#x672F;&#x7684;&#x540C;&#x5B66;&#x4E0D;&#x9700;&#x8981;&#x5728;&#x8FD9;&#x4E2A;&#x677F;&#x5757;&#x6D6A;&#x8D39;&#x65F6;&#x95F4;&#xFF0C;&#x975E;&#x6280;&#x672F;&#x7684;&#x540C;&#x5B66;&#x9700;&#x8981;&#x7EC6;&#x770B;&#x3002;&#x3002;&#x3002;</p><h2 id="%E4%BA%8C%E3%80%81%E5%AD%A6%E4%B9%A0web3js">&#x4E8C;&#x3001;&#x5B66;&#x4E60;Web3.js</h2><ul><li>&#x4E86;&#x89E3;&#x5982;&#x4F55;&#x4F7F;&#x7528;Web3.js&#x4E0E;&#x4EE5;&#x592A;&#x574A;&#x7F51;&#x7EDC;&#x4EA4;&#x4E92;&#x3002;</li><li>&#x7F16;&#x5199;&#x7B80;&#x5355;&#x7684;Web3.js&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x3002;</li></ul><ol><li>&#x5B66;&#x4E60;Web3.js&#x4E4B;&#x524D;&#x53EF;&#x4EE5;&#x81EA;&#x5DF1;&#x53BB;&#x64CD;&#x4F5C;&#x5B89;&#x88C5;&#x4E00;&#x6761;geth&#x79C1;&#x94FE;&#xFF0C;&#x7F51;&#x4E0A;&#x6709;&#x5F88;&#x591A;&#x4F7F;&#x7528;&#x6559;&#x7A0B;&#xFF0C;&#x63A8;&#x8350;&#x4E0B;&#x8F7D;&#x539F;&#x6765;pow&#x7248;&#x672C;&#xFF08;&#x4E0D;&#x8981;&#x4E0B;&#x6700;&#x65B0;&#x7684;&#xFF0C;&#x56E0;&#x4E3A;&#x6700;&#x65B0;&#x7248;geth&#x4F7F;&#x7528;&#x7684;&#x662F;&#x6743;&#x76CA;&#x8BC1;&#x660E;&#xFF0C;&#x6211;&#x4EEC;&#x5148;&#x628A;&#x96BE;&#x7684;boss&#x653E;&#x4E00;&#x653E;&#xFF09;&#xFF0C;&#x628A;&#x94FE;&#x8DD1;&#x8D77;&#x6765;&#x5C31;&#x5B8C;&#x6210;&#x7B2C;&#x4E00;&#x6B65;&#x4E86;&#x3002;</li><li>&#x51C6;&#x5907;&#x597D;&#x9700;&#x8981;&#x4F7F;&#x7528;&#x7684;&#x63D2;&#x4EF6;&#xFF1A;<a href="https://metamask.io/">metamask</a>&#xFF08;&#x706B;&#x72D0;&#x53EF;&#x4EE5;&#x76F4;&#x63A5;&#x8BBF;&#x95EE;&#xFF0C;chrome&#x8DDF;edge&#x61C2;&#x7684;&#x90FD;&#x61C2;&#xFF09;&#xFF0C;&#x4F7F;&#x7528;&#x79C1;&#x94FE;&#x8FDE;&#x63A5;metamask&#x5E76;&#x67E5;&#x770B;&#x6316;&#x51FA;&#x7684;token&#x5373;&#x5B8C;&#x6210;&#x4E86;&#x7B2C;&#x4E8C;&#x6B65;&#x3002;</li><li>&#x8DDF;&#x7740;&#x8FD9;&#x4E2A;&#x7F51;&#x7AD9;&#x4E00;&#x6B65;&#x4E00;&#x6B65;&#x6765;&#xFF0C;&#x521D;&#x4F53;&#x9A8C;web3.js <a href="https://docs.web3js.org/guides/getting_started/introduction">https://docs.web3js.org/guides/getting_started/introduction</a></li></ol><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/03/image-4.png" class="kg-image" alt loading="lazy" width="1081" height="521"></figure><h2 id="%E4%B8%89%E3%80%81%E6%B7%B1%E5%85%A5%E4%BA%86%E8%A7%A3%E6%99%BA%E8%83%BD%E5%90%88%E7%BA%A6">&#x4E09;&#x3001;&#x6DF1;&#x5165;&#x4E86;&#x89E3;&#x667A;&#x80FD;&#x5408;&#x7EA6;</h2><ul><li>&#x5B66;&#x4E60;&#x66F4;&#x590D;&#x6742;&#x7684;&#x667A;&#x80FD;&#x5408;&#x7EA6;&#x8BBE;&#x8BA1;&#x6A21;&#x5F0F;&#x548C;&#x6700;&#x4F73;&#x5B9E;&#x8DF5;&#x3002;</li><li>&#x63A2;&#x7D22;&#x667A;&#x80FD;&#x5408;&#x7EA6;&#x5B89;&#x5168;&#x6027;&#x548C;&#x6F0F;&#x6D1E;&#x3002;</li></ul><p>&#x6DF1;&#x5165;&#x5B66;&#x4E60;&#x667A;&#x80FD;&#x5408;&#x7EA6;&#xFF0C;&#x63A8;&#x8350; <a href="https://solidity-by-example.org/">Solidity by Example</a> &#x53BB;&#x8DD1;&#x4E00;&#x8DD1;&#x4E0A;&#x9762;&#x7684;&#x4F8B;&#x5B50;&#x4F1A;&#x52A0;&#x6DF1;&#x4F60;&#x5BF9;&#x667A;&#x80FD;&#x5408;&#x7EA6;&#x7684;&#x7406;&#x89E3;&#x3002;<br>Defi &#x90E8;&#x5206;&#x7684;&#x8BB2;&#x89E3;&#x63A8;&#x8350;&#xFF1A;<a href="https://www.bilibili.com/video/BV19x4y1w7aj/?spm_id_from=333.880.my_history.page.click&amp;vd_source=6e2f6be95b1505776bf456848f7a47fa">https://www.bilibili.com/video/BV19x4y1w7aj/?spm_id_from=333.880.my_history.page.click&amp;vd_source=6e2f6be95b1505776bf456848f7a47fa</a> &#x6881;&#x8001;&#x5E08;&#x8BB2;&#x7684;&#x975E;&#x5E38;&#x597D;&#xFF0C;&#x5F88;&#x8BE6;&#x7EC6;&#xFF0C;&#x6CA1;&#x6709;&#x542C;&#x61C2;&#x7684;&#x90E8;&#x5206;&#x53EF;&#x4EE5;&#x53CD;&#x590D;&#x542C;&#x3002;</p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/03/image-5.png" class="kg-image" alt loading="lazy" width="1491" height="770"></figure><h1 id="%E9%98%B6%E6%AE%B5%E4%B8%89%EF%BC%9A%E9%A1%B9%E7%9B%AE%E5%AE%9E%E8%B7%B5">&#x9636;&#x6BB5;&#x4E09;&#xFF1A;&#x9879;&#x76EE;&#x5B9E;&#x8DF5;</h1><h2 id="%E4%B8%80%E3%80%81%E5%BC%80%E5%8F%91%E4%B8%80%E4%B8%AA%E7%AE%80%E5%8D%95%E7%9A%84%E5%8E%BB%E4%B8%AD%E5%BF%83%E5%8C%96%E5%BA%94%E7%94%A8">&#x4E00;&#x3001;&#x5F00;&#x53D1;&#x4E00;&#x4E2A;&#x7B80;&#x5355;&#x7684;&#x53BB;&#x4E2D;&#x5FC3;&#x5316;&#x5E94;&#x7528;</h2><ul><li>&#x8BBE;&#x8BA1;&#x4E00;&#x4E2A;&#x6709;&#x8DA3;&#x7684;DApp&#x6982;&#x5FF5;&#xFF0C;&#x5E76;&#x5B9E;&#x73B0;&#x5176;&#x667A;&#x80FD;&#x5408;&#x7EA6;&#x548C;&#x524D;&#x7AEF;&#x754C;&#x9762;&#x3002;</li><li>&#x90E8;&#x7F72;&#x4F60;&#x7684;DApp&#x5230;&#x4EE5;&#x592A;&#x574A;&#x4E3B;&#x7F51;&#x6216;&#x6D4B;&#x8BD5;&#x7F51;&#x7EDC;&#x3002;</li></ul><p>Github&#x4E0A;&#x6709;&#x5F88;&#x591A;&#x4E0D;&#x9519;&#x7684;&#x9879;&#x76EE;&#x53EF;&#x4EE5;&#x53BB;&#x53C2;&#x8003;&#x501F;&#x9274;&#xFF0C;&#x5F53;&#x7136;&#x4E0D;&#x8981;&#x5FD8;&#x8BB0;&#x53BB;&#x8585;&#x6D4B;&#x8BD5;&#x5E01;&#x3002;&#x505A;&#x6280;&#x672F;&#x5F97;&#x540C;&#x5B66;&#x53EF;&#x4EE5;&#x628A;&#x81EA;&#x5DF1;&#x5F97;&#x4EE3;&#x7801;&#x53D1;&#x5E03;&#x5230;git&#x4E0A;&#x65B9;&#x4FBF;&#x505A;&#x5DE5;&#x4F5C;&#x7684;&#x65F6;&#x5019;&#x7528;</p><h2 id="%E4%BA%8C%E3%80%81%E5%8F%82%E4%B8%8E%E5%8C%BA%E5%9D%97%E9%93%BE%E7%A4%BE%E5%8C%BA">&#x4E8C;&#x3001;&#x53C2;&#x4E0E;&#x533A;&#x5757;&#x94FE;&#x793E;&#x533A;</h2><ul><li>&#x52A0;&#x5165;&#x533A;&#x5757;&#x94FE;&#x793E;&#x533A;&#xFF0C;&#x4E0E;&#x5176;&#x4ED6;&#x5F00;&#x53D1;&#x8005;&#x548C;&#x7231;&#x597D;&#x8005;&#x4E92;&#x52A8;&#x3002;</li><li>&#x53C2;&#x4E0E;&#x533A;&#x5757;&#x94FE;&#x9879;&#x76EE;&#x548C;&#x6D3B;&#x52A8;&#xFF0C;&#x62D3;&#x5C55;&#x60A8;&#x7684;&#x7F51;&#x7EDC;&#x3002;</li></ul><ol><li>&#x5DE5;&#x5177;&#xFF1A;&#x79D1;&#x5B66;&#x4E0A;&#x7F51;&#x5DE5;&#x5177;&#x3001;twitter&#x3001;discord&#x3001;telegram</li><li>&#x76F8;&#x5173;&#x7684;&#x533A;&#x5757;&#x94FE;&#x9879;&#x76EE;&#xFF1A;<a href="https://www.bilibili.com/video/BV15T4y1s7WQ/?spm_id_from=333.337.search-card.all.click&amp;vd_source=6e2f6be95b1505776bf456848f7a47fa">https://www.bilibili.com/video/BV15T4y1s7WQ/?spm_id_from=333.337.search-card.all.click&amp;vd_source=6e2f6be95b1505776bf456848f7a47fa</a></li></ol><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/03/image-6.png" class="kg-image" alt loading="lazy" width="1477" height="779"></figure><h2 id="%E4%B8%89%E3%80%81%E6%8C%81%E7%BB%AD%E5%AD%A6%E4%B9%A0%E5%92%8C%E6%8E%A2%E7%B4%A2">&#x4E09;&#x3001;&#x6301;&#x7EED;&#x5B66;&#x4E60;&#x548C;&#x63A2;&#x7D22;</h2><ul><li>&#x8DDF;&#x8E2A;&#x6700;&#x65B0;&#x7684;&#x533A;&#x5757;&#x94FE;&#x6280;&#x672F;&#x548C;&#x53D1;&#x5C55;&#x3002;</li><li>&#x4E0D;&#x65AD;&#x5B66;&#x4E60;&#x5E76;&#x5C1D;&#x8BD5;&#x65B0;&#x7684;&#x9879;&#x76EE;&#x548C;&#x60F3;&#x6CD5;&#x3002;</li></ul><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/03/image-9.png" class="kg-image" alt loading="lazy" width="976" height="851"></figure><ol><li>&#x5EFA;&#x8BAE;&#x53BB;&#x770B;&#x4E00;&#x672C;&#x4E66;&#x300A;&#x4E5D;&#x7AE0;&#x94FE;&#x672F;&#x300B;&#xFF0C;&#x8FD9;&#x672C;&#x4E66;&#x91CC;&#x7684;&#x4E00;&#x4E9B;&#x5173;&#x4E8E;&#x533A;&#x5757;&#x94FE;&#x9879;&#x76EE;&#x7684;&#x5B9E;&#x8DF5;&#x4F8B;&#x5B50;&#x5F88;&#x503C;&#x5F97;&#x53C2;&#x8003;&#xFF0C;&#x4F1A;&#x6539;&#x53D8;&#x4F60;&#x5BF9;&#x4E8E;&#x8F6F;&#x4EF6;&#x9879;&#x76EE;&#x7684;&#x770B;&#x6CD5;&#x3002;</li><li>&#x5E02;&#x573A;&#x8BA4;&#x53EF;&#x5EA6;&#x6BD4;&#x8F83;&#x9AD8;&#x7684;&#x9879;&#x76EE;&#xFF08;&#x9700;&#x8981;&#x81EA;&#x5DF1;&#x53BB;&#x6316;&#x6398;&#x54E6;&#xFF0C;&#x8FD9;&#x91CC;&#x53EA;&#x63D0;&#x4F9B;&#x7F51;&#x5740;&#xFF09;&#xFF1A;<br><a href="https://coinmarketcap.com/">https://coinmarketcap.com/</a><br><a href="https://www.coingecko.com/">https://www.coingecko.com/</a><br><a href="https://defillama.com/">https://defillama.com/</a><br><a href="https://www.geckoterminal.com/">https://www.geckoterminal.com/</a><br><a href="https://dexscreener.com/">https://dexscreener.com/</a></li></ol><p>&#x65E5;&#x5E38;&#x4F1A;&#x5728;&#x8FD9;&#x91CC;&#x66F4;&#x65B0;&#x4E00;&#x4E9B;&#x6709;&#x8DA3;&#x7684;&#x65B0;&#x9879;&#x76EE;&#xFF0C;<a href="https://twitter.com/0xgangWhat%EF%BC%8C%E6%AC%A2%E8%BF%8E%E7%82%B9%E8%B5%9E%E3%80%81%E8%AF%84%E8%AE%BA%E3%80%81%E6%94%B6%E8%97%8F%E3%80%81%E8%BD%AC%E5%8F%91and%E5%85%B3%E6%B3%A8%E6%88%91~%E3%80%82">https://twitter.com/0xgangWhat&#xFF0C;&#x6B22;&#x8FCE;&#x70B9;&#x8D5E;&#x3001;&#x8BC4;&#x8BBA;&#x3001;&#x6536;&#x85CF;&#x3001;&#x8F6C;&#x53D1;and&#x5173;&#x6CE8;&#x6211;~&#x3002;</a></p>]]></content:encoded></item><item><title><![CDATA[恒定乘积自动做市商算法]]></title><description><![CDATA[<figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/02/----_20240222163406.jpg" class="kg-image" alt loading="lazy" width="1281" height="477"></figure><h3 id="%E4%B8%80%E3%80%81%E5%85%AC%E5%BC%8F%E6%8E%A8%E6%BC%94">&#x4E00;&#x3001;&#x516C;&#x5F0F;&#x63A8;&#x6F14;</h3><h3 id="1%E3%80%81%E4%BA%A4%E6%8D%A2"><br>1&#x3001;&#x4EA4;&#x6362;</h3><p>&#x25B3;y &#xA0;= (&#x25B3;x * y ) / &#x25B3;x + x</p><h3 id="2%E3%80%81%E6%B7%BB%E5%8A%A0%E6%B5%81%E5%8A%A8%E6%80%A7">2&#x3001;&#x6DFB;&#x52A0;&#x6D41;&#x52A8;&#x6027;</h3><p>S = &#x221A;(&#x25B3;x * &#x25B3;y)<br>T = &#x221A;(x * y)</p><p>x / &#x200C;&#x200C;y = (x + &#x25B3;x) / (y + &#x25B3;y) &#xA0;=&gt; &#xA0;&#x25B3;</p>]]></description><link>https://www.thinkingsolidity.com/heng-ding-cheng-ji-zi-dong-zuo-shi-shang-suan-fa/</link><guid isPermaLink="false">65d7052a903d7005b68703ae</guid><category><![CDATA[defi]]></category><dc:creator><![CDATA[Echo_留蝉]]></dc:creator><pubDate>Thu, 22 Feb 2024 09:28:58 GMT</pubDate><content:encoded><![CDATA[<figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/02/----_20240222163406.jpg" class="kg-image" alt loading="lazy" width="1281" height="477"></figure><h3 id="%E4%B8%80%E3%80%81%E5%85%AC%E5%BC%8F%E6%8E%A8%E6%BC%94">&#x4E00;&#x3001;&#x516C;&#x5F0F;&#x63A8;&#x6F14;</h3><h3 id="1%E3%80%81%E4%BA%A4%E6%8D%A2"><br>1&#x3001;&#x4EA4;&#x6362;</h3><p>&#x25B3;y &#xA0;= (&#x25B3;x * y ) / &#x25B3;x + x</p><h3 id="2%E3%80%81%E6%B7%BB%E5%8A%A0%E6%B5%81%E5%8A%A8%E6%80%A7">2&#x3001;&#x6DFB;&#x52A0;&#x6D41;&#x52A8;&#x6027;</h3><p>S = &#x221A;(&#x25B3;x * &#x25B3;y)<br>T = &#x221A;(x * y)</p><p>x / &#x200C;&#x200C;y = (x + &#x25B3;x) / (y + &#x25B3;y) &#xA0;=&gt; &#xA0;&#x25B3;x / &#x25B3;y &#xA0;= x / y</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th>&#x65F6;&#x6BB5;</th>
<th>&#x6D41;&#x52A8;&#x6027;</th>
</tr>
</thead>
<tbody>
<tr>
<td>L0 &#x6DFB;&#x52A0;&#x4E4B;&#x524D;&#x7684;lq</td>
<td>T</td>
</tr>
<tr>
<td>L1 &#x6DFB;&#x52A0;&#x4E4B;&#x540E;&#x7684;lq</td>
<td>T+S</td>
</tr>
</tbody>
</table>
<p>L0/L1 = T/(T+S)<br>
S = (&#x25B3;x / x) * T = (&#x25B3;y / y) * T</p>
<!--kg-card-end: markdown--><h3 id="3%E3%80%81%E7%A7%BB%E9%99%A4%E6%B5%81%E9%80%9A%E6%80%A7">3&#x3001;&#x79FB;&#x9664;&#x6D41;&#x901A;&#x6027;</h3><p>&#x25B3;x = x * (S / T)<br>&#x25B3;y = y * (S / T)</p><h2 id="%E4%BA%8C%E3%80%81%E6%99%BA%E8%83%BD%E5%90%88%E7%BA%A6%E7%BC%96%E5%86%99">&#x4E8C;&#x3001;&#x667A;&#x80FD;&#x5408;&#x7EA6;&#x7F16;&#x5199;</h2><h4 id="1%E3%80%81%E5%90%88%E7%BA%A6%E7%BB%93%E6%9E%84%E8%AE%BE%E8%AE%A1">1&#x3001;&#x5408;&#x7EA6;&#x7ED3;&#x6784;&#x8BBE;&#x8BA1;</h4><ul><li>&#x5728;&#x5F00;&#x59CB;&#x7F16;&#x5199;&#x4E4B;&#x524D;&#xFF0C;&#x9700;&#x8981;&#x660E;&#x786E;&#x5B9A;&#x4E49;&#x5408;&#x7EA6;&#x7684;&#x529F;&#x80FD;&#x548C;&#x7ED3;&#x6784;&#x3002;&#x8FD9;&#x4E2A;&#x5408;&#x7EA6;&#x662F;&#x4E00;&#x4E2A;&#x81EA;&#x52A8;&#x5E02;&#x573A;&#x505A;&#x5E02;&#x5546;&#xFF08;AMM&#xFF09;&#xFF0C;&#x4E3B;&#x8981;&#x5305;&#x62EC;&#x4EA4;&#x6362;&#x3001;&#x63D0;&#x4F9B;&#x6D41;&#x52A8;&#x6027;&#x548C;&#x79FB;&#x9664;&#x6D41;&#x52A8;&#x6027;&#x7B49;&#x529F;&#x80FD;&#x3002;</li></ul><h4 id="2%E3%80%81%E5%AF%BC%E5%85%A5%E4%BE%9D%E8%B5%96%EF%BC%9A">2&#x3001;&#x5BFC;&#x5165;&#x4F9D;&#x8D56;&#xFF1A;</h4><ul><li>&#x786E;&#x4FDD;&#x5BFC;&#x5165;&#x4E86;&#x6240;&#x9700;&#x7684;&#x4F9D;&#x8D56;&#x6587;&#x4EF6;&#xFF0C;&#x5982; <code>IERC20.sol</code>&#xFF0C;&#x5B83;&#x5B9A;&#x4E49;&#x4E86; ERC20 &#x6807;&#x51C6;&#x63A5;&#x53E3;&#x3002;</li></ul><h4 id="3%E3%80%81%E5%90%88%E7%BA%A6%E5%AE%9A%E4%B9%89%EF%BC%9A">3&#x3001;&#x5408;&#x7EA6;&#x5B9A;&#x4E49;&#xFF1A;</h4><ul><li>&#x5B9A;&#x4E49;&#x5408;&#x7EA6;&#x540D;&#x79F0;&#x4E3A; <code>CPAMM</code>&#xFF0C;&#x91C7;&#x7528; Solidity &#x7684;&#x7248;&#x672C; <code>^0.8.13</code>&#x3002;</li><li>&#x5B9A;&#x4E49;&#x4E24;&#x79CD;&#x4EE3;&#x5E01; <code>token0</code> &#x548C; <code>token1</code>&#xFF0C;&#x8FD9;&#x4E9B;&#x4EE3;&#x5E01;&#x901A;&#x8FC7; <code>IERC20</code> &#x63A5;&#x53E3;&#x5B9A;&#x4E49;&#x3002;</li></ul><pre><code class="language-solidity">// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

import &quot;./IERC20.sol&quot;;

contract CPAMM {

    // &#x5B9A;&#x4E49;&#x4EE3;&#x5E01;0&#x548C;&#x4EE3;&#x5E01;1&#x7684;&#x50A8;&#x5907;&#x91CF; reserve0 &#x548C; reserve1&#x3002;
    IERC20 public immutable token0;
    IERC20 public immutable token1;
    
    // &#x5B9A;&#x4E49;&#x5408;&#x7EA6;&#x7684;&#x603B;&#x4F9B;&#x5E94;&#x91CF; totalSupply &#x548C;&#x7528;&#x6237;&#x4F59;&#x989D;&#x7684;&#x6620;&#x5C04; balanceOf&#x3002;
    uint public totalSupply;
    mapping(address =&gt; uint) public balanceOf;
}</code></pre><p><strong>4&#x3001;&#x6784;&#x9020;&#x51FD;&#x6570;</strong>&#xFF1A;</p><ul><li>&#x7F16;&#x5199;&#x6784;&#x9020;&#x51FD;&#x6570; <code>constructor</code>&#xFF0C;&#x5728;&#x5408;&#x7EA6;&#x521D;&#x59CB;&#x5316;&#x65F6;&#x4F20;&#x5165;&#x4E24;&#x79CD;&#x4EE3;&#x5E01;&#x7684;&#x5730;&#x5740;&#xFF0C;&#x5E76;&#x5C06;&#x5176;&#x5B58;&#x50A8;&#x5728;&#x72B6;&#x6001;&#x53D8;&#x91CF;&#x4E2D;&#x3002;</li></ul><pre><code class="language-solidity">    constructor(address _token0, address _token1) {
        token0 = IERC20(_token0);
        token1 = IERC20(_token1);
    }</code></pre><p><strong>5&#x3001;&#x5185;&#x90E8;&#x51FD;&#x6570;&#x5B9A;&#x4E49;</strong>&#xFF1A;</p><ul><li>&#x5B9A;&#x4E49;&#x4E00;&#x4E9B;&#x5185;&#x90E8;&#x51FD;&#x6570;&#xFF0C;&#x5982; <code>_mint</code>&#x3001;<code>_burn</code>&#x3001;<code>_sqrt</code>&#x3001;<code>_update</code> &#x548C; <code>_min</code>&#xFF0C;&#x7528;&#x4E8E;&#x589E;&#x53D1;&#x4EE3;&#x5E01;&#x3001;&#x9500;&#x6BC1;&#x4EE3;&#x5E01;&#x3001;&#x8BA1;&#x7B97;&#x5E73;&#x65B9;&#x6839;&#x3001;&#x66F4;&#x65B0;&#x4EE3;&#x5E01;&#x50A8;&#x5907;&#x91CF;&#x548C;&#x8BA1;&#x7B97;&#x4E24;&#x4E2A;&#x6570;&#x4E2D;&#x7684;&#x6700;&#x5C0F;&#x503C;&#x7B49;&#x529F;&#x80FD;&#x3002;</li></ul><pre><code class="language-solidity">    // &#x79C1;&#x6709;&#x51FD;&#x6570;&#xFF0C;&#x7528;&#x4E8E;&#x589E;&#x53D1;&#x4EE3;&#x5E01;&#x7ED9;&#x6307;&#x5B9A;&#x5730;&#x5740;
    function _mint(address _to, uint _amount) private {
        balanceOf[_to] += _amount;
        totalSupply += _amount;
    }

    // &#x79C1;&#x6709;&#x51FD;&#x6570;&#xFF0C;&#x7528;&#x4E8E;&#x9500;&#x6BC1;&#x6307;&#x5B9A;&#x5730;&#x5740;&#x7684;&#x4EE3;&#x5E01;
    function _burn(address _from, uint _amount) private {
        balanceOf[_from] -= _amount;
        totalSupply -= _amount;
    }

    // &#x8BA1;&#x7B97;&#x5E73;&#x65B9;&#x6839;&#x7684;&#x5185;&#x90E8;&#x51FD;&#x6570;
    function _sqrt(uint y) internal pure returns (uint z) {
        if (y &gt; 3) {
            z = y;
            uint x = y / 2 + 1;
            while (x &lt; z) {
                z = x;
                x = (y / x + x) / 2;
            }
        } else if (y != 0) {
            z = 1;
        }
    }

    // &#x66F4;&#x65B0;&#x4EE3;&#x5E01;&#x50A8;&#x5907;&#x91CF;&#x7684;&#x5185;&#x90E8;&#x51FD;&#x6570;
    function _update(uint _reserve0, uint _reserve1) private {
        reserve0 = _reserve0;
        reserve1 = _reserve1;
    }

    // &#x8FD4;&#x56DE;&#x4E24;&#x4E2A;&#x6570;&#x4E2D;&#x8F83;&#x5C0F;&#x7684;&#x6570;
    function _min(uint _x, uint _y) private pure returns (uint) {
        return _x &gt; _y ? _y : _x;
    }
</code></pre><p><strong>6&#x3001;&#x4EA4;&#x6362;&#x529F;&#x80FD;</strong>&#xFF08;<code>swap</code> &#x51FD;&#x6570;&#xFF09;&#xFF1A;</p><ul><li>&#x7F16;&#x5199;&#x4EA4;&#x6362;&#x51FD;&#x6570;&#xFF0C;&#x7528;&#x6237;&#x901A;&#x8FC7;&#x63D0;&#x4F9B;&#x5176;&#x4E2D;&#x4E00;&#x79CD;&#x4EE3;&#x5E01;&#x6765;&#x4EA4;&#x6362;&#x83B7;&#x5F97;&#x53E6;&#x4E00;&#x79CD;&#x4EE3;&#x5E01;&#x3002;&#x5728;&#x51FD;&#x6570;&#x4E2D;&#xFF0C;&#x9700;&#x8981;&#x8FDB;&#x884C;&#x4E00;&#x4E9B;&#x68C0;&#x67E5;&#xFF0C;&#x5982;&#x68C0;&#x67E5;&#x8F93;&#x5165;&#x91D1;&#x989D;&#x662F;&#x5426;&#x6709;&#x6548;&#x3001;&#x68C0;&#x67E5;&#x8F93;&#x5165;&#x4EE3;&#x5E01;&#x662F;&#x5426;&#x5408;&#x6CD5;&#x7B49;&#x3002;</li><li>&#x8BA1;&#x7B97;&#x8F93;&#x51FA;&#x4EE3;&#x5E01;&#x7684;&#x6570;&#x91CF;&#xFF0C;&#x5E76;&#x5C06;&#x8F93;&#x51FA;&#x4EE3;&#x5E01;&#x8F6C;&#x7ED9;&#x7528;&#x6237;&#x3002;</li><li>&#x66F4;&#x65B0;&#x4EE3;&#x5E01;&#x50A8;&#x5907;&#x91CF;&#x3002;</li></ul><pre><code class="language-solidity">    function swap(address _tokenIn, uint _amountIn) external returns (uint amountOut) {
        // &#x68C0;&#x67E5;&#x8F93;&#x5165;&#x91D1;&#x989D;&#x662F;&#x5426;&#x6709;&#x6548;
        require(_amountIn &gt; 0, &quot;Invalid Amount&quot;);
        // &#x68C0;&#x67E5;&#x8F93;&#x5165;&#x4EE3;&#x5E01;&#x662F;&#x5426;&#x5408;&#x6CD5;
        require(_tokenIn == address(token0) || _tokenIn == address(token1), &quot;Invalid token&quot;);
        
        // &#x786E;&#x5B9A;&#x8F93;&#x5165;&#x4EE3;&#x5E01;&#x548C;&#x8F93;&#x51FA;&#x4EE3;&#x5E01;
        bool isToken0 = _tokenIn == address(token0);
        (IERC20 tokenIn, IERC20 tokenOut) = 
            isToken0 ? (token0, token1) : (token1, token0);
            
        // &#x786E;&#x5B9A;&#x8F93;&#x5165;&#x4EE3;&#x5E01;&#x548C;&#x8F93;&#x51FA;&#x4EE3;&#x5E01;&#x7684;&#x50A8;&#x5907;&#x91CF;
        (uint reserveIn, uint reserveOut) = 
            isToken0 ? (reserve0, reserve1) : (reserve1, reserve0);
            
        // &#x5C06;&#x8F93;&#x5165;&#x4EE3;&#x5E01;&#x8F6C;&#x5165;&#x5408;&#x7EA6;
        tokenIn.transferFrom(msg.sender, address(this), _amountIn);
        
        // &#x8BA1;&#x7B97;&#x8F93;&#x51FA;&#x4EE3;&#x5E01;&#x6570;&#x91CF;(&#x25B3;y  = (&#x25B3;x * y ) / &#x25B3;x + x)
        amountOut = (_amountIn * reserveOut) / (reserveIn + _amountIn);
        
        // &#x5C06;&#x8F93;&#x51FA;&#x4EE3;&#x5E01;&#x8F6C;&#x7ED9;&#x7528;&#x6237;
        tokenOut.transfer(msg.sender, amountOut);
        
        // &#x66F4;&#x65B0;&#x4EE3;&#x5E01;&#x50A8;&#x5907;&#x91CF;
        _update(token0.balanceOf(address(this)), token1.balanceOf(address(this)));
    }</code></pre><p><strong>7&#x3001;&#x6DFB;&#x52A0;&#x6D41;&#x52A8;&#x6027;&#x529F;&#x80FD;</strong>&#xFF08;<code>addLiquidity</code> &#x51FD;&#x6570;&#xFF09;&#xFF1A;</p><ul><li>&#x7F16;&#x5199;&#x6DFB;&#x52A0;&#x6D41;&#x52A8;&#x6027;&#x51FD;&#x6570;&#xFF0C;&#x7528;&#x6237;&#x53EF;&#x4EE5;&#x5C06;&#x4E24;&#x79CD;&#x4EE3;&#x5E01;&#x540C;&#x65F6;&#x63D0;&#x4F9B;&#x7ED9;&#x5408;&#x7EA6;&#x4EE5;&#x589E;&#x52A0;&#x6D41;&#x52A8;&#x6027;&#x3002;&#x9700;&#x8981;&#x68C0;&#x67E5;&#x63D0;&#x4F9B;&#x7684;&#x91D1;&#x989D;&#x662F;&#x5426;&#x6709;&#x6548;&#xFF0C;&#x5E76;&#x5C06;&#x4E24;&#x79CD;&#x4EE3;&#x5E01;&#x8F6C;&#x5165;&#x5408;&#x7EA6;&#x3002;</li><li>&#x8BA1;&#x7B97;&#x7528;&#x6237;&#x83B7;&#x5F97;&#x7684;&#x4EFD;&#x989D;&#xFF0C;&#x5E76;&#x589E;&#x53D1;&#x4EFD;&#x989D;&#x7ED9;&#x7528;&#x6237;&#x3002;</li><li>&#x66F4;&#x65B0;&#x4EE3;&#x5E01;&#x50A8;&#x5907;&#x91CF;&#x3002;</li></ul><pre><code class="language-solidity">    function addLiquidity(uint _amount0, uint _amount1) external returns (uint shares) {
         // &#x68C0;&#x67E5;&#x63D0;&#x4F9B;&#x7684;&#x91D1;&#x989D;&#x662F;&#x5426;&#x6709;&#x6548;
         require(_amount0 &gt; 0 &amp;&amp; _amount1 &gt; 0, &quot;Invalid amount&quot;);
         // &#x5C06;&#x4EE3;&#x5E01;0&#x548C;&#x4EE3;&#x5E01;1&#x8F6C;&#x5165;&#x5408;&#x7EA6;
         token0.transferFrom(msg.sender, address(this), _amount0);
         token1.transferFrom(msg.sender, address(this), _amount1);
         
         // &#x5982;&#x679C;&#x50A8;&#x5907;&#x91CF;&#x4E0D;&#x4E3A;&#x96F6;&#xFF0C;&#x5219;&#x68C0;&#x67E5;&#x63D0;&#x4F9B;&#x7684;&#x4EE3;&#x5E01;&#x6BD4;&#x4F8B;&#x662F;&#x5426;&#x5339;&#x914D;
         if (reserve0 &gt; 0 || reserve1 &gt; 0) {
             require(_amount0 * reserve1 == _amount1 * reserve0, &quot;dy/dx != y/x&quot;);
         }

         // &#x8BA1;&#x7B97;&#x7528;&#x6237;&#x83B7;&#x5F97;&#x7684;&#x4EFD;&#x989D;
         if (totalSupply == 0) {
            shares = _sqrt(_amount0 * _amount1);
         } else {
         	// &#x53D6;&#x5C0F;&#x7684;S&#xFF0C;S = (&#x25B3;x / x) * T = (&#x25B3;y / y) * T 
            shares = _min(
                (_amount0 * totalSupply) / reserve0,
                (_amount1 * totalSupply) / reserve1
            ); 
         }
         // &#x68C0;&#x67E5;&#x4EFD;&#x989D;&#x662F;&#x5426;&#x6709;&#x6548;
         require(shares &gt; 0, &quot;share is zero&quot;);
         // &#x589E;&#x53D1;&#x4EFD;&#x989D;&#x7ED9;&#x7528;&#x6237;
         _mint(msg.sender, shares);
         // &#x66F4;&#x65B0;&#x4EE3;&#x5E01;&#x50A8;&#x5907;&#x91CF;
        _update(token0.balanceOf(address(this)), token1.balanceOf(address(this)));
     }</code></pre><p><strong>8&#x3001;&#x79FB;&#x9664;&#x6D41;&#x52A8;&#x6027;&#x529F;&#x80FD;</strong>&#xFF08;<code>removeLiquidity</code> &#x51FD;&#x6570;&#xFF09;&#xFF1A;</p><ul><li>&#x7F16;&#x5199;&#x79FB;&#x9664;&#x6D41;&#x52A8;&#x6027;&#x51FD;&#x6570;&#xFF0C;&#x7528;&#x6237;&#x53EF;&#x4EE5;&#x6839;&#x636E;&#x6301;&#x6709;&#x7684;&#x4EFD;&#x989D;&#x4ECE;&#x5408;&#x7EA6;&#x4E2D;&#x63D0;&#x53D6;&#x76F8;&#x5E94;&#x7684;&#x4EE3;&#x5E01;&#x3002;&#x8BA1;&#x7B97;&#x7528;&#x6237;&#x63D0;&#x53D6;&#x7684;&#x4EE3;&#x5E01;&#x6570;&#x91CF;&#xFF0C;&#x5E76;&#x5C06;&#x76F8;&#x5E94;&#x7684;&#x4EE3;&#x5E01;&#x8F6C;&#x56DE;&#x7ED9;&#x7528;&#x6237;&#x3002;</li><li>&#x66F4;&#x65B0;&#x4EE3;&#x5E01;&#x50A8;&#x5907;&#x91CF;&#x3002;</li></ul><pre><code class="language-solidity">function removeLiquidity(uint _shares) external returns (uint amount0, uint amount1) {
    // &#x68C0;&#x67E5;&#x63D0;&#x4F9B;&#x7684;&#x4EFD;&#x989D;&#x662F;&#x5426;&#x6709;&#x6548;
    require(_shares &gt; 0, &quot;Invalid shares&quot;);
    // &#x8BA1;&#x7B97;&#x63D0;&#x53D6;&#x7684;&#x4EE3;&#x5E01;&#x6570;&#x91CF;
    amount0 = (_shares * reserve0) / totalSupply;
    amount1 = (_shares * reserve1) / totalSupply;
        
    // &#x9500;&#x6BC1;&#x7528;&#x6237;&#x7684;&#x4EFD;&#x989D;
    _burn(msg.sender, _shares);
        
    // &#x5C06;&#x76F8;&#x5E94;&#x7684;&#x4EE3;&#x5E01;&#x8F6C;&#x56DE;&#x7ED9;&#x7528;&#x6237;
    token0.transfer(msg.sender, amount0);
    token1.transfer(msg.sender, amount1);
        
    // &#x66F4;&#x65B0;&#x4EE3;&#x5E01;&#x50A8;&#x5907;&#x91CF;
    _update(token0.balanceOf(address(this)), token1.balanceOf(address(this)));
}</code></pre>]]></content:encoded></item><item><title><![CDATA[Remix编辑器连接本地]]></title><description><![CDATA[<blockquote>&#x73AF;&#x5883;&#xFF1A;Windows&#x7CFB;&#x7EDF;&#x3001;node -v 18.14.1&#x3001;npm -v 9.3.1 <br>&#x53C2;&#x8003;&#x6587;&#x732E;&#xFF1A;1. <a href="https://remix-ide.readthedocs.io/en/latest/remixd.html">https://remix-ide.readthedocs.io/en/latest/remixd.html</a><br>					2.<a href="https://www.npmjs.com/package/@remix-project/remixd">@remix-project/remixd - npm (npmjs.com)</a></blockquote><p>1&#x3001;&#x4E0B;&#x8F7D;npm&#x4F9D;&#x8D56;</p><pre><code>&gt; makdir remix-workspace

// &#x6CE8;</code></pre>]]></description><link>https://www.thinkingsolidity.com/remixbian-ji-qi-lian-jie-ben-di/</link><guid isPermaLink="false">65bd19eb903d7005b687031c</guid><category><![CDATA[其他]]></category><dc:creator><![CDATA[Echo_留蝉]]></dc:creator><pubDate>Fri, 02 Feb 2024 17:10:12 GMT</pubDate><content:encoded><![CDATA[<blockquote>&#x73AF;&#x5883;&#xFF1A;Windows&#x7CFB;&#x7EDF;&#x3001;node -v 18.14.1&#x3001;npm -v 9.3.1 <br>&#x53C2;&#x8003;&#x6587;&#x732E;&#xFF1A;1. <a href="https://remix-ide.readthedocs.io/en/latest/remixd.html">https://remix-ide.readthedocs.io/en/latest/remixd.html</a><br>					2.<a href="https://www.npmjs.com/package/@remix-project/remixd">@remix-project/remixd - npm (npmjs.com)</a></blockquote><p>1&#x3001;&#x4E0B;&#x8F7D;npm&#x4F9D;&#x8D56;</p><pre><code>&gt; makdir remix-workspace

// &#x6CE8;&#x610F;&#xFF1A;&#x8001;&#x7528;&#x6237;&#x9700;&#x8981;&#x628A;&#x65E7;&#x7248;&#x672C;&#x5220;&#x9664;&#x91CD;&#x65B0;&#x4E0B;&#x8F7D;
&gt; npm uninstall -g remixd

&gt; npm install -g @remix-project/remixd

//&#x5982;&#x679C;&#x4E0B;&#x8F7D;&#x5931;&#x8D25;&#x53EF;&#x4EE5;&#x5C1D;&#x8BD5;&#x6362;&#x4E00;&#x4E2A;&#x955C;&#x50CF;
&gt; npm config set registry http://registry.npm.taobao.org</code></pre><p>2&#x3001;&#x68C0;&#x67E5;&#x7248;&#x672C;&#x53F7;</p><pre><code>&gt; remixd -v</code></pre><p>3&#x3001;&#x542F;&#x52A8;&#x670D;&#x52A1;</p><pre><code>// &#x5047;&#x8BBE;&#x73B0;&#x6709;&#x4E00;&#x4E2A;&#x9879;&#x76EE;&#x4E3A;uniswapv2&#xFF0C;&#x9700;&#x8981;remix&#x8FDE;&#x63A5;&#x8BE5;&#x672C;&#x5730;&#x76EE;&#x5F55;
&gt; remixd -s ./uniswapv2 -u https://remix.ethereum.org</code></pre><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/02/image.png" class="kg-image" alt loading="lazy" width="1474" height="594"></figure><p>&#x5B8C;&#x6210;&#x8FDE;&#x63A5;&#xFF01;</p>]]></content:encoded></item><item><title><![CDATA[Uniswap 热词解析]]></title><description><![CDATA[<h3 id="1%E3%80%81%E8%87%AA%E5%8A%A8%E5%81%9A%E5%B8%82%E5%95%86auto-market-maker%EF%BC%89amm">1&#x3001;&#x81EA;&#x52A8;&#x505A;&#x5E02;&#x5546;(Auto Market Maker&#xFF09;- AMM</h3><p>Uniswap &#x662F;&#x4E00;&#x79CD;&#x81EA;&#x52A8;&#x6D41;&#x52A8;&#x6027;&#x534F;&#x8BAE;&#xFF0C;&#x7531;&#x6052;&#x5B9A;&#x4E58;&#x79EF;&#x516C;&#x5F0F;( x * y = k )&#x63D0;&#x4F9B;&#x652F;&#x6301;&#xFF0C;&#x5E76;&#x5728;&#x4EE5;&#x592A;&#x574A;&#x533A;&#x5757;&#x94FE;&#x4E0A;&#x7684;</p>]]></description><link>https://www.thinkingsolidity.com/uniswap-kuai-su-ru-men/</link><guid isPermaLink="false">65975c89903d7005b6870191</guid><category><![CDATA[defi]]></category><category><![CDATA[新手小白入门计划]]></category><dc:creator><![CDATA[Echo_留蝉]]></dc:creator><pubDate>Fri, 05 Jan 2024 10:40:29 GMT</pubDate><content:encoded><![CDATA[<h3 id="1%E3%80%81%E8%87%AA%E5%8A%A8%E5%81%9A%E5%B8%82%E5%95%86auto-market-maker%EF%BC%89amm">1&#x3001;&#x81EA;&#x52A8;&#x505A;&#x5E02;&#x5546;(Auto Market Maker&#xFF09;- AMM</h3><p>Uniswap &#x662F;&#x4E00;&#x79CD;&#x81EA;&#x52A8;&#x6D41;&#x52A8;&#x6027;&#x534F;&#x8BAE;&#xFF0C;&#x7531;&#x6052;&#x5B9A;&#x4E58;&#x79EF;&#x516C;&#x5F0F;( x * y = k )&#x63D0;&#x4F9B;&#x652F;&#x6301;&#xFF0C;&#x5E76;&#x5728;&#x4EE5;&#x592A;&#x574A;&#x533A;&#x5757;&#x94FE;&#x4E0A;&#x7684;&#x4E0D;&#x53EF;&#x5347;&#x7EA7;&#x667A;&#x80FD;&#x5408;&#x7EA6;&#x7CFB;&#x7EDF;&#x4E2D;&#x5B9E;&#x65BD;&#x3002; &#x5B83;&#x6D88;&#x9664;&#x4E86;&#x5BF9;&#x53EF;&#x4FE1;&#x4E2D;&#x4ECB;&#x7684;&#x9700;&#x6C42;&#xFF0C;&#x4F18;&#x5148;&#x8003;&#x8651;&#x53BB;&#x4E2D;&#x5FC3;&#x5316;&#x3001;&#x6297;&#x5BA1;&#x67E5;&#x548C;&#x5B89;&#x5168;&#x7684;&#x7279;&#x6027;&#x3002;</p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/01/image-9.png" class="kg-image" alt loading="lazy" width="932" height="281"></figure><p>&#x6BCF;&#x4E2A;Uniswap&#x667A;&#x80FD;&#x5408;&#x7EA6;&#x662F;&#x7531;&#x4E00;&#x4E2A;&#x7531;&#x4E24;&#x4E2A; ERC-20&#x4EE3;&#x5E01;&#x7EC4;&#x6210;&#x7684;&#x6D41;&#x52A8;&#x8D44;&#x91D1;&#x6C60;&#x3002;</p><p>&#x5177;&#x4F53;&#x4E00;&#x4E2A;&#x4F8B;&#x5B50;&#x6765;&#x8BF4;&#x660E;: <br>&#x539F;&#x672C;&#x6D41;&#x52A8;&#x6027;&#x6C60;&#x6709;5 &#x4E2A; tokenA &#x548C; 20 &#x4E2A; tokenB&#xFF0C;&#x5F53; Tim &#x6362;&#x6389; 1&#x4E2A; tokenA &#x65F6;&#xFF0C;&#x4ED6;&#x4F1A;&#x5148;&#x652F;&#x4ED8; 0.3%&#x7684;&#x624B;&#x7EED;&#x8D39;&#xFF0C;&#x4E5F;&#x5C31;&#x662F; 0.003&#x4E2A; tokenA (0.3% * 1 )&#x3002;&#x652F;&#x4ED8;&#x8D39;&#x7528;&#x540E;&#xFF0C;&#x5269;&#x4F59;&#x7684; tokenA&#xFF0C;&#x4E5F;&#x5C31;&#x662F; 0.997 tokenA&#xFF0C;&#x4F1A;&#x6362;&#x6210; tokenB&#xFF0C;&#x6240;&#x4EE5;&#x65B0;&#x7684; X &#x53D8;&#x6210;&#x4E86;5.997 tokenA&#x3002;&#x7531;&#x4E8E; K &#x5FC5;&#x987B;&#x4FDD;&#x6301;&#x4E0D;&#x53D8;&#xFF0C;&#x65B0;&#x7684;Y&#x53EF;&#x4EE5;&#x4ECE;&#x516C;&#x5F0F;&#x4E2D;&#x8BA1;&#x7B97;&#x51FA;&#x6765; X * Y= newX * newY&#x3002;&#x6240;&#x4EE5; newY &#x662F; 16.675004 (X * Y /newX = 5 20/5.997=16.675004)&#x3002;&#x8FD9;&#x610F;&#x5473;&#x7740;&#x6C60;&#x4E2D;&#x5C06;&#x6301;&#x6709; 16.675004 &#x4E2A; tokenB&#xFF0C;&#x5269;&#x4F59;&#x7684; tokenB &#x5C06;&#x53D1;&#x9001;&#x7ED9;Tim&#xFF0C;&#x8FD9;&#x610F;&#x5473;&#x7740; Tim &#x5C06;&#x6536;&#x5230; 3.324996 &#x4E2A; tokenB (Y - newY = 20 -16.675004 = 3.324996)&#x3002;&#x4EA4;&#x6362;&#x540E;&#xFF0C;&#x6C60;&#x4E2D;&#x6709;6&#x4E2A; tokenA &#x548C; 16.675004&#x4E2A; tokenB</p><!--kg-card-begin: markdown--><p>&#x4EA4;&#x6613;&#x6C60;&#xFF1A;</p>
<table>
<thead>
<tr>
<th>*</th>
<th>X</th>
<th>Y</th>
</tr>
</thead>
<tbody>
<tr>
<td>&#x539F;&#x6709;</td>
<td>5</td>
<td>20</td>
</tr>
<tr>
<td>0.3% * 1</td>
<td>5.997</td>
<td>16.675004</td>
</tr>
<tr>
<td>&#x5269;&#x4F59;</td>
<td>5.997 + 0.003 = 6</td>
<td>16.675004</td>
</tr>
</tbody>
</table>
<p>Tim&#xFF1A;</p>
<table>
<thead>
<tr>
<th>*</th>
<th>A</th>
<th>B</th>
</tr>
</thead>
<tbody>
<tr>
<td>&#x539F;&#x6709;</td>
<td>1</td>
<td>0</td>
</tr>
<tr>
<td>&#x5151;&#x6362;&#x540E;</td>
<td>0</td>
<td>3.324996</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><h3 id="2%E3%80%81%E4%BA%A4%E6%98%93%E6%BB%91%E7%82%B9">2&#x3001;&#x4EA4;&#x6613;&#x6ED1;&#x70B9;</h3><p>&#x6D41;&#x52A8;&#x6027;&#x66F4;&#x597D;&#x7684;&#x4EA4;&#x6613;&#x6C60;&#x53EF;&#x4EE5;&#x4E3A;&#x7528;&#x6237;&#x63D0;&#x4F9B;&#x8F83;&#x4F4E;&#x7684;&#x4EA4;&#x6613;&#x6ED1;&#x70B9;</p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/01/image-10.png" class="kg-image" alt loading="lazy" width="961" height="356"></figure><p>&#x5047;&#x8BBE;&#x6C60;&#x5B50;X&#x6709;1&#x4E2A;A token&#xFF0C;10&#x4E2A;B token;&#x6C60;&#x5B50;Y&#x6709;10&#x4E2A;A token&#xFF0C;100&#x4E2A;B token&#xFF0C;&#x4E0D;&#x8003;&#x8651;&#x4EA4;&#x6613;&#x8D39;&#x7528;&#xFF0C;&#x4E24;&#x4E2A;&#x6C60;&#x5B50;&#x7684;&#x6C47;&#x7387;&#x6B64;&#x65F6;&#x76F8;&#x540C;<br>Trader&#x7528;0.1&#x4E2A;A token&#x5206;&#x522B;&#x5728;&#x6C60;&#x5B50;X&#x4E0E;Y&#x5F53;&#x4E2D;&#x5151;&#x6362;B token&#xFF0C;&#x5151;&#x6362;&#x5B8C;&#x4E4B;&#x540E;X&#x5F53;&#x4E2D;&#x6709;1&#x4E2A;A token&#xFF0C;9.09&#x4E2A;B token&#xFF0C;Y&#x5F53;&#x4E2D;&#x6709;10.1&#x4E2A;A token&#xFF0C;99&#x4E2A;B token&#x6B64;&#x65F6;X&#x4E2D;&#x6C47;&#x7387;&#x4E3A;1 A token = 8.26 B token&#xFF0C;Y&#x4E2D;&#x6C47;&#x7387;&#x4E3A;1 Atoken =9.8 B token</p><p>A&#x4EA4;&#x6613;&#x6C60;&#xFF1A;</p><!--kg-card-begin: html--><table>
<thead>
	<tr>
		<th></th>
		<th>A</th>
		<th>B</th>
	</tr>
</thead>
<tbody>
	<tr>
		<td>&#x539F;&#x6709;</td>
		<td>1</td>
		<td>10</td>
	</tr>
	<tr>
		<td>&#x5269;&#x4F59;</td>
		<td>1.1</td>
		<td>9.09</td>
	</tr>
    <tr>
		<td>&#x6C47;&#x7387;</td>
		<td style="text-align:center" colspan="2">1 A token = 8.26 B token</td>
	</tr>
</tbody>
</table><!--kg-card-end: html--><p>B&#x4EA4;&#x6613;&#x6C60;&#xFF1A;</p><!--kg-card-begin: html--><table>
<thead>
	<tr>
		<th></th>
		<th>A</th>
		<th>B</th>
	</tr>
</thead>
<tbody>
	<tr>
		<td>&#x539F;&#x6709;</td>
		<td>10</td>
		<td>100</td>
	</tr>
	<tr>
		<td>&#x5269;&#x4F59;</td>
		<td>10.1</td>
		<td>99</td>
	</tr>
    <tr>
		<td>&#x6C47;&#x7387;</td>
		<td style="text-align:center" colspan="2">1 Atoken  =  9.8 B token</td>
	</tr>
</tbody>
</table><!--kg-card-end: html--><h3 id="3%E3%80%81%E6%B8%85%E7%AE%97">3&#x3001;&#x6E05;&#x7B97;</h3><p>&#x6E05;&#x7B97;&#x662F;&#x4E00;&#x79CD;&#x8D44;&#x4EA7;&#x5904;&#x7406;&#x65B9;&#x5F0F;&#xFF0C;&#x5728;&#x52A0;&#x5BC6;&#x8D27;&#x5E01;&#x9886;&#x57DF;&#xFF0C;&#x6E05;&#x7B97;&#x4E3B;&#x8981;&#x6307;&#x4EA4;&#x6613;&#x8005;&#x6216;&#x8005;&#x8D44;&#x4EA7;&#x501F;&#x8D37;&#x4EBA;&#x5C06;&#x521D;&#x59CB;&#x4FDD;&#x8BC1;&#x91D1;&#x5168;&#x90E8;&#x6216;&#x90E8;&#x5206;&#x5F3A;&#x5236;&#x5E73;&#x4ED3;&#x3002;&#x5F53;&#x4ED6;&#x4EEC;&#x65E0;&#x6CD5;&#x6EE1;&#x8DB3;&#x6760;&#x6746;&#x5BF8;&#x5934;&#x7684;&#x4FDD;&#x8BC1;&#x91D1;&#x8981;&#x6C42;&#x65F6;&#xFF0C;&#x5C31;&#x4F1A;&#x53D1;&#x751F;&#x8FD9;&#x6837;&#x7684;&#x60C5;&#x51B5;&#x3002;</p><p>&#x6BD4;&#x5982;&#xFF1A;<br>&#x2460; ETH 2000 &#x7F8E;&#x91D1;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x6211;&#x4F7F;&#x7528; MakerDAO &#x5B58;&#x5165; 100 ETH&#xFF0C;&#x7406;&#x8BBA;&#x4E0A;&#x6211;&#x53EF;&#x4EE5;&#x501F;&#x51FA; 200,000 &#x7F8E;&#x91D1; (Dai)&#xFF1B;<br>&#x2461; &#x4F46;&#x56E0;&#x4E3A; MakerDAO &#x7684;&#x8BBE;&#x8BA1;&#x673A;&#x5236;&#xFF08;&#x62B5;&#x62BC;&#x54C1;&#x7684;&#x4EF7;&#x503C;&#x8981;&#x5927;&#x4E8E;&#x8D37;&#x6B3E;&#x4EF7;&#x503C;&#xFF09;&#x9700;&#x8981;&#x8D85;&#x8FC7; 150% &#x7684;&#x8D28;&#x62BC;&#x7387;&#xFF08;&#x501F; 1 &#x7F8E;&#x5143;&#x9700;&#x8981;&#x62B5;&#x62BC; 1.5 &#x7F8E;&#x91D1;&#x7684; ETH&#xFF09;&#xFF0C;&#x6765;&#x7EF4;&#x6301; Dai &#x7684;&#x7A33;&#x3002;<br>&#x2462; &#x6240;&#x4EE5;&#x6211;&#x4EEC;&#x6700;&#x591A;&#x53EA;&#x80FD;&#x501F;&#x51FA; 100/1.5*2000 &#x2248; 133,333 &#x7F8E;&#x91D1;&#xFF0C;&#x800C;&#x8FD9;&#x65F6;&#x7684;&#x6E05;&#x7B97;&#x4EF7;&#x683C;&#x5C31;&#x662F; 2000 &#x7F8E;&#x91D1;&#x3002;<br>&#x2463; &#x5982;&#x679C; ETH &#x4EF7;&#x683C;&#x8DCC;&#x7834; 2000 &#x7F8E;&#x91D1;&#xFF0C;&#x4F60;&#x7684; ETH &#x5219;&#x4F1A;&#x88AB;&#x6E05;&#x7B97;&#x6389;&#xFF0C;&#x76F8;&#x5F53;&#x4E8E;&#x4F60;&#x7528; 1333 &#x7F8E;&#x91D1;&#x7684;&#x4EF7;&#x683C;&#x8D2D;&#x4E70;&#x4E86; 100 &#x4E2A; ETH&#x3002;&#xFF08;&#x5F53;&#x7136;&#x4F60;&#x4E5F;&#x53EF;&#x4EE5;&#x5C11;&#x501F;&#x4E00;&#x4E9B; Dai&#xFF0C;&#x6765;&#x964D;&#x4F4E;&#x6E05;&#x7B97;&#x7EBF;&#xFF09;</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th>-</th>
<th>&#x7406;&#x8BBA;&#x4E0A;</th>
<th>&#x5B9E;&#x9645;&#x4E0A;</th>
</tr>
</thead>
<tbody>
<tr>
<td>&#x5B58;&#x5165;</td>
<td>100 ETH</td>
<td>100 ETH</td>
</tr>
<tr>
<td>&#x83B7;&#x5F97;</td>
<td>200,000 Dai</td>
<td>133,333 Dai</td>
</tr>
<tr>
<td>&#x6E05;&#x7B97;&#x4EF7;&#x683C;</td>
<td>133,333 Dai</td>
<td>200,000 Dai</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><p>&#x5982;&#x679C;&#x4F60;&#x60F3;&#x907F;&#x514D; 100 &#x4E2A; &#xA0;ETH &#x5728; 2000 &#x7F8E;&#x91D1;&#x65F6;&#x88AB;&#x6E05;&#x7B97;&#x6389;&#xFF0C;&#x8981;&#x4E48;&#x5728;&#x6E05;&#x7B97;&#x89E6;&#x53D1;&#x4E4B;&#x524D;&#x5C06; 133,333 &#x7F8E;&#x91D1;&#x7684; Dai &#x5F52;&#x8FD8;&#x501F;&#x8D37;&#x7CFB;&#x7EDF;&#xFF08;&#x518D;&#x52A0;&#x4E0A;&#x501F;&#x8D37;&#x7684;&#x8D39;&#x7528;&#xFF09;&#xFF0C;&#x8981;&#x4E48;&#x5C31;&#x7EE7;&#x7EED;&#x8D28;&#x62BC;&#x66F4;&#x591A;&#x7684; ETH&#xFF0C;&#x964D;&#x4F4E;&#x6E05;&#x7B97;&#x7EBF;&#x3002;</p><p>&#x5F53;&#x62B5;&#x62BC;&#x54C1;&#x4EF7;&#x683C;&#x6301;&#x7EED;&#x4E0A;&#x6DA8;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x4F60;&#x53EF;&#x4EE5;&#x501F;&#x51FA;&#x8D8A;&#x6765;&#x8D8A;&#x591A;&#x7684;&#x94B1;&#xFF0C;&#x800C;&#x5F53;&#x62B5;&#x62BC;&#x54C1;&#x4EF7;&#x683C;&#x4E0B;&#x8DCC;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x5219;&#x4F1A;&#x4E0D;&#x65AD;&#x589E;&#x52A0;&#x62B5;&#x62BC;&#x8D44;&#x4EA7;&#x88AB;&#x6E05;&#x7B97;&#x7684;&#x98CE;&#x9669;&#x3002;&#x5982;&#x679C;&#x60F3;&#x964D;&#x4F4E;&#x98CE;&#x9669;&#xFF0C;&#x5219;&#x9700;&#x8981;&#x901A;&#x8FC7;&#x8865;&#x4ED3;&#x964D;&#x4F4E;&#x6E05;&#x7B97;&#x98CE;&#x9669;&#xFF0C;&#x6216;&#x63D0;&#x524D;&#x5E73;&#x4ED3;&#xFF0C;&#x907F;&#x514D;&#x5F3A;&#x5236;&#x5E73;&#x4ED3;&#xFF08;&#x6E05;&#x7B97;&#xFF09;&#x7684;&#x51FA;&#x73B0;&#x3002;</p><h3 id="4%E3%80%81%E6%97%A0%E5%81%BF%E6%8D%9F%E5%A4%B1">4&#x3001;&#x65E0;&#x507F;&#x635F;&#x5931;</h3><p>&#x65E0;&#x5E38;&#x635F;&#x5931;&#x662F;&#x6307;&#x5411;&#x53CC;&#x8FB9;&#x6C60;&#x6CE8;&#x5165;&#x6D41;&#x52A8;&#x6027;&#x540E;&#xFF0C;&#x6240;&#x5B58;&#x7684;&#x4EE3;&#x5E01;&#x603B;&#x4EF7;&#x503C;&#x76F8;&#x8F83;&#x4E8E;&#x5B58;&#x6B3E;&#x4E4B;&#x524D;&#x4EE3;&#x5E01;&#x603B;&#x4EF7;&#x503C;&#x7684;&#x5DEE;&#x503C;&#x3002;&#x7B80;&#x5355;&#x6765;&#x8BF4;&#x5C31;&#x662F;&#xFF0C;&#x6211;&#x6CE8;&#x5165;&#x6D41;&#x52A8;&#x6027;&#x540E;&#x8D5A;&#x7684;&#x94B1;&#xFF0C;&#x8FD8;&#x6CA1;&#x6709;&#x6211;&#x4E0D;&#x6CE8;&#x5165;&#x6D41;&#x52A8;&#x6027;&#x8D5A;&#x7684;&#x591A;&#x3002;</p><p>&#x5177;&#x4F53;&#x53EF;&#x4EE5;&#x53C2;&#x8003;&#x672C;&#x7BC7;&#x6587;&#x7AE0;&#xFF1A;<a href="https://blog.bancor.network/beginners-guide-to-getting-rekt-by-impermanent-loss-7c9510cb2f22">&#x65E0;&#x5E38;&#x635F;&#x5931;&#xFF08;&#x83B7;&#x5F97; Rekt &#x7684;&#xFF09;&#x521D;&#x5B66;&#x8005;&#x6307;&#x5357; |&#x7531; Nate Hindman |&#x73ED;&#x79D1;&#x5C14; (bancor.network)</a></p><p>&#x53C2;&#x8003;&#x89C6;&#x9891;&#xFF1A;<a href="https://www.youtube.com/watch?v=pkv9Age20Z8&amp;t=470s">&#x5927;&#x4F6C;&#x4EEC;&#x53E3;&#x4E2D;&#x7684;&#x65E0;&#x5E38;&#x635F;&#x5931;&#x662F;&#x4EC0;&#x4E48;&#xFF1F;&#x73A9;UniSwap&#x505A;&#x5E02;&#x5546;&#x4E3A;&#x4EC0;&#x4E48;&#x4F1A;&#x4E8F;&#x94B1;&#xFF1F;&#xFF08;&#x7B2C;170&#x671F;&#xFF09; (youtube.com)</a></p><h3 id="5%E3%80%81apy-%E4%B8%8E-apr">5&#x3001;APY &#x4E0E; APR</h3><p>APR (Annual Percentage Rate, &#x7A33;&#x5B9A;&#x5E74;&#x56DE;&#x62A5;&#x7387;)&#xFF0C;&#x6307;&#x5728;&#x8FDB;&#x884C;&#x4E00;&#x7B14;&#x6295;&#x8D44;&#x65F6;&#xFF0C;&#x4E0D;&#x8003;&#x8651;&#x590D;&#x5229;&#xFF08;&#x5C06;&#x5229;&#x6DA6;&#x8FDB;&#x884C;&#x590D;&#x6295;&#xFF09;&#x7684;&#x5E74;&#x6536;&#x76CA;&#x3002;</p><p>APY (Annual Percentage Yield&#xFF0C;&#x590D;&#x5229;&#x5E74;&#x6536;&#x76CA;&#x7387;)&#xFF0C;&#x6307;&#x5728;&#x8FDB;&#x884C;&#x4E00;&#x7B14;&#x6295;&#x8D44;&#x65F6;&#xFF0C;&#x8003;&#x8651;&#x590D;&#x5229;&#x7684;&#x5E74;&#x6536;&#x76CA;&#x3002;</p><p>APR &#x7684;&#x8BA1;&#x7B97;&#x516C;&#x5F0F;&#x975E;&#x5E38;&#x7B80;&#x5355;&#xFF0C;APR = &#x65E5;&#x5229;&#x7387; * &#x6295;&#x8D44;&#x5929;&#x6570;</p><p>APY &#x5219;&#x76F8;&#x5BF9;&#x590D;&#x6742;&#x4E00;&#x70B9;&#xFF0C;&#x56E0;&#x4E3A;&#x8981;&#x8003;&#x8651;&#x590D;&#x5229;&#x7684;&#x60C5;&#x51B5;&#xFF0C;APY = (1 + &#x65E5;&#x5229;&#x7387;) ^ (&#x6295;&#x8D44;&#x5929;&#x6570; - 1)</p><p>&#x6BD4;&#x5982;&#x6211;&#x6295;&#x8D44;&#x4E86; 100 &#x5143;&#xFF0C;&#x5206;&#x522B;&#x6295;&#x8D44; APR &#x548C; APY &#x65E5;&#x5229;&#x7387;&#x4E3A; 1% &#x7684;&#x6295;&#x8D44;&#x54C1;&#xFF0C;&#x90A3;&#x4E48;&#x4E00;&#x5E74;&#x4E0B;&#x6765;&#x6211;&#x6700;&#x7EC8;&#x53EF;&#x4EE5;&#x83B7;&#x5F97;&#xFF1A;</p><p>APR&#xFF1A;100 * 1% * 365 = 365 &#x5143;</p><p>APY&#xFF1A;100 * (1 + 1%) ^ (365 - 1) &#x2248; 3740 &#x5143;</p><p>&#x4E5F;&#x5C31;&#x662F;&#x8BF4;&#x65E5;&#x5229;&#x7387;&#x4E3A; 1 % &#x7684; APR &#x5E74;&#x534E;&#x6536;&#x76CA;&#x4E3A; 365%&#xFF0C;&#x800C;&#x65E5;&#x5229;&#x7387;&#x4E3A; 1% &#x7684; APY &#x5E74;&#x534E;&#x6536;&#x76CA;&#x5219;&#x4E3A; 3740%&#xFF0C;&#x7ADF;&#x7136;&#x6536;&#x76CA;&#x76F8;&#x5DEE; 10 &#x500D;&#xFF0C;&#x662F;&#x4E0D;&#x662F;&#x770B;&#x4E0A;&#x53BB;&#x5F88;&#x5413;&#x4EBA;&#xFF0C;&#x4E0D;&#x8FC7;&#x8FD9;&#x91CC;&#x662F;&#x6709;&#x5751;&#x70B9;&#x7684;&#x3002;</p><p>&#x5728; DeFi &#x4E2D;&#xFF0C;&#x6211;&#x4EEC;&#x7ECF;&#x5E38;&#x4F1A;&#x770B;&#x5230;&#x4E0A;&#x5343;&#x7684;&#x5E74;&#x534E;&#x6536;&#x76CA;&#xFF0C;&#x5C31;&#x50CF;&#x6211;&#x4E0A;&#x8FB9;&#x4E3E;&#x7684;&#x4F8B;&#x5B50;&#xFF0C;1% &#x7684;&#x65E5;&#x5229;&#x7387;&#xFF0C;&#x590D;&#x6295;&#x4E00;&#x5E74;&#x4E0B;&#x6765;&#x4E5F;&#x6709; 3740% &#x7684; APY&#x3002;&#x4F46;&#x8FD9;&#x91CC;&#x9700;&#x8981;&#x6CE8;&#x610F;&#x4E24;&#x79CD;&#x60C5;&#x51B5;&#xFF1A;</p><ol><li>&#x662F;&#x5426;&#x771F;&#x7684;&#x5B58;&#x5728;&#x7A33;&#x5B9A;&#x7684;&#x65E5;&#x5229;&#x7387;&#xFF1F;</li><li>&#x6536;&#x76CA;&#x662F;&#x5426;&#x6309;&#x7167;&#x6295;&#x8D44;&#x7684;&#x8D27;&#x5E01;&#x6216;&#x8005;&#x7A33;&#x5B9A;&#x5E01;&#x6765;&#x8BA1;&#x7B97;&#xFF1F;</li></ol><p>&#x51E0;&#x4E4E;&#x6240;&#x6709;&#x7684; DeFi &#x6536;&#x76CA;&#x90FD;&#x662F;&#x6CE2;&#x52A8;&#x7684;&#xFF0C;&#x6BD4;&#x5982;&#x4F60;&#x770B;&#x5230;&#x4E00;&#x4E2A; DeFi &#x534F;&#x8BAE;&#x544A;&#x8BC9;&#x4F60; APY &#x5E74;&#x534E;&#x6709; 3740%&#xFF0C;&#x53EF;&#x80FD;&#x53EA;&#x6709;&#x4ECA;&#x5929;&#x7684;&#x65E5;&#x5229;&#x7387;&#x662F; 1%&#xFF0C;&#x968F;&#x7740;&#x53C2;&#x4E0E;&#x4EBA;&#x6570;&#x4E0D;&#x65AD;&#x589E;&#x591A;&#xFF0C;&#x5956;&#x52B1;&#x88AB;&#x7A00;&#x91CA;&#xFF0C;&#x53EF;&#x80FD;&#x660E;&#x5929;&#x7684;&#x65E5;&#x5229;&#x7387;&#x5C31;&#x964D;&#x5230; 0.1%&#xFF0C;&#x540E;&#x5929;&#x5C31;&#x964D;&#x5230;&#x4E86; 0.01%&#xFF0C;&#x5E76;&#x4E14;&#x6301;&#x7EED;&#x51CF;&#x5C11;&#xFF0C;&#x6700;&#x540E;&#x7684; APY &#x53EA;&#x6709; 4% &#x5DE6;&#x53F3;&#x3002;</p><p>&#x6B64;&#x5916;&#xFF0C;&#x8FD8;&#x6709;&#x4E00;&#x4E9B; DeFi &#x9879;&#x76EE;&#x7684;&#x6536;&#x76CA;&#x5E76;&#x4E0D;&#x662F;&#x6309;&#x7167;&#x7A33;&#x5B9A;&#x5E01;&#x6216;&#x8005;&#x4F60;&#x6295;&#x5165;&#x7684;&#x4EE3;&#x5E01;&#x8BA1;&#x7B97;&#x7684;&#x3002;&#x6BD4;&#x5982;&#x4F60;&#x770B;&#x5230;&#x4E00;&#x4E2A; APY &#x4E3A; 1000% &#x7684;&#x9879;&#x76EE;&#xFF0C;&#x9700;&#x8981;&#x8D28;&#x62BC; ETH&#xFF0C;&#x4F46;&#x6BCF;&#x65E5;&#x7ED9;&#x4F60;&#x7684;&#x6536;&#x76CA;&#x662F; shitcoin&#xFF08;&#x4E00;&#x79CD;&#x4EF7;&#x683C;&#x6CE2;&#x52A8;&#x975E;&#x5E38;&#x5927;&#x7684;&#x4EE3;&#x5E01;&#xFF0C;&#x751A;&#x81F3;&#x6709;&#x53EF;&#x80FD;&#x5F52;&#x96F6;&#xFF09;&#x3002;</p><p>&#x4E0D;&#x8FC7;&#xFF0C;&#x5728; UniswapV3 &#x4E2D;&#x53EA;&#x80FD;&#x4F7F;&#x7528; APR&#xFF0C;&#x56E0;&#x4E3A;&#x6D41;&#x52A8;&#x6027;&#x6CE8;&#x5165;&#x8005;&#x7684;&#x6536;&#x76CA;&#x662F;&#x5355;&#x72EC;&#x8BA1;&#x7B97;&#x7684;&#xFF0C;&#x5E76;&#x4E0D;&#x4F1A;&#x8FDB;&#x884C;&#x590D;&#x5229;&#x6295;&#x8D44;&#x3002;</p><h3 id="6%E3%80%81-tvl">6&#x3001; TVL</h3><blockquote>TVL&#xFF08;Total Value Locked&#xFF09; &#x603B;&#x9501;&#x5B9A;&#x4EF7;&#x503C;&#xFF0C;&#x6307; DeFi &#x9879;&#x76EE;&#x4E2D;&#x7528;&#x6237;&#x6240;&#x5B58;&#x50A8;&#x6216;&#x62B5;&#x62BC;&#x7684;&#x6570;&#x5B57;&#x8D44;&#x4EA7;&#x603B;&#x4EF7;&#x503C;&#x3002;&#x901A;&#x5E38;&#x89C6;&#x60C5;&#x51B5;&#x4EE5;&#x7F8E;&#x5143;&#x6216;&#x5176;&#x4ED6;&#x6CD5;&#x5E01;&#x8BA1;&#x4EF7;&#x3002;</blockquote><p>DeFi &#x7684;&#x91CD;&#x8981;&#x8FD0;&#x8F6C;&#x65B9;&#x5F0F;&#x4E3B;&#x8981;&#x56F4;&#x7ED5;&#x7528;&#x6237;&#x8D28;&#x62BC;&#x501F;&#x8D37;&#x6216;&#x6CE8;&#x5165;&#x6D41;&#x52A8;&#x6027;&#x5C55;&#x5F00;&#xFF0C;&#x8FD9;&#x8981;&#x6C42;&#x7528;&#x6237;&#x5C06;&#x8D44;&#x91D1;&#x8D28;&#x62BC;&#x6216;&#x5B58;&#x5165;&#x5728; DeFi &#x9879;&#x76EE;&#x65B9;&#x7684;&#x667A;&#x80FD;&#x5408;&#x7EA6;&#x5F53;&#x4E2D;&#x3002;&#x6240;&#x4EE5; TVL &#x8868;&#x660E;&#x4E86;&#x8D44;&#x672C;&#x5BF9; DeFi &#x4EA4;&#x6613;&#x8005;&#x548C;&#x6295;&#x8D44;&#x8005;&#x7684;&#x5229;&#x6DA6;&#x548C;&#x53EF;&#x7528;&#x6027;&#x5F71;&#x54CD;&#x3002;</p><ol><li>&#x66F4;&#x597D;&#x7684;&#x5B89;&#x5168;&#x6027;&#x7531;&#x4E8E;&#x66F4;&#x9AD8;&#x7684; TVL &#x610F;&#x5473;&#x7740;&#x66F4;&#x591A;&#x7684;&#x8D44;&#x672C;&#x9501;&#x5B9A;&#x5728; DeFi &#x534F;&#x8BAE;&#x4E2D;&#xFF0C;&#x901A;&#x5E38;&#xFF08;&#x76F8;&#x5BF9;&#xFF09;&#x610F;&#x5473;&#x7740; DeFi &#x534F;&#x8BAE;&#x66F4;&#x52A0;&#x5B89;&#x5168;&#x3002;&#x5982;&#x679C;&#x6211;&#x4EEC;&#x53D1;&#x73B0;&#x4E00;&#x4E2A; DeFi &#x5E73;&#x53F0;&#x6709;&#x8F83;&#x9AD8;&#x7684; APY&#xFF0C;&#x4F46; TVL &#x76F8;&#x5BF9;&#x8F83;&#x4F4E;&#xFF0C;&#x90A3;&#x4E48;&#x8BE5;&#x5E73;&#x53F0;&#x6709;&#x53EF;&#x80FD;&#x662F;&#x91CE;&#x9E21;&#x5E73;&#x53F0;&#xFF0C;&#x5E76;&#x968F;&#x65F6;&#x6709;&#x53EF;&#x80FD; Rug pull&#x3002;</li><li>&#x66F4;&#x597D;&#x7684;&#x53EF;&#x7528;&#x6027;&#x6240;&#x8C13;&#x7684;&#x53EF;&#x7528;&#x6027;&#xFF0C;&#x6BD4;&#x5982;&#x4E00;&#x4E2A; DEX &#x6C60;&#x5B50;&#x6DF1;&#x5EA6;&#x8F83;&#x597D;&#xFF0C;&#x5219;&#x4EA4;&#x6613;&#x4EF7;&#x683C;&#x4E5F;&#x4F1A;&#x8F83;&#x597D;&#x3002;&#x518D;&#x6BD4;&#x5982;&#x8D28;&#x62BC;&#x501F;&#x8D37;&#x534F;&#x8BAE;&#x4E2D;&#xFF0C;&#x5982;&#x679C;&#x67D0;&#x4E2A;&#x4EE3;&#x5E01;&#x7684; TVL &#x8F83;&#x9AD8;&#xFF0C;&#x90A3;&#x4E48;&#x501F;&#x8D37;&#x5229;&#x7387;&#x4E5F;&#x4F1A;&#x8F83;&#x4F4E;&#x3002;</li><li>&#x66F4;&#x597D;&#x7684;&#x6D41;&#x52A8;&#x6027;TVL &#x66F4;&#x597D;&#x7684;&#x9879;&#x76EE;&#x5F80;&#x5F80;&#x5177;&#x6709;&#x66F4;&#x597D;&#x7684;&#x6D41;&#x52A8;&#x6027;&#xFF0C;&#x4E0D;&#x5BB9;&#x6613;&#x9047;&#x5230;&#x6D41;&#x52A8;&#x6027;&#x67AF;&#x7AED;&#x3002;</li><li>&#x66F4;&#x597D;&#x7684;&#x4F20;&#x64AD;&#x5EA6;&#x7531;&#x4E8E; TVL &#x662F;&#x8861;&#x91CF;&#x4E00;&#x4E2A; DeFi &#x9879;&#x76EE;&#x7684;&#x91CD;&#x8981;&#x6307;&#x6807;&#xFF0C;&#x6240;&#x4EE5; TVL &#x8F83;&#x9AD8;&#x7684;&#x9879;&#x76EE;&#xFF0C;&#x4E5F;&#x4F1A;&#x83B7;&#x5F97; DeFi &#x4ECE;&#x4E1A;&#x8005;&#x6216;&#x884C;&#x4E1A;&#x7684;&#x66F4;&#x591A;&#x5173;&#x6CE8;&#xFF0C;&#x4ECE;&#x800C;&#x5E26;&#x6765;&#x66F4;&#x591A;&#x7684;&#x66DD;&#x5149;&#x5EA6;&#x548C;&#x4F20;&#x64AD;&#x5EA6;&#x3002;</li></ol><p>&#x8FD9;&#x662F;&#x4EE5;&#x592A;&#x574A;&#x4ECE; 2023 &#x5E74; 3 &#x6708;&#x5230; 2024 &#x5E74; 3 &#x6708;&#x7684;&#x4E00;&#x4E2A; TVL&#xFF0C;&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x770B;&#x5230;&#x5B83;&#x7684;&#x8D8B;&#x52BF;&#x90FD;&#x662F;&#x76F8;&#x5BF9;&#x5E73;&#x7A33;&#x7684;&#x3002;</p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/05/image-3.png" class="kg-image" alt loading="lazy" width="1572" height="460"></figure><p>&#x8FD9;&#x91CC;&#x653E;&#x4E00;&#x5F20;&#x5BF9;&#x6BD4;&#x56FE;&#xFF0C;&#x6211;&#x4EEC;&#x5C31;&#x53EF;&#x4EE5;&#x53D1;&#x73B0;&#x5E02;&#x573A;&#x5BF9;&#x4E8E;&#x65B0;&#x94FE;&#x53D1;&#x5C55;&#x7684;&#x4E00;&#x4E2A;&#x8D8B;&#x52BF;&#x3002;</p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/05/image-4.png" class="kg-image" alt loading="lazy" width="1563" height="459"></figure><h3 id="7%E3%80%81%E4%BB%B7%E5%80%BC%E6%8D%95%E8%8E%B7">7&#x3001;&#x4EF7;&#x503C;&#x6355;&#x83B7;</h3><p>&#x5728;&#x533A;&#x5757;&#x94FE;&#x4E2D;&#xFF0C;&#x4EF7;&#x503C;&#x6355;&#x83B7;&#x53EF;&#x4EE5;&#x7B80;&#x5355;&#x7406;&#x89E3;&#x4E3A;&#x300C;&#x9879;&#x76EE;&#x65B9;&#xFF08;&#x516C;&#x94FE;&#x3001;DeFi &#x7B49;&#xFF09;&#x4ECE;&#x7528;&#x6237;&#x4EA4;&#x6613;&#x884C;&#x4E3A;&#x4E2D;&#x83B7;&#x53D6;&#x5546;&#x4E1A;&#x5229;&#x6DA6;&#x7684;&#x624B;&#x6BB5;&#x300D;&#x3002;&#x800C;&#x4EF7;&#x503C;&#x6355;&#x83B7;&#x624B;&#x6BB5;&#x662F;&#x5426;&#x5065;&#x5EB7;&#x3001;&#x826F;&#x6027;&#x5219;&#x4E00;&#x822C;&#x4F1A;&#x4F53;&#x73B0;&#x5728;&#x5E01;&#x4EF7;&#x4E0A;&#x3002;&#x6240;&#x4EE5;&#x53BB;&#x8861;&#x91CF;&#x4E00;&#x4E2A;&#x9879;&#x76EE;&#x7684;&#x4EF7;&#x503C;&#x6216;&#x4F30;&#x503C;&#xFF0C;&#x5C24;&#x5176;&#x662F; DeFi&#xFF0C;&#x4F1A;&#x5F80;&#x5F80;&#x7814;&#x7A76;&#x5176;&#x4EF7;&#x503C;&#x6355;&#x83B7;&#x65B9;&#x5F0F;&#x3002;&#x800C;&#x5BF9;&#x4E8E;&#x4EA4;&#x6613;&#x884C;&#x4E3A;&#xFF0C;&#x6700;&#x76F4;&#x63A5;&#x7684;&#x4EF7;&#x503C;&#x6355;&#x83B7;&#x624B;&#x6BB5;&#x5219;&#x662F;&#x624B;&#x7EED;&#x8D39;&#xFF0C;&#x6BD4;&#x5982;&#xFF1A;</p><ol><li>Layer1 &#x2192; &#x77FF;&#x5DE5;&#x8D39;&#xFF1B;</li><li>DeFi &#x2192; &#x501F;&#x8D37;&#x5206;&#x6DA6;&#xFF1B;</li><li>CEX/DEX &#x2192; &#x4EA4;&#x6613;&#x624B;&#x7EED;&#x8D39;&#xFF1B;</li></ol><!--kg-card-begin: markdown--><hr>
<!--kg-card-end: markdown--><p><strong><em>&#x53C2;&#x8003;&#x8D44;&#x6599;&#xFF1A;</em></strong></p><p><em>1&#x3001;<a href="https://www.bilibili.com/video/BV12v4y1K75B/?spm_id_from=333.337.search-card.all.click&amp;vd_source=6e2f6be95b1505776bf456848f7a47fa">&#x3010;Web3 DeFi&#x3011;Uniswap &#x5FEB;&#x901F;&#x5165;&#x95E8;_bilibili</a></em></p><p><em>2&#x3001;<a href="https://mirror.xyz/0x254177E05aC241aadc1f1a9523C23FF80a0f5d43/EbJObBMj2CKigWzlDpcWn7VtUW7YIXlYXE_NPYhJn-Q">DeFi &#x70ED;&#x70B9;&#x8BCD;&#x6C47;&#x8BE6;&#x89E3;</a></em></p><!--kg-card-begin: markdown--><hr>
<!--kg-card-end: markdown--><p><strong><em>&#x5DE5;&#x5177;&#xFF1A;</em></strong></p><p><em>1&#x3001;Parsec&#xFF1A;<a href="https://parsec.finance/%EF%BC%8C" rel="noreferrer">https://parsec.finance/&#xFF0C;</a> &#x53EF;&#x4EE5;&#x6E05;&#x6670;&#x7684;&#x770B;&#x5230; ETH &#x4EF7;&#x683C;&#x53D8;&#x52A8;&#x4F1A;&#x89E6;&#x53D1;&#x7684;&#x6E05;&#x7B97;&#x6570;&#x91CF;&#x3002;</em></p><p><em>2&#x3001;&#x6B27;&#x79D1;&#x4E91;&#x94FE;&#xFF1A;<a href="https://www.oklink.com/zh-cn/chainhub/protocols/DeFi" rel="noreferrer">https://www.oklink.com/zh-cn/chainhub/protocols/DeFi</a>&#xFF0C;&#x53EF;&#x4EE5;&#x770B;&#x5230; Maker &#x7684;&#x603B;&#x501F;&#x6B3E;&#x91CF;&#x548C;&#x65E5;&#x6E05;&#x7B97;&#x91CF;&#x7B49;&#x6570;&#x636E;&#x3002;</em></p><p><em>3&#x3001;Dune&#xFF1A; <a href="https://dune.com/dsalv/Liquidations" rel="noreferrer">https://dune.com/dsalv/Liquidations</a>&#xFF0C;&#x53EF;&#x4EE5;&#x770B;&#x5230;&#x8FC7;&#x53BB;&#x4E00;&#x6BB5;&#x65F6;&#x95F4; Maker&#xFF0C;AAve &#x548C; Compound &#x7684;&#x6E05;&#x7B97;&#x60C5;&#x51B5;</em></p><p><em>4&#x3001;<strong><strong>&#x8BA1;&#x7B97;&#x65E0;&#x5E38;&#x635F;&#x5931;&#x7684;&#x5DE5;&#x5177;</strong></strong></em></p><ul><li><em><a href="https://poolgenie.xyz/" rel="noreferrer">https://poolgenie.xyz/</a> &#x67E5;&#x770B; AMM DEX &#x4E0D;&#x540C;&#x6C60;&#x5B50;&#x8FC7;&#x53BB;&#x4E03;&#x5929;&#x7684;&#x65E0;&#x5E38;&#x635F;&#x5931;&#x60C5;&#x51B5;</em></li><li><em><a href="https://decentyields.com/impermanent-loss-calculator" rel="noreferrer">https://decentyields.com/impermanent-loss-calculator</a> &#x65E0;&#x5E38;&#x635F;&#x5931;&#x8BA1;&#x7B97;&#x6A21;&#x62DF;</em></li><li><em><a href="https://www.impermanent-loss-calculator.net/" rel="noreferrer">https://www.impermanent-loss-calculator.net/</a></em></li><li><em><a href="https://impermanentloss.github.io/calculator/" rel="noreferrer">https://impermanentloss.github.io/calculator/</a></em></li><li><em><a href="https://dailydefi.org/tools/impermanent-loss-calculator/" rel="noreferrer">https://dailydefi.org/tools/impermanent-loss-calculator/</a></em></li></ul><p><em>5&#x3001;&#x67E5;&#x770B;TVL&#x7684;&#x5DE5;&#x5177;</em></p><ul><li><em><a href="https://defillama.com/" rel="noreferrer">https://defillama.com/</a> &#x591A;&#x94FE; TVL &#x67E5;&#x770B;&#x5DE5;&#x5177;</em></li><li><em><a href="https://www.defipulse.com/" rel="noreferrer">https://www.defipulse.com/</a> &#x4EE5;&#x592A;&#x574A; DeFi TVL &#x67E5;&#x770B;&#x5DE5;&#x5177;</em></li><li><em><a href="https://tokenterminal.com/" rel="noreferrer">https://tokenterminal.com/</a> &#x4E13;&#x4E1A;&#x4E14;&#x8BE6;&#x7EC6;&#x7684; DeFi &#x6570;&#x636E;&#x8DDF;&#x8E2A;&#x5DE5;&#x5177;</em></li><li><em><a href="https://coindix.com/" rel="noreferrer">https://coindix.com/</a> &#x67E5;&#x770B;&#x591A;&#x6761;&#x516C;&#x94FE;&#x4E0A;&#x5404;&#x81EA;&#x4EE3;&#x5E01;&#x7684; TVL</em></li></ul>]]></content:encoded></item><item><title><![CDATA[account]]></title><description><![CDATA[<blockquote>&#x5728; Go-Ethereum &#x6E90;&#x4EE3;&#x7801;&#x4E2D;&#x7684; account&#x6587;&#x4EF6;&#x5939;&#x5305;&#x542B;&#x4E0E;&#x4EE5;&#x592A;&#x574A;&#x8D26;&#x6237;&#x7BA1;&#x7406;&#x76F8;&#x5173;&#x7684;&#x529F;&#x80FD;&#x3002;<br>&#x4EE5;&#x592A;&#x574A;&#x7684;&#x94B1;&#x5305;&#x63D0;&#x4F9B;&#x4E86; keyStore &#x6A21;&#x5F0F; &#x3001;usb&#x4E24;&#x79CD;&#x94B1;&#x5305;&#x3002;<br>&#x4EE5;&#x592A;&#x574A;&#x5408;</blockquote>]]></description><link>https://www.thinkingsolidity.com/account/</link><guid isPermaLink="false">65964dba903d7005b686fefb</guid><category><![CDATA[ethereum源码分析]]></category><dc:creator><![CDATA[Echo_留蝉]]></dc:creator><pubDate>Thu, 04 Jan 2024 09:33:41 GMT</pubDate><content:encoded><![CDATA[<blockquote>&#x5728; Go-Ethereum &#x6E90;&#x4EE3;&#x7801;&#x4E2D;&#x7684; account&#x6587;&#x4EF6;&#x5939;&#x5305;&#x542B;&#x4E0E;&#x4EE5;&#x592A;&#x574A;&#x8D26;&#x6237;&#x7BA1;&#x7406;&#x76F8;&#x5173;&#x7684;&#x529F;&#x80FD;&#x3002;<br>&#x4EE5;&#x592A;&#x574A;&#x7684;&#x94B1;&#x5305;&#x63D0;&#x4F9B;&#x4E86; keyStore &#x6A21;&#x5F0F; &#x3001;usb&#x4E24;&#x79CD;&#x94B1;&#x5305;&#x3002;<br>&#x4EE5;&#x592A;&#x574A;&#x5408;&#x7EA6;&#x7684; ABI &#x7684;&#x4EE3;&#x7801;&#x4E5F;&#x653E;&#x5728;&#x4E86; account/abi &#x76EE;&#x5F55;&#x3002;</blockquote><h3 id="%E4%B8%80%E3%80%81accounts%E6%94%AF%E6%8C%81%E7%9A%84%E9%92%B1%E5%8C%85%E7%B1%BB%E5%9E%8B">&#x4E00;&#x3001;accounts&#x652F;&#x6301;&#x7684;&#x94B1;&#x5305;&#x7C7B;&#x578B;</h3><p>&#x5728;accounts&#x4E2D;&#x603B;&#x5171;&#x652F;&#x6301;&#x4E24;&#x5927;&#x7C7B;&#x5171;3&#x79CD;&#x94B1;&#x5305;&#x7C7B;&#x578B;&#x3002;</p><!--kg-card-begin: html--><table border="1">
    <thead>
        <tr>
            <th colspan="2">keystore</th>
            <th colspan="2">usbwallet</th>
          
        </tr>
    </thead>
    <tr>
        <td>&#x79C1;&#x94A5;&#x52A0;&#x5BC6;&#x5B58;&#x50A8;</td>
        <td>&#x79C1;&#x94A5;&#x660E;&#x6587;&#x5B58;&#x50A8;</td>
        <td>ledger</td>
        <td>trenzer</td>
    </tr>
    
</table><!--kg-card-end: html--><ol><li><strong>keystore&#xFF1A;&#x672C;&#x5730;&#x6587;&#x4EF6;&#x5939;</strong></li></ol><!--kg-card-begin: markdown--><ul>
<li>keystore &#x7C7B;&#x578B;&#x7684;&#x94B1;&#x5305;&#x5176;&#x5B9E;&#x662F;&#x4E00;&#x4E2A;&#x672C;&#x5730;&#x6587;&#x4EF6;&#x5939;&#x76EE;&#x5F55;&#x3002;&#x5728;&#x8FD9;&#x4E2A;&#x76EE;&#x5F55;&#x4E0B;&#x53EF;&#x4EE5;&#x5B58;&#x653E;&#x591A;&#x4E2A;&#x6587;&#x4EF6;&#xFF0C;&#x6BCF;&#x4E2A;&#x6587;&#x4EF6;&#x90FD;&#x5B58;&#x50A8;&#x7740;&#x4E00;&#x4E2A;&#x79C1;&#x94A5;&#x4FE1;&#x606F;&#x3002;&#x8FD9;&#x4E9B;&#x6587;&#x4EF6;&#x90FD;&#x662F;json&#x683C;&#x5F0F;&#xFF0C;&#x5176;&#x4E2D;&#x7684;&#x79C1;&#x94A5;&#x53EF;&#x4EE5;&#x662F;&#x52A0;&#x5BC6;&#x7684;&#xFF0C;&#x4E5F;&#x53EF;&#x4EE5;&#x662F;&#x975E;&#x52A0;&#x5BC6;&#x7684;&#x660E;&#x6587;&#x3002;&#x4F46;&#x975E;&#x52A0;&#x5BC6;&#x7684;&#x683C;&#x5F0F;&#x5DF2;&#x7ECF;&#x88AB;&#x5E9F;&#x5F03;&#x4E86;&#x3002;</li>
<li>keystore&#x7684;&#x76EE;&#x5F55;&#x8DEF;&#x5F84;&#x53EF;&#x4EE5;&#x5728;&#x914D;&#x7F6E;&#x6587;&#x4EF6;&#x4E2D;&#x6307;&#x5B9A;&#xFF0C;&#x9ED8;&#x8BA4;&#x8DEF;&#x5F84;&#x662F;/keystore&#x3002;</li>
<li>keystore&#x4E2D;&#x7684;&#x6BCF;&#x4E00;&#x4E2A;&#x6587;&#x4EF6;&#x6709;&#x56FA;&#x5B9A;&#x6587;&#x4EF6;&#x547D;&#x540D;&#x683C;&#x5F0F;&#xFF1A;UTC--&lt;created_at UTC ISO8601&gt;--&#x3002;</li>
<li>keystore&#x76EE;&#x5F55;&#x548C;&#x76EE;&#x5F55;&#x5185;&#x7684;&#x6587;&#x4EF6;&#x662F;&#x53EF;&#x4EE5;&#x76F4;&#x63A5;&#x62F7;&#x8D1D;&#x5230;&#x5176;&#x5B83;&#x7535;&#x8111;&#x7684;keystore&#x76EE;&#x5F55;&#x3002;</li>
</ul>
<!--kg-card-end: markdown--><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/01/image.png" class="kg-image" alt loading="lazy" width="746" height="385"></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.thinkingsolidity.com/content/images/2024/01/image-3.png" class="kg-image" alt loading="lazy" width="1027" height="580"><figcaption>json&#x683C;&#x5F0F;&#x7684;&#x79C1;&#x94A5;&#x4FE1;&#x606F;</figcaption></figure><h3 id="2%E3%80%81hd%EF%BC%9A%E5%88%86%E5%B1%82%E7%A1%AE%E5%AE%9A%E6%80%A7%EF%BC%88hierarchical-deterministic%EF%BC%89%E9%92%B1%E5%8C%85">2&#x3001;HD&#xFF1A;&#x5206;&#x5C42;&#x786E;&#x5B9A;&#x6027;&#xFF08;Hierarchical Deterministic&#xFF09;&#x94B1;&#x5305;</h3><blockquote>&#x8FD9;&#x4E2A;&#x6982;&#x5FF5;&#x7684;&#x4E2D;&#x6587;&#x540D;&#x79F0;&#x53EB;&#x505A;&#x201C;&#x5206;&#x5C42;&#x786E;&#x5B9A;&#x6027;&#x201D;&#xFF0C;&#x8FD9;&#x662F;&#x4E00;&#x79CD; key&#x7684;&#x6D3E;&#x751F;&#x65B9;&#x5F0F;&#xFF0C;&#x5B83;&#x53EF;&#x4EE5;&#x5728;&#x53EA;&#x4F7F;&#x7528;&#x4E00;&#x4E2A;&#x4E3B;&#x516C;&#x94A5;&#x7684;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;&#x751F;&#x6210;&#x4EFB;&#x610F;&#x591A;&#x4E2A;&#x5B50;&#x516C;&#x94A5;&#xFF0C;&#x800C;&#x8FD9;&#x4E9B;&#x5B50;&#x516C;&#x94A5;&#x90FD;&#x662F;&#x53EF;&#x4EE5;&#x88AB;&#x4E3B;&#x79C1;&#x94A5;&#x63A7;&#x5236;&#x7684;&#x3002;<br>HD&#x7684;&#x6982;&#x5FF5;&#x6700;&#x65E9;&#x662F;&#x4ECE;&#x6BD4;&#x7279;&#x5E01;&#x7684;BIP-32&#x63D0;&#x6848;&#x4E2D;&#x63D0;&#x51FA;&#x6765;&#x7684;&#x3002;&#x6BCF;&#x4E00;&#x4E2A;key&#x90FD;&#x6709;&#x81EA;&#x5DF1;&#x7684;&#x8DEF;&#x5F84;&#xFF0C;&#x5373;&#x662F;&#x662F;&#x4E00;&#x4E2A;&#x6D3E;&#x751F;&#x7684; key&#xFF0C;&#x8FD9;&#x4E00;&#x70B9;&#x548C; keystore&#x7C7B;&#x578B;&#x662F;&#x4E00;&#x6837;&#x7684;&#x3002;</blockquote><p>&#x5728;accounts&#x6A21;&#x5757;&#x4E2D;&#x5171;&#x652F;&#x6301;&#x4E24;&#x79CD;HD&#x94B1;&#x5305;&#xFF1A;Ledger&#x548C;Trezor (&#x5728;usbWallet&#x6587;&#x4EF6;&#x4E2D;)</p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2024/01/image-4.png" class="kg-image" alt loading="lazy" width="1860" height="885"></figure><h2 id="%E4%BA%8C%E3%80%81%E7%9B%AE%E5%BD%95%E7%BB%93%E6%9E%84">&#x4E8C;&#x3001;&#x76EE;&#x5F55;&#x7ED3;&#x6784;</h2><h3 id="1%E3%80%81accountsgo">1&#x3001;accounts.go</h3><p>accounts.go&#x5B9A;&#x4E49;&#x4E86;accounts&#x6A21;&#x5757;&#x5BF9;&#x5916;&#x5BFC;&#x51FA;&#x7684;&#x4E00;&#x4E9B;&#x7ED3;&#x6784;&#x4F53;&#x548C;&#x63A5;&#x53E3;&#xFF0C;&#x5305;&#x62EC;Account&#x7ED3;&#x6784;&#x4F53;&#x3001;Wallet&#x63A5;&#x53E3;&#x548C;Backend&#x63A5;&#x53E3;&#x3002;&#x5176;&#x4E2D;Account&#x7531;&#x4E00;&#x4E2A;&#x4EE5;&#x592A;&#x574A;&#x5730;&#x5740;&#x548C;&#x94B1;&#x5305;&#x8DEF;&#x5F84;&#x7EC4;&#x6210;&#xFF1B;&#x800C;&#x5404;&#x79CD;&#x7C7B;&#x578B;&#x7684;&#x94B1;&#x5305;&#x9700;&#x8981;&#x5B9E;&#x73B0;Wallet&#x548C;Backend&#x63A5;&#x53E3;&#x6765;&#x63A5;&#x5165;&#x8D26;&#x5165;&#x7BA1;&#x7406;&#x3002;</p><p><strong>1) account</strong></p><pre><code class="language-golang">//&#x5E10;&#x6237;&#x8868;&#x793A;&#x4F4D;&#x4E8E;&#x5B9A;&#x4E49;&#x7684;&#x7279;&#x5B9A;&#x4F4D;&#x7F6E;&#x7684;&#x4EE5;&#x592A;&#x574A;&#x5E10;&#x6237;
//&#x901A;&#x8FC7;&#x53EF;&#x9009;&#x7684;URL&#x5B57;&#x6BB5;&#x3002;
type Account struct {
	Address common.Address `json:&quot;address&quot;` //&#x4ECE;&#x5BC6;&#x94A5;&#x6D3E;&#x751F;&#x7684;&#x4EE5;&#x592A;&#x574A;&#x5E10;&#x6237;&#x5730;&#x5740;
	URL     URL            `json:&quot;url&quot;`     //&#x540E;&#x7AEF;&#x4E2D;&#x7684;&#x53EF;&#x9009;&#x8D44;&#x6E90;&#x5B9A;&#x4F4D;&#x5668;
}</code></pre><p><strong>2) &#x94B1;&#x5305;--&#x94B1;&#x5305;&#x5E94;&#x8BE5;&#x662F;&#x8FD9;&#x91CC;&#x9762;&#x6700;&#x91CD;&#x8981;&#x7684;&#x4E00;&#x4E2A;&#x63A5;&#x53E3;&#x4E86;</strong></p><pre><code>//Wallet&#x8868;&#x793A;&#x53EF;&#x80FD;&#x5305;&#x542B;&#x4E00;&#x4E2A;&#x6216;&#x591A;&#x4E2A;&#x8F6F;&#x4EF6;&#x6216;&#x786C;&#x4EF6;&#x94B1;&#x5305;&#x8D26;&#x6237;&#xFF08;&#x6E90;&#x81EA;&#x540C;&#x4E00;&#x79CD;&#x5B50;&#xFF09;&#x3002;
type Wallet interface {
	//URL&#x68C0;&#x7D22;&#x53EF;&#x8BBF;&#x95EE;&#x6B64;&#x94B1;&#x5305;&#x7684;&#x89C4;&#x8303;&#x8DEF;&#x5F84;&#x3002;&#x5B83;&#x662F;&#x7528;&#x6237;&#x6309;&#x4E0A;&#x5C42;&#x5B9A;&#x4E49;&#x591A;&#x4E2A;&#x94B1;&#x5305;&#x7684;&#x6392;&#x5E8F;&#x987A;&#x5E8F;&#x540E;&#x7AEF;&#x3002;
	URL() URL

	//&#x72B6;&#x6001;&#x8FD4;&#x56DE;&#x6587;&#x672C;&#x72B6;&#x6001;&#x4EE5;&#x5E2E;&#x52A9;&#x7528;&#x6237;&#x5904;&#x4E8E;&#x94B1;&#x5305;&#x3002;
	Status() (string, error)

	//open&#x521D;&#x59CB;&#x5316;&#x5BF9;&#x94B1;&#x5305;&#x5B9E;&#x4F8B;&#x7684;&#x8BBF;&#x95EE;&#x3002;&#x5B83;&#x4E0D;&#x662F;&#x7528;&#x6765;&#x89E3;&#x9501;&#x6216;&#x89E3;&#x5BC6;&#x5E10;&#x6237;&#x5BC6;&#x94A5;&#xFF0C;&#x800C;&#x4E0D;&#x662F;&#x7B80;&#x5355;&#x5730;&#x5EFA;&#x7ACB;&#x5230;&#x786C;&#x4EF6;&#x7684;&#x8FDE;&#x63A5;&#x94B1;&#x5305;&#x548C;/&#x6216;&#x83B7;&#x53D6;&#x884D;&#x751F;&#x79CD;&#x5B50;&#x3002;
	//passphrase&#x53C2;&#x6570;&#x53EF;&#x80FD;&#x88AB;&#x7279;&#x5B9A;&#x94B1;&#x5305;&#x5B9E;&#x4F8B;&#x3002;
	//&#x8BF7;&#x6CE8;&#x610F;&#xFF0C;&#x5982;&#x679C;&#x60A8;&#x6253;&#x5F00;&#x4E00;&#x4E2A;&#x94B1;&#x5305;&#xFF0C;&#x60A8;&#x5FC5;&#x987B;&#x5173;&#x95ED;&#x5B83;&#x4EE5;&#x91CA;&#x653E;&#x4EFB;&#x4F55;&#x5206;&#x914D;&#x7684;&#x8D44;&#x6E90;&#xFF08;&#x4F7F;&#x7528;&#x786C;&#x4EF6;&#x94B1;&#x5305;&#x65F6;&#x5C24;&#x5176;&#x91CD;&#x8981;&#xFF09;&#x3002;
	Open(passphrase string) error

	//&#x5173;&#x95ED;&#x91CA;&#x653E;&#x6253;&#x5F00;&#x94B1;&#x5305;&#x5B9E;&#x4F8B;&#x6301;&#x6709;&#x7684;&#x4EFB;&#x4F55;&#x8D44;&#x6E90;&#x3002;
	Close() error

	//&#x5E10;&#x6237;&#x68C0;&#x7D22;&#x94B1;&#x5305;&#x5F53;&#x524D;&#x8BC6;&#x522B;&#x7684;&#x7B7E;&#x540D;&#x5E10;&#x6237;&#x5217;&#x8868;&#x7684;&#x3002;
	Accounts() []Account

	//&#x5305;&#x542B;&#x8FD4;&#x56DE;&#x5E10;&#x6237;&#x662F;&#x5426;&#x5C5E;&#x4E8E;&#x6B64;&#x7279;&#x5B9A;&#x94B1;&#x5305;&#x7684;&#x4E00;&#x90E8;&#x5206;&#x3002;
	Contains(account Account) bool

	//&#x6D3E;&#x751F;&#x5C1D;&#x8BD5;&#x5728;&#x5904;&#x663E;&#x5F0F;&#x6D3E;&#x751F;&#x5C42;&#x6B21;&#x786E;&#x5B9A;&#x6027;&#x5E10;&#x6237;&#x6307;&#x5B9A;&#x7684;&#x6D3E;&#x751F;&#x8DEF;&#x5F84;&#x3002;&#x5982;&#x679C;&#x8BF7;&#x6C42;&#xFF0C;&#x5C06;&#x6DFB;&#x52A0;&#x6D3E;&#x751F;&#x5E10;&#x6237;&#x5230;&#x94B1;&#x5305;&#x7684;&#x8DDF;&#x8E2A;&#x5E10;&#x6237;&#x5217;&#x8868;&#x3002;
	Derive(path DerivationPath, pin bool) (Account, error)

	//SelfDerive&#x8BBE;&#x7F6E;&#x94B1;&#x5305;&#x5C1D;&#x8BD5;&#x7684;&#x57FA;&#x672C;&#x5E10;&#x6237;&#x6D3E;&#x751F;&#x8DEF;&#x5F84;&#x53D1;&#x73B0;&#x975E;&#x96F6;&#x5E10;&#x6237;&#x5E76;&#x81EA;&#x52A8;&#x5C06;&#x5176;&#x6DFB;&#x52A0;&#x5230;&#x8DDF;&#x8E2A;&#x7684;&#x5217;&#x8868;&#x8D26;&#x6237;&#x3002;
	//&#x60A8;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x4F7F;&#x7528;nil&#x8C03;&#x7528;selfderive&#x6765;&#x7981;&#x7528;&#x81EA;&#x52A8;&#x5E10;&#x6237;&#x53D1;&#x73B0;&#x94FE;&#x72B6;&#x6001;&#x8BFB;&#x53D6;&#x5668;&#x3002;
	SelfDerive(base DerivationPath, chain ethereum.ChainStateReader)

	//sign hash&#x8BF7;&#x6C42;&#x94B1;&#x5305;&#x5BF9;&#x7ED9;&#x5B9A;&#x7684;hash&#x8FDB;&#x884C;&#x7B7E;&#x540D;&#x3002;&#x5B83;&#x53EA;&#x901A;&#x8FC7;&#x5305;&#x542B;&#x5728;&#x4E2D;&#x7684;&#x5730;&#x5740;&#x67E5;&#x627E;&#x6307;&#x5B9A;&#x7684;&#x5E10;&#x6237;&#xFF0C;&#x6216;&#x8005;&#x53EF;&#x4EE5;&#x501F;&#x52A9;&#x5D4C;&#x5165;&#x7684;URL&#x5B57;&#x6BB5;&#x4E2D;&#x7684;&#x4EFB;&#x4F55;&#x4F4D;&#x7F6E;&#x5143;&#x6570;&#x636E;&#x3002;
	SignHash(account Account, hash []byte) ([]byte, error)

	//signtx&#x8BF7;&#x6C42;&#x94B1;&#x5305;&#x7B7E;&#x7F72;&#x7ED9;&#x5B9A;&#x7684;&#x4EA4;&#x6613;&#x3002;&#x5B83;&#x53EA;&#x901A;&#x8FC7;&#x5305;&#x542B;&#x5728;&#x4E2D;&#x7684;&#x5730;&#x5740;&#x67E5;&#x627E;&#x6307;&#x5B9A;&#x7684;&#x5E10;&#x6237;&#xFF0C;&#x6216;&#x8005;&#x53EF;&#x4EE5;&#x501F;&#x52A9;&#x5D4C;&#x5165;&#x7684;URL&#x5B57;&#x6BB5;&#x4E2D;&#x7684;&#x4EFB;&#x4F55;&#x4F4D;&#x7F6E;&#x5143;&#x6570;&#x636E;&#x3002;
	SignTx(account Account, tx *types.Transaction, chainID *big.Int) (*types.Transaction, error)

	//signhashwithpassphrase&#x8BF7;&#x6C42;&#x94B1;&#x5305;&#x4F7F;&#x7528;&#x63D0;&#x4F9B;&#x4F5C;&#x4E3A;&#x989D;&#x5916;&#x8EAB;&#x4EFD;&#x9A8C;&#x8BC1;&#x4FE1;&#x606F;&#x7684;&#x5BC6;&#x7801;&#x3002;&#x5B83;&#x53EA;&#x901A;&#x8FC7;&#x5305;&#x542B;&#x5728;&#x4E2D;&#x7684;&#x5730;&#x5740;&#x67E5;&#x627E;&#x6307;&#x5B9A;&#x7684;&#x5E10;&#x6237;&#xFF0C;&#x6216;&#x8005;&#x53EF;&#x4EE5;&#x501F;&#x52A9;&#x5D4C;&#x5165;&#x7684;URL&#x5B57;&#x6BB5;&#x4E2D;&#x7684;&#x4EFB;&#x4F55;&#x4F4D;&#x7F6E;&#x5143;&#x6570;&#x636E;&#x3002;
	SignHashWithPassphrase(account Account, passphrase string, hash []byte) ([]byte, error)

//signtxwithpassphrase&#x8BF7;&#x6C42;&#x94B1;&#x5305;&#x7B7E;&#x7F72;&#x7ED9;&#x5B9A;&#x7684;&#x4EA4;&#x6613;&#xFF0C;&#x4F7F;&#x7528;&#x63D0;&#x4F9B;&#x4F5C;&#x4E3A;&#x989D;&#x5916;&#x8EAB;&#x4EFD;&#x9A8C;&#x8BC1;&#x4FE1;&#x606F;&#x7684;&#x5BC6;&#x7801;&#x3002;&#x5B83;&#x53EA;&#x901A;&#x8FC7;&#x5305;&#x542B;&#x5728;&#x4E2D;&#x7684;&#x5730;&#x5740;&#x67E5;&#x627E;&#x6307;&#x5B9A;&#x7684;&#x5E10;&#x6237;&#xFF0C;&#x6216;&#x8005;&#x53EF;&#x4EE5;&#x501F;&#x52A9;&#x5D4C;&#x5165;&#x7684;URL&#x5B57;&#x6BB5;&#x4E2D;&#x7684;&#x4EFB;&#x4F55;&#x4F4D;&#x7F6E;&#x5143;&#x6570;&#x636E;&#x3002;
	SignTxWithPassphrase(account Account, passphrase string, tx *types.Transaction, chainID *big.Int) (*types.Transaction, error)
}</code></pre><p><strong>3) &#x540E;&#x7AEF; Backend</strong></p><pre><code class="language-golang">// Backend&#x662F;&#x4E00;&#x4E2A;&#x94B1;&#x5305;&#x63D0;&#x4F9B;&#x5668;&#x3002; &#x53EF;&#x4EE5;&#x5305;&#x542B;&#x4E00;&#x6279;&#x8D26;&#x53F7;&#x3002;&#x4ED6;&#x4EEC;&#x53EF;&#x4EE5;&#x6839;&#x636E;&#x8BF7;&#x6C42;&#x7B7E;&#x7F72;&#x4EA4;&#x6613;&#xFF0C;&#x8FD9;&#x6837;&#x505A;&#x3002;
type Backend interface {
	
	// Wallets&#x83B7;&#x53D6;&#x5F53;&#x524D;&#x80FD;&#x591F;&#x67E5;&#x627E;&#x5230;&#x7684;&#x94B1;&#x5305;&#xFF0C;&#x6240;&#x751F;&#x6210;&#x7684;&#x94B1;&#x5305;&#x5217;&#x8868;&#x5C06;&#x6839;&#x636E;&#x540E;&#x7AEF;&#x5206;&#x914D;&#x7684;&#x5185;&#x90E8;URL&#x6309;&#x5B57;&#x6BCD;&#x987A;&#x5E8F;&#x6392;&#x5E8F;&#x3002;&#x7531;&#x4E8E;&#x94B1;&#x5305;&#xFF08;&#x7279;&#x522B;&#x662F;&#x786C;&#x4EF6;&#x94B1;&#x5305;&#xFF09;&#x53EF;&#x80FD;&#x4F1A;&#x6253;&#x5F00;&#x548C;&#x5173;&#x95ED;&#xFF0C;&#x6240;&#x4EE5;&#x5728;&#x968F;&#x540E;&#x7684;&#x68C0;&#x7D22;&#x8FC7;&#x7A0B;&#x4E2D;&#xFF0C;&#x76F8;&#x540C;&#x7684;&#x94B1;&#x5305;&#x53EF;&#x80FD;&#x4F1A;&#x51FA;&#x73B0;&#x5728;&#x5217;&#x8868;&#x4E2D;&#x7684;&#x4E0D;&#x540C;&#x4F4D;&#x7F6E;&#x3002;
	Wallets() []Wallet


	// &#x8BA2;&#x9605;&#x521B;&#x5EFA;&#x5F02;&#x6B65;&#x8BA2;&#x9605;&#xFF0C;&#x4EE5;&#x4FBF;&#x5728;&#x540E;&#x7AEF;&#x68C0;&#x6D4B;&#x5230;&#x94B1;&#x5305;&#x7684;&#x5230;&#x8FBE;&#x6216;&#x79BB;&#x5F00;&#x65F6;&#x63A5;&#x6536;&#x901A;&#x77E5;&#x3002;
	Subscribe(sink chan&lt;- WalletEvent) event.Subscription
}
</code></pre><p>Backend &#x63A5;&#x53E3;&#x662F;&#x4E00;&#x4E2A;&#x94B1;&#x5305; provider&#xFF0C;&#x5B83;&#x5305;&#x542B;&#x4E00;&#x4E2A;&#x94B1;&#x5305;&#x5217;&#x8868;&#xFF0C;&#x5728;&#x68C0;&#x6D4B;&#x5230;&#x94B1;&#x5305;&#x5F00;&#x542F;&#x6216;&#x5173;&#x95ED;&#x65F6;&#x53EF;&#x4EE5;&#x63A5;&#x6536;&#x5230;&#x901A;&#x77E5;&#xFF0C;&#x53EF;&#x4EE5;&#x7528;&#x6765;&#x8BF7;&#x6C42;&#x7B7E;&#x540D;&#x4EA4;&#x6613;&#x3002;&#x5176;&#x4E2D; Wallets() &#x8FD4;&#x56DE;&#x5F53;&#x524D;&#x53EF;&#x7528;&#x7684;&#x94B1;&#x5305;&#xFF0C;&#x6309;&#x5B57;&#x6BCD;&#x987A;&#x5E8F;&#x6392;&#x5E8F;&#xFF0C;Subscribe() &#x521B;&#x5EFA;&#x5F02;&#x6B65;&#x8BA2;&#x9605;&#x7684;&#x65B9;&#x6CD5;&#xFF0C;&#x5F53;&#x94B1;&#x5305;&#x53D1;&#x751F;&#x53D8;&#x52A8;&#x65F6;&#x901A;&#x8FC7; chan &#x63A5;&#x6536;&#x6D88;&#x606F;&#x3002;</p><p><strong>&#xFF14;&#xFF09; TextHash &#x548C; TextAndHash</strong></p><pre><code class="language-golang">func TextHash(data []byte) []byte {
	hash, _ := TextAndHash(data)
	return hash
}

func TextAndHash(data []byte) ([]byte, string) {
	msg := fmt.Sprintf(&quot;\x19Ethereum Signed Message:\n%d%s&quot;, len(data), string(data))
	hasher := sha3.NewLegacyKeccak256()
	hasher.Write([]byte(msg))
	return hasher.Sum(nil), msg
}</code></pre><p>&#x8FD9;&#x6BB5;&#x4EE3;&#x7801;&#x662F;&#x4EE5;&#x592A;&#x574A;&#x4E2D;&#x7528;&#x4E8E;&#x751F;&#x6210;&#x7B7E;&#x540D;&#x6D88;&#x606F;&#x7684;&#x8F85;&#x52A9;&#x51FD;&#x6570;&#x3002;&#x5B83;&#x4EEC;&#x7528;&#x4E8E;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x53EF;&#x4EE5;&#x5B89;&#x5168;&#x7528;&#x4E8E;&#x8BA1;&#x7B97;&#x7B7E;&#x540D;&#x7684;&#x6D88;&#x606F;&#x54C8;&#x5E0C;&#x3002;</p><p><code>TextHash</code> &#x51FD;&#x6570;&#x548C; <code>TextAndHash</code> &#x51FD;&#x6570;&#x90FD;&#x6267;&#x884C;&#x76F8;&#x540C;&#x7684;&#x64CD;&#x4F5C;&#xFF0C;&#x4F46; <code>TextHash</code> &#x53EA;&#x8FD4;&#x56DE;&#x4E86;&#x54C8;&#x5E0C;&#x503C;&#xFF0C;&#x800C; <code>TextAndHash</code> &#x8FD4;&#x56DE;&#x4E86;&#x54C8;&#x5E0C;&#x503C;&#x548C;&#x751F;&#x6210;&#x8BE5;&#x54C8;&#x5E0C;&#x503C;&#x7684;&#x6D88;&#x606F;&#x3002;</p><p>&#x8FD9;&#x4E9B;&#x51FD;&#x6570;&#x521B;&#x5EFA;&#x4E86;&#x4E00;&#x4E2A;&#x7279;&#x5B9A;&#x683C;&#x5F0F;&#x7684;&#x6D88;&#x606F;&#xFF0C;&#x8FD9;&#x4E2A;&#x683C;&#x5F0F;&#x63D0;&#x4F9B;&#x4E86;&#x6D88;&#x606F;&#x7684;&#x4E0A;&#x4E0B;&#x6587;&#xFF0C;&#x5E76;&#x4E14;&#x4F1A;&#x88AB;&#x7528;&#x4E8E;&#x6D88;&#x606F;&#x7684;&#x7B7E;&#x540D;&#x3002;&#x751F;&#x6210;&#x7684;&#x6D88;&#x606F;&#x683C;&#x5F0F;&#x662F;&#xFF1A;</p><pre><code>keccak256(&quot;\x19Ethereum Signed Message:\n&quot;${message length}${message})
</code></pre><p>&#x5176;&#x4E2D; <code>${message length}</code> &#x662F;&#x6D88;&#x606F;&#x957F;&#x5EA6;&#xFF0C;<code>${message}</code> &#x662F;&#x5B9E;&#x9645;&#x6D88;&#x606F;&#x5185;&#x5BB9;&#x3002;</p><p><code>TextAndHash</code> &#x51FD;&#x6570;&#x8FD4;&#x56DE;&#x4E86;&#x8BA1;&#x7B97;&#x5F97;&#x5230;&#x7684;&#x54C8;&#x5E0C;&#x503C;&#x548C;&#x521B;&#x5EFA;&#x8BE5;&#x54C8;&#x5E0C;&#x503C;&#x7684;&#x6D88;&#x606F;&#x3002;&#x8FD9;&#x6709;&#x52A9;&#x4E8E;&#x5728;&#x521B;&#x5EFA;&#x7B7E;&#x540D;&#x65F6;&#x4E86;&#x89E3;&#x7B7E;&#x540D;&#x7684;&#x6D88;&#x606F;&#x5185;&#x5BB9;&#x3002;</p><p>&#x8FD9;&#x79CD;&#x6D88;&#x606F;&#x683C;&#x5F0F;&#x7684;&#x521B;&#x5EFA;&#x76EE;&#x7684;&#x5728;&#x4E8E;&#x4E3A;&#x6D88;&#x606F;&#x63D0;&#x4F9B;&#x4E0A;&#x4E0B;&#x6587;&#xFF0C;&#x540C;&#x65F6;&#x4E5F;&#x7528;&#x4E8E;&#x9632;&#x6B62;&#x5BF9;&#x4EA4;&#x6613;&#x8FDB;&#x884C;&#x7B7E;&#x540D;&#x3002;&#x8FD9;&#x79CD;&#x5904;&#x7406;&#x65B9;&#x5F0F;&#x662F;&#x4E3A;&#x4E86;&#x589E;&#x52A0;&#x6D88;&#x606F;&#x7684;&#x5B89;&#x5168;&#x6027;&#x548C;&#x53EF;&#x9760;&#x6027;&#xFF0C;&#x786E;&#x4FDD;&#x6D88;&#x606F;&#x7684;&#x7B7E;&#x540D;&#x80FD;&#x591F;&#x88AB;&#x6B63;&#x786E;&#x9A8C;&#x8BC1;&#x3002;</p><p><strong>5) WalletEvent</strong></p><p><code>WalletEventType</code> &#x662F;&#x4E00;&#x4E2A;&#x6574;&#x6570;&#x7C7B;&#x578B;&#xFF0C;&#x4EE3;&#x8868;&#x94B1;&#x5305;&#x8BA2;&#x9605;&#x7CFB;&#x7EDF;&#x4E2D;&#x53EF;&#x4EE5;&#x89E6;&#x53D1;&#x7684;&#x4E0D;&#x540C;&#x4E8B;&#x4EF6;&#x7C7B;&#x578B;&#x3002;&#x5B83;&#x5B9A;&#x4E49;&#x4E86;&#x4EE5;&#x4E0B;&#x5E38;&#x91CF;&#xFF1A;</p><ul><li><code>WalletArrived</code>: &#x5F53;&#x901A;&#x8FC7;USB&#x6216;&#x8005;&#x5BC6;&#x94A5;&#x5E93;&#x4E2D;&#x7684;&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;&#x4E8B;&#x4EF6;&#x68C0;&#x6D4B;&#x5230;&#x65B0;&#x94B1;&#x5305;&#x65F6;&#x89E6;&#x53D1;&#x3002;</li><li><code>WalletOpened</code>: &#x5F53;&#x6210;&#x529F;&#x6253;&#x5F00;&#x94B1;&#x5305;&#x5E76;&#x5F00;&#x59CB;&#x540E;&#x53F0;&#x8FDB;&#x7A0B;&#xFF08;&#x4F8B;&#x5982;&#x81EA;&#x52A8;&#x5BC6;&#x94A5;&#x6D3E;&#x751F;&#xFF09;&#x65F6;&#x89E6;&#x53D1;&#x3002;</li><li><code>WalletDropped</code>: &#x6682;&#x65F6;&#x672A;&#x63D0;&#x4F9B;&#x5177;&#x4F53;&#x6CE8;&#x91CA;&#x6216;&#x63CF;&#x8FF0;&#x8BE5;&#x4E8B;&#x4EF6;&#x7C7B;&#x578B;&#x7684;&#x7528;&#x9014;&#x3002;</li></ul><p><code>WalletEvent</code> &#x7ED3;&#x6784;&#x4F53;&#x662F;&#x7531;&#x8D26;&#x6237;&#x540E;&#x7AEF;&#xFF08;account backend&#xFF09;&#x89E6;&#x53D1;&#x7684;&#x4E8B;&#x4EF6;&#xFF0C;&#x5F53;&#x68C0;&#x6D4B;&#x5230;&#x94B1;&#x5305;&#x7684;&#x5230;&#x6765;&#x6216;&#x79BB;&#x5F00;&#x65F6;&#x4F7F;&#x7528;&#x3002;&#x5B83;&#x5305;&#x542B;&#x4EE5;&#x4E0B;&#x5B57;&#x6BB5;&#xFF1A;</p><ul><li><code>Wallet</code>: &#x8868;&#x793A;&#x5230;&#x6765;&#x6216;&#x79BB;&#x5F00;&#x7684;&#x94B1;&#x5305;&#x5B9E;&#x4F8B;&#x3002;</li><li><code>Kind</code>: &#x8868;&#x793A;&#x53D1;&#x751F;&#x5728;&#x7CFB;&#x7EDF;&#x4E2D;&#x7684;&#x4E8B;&#x4EF6;&#x7C7B;&#x578B;&#xFF0C;&#x4F7F;&#x7528; <code>WalletEventType</code> &#x4E2D;&#x7684;&#x503C;&#x6765;&#x63CF;&#x8FF0;&#x5177;&#x4F53;&#x4E8B;&#x4EF6;&#x3002;</li></ul><pre><code class="language-golang">
type WalletEventType int

const (
	WalletArrived WalletEventType = iota
	WalletOpened
	WalletDropped
)

type WalletEvent struct {
	Wallet Wallet         
	Kind   WalletEventType
}
</code></pre><p>&#x8FD9;&#x6BB5;&#x4EE3;&#x7801;&#x5B9A;&#x4E49;&#x4E86;&#x4E00;&#x4E2A;&#x94B1;&#x5305;&#x4E8B;&#x4EF6;&#x7CFB;&#x7EDF;&#xFF0C;&#x7528;&#x4E8E;&#x8868;&#x793A;&#x94B1;&#x5305;&#x8BA2;&#x9605;&#x7CFB;&#x7EDF;&#x4E2D;&#x53EF;&#x80FD;&#x89E6;&#x53D1;&#x7684;&#x4E0D;&#x540C;&#x4E8B;&#x4EF6;&#x7C7B;&#x578B;&#x548C;&#x4E8B;&#x4EF6;&#x7ED3;&#x6784;&#x3002;</p><p>&#x8FD9;&#x79CD;&#x4E8B;&#x4EF6;&#x7CFB;&#x7EDF;&#x7528;&#x4E8E;&#x76D1;&#x63A7;&#x94B1;&#x5305;&#x7684;&#x72B6;&#x6001;&#x53D8;&#x5316;&#xFF0C;&#x5F53;&#x65B0;&#x94B1;&#x5305;&#x88AB;&#x68C0;&#x6D4B;&#x5230;&#x3001;&#x94B1;&#x5305;&#x6210;&#x529F;&#x6253;&#x5F00;&#x6216;&#x8005;&#x5176;&#x4ED6;&#x94B1;&#x5305;&#x72B6;&#x6001;&#x53D8;&#x5316;&#x65F6;&#xFF0C;&#x7CFB;&#x7EDF;&#x53EF;&#x4EE5;&#x89E6;&#x53D1;&#x76F8;&#x5E94;&#x7684;&#x4E8B;&#x4EF6;&#x3002;&#x8FD9;&#x5BF9;&#x4E8E;&#x540E;&#x53F0;&#x8FDB;&#x7A0B;&#x3001;&#x81EA;&#x52A8;&#x5316;&#x4EFB;&#x52A1;&#x6216;&#x8005;&#x7528;&#x6237;&#x901A;&#x77E5;&#x975E;&#x5E38;&#x6709;&#x7528;&#xFF0C;&#x80FD;&#x591F;&#x53CA;&#x65F6;&#x54CD;&#x5E94;&#x94B1;&#x5305;&#x72B6;&#x6001;&#x7684;&#x53D8;&#x5316;&#x3002;</p><h3 id="2%E3%80%81hdgo">2&#x3001;hd.go</h3><p>hd.go&#x4E2D;&#x5B9A;&#x4E49;&#x4E86;HD&#x7C7B;&#x578B;&#x7684;&#x94B1;&#x5305;&#x7684;&#x8DEF;&#x5F84;&#x89E3;&#x6790;&#x7B49;&#x51FD;&#x6570;&#x3002;</p><h3 id="3%E3%80%81managergo">3&#x3001;manager.go</h3><p>manager.go&#x4E2D;&#x5B9A;&#x4E49;&#x4E86;Manager&#x7ED3;&#x6784;&#x53CA;&#x5176;&#x65B9;&#x6CD5;&#x3002;&#x8FD9;&#x662F;accounts&#x6A21;&#x5757;&#x5BF9;&#x5916;&#x5BFC;&#x51FA;&#x7684;&#x4E3B;&#x8981;&#x7684;&#x7ED3;&#x6784;&#x548C;&#x65B9;&#x6CD5;&#x4E4B;&#x4E00;&#x3002;&#x5176;&#x5B83;&#x6A21;&#x5757;&#xFF08;&#x6BD4;&#x5982;cmd/geth&#x4E2D;&#xFF09;&#x901A;&#x8FC7;&#x8FD9;&#x4E2A;&#x7ED3;&#x6784;&#x4F53;&#x63D0;&#x4F9B;&#x7684;&#x65B9;&#x6CD5;&#x5BF9;&#x94B1;&#x5305;&#x8FDB;&#x884C;&#x7BA1;&#x7406;&#x3002;</p><p><strong>1&#xFF09;&#x5E38;&#x91CF;&#x548C;&#x914D;&#x7F6E;</strong></p><ul><li><code>managerSubBufferSize</code>: &#x7528;&#x4E8E;&#x786E;&#x5B9A;&#x8D26;&#x6237;&#x7BA1;&#x7406;&#x5668;&#x5728;&#x5176;&#x901A;&#x9053;&#x4E2D;&#x7F13;&#x51B2;&#x7684;&#x94B1;&#x5305;&#x4E8B;&#x4EF6;&#x6570;&#x91CF;&#x7684;&#x5E38;&#x91CF;&#xFF0C;&#x9650;&#x5B9A;&#x4E86;&#x901A;&#x9053;&#x7684;&#x7F13;&#x51B2;&#x5927;&#x5C0F;&#x4E3A;50&#x4E2A;&#x4E8B;&#x4EF6;&#x3002;</li><li><code>Config</code> &#x7ED3;&#x6784;&#x4F53;: &#x5305;&#x542B;&#x5168;&#x5C40;&#x8D26;&#x6237;&#x7BA1;&#x7406;&#x5668;&#x7684;&#x8BBE;&#x7F6E;&#x3002;&#x5176;&#x4E2D;<code>InsecureUnlockAllowed</code>: &#x5E03;&#x5C14;&#x503C;&#xFF0C;&#x8868;&#x793A;&#x662F;&#x5426;&#x5141;&#x8BB8;&#x5728;&#x4E0D;&#x5B89;&#x5168;&#x7684;&#x73AF;&#x5883;&#x4E2D;&#x89E3;&#x9501;&#x8D26;&#x6237;&#x3002;</li></ul><p><strong>2&#xFF09;&#x7ED3;&#x6784;&#x4F53;&#x548C;&#x901A;&#x9053;</strong></p><p><code>newBackendEvent</code> &#x7ED3;&#x6784;&#x4F53;: &#x7528;&#x4E8E;&#x8BA9;&#x7BA1;&#x7406;&#x5668;&#x77E5;&#x9053;&#x5E94;&#x8BE5;&#x8FFD;&#x8E2A;&#x7ED9;&#x5B9A;&#x540E;&#x7AEF;&#x4EE5;&#x83B7;&#x53D6;&#x94B1;&#x5305;&#x66F4;&#x65B0;&#x3002;</p><ul><li><code>backend</code>: &#x8981;&#x8FFD;&#x8E2A;&#x7684;&#x540E;&#x7AEF;&#x3002;</li><li><code>processed</code>: &#x901A;&#x9053;&#xFF0C;&#x7528;&#x4E8E;&#x901A;&#x77E5;&#x4E8B;&#x4EF6;&#x53D1;&#x51FA;&#x8005;&#x540E;&#x7AEF;&#x5DF2;&#x7ECF;&#x88AB;&#x6574;&#x5408;&#x3002;</li></ul><pre><code class="language-golang">type newBackendEvent struct {
	backend   Backend
	processed chan struct{} // Informs event emitter that backend has been integrated
}</code></pre><p><code>Manager</code> &#x7ED3;&#x6784;&#x4F53;: &#x662F;&#x4E00;&#x4E2A;&#x6574;&#x4F53;&#x7684;&#x8D26;&#x6237;&#x7BA1;&#x7406;&#x5668;&#x3002;&#x8BE5;&#x7ED3;&#x6784;&#x4F53;&#x53EF;&#x4EE5;&#x6CE8;&#x518C;&#x4E0D;&#x540C;&#x7684;&#x540E;&#x7AEF;&#x4EE5;&#x8DDF;&#x8E2A;&#x548C;&#x7BA1;&#x7406;&#x94B1;&#x5305;&#xFF0C;&#x540C;&#x65F6;&#x8FD8;&#x53EF;&#x4EE5;&#x8FDB;&#x884C;&#x8BA2;&#x9605;&#x4EE5;&#x83B7;&#x53D6;&#x94B1;&#x5305;&#x7684;&#x53D8;&#x66F4;&#x4E8B;&#x4EF6;&#x3002;&#x8FD9;&#x4E2A;&#x7ED3;&#x6784;&#x4F53;&#x7BA1;&#x7406;&#x4E86;&#x4E00;&#x4E2A;&#x5168;&#x5C40;&#x7684;&#x8D26;&#x6237;&#x72B6;&#x6001;&#xFF0C;&#x53EF;&#x4EE5;&#x8BA2;&#x9605;&#x94B1;&#x5305;&#x53D8;&#x66F4;&#x4E8B;&#x4EF6;&#x3001;&#x7F13;&#x5B58;&#x94B1;&#x5305;&#x4FE1;&#x606F;&#xFF0C;&#x5E76;&#x5141;&#x8BB8;&#x6CE8;&#x518C;&#x65B0;&#x7684;&#x540E;&#x7AEF;&#x4EE5;&#x8FFD;&#x8E2A;&#x5176;&#x94B1;&#x5305;&#x3002;</p><ul><li><code>config</code>: &#x6307;&#x5411; <code>Config</code> &#x7ED3;&#x6784;&#x4F53;&#x7684;&#x6307;&#x9488;&#xFF0C;&#x4FDD;&#x5B58;&#x4E86;&#x5168;&#x5C40;&#x8D26;&#x6237;&#x7BA1;&#x7406;&#x5668;&#x7684;&#x914D;&#x7F6E;&#x3002;</li><li><code>backends</code>: &#x5B58;&#x50A8;&#x5DF2;&#x6CE8;&#x518C;&#x540E;&#x7AEF;&#x7684;&#x6620;&#x5C04;&#xFF0C;&#x5C06;&#x540E;&#x7AEF;&#x7C7B;&#x578B;&#x6620;&#x5C04;&#x5230;&#x5BF9;&#x5E94;&#x7684;&#x540E;&#x7AEF;&#x5B9E;&#x4F8B;&#x5207;&#x7247;&#x3002;</li><li><code>updaters</code>: &#x5B58;&#x50A8;&#x9488;&#x5BF9;&#x6240;&#x6709;&#x540E;&#x7AEF;&#x7684;&#x94B1;&#x5305;&#x66F4;&#x65B0;&#x8BA2;&#x9605;&#x3002;</li><li><code>updates</code>: &#x7528;&#x4E8E;&#x63A5;&#x6536;&#x540E;&#x7AEF;&#x94B1;&#x5305;&#x53D8;&#x5316;&#x7684;&#x8BA2;&#x9605;&#x63A5;&#x6536;&#x5668;&#x3002;</li><li><code>newBackends</code>: &#x7528;&#x4E8E;&#x63A5;&#x6536;&#x8981;&#x88AB;&#x7BA1;&#x7406;&#x5668;&#x8FFD;&#x8E2A;&#x7684;&#x65B0;&#x540E;&#x7AEF;&#x3002;</li><li><code>wallets</code>: &#x7F13;&#x5B58;&#x4E86;&#x6240;&#x6709;&#x5DF2;&#x6CE8;&#x518C;&#x540E;&#x7AEF;&#x4E2D;&#x7684;&#x6240;&#x6709;&#x94B1;&#x5305;&#x4FE1;&#x606F;&#x3002;</li><li><code>feed</code>: &#x7528;&#x4E8E;&#x901A;&#x77E5;&#x5230;&#x8FBE;&#x6216;&#x79BB;&#x5F00;&#x7684;&#x94B1;&#x5305;&#x7684;&#x94B1;&#x5305;&#x66F4;&#x65B0;&#x901A;&#x9053;&#x3002;</li><li><code>quit</code>: &#x901A;&#x9053;&#xFF0C;&#x7528;&#x4E8E;&#x63A5;&#x6536;&#x9519;&#x8BEF;&#x9000;&#x51FA;&#x7684;&#x4FE1;&#x53F7;&#x3002;</li><li><code>term</code>: &#x7528;&#x4E8E;&#x901A;&#x77E5;&#x66F4;&#x65B0;&#x5FAA;&#x73AF;&#x7EC8;&#x6B62;&#x7684;&#x4FE1;&#x53F7;&#x3002;</li><li><code>lock</code>: &#x8BFB;&#x5199;&#x9501;&#xFF0C;&#x7528;&#x4E8E;&#x4FDD;&#x62A4;&#x8D26;&#x6237;&#x7BA1;&#x7406;&#x5668;&#x5185;&#x90E8;&#x72B6;&#x6001;&#x7684;&#x5E76;&#x53D1;&#x8BBF;&#x95EE;&#x3002;</li></ul><pre><code class="language-golang">type Manager struct {
	config      *Config               
	backends    map[reflect.Type][]Backend 
	updaters    []event.Subscription       
	updates     chan WalletEvent          
	newBackends chan newBackendEvent       
	wallets     []Wallet                  
	feed event.Feed
	quit chan chan error
	term chan struct{} 
	lock sync.RWMutex
}</code></pre><p><strong>2) &#x521B;&#x5EFA;Manager</strong></p><pre><code class="language-golang">func NewManager(config *Config, backends ...Backend) *Manager {
	// Retrieve the initial list of wallets from the backends and sort by URL
	var wallets []Wallet
	for _, backend := range backends {
		wallets = merge(wallets, backend.Wallets()...)
	}
	// Subscribe to wallet notifications from all backends
	updates := make(chan WalletEvent, managerSubBufferSize)

	subs := make([]event.Subscription, len(backends))
	for i, backend := range backends {
		subs[i] = backend.Subscribe(updates)
	}
	// Assemble the account manager and return
	am := &amp;Manager{
		config:      config,
		backends:    make(map[reflect.Type][]Backend),
		updaters:    subs,
		updates:     updates,
		newBackends: make(chan newBackendEvent),
		wallets:     wallets,
		quit:        make(chan chan error),
		term:        make(chan struct{}),
	}
	for _, backend := range backends {
		kind := reflect.TypeOf(backend)
		am.backends[kind] = append(am.backends[kind], backend)
	}
	go am.update()

	return am
}</code></pre><p>NewManager &#x4F1A;&#x5C06;&#x6240;&#x6709; backends &#x7684; wallets &#x6536;&#x96C6;&#x8D77;&#x6765;&#xFF0C;&#x83B7;&#x53D6;&#x6240;&#x6709;&#x7684; backends &#x7684;&#x65F6;&#x95F4;&#x8BA2;&#x9605;&#xFF0C;&#x7136;&#x540E;&#x6839;&#x636E;&#x8FD9;&#x4E9B;&#x53C2;&#x6570;&#x521B;&#x5EFA;&#x65B0;&#x7684; manager&#x3002;</p><p><strong>3) update</strong></p><p>update&#x5728; NewManager &#x4F5C;&#x4E3A;&#x4E00;&#x4E2A; goroutine &#x88AB;&#x8C03;&#x7528;&#xFF0C;&#x4E00;&#x76F4;&#x8FD0;&#x884C;&#xFF0C;&#x76D1;&#x63A7;&#x6240;&#x6709; backend &#x89E6;&#x53D1;&#x7684;&#x66F4;&#x65B0;&#x6D88;&#x606F;&#xFF0C;&#x53D1;&#x7ED9; feed &#x7528;&#x6765;&#x8FDB;&#x884C;&#x8FDB;&#x4E00;&#x6B65;&#x7684;&#x5904;&#x7406;&#x3002;</p><pre><code class="language-golang">func (am *Manager) update() {
	// Close all subscriptions when the manager terminates
	defer func() {
		am.lock.Lock()
		for _, sub := range am.updaters {
			sub.Unsubscribe()
		}
		am.updaters = nil
		am.lock.Unlock()
	}()

	// Loop until termination
	for {
		select {
		case event := &lt;-am.updates:
			// Wallet event arrived, update local cache
			am.lock.Lock()
			switch event.Kind {
			case WalletArrived:
				am.wallets = merge(am.wallets, event.Wallet)
			case WalletDropped:
				am.wallets = drop(am.wallets, event.Wallet)
			}
			am.lock.Unlock()

			// Notify any listeners of the event
			am.feed.Send(event)
		case event := &lt;-am.newBackends:
			am.lock.Lock()
			// Update caches
			backend := event.backend
			am.wallets = merge(am.wallets, backend.Wallets()...)
			am.updaters = append(am.updaters, backend.Subscribe(am.updates))
			kind := reflect.TypeOf(backend)
			am.backends[kind] = append(am.backends[kind], backend)
			am.lock.Unlock()
			close(event.processed)
		case errc := &lt;-am.quit:
			// Manager terminating, return
			errc &lt;- nil
			// Signals event emitters the loop is not receiving values
			// to prevent them from getting stuck.
			close(am.term)
			return
		}
	}
}</code></pre><p><strong>4) backend</strong></p><p>&#x8FD4;&#x56DE;backend</p><pre><code>func (am *Manager) Backends(kind reflect.Type) []Backend {
	am.lock.RLock()
	defer am.lock.RUnlock()

	return am.backends[kind]
}</code></pre><p><strong>5&#xFF09;&#x8D26;&#x6237;&#x7BA1;&#x7406;&#x5668;&#xFF08;<code>Manager</code>&#xFF09;&#x7684;&#x51E0;&#x4E2A;&#x65B9;&#x6CD5;&#xFF0C;&#x7528;&#x4E8E;&#x64CD;&#x4F5C;&#x548C;&#x7BA1;&#x7406;&#x8D26;&#x6237;&#x53CA;&#x5176;&#x76F8;&#x5173;&#x540E;&#x7AEF;&#x3002;</strong></p><ul><li><code>Close() error</code>: &#x8FD9;&#x4E2A;&#x65B9;&#x6CD5;&#x7528;&#x4E8E;&#x7EC8;&#x6B62;&#x8D26;&#x6237;&#x7BA1;&#x7406;&#x5668;&#x5185;&#x90E8;&#x7684;&#x901A;&#x77E5;&#x6D41;&#x7A0B;&#x3002;&#x5B83;&#x5C06;&#x4E00;&#x4E2A;&#x9519;&#x8BEF;&#x901A;&#x9053;&#x4F20;&#x9012;&#x7ED9; <code>quit</code> &#x901A;&#x9053;&#xFF0C;&#x5E76;&#x4E14;&#x7B49;&#x5F85;&#x8FD4;&#x56DE;&#x7684;&#x9519;&#x8BEF;&#x4FE1;&#x53F7;&#x3002;&#x4E00;&#x65E6; <code>Close()</code> &#x88AB;&#x8C03;&#x7528;&#xFF0C;&#x8D26;&#x6237;&#x7BA1;&#x7406;&#x5668;&#x7684;&#x5185;&#x90E8;&#x901A;&#x77E5;&#x6D41;&#x7A0B;&#x5C06;&#x4F1A;&#x88AB;&#x5173;&#x95ED;&#x3002;</li><li><code>Config() *Config</code>: &#x8FD9;&#x4E2A;&#x65B9;&#x6CD5;&#x7528;&#x4E8E;&#x83B7;&#x53D6;&#x8D26;&#x6237;&#x7BA1;&#x7406;&#x5668;&#x7684;&#x914D;&#x7F6E;&#x4FE1;&#x606F;&#xFF0C;&#x8FD4;&#x56DE;&#x4E00;&#x4E2A;&#x6307;&#x5411; <code>Config</code> &#x7ED3;&#x6784;&#x4F53;&#x7684;&#x6307;&#x9488;&#x3002;&#x5B83;&#x5141;&#x8BB8;&#x5916;&#x90E8;&#x8BBF;&#x95EE;&#x8D26;&#x6237;&#x7BA1;&#x7406;&#x5668;&#x7684;&#x914D;&#x7F6E;&#x53C2;&#x6570;&#x3002;</li><li><code>AddBackend(backend Backend)</code>: &#x8FD9;&#x4E2A;&#x65B9;&#x6CD5;&#x7528;&#x4E8E;&#x542F;&#x52A8;&#x5BF9;&#x989D;&#x5916;&#x540E;&#x7AEF;&#x7684;&#x8FFD;&#x8E2A;&#xFF0C;&#x4EE5;&#x4FBF;&#x8FDB;&#x884C;&#x94B1;&#x5305;&#x66F4;&#x65B0;&#x3002;&#x5B83;&#x521B;&#x5EFA;&#x4E86;&#x4E00;&#x4E2A;&#x7A7A;&#x7684;&#x4FE1;&#x53F7;&#x901A;&#x9053; <code>done</code>&#xFF0C;&#x5E76;&#x901A;&#x8FC7; <code>newBackends</code> &#x901A;&#x9053;&#x53D1;&#x9001;&#x4E00;&#x4E2A; <code>newBackendEvent</code> &#x7ED3;&#x6784;&#x4F53;&#xFF0C;&#x901A;&#x77E5;&#x8D26;&#x6237;&#x7BA1;&#x7406;&#x5668;&#x8981;&#x5F00;&#x59CB;&#x8FFD;&#x8E2A;&#x4E00;&#x4E2A;&#x65B0;&#x7684;&#x540E;&#x7AEF;&#x3002;&#x5728;&#x53D1;&#x9001;&#x901A;&#x77E5;&#x540E;&#xFF0C;&#x65B9;&#x6CD5;&#x4F1A;&#x7B49;&#x5F85;&#x5E76;&#x963B;&#x585E;&#xFF0C;&#x76F4;&#x5230;&#x6536;&#x5230;&#x4E86; <code>done</code> &#x4FE1;&#x53F7;&#xFF0C;&#x8FD9;&#x8868;&#x793A;&#x65B0;&#x7684;&#x540E;&#x7AEF;&#x5DF2;&#x7ECF;&#x88AB;&#x6210;&#x529F;&#x6574;&#x5408;&#x5230;&#x4E86;&#x8D26;&#x6237;&#x7BA1;&#x7406;&#x5668;&#x4E2D;&#x3002;</li></ul><pre><code class="language-golang">func (am *Manager) Close() error {
	errc := make(chan error)
	am.quit &lt;- errc
	return &lt;-errc
}

func (am *Manager) Config() *Config {
	return am.config
}

func (am *Manager) AddBackend(backend Backend) {
	done := make(chan struct{})
	am.newBackends &lt;- newBackendEvent{backend, done}
	&lt;-done
}</code></pre><p>&#x8FD9;&#x4E9B;&#x65B9;&#x6CD5;&#x7EC4;&#x6210;&#x4E86;&#x8D26;&#x6237;&#x7BA1;&#x7406;&#x5668;&#x7684;&#x4E00;&#x90E8;&#x5206;&#xFF0C;&#x5141;&#x8BB8;&#x5BF9;&#x8D26;&#x6237;&#x7BA1;&#x7406;&#x5668;&#x8FDB;&#x884C;&#x5173;&#x95ED;&#x3001;&#x83B7;&#x53D6;&#x914D;&#x7F6E;&#x4FE1;&#x606F;&#xFF0C;&#x5E76;&#x6DFB;&#x52A0;&#x65B0;&#x7684;&#x540E;&#x7AEF;&#x4EE5;&#x8FDB;&#x884C;&#x94B1;&#x5305;&#x66F4;&#x65B0;&#x7684;&#x8DDF;&#x8E2A;&#x3002;</p><p><strong>6) subscribe</strong></p><p>&#x8BA2;&#x9605;&#x6D88;&#x606F;</p><pre><code>// Subscribe creates an async subscription to receive notifications when the
// manager detects the arrival or departure of a wallet from any of its backends.
func (am *Manager) Subscribe(sink chan&lt;- WalletEvent) event.Subscription {
	return am.feed.Subscribe(sink)
}
</code></pre><p><strong>7) wallets</strong></p><p>&#x4E00;&#x4E0B;&#x65B9;&#x6CD5;&#x5C5E;&#x4E8E;&#x8D26;&#x6237;&#x7BA1;&#x7406;&#x5668; (<code>Manager</code>)&#xFF0C;&#x7528;&#x4E8E;&#x7BA1;&#x7406;&#x548C;&#x64CD;&#x4F5C;&#x8D26;&#x6237;&#x3001;&#x94B1;&#x5305;&#x4EE5;&#x53CA;&#x94B1;&#x5305;&#x5730;&#x5740;&#x3002;</p><h3 id="wallets-%E6%96%B9%E6%B3%95"><code>Wallets()</code> &#x65B9;&#x6CD5;</h3><ul><li><code>Wallets() []Wallet</code>: &#x8FD4;&#x56DE;&#x6240;&#x6709;&#x5728;&#x6B64;&#x8D26;&#x6237;&#x7BA1;&#x7406;&#x5668;&#x4E0B;&#x6CE8;&#x518C;&#x7684;&#x7B7E;&#x540D;&#x8D26;&#x6237;&#x3002;&#x8FD9;&#x4E2A;&#x65B9;&#x6CD5;&#x83B7;&#x53D6;&#x4E86;&#x8BFB;&#x53D6;&#x9501; (<code>RLock</code>)&#xFF0C;&#x5E76;&#x5728;&#x83B7;&#x53D6;&#x540E;&#x7ACB;&#x5373;&#x91CA;&#x653E;&#x9501; (<code>RUnlock</code>)&#xFF0C;&#x7136;&#x540E;&#x8C03;&#x7528;&#x4E86; <code>walletsNoLock()</code> &#x65B9;&#x6CD5;&#x6765;&#x83B7;&#x53D6;&#x6240;&#x6709;&#x5DF2;&#x6CE8;&#x518C;&#x7684;&#x94B1;&#x5305;&#x3002;</li></ul><pre><code class="language-golang">func (am *Manager) Wallets() []Wallet {
	am.lock.RLock()
	defer am.lock.RUnlock()

	return am.walletsNoLock()
}</code></pre><h3 id="walletsnolock-%E6%96%B9%E6%B3%95"><code>walletsNoLock()</code> &#x65B9;&#x6CD5;</h3><ul><li><code>walletsNoLock() []Wallet</code>: &#x5728;&#x4E0D;&#x83B7;&#x53D6;&#x9501;&#x7684;&#x60C5;&#x51B5;&#x4E0B;&#x8FD4;&#x56DE;&#x6240;&#x6709;&#x5DF2;&#x6CE8;&#x518C;&#x7684;&#x94B1;&#x5305;&#x3002;&#x7531;&#x4E8E;&#x8FD9;&#x4E2A;&#x65B9;&#x6CD5;&#x88AB; <code>Wallets()</code> &#x65B9;&#x6CD5;&#x8C03;&#x7528;&#xFF0C;&#x5B83;&#x88AB;&#x9650;&#x5236;&#x5728;&#x62E5;&#x6709;&#x8BFB;&#x53D6;&#x9501;&#x7684;&#x60C5;&#x51B5;&#x4E0B;&#x8C03;&#x7528;&#x3002;</li></ul><pre><code class="language-golang">func (am *Manager) walletsNoLock() []Wallet {
	cpy := make([]Wallet, len(am.wallets))
	copy(cpy, am.wallets)
	return cpy
}</code></pre><h3 id="wallet-%E6%96%B9%E6%B3%95"><code>Wallet()</code> &#x65B9;&#x6CD5;</h3><ul><li><code>Wallet(url string) (Wallet, error)</code>: &#x6839;&#x636E;&#x7279;&#x5B9A; URL &#x68C0;&#x7D22;&#x4E0E;&#x4E4B;&#x76F8;&#x5173;&#x8054;&#x7684;&#x94B1;&#x5305;&#x3002;&#x8FD9;&#x4E2A;&#x65B9;&#x6CD5;&#x5148;&#x4F7F;&#x7528; <code>parseURL()</code> &#x51FD;&#x6570;&#x89E3;&#x6790;&#x4F20;&#x5165;&#x7684; URL&#xFF0C;&#x7136;&#x540E;&#x5728;&#x5DF2;&#x6CE8;&#x518C;&#x7684;&#x94B1;&#x5305;&#x5217;&#x8868;&#x4E2D;&#x67E5;&#x627E;&#x5339;&#x914D;&#x7684;&#x94B1;&#x5305;&#xFF0C;&#x627E;&#x5230;&#x5339;&#x914D;&#x7684;&#x5219;&#x8FD4;&#x56DE;&#x94B1;&#x5305;&#x5B9E;&#x4F8B;&#xFF0C;&#x627E;&#x4E0D;&#x5230;&#x5219;&#x8FD4;&#x56DE; <code>ErrUnknownWallet</code> &#x9519;&#x8BEF;&#x3002;</li></ul><pre><code class="language-golang">func (am *Manager) Wallet(url string) (Wallet, error) {
	am.lock.RLock()
	defer am.lock.RUnlock()

	parsed, err := parseURL(url)
	if err != nil {
		return nil, err
	}
	for _, wallet := range am.walletsNoLock() {
		if wallet.URL() == parsed {
			return wallet, nil
		}
	}
	return nil, ErrUnknownWallet
}</code></pre><h3 id="accounts-%E6%96%B9%E6%B3%95"><code>Accounts()</code> &#x65B9;&#x6CD5;</h3><ul><li><code>Accounts() []common.Address</code>: &#x8FD4;&#x56DE;&#x8D26;&#x6237;&#x7BA1;&#x7406;&#x5668;&#x4E2D;&#x6240;&#x6709;&#x94B1;&#x5305;&#x7684;&#x6240;&#x6709;&#x8D26;&#x6237;&#x5730;&#x5740;&#x3002;&#x5B83;&#x83B7;&#x53D6;&#x8BFB;&#x53D6;&#x9501;&#xFF0C;&#x7136;&#x540E;&#x904D;&#x5386;&#x6240;&#x6709;&#x5DF2;&#x6CE8;&#x518C;&#x7684;&#x94B1;&#x5305;&#xFF0C;&#x5E76;&#x6536;&#x96C6;&#x5B83;&#x4EEC;&#x7684;&#x8D26;&#x6237;&#x5730;&#x5740;&#xFF0C;&#x6700;&#x7EC8;&#x8FD4;&#x56DE;&#x4E00;&#x4E2A;&#x5730;&#x5740;&#x5207;&#x7247;&#x3002;</li></ul><pre><code class="language-golang">func (am *Manager) Accounts() []common.Address {
	am.lock.RLock()
	defer am.lock.RUnlock()

	addresses := make([]common.Address, 0) // return [] instead of nil if empty
	for _, wallet := range am.wallets {
		for _, account := range wallet.Accounts() {
			addresses = append(addresses, account.Address)
		}
	}
	return addresses
}</code></pre><h3 id="find-%E6%96%B9%E6%B3%95"><code>Find()</code> &#x65B9;&#x6CD5;</h3><ul><li><code>Find(account Account) (Wallet, error)</code>: &#x901A;&#x8FC7;&#x6307;&#x5B9A;&#x7684;&#x8D26;&#x6237;&#x6765;&#x5BFB;&#x627E;&#x5176;&#x5BF9;&#x5E94;&#x7684;&#x94B1;&#x5305;&#x3002;&#x5B83;&#x83B7;&#x53D6;&#x8BFB;&#x53D6;&#x9501;&#xFF0C;&#x7136;&#x540E;&#x904D;&#x5386;&#x6240;&#x6709;&#x5DF2;&#x6CE8;&#x518C;&#x7684;&#x94B1;&#x5305;&#x6765;&#x67E5;&#x627E;&#x5305;&#x542B;&#x6307;&#x5B9A;&#x8D26;&#x6237;&#x7684;&#x94B1;&#x5305;&#x3002;&#x5982;&#x679C;&#x627E;&#x5230;&#x5339;&#x914D;&#x7684;&#x94B1;&#x5305;&#xFF0C;&#x5219;&#x8FD4;&#x56DE;&#x8BE5;&#x94B1;&#x5305;&#x5B9E;&#x4F8B;&#xFF0C;&#x5426;&#x5219;&#x8FD4;&#x56DE; <code>ErrUnknownAccount</code> &#x9519;&#x8BEF;&#x3002;</li></ul><pre><code class="language-golang">func (am *Manager) Find(account Account) (Wallet, error) {
	am.lock.RLock()
	defer am.lock.RUnlock()

	for _, wallet := range am.wallets {
		if wallet.Contains(account) {
			return wallet, nil
		}
	}
	return nil, ErrUnknownAccount
}</code></pre><h3 id="subscribe-%E6%96%B9%E6%B3%95"><code>Subscribe()</code> &#x65B9;&#x6CD5;</h3><ul><li><code>Subscribe(sink chan&lt;- WalletEvent) event.Subscription</code>: &#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x5F02;&#x6B65;&#x8BA2;&#x9605;&#xFF0C;&#x7528;&#x4E8E;&#x63A5;&#x6536;&#x8D26;&#x6237;&#x7BA1;&#x7406;&#x5668;&#x68C0;&#x6D4B;&#x5230;&#x7684;&#x94B1;&#x5305;&#x5230;&#x6765;&#x6216;&#x79BB;&#x5F00;&#x7684;&#x901A;&#x77E5;&#x3002;&#x5B83;&#x8FD4;&#x56DE;&#x4E00;&#x4E2A;&#x4E8B;&#x4EF6;&#x8BA2;&#x9605;&#x63A5;&#x53E3;&#x3002;</li></ul><pre><code class="language-golang">func (am *Manager) Subscribe(sink chan&lt;- WalletEvent) event.Subscription {
	return am.feed.Subscribe(sink)
}</code></pre><h3 id="merge-%E5%92%8C-drop-%E6%96%B9%E6%B3%95"><code>merge()</code> &#x548C; <code>drop()</code> &#x65B9;&#x6CD5;</h3><p>&#x8FD9;&#x4E24;&#x4E2A;&#x65B9;&#x6CD5;&#x662F;&#x7528;&#x4E8E;&#x5904;&#x7406;&#x94B1;&#x5305;&#x5207;&#x7247;&#x7684;&#x5DE5;&#x5177;&#x51FD;&#x6570;&#x3002;<code>merge()</code> &#x51FD;&#x6570;&#x6309;&#x987A;&#x5E8F;&#x63D2;&#x5165;&#x65B0;&#x7684;&#x94B1;&#x5305;&#xFF0C;&#x5E76;&#x4FDD;&#x6301;&#x539F;&#x59CB;&#x5217;&#x8868;&#x7684;&#x987A;&#x5E8F;&#x3002;<code>drop()</code> &#x51FD;&#x6570;&#x4ECE;&#x6392;&#x5E8F;&#x7F13;&#x5B58;&#x4E2D;&#x79FB;&#x9664;&#x6307;&#x5B9A;&#x7684;&#x94B1;&#x5305;&#x3002;&#x8FD9;&#x4E9B;&#x65B9;&#x6CD5;&#x4E3B;&#x8981;&#x7528;&#x4E8E;&#x5728;&#x7BA1;&#x7406;&#x5668;&#x4E2D;&#x6DFB;&#x52A0;&#x6216;&#x79FB;&#x9664;&#x94B1;&#x5305;&#x65F6;&#x7EF4;&#x62A4;&#x94B1;&#x5305;&#x5207;&#x7247;&#x7684;&#x6709;&#x5E8F;&#x6027;&#x3002;</p><pre><code class="language-golang">func merge(slice []Wallet, wallets ...Wallet) []Wallet {
	for _, wallet := range wallets {
		n := sort.Search(len(slice), func(i int) bool { return slice[i].URL().Cmp(wallet.URL()) &gt;= 0 })
		if n == len(slice) {
			slice = append(slice, wallet)
			continue
		}
		slice = append(slice[:n], append([]Wallet{wallet}, slice[n:]...)...)
	}
	return slice
}

func drop(slice []Wallet, wallets ...Wallet) []Wallet {
	for _, wallet := range wallets {
		n := sort.Search(len(slice), func(i int) bool { return slice[i].URL().Cmp(wallet.URL()) &gt;= 0 })
		if n == len(slice) {
			// Wallet not found, may happen during startup
			continue
		}
		slice = append(slice[:n], slice[n+1:]...)
	}
	return slice
}
</code></pre><h3 id="4%E3%80%81urlgo">4&#x3001;url.go</h3><p>&#x8FD9;&#x4E2A;&#x6587;&#x4EF6;&#x4E2D;&#x7684;&#x4EE3;&#x7801;&#x5B9A;&#x4E49;&#x4E86;&#x4EE3;&#x8868;&#x4EE5;&#x592A;&#x574A;&#x94B1;&#x5305;&#x8DEF;&#x5F84;&#x7684;URL&#x7ED3;&#x6784;&#x4F53;&#x53CA;&#x76F8;&#x5173;&#x51FD;&#x6570;&#x3002;&#x4E0E;hd.go&#x4E2D;&#x4E0D;&#x540C;&#x7684;&#x662F;&#xFF0C;URL&#x7ED3;&#x6784;&#x4F53;&#x4E2D;&#x4FDD;&#x5B58;&#x4E86;&#x94B1;&#x5305;&#x7684;&#x7C7B;&#x578B;&#xFF08;scheme&#xFF09;&#x548C;&#x94B1;&#x5305;&#x8DEF;&#x5F84;&#x7684;&#x5B57;&#x7B26;&#x4E32;&#x5F62;&#x5F0F;&#x7684;&#x8868;&#x793A;&#xFF1B;&#x800C;hd.go&#x4E2D;&#x5B9A;&#x4E49;&#x4E86;HD&#x94B1;&#x5305;&#x8DEF;&#x5F84;&#x7684;&#x7C7B;&#x578B;&#xFF08;&#x975E;&#x5B57;&#x7B26;&#x4E32;&#x7C7B;&#x578B;&#xFF09;&#x7684;&#x89E3;&#x6790;&#x53CA;&#x5B57;&#x7B26;&#x4E32;&#x8F6C;&#x6362;&#x7B49;&#x65B9;&#x6CD5;&#x3002;</p><h3 id="5%E3%80%81keystore">5&#x3001;keystore</h3><p>&#x8FD9;&#x662F;&#x4E00;&#x4E2A;&#x5B50;&#x76EE;&#x5F55;&#xFF0C;&#x6B64;&#x76EE;&#x5F55;&#x4E0B;&#x7684;&#x4EE3;&#x7801;&#x5B9E;&#x73B0;&#x4E86;keystore&#x7C7B;&#x578B;&#x7684;&#x94B1;&#x5305;&#x3002;</p><ul><li>account_cache.go</li></ul><p>&#x6B64;&#x6587;&#x4EF6;&#x4E2D;&#x7684;&#x4EE3;&#x7801;&#x5B9E;&#x73B0;&#x4E86;accountCache&#x7ED3;&#x6784;&#x4F53;&#x53CA;&#x65B9;&#x6CD5;&#x3002;accountCache&#x7684;&#x529F;&#x80FD;&#x662F;&#x5728;&#x5185;&#x5B58;&#x4E2D;&#x7F13;&#x5B58;keystore&#x94B1;&#x5305;&#x76EE;&#x5F55;&#x4E0B;&#x6240;&#x6709;&#x8D26;&#x53F7;&#x4FE1;&#x606F;&#x3002;&#x65E0;&#x8BBA;keystore&#x76EE;&#x5F55;&#x4E2D;&#x7684;&#x6587;&#x4EF6;&#x5982;&#x4F55;&#x53D8;&#x52A8;&#xFF08;&#x65B0;&#x5EFA;&#x3001;&#x5220;&#x9664;&#x3001;&#x4FEE;&#x6539;&#xFF09;&#xFF0C;accountCache&#x90FD;&#x53EF;&#x4EE5;&#x5728;&#x626B;&#x63CF;&#x76EE;&#x5F55;&#x65F6;&#x5C06;&#x53D8;&#x52A8;&#x66F4;&#x65B0;&#x5230;&#x5185;&#x5B58;&#x4E2D;&#x3002;</p><ul><li>file_cache.go</li></ul><p>&#x6B64;&#x6587;&#x4EF6;&#x4E2D;&#x7684;&#x4EE3;&#x7801;&#x5B9E;&#x73B0;&#x4E86;fileCache&#x7ED3;&#x6784;&#x4F53;&#x53CA;&#x76F8;&#x5173;&#x4EE3;&#x7801;&#x3002;&#x4E0E;account_cache.go&#x7C7B;&#x4F3C;&#xFF0C;file_cache.go&#x4E2D;&#x5B9E;&#x73B0;&#x4E86;&#x5BF9;keystore&#x76EE;&#x5F55;&#x4E0B;&#x6240;&#x6709;&#x6587;&#x4EF6;&#x7684;&#x4FE1;&#x606F;&#x7684;&#x7F13;&#x5B58;&#x3002;accountCache&#x5C31;&#x662F;&#x901A;&#x8FC7;fileCache&#x6765;&#x83B7;&#x53D6;&#x6587;&#x4EF6;&#x53D8;&#x52A8;&#x7684;&#x4FE1;&#x606F;&#xFF0C;&#x8FDB;&#x800C;&#x5F97;&#x5230;&#x8D26;&#x53F7;&#x53D8;&#x52A8;&#x4FE1;&#x606F;&#x7684;&#x3002;</p><ul><li>key.go</li></ul><p>key.go&#x4E3B;&#x8981;&#x5B9A;&#x4E49;&#x4E86;Key&#x7ED3;&#x6784;&#x4F53;&#x53CA;&#x5176;json&#x683C;&#x5F0F;&#x7684;marshal/unmarshal&#x65B9;&#x5F0F;&#x3002;&#x53E6;&#x5916;&#x8FD9;&#x4E2A;&#x6587;&#x4EF6;&#x4E2D;&#x8FD8;&#x5B9A;&#x4E49;&#x4E86;&#x901A;&#x8FC7;keyStore&#x63A5;&#x53E3;&#x5C06;Key&#x5199;&#x5165;&#x6587;&#x4EF6;&#x4E2D;&#x7684;&#x51FD;&#x6570;&#x3002;keyStore&#x63A5;&#x53E3;&#x4E2D;&#x5B9A;&#x4E49;&#x4E86;Key&#x88AB;&#x5199;&#x5165;&#x6587;&#x4EF6;&#x7684;&#x5177;&#x4F53;&#x7EC6;&#x8282;&#xFF0C;&#x5728;passphrase.go&#x548C;plain.go&#x4E2D;&#x90FD;&#x6709;&#x5B9E;&#x73B0;&#x3002;</p><ul><li>keystore.go</li></ul><p>&#x8FD9;&#x4E2A;&#x6587;&#x4EF6;&#x91CC;&#x7684;&#x4EE3;&#x7801;&#x5B9A;&#x4E49;&#x4E86;KeyStore&#x7ED3;&#x6784;&#x4F53;&#x53CA;&#x5176;&#x65B9;&#x6CD5;&#x3002;KeyStore&#x7ED3;&#x6784;&#x4F53;&#x5B9E;&#x73B0;&#x4E86;Backend&#x63A5;&#x53E3;&#xFF0C;&#x662F;keystore&#x7C7B;&#x578B;&#x7684;&#x94B1;&#x5305;&#x7684;&#x540E;&#x7AEF;&#x5B9E;&#x73B0;&#x3002;&#x540C;&#x65F6;&#x5B83;&#x4E5F;&#x5B9E;&#x73B0;&#x4E86;keystore&#x7C7B;&#x578B;&#x94B1;&#x5305;&#x7684;&#x5927;&#x591A;&#x6570;&#x529F;&#x80FD;&#x3002;</p><ul><li>passphrase.go</li></ul><p>passphrase.go&#x4E2D;&#x5B9A;&#x4E49;&#x4E86;keyStorePassphrase&#x7ED3;&#x6784;&#x4F53;&#x53CA;&#x5176;&#x65B9;&#x6CD5;&#x3002;keyStorePassphrase&#x7ED3;&#x6784;&#x4F53;&#x662F;&#x5BF9;keyStore&#x63A5;&#x53E3;&#xFF08;&#x5728;key.go&#x6587;&#x4EF6;&#x4E2D;&#xFF09;&#x7684;&#x4E00;&#x79CD;&#x5B9E;&#x73B0;&#x65B9;&#x5F0F;&#xFF0C;&#x5B83;&#x4F1A;&#x8981;&#x6C42;&#x8C03;&#x7528;&#x8005;&#x63D0;&#x4F9B;&#x4E00;&#x4E2A;&#x5BC6;&#x7801;&#xFF0C;&#x4ECE;&#x800C;&#x4F7F;&#x7528;aes&#x52A0;&#x5BC6;&#x7B97;&#x6CD5;&#x52A0;&#x5BC6;&#x79C1;&#x94A5;&#x540E;&#xFF0C;&#x5C06;&#x52A0;&#x5BC6;&#x6570;&#x636E;&#x5199;&#x5165;&#x6587;&#x4EF6;&#x4E2D;&#x3002;</p><ul><li>plain.go</li></ul><p>&#x8FD9;&#x4E2A;&#x6587;&#x4EF6;&#x4E2D;&#x7684;&#x4EE3;&#x7801;&#x5B9A;&#x4E49;&#x4E86;keyStorePlain&#x7ED3;&#x6784;&#x4F53;&#x53CA;&#x5176;&#x65B9;&#x6CD5;&#x3002;keyStorePlain&#x4E0E;keyStorePassphrase&#x7C7B;&#x4F3C;&#xFF0C;&#x4E5F;&#x662F;&#x5BF9;keyStore&#x63A5;&#x53E3;&#x7684;&#x5B9E;&#x73B0;&#x3002;&#x4E0D;&#x540C;&#x7684;&#x662F;&#xFF0C;keyStorePlain&#x76F4;&#x63A5;&#x5C06;&#x5BC6;&#x7801;&#x660E;&#x6587;&#x5B58;&#x50A8;&#x5728;&#x6587;&#x4EF6;&#x4E2D;&#x3002;&#x76EE;&#x524D;&#x8FD9;&#x79CD;&#x65B9;&#x5F0F;&#x5DF2;&#x88AB;&#x6807;&#x8BB0;&#x5F03;&#x7528;&#x4E14;&#x6574;&#x4E2A;&#x4EE5;&#x592A;&#x574A;&#x9879;&#x76EE;&#x4E2D;&#x90FD;&#x6CA1;&#x6709;&#x8C03;&#x7528;&#x8FD9;&#x4E2A;&#x6587;&#x4EF6;&#x91CC;&#x7684;&#x51FD;&#x6570;&#x7684;&#x5730;&#x65B9;&#xFF0C;&#x786E;&#x5B9E;&#x8C01;&#x4E5F;&#x4E0D;&#x60F3;&#x5C06;&#x81EA;&#x5DF1;&#x7684;&#x79C1;&#x94A5;&#x660E;&#x6587;&#x5B58;&#x5728;&#x672C;&#x5730;&#x78C1;&#x76D8;&#x4E0A;&#x3002;</p><ul><li>wallet.go</li></ul><p>wallet.go&#x4E2D;&#x5B9A;&#x4E49;&#x4E86;keystoreWallet&#x7ED3;&#x6784;&#x4F53;&#x53CA;&#x5176;&#x65B9;&#x6CD5;&#x3002;keystoreWallet&#x662F;keystore&#x7C7B;&#x578B;&#x7684;&#x94B1;&#x5305;&#x7684;&#x5B9E;&#x73B0;&#xFF0C;&#x4F46;&#x5176;&#x529F;&#x80FD;&#x57FA;&#x672C;&#x90FD;&#x662F;&#x8C03;&#x7528;KeyStore&#x5BF9;&#x8C61;&#x5B9E;&#x73B0;&#x7684;&#x3002;</p><ul><li>watch.go</li></ul><p>watch.go&#x4E2D;&#x5B9A;&#x4E49;&#x4E86;watcher&#x7ED3;&#x6784;&#x4F53;&#x53CA;&#x5176;&#x65B9;&#x6CD5;&#x3002;watcher&#x7528;&#x6765;&#x76D1;&#x63A7;keystore&#x76EE;&#x5F55;&#x4E0B;&#x7684;&#x6587;&#x4EF6;&#xFF0C;&#x5982;&#x679C;&#x6587;&#x4EF6;&#x53D1;&#x751F;&#x53D8;&#x5316;&#xFF0C;&#x5219;&#x7ACB;&#x5373;&#x8C03;&#x7528;account_cache.go&#x4E2D;&#x7684;&#x4EE3;&#x7801;&#x91CD;&#x65B0;&#x626B;&#x63CF;&#x8D26;&#x6237;&#x4FE1;&#x606F;&#x3002;&#x4F46;watcher&#x53EA;&#x5728;&#x67D0;&#x4E9B;&#x7CFB;&#x7EDF;&#x4E0B;&#x6709;&#x6548;&#xFF0C;&#x8FD9;&#x662F;&#x6587;&#x4EF6;&#x7684;build&#x6CE8;&#x91CA;&#xFF1A;// +build darwin,!ios freebsd linux,!arm64 netbsd solaris</p><h3 id="6%E3%80%81usbwallet">6&#x3001;usbwallet</h3><p>&#x8FD9;&#x662F;&#x4E00;&#x4E2A;&#x5B50;&#x76EE;&#x5F55;&#xFF0C;&#x6B64;&#x76EE;&#x5F55;&#x4E0B;&#x7684;&#x4EE3;&#x7801;&#x5B9E;&#x73B0;&#x4E86;&#x5BF9;&#x901A;&#x8FC7;usb&#x63A5;&#x5165;&#x7684;&#x786C;&#x4EF6;&#x94B1;&#x5305;&#x7684;&#x8BBF;&#x95EE;&#x3002;</p><ul><li>hub.go</li></ul><p>hub.go&#x4E2D;&#x5B9A;&#x4E49;&#x4E86;Hub&#x7ED3;&#x6784;&#x4F53;&#x53CA;&#x5176;&#x65B9;&#x6CD5;&#x3002;Hub&#x7ED3;&#x6784;&#x4F53;&#x5B9E;&#x73B0;&#x4E86;Backend&#x63A5;&#x53E3;&#xFF0C;&#x662F;usbwallet&#x7C7B;&#x578B;&#x7684;&#x94B1;&#x5305;&#x7684;&#x540E;&#x7AEF;&#x5B9E;&#x73B0;&#x3002;</p><ul><li>ledger.go</li></ul><p>ledger.go&#x4E2D;&#x5B9A;&#x4E49;&#x4E86;ledgerDriver&#x7ED3;&#x6784;&#x4F53;&#x53CA;&#x5176;&#x65B9;&#x6CD5;&#x3002;ledgerDriver&#x7ED3;&#x6784;&#x4F53;&#x662F;driver&#x63A5;&#x53E3;&#x7684;&#x5B9E;&#x73B0;&#xFF0C;&#x5B83;&#x5B9E;&#x73B0;&#x4E86;&#x4E0E;ledger&#x7C7B;&#x578B;&#x7684;&#x786C;&#x4EF6;&#x94B1;&#x5305;&#x901A;&#x4FE1;&#x534F;&#x8BAE;&#x548C;&#x4EE3;&#x7801;&#x3002;</p><ul><li>trezor.go</li></ul><p>trezor.go&#x4E2D;&#x5B9A;&#x4E49;&#x4E86;trezorDriver&#x7ED3;&#x6784;&#x4F53;&#x53CA;&#x5176;&#x65B9;&#x6CD5;&#x3002;&#x4E0E;ledgerDriver&#x7C7B;&#x4F3C;&#xFF0C;trezorDriver&#x7ED3;&#x6784;&#x4F53;&#x4E5F;&#x662F;driver&#x63A5;&#x53E3;&#x7684;&#x5B9E;&#x73B0;&#xFF0C;&#x5B83;&#x5B9E;&#x73B0;&#x4E86;&#x4E0E;trezor&#x7C7B;&#x578B;&#x7684;&#x786C;&#x4EF6;&#x94B1;&#x5305;&#x7684;&#x901A;&#x4FE1;&#x534F;&#x8BAE;&#x548C;&#x4EE3;&#x7801;&#x3002;</p><ul><li>wallet.go</li></ul><p>wallet.go&#x4E2D;&#x5B9A;&#x4E49;&#x4E86;wallet&#x7ED3;&#x6784;&#x4F53;&#x3002;wallet&#x7ED3;&#x6784;&#x4F53;&#x5B9E;&#x73B0;&#x4E86;Wallet&#x63A5;&#x53E3;&#xFF0C;&#x662F;&#x786C;&#x4EF6;&#x94B1;&#x5305;&#x7684;&#x5177;&#x4F53;&#x5B9E;&#x73B0;&#x3002;&#x4F46;&#x5B83;&#x5185;&#x90E8;&#x5176;&#x5B9E;&#x4E3B;&#x8981;&#x8C03;&#x7528;&#x786C;&#x4EF6;&#x94B1;&#x5305;&#x7684;driver&#x5B9E;&#x73B0;&#x76F8;&#x5173;&#x529F;&#x80FD;&#x3002;</p><h3 id="7%E3%80%81scwallet">7&#x3001;scwallet</h3><p>&#x8FD9;&#x4E2A;&#x6587;&#x4EF6;&#x5939;&#x662F;&#x5173;&#x4E8E;&#x4E0D;&#x540C;account&#x4E4B;&#x95F4;&#x7684;&#x4E92;&#x76F8;&#x5B89;&#x5168;&#x901A;&#x4FE1;&#xFF08;secure wallet&#xFF09;&#xFF0C;&#x901A;&#x8FC7;&#x5B9A;&#x4E49;&#x4F1A;&#x8BDD;&#x79D8;&#x94A5;&#x3001;&#x4E8C;&#x7EA7;&#x79D8;&#x94A5;&#x6765;&#x786E;&#x4FDD;&#x901A;&#x8BDD;&#x53CC;&#x65B9;&#x7684;&#x4FE1;&#x606F;&#x771F;&#x5B9E;&#x3001;&#x4E0D;&#x88AB;&#x7BE1;&#x6539;&#x3001;&#x5229;&#x7528;&#x3002; &#x5C24;&#x5176;&#x662F;&#x8F6C;&#x8D26;&#x4FE1;&#x606F;&#x66F4;&#x4E0D;&#x80FD;&#x88AB;&#x5229;&#x7528;&#x3001;&#x88AB;&#x4ED6;&#x4EBA;&#x6253;&#x5F00;&#x3001;&#x548C;&#x88AB;&#x7BE1;&#x6539;&#x3002;</p><h3 id="8%E3%80%81abi">8&#x3001;abi</h3><p>ABI&#x662F;Application Binary Interface&#x7684;&#x7F29;&#x5199;&#xFF0C;&#x5B57;&#x9762;&#x610F;&#x601D; &#x5E94;&#x7528;&#x4E8C;&#x8FDB;&#x5236;&#x63A5;&#x53E3;&#xFF0C;&#x53EF;&#x4EE5;&#x901A;&#x4FD7;&#x7684;&#x7406;&#x89E3;&#x4E3A;&#x5408;&#x7EA6;&#x7684;&#x63A5;&#x53E3;&#x8BF4;&#x660E;&#x3002;&#x5F53;&#x5408;&#x7EA6;&#x88AB;&#x7F16;&#x8BD1;&#x540E;&#xFF0C;&#x90A3;&#x4E48;&#x5B83;&#x7684;abi&#x4E5F;&#x5C31;&#x786E;&#x5B9A;&#x4E86;&#x3002;abi&#x4E3B;&#x8981;&#x662F;&#x5904;&#x7406;&#x667A;&#x80FD;&#x5408;&#x7EA6;&#x4E0E;&#x8D26;&#x6237;&#x7684;&#x4EA4;&#x4E92;&#x3002;</p>]]></content:encoded></item><item><title><![CDATA[以太坊搭建私链]]></title><description><![CDATA[<p>1&#x3001;&#x5148;&#x521B;&#x5EFA;&#x6587;&#x4EF6;&#x5939;&#xFF0C;&#x4EE5;&#x540E;&#x6316;&#x77FF;&#x5C31;&#x8FDB;&#x8FD9;&#x76EE;&#x5F55;,&#x540D;&#x5B57;&#x968F;&#x610F;&#xFF0C;&#x4E0D;&#x4E00;&#x5B9A;&#x975E;&#x8981;&#x8FD9;&#x4E2A;</p><pre><code>mkdir ChainSkills
cd ChainSkills
mkdir private
</code></pre><p>2&#x3001;&#x8FDB;&#x5165;private&#x6587;&#x4EF6;&#x5939;</p><pre><code>cd private
</code></pre><p>3&#x3001;ps&#xFF1A;</p>]]></description><link>https://www.thinkingsolidity.com/private-ethereum/</link><guid isPermaLink="false">65547a74903d7005b686fed3</guid><category><![CDATA[其他]]></category><dc:creator><![CDATA[Echo_留蝉]]></dc:creator><pubDate>Wed, 15 Nov 2023 08:01:10 GMT</pubDate><content:encoded><![CDATA[<p>1&#x3001;&#x5148;&#x521B;&#x5EFA;&#x6587;&#x4EF6;&#x5939;&#xFF0C;&#x4EE5;&#x540E;&#x6316;&#x77FF;&#x5C31;&#x8FDB;&#x8FD9;&#x76EE;&#x5F55;,&#x540D;&#x5B57;&#x968F;&#x610F;&#xFF0C;&#x4E0D;&#x4E00;&#x5B9A;&#x975E;&#x8981;&#x8FD9;&#x4E2A;</p><pre><code>mkdir ChainSkills
cd ChainSkills
mkdir private
</code></pre><p>2&#x3001;&#x8FDB;&#x5165;private&#x6587;&#x4EF6;&#x5939;</p><pre><code>cd private
</code></pre><p>3&#x3001;ps&#xFF1A;&#x4F7F;&#x7528;puppeth&#x5DE5;&#x5177;</p><pre><code>D:\ChainSkills\private&gt;puppeth
+-----------------------------------------------------------+
| Welcome to puppeth, your Ethereum private network manager |
|                                                           |
| This tool lets you create a new Ethereum network down to  |
| the genesis block, bootnodes, miners and ethstats servers |
| without the hassle that it would normally entail.         |
|                                                           |
| Puppeth uses SSH to dial in to remote servers, and builds |
| its network components out of Docker containers using the |
| docker-compose toolset.                                   |
+-----------------------------------------------------------+

Please specify a network name to administer (no spaces, hyphens or capital letters please)
&gt; chainskills

Sweet, you can set this via --network=chainskills next time!

[32mINFO [0m[11-22|09:01:22.263] Administering Ethereum network           [32mname[0m=chainskills
[33mWARN [0m[11-22|09:01:22.298] No previous configurations found         [33mpath[0m=.puppeth\chainskills

What would you like to do? (default = stats)
 1. Show network stats
 2. Configure new genesis
 3. Track new remote server
 4. Deploy network components
&gt; 2

What would you like to do? (default = create)
 1. Create new genesis from scratch
 2. Import already existing genesis
&gt; 1

Which consensus engine to use? (default = clique)
 1. Ethash - proof-of-work
 2. Clique - proof-of-authority
&gt; 1

Which accounts should be pre-funded? (advisable at least one)
&gt; 0x

Should the precompile-addresses (0x1 .. 0xff) be pre-funded with 1 wei? (advisable yes)
&gt;

Specify your chain/network ID if you want an explicit one (default = random)
&gt; 556677
[32mINFO [0m[11-22|09:01:54.950] Configured new genesis block

What would you like to do? (default = stats)
 1. Show network stats
 2. Manage existing genesis
 3. Track new remote server
 4. Deploy network components
&gt; 2

 1. Modify existing configurations
 2. Export genesis configurations
 3. Remove genesis configuration
&gt; 2

Which folder to save the genesis specs into? (default = current)
  Will create chainskills.json, chainskills-aleth.json, chainskills-harmony.json, chainskills-parity.json
&gt;
[32mINFO [0m[11-22|09:02:10.370] Saved native genesis chain spec          [32mpath[0m=chainskills.json
[32mINFO [0m[11-22|09:02:10.372] Saved genesis chain spec                 [32mclient[0m=aleth [32mpath[0m=chainskills-aleth.json
[32mINFO [0m[11-22|09:02:10.374] Saved genesis chain spec                 [32mclient[0m=parity [32mpath[0m=chainskills-parity.json
[32mINFO [0m[11-22|09:02:10.376] Saved genesis chain spec                 [32mclient[0m=harmony [32mpath[0m=chainskills-harmony.json
</code></pre><p>&#x4EE5;&#x4E0A;&#x8FC7;&#x7A0B;&#x4F1A;&#x521B;&#x5EFA;&#x8FD9;&#x4E2A;&#x521B;&#x4E16;&#x5757;(genesis block)<br>5&#x3001;&#x521D;&#x59CB;&#x5316;&#x8282;&#x70B9;</p><pre><code>geth --datadir . init .\chainskills.json
</code></pre><p>6&#x3001;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x65B0;&#x8D26;&#x6237;</p><pre><code>geth --datadir . account new
</code></pre><p>&#x4F1A;&#x5F39;&#x51FA;password,&#x8F93;&#x5165;&#x5BC6;&#x7801;&#xFF0C;&#x4F1A;&#x662F;&#x9690;&#x5F62;&#x7684;&#xFF0C;&#x4F1A;&#x5F39;&#x51FA;&#x518D;&#x6B21;&#x786E;&#x8BA4;&#xFF0C;&#x5F97;&#x5230;address,&#x8BB0;&#x4F4F;&#x8FD9;&#x5C31;&#x662F;&#x8D26;&#x6237;&#x5730;&#x5740;&#x3002;<br>7&#x3001;&#x521B;&#x5EFA;&#x5BC6;&#x7801;&#x6587;&#x4EF6; password.sec&#xFF0C;&#x628A;&#x4F60;&#x521B;&#x5EFA;&#x8D26;&#x6237;&#x7684;&#x5BC6;&#x7801;&#x653E;&#x5728;&#x91CC;&#x9762;&#x3002;<br>8&#x3001;&#x8BBE;&#x7F6E;&#x4E3B;&#x8D26;&#x6237;&#xFF08;&#x8DF3;&#x8FC7;&#x76F4;&#x63A5;&#x505A;&#x4E0B;&#x9762;&#x4E00;&#x6B65;&#xFF09;&#xFF1A;</p><pre><code>miner.setEtherbase(addr&#x8D26;&#x6237;&#x5730;&#x5740;) 
</code></pre><p>9&#x3001;&#x5BF9;&#x4F60;&#x7684;&#x8D26;&#x6237;&#x6392;&#x5E8F;</p><pre><code>geth --datadir . account list
</code></pre><p>10.&#x8FDB;&#x5165;&#x7F16;&#x8BD1;&#x5668;&#x754C;&#x9762;&#x8F93;&#x5165;&#x6316;&#x77FF;&#x547D;&#x4EE4;</p><p>&#x7C98;&#x8D34;&#x5982;&#x4E0B;&#x547D;&#x4EE4;:</p><pre><code>geth    --networkid 556677   --cache=2048  --nodiscover --datadir &quot;.&quot; --http  --http.api &quot;eth,web3,debug,personal,net,miner&quot; --http.corsdomain &quot;*&quot;  --http.port=8545  --http.addr=&quot;0.0.0.0&quot;    --txpool.lifetime  1m   --allow-insecure-unlock   --unlock 0 --password password.sec    console
</code></pre><p>10&#x3001;&#x5230;&#x7F16;&#x8BD1;&#x5668;&#x4E2D;&#x6253;&#x5F00;chainskill&#x6587;&#x4EF6;&#x5939;&#xFF0C;&#x5728;private&#x53F3;&#x952E;&#x521B;&#x5EFA;password.sec&#xFF0C;&#x8F93;&#x5165;&#x7B2C;&#x4E00;&#x4E2A;&#x8D26;&#x6237;&#x5BC6;&#x7801;<br>11&#x3001;&#x518D;&#x8FDB;&#x5165;private&#x5939;&#x4E2D;&#xFF0C;&#x5F00;&#x59CB;&#x6316;&#x77FF;&#xFF08;startnode.cmd&#x6587;&#x4EF6;&#x9700;&#x8981;&#x81EA;&#x5DF1;&#x65B0;&#x5EFA;&#xFF0C;&#x6587;&#x4EF6;&#x5185;&#x5BB9;&#x5C31;&#x662F;&#x7B2C;10&#x6B65;&#x7684;&#x6316;&#x77FF;&#x547D;&#x4EE4;&#xFF09;</p><pre><code>startnode.cmd
miner.start(1)
</code></pre><p>12.&#x7EC8;&#x6B62;&#x6316;&#x77FF;</p><pre><code>miner.stop()
exit &#x6216; ctrl + c
</code></pre><p>13&#x3001;&#x53EF;&#x53E6;&#x5916;&#x6253;&#x5F00;&#x4E00;&#x4E2A;&#x754C;&#x9762;&#xFF0C;&#x8F93;&#x5165;&#x547D;&#x4EE4;&#xFF0C;&#x53E6;&#x4E00;&#x4E2A;&#x6316;&#x77FF;&#x4E0D;&#x80FD;&#x505C;</p><pre><code>geth attach ipc:\\.\pipe\geth.ipc
</code></pre><p>14&#x3001;&#x5728;&#x6B64;&#x754C;&#x9762;&#x4E2D;&#x4F60;&#x53EF;&#x4EE5;&#x67E5;&#x6709;&#x591A;&#x5C11;&#x8D26;&#x6237;</p><pre><code>eth.accounts
</code></pre><p>15&#x3001;&#x67E5;&#x8BE2;&#x6B63;&#x5728;&#x6316;&#x77FF;&#x7684;&#x8D26;&#x6237;</p><pre><code>eth.coinbase
</code></pre><p>16&#x3001;&#x67E5;&#x8BE2;&#x8D26;&#x6237;&#x6B63;&#x5728;&#x6316;&#x77FF;&#x7684;&#x8D26;&#x6237;&#x4F59;&#x989D;</p><pre><code>eth.getBalance(eth.coinbase)
</code></pre><p>17&#x3001;&#x67E5;&#x8BE2;1&#x8D26;&#x6237;&#x4F59;&#x989D;</p><pre><code>eth.getBalance(eth.accounts[1])
</code></pre><p>18&#x3001;&#x89E3;&#x9501;&#x8D26;&#x6237;</p><pre><code>personal.unlockAccount(&quot;&#x8D26;&#x6237;&quot;)
</code></pre><p>19&#x3001;&#x8F6C;&#x8D26;&#x547D;&#x4EE4;(&#x5148;&#x89E3;&#x9501;&#xFF09;</p><pre><code>eth.sendTransaction({from:&quot;&#x8D26;&#x6237;&#x4E00;&quot;,to:&quot;&#x8D26;&#x6237;&#x4E8C;&quot;,value:web3.toWei(10,&quot;ether&quot;)})
</code></pre><p>20&#x3001;.&#x6362;&#x4E2A;&#x6316;&#x77FF;&#x8D26;&#x6237;</p><pre><code>miner.setEtherbase(&quot;0xffb862171700e1e1954af94d0159a0b0bdd32bd2&quot;); 
</code></pre><p>21&#x3001;&#x7EC8;&#x6B62;&#x6316;&#x77FF;</p><pre><code>miner.stop
</code></pre><p>22&#x3001;&#x5F00;&#x59CB;&#x6316;&#x77FF;</p><pre><code>miner.start
</code></pre>]]></content:encoded></item><item><title><![CDATA[nodejs版本控制]]></title><description><![CDATA[<figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2022/03/image-4.png" class="kg-image" alt loading="lazy" width="659" height="583"></figure><h3 id="1-nvm%E6%98%AF%E4%BB%80%E4%B9%88">1. &#xA0;nvm&#x662F;&#x4EC0;&#x4E48;</h3><p>nvm&#x5168;&#x82F1;&#x6587;&#x4E5F;&#x53EB;node.js version management&#xFF0C;&#x662F;&#x4E00;&#x4E2A;nodejs&#x7684;&#x7248;&#x672C;&#x7BA1;&#x7406;&#x5DE5;&#x5177;&#x3002;nvm&#x548C;n&#x90FD;&#x662F;node.js&#x7248;&#x672C;&#x7BA1;&#x7406;&#x5DE5;&#x5177;&#xFF0C;&#x4E3A;&#x4E86;&#x89E3;&#x51B3;node.js&#x5404;</p>]]></description><link>https://www.thinkingsolidity.com/nodejs/</link><guid isPermaLink="false">623749264171961aaf4abc69</guid><category><![CDATA[其他]]></category><dc:creator><![CDATA[Echo_留蝉]]></dc:creator><pubDate>Sun, 20 Mar 2022 15:37:29 GMT</pubDate><content:encoded><![CDATA[<figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2022/03/image-4.png" class="kg-image" alt loading="lazy" width="659" height="583"></figure><h3 id="1-nvm%E6%98%AF%E4%BB%80%E4%B9%88">1. &#xA0;nvm&#x662F;&#x4EC0;&#x4E48;</h3><p>nvm&#x5168;&#x82F1;&#x6587;&#x4E5F;&#x53EB;node.js version management&#xFF0C;&#x662F;&#x4E00;&#x4E2A;nodejs&#x7684;&#x7248;&#x672C;&#x7BA1;&#x7406;&#x5DE5;&#x5177;&#x3002;nvm&#x548C;n&#x90FD;&#x662F;node.js&#x7248;&#x672C;&#x7BA1;&#x7406;&#x5DE5;&#x5177;&#xFF0C;&#x4E3A;&#x4E86;&#x89E3;&#x51B3;node.js&#x5404;&#x79CD;&#x7248;&#x672C;&#x5B58;&#x5728;&#x4E0D;&#x517C;&#x5BB9;&#x73B0;&#x8C61;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x5B83;&#x53EF;&#x4EE5;&#x5B89;&#x88C5;&#x548C;&#x5207;&#x6362;&#x4E0D;&#x540C;&#x7248;&#x672C;&#x7684;node.js&#x3002;</p><h3 id="2-nvm%E4%B8%8B%E8%BD%BD">2. nvm&#x4E0B;&#x8F7D;</h3><p><a href="https://github.com/coreybutler/nvm-windows/releases">https://github.com/coreybutler/nvm-windows/releases</a></p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2022/03/image-5.png" class="kg-image" alt loading="lazy" width="1331" height="576"></figure><h3 id="3-nvm%E5%AE%89%E8%A3%85">3. nvm&#x5B89;&#x88C5;</h3><p><a href="https://blog.csdn.net/weixin_44582077/article/details/110237056">https://blog.csdn.net/weixin_44582077/article/details/110237056</a></p><h3 id="4-nvm%E5%91%BD%E4%BB%A4%E6%8F%90%E7%A4%BA">4. nvm&#x547D;&#x4EE4;&#x63D0;&#x793A;</h3><ul><li><code>nvm arch</code>&#xFF1A;&#x663E;&#x793A;node&#x662F;&#x8FD0;&#x884C;&#x5728;32&#x4F4D;&#x8FD8;&#x662F;64&#x4F4D;&#x3002;</li><li><code>nvm install &lt;version&gt; [arch]</code> &#xFF1A;&#x5B89;&#x88C5;node&#xFF0C; version&#x662F;&#x7279;&#x5B9A;&#x7248;&#x672C;&#x4E5F;&#x53EF;&#x4EE5;&#x662F;&#x6700;&#x65B0;&#x7A33;&#x5B9A;&#x7248;&#x672C;latest&#x3002;&#x53EF;&#x9009;&#x53C2;&#x6570;arch&#x6307;&#x5B9A;&#x5B89;&#x88C5;32&#x4F4D;&#x8FD8;&#x662F;64&#x4F4D;&#x7248;&#x672C;&#xFF0C;&#x9ED8;&#x8BA4;&#x662F;&#x7CFB;&#x7EDF;&#x4F4D;&#x6570;&#x3002;&#x53EF;&#x4EE5;&#x6DFB;&#x52A0;--insecure&#x7ED5;&#x8FC7;&#x8FDC;&#x7A0B;&#x670D;&#x52A1;&#x5668;&#x7684;SSL&#x3002;</li><li><code>nvm list [available]</code> &#xFF1A;&#x663E;&#x793A;&#x5DF2;&#x5B89;&#x88C5;&#x7684;&#x5217;&#x8868;&#x3002;&#x53EF;&#x9009;&#x53C2;&#x6570;available&#xFF0C;&#x663E;&#x793A;&#x53EF;&#x5B89;&#x88C5;&#x7684;&#x6240;&#x6709;&#x7248;&#x672C;&#x3002;list&#x53EF;&#x7B80;&#x5316;&#x4E3A;ls&#x3002;</li><li><code>nvm on</code> &#xFF1A;&#x5F00;&#x542F;node.js&#x7248;&#x672C;&#x7BA1;&#x7406;&#x3002;</li><li><code>nvm off</code> &#xFF1A;&#x5173;&#x95ED;node.js&#x7248;&#x672C;&#x7BA1;&#x7406;&#x3002;</li><li><code>nvm proxy [url]</code> &#xFF1A;&#x8BBE;&#x7F6E;&#x4E0B;&#x8F7D;&#x4EE3;&#x7406;&#x3002;&#x4E0D;&#x52A0;&#x53EF;&#x9009;&#x53C2;&#x6570;url&#xFF0C;&#x663E;&#x793A;&#x5F53;&#x524D;&#x4EE3;&#x7406;&#x3002;&#x5C06;url&#x8BBE;&#x7F6E;&#x4E3A;none&#x5219;&#x79FB;&#x9664;&#x4EE3;&#x7406;&#x3002;</li><li><code>nvm node_mirror [url]</code> &#xFF1A;&#x8BBE;&#x7F6E;node&#x955C;&#x50CF;&#x3002;&#x9ED8;&#x8BA4;&#x662F;https://nodejs.org/dist/&#x3002;&#x5982;&#x679C;&#x4E0D;&#x5199;url&#xFF0C;&#x5219;&#x4F7F;&#x7528;&#x9ED8;&#x8BA4;url&#x3002;&#x8BBE;&#x7F6E;&#x540E;&#x53EF;&#x81F3;&#x5B89;&#x88C5;&#x76EE;&#x5F55;settings.txt&#x6587;&#x4EF6;&#x67E5;&#x770B;&#xFF0C;&#x4E5F;&#x53EF;&#x76F4;&#x63A5;&#x5728;&#x8BE5;&#x6587;&#x4EF6;&#x64CD;&#x4F5C;&#x3002;</li><li><code>nvm npm_mirror [url]</code> &#xFF1A;&#x8BBE;&#x7F6E;npm&#x955C;&#x50CF;&#x3002;https://github.com/npm/cli/archive/&#x3002;&#x5982;&#x679C;&#x4E0D;&#x5199;url&#xFF0C;&#x5219;&#x4F7F;&#x7528;&#x9ED8;&#x8BA4;url&#x3002;&#x8BBE;&#x7F6E;&#x540E;&#x53EF;&#x81F3;&#x5B89;&#x88C5;&#x76EE;&#x5F55;settings.txt&#x6587;&#x4EF6;&#x67E5;&#x770B;&#xFF0C;&#x4E5F;&#x53EF;&#x76F4;&#x63A5;&#x5728;&#x8BE5;&#x6587;&#x4EF6;&#x64CD;&#x4F5C;&#x3002;</li><li><code>nvm uninstall &lt;version&gt;</code> &#xFF1A;&#x5378;&#x8F7D;&#x6307;&#x5B9A;&#x7248;&#x672C;node&#x3002;</li><li><code>nvm use [version] [arch]</code> &#xFF1A;&#x4F7F;&#x7528;&#x5236;&#x5B9A;&#x7248;&#x672C;node&#x3002;&#x53EF;&#x6307;&#x5B9A;32/64&#x4F4D;&#x3002;</li><li><code>nvm root [path]</code> &#xFF1A;&#x8BBE;&#x7F6E;&#x5B58;&#x50A8;&#x4E0D;&#x540C;&#x7248;&#x672C;node&#x7684;&#x76EE;&#x5F55;&#x3002;&#x5982;&#x679C;&#x672A;&#x8BBE;&#x7F6E;&#xFF0C;&#x9ED8;&#x8BA4;&#x4F7F;&#x7528;&#x5F53;&#x524D;&#x76EE;&#x5F55;&#x3002;</li><li><code>nvm version</code> &#xFF1A;&#x663E;&#x793A;nvm&#x7248;&#x672C;&#x3002;version&#x53EF;&#x7B80;&#x5316;&#x4E3A;v&#x3002;</li></ul>]]></content:encoded></item><item><title><![CDATA[Sakai 21.0部署]]></title><description><![CDATA[<!--kg-card-begin: markdown--><blockquote>
<p>&#x6240;&#x9700;&#x73AF;&#x5883;&#xFF1A;<br>
1&#x3001;Linux &#x6216; Windows Server&#xFF08;&#x672C;&#x7AE0;&#x4EE5;Windows&#x5E73;&#x53F0;&#x505A;&#x90E8;&#x7F72;&#x76EE;&#x6807;&#xFF0C;&#x7CFB;&#x7EDF;&#x4E3A;Windows11&#xFF09;&#xFF1B;<br>
2&#x3001;Java 1.8&#xFF1B;<br>
3&#x3001;Tomcat 8/9&#xFF1B;&#xFF08;&#x4E8C;&#x8FDB;&#x5236;&#x5B89;&#x88C5;&#x9009;8&</p></blockquote>]]></description><link>https://www.thinkingsolidity.com/sakai-21/</link><guid isPermaLink="false">621582634171961aaf4abb96</guid><category><![CDATA[其他]]></category><dc:creator><![CDATA[Echo_留蝉]]></dc:creator><pubDate>Wed, 23 Feb 2022 02:09:44 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><blockquote>
<p>&#x6240;&#x9700;&#x73AF;&#x5883;&#xFF1A;<br>
1&#x3001;Linux &#x6216; Windows Server&#xFF08;&#x672C;&#x7AE0;&#x4EE5;Windows&#x5E73;&#x53F0;&#x505A;&#x90E8;&#x7F72;&#x76EE;&#x6807;&#xFF0C;&#x7CFB;&#x7EDF;&#x4E3A;Windows11&#xFF09;&#xFF1B;<br>
2&#x3001;Java 1.8&#xFF1B;<br>
3&#x3001;Tomcat 8/9&#xFF1B;&#xFF08;&#x4E8C;&#x8FDB;&#x5236;&#x5B89;&#x88C5;&#x9009;8&#xFF0C;&#x6E90;&#x6587;&#x4EF6;&#x5B89;&#x88C5;&#x9009;9&#xFF09;<br>
4&#x3001;Maven 3.6&#xFF1B;<br>
5&#x3001;MySQL&#xFF08;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;5&#x6216;&#x8005;8&#x7248;&#x672C;&#xFF0C;&#x6700;&#x597D;&#x4F7F;&#x7528;5&#xFF09;&#xFF1B;<br>
6&#x3001;MySQL Connector Jar&#xFF08;&#x7248;&#x672C;&#x5BF9;&#x5E94;MySQL&#xFF09;&#xFF1B;<br>
7&#x3001;default.sakai.porperties&#xFF08;&#x540E;&#x9762;&#x63D0;&#x4F9B;&#x4E0B;&#x8F7D;&#x5730;&#x5740;&#xFF09;&#x3002;</p>
</blockquote>
<!--kg-card-end: markdown--><h2 id="%E4%B8%80%E3%80%81sakai%E4%BA%8C%E8%BF%9B%E5%88%B6%E6%96%87%E4%BB%B6%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE">&#x4E00;&#x3001;Sakai&#x4E8C;&#x8FDB;&#x5236;&#x6587;&#x4EF6;&#x73AF;&#x5883;&#x914D;&#x7F6E;</h2><h3 id="1%E3%80%81jdk%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE">1&#x3001;JDK&#x73AF;&#x5883;&#x914D;&#x7F6E;</h3><p>&#x88C5; JDK &#x548C; JRE&#xFF0C;&#x5B89;&#x88C5;&#x5B8C;&#x6210;&#x540E;&#x6DFB;&#x52A0;&#x73AF;&#x5883;&#x53D8;&#x91CF; JAVA_HOME &#x4E3A; JDK &#x5B89;&#x88C5;&#x8DEF;&#x5F84;&#xFF0C;&#x5728;&#x7CFB;&#x7EDF; PATH &#x53D8;&#x91CF;&#x4E2D;&#x6DFB;&#x52A0; JDK &#x5B89;&#x88C5;&#x8DEF;&#x5F84; /bin &#xFF0C;&#x5728; cmd &#x4E2D;&#x6D4B;&#x8BD5; java -version &#x8DF3;&#x51FA;&#x7248;&#x672C;&#x4FE1;&#x606F;&#x5373;&#x914D;&#x7F6E;&#x5B8C;&#x6BD5;&#x3002;</p><pre><code class="language-java">JAVA_HOME&#xFF1A;C:\Program Files\Java\jdk1.8.0_221\
Path&#xFF1A;JAVA_HOME\bin
JRE_HOME:C:\Program Files\Java\jdk1.8.0_221</code></pre><h3 id="2%E3%80%81tomcat%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE">2&#x3001;Tomcat&#x73AF;&#x5883;&#x914D;&#x7F6E;</h3><p>&#x6DFB;&#x52A0;&#x73AF;&#x5883;&#x53D8;&#x91CF; CATALINA_HOME &#x4E3A; Tomcat &#x6587;&#x4EF6;&#x5939;&#x8DEF;&#x5F84;&#xFF0C;&#x5728;&#x7CFB;&#x7EDF; PATH &#x53D8;&#x91CF;&#x4E2D;&#x6DFB;&#x52A0; Tomcat &#x6587;&#x4EF6;&#x5939;&#x8DEF;&#x5F84;&#x3002;&#x7136;&#x540E;&#x8FDB;&#x5165;&#x5176;&#x5185;&#x7684; bin &#x6587;&#x4EF6;&#x5939;&#xFF0C;&#x6267;&#x884C; startup.bat ,&#x542F;&#x52A8;Tomcat &#x670D;&#x52A1;&#x5668;&#xFF0C;&#x5728;&#x6D4F;&#x89C8;&#x5668;&#x5730;&#x5740;&#x680F;&#x8F93;&#x5165; http://localhost:8080 &#xFF0C;&#x5982;&#x679C;&#x51FA;&#x73B0; tomcat&#x7684;&#x4E3B;&#x9875;&#xFF0C;&#x5219;&#x8BF4;&#x660E;&#x5B89;&#x88C5;&#x6B63;&#x786E;&#xFF0C;&#x6267;&#x884C;shutdown.bat&#xFF0C;&#x5373;&#x53EF;&#x9000;&#x51FA;&#x3002;</p><pre><code class="language-cmd">CATALINA_HOME: C:\tomcat8</code></pre><h3 id="3%E3%80%81maven%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE">3&#x3001;Maven&#x73AF;&#x5883;&#x914D;&#x7F6E;</h3><p>&#x89E3;&#x538B;Maven&#x5E76;&#x91CD;&#x547D;&#x540D;&#x6587;&#x4EF6;&#x5939;&#x4E3A;Maven&#xFF0C;&#x6DFB;&#x52A0;&#x73AF;&#x5883;&#x53D8;&#x91CF;MAVEN_HOME&#x4E3A;Maven&#x6587;&#x4EF6;&#x5939;&#x8DEF;&#x5F84;&#xFF0C;&#x5728;&#x7CFB;&#x7EDF;PATH&#x53D8;&#x91CF;&#x4E2D;&#x6DFB;&#x52A0;MAVEN&#x6587;&#x4EF6;&#x5939;&#x8DEF;&#x5F84;/bin&#xFF0C;&#x5728;cmd&#x4E2D;&#x6D4B;&#x8BD5;mvn -version&#x8DF3;&#x51FA;&#x7248;&#x672C;&#x4FE1;&#x606F;&#x5373;&#x914D;&#x7F6E;&#x5B8C;&#x6BD5;&#x3002;</p><h3 id="4%E3%80%81mysql%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE">4&#x3001;MySQL&#x73AF;&#x5883;&#x914D;&#x7F6E;</h3><p>MySQL&#x5347;&#x964D;&#x7248;&#x672C;&#xFF1A;</p><p><a href="https://blog.csdn.net/qq_40262372/article/details/116803151">https://blog.csdn.net/qq_40262372/article/details/116803151</a></p><p>MySQL&#x5B89;&#x88C5;&#xFF1A;</p><p><a href="https://zhuanlan.zhihu.com/p/88271915">https://zhuanlan.zhihu.com/p/88271915</a></p><p>MySQL&#x5378;&#x8F7D;&#x4E00;&#x5B9A;&#x8981;&#x5378;&#x5E72;&#x51C0;&#x4E0D;&#x7136;&#x518D;&#x4E0B;&#x8F7D;&#x4F1A;&#x51FA;&#x9519;&#x7684;&#xFF01;&#xFF01;&#xFF01;</p><p>&#x89E3;&#x538B;MySQL&#x5E76;&#x91CD;&#x547D;&#x540D;&#x6587;&#x4EF6;&#x5939;&#x4E3A;MySQL&#xFF0C;&#x6DFB;&#x52A0;&#x73AF;&#x5883;&#x53D8;&#x91CF;MySQL_HOME&#x4E3A;MySQL&#x6587;&#x4EF6;&#x5939;&#x8DEF;&#x5F84;&#xFF0C;&#x5728;&#x7CFB;&#x7EDF;PATH&#x53D8;&#x91CF;&#x4E2D;&#x6DFB;&#x52A0;MySQL&#x6587;&#x4EF6;&#x5939;&#x8DEF;&#x5F84;/bin&#x3002;</p><p>&#x5728;MySQL&#x6587;&#x4EF6;&#x5939;&#x4E0B;&#x5EFA;&#x7ACB;my.ini&#x914D;&#x7F6E;&#x6587;&#x4EF6;&#xFF0C;&#x5185;&#x5BB9;&#x4E3A;&#x5982;&#x4E0B;&#xFF08;&#x5177;&#x4F53;&#x8DEF;&#x5F84;&#x6309;&#x5B9E;&#x9645;&#x60C5;&#x51B5;&#x66F4;&#x6539;&#xFF0C;&#x6CE8;&#x610F;&#x4E3A;&#x659C;&#x6760;&#xFF09;&#xFF1A;</p><pre><code class="language-ini">[mysqld]
basedir=C:/MySQL
datadir=C:/MySQL/data</code></pre><p>&#x4ECE;cmd&#x4E2D;&#x8FDB;&#x5165;MySQL/bin&#xFF08;&#x8FD9;&#x4E00;&#x6B65;&#x6709;&#x5751;&#xFF0C;&#x5982;&#x679C;&#x4E0D;&#x4E0D;&#x8FDB;&#x5165;bin&#x6587;&#x4EF6;&#x5939;&#x8FDB;&#x884C;&#x914D;&#x7F6E;&#xFF0C;&#x670D;&#x52A1;&#x5F00;&#x542F;&#x4F1A;&#x63D0;&#x793A;&#x627E;&#x4E0D;&#x5230;&#x6587;&#x4EF6;&#xFF09;&#xFF0C;&#x952E;&#x5165;&#x547D;&#x4EE4;mysqld --initialize&#xFF0C;&#x6267;&#x884C;MySQL&#x521D;&#x59CB;&#x5316;&#x64CD;&#x4F5C;&#xFF0C;&#x65B0;&#x7248;&#x7684;MySQL&#x4F1A;&#x5728;data&#x6587;&#x4EF6;&#x5939;&#x4E2D;&#x751F;&#x6210;&#x4E00;&#x4E2A;err&#x540E;&#x7F00;&#x7684;&#x6587;&#x4EF6;&#xFF0C;&#x521D;&#x59CB;&#x5BC6;&#x7801;&#x5C31;&#x5728;&#x6587;&#x4EF6;&#x4E2D;&#xFF0C;&#x8001;&#x7248;&#x672C;&#x7684;&#x6CA1;&#x6709;root&#x7528;&#x6237;&#x521D;&#x59CB;&#x5BC6;&#x7801;&#x3002;&#x521D;&#x59CB;&#x5316;&#x5B8C;&#x6BD5;&#x540E;&#xFF0C;&#x4F7F;&#x7528;mysqld --install mysql&#x521B;&#x5EFA;MySQL&#x670D;&#x52A1;&#xFF0C;&#x7136;&#x540E;&#x4F7F;&#x7528;net start mysql&#x5F00;&#x542F;MySQL&#x670D;&#x52A1;&#x3002;</p><p>&#x670D;&#x52A1;&#x8FD0;&#x884C;&#x540E;&#xFF0C;&#x8F93;&#x5165;mysql -u root -p&#x8FDE;&#x63A5;&#x6570;&#x636E;&#x5E93;&#xFF0C;&#x5BC6;&#x7801;&#x6839;&#x636E;&#x5B9E;&#x9645;&#x60C5;&#x51B5;&#x8F93;&#x5165;&#xFF0C;&#x5982;&#x679C;&#x987A;&#x5229;&#x952E;&#x5165;quit&#x9000;&#x51FA;&#x3002;</p><h3 id="5%E3%80%81sakai%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE">5&#x3001;Sakai&#x73AF;&#x5883;&#x914D;&#x7F6E;</h3><p>&#x5C06;Sakai 20.0 Binary&#x538B;&#x7F29;&#x5305;&#x4E2D;&#x6240;&#x6709;&#x5185;&#x5BB9;&#x76F4;&#x63A5;&#x89E3;&#x538B;&#x81F3;Tomcat&#x76EE;&#x5F55;&#x4E0B;&#x5373;&#x53EF;&#x3002;</p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2022/02/image.png" class="kg-image" alt loading="lazy" width="1721" height="690"></figure><p></p><p>&#x89E3;&#x538B;Maven&#x5E76;&#x91CD;&#x547D;&#x540D;&#x6587;&#x4EF6;&#x5939;&#x4E3A;Maven&#xFF0C;&#x6DFB;&#x52A0;&#x73AF;&#x5883;&#x53D8;&#x91CF;MAVEN_HOME&#x4E3A;Maven&#x6587;&#x4EF6;&#x5939;&#x8DEF;&#x5F84;&#xFF0C;&#x5728;&#x7CFB;&#x7EDF;PATH&#x53D8;&#x91CF;&#x4E2D;&#x6DFB;&#x52A0;MAVEN&#x6587;&#x4EF6;&#x5939;&#x8DEF;&#x5F84;/bin&#xFF0C;&#x5728;cmd&#x4E2D;&#x6D4B;&#x8BD5;mvn -version&#x8DF3;&#x51FA;&#x7248;&#x672C;&#x4FE1;&#x606F;&#x5373;&#x914D;&#x7F6E;&#x5B8C;&#x6BD5;&#x3002;</p><h2 id="%E4%BA%8C%E3%80%81%E9%83%A8%E7%BD%B2%E6%90%AD%E5%BB%BA">&#x4E8C;&#x3001;&#x90E8;&#x7F72;&#x642D;&#x5EFA;</h2><p><strong>1&#x3001;&#x5C06;&#x4E0E; MySQL &#x7248;&#x672C;&#x5BF9;&#x5E94;&#x7684; MySQL Connector Jar &#x62F7;&#x8D1D;&#x81F3; Tomcat/lib &#x76EE;&#x5F55;&#x4E0B;&#xFF1B;</strong></p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2022/02/image-1.png" class="kg-image" alt loading="lazy" width="808" height="612"></figure><p><strong>2&#x3001;&#x5728;Tomcat/bin&#x6587;&#x4EF6;&#x5939;&#x4E0B;&#x65B0;&#x5EFA;&#x6587;&#x4EF6;setenv.bat</strong>&#xFF0C;&#x5185;&#x5BB9;&#x5982;&#x4E0B;&#xFF1A;</p><pre><code class="language-cmd">set JAVA_OPTS=-server -Xmx1028m -XX:MaxMetaspaceSize=512m -Dorg.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false -Djava.awt.headless=true -Dcom.sun.management.jmxremote -Dhttp.agent=Sakai -Djava.util.Arrays.useLegacyMergeSort=true -Dfile.encoding=UTF8</code></pre><p><br><strong>3&#x3001;&#x7F16;&#x8F91; Tomcat/conf/content.xml &#x6587;&#x4EF6;</strong>&#xFF0C;&#x5728;&#x5757;&#x4E2D;&#x589E;&#x52A0;&#x5982;&#x4E0B;&#x5185;&#x5BB9;</p><pre><code class="language-cmd">&lt;JarScanner&gt;
    &lt;!-- This is to speedup startup so that tomcat doesn&apos;t scan as much --&gt;
    &lt;JarScanFilter defaultPluggabilityScan=&quot;false&quot; /&gt;
&lt;/JarScanner&gt;</code></pre><p><strong>4&#x3001;&#x7F16;&#x8F91; Tomcat/conf/server.xml &#x6587;&#x4EF6;</strong>&#xFF0C;&#x641C;&#x7D22;&#x5185;&#x5BB9; &#x201C;Connector port&#x201D; &#xFF0C;&#x5728;&#x6B64;&#x4E4B;&#x540E;&#x589E;&#x52A0; URIEncoding=&quot;UTF-8&quot;&#xFF0C;&#x5373;</p><pre><code class="language-cmd">&lt;Connector port=&quot;8080&quot; URIEncoding=&quot;UTF-8&quot; ...</code></pre><p><strong>5&#x3001;&#x5728; Tomcat &#x8DEF;&#x5F84;&#x4E0B;&#x65B0;&#x5EFA;&#x6587;&#x4EF6;&#x5939; Sakai </strong>&#xFF0C;&#x4E0B;&#x8F7D;&#x4E00;&#x4EFD; default.sakai.properties &#xFF0C;&#x4E0B;&#x8F7D;&#x5730;&#x5740;&#x5982;&#x4E0B;&#xFF1A;<a href="https://sakaiproject.atlassian.net/wiki/spaces/DOC/pages/17310646929/Sakai+21+Install+Guide+Binary">https://sakaiproject.atlassian.net/wiki/spaces/DOC/pages/17310646929/Sakai+21+Install+Guide+Binary</a></p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2022/02/image-2.png" class="kg-image" alt loading="lazy" width="1920" height="889"></figure><p>&#x5C06;&#x3010;default.sakai.properties&#x3011;&#x91CD;&#x547D;&#x540D;&#x4E3A;&#x3010;sakai.properties&#x3011;</p><p>&#x641C;&#x7D22;username@javax&#xFF0C;&#x53D6;&#x6D88;&#x9ED8;&#x8BA4;&#x7684;&#x6CE8;&#x91CA;&#xFF0C;&#x5C06;&#x6570;&#x636E;&#x5E93;&#x7684;&#x7528;&#x6237;&#x540D;&#x4E0E;&#x5BC6;&#x7801;&#x4FEE;&#x6539;&#x4E3A;&#x5982;&#x4E0B;&#xFF08;&#x6B64;&#x5904;&#x53EF;&#x6839;&#x636E;&#x5B9E;&#x9645;&#x60C5;&#x51B5;&#x4FEE;&#x6539;&#xFF09;&#xFF1A;</p><pre><code class="language-mysql">username@javax.sql.BaseDataSource=sakaiuser
password@javax.sql.BaseDataSource=sakaipassword</code></pre><p>&#x641C;&#x7D22;MySQL&#xFF0C;&#x5C06;&#x6CE8;&#x91CA;&#x7B26;&#x53F7;&#x5168;&#x90E8;&#x53BB;&#x6389;&#xFF0C;&#x4FEE;&#x6539;&#x540E;&#x5982;&#x4E0B;&#xFF1A;</p><pre><code class="language-mysql">vendor@org.sakaiproject.db.api.SqlService=mysql
driverClassName@javax.sql.BaseDataSource=com.mysql.jdbc.Driver
hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
url@javax.sql.BaseDataSource=jdbc:mysql://127.0.0.1:3306/sakaidatabase?useUnicode=true&amp;characterEncoding=UTF-8
validationQuery@javax.sql.BaseDataSource=select 1 from DUAL
defaultTransactionIsolationString@javax.sql.BaseDataSource=TRANSACTION_READ_COMMITTED</code></pre><p>&#x6B64;&#x5904;&#x6CE8;&#x610F;&#xFF01;</p><p>Git&#x4E0A;&#x4E0B;&#x8F7D;&#x7684;&#x6587;&#x4EF6;&#x8FDE;&#x63A5;&#x5730;&#x5740;&#x53EF;&#x80FD;&#x662F; mysql://127.0.0.1:3306/sakai &#x800C;&#x4E0D;&#x662F; sakaidatabase&#xFF0C;&#x6B64;&#x5904;&#x8981;&#x6839;&#x636E;&#x4E0B;&#x9762;&#x6B65;&#x9AA4;&#x5EFA;&#x7ACB;&#x7684;&#x6570;&#x636E;&#x5E93;&#x540D;&#x786E;&#x5B9A;&#x8FDE;&#x63A5;&#x5730;&#x5740;&#xFF0C;&#x907F;&#x514D;&#x4E0D;&#x5FC5;&#x8981;&#x7684;&#x9519;&#x8BEF;&#xFF01;</p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2022/02/image-3.png" class="kg-image" alt loading="lazy" width="1415" height="723"></figure><p><strong>6&#x3001;&#x767B;&#x9646; MySQL &#xFF0C;&#x952E;&#x5165;&#x5982;&#x4E0B; SQL &#x547D;&#x4EE4;&#xFF1A;</strong></p><pre><code class="language-mysql">//&#x7248;&#x672C;8&#xFF08;&#x4E0D;&#x63A8;&#x8350;&#xFF0C;&#x4F1A;&#x5C11;&#x4E09;&#x5F20;&#x8868;&#xFF09;
create database sakaidatabase default character set utf8
create user &apos;sakaiuser&apos;@&apos;localhost&apos; identified by &apos;sakaipassword&apos;;
create user &apos;sakaiuser&apos;@&apos;127.0.0.1&apos; identified by &apos;sakaipassword&apos;;
grant all on sakaidatabase .* to  &apos;sakaiuser&apos;@&apos;127.0.0.1&apos; WITH GRANT OPTION;
grant all on sakaidatabase .* to  &apos;sakaiuser&apos;@&apos;localhost&apos; WITH GRANT OPTION;
flush privileges;

//&#x7248;&#x672C;5
create database sakaidatabase default character set utf8;
grant all on sakaidatabase.* to sakaiuser@&apos;localhost&apos; identified by &apos;sakaipassword&apos;;
grant all on sakaidatabase.* to sakaiuser@&apos;127.0.0.1&apos; identified by &apos;sakaipassword&apos;;
flush privileges;</code></pre><p><strong>7&#x3001;&#x8FD0;&#x884C; Tomcat &#x76EE;&#x5F55;&#x4E0B;&#x7684; bin &#x5B50;&#x76EE;&#x5F55;&#x91CC;&#x7684; startup.bat &#x542F;&#x52A8; Sakai </strong>&#xFF0C;&#x8FD0;&#x884C;&#x7684;&#x65F6;&#x95F4;&#x53EF;&#x80FD;&#x662F;4-5&#x5206;&#x949F;&#xFF0C;&#x7136;&#x540E;&#x7B49;&#x5F85;&#x542F;&#x52A8;&#x5B8C;&#x6210;&#x540E;&#x5728;&#x6D4F;&#x89C8;&#x5668;&#x7684;&#x5730;&#x5740;&#x680F;&#x8F93;&#x5165; <a href="http://localhost:8080/portal">http://localhost:8080/portal</a> &#xFF0C;&#x4EE5;&#x7528;&#x6237;admin&#x5BC6;&#x7801;admin&#x767B;&#x5F55;&#x8FDB;&#x53BB;&#x3002;</p><h2 id="%E4%B8%89%E3%80%81sakai%E6%BA%90%E6%96%87%E4%BB%B6%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE">&#x4E09;&#x3001;Sakai&#x6E90;&#x6587;&#x4EF6;&#x73AF;&#x5883;&#x914D;&#x7F6E;</h2><h3 id="1%E3%80%81jdk%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE%EF%BC%88%E5%90%8C%E4%B8%8A%EF%BC%89">1&#x3001;JDK&#x73AF;&#x5883;&#x914D;&#x7F6E;&#xFF08;&#x540C;&#x4E0A;&#xFF09;</h3><h3 id="2%E3%80%81tomcat%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE%E5%90%8C%E4%B8%8A%EF%BC%8C%E9%80%89%E6%8B%A99%E7%9A%84%E7%89%88%E6%9C%AC">2&#x3001;Tomcat&#x73AF;&#x5883;&#x914D;&#x7F6E;(&#x540C;&#x4E0A;&#xFF0C;&#x9009;&#x62E9;9&#x7684;&#x7248;&#x672C;)</h3><h3 id="3%E3%80%81maven%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE%EF%BC%88%E5%90%8C%E4%B8%8A%EF%BC%89">3&#x3001;Maven&#x73AF;&#x5883;&#x914D;&#x7F6E;&#xFF08;&#x540C;&#x4E0A;&#xFF09;</h3><h3 id="4%E3%80%81mysql%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE%EF%BC%88%E5%90%8C%E4%B8%8A%EF%BC%89">4&#x3001;MySQL&#x73AF;&#x5883;&#x914D;&#x7F6E;&#xFF08;&#x540C;&#x4E0A;&#xFF09;</h3><h3 id="5%E3%80%81%E5%AE%89%E8%A3%85git">5&#x3001;&#x5B89;&#x88C5;git</h3><p><a href="https://blog.csdn.net/mukes/article/details/115693833">https://blog.csdn.net/mukes/article/details/115693833</a> &#xA0;&#x6839;&#x636E;&#x8FD9;&#x4E2A;&#x535A;&#x4E3B;&#x7684;&#x6587;&#x7AE0;&#x4E00;&#x6B65;&#x6B65;&#x5199;&#x5C31;&#x53EF;&#x4EE5;&#x3002;</p><h2 id="%E5%9B%9B%E3%80%81%E9%83%A8%E7%BD%B2sakai">&#x56DB;&#x3001;&#x90E8;&#x7F72;Sakai</h2><p><strong>1&#x3001;&#x5C06;&#x4E0E; MySQL &#x7248;&#x672C;&#x5BF9;&#x5E94;&#x7684; MySQL Connector Jar &#x62F7;&#x8D1D;&#x81F3; Tomcat/lib &#x76EE;&#x5F55;&#x4E0B;&#xFF1B;</strong></p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2022/03/image.png" class="kg-image" alt loading="lazy" width="899" height="664"></figure><p><strong>2&#x3001;&#x5728;Tomcat / bin&#x6587;&#x4EF6;&#x5939;&#x4E0B;&#x65B0;&#x5EFA;&#x6587;&#x4EF6; setenv.bat </strong>&#xFF0C;&#x5185;&#x5BB9;&#x5982;&#x4E0B;&#xFF1A;</p><pre><code class="language-cmd">set JAVA_OPTS=-server -Xmx1028m -XX:MaxMetaspaceSize=512m -Dorg.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false -Djava.awt.headless=true -Dcom.sun.management.jmxremote -Dhttp.agent=Sakai -Djava.util.Arrays.useLegacyMergeSort=true -Dfile.encoding=UTF8</code></pre><p><br><strong>3&#x3001;&#x7F16;&#x8F91; Tomcat / conf / content.xml &#x6587;&#x4EF6;</strong>&#xFF0C;&#x5728;&#x5757;&#x4E2D;&#x589E;&#x52A0;&#x5982;&#x4E0B;&#x5185;&#x5BB9;</p><pre><code class="language-cmd">&lt;JarScanner&gt;
    &lt;!-- This is to speedup startup so that tomcat doesn&apos;t scan as much --&gt;
    &lt;JarScanFilter defaultPluggabilityScan=&quot;false&quot; /&gt;
&lt;/JarScanner&gt;</code></pre><p><strong>4&#x3001;&#x7F16;&#x8F91; Tomcat / conf / server.xml &#x6587;&#x4EF6;</strong>&#xFF0C;&#x641C;&#x7D22;&#x5185;&#x5BB9; &#x201C;Connector port&#x201D; &#xFF0C;&#x5728;&#x6B64;&#x4E4B;&#x540E;&#x589E;&#x52A0; URIEncoding=&quot;UTF-8&quot;&#xFF0C;&#x5373;</p><pre><code class="language-cmd">&lt;Connector port=&quot;8080&quot; URIEncoding=&quot;UTF-8&quot; ...</code></pre><p><strong>5&#x3001;&#x5728; Tomcat &#x8DEF;&#x5F84;&#x4E0B;&#x65B0;&#x5EFA;&#x6587;&#x4EF6;&#x5939; Sakai </strong>&#xFF0C;&#x4E0B;&#x8F7D;&#x4E00;&#x4EFD; default.sakai.properties &#xFF0C;&#x4E0B;&#x8F7D;&#x5730;&#x5740;&#x5982;&#x4E0B;&#xFF1A;<a href="https://sakaiproject.atlassian.net/wiki/spaces/DOC/pages/17310646929/Sakai+21+Install+Guide+Binary">https://sakaiproject.atlassian.net/wiki/spaces/DOC/pages/17310646929/Sakai+21+Install+Guide+Binary</a></p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2022/02/image-2.png" class="kg-image" alt loading="lazy" width="1920" height="889"></figure><p>&#x5C06;&#x3010;default.sakai.properties&#x3011;&#x91CD;&#x547D;&#x540D;&#x4E3A;&#x3010;sakai.properties&#x3011;</p><p>&#x641C;&#x7D22;username@javax&#xFF0C;&#x53D6;&#x6D88;&#x9ED8;&#x8BA4;&#x7684;&#x6CE8;&#x91CA;&#xFF0C;&#x5C06;&#x6570;&#x636E;&#x5E93;&#x7684;&#x7528;&#x6237;&#x540D;&#x4E0E;&#x5BC6;&#x7801;&#x4FEE;&#x6539;&#x4E3A;&#x5982;&#x4E0B;&#xFF08;&#x6B64;&#x5904;&#x53EF;&#x6839;&#x636E;&#x5B9E;&#x9645;&#x60C5;&#x51B5;&#x4FEE;&#x6539;&#xFF09;&#xFF1A;</p><pre><code class="language-mysql">username@javax.sql.BaseDataSource=sakaiuser
password@javax.sql.BaseDataSource=sakaipassword</code></pre><p>&#x641C;&#x7D22;MySQL&#xFF0C;&#x5C06;&#x6CE8;&#x91CA;&#x7B26;&#x53F7;&#x5168;&#x90E8;&#x53BB;&#x6389;&#xFF0C;&#x4FEE;&#x6539;&#x540E;&#x5982;&#x4E0B;&#xFF1A;</p><pre><code class="language-mysql">vendor@org.sakaiproject.db.api.SqlService=mysql
driverClassName@javax.sql.BaseDataSource=com.mysql.jdbc.Driver
hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
url@javax.sql.BaseDataSource=jdbc:mysql://127.0.0.1:3306/sakaidatabase?useUnicode=true&amp;characterEncoding=UTF-8
validationQuery@javax.sql.BaseDataSource=select 1 from DUAL
defaultTransactionIsolationString@javax.sql.BaseDataSource=TRANSACTION_READ_COMMITTED</code></pre><p>&#x6B64;&#x5904;&#x6CE8;&#x610F;&#xFF01;</p><p>Git&#x4E0A;&#x4E0B;&#x8F7D;&#x7684;&#x6587;&#x4EF6;&#x8FDE;&#x63A5;&#x5730;&#x5740;&#x53EF;&#x80FD;&#x662F; mysql://127.0.0.1:3306/sakai &#x800C;&#x4E0D;&#x662F; sakaidatabase&#xFF0C;&#x6B64;&#x5904;&#x8981;&#x6839;&#x636E;&#x4E0B;&#x9762;&#x6B65;&#x9AA4;&#x5EFA;&#x7ACB;&#x7684;&#x6570;&#x636E;&#x5E93;&#x540D;&#x786E;&#x5B9A;&#x8FDE;&#x63A5;&#x5730;&#x5740;&#xFF0C;&#x907F;&#x514D;&#x4E0D;&#x5FC5;&#x8981;&#x7684;&#x9519;&#x8BEF;&#xFF01;</p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2022/02/image-3.png" class="kg-image" alt loading="lazy" width="1415" height="723"></figure><p><strong>6&#x3001;&#x767B;&#x9646; MySQL &#xFF0C;&#x952E;&#x5165;&#x5982;&#x4E0B; SQL &#x547D;&#x4EE4;&#xFF1A;</strong></p><pre><code class="language-mysql">//&#x7248;&#x672C;8&#xFF08;&#x4E0D;&#x63A8;&#x8350;&#xFF0C;&#x4F1A;&#x5C11;&#x4E09;&#x5F20;&#x8868;&#xFF09;
create database sakaidatabase default character set utf8
create user &apos;sakaiuser&apos;@&apos;localhost&apos; identified by &apos;sakaipassword&apos;;
create user &apos;sakaiuser&apos;@&apos;127.0.0.1&apos; identified by &apos;sakaipassword&apos;;
grant all on sakaidatabase .* to  &apos;sakaiuser&apos;@&apos;127.0.0.1&apos; WITH GRANT OPTION;
grant all on sakaidatabase .* to  &apos;sakaiuser&apos;@&apos;localhost&apos; WITH GRANT OPTION;
flush privileges;

//&#x7248;&#x672C;5
create database sakaidatabase default character set utf8;
grant all on sakaidatabase.* to sakaiuser@&apos;localhost&apos; identified by &apos;sakaipassword&apos;;
grant all on sakaidatabase.* to sakaiuser@&apos;127.0.0.1&apos; identified by &apos;sakaipassword&apos;;
flush privileges;</code></pre><p><strong>7&#x3001;&#x65B0;&#x5EFA;&#x4E00;&#x4E2A;&#x6587;&#x4EF6;&#x5939;&#x8FDB;&#x5165;&#xFF0C;&#x4E0B;&#x8F7D;Sakai&#x6E90;&#x6587;&#x4EF6;</strong></p><pre><code class="language-git">git clone https://github.com/sakaiproject/sakai.git

</code></pre><p><strong>8&#x3001;&#x6253;&#x5F00;&#x7F16;&#x8F91;&#x5668;&#xFF08;&#x6211;&#x8FD9;&#x91CC;&#x9009;&#x62E9;&#x7684;&#x662F;IDEA&#xFF09;&#xFF0C;&#x5C06; Sakai &#x90E8;&#x7F72;&#x5230; tomcat &#x4E2D;&#xFF0C;</strong>&#x7B2C;&#x4E00;&#x6B21;&#x7684;&#x8BDD;&#x901F;&#x5EA6;&#x4F1A;&#x975E;&#x5E38;&#x6162;&#xFF0C;&#x9700;&#x8981;&#x8010;&#x5FC3;&#x7B49;&#x5F85;&#x3002;</p><pre><code class="language-cmd">// mvn clean install sakai:deploy -Dmaven.tomcat.home=/path/to/your/tomcat

mvn clean install sakai:deploy -Dmaven.tomcat.home=D:\Programs\tomcat8</code></pre><p>&#x914D;&#x7F6E;&#x597D; Java &#x53CA; maven &#x7248;&#x672C;&#x3002;</p><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2022/03/image-2.png" class="kg-image" alt loading="lazy" width="1551" height="673"></figure><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2022/03/image-3.png" class="kg-image" alt loading="lazy" width="1549" height="683"></figure><figure class="kg-card kg-image-card"><img src="https://www.thinkingsolidity.com/content/images/2022/03/image-1.png" class="kg-image" alt loading="lazy" width="1916" height="688"></figure><p><strong>9&#x3001;&#x73B0;&#x5728;&#x542F;&#x52A8;Tomcat</strong>&#xFF0C;&#x8FDB;&#x5165;&#x4F60;&#x7684;tomcat&#x5B89;&#x88C5;&#x76EE;&#x5F55;&#x7684;bin&#x76EE;&#x5F55;&#x4E0B;&#xFF0C;&#x6253;&#x5F00;cmd&#xFF1A;</p><pre><code>./startup.sh &amp;&amp; tail -f ../logs/catalina.out</code></pre><p> Sakai &#x542F;&#x52A8;&#x540E;&#xFF08;&#x901A;&#x5E38;&#x9700;&#x8981;&#x5927;&#x7EA6; 30 &#x79D2;&#xFF09;&#xFF0C;&#x6253;&#x5F00;&#x6D4F;&#x89C8;&#x5668;&#x5E76;&#x5BFC;&#x822A;&#x5230;<a href="http://localhost:8080/portal">http://localhost:8080/portal</a> &#xFF0C;&#x4EE5;&#x7528;&#x6237;admin&#x5BC6;&#x7801;admin&#x767B;&#x5F55;&#x8FDB;&#x53BB;&#x3002;</p>]]></content:encoded></item></channel></rss>