﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-狼爱上狸-随笔分类-Blockchain</title><link>http://www.blogjava.net/waterjava/category/55337.html</link><description>我胡汉三又回来了</description><language>zh-cn</language><lastBuildDate>Mon, 16 Mar 2020 05:57:35 GMT</lastBuildDate><pubDate>Mon, 16 Mar 2020 05:57:35 GMT</pubDate><ttl>60</ttl><item><title>IPFS参考网关</title><link>http://www.blogjava.net/waterjava/archive/2020/03/14/435258.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Sat, 14 Mar 2020 03:01:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2020/03/14/435258.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/435258.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2020/03/14/435258.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/435258.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/435258.html</trackback:ping><description><![CDATA[<a href="https://ipfs.github.io/public-gateway-checker/">https://ipfs.github.io/public-gateway-checker/</a><img src ="http://www.blogjava.net/waterjava/aggbug/435258.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2020-03-14 11:01 <a href="http://www.blogjava.net/waterjava/archive/2020/03/14/435258.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>安装node-canvas时win_delay_load_hook.c错误</title><link>http://www.blogjava.net/waterjava/archive/2020/02/22/435150.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Sat, 22 Feb 2020 08:33:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2020/02/22/435150.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/435150.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2020/02/22/435150.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/435150.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/435150.html</trackback:ping><description><![CDATA[ 解决办法：

修改以下文件
C:\Program Files\nodejs\node_modules\npm\node_modules\node-gyp\src\win_delay_load_hook.c

增加以下代码，到第一个#include前
#ifndef DELAYIMP_INSECURE_WRITABLE_HOOKS#define DELAYIMP_INSECURE_WRITABLE_HOOKS#endif
参考：
https://github.com/nodejs/node-gyp/issues/949
https://github.com/Automattic/node-canvas/issues/619
————————————————
版权声明：本文为CSDN博主「Amatig」的原创文章，遵循CC 4.0 BY-SA 版权协议，转载请附上原文出处链接及本声明。
原文链接：https://blog.csdn.net/cooltigerkin/article/details/51807588<img src ="http://www.blogjava.net/waterjava/aggbug/435150.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2020-02-22 16:33 <a href="http://www.blogjava.net/waterjava/archive/2020/02/22/435150.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IPFS问题</title><link>http://www.blogjava.net/waterjava/archive/2020/01/16/435040.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Thu, 16 Jan 2020 06:44:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2020/01/16/435040.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/435040.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2020/01/16/435040.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/435040.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/435040.html</trackback:ping><description><![CDATA[<div> 1.把&nbsp; "Gateway": "/ip4/127.0.0.1/tcp/8080"修改为："Gateway": "/ip4/0.0.0.0/tcp/8080"，这样本机就可以用192.168WEB访问了。</div><div>2.把WINDOWS防火墙入站的8080端口打开，这样在局域网就能访问了。</div><div></div><img src ="http://www.blogjava.net/waterjava/aggbug/435040.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2020-01-16 14:44 <a href="http://www.blogjava.net/waterjava/archive/2020/01/16/435040.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【我的区块链之路】- 谈一谈IPFS原理及玩法</title><link>http://www.blogjava.net/waterjava/archive/2020/01/12/435032.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Sun, 12 Jan 2020 08:17:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2020/01/12/435032.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/435032.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2020/01/12/435032.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/435032.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/435032.html</trackback:ping><description><![CDATA[https://blog.csdn.net/qq_25870633/article/details/82027510<img src ="http://www.blogjava.net/waterjava/aggbug/435032.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2020-01-12 16:17 <a href="http://www.blogjava.net/waterjava/archive/2020/01/12/435032.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>入门 Webpack，看这篇就够了</title><link>http://www.blogjava.net/waterjava/archive/2020/01/04/435018.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Sat, 04 Jan 2020 09:22:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2020/01/04/435018.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/435018.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2020/01/04/435018.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/435018.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/435018.html</trackback:ping><description><![CDATA[<a href="https://segmentfault.com/a/1190000006178770#articleHeader3">https://segmentfault.com/a/1190000006178770#articleHeader3</a><img src ="http://www.blogjava.net/waterjava/aggbug/435018.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2020-01-04 17:22 <a href="http://www.blogjava.net/waterjava/archive/2020/01/04/435018.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>文档计划 | IPFS API参考文档</title><link>http://www.blogjava.net/waterjava/archive/2020/01/03/435016.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Fri, 03 Jan 2020 11:03:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2020/01/03/435016.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/435016.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2020/01/03/435016.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/435016.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/435016.html</trackback:ping><description><![CDATA[<a href="https://www.jianshu.com/p/e38d5f733c81">https://www.jianshu.com/p/e38d5f733c81</a><img src ="http://www.blogjava.net/waterjava/aggbug/435016.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2020-01-03 19:03 <a href="http://www.blogjava.net/waterjava/archive/2020/01/03/435016.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IPFS环境搭建和用ipfs-api访问ipfs网络</title><link>http://www.blogjava.net/waterjava/archive/2020/01/03/435015.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Fri, 03 Jan 2020 09:55:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2020/01/03/435015.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/435015.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2020/01/03/435015.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/435015.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/435015.html</trackback:ping><description><![CDATA[<a href="https://blog.csdn.net/mongo_node/article/details/80143631">https://blog.csdn.net/mongo_node/article/details/80143631</a><img src ="http://www.blogjava.net/waterjava/aggbug/435015.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2020-01-03 17:55 <a href="http://www.blogjava.net/waterjava/archive/2020/01/03/435015.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>安装solc指定版本</title><link>http://www.blogjava.net/waterjava/archive/2020/01/01/435010.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Wed, 01 Jan 2020 04:28:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2020/01/01/435010.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/435010.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2020/01/01/435010.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/435010.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/435010.html</trackback:ping><description><![CDATA[<div>cnpm install -g solc@0.4.22</div><img src ="http://www.blogjava.net/waterjava/aggbug/435010.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2020-01-01 12:28 <a href="http://www.blogjava.net/waterjava/archive/2020/01/01/435010.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Node.js安装及环境配置之Windows篇</title><link>http://www.blogjava.net/waterjava/archive/2020/01/01/435009.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Wed, 01 Jan 2020 04:13:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2020/01/01/435009.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/435009.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2020/01/01/435009.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/435009.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/435009.html</trackback:ping><description><![CDATA[<h1><a href="https://www.jianshu.com/p/03a76b2e7e00">https://www.jianshu.com/p/03a76b2e7e00</a><br /></h1><img src ="http://www.blogjava.net/waterjava/aggbug/435009.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2020-01-01 12:13 <a href="http://www.blogjava.net/waterjava/archive/2020/01/01/435009.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>crx文件怎么安装?谷歌浏览器Chrome打开crx文件的方法</title><link>http://www.blogjava.net/waterjava/archive/2019/12/29/435002.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Sun, 29 Dec 2019 14:57:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2019/12/29/435002.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/435002.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2019/12/29/435002.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/435002.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/435002.html</trackback:ping><description><![CDATA[<a href="https://www.jb51.net/softjc/402153.html">https://www.jb51.net/softjc/402153.html</a><img src ="http://www.blogjava.net/waterjava/aggbug/435002.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2019-12-29 22:57 <a href="http://www.blogjava.net/waterjava/archive/2019/12/29/435002.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>go调用以太坊rpc写入合约操作中的DATA数据解析（纯字符串参数）</title><link>http://www.blogjava.net/waterjava/archive/2019/12/27/434995.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Fri, 27 Dec 2019 06:49:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2019/12/27/434995.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/434995.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2019/12/27/434995.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/434995.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/434995.html</trackback:ping><description><![CDATA[<a href="https://blog.csdn.net/weixin_42608885/article/details/100889008">https://blog.csdn.net/weixin_42608885/article/details/100889008</a><img src ="http://www.blogjava.net/waterjava/aggbug/434995.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2019-12-27 14:49 <a href="http://www.blogjava.net/waterjava/archive/2019/12/27/434995.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一步步构建自己的智能合约</title><link>http://www.blogjava.net/waterjava/archive/2019/12/26/434994.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Thu, 26 Dec 2019 08:09:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2019/12/26/434994.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/434994.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2019/12/26/434994.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/434994.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/434994.html</trackback:ping><description><![CDATA[<a href="https://segmentfault.com/a/1190000014797663">https://segmentfault.com/a/1190000014797663</a><img src ="http://www.blogjava.net/waterjava/aggbug/434994.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2019-12-26 16:09 <a href="http://www.blogjava.net/waterjava/archive/2019/12/26/434994.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何审计一个智能合约</title><link>http://www.blogjava.net/waterjava/archive/2019/12/26/434993.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Thu, 26 Dec 2019 07:37:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2019/12/26/434993.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/434993.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2019/12/26/434993.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/434993.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/434993.html</trackback:ping><description><![CDATA[<a href="https://cloud.tencent.com/developer/article/1522230">https://cloud.tencent.com/developer/article/1522230</a><img src ="http://www.blogjava.net/waterjava/aggbug/434993.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2019-12-26 15:37 <a href="http://www.blogjava.net/waterjava/archive/2019/12/26/434993.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何调用以太坊智能合约</title><link>http://www.blogjava.net/waterjava/archive/2019/12/26/434992.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Thu, 26 Dec 2019 07:31:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2019/12/26/434992.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/434992.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2019/12/26/434992.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/434992.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/434992.html</trackback:ping><description><![CDATA[<a href="https://www.cnblogs.com/KRDecad3/p/11745568.html">https://www.cnblogs.com/KRDecad3/p/11745568.html</a><img src ="http://www.blogjava.net/waterjava/aggbug/434992.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2019-12-26 15:31 <a href="http://www.blogjava.net/waterjava/archive/2019/12/26/434992.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>私钥生成钱包助记词的流程</title><link>http://www.blogjava.net/waterjava/archive/2019/12/24/434984.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Tue, 24 Dec 2019 02:02:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2019/12/24/434984.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/434984.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2019/12/24/434984.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/434984.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/434984.html</trackback:ping><description><![CDATA[<a href="https://www.cnblogs.com/hankal/p/9472920.html">https://www.cnblogs.com/hankal/p/9472920.html</a><img src ="http://www.blogjava.net/waterjava/aggbug/434984.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2019-12-24 10:02 <a href="http://www.blogjava.net/waterjava/archive/2019/12/24/434984.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>BIP39钱包助记词规范</title><link>http://www.blogjava.net/waterjava/archive/2019/12/24/434983.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Tue, 24 Dec 2019 02:01:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2019/12/24/434983.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/434983.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2019/12/24/434983.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/434983.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/434983.html</trackback:ping><description><![CDATA[<a href="https://www.jianshu.com/p/d5bac6d36dc6">https://www.jianshu.com/p/d5bac6d36dc6</a><img src ="http://www.blogjava.net/waterjava/aggbug/434983.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2019-12-24 10:01 <a href="http://www.blogjava.net/waterjava/archive/2019/12/24/434983.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>remix</title><link>http://www.blogjava.net/waterjava/archive/2019/12/22/434980.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Sat, 21 Dec 2019 16:27:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2019/12/22/434980.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/434980.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2019/12/22/434980.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/434980.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/434980.html</trackback:ping><description><![CDATA[<div>https://remix.ethereum.org/</div><div>http://remix.hubwiz.com/</div><div>https://ethereum.github.io/</div><img src ="http://www.blogjava.net/waterjava/aggbug/434980.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2019-12-22 00:27 <a href="http://www.blogjava.net/waterjava/archive/2019/12/22/434980.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Web3与智能合约交互实战</title><link>http://www.blogjava.net/waterjava/archive/2019/12/21/434979.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Sat, 21 Dec 2019 06:46:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2019/12/21/434979.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/434979.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2019/12/21/434979.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/434979.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/434979.html</trackback:ping><description><![CDATA[<p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; font-family: verdana, &quot;ms song&quot;, 宋体, Arial, 微软雅黑, Helvetica, sans-serif; font-size: 12px;">最新内容会更新在主站<a href="https://learnblockchain.cn/" style="margin: 0px; padding: 0px; color: #3b5999; text-decoration-line: none;">深入浅出区块链社区</a><br style="margin: 0px; padding: 0px;" />原文链接:<a href="https://learnblockchain.cn/2018/04/15/web3-html/" style="margin: 0px; padding: 0px; color: #3b5999; text-decoration-line: none;">Web3与智能合约交互实战</a></p><h2>写在前面</h2><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; font-family: verdana, &quot;ms song&quot;, 宋体, Arial, 微软雅黑, Helvetica, sans-serif; font-size: 12px;">在最初学习以太坊的时候，很多人都是自己创建以太坊节点后，使用geth与之交互。这种使用命令行交互的方法虽然让很多程序员感到兴奋（黑客帝国的既视感？），但不可能指望普通用户通过命令行使用Dapp。因此，我们需要一种友好的方式（比如一个web页面）来与智能合约交互，于是问题的答案就是<code style="margin: 1px 5px; line-height: 1.8; vertical-align: middle; display: inline-block; padding: 0px 5px !important; font-family: &quot;Courier New&quot;, sans-serif !important; background-color: #f5f5f5 !important; border: 1px solid #cccccc !important; border-radius: 3px !important;">web3.js</code>。</p><h2>Web3.js</h2><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; font-family: verdana, &quot;ms song&quot;, 宋体, Arial, 微软雅黑, Helvetica, sans-serif; font-size: 12px;"><a href="https://web3js.readthedocs.io/en/1.0/" style="margin: 0px; padding: 0px; color: #3b5999; text-decoration-line: none;">Web3.js</a>是以太坊官方的Javascript API，可以帮助智能合约开发者使用HTTP或者IPC与本地的或者远程的以太坊节点交互。实际上就是一个库的集合，主要包括下面几个库：</p><ul style="margin: 0px 0px 0px 30px; padding: 0px; word-break: break-all; font-family: verdana, &quot;ms song&quot;, 宋体, Arial, 微软雅黑, Helvetica, sans-serif; font-size: 12px;"><li style="margin: 0px; padding: 0px; list-style: disc;"><code style="margin: 1px 5px; line-height: 1.8; vertical-align: middle; display: inline-block; padding: 0px 5px !important; font-family: &quot;Courier New&quot;, sans-serif !important; background-color: #f5f5f5 !important; border: 1px solid #cccccc !important; border-radius: 3px !important;">web3-eth</code>用来与以太坊区块链和智能合约交互</li><li style="margin: 0px; padding: 0px; list-style: disc;"><code style="margin: 1px 5px; line-height: 1.8; vertical-align: middle; display: inline-block; padding: 0px 5px !important; font-family: &quot;Courier New&quot;, sans-serif !important; background-color: #f5f5f5 !important; border: 1px solid #cccccc !important; border-radius: 3px !important;">web3-shh</code>用来控制whisper协议与p2p通信以及广播</li><li style="margin: 0px; padding: 0px; list-style: disc;"><code style="margin: 1px 5px; line-height: 1.8; vertical-align: middle; display: inline-block; padding: 0px 5px !important; font-family: &quot;Courier New&quot;, sans-serif !important; background-color: #f5f5f5 !important; border: 1px solid #cccccc !important; border-radius: 3px !important;">web3-bzz</code>用来与swarm协议交互</li><li style="margin: 0px; padding: 0px; list-style: disc;"><code style="margin: 1px 5px; line-height: 1.8; vertical-align: middle; display: inline-block; padding: 0px 5px !important; font-family: &quot;Courier New&quot;, sans-serif !important; background-color: #f5f5f5 !important; border: 1px solid #cccccc !important; border-radius: 3px !important;">web3-utils</code>包含了一些Dapp开发有用的功能</li></ul><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; font-family: verdana, &quot;ms song&quot;, 宋体, Arial, 微软雅黑, Helvetica, sans-serif; font-size: 12px;">Web3与geth通信使用的是&nbsp;<a href="https://github.com/ethereum/wiki/wiki/JSON-RPC" style="margin: 0px; padding: 0px; color: #3b5999; text-decoration-line: none;">JSON-RPC</a>&nbsp;，这是一种轻量级的RPC（Remote Procedure Call）协议，整个通信的模型可以抽象为下图。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; font-family: verdana, &quot;ms song&quot;, 宋体, Arial, 微软雅黑, Helvetica, sans-serif; font-size: 12px;"><img src="https://learnblockchain.cn/images/Communication_Model.jpg" alt="Web3 Communication Model" style="margin: 0px; padding: 0px; border: 0px; max-width: 720px; height: auto;" /></p><h2>搭建测试链</h2><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; font-family: verdana, &quot;ms song&quot;, 宋体, Arial, 微软雅黑, Helvetica, sans-serif; font-size: 12px;">在开发初期，我们并没有必要使用真实的公链，为了开发效率，一般选择在本地搭建测试链。在本文我们选择的<a href="http://truffleframework.com/ganache/" style="margin: 0px; padding: 0px; color: #3b5999; text-decoration-line: none;">Ganache</a>（在此之前使用的是testrpc，Ganache属于它的升级版），一个图形化测试软件（也有命令行版本），可以一键在本地搭建以太坊区块链测试环境，并且将区块链的状态通过图形界面显示出来，Ganache的运行界面如下图所示。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; font-family: verdana, &quot;ms song&quot;, 宋体, Arial, 微软雅黑, Helvetica, sans-serif; font-size: 12px;"><img src="https://learnblockchain.cn/images/Ganache.png" alt="Ganache" style="margin: 0px; padding: 0px; border: 0px; max-width: 720px; height: auto;" /></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; font-family: verdana, &quot;ms song&quot;, 宋体, Arial, 微软雅黑, Helvetica, sans-serif; font-size: 12px;">从图中可以看到Ganache会默认创建10个账户，监听地址是<code style="margin: 1px 5px; line-height: 1.8; vertical-align: middle; display: inline-block; padding: 0px 5px !important; font-family: &quot;Courier New&quot;, sans-serif !important; background-color: #f5f5f5 !important; border: 1px solid #cccccc !important; border-radius: 3px !important;">http://127.0.0.1:7545</code>，可以实时看到<code style="margin: 1px 5px; line-height: 1.8; vertical-align: middle; display: inline-block; padding: 0px 5px !important; font-family: &quot;Courier New&quot;, sans-serif !important; background-color: #f5f5f5 !important; border: 1px solid #cccccc !important; border-radius: 3px !important;">Current Block</code>、<code style="margin: 1px 5px; line-height: 1.8; vertical-align: middle; display: inline-block; padding: 0px 5px !important; font-family: &quot;Courier New&quot;, sans-serif !important; background-color: #f5f5f5 !important; border: 1px solid #cccccc !important; border-radius: 3px !important;">Gas Price</code>、<code style="margin: 1px 5px; line-height: 1.8; vertical-align: middle; display: inline-block; padding: 0px 5px !important; font-family: &quot;Courier New&quot;, sans-serif !important; background-color: #f5f5f5 !important; border: 1px solid #cccccc !important; border-radius: 3px !important;">Gas Limit</code>等信息。</p><h2>创建智能合约</h2><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; font-family: verdana, &quot;ms song&quot;, 宋体, Arial, 微软雅黑, Helvetica, sans-serif; font-size: 12px;">目前以太坊官方全力支持的智能合约开发环境是<a href="https://remix.ethereum.org/" style="margin: 0px; padding: 0px; color: #3b5999; text-decoration-line: none;">Remix IDE</a>，我们在合约编辑页面编写如下代码：</p><pre style="margin-top: 10px; margin-bottom: 10px; padding: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-size: 12px;"><code javascript"="" style="margin: auto; vertical-align: middle; display: block; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; height: auto; overflow-x: auto; padding: 5px !important; line-height: 1.5 !important; font-family: &quot;Courier New&quot;, sans-serif !important; border: 1px solid #cccccc !important; border-radius: 3px !important;">pragma solidity ^<span style="margin: 0px; padding: 0px; line-height: 18px;">0.4</span><span style="margin: 0px; padding: 0px; line-height: 18px;">.21</span>;  contract InfoContract {         string fName;    uint age;        <span style="margin: 0px; padding: 0px; line-height: 18px;"><span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">function</span> <span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">setInfo</span>(<span style="margin: 0px; padding: 0px; line-height: 18px;">string _fName, uint _age</span>) <span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">public</span> </span>{        fName = _fName;        age = _age;    }        <span style="margin: 0px; padding: 0px; line-height: 18px;"><span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">function</span> <span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">getInfo</span>() <span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">public</span> <span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">constant</span> <span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">returns</span> (<span style="margin: 0px; padding: 0px; line-height: 18px;">string, uint</span>) </span>{        <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">return</span> (fName, age);    }    }</code></pre><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; font-family: verdana, &quot;ms song&quot;, 宋体, Arial, 微软雅黑, Helvetica, sans-serif; font-size: 12px;">代码很简单，就是简单的给<code style="margin: 1px 5px; line-height: 1.8; vertical-align: middle; display: inline-block; padding: 0px 5px !important; font-family: &quot;Courier New&quot;, sans-serif !important; background-color: #f5f5f5 !important; border: 1px solid #cccccc !important; border-radius: 3px !important;">name</code>和<code style="margin: 1px 5px; line-height: 1.8; vertical-align: middle; display: inline-block; padding: 0px 5px !important; font-family: &quot;Courier New&quot;, sans-serif !important; background-color: #f5f5f5 !important; border: 1px solid #cccccc !important; border-radius: 3px !important;">age</code>变量赋值与读取，接下来切换到 run 的 tab 下，将<code style="margin: 1px 5px; line-height: 1.8; vertical-align: middle; display: inline-block; padding: 0px 5px !important; font-family: &quot;Courier New&quot;, sans-serif !important; background-color: #f5f5f5 !important; border: 1px solid #cccccc !important; border-radius: 3px !important;">Environment</code>切换成<code style="margin: 1px 5px; line-height: 1.8; vertical-align: middle; display: inline-block; padding: 0px 5px !important; font-family: &quot;Courier New&quot;, sans-serif !important; background-color: #f5f5f5 !important; border: 1px solid #cccccc !important; border-radius: 3px !important;">Web3 Provider</code>，并输入我们的测试链的地址<code style="margin: 1px 5px; line-height: 1.8; vertical-align: middle; display: inline-block; padding: 0px 5px !important; font-family: &quot;Courier New&quot;, sans-serif !important; background-color: #f5f5f5 !important; border: 1px solid #cccccc !important; border-radius: 3px !important;">http://127.0.0.1:7545</code>，这里对这三个选项做一简单说明：</p><ul style="margin: 0px 0px 0px 30px; padding: 0px; word-break: break-all; font-family: verdana, &quot;ms song&quot;, 宋体, Arial, 微软雅黑, Helvetica, sans-serif; font-size: 12px;"><li style="margin: 0px; padding: 0px; list-style: disc;"><code style="margin: 1px 5px; line-height: 1.8; vertical-align: middle; display: inline-block; padding: 0px 5px !important; font-family: &quot;Courier New&quot;, sans-serif !important; background-color: #f5f5f5 !important; border: 1px solid #cccccc !important; border-radius: 3px !important;">Javascript VM</code>：简单的Javascript虚拟机环境，纯粹练习智能合约编写的时候可以选择</li><li style="margin: 0px; padding: 0px; list-style: disc;"><code style="margin: 1px 5px; line-height: 1.8; vertical-align: middle; display: inline-block; padding: 0px 5px !important; font-family: &quot;Courier New&quot;, sans-serif !important; background-color: #f5f5f5 !important; border: 1px solid #cccccc !important; border-radius: 3px !important;">Injected Web3</code>：连接到嵌入到页面的Web3，比如连接到MetaMask</li><li style="margin: 0px; padding: 0px; list-style: disc;"><code style="margin: 1px 5px; line-height: 1.8; vertical-align: middle; display: inline-block; padding: 0px 5px !important; font-family: &quot;Courier New&quot;, sans-serif !important; background-color: #f5f5f5 !important; border: 1px solid #cccccc !important; border-radius: 3px !important;">Web3 Provider</code>：连接到自定义的节点，如私有的测试网络。</li></ul><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; font-family: verdana, &quot;ms song&quot;, 宋体, Arial, 微软雅黑, Helvetica, sans-serif; font-size: 12px;">如果连接成功，那么在下面的<code style="margin: 1px 5px; line-height: 1.8; vertical-align: middle; display: inline-block; padding: 0px 5px !important; font-family: &quot;Courier New&quot;, sans-serif !important; background-color: #f5f5f5 !important; border: 1px solid #cccccc !important; border-radius: 3px !important;">Account</code>的选项会默认选择 Ganache 创建的第一个账户地址。接下来我们点击<code style="margin: 1px 5px; line-height: 1.8; vertical-align: middle; display: inline-block; padding: 0px 5px !important; font-family: &quot;Courier New&quot;, sans-serif !important; background-color: #f5f5f5 !important; border: 1px solid #cccccc !important; border-radius: 3px !important;">Create</code>就会将我们的智能合约部署到我们的测试网中。接下来 Remix 的页面不要关闭，在后面编写前端代码时还要用到合约的地址以及<code style="margin: 1px 5px; line-height: 1.8; vertical-align: middle; display: inline-block; padding: 0px 5px !important; font-family: &quot;Courier New&quot;, sans-serif !important; background-color: #f5f5f5 !important; border: 1px solid #cccccc !important; border-radius: 3px !important;">ABI</code>信息。</p><h2>安装Web3</h2><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; font-family: verdana, &quot;ms song&quot;, 宋体, Arial, 微软雅黑, Helvetica, sans-serif; font-size: 12px;">在这之前，先在终端创建我们的项目：</p><pre style="margin-top: 10px; margin-bottom: 10px; padding: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-size: 12px;"><code style="margin: auto; vertical-align: middle; display: block; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; height: auto; overflow-x: auto; padding: 5px !important; line-height: 1.5 !important; font-family: &quot;Courier New&quot;, sans-serif !important; border: 1px solid #cccccc !important; border-radius: 3px !important;">&gt; mkdir info &gt; <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">cd</span> info</code></pre><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; font-family: verdana, &quot;ms song&quot;, 宋体, Arial, 微软雅黑, Helvetica, sans-serif; font-size: 12px;">接下来使用 node.js 的包管理工具 npm 初始化项目，创建<code style="margin: 1px 5px; line-height: 1.8; vertical-align: middle; display: inline-block; padding: 0px 5px !important; font-family: &quot;Courier New&quot;, sans-serif !important; background-color: #f5f5f5 !important; border: 1px solid #cccccc !important; border-radius: 3px !important;">package.json</code>&nbsp;文件，其中保存了项目需要的相关依赖环境。</p><pre style="margin-top: 10px; margin-bottom: 10px; padding: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-size: 12px;"><code shell"="" style="margin: auto; vertical-align: middle; display: block; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; height: auto; overflow-x: auto; padding: 5px !important; line-height: 1.5 !important; font-family: &quot;Courier New&quot;, sans-serif !important; border: 1px solid #cccccc !important; border-radius: 3px !important;"><span style="margin: 0px; padding: 0px; color: #2b91af; line-height: 18px;">&gt;</span><span style="margin: 0px; padding: 0px; line-height: 18px;"> npm init</span></code></pre><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; font-family: verdana, &quot;ms song&quot;, 宋体, Arial, 微软雅黑, Helvetica, sans-serif; font-size: 12px;">一路按回车直到项目创建完成。最后，运行下面命令安装web.js：</p><pre style="margin-top: 10px; margin-bottom: 10px; padding: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-size: 12px;"><code shell"="" style="margin: auto; vertical-align: middle; display: block; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; height: auto; overflow-x: auto; padding: 5px !important; line-height: 1.5 !important; font-family: &quot;Courier New&quot;, sans-serif !important; border: 1px solid #cccccc !important; border-radius: 3px !important;"><span style="margin: 0px; padding: 0px; color: #2b91af; line-height: 18px;">&gt;</span><span style="margin: 0px; padding: 0px; line-height: 18px;"> npm install web3</span></code></pre><blockquote style="margin-right: 0px; margin-left: 0px; background-image: none; font-family: verdana, &quot;ms song&quot;, 宋体, Arial, 微软雅黑, Helvetica, sans-serif; font-size: 12px;"><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;"><em style="margin: 0px; padding: 0px;">注意：</em>&nbsp;在实际安装过程中我发现web3在安装完成后并没有&nbsp;<code style="margin: 1px 5px; line-height: 1.8; vertical-align: middle; display: inline-block; padding: 0px 5px !important; font-family: &quot;Courier New&quot;, sans-serif !important; background-color: #f5f5f5 !important; border: 1px solid #cccccc !important; border-radius: 3px !important;">/node_modules/web3/dist/we3.min.js</code>&nbsp;文件，这个问题在&nbsp;<a href="https://github.com/ethereum/web3.js/issues/1041" style="margin: 0px; padding: 0px; color: #3b5999; text-decoration-line: none;">issue#1041</a>中有体现，但官方好像一直没解决。不过可以在这里<a href="https://codeload.github.com/ethereum/web3.js/zip/develop" style="margin: 0px; padding: 0px; color: #3b5999; text-decoration-line: none;">下载</a>所需的文件，解压后将<code style="margin: 1px 5px; line-height: 1.8; vertical-align: middle; display: inline-block; padding: 0px 5px !important; font-family: &quot;Courier New&quot;, sans-serif !important; background-color: #f5f5f5 !important; border: 1px solid #cccccc !important; border-radius: 3px !important;">dist</code>文件夹的内容拷贝到&nbsp;<code style="margin: 1px 5px; line-height: 1.8; vertical-align: middle; display: inline-block; padding: 0px 5px !important; font-family: &quot;Courier New&quot;, sans-serif !important; background-color: #f5f5f5 !important; border: 1px solid #cccccc !important; border-radius: 3px !important;">/node_modules/web3</code>路径下。</p></blockquote><h2>创建 UI</h2><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; font-family: verdana, &quot;ms song&quot;, 宋体, Arial, 微软雅黑, Helvetica, sans-serif; font-size: 12px;">在项目目录下创建<code style="margin: 1px 5px; line-height: 1.8; vertical-align: middle; display: inline-block; padding: 0px 5px !important; font-family: &quot;Courier New&quot;, sans-serif !important; background-color: #f5f5f5 !important; border: 1px solid #cccccc !important; border-radius: 3px !important;">index.html</code>，在这里我们将创建基础的 UI，功能包括<code style="margin: 1px 5px; line-height: 1.8; vertical-align: middle; display: inline-block; padding: 0px 5px !important; font-family: &quot;Courier New&quot;, sans-serif !important; background-color: #f5f5f5 !important; border: 1px solid #cccccc !important; border-radius: 3px !important;">name</code>和<code style="margin: 1px 5px; line-height: 1.8; vertical-align: middle; display: inline-block; padding: 0px 5px !important; font-family: &quot;Courier New&quot;, sans-serif !important; background-color: #f5f5f5 !important; border: 1px solid #cccccc !important; border-radius: 3px !important;">age</code>的输入框，以及一个按钮，这些将通过 jQuery 实现：</p><pre style="margin-top: 10px; margin-bottom: 10px; padding: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-size: 12px;"><code xml"="" style="margin: auto; vertical-align: middle; display: block; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; height: auto; overflow-x: auto; padding: 5px !important; line-height: 1.5 !important; font-family: &quot;Courier New&quot;, sans-serif !important; border: 1px solid #cccccc !important; border-radius: 3px !important;"><span style="margin: 0px; padding: 0px; color: #2b91af; line-height: 18px;">&lt;!DOCTYPE html&gt;</span> <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">&lt;<span style="margin: 0px; padding: 0px; line-height: 18px;">html</span> <span style="margin: 0px; padding: 0px; color: #ff0000; line-height: 18px;">lang</span>=<span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">"en"</span>&gt;</span> <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">&lt;<span style="margin: 0px; padding: 0px; line-height: 18px;">head</span>&gt;</span>     <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">&lt;<span style="margin: 0px; padding: 0px; line-height: 18px;">meta</span> <span style="margin: 0px; padding: 0px; color: #ff0000; line-height: 18px;">charset</span>=<span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">"UTF-8"</span>&gt;</span>     <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">&lt;<span style="margin: 0px; padding: 0px; line-height: 18px;">meta</span> <span style="margin: 0px; padding: 0px; color: #ff0000; line-height: 18px;">name</span>=<span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">"viewport"</span> <span style="margin: 0px; padding: 0px; color: #ff0000; line-height: 18px;">content</span>=<span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">"width=device-width, initial-scale=1.0"</span>&gt;</span>     <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">&lt;<span style="margin: 0px; padding: 0px; line-height: 18px;">meta</span> <span style="margin: 0px; padding: 0px; color: #ff0000; line-height: 18px;">http-equiv</span>=<span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">"X-UA-Compatible"</span> <span style="margin: 0px; padding: 0px; color: #ff0000; line-height: 18px;">content</span>=<span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">"ie=edge"</span>&gt;</span>     <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">&lt;<span style="margin: 0px; padding: 0px; line-height: 18px;">title</span>&gt;</span>Document<span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">&lt;/<span style="margin: 0px; padding: 0px; line-height: 18px;">title</span>&gt;</span>      <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">&lt;<span style="margin: 0px; padding: 0px; line-height: 18px;">link</span> <span style="margin: 0px; padding: 0px; color: #ff0000; line-height: 18px;">rel</span>=<span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">"stylesheet"</span> <span style="margin: 0px; padding: 0px; color: #ff0000; line-height: 18px;">type</span>=<span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">"text/css"</span> <span style="margin: 0px; padding: 0px; color: #ff0000; line-height: 18px;">href</span>=<span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">"main.css"</span>&gt;</span>      <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">&lt;<span style="margin: 0px; padding: 0px; line-height: 18px;">script</span> <span style="margin: 0px; padding: 0px; color: #ff0000; line-height: 18px;">src</span>=<span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">"./node_modules/web3/dist/web3.min.js"</span>&gt;</span><span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">&lt;/<span style="margin: 0px; padding: 0px; line-height: 18px;">script</span>&gt;</span>  <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">&lt;/<span style="margin: 0px; padding: 0px; line-height: 18px;">head</span>&gt;</span> <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">&lt;<span style="margin: 0px; padding: 0px; line-height: 18px;">body</span>&gt;</span>     <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">&lt;<span style="margin: 0px; padding: 0px; line-height: 18px;">div</span> <span style="margin: 0px; padding: 0px; color: #ff0000; line-height: 18px;">class</span>=<span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">"container"</span>&gt;</span>          <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">&lt;<span style="margin: 0px; padding: 0px; line-height: 18px;">h1</span>&gt;</span>Info Contract<span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">&lt;/<span style="margin: 0px; padding: 0px; line-height: 18px;">h1</span>&gt;</span>          <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">&lt;<span style="margin: 0px; padding: 0px; line-height: 18px;">h2</span> <span style="margin: 0px; padding: 0px; color: #ff0000; line-height: 18px;">id</span>=<span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">"info"</span>&gt;</span><span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">&lt;/<span style="margin: 0px; padding: 0px; line-height: 18px;">h2</span>&gt;</span>          <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">&lt;<span style="margin: 0px; padding: 0px; line-height: 18px;">label</span> <span style="margin: 0px; padding: 0px; color: #ff0000; line-height: 18px;">for</span>=<span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">"name"</span> <span style="margin: 0px; padding: 0px; color: #ff0000; line-height: 18px;">class</span>=<span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">"col-lg-2 control-label"</span>&gt;</span>Name<span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">&lt;/<span style="margin: 0px; padding: 0px; line-height: 18px;">label</span>&gt;</span>         <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">&lt;<span style="margin: 0px; padding: 0px; line-height: 18px;">input</span> <span style="margin: 0px; padding: 0px; color: #ff0000; line-height: 18px;">id</span>=<span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">"name"</span> <span style="margin: 0px; padding: 0px; color: #ff0000; line-height: 18px;">type</span>=<span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">"text"</span>&gt;</span>          <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">&lt;<span style="margin: 0px; padding: 0px; line-height: 18px;">label</span> <span style="margin: 0px; padding: 0px; color: #ff0000; line-height: 18px;">for</span>=<span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">"name"</span> <span style="margin: 0px; padding: 0px; color: #ff0000; line-height: 18px;">class</span>=<span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">"col-lg-2 control-label"</span>&gt;</span>Age<span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">&lt;/<span style="margin: 0px; padding: 0px; line-height: 18px;">label</span>&gt;</span>         <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">&lt;<span style="margin: 0px; padding: 0px; line-height: 18px;">input</span> <span style="margin: 0px; padding: 0px; color: #ff0000; line-height: 18px;">id</span>=<span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">"age"</span> <span style="margin: 0px; padding: 0px; color: #ff0000; line-height: 18px;">type</span>=<span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">"text"</span>&gt;</span>          <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">&lt;<span style="margin: 0px; padding: 0px; line-height: 18px;">button</span> <span style="margin: 0px; padding: 0px; color: #ff0000; line-height: 18px;">id</span>=<span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">"button"</span>&gt;</span>Update Info<span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">&lt;/<span style="margin: 0px; padding: 0px; line-height: 18px;">button</span>&gt;</span>       <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">&lt;/<span style="margin: 0px; padding: 0px; line-height: 18px;">div</span>&gt;</span>      <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">&lt;<span style="margin: 0px; padding: 0px; line-height: 18px;">script</span> <span style="margin: 0px; padding: 0px; color: #ff0000; line-height: 18px;">src</span>=<span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">"https://code.jquery.com/jquery-3.2.1.slim.min.js"</span>&gt;</span><span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">&lt;/<span style="margin: 0px; padding: 0px; line-height: 18px;">script</span>&gt;</span>      <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">&lt;<span style="margin: 0px; padding: 0px; line-height: 18px;">script</span>&gt;</span><span style="margin: 0px; padding: 0px; line-height: 18px;">        <span style="margin: 0px; padding: 0px; color: #008000; line-height: 18px;">// Our future code here..</span>     </span><span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">&lt;/<span style="margin: 0px; padding: 0px; line-height: 18px;">script</span>&gt;</span>  <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">&lt;/<span style="margin: 0px; padding: 0px; line-height: 18px;">body</span>&gt;</span> <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">&lt;/<span style="margin: 0px; padding: 0px; line-height: 18px;">html</span>&gt;</span></code></pre><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; font-family: verdana, &quot;ms song&quot;, 宋体, Arial, 微软雅黑, Helvetica, sans-serif; font-size: 12px;">接下来需要编写<code style="margin: 1px 5px; line-height: 1.8; vertical-align: middle; display: inline-block; padding: 0px 5px !important; font-family: &quot;Courier New&quot;, sans-serif !important; background-color: #f5f5f5 !important; border: 1px solid #cccccc !important; border-radius: 3px !important;">main.css</code>文件设定基本的样式：</p><pre style="margin-top: 10px; margin-bottom: 10px; padding: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-size: 12px;"><code style="margin: auto; vertical-align: middle; display: block; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; height: auto; overflow-x: auto; padding: 5px !important; line-height: 1.5 !important; font-family: &quot;Courier New&quot;, sans-serif !important; border: 1px solid #cccccc !important; border-radius: 3px !important;"><span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">body</span> {     <span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">background-color</span>:<span style="margin: 0px; padding: 0px; line-height: 18px;">#F0F0F0</span>;     <span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">padding</span>: <span style="margin: 0px; padding: 0px; line-height: 18px;">2em</span>;     <span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">font-family</span>: <span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">'Raleway'</span>,<span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">'Source Sans Pro'</span>, <span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">'Arial'</span>; } <span style="margin: 0px; padding: 0px; line-height: 18px;">.container</span> {     <span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">width</span>: <span style="margin: 0px; padding: 0px; line-height: 18px;">50%</span>;     <span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">margin</span>: <span style="margin: 0px; padding: 0px; line-height: 18px;">0</span> auto; } <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">label</span> {     <span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">display</span>:block;     <span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">margin-bottom</span>:<span style="margin: 0px; padding: 0px; line-height: 18px;">10px</span>; } <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">input</span> {     <span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">padding</span>:<span style="margin: 0px; padding: 0px; line-height: 18px;">10px</span>;     <span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">width</span>: <span style="margin: 0px; padding: 0px; line-height: 18px;">50%</span>;     <span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">margin-bottom</span>: <span style="margin: 0px; padding: 0px; line-height: 18px;">1em</span>; } <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">button</span> {     <span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">margin</span>: <span style="margin: 0px; padding: 0px; line-height: 18px;">2em</span> <span style="margin: 0px; padding: 0px; line-height: 18px;">0</span>;     <span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">padding</span>: <span style="margin: 0px; padding: 0px; line-height: 18px;">1em</span> <span style="margin: 0px; padding: 0px; line-height: 18px;">4em</span>;     <span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">display</span>:block; }  <span style="margin: 0px; padding: 0px; line-height: 18px;">#info</span> {     <span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">padding</span>:<span style="margin: 0px; padding: 0px; line-height: 18px;">1em</span>;     <span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">background-color</span>:<span style="margin: 0px; padding: 0px; line-height: 18px;">#fff</span>;     <span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">margin</span>: <span style="margin: 0px; padding: 0px; line-height: 18px;">1em</span> <span style="margin: 0px; padding: 0px; line-height: 18px;">0</span>; }</code></pre><h2>使用Web3与智能合约交互</h2><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; font-family: verdana, &quot;ms song&quot;, 宋体, Arial, 微软雅黑, Helvetica, sans-serif; font-size: 12px;">UI 创建好之后，在<code style="margin: 1px 5px; line-height: 1.8; vertical-align: middle; display: inline-block; padding: 0px 5px !important; font-family: &quot;Courier New&quot;, sans-serif !important; background-color: #f5f5f5 !important; border: 1px solid #cccccc !important; border-radius: 3px !important;">&lt;script&gt;</code>标签中间编写<code style="margin: 1px 5px; line-height: 1.8; vertical-align: middle; display: inline-block; padding: 0px 5px !important; font-family: &quot;Courier New&quot;, sans-serif !important; background-color: #f5f5f5 !important; border: 1px solid #cccccc !important; border-radius: 3px !important;">web.js</code>的代码与智能合约交互。首先创建<code style="margin: 1px 5px; line-height: 1.8; vertical-align: middle; display: inline-block; padding: 0px 5px !important; font-family: &quot;Courier New&quot;, sans-serif !important; background-color: #f5f5f5 !important; border: 1px solid #cccccc !important; border-radius: 3px !important;">web3</code>实例，并与我们的测试环境连接：</p><pre style="margin-top: 10px; margin-bottom: 10px; padding: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-size: 12px;"><code javascript"="" style="margin: auto; vertical-align: middle; display: block; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; height: auto; overflow-x: auto; padding: 5px !important; line-height: 1.5 !important; font-family: &quot;Courier New&quot;, sans-serif !important; border: 1px solid #cccccc !important; border-radius: 3px !important;">&lt;script&gt;     <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">if</span> (<span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">typeof</span> web3 !== <span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">'undefined'</span>) {         web3 = <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">new</span> Web3(web3.currentProvider);     } <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">else</span> {         <span style="margin: 0px; padding: 0px; color: #008000; line-height: 18px;">// set the provider you want from Web3.providers</span>         web3 = <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">new</span> Web3(<span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">new</span> Web3.providers.HttpProvider(<span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">"http://localhost:7545"</span>));     } &lt;<span style="margin: 0px; padding: 0px; line-height: 18px;">/script&gt;</span></code></pre><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; font-family: verdana, &quot;ms song&quot;, 宋体, Arial, 微软雅黑, Helvetica, sans-serif; font-size: 12px;">这段代码是<a href="https://github.com/ethereum/web3.js/" style="margin: 0px; padding: 0px; color: #3b5999; text-decoration-line: none;">web3.js Github</a>提供的样例，意思是如果<code style="margin: 1px 5px; line-height: 1.8; vertical-align: middle; display: inline-block; padding: 0px 5px !important; font-family: &quot;Courier New&quot;, sans-serif !important; background-color: #f5f5f5 !important; border: 1px solid #cccccc !important; border-radius: 3px !important;">web3</code>已经被定义，那么就可以直接当作我们的 provider 使用。如果没有定义，则我们手动指定 provider。</p><blockquote style="margin-right: 0px; margin-left: 0px; background-image: none; font-family: verdana, &quot;ms song&quot;, 宋体, Arial, 微软雅黑, Helvetica, sans-serif; font-size: 12px;"><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px;">这里可能会存在疑问：为什么 web3 会被事先定义呢？实际上，如果你使用类似&nbsp;<a href="https://metamask.io/" style="margin: 0px; padding: 0px; color: #3b5999; text-decoration-line: none;">MetaMask</a>（一个 Chrome 上的插件，迷你型以太坊钱包）这样的软件，provider 就会被自动植入。</p></blockquote><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; font-family: verdana, &quot;ms song&quot;, 宋体, Arial, 微软雅黑, Helvetica, sans-serif; font-size: 12px;">在上面代码的基础上，接下来设置默认的以太坊账户：</p><pre style="margin-top: 10px; margin-bottom: 10px; padding: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-size: 12px;"><code javascript"="" style="margin: auto; vertical-align: middle; display: block; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; height: auto; overflow-x: auto; padding: 5px !important; line-height: 1.5 !important; font-family: &quot;Courier New&quot;, sans-serif !important; border: 1px solid #cccccc !important; border-radius: 3px !important;">web3.eth.defaultAccount = web3.eth.accounts[<span style="margin: 0px; padding: 0px; line-height: 18px;">0</span>];</code></pre><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; font-family: verdana, &quot;ms song&quot;, 宋体, Arial, 微软雅黑, Helvetica, sans-serif; font-size: 12px;">在上文中我们使用 Ganache 已经创建了 10 个账户了，这里我们选择第一个账户当作默认账户。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; font-family: verdana, &quot;ms song&quot;, 宋体, Arial, 微软雅黑, Helvetica, sans-serif; font-size: 12px;">接下来需要让我们的<code style="margin: 1px 5px; line-height: 1.8; vertical-align: middle; display: inline-block; padding: 0px 5px !important; font-family: &quot;Courier New&quot;, sans-serif !important; background-color: #f5f5f5 !important; border: 1px solid #cccccc !important; border-radius: 3px !important;">web3</code>知道我们的合约是什么样的，这里需要用到合约的&nbsp;<a href="https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI" style="margin: 0px; padding: 0px; color: #3b5999; text-decoration-line: none;">ABI（Application Binary Interface）</a>。<code style="margin: 1px 5px; line-height: 1.8; vertical-align: middle; display: inline-block; padding: 0px 5px !important; font-family: &quot;Courier New&quot;, sans-serif !important; background-color: #f5f5f5 !important; border: 1px solid #cccccc !important; border-radius: 3px !important;">ABI</code>可以使我们调用合约的函数，并且从合约中获取数据。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; font-family: verdana, &quot;ms song&quot;, 宋体, Arial, 微软雅黑, Helvetica, sans-serif; font-size: 12px;">在上文中我们已经在 Remix 中创建了我们的合约，这时重新回到 Remix，在 Compile 的 tab 下我们点击<code style="margin: 1px 5px; line-height: 1.8; vertical-align: middle; display: inline-block; padding: 0px 5px !important; font-family: &quot;Courier New&quot;, sans-serif !important; background-color: #f5f5f5 !important; border: 1px solid #cccccc !important; border-radius: 3px !important;">Details</code>&nbsp;出现的页面中我们可以拷贝合约的<code style="margin: 1px 5px; line-height: 1.8; vertical-align: middle; display: inline-block; padding: 0px 5px !important; font-family: &quot;Courier New&quot;, sans-serif !important; background-color: #f5f5f5 !important; border: 1px solid #cccccc !important; border-radius: 3px !important;">ABI</code>，如下图所示。<br style="margin: 0px; padding: 0px;" /><img src="https://learnblockchain.cn/images/ABI.png" style="margin: 0px; padding: 0px; border: 0px; max-width: 720px; height: auto;"  alt="" /><br style="margin: 0px; padding: 0px;" />将其复制到代码中：</p><pre style="margin-top: 10px; margin-bottom: 10px; padding: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-size: 12px;"><code javascript"="" style="margin: auto; vertical-align: middle; display: block; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; height: auto; overflow-x: auto; padding: 5px !important; line-height: 1.5 !important; font-family: &quot;Courier New&quot;, sans-serif !important; border: 1px solid #cccccc !important; border-radius: 3px !important;"><span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">var</span> infoContract = web3.eth.contract(PASTE ABI HERE!);</code></pre><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; font-family: verdana, &quot;ms song&quot;, 宋体, Arial, 微软雅黑, Helvetica, sans-serif; font-size: 12px;">接下来转到 run 的tab，拷贝合约的地址，将其复制到下面的代码中：</p><pre style="margin-top: 10px; margin-bottom: 10px; padding: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-size: 12px;"><code javascript"="" style="margin: auto; vertical-align: middle; display: block; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; height: auto; overflow-x: auto; padding: 5px !important; line-height: 1.5 !important; font-family: &quot;Courier New&quot;, sans-serif !important; border: 1px solid #cccccc !important; border-radius: 3px !important;"><span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">var</span> info = InfoContract.at(<span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">'PASTE CONTRACT ADDRESS HERE'</span>);</code></pre><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; font-family: verdana, &quot;ms song&quot;, 宋体, Arial, 微软雅黑, Helvetica, sans-serif; font-size: 12px;">完成这些我们就可以调用合约中的函数了，下面我们使用 jQuery 与我们的合约进行交互：</p><pre style="margin-top: 10px; margin-bottom: 10px; padding: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-size: 12px;"><code javascript"="" style="margin: auto; vertical-align: middle; display: block; background-image: initial; background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; height: auto; overflow-x: auto; padding: 5px !important; line-height: 1.5 !important; font-family: &quot;Courier New&quot;, sans-serif !important; border: 1px solid #cccccc !important; border-radius: 3px !important;">info.getInfo(<span style="margin: 0px; padding: 0px; line-height: 18px;"><span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">function</span>(<span style="margin: 0px; padding: 0px; line-height: 18px;">error, result</span>)</span>{     <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">if</span>(!error)         {             $(<span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">"#info"</span>).html(result[<span style="margin: 0px; padding: 0px; line-height: 18px;">0</span>]+<span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">' ('</span>+result[<span style="margin: 0px; padding: 0px; line-height: 18px;">1</span>]+<span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">' years old)'</span>);             <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">console</span>.log(result);         }     <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">else</span>         <span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">console</span>.error(error); });  $(<span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">"#button"</span>).click(<span style="margin: 0px; padding: 0px; line-height: 18px;"><span style="margin: 0px; padding: 0px; color: #0000ff; line-height: 18px;">function</span>() </span>{     info.setInfo($(<span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">"#name"</span>).val(), $(<span style="margin: 0px; padding: 0px; color: #a31515; line-height: 18px;">"#age"</span>).val()); });</code></pre><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; font-family: verdana, &quot;ms song&quot;, 宋体, Arial, 微软雅黑, Helvetica, sans-serif; font-size: 12px;">以上的代码就简单地实现了对合约中两个函数的调用，分别读取和显示<code style="margin: 1px 5px; line-height: 1.8; vertical-align: middle; display: inline-block; padding: 0px 5px !important; font-family: &quot;Courier New&quot;, sans-serif !important; background-color: #f5f5f5 !important; border: 1px solid #cccccc !important; border-radius: 3px !important;">name</code>和<code style="margin: 1px 5px; line-height: 1.8; vertical-align: middle; display: inline-block; padding: 0px 5px !important; font-family: &quot;Courier New&quot;, sans-serif !important; background-color: #f5f5f5 !important; border: 1px solid #cccccc !important; border-radius: 3px !important;">age</code>变量。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; font-family: verdana, &quot;ms song&quot;, 宋体, Arial, 微软雅黑, Helvetica, sans-serif; font-size: 12px;">到此我们就完成了全部的代码，完整代码可以在&nbsp;<a href="https://github.com/xilibi2003/InfoContract" style="margin: 0px; padding: 0px; color: #3b5999; text-decoration-line: none;">InfoContract</a>&nbsp;中找到。在浏览器中打开<code style="margin: 1px 5px; line-height: 1.8; vertical-align: middle; display: inline-block; padding: 0px 5px !important; font-family: &quot;Courier New&quot;, sans-serif !important; background-color: #f5f5f5 !important; border: 1px solid #cccccc !important; border-radius: 3px !important;">index.html</code>测试效果如下图（输入名字和年龄后刷新）。</p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; font-family: verdana, &quot;ms song&quot;, 宋体, Arial, 微软雅黑, Helvetica, sans-serif; font-size: 12px;"><img src="https://learnblockchain.cn/images/page.png" style="margin: 0px; padding: 0px; border: 0px; max-width: 720px; height: auto;"  alt="" /></p><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; font-family: verdana, &quot;ms song&quot;, 宋体, Arial, 微软雅黑, Helvetica, sans-serif; font-size: 12px;">本文的作者是盖盖，他的微信公众号: chainlab</p><h2>参考文献</h2><ul style="margin: 0px 0px 0px 30px; padding: 0px; word-break: break-all; font-family: verdana, &quot;ms song&quot;, 宋体, Arial, 微软雅黑, Helvetica, sans-serif; font-size: 12px;"><li style="margin: 0px; padding: 0px; list-style: disc;"><a href="https://coursetro.com/posts/code/99/Interacting-with-a-Smart-Contract-through-Web3.js-(Tutorial)" style="margin: 0px; padding: 0px; color: #3b5999; text-decoration-line: none;">Interacting with a Smart Contract through Web3.js (Tutorial)</a></li></ul><p style="margin-top: 10px; margin-bottom: 10px; padding: 0px; font-family: verdana, &quot;ms song&quot;, 宋体, Arial, 微软雅黑, Helvetica, sans-serif; font-size: 12px;">&#9755;&nbsp;<a href="https://learnblockchain.cn/" style="margin: 0px; padding: 0px; color: #3b5999; text-decoration-line: none;">深入浅出区块链</a>&nbsp;- 系统学习区块链，打造最好的区块链技术博客。</p><img src ="http://www.blogjava.net/waterjava/aggbug/434979.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2019-12-21 14:46 <a href="http://www.blogjava.net/waterjava/archive/2019/12/21/434979.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GitHub项目、代码搜索、使用等技巧</title><link>http://www.blogjava.net/waterjava/archive/2019/12/21/434977.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Sat, 21 Dec 2019 02:14:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2019/12/21/434977.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/434977.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2019/12/21/434977.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/434977.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/434977.html</trackback:ping><description><![CDATA[https://blog.csdn.net/xiaomu_347/article/details/80729892<img src ="http://www.blogjava.net/waterjava/aggbug/434977.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2019-12-21 10:14 <a href="http://www.blogjava.net/waterjava/archive/2019/12/21/434977.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何在 GitHub 上找到你要的代码?</title><link>http://www.blogjava.net/waterjava/archive/2019/12/20/434976.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Fri, 20 Dec 2019 08:49:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2019/12/20/434976.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/434976.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2019/12/20/434976.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/434976.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/434976.html</trackback:ping><description><![CDATA[<div><div><article><p>GitHub 在开源世界的受欢迎程度自不必多言。再加上前阵子，GitHub 官方又搞了个大新闻：<strong>私有仓库改为免费使用</strong>，这在原来可是需要真金白银的买的。可见微软收购后，依然没有改变 GitHub 的定位，甚至还更进一步。</p><p>花开两朵，各表一枝。我们今天想要聊的并不是 GitHub 多么厉害，而是你<strong>怎么能把 GitHub 用得很厉害</strong>。</p><p>你在 GitHub 上搜索代码时，是怎么样操作的呢？是不是就像这样，直接在搜索框里输入要检索的内容，然后不断在列表里翻页找自己需要的内容？</p><div> <div style="max-width: 640px; max-height: 217px; background-color: transparent;">  <div data-width="640" data-height="217"><img data-original-src="//upload-images.jianshu.io/upload_images/10878070-684450e4e92f3564.jpg" src="//upload-images.jianshu.io/upload_images/10878070-684450e4e92f3564.jpg" data-original-width="640" data-original-height="217" data-original-format="image/jpeg" data-original-filesize="16788" style="cursor: zoom-in;" data-image-index="0"  alt="" /></div> </div>  </div><p>或者是简单筛选下，在左侧加个语言的过滤项。</p><div> <div style="max-width: 600px; max-height: 180px; background-color: transparent;">  <div data-width="600" data-height="180"><img data-original-src="//upload-images.jianshu.io/upload_images/10878070-bca27a4225d8cce5.jpg" src="//upload-images.jianshu.io/upload_images/10878070-bca27a4225d8cce5.jpg" data-original-width="600" data-original-height="180" data-original-format="image/jpeg" data-original-filesize="10360" style="cursor: zoom-in;" data-image-index="1"  alt="" /></div> </div>  </div><p>再或者改变一下列表的排序方式</p><div> <div style="max-width: 640px; max-height: 594px; background-color: transparent;">  <div data-width="640" data-height="594"><img data-original-src="//upload-images.jianshu.io/upload_images/10878070-6885ede47e3486fc.jpg" src="//upload-images.jianshu.io/upload_images/10878070-6885ede47e3486fc.jpg" data-original-width="640" data-original-height="594" data-original-format="image/jpeg" data-original-filesize="27164" style="cursor: zoom-in;" data-image-index="2"  alt="" /></div> </div>  </div><p>这就是「全部」了吗？</p><p>一般的系统检索功能，都会有一个「高级搜索」的功能。需要在另外的界面里展开，进行二次搜索之类的。 GitHub 有没有类似的呢？</p><p>答案是肯定的。做为一个为万千工程师提供服务的网站，不仅要有，而且还要技术范儿。</p><p>如果我们自己开发一个类似的应用，会怎样实现呢？</p><p>带着思路，咱们一起来看看，GitHub 是怎样做的。</p><p>这里我们假设正要学习 Spring Cloud，要找一个 Spring Cloud 的 Demo 参考练手。</p><p><strong>1. 明确搜索仓库标题、仓库描述、README</strong></p><p>GitHub 提供了便捷的搜索方式，可以限定只搜索仓库的标题、或者描述、README等。</p><p>以Spring Cloud 为例，一般一个仓库，大概是这样的</p><div> <div style="max-width: 640px; max-height: 360px; background-color: transparent;">  <div data-width="640" data-height="360"><img data-original-src="//upload-images.jianshu.io/upload_images/10878070-e66f413b65f0bc15.jpg" src="//upload-images.jianshu.io/upload_images/10878070-e66f413b65f0bc15.jpg" data-original-width="640" data-original-height="360" data-original-format="image/jpeg" data-original-filesize="30465" style="cursor: zoom-in;" data-image-index="3"  alt="" /></div> </div>  </div><p>其中，红色箭头指的两个地方，分别是仓库的<strong>名称</strong>和描述。咱们可以直接限定关键字只查特定的地方。比如咱们只想查找仓库名称包含 spring cloud 的仓库，可以使用语法</p><p><strong>in:name 关键词</strong></p><div> <div style="max-width: 640px; max-height: 467px; background-color: transparent;">  <div data-width="640" data-height="467"><img data-original-src="//upload-images.jianshu.io/upload_images/10878070-062ba4c8d76825f8.jpg" src="//upload-images.jianshu.io/upload_images/10878070-062ba4c8d76825f8.jpg" data-original-width="640" data-original-height="467" data-original-format="image/jpeg" data-original-filesize="28701" style="cursor: zoom-in;" data-image-index="4"  alt="" /></div> </div>  </div><p>如果想查找描述的内容，可以使用这样的方式：</p><p><strong>in:descripton 关键词</strong></p><div> <div style="max-width: 600px; max-height: 119px; background-color: transparent;">  <div data-width="600" data-height="119"><img data-original-src="//upload-images.jianshu.io/upload_images/10878070-5d7d0f9795eb6247.jpg" src="//upload-images.jianshu.io/upload_images/10878070-5d7d0f9795eb6247.jpg" data-original-width="600" data-original-height="119" data-original-format="image/jpeg" data-original-filesize="5918" style="cursor: zoom-in;" data-image-index="5"  alt="" /></div> </div>  </div><p>这里就是搜索上面项目描述的内容。</p><p>一般项目，都会有个README文件，如果要查该文件包含特定关键词的话，我想你猜到了</p><p><strong>in:readme 关键词</strong></p><p><strong>2. 明确搜索 star、fork 数大于多少的</strong></p><p>一个项目 star 数的多少，一般代表该项目有受欢迎程度。虽然现在也有垃圾项目刷 star ，但毕竟是少数， star 依然是个不错的衡量标准。</p><p><strong>stars:&gt; 数字 关键字。</strong></p><p>比如咱们要找 star 数大于 3000 的Spring Cloud 仓库，就可以这样</p><p><strong>stars:&gt;3000 spring cloud</strong></p><div> <div style="max-width: 600px; max-height: 139px; background-color: transparent;">  <div data-width="600" data-height="139"><img data-original-src="//upload-images.jianshu.io/upload_images/10878070-71d39c0541af4168.jpg" src="//upload-images.jianshu.io/upload_images/10878070-71d39c0541af4168.jpg" data-original-width="600" data-original-height="139" data-original-format="image/jpeg" data-original-filesize="8766" style="cursor: zoom-in;" data-image-index="6"  alt="" /></div> </div>  </div><p>如果不加 &gt;= 的话，是要精确找 star 数等于具体数字的，这个一般有点困难。</p><p>如果要找在指定数字区间的话，使用</p><p><strong>stars: 10..20 关键词</strong></p><p>fork 数同理，将上面的 stars 换成<strong>fork</strong>，其它语法相同</p><div> <div style="max-width: 600px; max-height: 162px; background-color: transparent;">  <div data-width="600" data-height="162"><img data-original-src="//upload-images.jianshu.io/upload_images/10878070-4ab3448140cb017a.jpg" src="//upload-images.jianshu.io/upload_images/10878070-4ab3448140cb017a.jpg" data-original-width="600" data-original-height="162" data-original-format="image/jpeg" data-original-filesize="10767" style="cursor: zoom-in;" data-image-index="7"  alt="" /></div> </div>  </div><p><strong>3. 明确搜索仓库大小的</strong></p><p>比如你只想看个简单的 Demo，不想找特别复杂的且占用磁盘空间较多的，可以在搜索的时候直接限定仓库的<strong>size</strong>。</p><p>使用方式：</p><p><strong>size:&gt;=5000 关键词</strong></p><p>这里注意下，这个数字代表K, 5000代表着5M。</p><p><strong>4. 明确仓库是否还在更新维护</strong></p><p>我们在确认是否要使用一些开源产品，框架的时候，是否继续维护是很重要的一点。如果已经过时没人维护的东西，踩了坑就不好办了。而在 GitHub 上找项目的时候，不再需要每个都点到项目里看看最近 push 的时间，直接在搜索框即可完成。</p><p>元旦刚过，比如咱们要找临近年底依然在勤快更新的项目，就可以直接指定更新时间在哪个时间前或后的</p><p>通过这样一条搜索<strong>pushed:&gt;2019-01-03 spring cloud</strong></p><p>咱们就找到了1月3号之后，还在更新的项目。</p><div> <div style="max-width: 640px; max-height: 418px; background-color: transparent;">  <div data-width="640" data-height="418"><img data-original-src="//upload-images.jianshu.io/upload_images/10878070-b60086ff095cae43.jpg" src="//upload-images.jianshu.io/upload_images/10878070-b60086ff095cae43.jpg" data-original-width="640" data-original-height="418" data-original-format="image/jpeg" data-original-filesize="31954" style="cursor: zoom-in;" data-image-index="8"  alt="" /></div> </div>  </div><p>你是想找指定时间之前或之后创建的仓库也是可以的，把<strong>pushed</strong>改成<strong>created</strong>就行。</p><p><strong>5. 明确搜索仓库的 LICENSE</strong></p><p>咱们经常使用开源软件，一定都知道，开源软件也是分不同的「门派」不同的<strong>LICENSE</strong>。开源不等于一切免费，不同的许可证要求也大不相同。 2018年就出现了 Facebook 修改 React 的许可协议导致各个公司纷纷修改自己的代码，寻找替换的框架。</p><p>例如咱们要找协议是最为宽松的 Apache License 2 的代码，可以这样</p><p><strong>license:apache-2.0 spring cloud</strong></p><div> <div style="max-width: 640px; max-height: 335px; background-color: transparent;">  <div data-width="640" data-height="335"><img data-original-src="//upload-images.jianshu.io/upload_images/10878070-2eb289f03eec638e.jpg" src="//upload-images.jianshu.io/upload_images/10878070-2eb289f03eec638e.jpg" data-original-width="640" data-original-height="335" data-original-format="image/jpeg" data-original-filesize="22091" style="cursor: zoom-in;" data-image-index="9"  alt="" /></div> </div>  </div><p>其它协议就把 apache-2.0 替换一下即可，比如换成<strong>mit</strong>之类的。</p><p><strong>6. 明确搜索仓库的语言</strong></p><p>比如咱们就找 Java 的库， 除了像上面在左侧点击选择之外，还可以在搜索中过滤。像这样：</p><p><strong>language:java 关键词</strong></p><p><strong>7.明确搜索某个人或组织的仓库</strong></p><p>比如咱们想在 GitHub 上找一下某个大神是不是提交了新的功能，就可以指定其名称后搜索，例如咱们看下 Josh Long 有没有提交新的 Spring Cloud 的代码，可以这样使用</p><p><strong>user:joshlong</strong></p><div> <div style="max-width: 640px; max-height: 242px; background-color: transparent;">  <div data-width="640" data-height="242"><img data-original-src="//upload-images.jianshu.io/upload_images/10878070-bc570726a3a2a1f9.jpg" src="//upload-images.jianshu.io/upload_images/10878070-bc570726a3a2a1f9.jpg" data-original-width="640" data-original-height="242" data-original-format="image/jpeg" data-original-filesize="17849" style="cursor: zoom-in;" data-image-index="10"  alt="" /></div> </div>  </div><p>组合使用一下，把 Java 项目过滤出来，多个查询之间「空格」分隔即可。</p><p><strong>user:joshlong language:java</strong></p><div> <div style="max-width: 600px; max-height: 193px; background-color: transparent;">  <div data-width="600" data-height="193"><img data-original-src="//upload-images.jianshu.io/upload_images/10878070-48682801c4e8057b.jpg" src="//upload-images.jianshu.io/upload_images/10878070-48682801c4e8057b.jpg" data-original-width="600" data-original-height="193" data-original-format="image/jpeg" data-original-filesize="11456" style="cursor: zoom-in;" data-image-index="11"  alt="" /></div> </div>  </div><p>找某个组织的代码话，可以这样：</p><p><strong>org:spring-cloud</strong></p><p>就可以列出具体org 的仓库。</p><div> <div style="max-width: 640px; max-height: 341px; background-color: transparent;">  <div data-width="640" data-height="341"><img data-original-src="//upload-images.jianshu.io/upload_images/10878070-bc3ea0bc12189be0.jpg" src="//upload-images.jianshu.io/upload_images/10878070-bc3ea0bc12189be0.jpg" data-original-width="640" data-original-height="341" data-original-format="image/jpeg" data-original-filesize="21665" style="cursor: zoom-in;" data-image-index="12"  alt="" /></div> </div>  </div></article></div><br /><br />作者：西安北大青鸟<br />链接：https://www.jianshu.com/p/74ae16db62af<br />来源：简书<br />著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。</div><img src ="http://www.blogjava.net/waterjava/aggbug/434976.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2019-12-20 16:49 <a href="http://www.blogjava.net/waterjava/archive/2019/12/20/434976.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>github新手使用指南</title><link>http://www.blogjava.net/waterjava/archive/2019/12/20/434975.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Fri, 20 Dec 2019 07:30:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2019/12/20/434975.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/434975.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2019/12/20/434975.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/434975.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/434975.html</trackback:ping><description><![CDATA[<div id="content_views">                                             <p style="background-color:#ffffff;">https://blog.csdn.net/Hanani_Jia/article/details/77950594源博客地址<br /></p><p style="background-color:#ffffff;"><span style="font-family:'宋体';">首先，我先对</span>GitHub来一个简单的介绍，GitHub有一个很强大的功能就是，你在服务器上边可以创建一个库（稍后会介绍怎么创建），写代码是一件很重的任务，尤其是很多人完成一个很大的项目的时候，就十分的复杂，一群人一起来写某个项目，大家完成的时间，完成的进度都是不相同的，你写一点我写一点，甚至可能你今天写的出现了错误，影响到了我昨天写的代码，最后怎么才能将大家的代码轻松的汇总起来，又怎么在汇总所有人的代码之后发现错误等等一系列问题。这样我们就用到了GitHub这个软件。我们在GitHub服务器上有一个主仓库，这里用来储存你的所有代码，如果不付费的话是所有人都可以看的，如果你不想让别人看到你的代码，可以选择付费仓库。我们创建了主仓库之后，就可以在电脑上创建分支，之后你就可以在电脑上完成自己的代码，写完之后直接同步在电脑的分支，当你认为可以上传的自己的主仓库时，就可以申请更新，当通过审核的时候，你代码就出现在了自己的主仓库中，这样全世界的程序员都可以查看你的代码。全世界现在已经有300万的注册用户，甚至还有一些相当知名的开源项目也在其中公布代码。在GitHub上你可以看到很多计算机领域的精英所分享的自己的代码。这是GitHub的两个主要优点，适合团队协作，以及下载其他优秀者的代码。</p><p style="background-color:#ffffff;">&nbsp;</p><p style="background-color:#ffffff;">&nbsp;<img src="https://img-blog.csdn.net/20170912221812324?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSGFuYW5pX0ppYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></p><p style="background-color:#ffffff;"><span style="font-family:'宋体';">今天，</span>GitHub已是：一个拥有143万开发者的社区。其中不乏Linux发明者<a href="https://github.com/torvalds" rel="nofollow">Torvalds</a><span style="font-family:'宋体';">这样的顶级黑客，以及</span>Rails创始人<a href="https://github.com/dhh" rel="nofollow">DHH</a><span style="font-family:'宋体';">这样的年轻极客。</span></p><p style="background-color:#ffffff;">&#183;&nbsp;<span style="font-family:'宋体';">这个星球上最流行的开源托管服务。目前已托管</span>431万git项目，不仅越来越多知名开源项目迁入GitHub，比如Ruby on Rails、jQuery、Ruby、Erlang/OTP；近三年流行的开源库往往在GitHub首发，例如：<a href="https://github.com/twitter/bootstrap" rel="nofollow">BootStrap</a><span style="font-family:'宋体';">、</span><a href="https://github.com/joyent/node" rel="nofollow">Node.js</a><span style="font-family:'宋体';">、</span><a href="https://github.com/jashkenas/coffee-script" rel="nofollow">CoffeScript</a><span style="font-family:'宋体';">等。</span>alexa全球排名414的网站。<img src="https://img-blog.csdn.net/20170912221840100?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSGFuYW5pX0ppYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></p><p style="background-color:#ffffff;">&nbsp;</p><p style="background-color:#ffffff;">&nbsp;</p><p style="background-color:#ffffff;"><a href="https://github.com/" rel="nofollow"><span style="color:#0000ff;">https://github.com/</span></a>&nbsp;<span style="font-family:'宋体';">这是</span>GitHub的官方网站，在官网上可以注册属于自己的GitHub账号，网上是全英文的，对于英语不好的同学建议使用谷歌浏览器，谷歌浏览器可以翻译网页变为中文使用起来十分方便。</p><p style="background-color:#ffffff;">&nbsp;<img src="https://img-blog.csdn.net/20170912221912992?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSGFuYW5pX0ppYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></p><p style="background-color:#ffffff;"><span style="font-family:'宋体';">通过简单的步骤之后你就会有一个属于自己的</span>GitHub账号。再简单注册完成之后会需要验证你所输入的邮箱才能正常使用你的GitHub。</p><p style="background-color:#ffffff;">&nbsp;<span style="font-family:'宋体';">在注册完成之后，完成一些简单的设置之后，你需要创建一个属于自己的库</span></p><p style="background-color:#ffffff;">&nbsp;<img src="https://img-blog.csdn.net/20170912221942144?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSGFuYW5pX0ppYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></p><p style="background-color:#ffffff;"><span style="font-family:'宋体';">在登陆自己的</span>GitHub账号之后，在网页右上角的小加号是用来创建自己的库的按钮，之后的步骤将网页翻译成中文之后，按提示进行创建自己的库即可。</p><p style="background-color:#ffffff;">&nbsp;<img src="https://img-blog.csdn.net/20170912222027087?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSGFuYW5pX0ppYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></p><p style="background-color:#ffffff;">第一个框是自己为自己的库起一个名字，第二个框是自己对库的一个简单介绍</p><p style="background-color:#ffffff;"><span style="font-family:'宋体';">在创建完成自己的库之后，下面就要让自己的电脑克隆一个自己所创建的库，方面自己电脑上的代码同步到</span>GitHub你所创建的库当中。</p><p style="background-color:#ffffff;">&nbsp;&nbsp;<span style="font-family:'宋体';">为了实现，就需要安装一个软件，</span>Git Bash。</p><p style="background-color:#ffffff;">&nbsp;<img src="https://img-blog.csdn.net/20170912222056079?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSGFuYW5pX0ppYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></p><p style="background-color:#ffffff;">下面我就介绍一下这个软件的安装，以及简单的配置。</p><p style="background-color:#ffffff;">git-scm.com&nbsp;<span style="font-family:'宋体';">首先进入</span>GitHub官网，下载适合自己电脑的版本</p><p style="background-color:#ffffff;">&nbsp;<img src="https://img-blog.csdn.net/20170912222324265?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSGFuYW5pX0ppYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></p><p style="background-color:#ffffff;">下载完安装包之后运行</p><p style="background-color:#ffffff;">&nbsp;</p><p style="background-color:#ffffff;">&nbsp;</p><p style="background-color:#ffffff;">&nbsp;</p><p style="background-color:#ffffff;">在安装过程中直接默认选项即可。</p><p style="background-color:#ffffff;"><img src="https://img-blog.csdn.net/20170912222449511?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSGFuYW5pX0ppYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /><img src="https://img-blog.csdn.net/20170912222452548?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSGFuYW5pX0ppYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /><img src="https://img-blog.csdn.net/20170912222457428?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSGFuYW5pX0ppYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /><br /></p><p style="background-color:#ffffff;">&nbsp;<span style="font-family:'宋体';">在对</span>git bash进行配置的时候大多数新手都是一头雾水，下面我对配置的每一步就会有详细的记录。代码我也是从网上和学长那边要来的。</p><p style="background-color:#ffffff;">&nbsp;<img src="https://img-blog.csdn.net/20170912222542899?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSGFuYW5pX0ppYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></p><p style="background-color:#ffffff;">我第一次打开软件后看到这个界面也是一脸懵逼的，然后通过查阅了各种各样的资料之后才有了一些思路。</p><p style="background-color:#ffffff;">&nbsp;<span style="font-family:'宋体';">首先要在本地创建一个</span><span style="color:#333333;">ssh key</span><span style="color:#333333;">&nbsp;<span style="font-family:'宋体';">这个的目的就是你现在需要在你电脑上获得一个密匙，就是咱们平时的验证码一样的东西，获取之后，在你的</span>GitHub账号里边输入之后，你的电脑就和你的GitHub账号联系在一起了，这样以后就可以十分方便的通过Git bash 随时上传你的代码。下边介绍一下如果获得这个钥匙，又是如何输入到你的GitHub里边的呢。</span></p><p style="background-color:#ffffff;"><span style="color:#333333;">&nbsp;&nbsp;<img src="https://img-blog.csdn.net/20170912222619470?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSGFuYW5pX0ppYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></span></p><p style="background-color:#ffffff;"><span style="color:#333333;"><span style="font-family:'宋体';">很多人第一次打开这个</span>GitHub的时候一脸懵逼，认为这是什么。对于一个新手来说看到这个是没有任何思路，没有任何想法的。</span></p><p style="background-color:#ffffff;"><img src="https://img-blog.csdn.net/20170912222646184?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSGFuYW5pX0ppYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></p><p style="background-color:#ffffff;"><span style="color:#333333;"><span style="font-family:'宋体';">这一栏</span>&nbsp;<span style="font-family:'宋体';">开始是你的计算机的名字在我这里就是</span>Hanani @后边的内容是你的计算机型号，很多时候有的人打开之后@后边是乱码，这个时候也不要在意，因为有些电脑型号是中文的，可能在显示的时候出现了问题，不影响你后期的操作。</span></p><p style="background-color:#ffffff;"><span style="color:#333333;">&nbsp;&nbsp;<span style="font-family:'宋体';">接下来，就要开始获取属于你自己的密匙。在</span>git bash中所有功能都是通过简单的一些代码来实现的。获取密匙的时候需要输入</span></p><p style="background:#fbfbfb;">$ ssh<span style="color:#666600;">-</span>keygen<span style="color:#666600;"> -</span>t rsa<span style="color:#666600;"> -</span>C&nbsp;<span style="color:#008800;">"your_email@youremail.com"</span></p><p style="background-color:#ffffff;"><span style="color:#333333;"><span style="font-family:'宋体';">需要输入这个代码，引号内需要改成你在注册</span>GitHub的时候绑定的邮箱账号。之后会有一些简单的让你确认的操作，之后让你会提示操作路径、密码等等，一般情况下就直接按回车一路过就可以。</span></p><p style="background-color:#ffffff;">&nbsp;<img src="https://img-blog.csdn.net/20170912222716512?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSGFuYW5pX0ppYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></p><p style="background-color:#ffffff;"><span style="color:#333333;"><span style="font-family:'宋体';">如果之后你出现了这个界面之后，就说明你的密匙已经成功创建了。现在你就需要去他刚刚显示的存储位置打开它，把其中的内容复制出来。</span></span></p><p style="background-color:#ffffff;"><br /></p><p style="background-color:#ffffff;">&nbsp;<img src="https://img-blog.csdn.net/20170912222854902?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSGFuYW5pX0ppYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></p><p style="background-color:#ffffff;"><span style="color:#333333;"><span style="font-family:'宋体';">在</span>.ssh这个文件夹中</span></p><p style="background-color:#ffffff;"><img src="https://img-blog.csdn.net/20170912222924652?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSGFuYW5pX0ppYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></p><p style="background-color:#ffffff;"><span style="color:#333333;"><span style="font-family:'宋体';">之后你会看到这些内容，有的人会在</span>id_rsa后边带有一个pub，之前看网上教程需要找到带pub的文件，因为我在生成后没有带.pub的文件，怀着忐忑的心打开id_rsa后发现这里边的密匙也是可以使用的。打开id_rsa的时候需要用记事本的方式打开。</span></p><p style="background-color:#ffffff;"><span style="color:#333333;">ssh-rsa   AAAAB3NzaC1yc2EAAAADAQABAAABAQDIskXqZF3SSFtACK6zoNGJabikTBC3kig6+4j4dCq1tswhA9YkuJCi0WpRmGYWBQ67dyT2or7RedFZlULLZN3nL6AWlo5V2jRXw4WQxCon2rU1p122wmiTzqYOfsykjwullWV4bYcZU4n77A4/9WwlSqZCpEbcdwV8IMkvwfJUInSWqTvmYMcKTWu8yad5DZ2v7LBWfgsL/Tfx7aEB8UjDNJ6SPw30Yijy+62YrftYGgbuwoiL9hDNGO2LfjgOkglHTBJaZe31uQLLWc5uCzd+7Dgh7RaKMmeuz2Uv7yqm/IEU9jH8cPMR9YRPIhmzg38G2s9ILn27QqW9j1hrFY1V  15229020556@163.com</span></p><p style="background-color:#ffffff;"><span style="color:#333333;"><span style="font-family:'宋体';">这就是我所获取的密匙，打开之后很长的一段，不要惊讶，没有问题，这就是你所需要的密匙。</span></span></p><p style="background-color:#ffffff;"><span style="color:#333333;">&nbsp;<span style="font-family:'宋体';">现在你就需要登录到你的</span>GitHub上边添加这个密匙，</span></p><p style="background-color:#ffffff;"><span style="color:#333333;">&nbsp;<img src="https://img-blog.csdn.net/20170912223259577?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSGFuYW5pX0ppYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></span></p><p style="background-color:#ffffff;">&nbsp;</p><p style="background-color:#ffffff;"><span style="color:#333333;"><span style="font-family:'宋体';">打开你</span>GitHub的设置界面，找到SSH and GPG keys这个选项之后，在网页右上角有一个添加新的SSH keys 点击</span></p><p style="background-color:#ffffff;">&nbsp;<img src="https://img-blog.csdn.net/20170912223414185?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSGFuYW5pX0ppYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></p><p style="background-color:#ffffff;"><span style="font-family:'宋体';">这里的</span>title 是让你给你的密匙起一个名字，根据个人喜好，什么名字都可以，然后把你在刚刚文件中复制的密匙，填写在下边的大框里。保存即可。</p><p style="background-color:#ffffff;"><span style="font-family:'宋体';">之后你就可以回到你的</span>Git bash上边了</p><p style="background-color:#ffffff;"><img src="https://img-blog.csdn.net/20170912223448604?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSGFuYW5pX0ppYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></p><p style="background-color:#ffffff;"><span style="font-family:'宋体';">然后输入上边的代码，来检查是否成功绑定。第一次绑定的时候输入上边的代码之后会提示是否</span>continue，在输入yes后如果出现了<span style="color:#333333;"><span style="font-family:'宋体';">：</span>You've successfully authenticated, but GitHub does not provide shell access 。</span><span style="color:#333333;"><span style="font-family:'宋体';">那就说明，已经成功连上了</span>GitHub。接下来还需要简单的设置一些东西。</span></p><p style="background-color:#ffffff;"><img src="https://img-blog.csdn.net/20170912223508890?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSGFuYW5pX0ppYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></p><p style="background-color:#ffffff;"><span style="color:#333333;"><span style="font-family:'宋体';">输入上边的代码，</span>name最好和GitHub上边的一样，email是一定要是注册GitHub的那个邮箱地址</span></p><p style="background-color:#ffffff;"><span style="color:#333333;"><span style="font-family:'宋体';">这两个的顺序可以颠倒，没有固定的顺序。</span></span></p><p style="background-color:#ffffff;"><span style="color:#333333;">&nbsp;<span style="font-family:'宋体';">下面就要将你的库克隆下来到本地电脑中，方便以后进行上传代码。</span></span></p><p style="background-color:#ffffff;">&nbsp;<img src="https://img-blog.csdn.net/20170912223529291?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSGFuYW5pX0ppYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></p><p style="background-color:#ffffff;"><span style="font-family:'宋体';">在库创建完成之后</span>&nbsp;<span style="font-family:'宋体';">会有一个网址出现在网页中。</span></p><p style="background-color:#ffffff;">&nbsp;</p><p style="background-color:#ffffff;"><span style="font-family:'宋体';">个人习惯将自己的文件储存在</span>d盘之中，所以你先需要将git bash定位在d盘中</p><p style="background-color:#ffffff;">&nbsp;<img src="https://img-blog.csdn.net/20170912223554111?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSGFuYW5pX0ppYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></p><p style="background-color:#ffffff;"><span style="font-family:'宋体';">在</span>git bash中输入 cd /D 注意盘名字一定要是大写。如不输入这个语句 不给git bash定位的话，默认的本地文件位置是在c盘中。</p><p style="background-color:#ffffff;"><img src="https://img-blog.csdn.net/20170912223631847?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSGFuYW5pX0ppYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></p><p style="background-color:#ffffff;"><span style="font-family:'宋体';">输入之后会出现</span>/D说明定位成功。</p><p style="background-color:#ffffff;">之后输入</p><p style="background-color:#ffffff;"><img src="https://img-blog.csdn.net/20170912223649948?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSGFuYW5pX0ppYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></p><p style="background-color:#ffffff;">git clone后边的网址就是你创建库成功之后的网址</p><p style="background-color:#ffffff;"><img src="https://img-blog.csdn.net/20170912223814369?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSGFuYW5pX0ppYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /><br /></p><p style="background-color:#ffffff;"><span style="font-family:'宋体';">之后打开我所定位的</span>D盘</p><p style="background-color:#ffffff;">&nbsp;<img src="https://img-blog.csdn.net/20170912223836041?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSGFuYW5pX0ppYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></p><p style="background-color:#ffffff;"><span style="font-family:'宋体';">可以看到，</span>D盘中已经有以我的库名所创建的文件夹了。</p><p style="background-color:#ffffff;"><img src="https://img-blog.csdn.net/20170912223858121?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSGFuYW5pX0ppYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /><br /></p><p style="background-color:#ffffff;">打开这个文件夹，然后在其中创建一个任意格式，任意名称的文件。</p><p style="background-color:#ffffff;">&nbsp;<img src="https://img-blog.csdn.net/20170912223925570?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSGFuYW5pX0ppYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></p><p style="background-color:#ffffff;"><span style="font-family:'宋体';">之后重新定位</span>git 把书 的位置，定位在你库的文件夹。</p><p style="background-color:#ffffff;"><img src="https://img-blog.csdn.net/20170912223955720?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSGFuYW5pX0ppYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /><br /></p><p style="background-color:#ffffff;"><span style="font-family:'宋体';">之后输入</span>ls语句 ls的作用是查看你目前所定位的文件夹中的文件，现在可以看出来，我刚刚所创建的test文件已经出现了。</p><p style="background-color:#ffffff;"><img src="https://img-blog.csdn.net/20170912224022234?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSGFuYW5pX0ppYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /><br /></p><p style="background-color:#ffffff;"><span style="font-family:'宋体';">然后输入</span>&nbsp;git add test.txt</p><p style="background-color:#ffffff;"><span style="font-family:'宋体';">之后输入然后</span>git commit -m "cc" &nbsp;引号内的内容可以随意改动，这个语句的意思是 给你刚刚上传的文件一个备注，方便查找记忆而已</p><p style="background-color:#ffffff;"><img src="https://img-blog.csdn.net/20170912224115485?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSGFuYW5pX0ppYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /><br /></p><p style="background-color:#ffffff;"><span style="font-family:'宋体';">输入之后出现以上情况，然后在输入</span>git push origin master 之后会出现一个</p><p style="background-color:#ffffff;">&nbsp;</p><p style="background-color:#ffffff;">&nbsp;<img src="https://img-blog.csdn.net/20170912224136180?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSGFuYW5pX0ppYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></p><p style="background-color:#ffffff;"><span style="font-family:'宋体';">界面，在这里登陆你之前注册的</span>GitHub账号之后点击login。</p><p style="background-color:#ffffff;">&nbsp;<img src="https://img-blog.csdn.net/20170912224158201?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSGFuYW5pX0ppYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></p><p style="background-color:#ffffff;"><span style="font-family:'宋体';">如果之后出现这种情况的话，就是登陆失败了，这时候你就需要输入你</span>GitHub的账号名称</p><p style="background-color:#ffffff;"><img src="https://img-blog.csdn.net/20170912224220863?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSGFuYW5pX0ppYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></p><p style="background-color:#ffffff;"><span style="font-family:'宋体';">输入之后会出现这个界面，然后再次输入你的</span>GitHub密码。</p><p style="background-color:#ffffff;"><img src="https://img-blog.csdn.net/20170912224246169?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSGFuYW5pX0ppYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /><br /></p><p style="background-color:#ffffff;">出现类似界面，你就可以欢呼了，代表你成功了。</p><p style="background-color:#ffffff;"><span style="font-family:'宋体';">现在打开你的</span>GitHub网站，找到你创建的库</p><p style="background-color:#ffffff;">&nbsp;<img src="https://img-blog.csdn.net/20170912224315698?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSGFuYW5pX0ppYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></p><p style="background-color:#ffffff;">发现今天的格子已经绿了，说明你已经上传了你刚刚所创建的文件。</p><p style="background-color:#ffffff;"><span style="font-family:'宋体';">再之后，你只需要将你的代码，放到库的对应的文件夹中，然后使用 先CD到你库里面，再</span>git add 、git commit -m " &nbsp;&nbsp;" 、<span style="font-family:'宋体';">最后</span>git&nbsp;push&nbsp;origin&nbsp;master，将你的代码提交就可以了。</p><p style="background-color:#ffffff;">&nbsp;同样我感觉网页版的github更适合新手小白，https://blog.csdn.net/hanani_jia/article/details/79855429 这是我写的一篇网页版github的简单操作，需要的可以看一下。</p>                                    </div><img src ="http://www.blogjava.net/waterjava/aggbug/434975.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2019-12-20 15:30 <a href="http://www.blogjava.net/waterjava/archive/2019/12/20/434975.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TypeError: Cannot read property 'address' of undefined</title><link>http://www.blogjava.net/waterjava/archive/2019/12/18/434973.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Wed, 18 Dec 2019 11:27:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2019/12/18/434973.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/434973.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2019/12/18/434973.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/434973.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/434973.html</trackback:ping><description><![CDATA[&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; if(!deployed.address) {<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ^<br /><br /><div>TypeError: Cannot read property 'address' of undefined</div><div></div><div>解决办法：调整gas的值就好了。</div><img src ="http://www.blogjava.net/waterjava/aggbug/434973.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2019-12-18 19:27 <a href="http://www.blogjava.net/waterjava/archive/2019/12/18/434973.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>以太坊上最多存放多少字节?成本如何?</title><link>http://www.blogjava.net/waterjava/archive/2019/12/16/434966.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Mon, 16 Dec 2019 01:28:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2019/12/16/434966.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/434966.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2019/12/16/434966.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/434966.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/434966.html</trackback:ping><description><![CDATA[http://www.360doc.com/content/18/1014/17/16619343_794677023.shtml<img src ="http://www.blogjava.net/waterjava/aggbug/434966.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2019-12-16 09:28 <a href="http://www.blogjava.net/waterjava/archive/2019/12/16/434966.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>网络在线工具</title><link>http://www.blogjava.net/waterjava/archive/2019/12/16/434965.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Mon, 16 Dec 2019 01:16:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2019/12/16/434965.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/434965.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2019/12/16/434965.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/434965.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/434965.html</trackback:ping><description><![CDATA[https://www.bejson.com/<img src ="http://www.blogjava.net/waterjava/aggbug/434965.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2019-12-16 09:16 <a href="http://www.blogjava.net/waterjava/archive/2019/12/16/434965.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>以太坊区块链的区块（Block）结构</title><link>http://www.blogjava.net/waterjava/archive/2019/12/16/434964.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Mon, 16 Dec 2019 00:40:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2019/12/16/434964.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/434964.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2019/12/16/434964.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/434964.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/434964.html</trackback:ping><description><![CDATA[https://blog.csdn.net/luoye4321/article/details/82531212<img src ="http://www.blogjava.net/waterjava/aggbug/434964.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2019-12-16 08:40 <a href="http://www.blogjava.net/waterjava/archive/2019/12/16/434964.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>以太坊·将数据写入到区块链中</title><link>http://www.blogjava.net/waterjava/archive/2019/12/13/434961.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Fri, 13 Dec 2019 10:16:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2019/12/13/434961.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/434961.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2019/12/13/434961.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/434961.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/434961.html</trackback:ping><description><![CDATA[https://blog.csdn.net/weixin_34055787/article/details/89733910<img src ="http://www.blogjava.net/waterjava/aggbug/434961.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2019-12-13 18:16 <a href="http://www.blogjava.net/waterjava/archive/2019/12/13/434961.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Visual Studio 2015下载</title><link>http://www.blogjava.net/waterjava/archive/2019/12/01/434940.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Sun, 01 Dec 2019 04:30:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2019/12/01/434940.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/434940.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2019/12/01/434940.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/434940.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/434940.html</trackback:ping><description><![CDATA[版权声明：本文为博主原创文章，遵循 CC 4.0 BY-SA 版权协议，转载请附上原文出处链接和本声明。<br />本文链接：https://blog.csdn.net/yezishuang/article/details/91489354<br /><br />1.Visual Studio 2015 专业版和企业版下载<br /><br />https://www.cnblogs.com/bwlluck/p/5514424.html<br /><br />https://www.cnblogs.com/wgscd/p/4671374.html<br /><br />&nbsp;<br /><br />2.Visual Studio 2013<br /><br />https://www.cnblogs.com/abeam/p/6781006.html<br /><br />&nbsp;<br /><br />3.Visual Studio 2017<br /><br />https://www.cnblogs.com/jian-pan/p/6942635.html<br /><br />Microsoft Visual Studio Enterprise 2017 企业版<br />KEY：NJVYC-BMHX2-G77MM-4XJMR-6Q8QF<br />Microsoft Visual Studio Professional 2017 专业版<br />KEY：KBJFW-NXHK6-W4WJM-CRMQB-G3CDH<br /><br />&nbsp;<br /><br />4.Visual Studio 2019<br /><br />https://www.cnblogs.com/zengxiangzhan/p/vs2015.html<br /><br />https://visualstudio.microsoft.com/zh-hans/downloads/ （下载地址）<br /><br />&nbsp;Visual Studio 2019 Enterprise<br />BF8Y8-GN2QH-T84XB-QVY3B-RC4DF<br /><br />Visual Studio 2019 Professional<br />NYWVH-HT4XC-R2WYW-9Y3CM-X4V3Y<br /><img src ="http://www.blogjava.net/waterjava/aggbug/434940.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2019-12-01 12:30 <a href="http://www.blogjava.net/waterjava/archive/2019/12/01/434940.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Remix IDE快速部署你的第一个智能合约</title><link>http://www.blogjava.net/waterjava/archive/2019/11/28/434938.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Thu, 28 Nov 2019 13:01:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2019/11/28/434938.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/434938.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2019/11/28/434938.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/434938.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/434938.html</trackback:ping><description><![CDATA[https://blog.csdn.net/qq_27317475/article/details/80894593<img src ="http://www.blogjava.net/waterjava/aggbug/434938.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2019-11-28 21:01 <a href="http://www.blogjava.net/waterjava/archive/2019/11/28/434938.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>genesis.json的问题</title><link>http://www.blogjava.net/waterjava/archive/2019/11/28/434937.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Thu, 28 Nov 2019 11:15:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2019/11/28/434937.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/434937.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2019/11/28/434937.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/434937.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/434937.html</trackback:ping><description><![CDATA[<div> 以前的genesis.json的文件差不多是这样的：</div><div>&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "config": {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "chainId": 10,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "homesteadBlock": 0,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "eip155Block": 0,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "eip158Block": 0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "alloc"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : {},<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "coinbase"&nbsp;&nbsp; : "0x0000000000000000000000000000000000000000",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "difficulty" : "0x00000002",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "extraData"&nbsp; : "",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "gasLimit"&nbsp;&nbsp; : "0x2fefd8",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "nonce"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : "0x0000000000000042",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "mixhash"&nbsp;&nbsp;&nbsp; : "0x0000000000000000000000000000000000000000000000000000000000000000",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "timestamp"&nbsp; : "0x00"<br />&nbsp;&nbsp;&nbsp; }</div><div>用这个创世块的描述文件初始化时，出现错误：</div><div>Fatal: Failed to write genesis block: unsupported fork ordering: eip150Block not enabled, but eip155Block enabled at 0</div><div>百度吧，没有一个解决办法。</div><div>后来用Puppeth命令创建json文件，并做了修改，如下所示：</div><div><pre style="background-color: #ffffff; color: #000000; font-family: &quot;宋体&quot;; font-size: 9pt;">{<br />  <span style="color:#660e7a;font-weight:bold;">"config"</span>: {<br />    <span style="color:#660e7a;font-weight:bold;">"chainId"</span>: <span style="color:#0000ff;">666</span>,<br />    <span style="color:#660e7a;font-weight:bold;">"homesteadBlock"</span>: <span style="color:#0000ff;">0</span>,<br />    <span style="color:#660e7a;font-weight:bold;">"eip150Block"</span>: <span style="color:#0000ff;">0</span>,<br />    <span style="color:#660e7a;font-weight:bold;">"eip150Hash"</span>: <span style="color:#008000;font-weight:bold;">"0x0000000000000000000000000000000000000000000000000000000000000000"</span>,<br />    <span style="color:#660e7a;font-weight:bold;">"eip155Block"</span>: <span style="color:#0000ff;">0</span>,<br />    <span style="color:#660e7a;font-weight:bold;">"eip158Block"</span>: <span style="color:#0000ff;">0</span>,<br />    <span style="color:#660e7a;font-weight:bold;">"byzantiumBlock"</span>: <span style="color:#0000ff;">0</span>,<br />    <span style="color:#660e7a;font-weight:bold;">"constantinopleBlock"</span>: <span style="color:#0000ff;">0</span>,<br />    <span style="color:#660e7a;font-weight:bold;">"petersburgBlock"</span>: <span style="color:#0000ff;">0</span>,<br />    <span style="color:#660e7a;font-weight:bold;">"istanbulBlock"</span>: <span style="color:#0000ff;">0</span>,<br />    <span style="color:#660e7a;font-weight:bold;">"ethash"</span>: {}<br />  },<br />  <span style="color:#660e7a;font-weight:bold;">"nonce"</span>: <span style="color:#008000;font-weight:bold;">"0x0"</span>,<br />  <span style="color:#660e7a;font-weight:bold;">"timestamp"</span>: <span style="color:#008000;font-weight:bold;">"0x5ddf8f3e"</span>,<br />  <span style="color:#660e7a;font-weight:bold;">"extraData"</span>: <span style="color:#008000;font-weight:bold;">"0x0000000000000000000000000000000000000000000000000000000000000000"</span>,<br />  <span style="color:#660e7a;font-weight:bold;">"gasLimit"</span>: <span style="color:#008000;font-weight:bold;">"0x47b760"</span>,<br />  <span style="color:#660e7a;font-weight:bold;">"difficulty"</span>: <span style="color:#008000;font-weight:bold;">"0x00002"</span>,<br />  <span style="color:#660e7a;font-weight:bold;">"mixHash"</span>: <span style="color:#008000;font-weight:bold;">"0x0000000000000000000000000000000000000000000000000000000000000000"</span>,<br />  <span style="color:#660e7a;font-weight:bold;">"coinbase"</span>: <span style="color:#008000;font-weight:bold;">"0x0000000000000000000000000000000000000000"</span>,<br />  <span style="color:#660e7a;font-weight:bold;">"alloc"</span>: { }<br />  },<br />  <span style="color:#008000;font-weight:bold;">"number"</span>: <span style="color:#008000;font-weight:bold;">"0x0"</span>,<br />  <span style="color:#008000;font-weight:bold;">"gasUsed"</span>: <span style="color:#008000;font-weight:bold;">"0x0"</span>,<br />  <span style="color:#008000;font-weight:bold;">"parentHash"</span>: <span style="color:#008000;font-weight:bold;">"0x0000000000000000000000000000000000000000000000000000000000000000"<br /></span>}<br /><br /><br /><br />初始化：<br />geth --identity "MyEth" --rpc --rpcport "8545" --rpccorsdomain "*" --datadir gethdata --port "30303" --nodiscover --rpcapi "db,eth,net,personal,web3" --networkid 1999 init genesis.json<br /></pre></div><div>控制台：</div><div>geth --identity "MyEth" --rpc --rpcport "8545" --rpccorsdomain "*" --datadir gethdata --port "30303" --nodiscover --rpcapi "db,eth,net,personal,web3" --networkid 1999 --dev.period 1 console</div><div>建立用户：</div><div>&gt;personal.newAccount();</div><div>挖矿：</div><div>miner.start();</div><div></div><div>终于顺利挖到了人生第一桶金。</div><div></div><img src ="http://www.blogjava.net/waterjava/aggbug/434937.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2019-11-28 19:15 <a href="http://www.blogjava.net/waterjava/archive/2019/11/28/434937.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>windows使用geth搭建以太坊私链 </title><link>http://www.blogjava.net/waterjava/archive/2019/11/28/434935.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Thu, 28 Nov 2019 09:08:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2019/11/28/434935.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/434935.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2019/11/28/434935.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/434935.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/434935.html</trackback:ping><description><![CDATA[<h2>第一步 安装geth</h2> <p>下载地址：<a href="https://ethereum.github.io/go-ethereum/downloads/" target="_blank">https://ethereum.github.io/go-ethereum/downloads/</a></p> <p>点击安装勾选development tools</p> <p><img src="https://img.hacpai.com/file/2019/07/1-9a8d1062.png?imageView2/2/w/1280/format/jpg/interlace/1/q/100" alt="1.png" /></p> <h2>第二步 创建您的帐户</h2> <h3>在当前文件夹下创建node1文件夹</h3> <h3>创建一个账户（也称为钱包）</h3> <p>Devnet $ <code>geth --datadir node1/ account new</code><br /> Your new account is locked with a password. Please give a password. Do not forget this password.<br /> Passphrase: 输入你的密码<br /> Repeat passphrase: 确认你的密码<br /> Address: {08a58f09194e403d02a1928a7bf78646cfc260b0}</p> <h2>第三步 geth命令创建您的Genesis文件</h2> <p>生成的文件是用于初始化区块链的文件。第一个块叫做创世块，是根据genesis.json文件中的参数生成的。</p> <p>Geth安装后目录下有很多可执行文件如puppeth或bootnode。你可以在<a href="https://github.com/ethereum/go-ethereum/tree/master/cmd" target="_blank">Geth github</a>上找到完整的列表。<br /> Puppeth可以创建创世区块的json文件。<br /> 开始使用Puppeth：</p> <p>1、win键 + r 进入cmd命令行，进入到安装geth的文件夹执行 puppeth 然后顺序执行下面操作</p> <p>2、Please specify a network name to administer (no spaces, please)<br /> &gt; <code>devnet</code>（这里随便填写一个网络管理名称即可，如有需要后面可以通过--network重新设置）<br /> What would you like to do? (default = stats)<br /> &nbsp;1. Show network stats<br /> &nbsp;2. Configure new genesis<br /> &nbsp;3. Track new remote server<br /> &nbsp;4. Deploy network components</p> <p>&gt; <code>2</code>（这里选择2，回车，配置新的创世区块）</p> <p>3、Which consensus engine to use? (default = clique)<br /> &nbsp;&nbsp; 1. Ethash - proof-of-work<br /> &nbsp;&nbsp; 2. Clique - proof-of-authorit</p> <p>&gt; <code>1</code>（这里选择pow共识机制）</p> <p>4、Which accounts should be pre-funded? (advisable at least one)</p> <p>&gt; <code>0x1234567890123456789012345678901234567890</code>（这个是设置预分配以太坊的账户，建议设置一个有私钥的地址可以后面测试使用，设置好后再按一次回车）</p> <p>5、Specify your chain/network ID if you want an explicit one (default = random)<br /> &gt; <code>666</code>（这里就是链的chainId，可以随意输入也可以不输直接回车默认随机数字）</p> <p>6、What would you like to do? (default = stats)</p> <ol><li>Show network stats</li><li>Manage existing genesis</li><li>Track new remote server</li><li>Deploy network components<br /> &gt; <code>2</code>（管理已拥有的创世块）</li></ol> <p>7、 1. Modify existing fork rules<br /> 2. Export genesis configuration<br /> 3. Remove genesis configuration<br /> &gt; <code>2</code>（选择导出创世配置）</p> <p>8、Which file to save the genesis into? (default = devnet.json)<br /> &gt; <code>./genesis.json</code>（导出的路径及文件名）</p> <p>OK,到这里创世json文件创建完成了</p> <h2>第四步 geth命令初始化节点</h2> <p>现在我们有了这个genesis.json文件，可以初始化创世块了！</p> <p>进入到geth安装文件夹下执行</p> <p><code>geth --datadir node1/ init genesis.json</code></p> <h2>第五步 bootnode命令操作</h2> <p>bootnode唯一的目的是帮助节点发现彼此（记住，以太坊区块链是一个对等网络）</p> <h3>初始化 bootnode</h3> <p><code>bootnode -genkey boot.Key</code></p> <h3>启动bootnode服务</h3> <p><code>bootnode -nodekey boot.key -addr:30310</code></p> <p>随意使用任何您喜欢的端口，但请避免使用主流端口（例如HTTP）。30303用于公共以太坊网络。</p> <h2>第六步 geth命令启动节点</h2> <p><code>geth --datadir .\node1\ --syncmode 'full' --port 30311 --rpc --rpcaddr '127.0.0.1' --rpcport 8501 --rpcapi&nbsp; 'personal,db,eth,net,web3,txpool,miner' --bootnodes 'enode://ca88962dbcc8eb0c7587789866f21db68cdf32ad1ea890fe0d9f8fe010f7e9afe2e6a88d5c9d418be61a10b8a31b1e7c55213bb426dab91596ae36bd7d559333@127.0.0.1:30310' --networkid 666</code></p> <p>参数解释：</p> <p>--syncmode 'full' 有助于防止错误<a href="https://github.com/ethereum/go-ethereum/issues/14945" target="_blank">丢弃错误的传播块</a>。<br /> --port 是node1的端口<br /> --rpcapi 允许RPC调用的模块<br /> --bootnodes 要连接的bootnode<br /> --networkId genesis.json文件中的chainId</p> <h2>第七步 与您的节点进行交互</h2> <p>通过RPC方式</p> <p>$ <code>cd devnet</code><br /> devnet$ <code>geth attach 'http://localhost:8501'</code><br /> Welcome to the Geth JavaScript console!</p> <p>instance: Geth/v1.7.3-stable-4bb3c89d/linux-amd64/go1.9<br /> coinbase: 0x87366ef81db496edd0ea2055ca605e8686eec1e6<br /> at block: 945 (Sat, 10 Feb 2018 21:16:14 CET)<br /> &nbsp;modules: eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0</p> <blockquote> </blockquote> <p>使用Geth控制台</p> <p>&gt;<code>net.version</code><br /> "1515"<br /> &gt; <code>eth.blockNumber</code><br /> 1910<br /> &gt; <code>eth.coinbase</code><br /> "0x87366ef81db496edd0ea2055ca605e8686eec1e6"<br /> &gt; <code>eth.sendTransaction({'from':eth.coinbase, 'to':'0x08a58f09194e403d02a1928a7bf78646cfc260b0', 'value':web3.toWei(3, 'ether')})</code><br /> "0x299a99baa1b39bdee5f02e3c660e19e744f81c2e886b5fc24aa83f92fe100d3f"<br /> &gt;<code>eth.getTransactionReceipt("0x299a99baa1b39bdee5f02e3c660e19e744f81c2e886b5fc24aa83f92fe100d3f")</code><br /> {<br /> &nbsp; blockHash: "0x212fb593980bd42fcaf3f6d1e6db2dd86d3764df8cac2d90408f481ae7830de8",<br /> &nbsp; blockNumber: 2079,<br /> &nbsp; contractAddress: null,<br /> &nbsp; cumulativeGasUsed: 21000,<br /> &nbsp; from: "0x87366ef81db496edd0ea2055ca605e8686eec1e6",<br /> &nbsp; gasUsed: 21000,<br /> &nbsp; logs: [],<br /> &nbsp; logsBloom:  "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",<br /> &nbsp; status: "0x1",<br /> &nbsp; to: "0x08a58f09194e403d02a1928a7bf78646cfc260b0",<br /> &nbsp; transactionHash: "0x299a99baa1b39bdee5f02e3c660e19e744f81c2e886b5fc24aa83f92fe100d3f",<br /> &nbsp; transactionIndex: 0<br /> }<br /> &gt; <code>exit</code>（退出）</p><p><br /></p><p>来自:https://www.haowenbo.com/articles/2019/07/24/1563963176492.html<br /></p><img src ="http://www.blogjava.net/waterjava/aggbug/434935.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2019-11-28 17:08 <a href="http://www.blogjava.net/waterjava/archive/2019/11/28/434935.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>