<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Blockchain on Time Friend</title><link>https://time-friend.com/zh/tags/blockchain/</link><description>Recent content in Blockchain on Time Friend</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Wed, 10 Oct 2018 19:33:33 +0000</lastBuildDate><atom:link href="https://time-friend.com/zh/tags/blockchain/index.xml" rel="self" type="application/rss+xml"/><item><title>使用Eggjs(koa) &amp; web3.js开发你的以太坊Dapp</title><link>https://time-friend.com/zh/archive/develop-ethereum-dapp-with-eggjs-koa-web3js/</link><pubDate>Wed, 10 Oct 2018 19:33:33 +0000</pubDate><guid>https://time-friend.com/zh/archive/develop-ethereum-dapp-with-eggjs-koa-web3js/</guid><description>&lt;h1 id="eggjs"&gt;Eggjs&lt;/h1&gt;
&lt;p&gt;Eggjs 是阿里开源的企业级基于 Koa2 的 Node.js 框架.
eggjs 基本上是开箱即用,奉行『约定优于配置』.在日常开发中,用起来非常顺畅.
而且生态也比较完善,koa2 的插件都可以对接到框架中来.&lt;/p&gt;
&lt;h2 id="eggjs-目录结构"&gt;Egg.js 目录结构&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;egg-project
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── package.json
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── app.js &lt;span style="color:#f92672"&gt;(&lt;/span&gt;可选&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── agent.js &lt;span style="color:#f92672"&gt;(&lt;/span&gt;可选&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── app
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;| ├── router.js
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├── controller
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ | └── home.js
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├── service &lt;span style="color:#f92672"&gt;(&lt;/span&gt;可选&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ | └── user.js
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├── middleware &lt;span style="color:#f92672"&gt;(&lt;/span&gt;可选&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ | └── response_time.js
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├── schedule &lt;span style="color:#f92672"&gt;(&lt;/span&gt;可选&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ | └── my_task.js
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├── public &lt;span style="color:#f92672"&gt;(&lt;/span&gt;可选&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ | └── reset.css
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├── view &lt;span style="color:#f92672"&gt;(&lt;/span&gt;可选&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ | └── home.tpl
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └── extend &lt;span style="color:#f92672"&gt;(&lt;/span&gt;可选&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├── helper.js &lt;span style="color:#f92672"&gt;(&lt;/span&gt;可选&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├── request.js &lt;span style="color:#f92672"&gt;(&lt;/span&gt;可选&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├── response.js &lt;span style="color:#f92672"&gt;(&lt;/span&gt;可选&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├── context.js &lt;span style="color:#f92672"&gt;(&lt;/span&gt;可选&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├── application.js &lt;span style="color:#f92672"&gt;(&lt;/span&gt;可选&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └── agent.js &lt;span style="color:#f92672"&gt;(&lt;/span&gt;可选&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── config
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;| ├── plugin.js
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;| ├── config.default.js
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├── config.prod.js
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;| ├── config.test.js &lt;span style="color:#f92672"&gt;(&lt;/span&gt;可选&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;| ├── config.local.js &lt;span style="color:#f92672"&gt;(&lt;/span&gt;可选&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;| └── config.unittest.js &lt;span style="color:#f92672"&gt;(&lt;/span&gt;可选&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;└── test
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ├── middleware
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; | └── response_time.test.js
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; └── controller
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; └── home.test.js
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如上，由框架约定的目录：&lt;/p&gt;</description></item><item><title>以太坊开发之搭建宠物商店</title><link>https://time-friend.com/zh/archive/ethereum-development-build-pet-shop/</link><pubDate>Sat, 21 Apr 2018 19:33:33 +0000</pubDate><guid>https://time-friend.com/zh/archive/ethereum-development-build-pet-shop/</guid><description>&lt;p&gt;truffle的宠物商店是一个了解以太坊开发的一个很不错的例子.
跟着官方提供的demo与教程,可以完整的感受一下整个流程的开发.&lt;/p&gt;
&lt;h2 id="ganache"&gt;Ganache&lt;/h2&gt;
&lt;p&gt;为了环境需要,并且快速的在本地搭建一个私有链环境.
truffle推出了一个可视化私有链客户端:
&lt;a href="http://truffleframework.com/ganache/"&gt;Ganache下载地址&lt;/a&gt;
下载之后运行,你会看到这样一个界面:
&lt;img src="https://static.alili.tech/images/Jietu20180421-213717.jpg" alt=""&gt;&lt;/p&gt;
&lt;h2 id="初始化你的项目"&gt;初始化你的项目&lt;/h2&gt;
&lt;p&gt;首先我们新建一个目录,并且初始化一下项目&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ mkdir pet-shop
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ cd pet-shop
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ truffle unbox pet-shop
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="项目目录结构"&gt;项目目录结构&lt;/h2&gt;
&lt;p&gt;这里只列出了重要的目录与文件&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;├── bs-config.json
├── contracts //合约目录
│   └── Migrations.sol //合约文件
├── migrations // 部署脚本
│   └── 1_initial_migration.js
├── package-lock.json
├── package.json
├── src // 前端代码目录
├── test // 测试代码目录
└── truffle.js // truffle配置文件
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="编写智能合约"&gt;编写智能合约&lt;/h2&gt;
&lt;p&gt;在contracts/目录中,创建一个Adoption.sol文件
文件内容:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;pragma&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;solidity&lt;/span&gt; &lt;span style="color:#f92672"&gt;^&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;0.4&lt;/span&gt;.&lt;span style="color:#ae81ff"&gt;17&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;contract&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Adoption&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;address&lt;/span&gt;[&lt;span style="color:#ae81ff"&gt;16&lt;/span&gt;] &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;adopters&lt;/span&gt;; &lt;span style="color:#75715e"&gt;// 声明一个地址变量,用于保存领养者地址
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// 领养宠物
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;adopt&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;uint&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;petId&lt;/span&gt;) &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;returns&lt;/span&gt; (&lt;span style="color:#a6e22e"&gt;uint&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;require&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;petId&lt;/span&gt; &lt;span style="color:#f92672"&gt;&amp;gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; &lt;span style="color:#f92672"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;petId&lt;/span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;15&lt;/span&gt;); &lt;span style="color:#75715e"&gt;// 确保宠物id正确,为0到15之间,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// 如果不符合条件就会回滚 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;//msg.sender 为调用这个函数的人的地址
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;adopters&lt;/span&gt;[&lt;span style="color:#a6e22e"&gt;petId&lt;/span&gt;] &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;msg&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;sender&lt;/span&gt;; &lt;span style="color:#75715e"&gt;// 保存调用这地址 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;petId&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// 返回领养者
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;getAdopters&lt;/span&gt;() &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;view&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;returns&lt;/span&gt; (&lt;span style="color:#a6e22e"&gt;address&lt;/span&gt;[&lt;span style="color:#ae81ff"&gt;16&lt;/span&gt;]) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;adopters&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="编译你的智能合约"&gt;编译你的智能合约&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ truffle compile
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;//输出
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Compiling ./contracts/Adoption.sol...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Writing artifacts to ./build/contracts
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这样你就会发现你的项目多了一个build文件夹,
里面存放这里刚刚写好的智能合约编译完成的json文件&lt;/p&gt;</description></item><item><title>以太坊开发之Solidity初学者的编辑器 -- remix-ide</title><link>https://time-friend.com/zh/archive/ethereum-development-solidity-beginner-editor-remix-ide/</link><pubDate>Fri, 20 Apr 2018 19:33:33 +0000</pubDate><guid>https://time-friend.com/zh/archive/ethereum-development-solidity-beginner-editor-remix-ide/</guid><description>&lt;p&gt;在以太坊应用的开发中智能合约的开发是避不开的.
就目前来说,我发现的remix-ide是对新人最有好的开发工具了.
不需要其他任何的环境,就可以直接部署调试.
如果我发现了更加友好的,我会在以后的博客里推荐.&lt;/p&gt;
&lt;h2 id="安装"&gt;安装&lt;/h2&gt;
&lt;p&gt;remix就是一个普通的npm包&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ npm i remix-ide -g
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="启动"&gt;启动&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ remix-ide
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;默认会启动本地8080端口,打开浏览器 &lt;code&gt;http://localhost:8080&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://static.alili.tech/images/localhost_8080_.png" alt=""&gt;&lt;/p&gt;
&lt;h2 id="使用"&gt;使用&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;首先我们要勾选自动编译
&lt;img src="https://static.alili.tech/images/Jietu20180421-180045.jpg" alt=""&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;2. 切换到 Run ,环境选择 javascript VM
&lt;img src="https://static.alili.tech/images/Jietu20180421-180308.jpg" alt=""&gt;&lt;/p&gt;
&lt;h2 id="部署你的程序"&gt;部署你的程序&lt;/h2&gt;
&lt;p&gt;点击create按钮,就可以部署你的智能合约了.
如下图,便是部署了智能合约的样子,因为每次部署都会消耗掉相应的余额.
所以这个用户的余额从刚才的 &lt;code&gt;100&lt;/code&gt;以太币变成了现在的 &lt;code&gt;99.999999999...&lt;/code&gt;
&lt;img src="https://static.alili.tech/images/Jietu20180421-180547.jpg" alt=""&gt;&lt;/p&gt;
&lt;h2 id="调试你的程序"&gt;调试你的程序&lt;/h2&gt;
&lt;p&gt;部署完成之后,我们发现下面出现了一个有函数名称的按钮与输入框.
输入框内可填写该函数的参数.点击一下函数名,便可执行该函数了.
执行结果,会在中间下面的控制台显示.
&lt;img src="https://static.alili.tech/images/Jietu20180421-182023.jpg" alt=""&gt;&lt;/p&gt;
&lt;p&gt;点击一下控制台信息的detail按钮,便可看到函数详细的输出信息&lt;/p&gt;
&lt;p&gt;&lt;img src="https://static.alili.tech/images/Jietu20180421-182131.jpg" alt=""&gt;&lt;/p&gt;</description></item><item><title>以太坊开发之一切从脚手架truffle开始</title><link>https://time-friend.com/zh/archive/ethereum-truffle-setup/</link><pubDate>Thu, 19 Apr 2018 19:33:33 +0000</pubDate><guid>https://time-friend.com/zh/archive/ethereum-truffle-setup/</guid><description>&lt;p&gt;这个礼拜开始学习区块链开发,为了公司区块链项目开始之前有一定的知识储备.
在博客做一下知识复盘.&lt;/p&gt;
&lt;h2 id="truffle是什么"&gt;truffle是什么&lt;/h2&gt;
&lt;p&gt;Truffle是针对基于以太坊的Solidity语言的一套开发框架。本身是基于JavaScript实现的。
虽然是使用我们熟悉的JavaScript实现,
但是truffle主要还只是一个编译与发布&lt;code&gt;智能合约&lt;/code&gt;的一个工具(当然还有其他的功能).&lt;/p&gt;
&lt;h2 id="solidity是什么"&gt;Solidity是什么&lt;/h2&gt;
&lt;p&gt;在区块链应用的开发中,Solidity语言你或许大致的可以理解为编写后台的一种语言. 在专业术语里,这种后台代码叫做 &lt;code&gt;智能合约&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="truffle的主要作用"&gt;truffle的主要作用&lt;/h2&gt;
&lt;p&gt;Truffle在区块链应用的开发中,主要是提供两个重要的功能.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;编译智能合约&lt;/li&gt;
&lt;li&gt;发布智能合约&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="安装"&gt;安装&lt;/h2&gt;
&lt;p&gt;跟普通的npm包一样,用npm直接安装&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 全局安装truffle&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ npm i truffle -g
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="初始化你的项目"&gt;初始化你的项目&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 我们新建一个目录 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ mkdir myproject
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ cd myproject
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;#初始化&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ truffle init
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 执行命令后&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Downloading...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Unpacking...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Setting up...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Unbox successful. Sweet!
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Commands:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# truffle的其他操作 编译,发布,测试&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Compile: truffle compile
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Migrate: truffle migrate
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Test contracts: truffle test
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;完成之后你会看到以下目录&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt; contract/ - 智能合约Solidity代码
 migrations/ - 智能合约发布的脚本
 test/ - 测试文件
 truffle.js - Truffle的配置文件
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;下面是初始化自动生成的Solidity代码,以后一部分开发工作主要就是写这东西.
编译完成之后,再使用前端js调用这些方法.&lt;/p&gt;</description></item></channel></rss>