2018
04-13

以太坊智能合约开发第六篇:truffle开发框架

在前面几篇教程中,我们实现了一个简单的 Hello 合约,并通过 solc 编译器将合约代码编译后,部署在私有链Ganache上。本篇将介绍通过truffle框架来构建自动编译、部署合约代码。

truffle框架

Truffle是基于Solidity语言的一套开发框架,它简化了去中心化应用(Dapp)的构建和管理流程。本身是采用Javascript编写,支持智能合约的编译、部署和测试。
truffle开发框架提供了很多功能,简化了我们的开发、编译、部署与调试过程:

  • 内置了智能合约编译、链接、部署和二进制文件的管理
  • 方便快速开发的合约自动化测试
  • 方便扩展的、脚本化的部署与发布框架
  • 方便的网络管理功能。不论是公有网络还是私有网络
  • 基于ERC190标准,使用EthPM & NPM进行依赖包管理
  • 内置控制台功能。项目构建后,可以直接在命令行调用输出结果,方便了开发调试
  • 可配的构建流程,支持持续集成。
  • 支持外部脚本的执行

接下来,我们将通过truffle框架来构建 Hello 合约的编译、部署过程。

truffle安装

npm install -g truffle

安装好后,查看一下版本信息:

truffle version

本篇示例基于如下版本:

Truffle v4.0.1 (core: 4.0.1)
Solidity v0.4.18 (solc-js)
查看全文 >
2018
04-12

以太坊智能合约开发第五篇:字符串拼接—Solidity

上一篇,我们实现了一个简单的智能合约。用户输入什么字符串,合约就原样返回什么。在文章最后抛出了一个问题:如果我们事先在合约里定义好 Hello 字符串,如何与 name 变量进行字符串拼接?

在智能合约里进行字符串的拼接可不是一件简单的事情。本篇就来介绍智能合约里的字符串拼接。

尝试

我们先用绝大部分语言都通用的连接符 +. 来尝试着修改代码:

//pragma关键字:版本申明。
//用来指示编译器将代码编译成特定版本,以免引起兼容性问题
//此处不支持0.4.0之前的编译器,也不支持0.5.0之后的编译器(条件为 ^)
pragma solidity ^0.4.0;

//contract关键字:合约申明
//和Java、PHP中的class类似
//此处是申明一个名为Hello的合约
contract Hello {

    string str="Hello ";

    //public: 函数访问属性(后续文章为详细阐述)
    //returns (string): 定义返回值类型为string
    function say(string name) public returns (string) {
        return str + name;
    }
}
查看全文 >
2018
04-12

以太坊智能合约开发第四篇:实现Hello World智能合约

绝大部分开发者学习一门语言的时候,都是从输出一个 Hello World 开始。我们也从实现一个 Hello World 合约为切入点,开始进入智能合约的世界吧。

环境准备

安装好 nodenpm。这里对node和npm的安装过程,不做详细介绍。本篇依赖的环境版本:

Node : v8.9.0
Npm: 5.5.1

在你的代码目录里,创建名为 smartcontract 的文件夹,并创建如下两个文件 package.jsonHello.sol

smartcontract
├── Hello.sol
└── package.json

package.json 文件里,添加如下依赖包配置:

{
  "name": "smartcontract",
  "version": "0.0.1",
  "dependencies": {
    "fs": "0.0.1-security",
    "solc": "^0.4.21",
    "web3": "^0.20.0"
  }
}

fs模块用于文件的相关操作
solc模块是编译器
web3模块是以太坊提供的工具包,主要用于与合约的通信

接下来执行 npm install 下载相关的依赖包。

查看全文 >
2018
04-11

以太坊智能合约开发第三篇:安装节点工具Ganache

在正式开始编写智能合约之前,我们需要先安装一个以太坊客户端,也就是我们常说的以太坊节点。上一篇有提到Geth,但是它会消耗很多时间来同步以太坊的所有区块数据,并占用很大的磁盘空间。目前已经有几十G大小,不久将达到上百G。在开发过程中,我们推荐使用以太坊区块链的私有链Ganache来搭建节点。

Ganache

Ganache可以快速启动个人以太坊区块链,并可以使用它来运行测试,执行命令、检查状态,同时控制链条的运行方式。

安装

打开官网 http://truffleframework.com/ganache/ , 并点击 DOWNLOAD 按钮:

查看全文 >
2018
04-11

crontab定时任务详解

启用

    service crond start

基本格式

  #分  时  日  月  周
  * * * * *   command  path
  # 第1列表示分钟(0~59) 每分钟用"*"或者"*/1"表示
  # 第2列表示小时(0~23)
  # 第3列表示日期(1~31)
  # 第4列表示月份(1~12)
  # 第5列表示星期(0~6   0表示星期天)

示例

  #表示每晚的21:30执行命令
  30  21 * * * command
  #表示每月的1号、10号、22号的4:45执行命令
  45  4  1,10,22  * * command
   #表示每天的18:00到23:00之间每隔30分钟执行命令
   0,30  18-23  * * * command
    #表示每周六的23:00执行命令
    0  23  *  *  6   command
    #表示每小时执行命令
    *  */1  *  *  *  command

    #每天晚上23点到次日早上7点之间,每隔1小时执行命令
    *  23-7/1  *  *  *  command
    # 每月4号与每周一到周三的11点执行命令
    0  11  4  *  1-3  command
查看全文 >
2018
04-10

以太坊智能合约开发第二篇:理解以太坊相关概念

很多人都说比特币是区块链1.0,以太坊是区块链2.0。在以太坊平台上,可以开发各种各样的去中心化应用,这些应用构成了以太坊的整个生态。目前,以太坊是区块链世界里生态建设最好的底层公链。本篇将以通俗易懂的方式介绍以太坊开发中涉及到的相关概念,带领大家轻松入门。

以太坊

以太坊(Ethereum)是一个建立在区块链技术之上的、图灵完备的去中心化应用平台。它允许任何人在平台中通过智能合约技术开发、部署和使用去中心化应用。

>  有没有感到和ios、Android平台有点类似?

在以太坊未问世之前,写区块链的应用是这样的:拷贝一份比特币代码,然后去改底层代码如加密算法、共识机制、网络协议等等。2013、2014年那时候的很多山寨币就是这样,改改比特币代码就造出来一个新币。

以太坊平台对底层区块链技术进行了封装,让区块链应用开发者可以直接基于以太坊平台进行开发,开发者只要专注于应用本身的开发,从而大大降低了难度。

>  目前围绕以太坊已经形成了一个较为完善的开发生态圈:社区支持、开发框架、开发工具等等。

智能合约

网络上关于智能合约的解释都很晦涩。我们可以简单的理解为在区块链上,由事件驱动、以代码形式存在、可执行的特殊交易合同。它是代码、数据的集合。

智能合约非常适合对信任、安全和持久性要求较高的应用场景,比如:数字货币、数字资产、投票、保险、金融应用、预测市场、产权所有权管理、物联网、点对点交易等等。

目前除数字货币之外,真正落地的应用还不多。和移动互联网刚兴起之时各种各样、各行各业的APP推陈出新一样,去中心化应用的市场在初期肯定有一个红利期。对此有兴趣的开发者,可抓住机会。

查看全文 >
2018
04-09

以太坊智能合约开发第一篇:IDE对solidity语法的支持

最近在研究以太坊智能合约的开发。随着研究的深入,准备写一个系列教程,将我的实际经验与大家分享,供大家参考借鉴。

solidity是什么?

以太坊官方推荐使用Solidity语言来开发以太坊智能合约。Solidity是一种语法类似JavaScript的高级语言,它被设计成以编译的方式生成以太坊虚拟机代码。在后续内容中你将会发现,使用它很容易创建用于投票、众筹、封闭拍卖、多重签名钱包等等智能合约。

IDE对solidity语法的支持

工欲善其事,必先利于器。在使用 Solidity语言 编写智能合约开始之前,需要一款得心应手的IDE。本篇推荐使用 IntelliJ IDEA 系列的 WebStorm

查看全文 >
2017
07-29

Phalcon教程

2017
07-20

Phalcon入门教程之模型CURD(2)

上一篇 Phalcon入门教程之模型CURD(1) 中介绍了 Phalcon 模型的 insertselect 操作,本篇将介绍 updatedelete 的用法。文中所用的示例代码皆沿用上一篇的数据表,这里不在赘述。

更新记录

Phalcon 模型更新记录的示例代码如下:

$articleModel = new ArticlesModel();
//先调用 findFirst() 获取一条记录,返回值是当前模型对象
$article = $articleModel->findFirst([
    'conditions' => 'aid = :aid:',
    'bind' => [
        'aid' => 3
    ],
]);
if($article) {
    //使用返回的模型对象调用 update() 函数执行更新操作
    $result = $article->update([
        'title' => 'Phalcon更新测试1',
    ]);
    //update() 函数返回值为boolean
    var_dump($result);
}

监听到的SQL语句如下:

SELECT * FROM `test_articles` WHERE `test_articles`.`aid` = :aid LIMIT :APL0

UPDATE `test_articles` SET `title` = ?, `introduce` = ?, `status` = ?, `view_number` = ?, `is_recommend` = ?, `is_top` = ?, `create_by` = ?, `create_time` = ?, `modify_by` = ?, `modify_time` = ? WHERE `aid` = ?
查看全文 >
2017
07-19

Phalcon入门教程之模型CURD(1)

上一篇《Phalcon入门教程之模型》中介绍了数据库模型操作的一些基础功能,本篇将介绍模型的 selectinsert 用法。由于数据库模型操作的内容比较多和细,所以本篇只是粗略的介绍基础用法,以及补充文档中没有提及的一些用法和注意点。因此,强烈建议大家在熟读文档的前提下,再阅读此篇教程。

数据表

假设数据表名为 test_articles,数据结构及记录下:

mysql> select * from test_articles;
+-----+--------------+--------------+--------+-------------+--------------+--------+-----------+---------------------+-----------+---------------------+
| aid | title        | introduce    | status | view_number | is_recommend | is_top | create_by | create_time         | modify_by | modify_time         |
+-----+--------------+--------------+--------+-------------+--------------+--------+-----------+---------------------+-----------+---------------------+
|   1 | 英语演讲     | 纯口语式       |      1 |           0 | 0            | 0      |         1 | 2017-05-21 05:13:46 |         1 | 2017-05-21 05:13:46 |
|   2 | 限购政策     | 快买房         |      1 |           0 | 0            | 0      |         1 | 2017-05-21 05:13:46 |         1 | 2017-05-21 05:13:46 |
+-----+--------------+--------------+--------+-------------+--------------+--------+-----------+---------------------+-----------+---------------------+

其中 aid 是主键,其他每个字段的意思就不做介绍了。

查找记录

Phalcon\Mvc\Model 为数据查询提供了多种函数,下面将直接用demo来介绍其用法。

查找多条记录

使用 find() 函数可以查找多条记录:

$articleModel = new ArticlesModel();
//查询所有记录,返回一个对象
$result = $articleModel->find();
//循环输出结果
foreach($result as $record){
  var_dump($record->aid); 
  var_dump($record->title);
}

find() 函数返回的是 Phalcon\Mvc\Model\Resultset\Simple 对象,我们可以通过 foreach 循环输出结果。也可以将结果集对象转成一个二维数组:

$records = $result->toArray();

还可以统计结果集对象的记录总数:

$count = count($result);
查看全文 >
微信扫一扫