以太坊智能合约开发第四篇:实现Hello World智能合约 2018-04-12
04-25
以太坊智能合约开发第七篇:智能合约与网页交互 HOT
上一篇中,我们通过truffle开发框架快速编译部署了合约。本篇,我们将来介绍网页如何与智能合约进行交互。
编写网页
首先我们需要编写一个网页。打开 smartcontract/app/index.html 文件,修改 head 区代码如下:
<head>
<title>Hello - Truffle</title>
<link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<!-- 可选的 Bootstrap 主题文件(一般不用引入) -->
<link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">
<script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
<script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
<script src="./app.js"></script>
</head>
修改 body 区代码如下:
<body>
<div class="alert alert-success" role="alert" style="display:none;" id="message-box"></div>
<div class="form-group">
<input type="text" class="form-control" id="username" aria-describedby="basic-addon1">
</div>
<button type="submit" id="submit" class="btn btn-success">调用合约</button>
<button type="submit" id="cancel" class="btn btn-default">重置</button>
</body>
04-13
以太坊智能合约开发第六篇:truffle开发框架 HOT
在前面几篇教程中,我们实现了一个简单的 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)
04-12
以太坊智能合约开发第五篇:字符串拼接—Solidity HOT
上一篇,我们实现了一个简单的智能合约。用户输入什么字符串,合约就原样返回什么。在文章最后抛出了一个问题:如果我们事先在合约里定义好 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;
}
}
04-12
以太坊智能合约开发第四篇:实现Hello World智能合约 HOT
绝大部分开发者学习一门语言的时候,都是从输出一个 Hello World 开始。我们也从实现一个 Hello World 合约为切入点,开始进入智能合约的世界吧。
环境准备
安装好 node 和 npm。这里对node和npm的安装过程,不做详细介绍。本篇依赖的环境版本:
Node : v8.9.0
Npm: 5.5.1
在你的代码目录里,创建名为 smartcontract 的文件夹,并创建如下两个文件 package.json 、 Hello.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 下载相关的依赖包。
04-11
以太坊智能合约开发第三篇:安装节点工具Ganache HOT
在正式开始编写智能合约之前,我们需要先安装一个以太坊客户端,也就是我们常说的以太坊节点。上一篇有提到Geth,但是它会消耗很多时间来同步以太坊的所有区块数据,并占用很大的磁盘空间。目前已经有几十G大小,不久将达到上百G。在开发过程中,我们推荐使用以太坊区块链的私有链Ganache来搭建节点。
Ganache
Ganache可以快速启动个人以太坊区块链,并可以使用它来运行测试,执行命令、检查状态,同时控制链条的运行方式。
安装
打开官网 http://truffleframework.com/ganache/ , 并点击 DOWNLOAD 按钮:
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
04-10
以太坊智能合约开发第二篇:理解以太坊相关概念 HOT
很多人都说比特币是区块链1.0,以太坊是区块链2.0。在以太坊平台上,可以开发各种各样的去中心化应用,这些应用构成了以太坊的整个生态。目前,以太坊是区块链世界里生态建设最好的底层公链。本篇将以通俗易懂的方式介绍以太坊开发中涉及到的相关概念,带领大家轻松入门。
以太坊
以太坊(Ethereum)是一个建立在区块链技术之上的、图灵完备的去中心化应用平台。它允许任何人在平台中通过智能合约技术开发、部署和使用去中心化应用。
> 有没有感到和ios、Android平台有点类似?
在以太坊未问世之前,写区块链的应用是这样的:拷贝一份比特币代码,然后去改底层代码如加密算法、共识机制、网络协议等等。2013、2014年那时候的很多山寨币就是这样,改改比特币代码就造出来一个新币。
以太坊平台对底层区块链技术进行了封装,让区块链应用开发者可以直接基于以太坊平台进行开发,开发者只要专注于应用本身的开发,从而大大降低了难度。
> 目前围绕以太坊已经形成了一个较为完善的开发生态圈:社区支持、开发框架、开发工具等等。
智能合约
网络上关于智能合约的解释都很晦涩。我们可以简单的理解为在区块链上,由事件驱动、以代码形式存在、可执行的特殊交易合同。它是代码、数据的集合。
智能合约非常适合对信任、安全和持久性要求较高的应用场景,比如:数字货币、数字资产、投票、保险、金融应用、预测市场、产权所有权管理、物联网、点对点交易等等。
目前除数字货币之外,真正落地的应用还不多。和移动互联网刚兴起之时各种各样、各行各业的APP推陈出新一样,去中心化应用的市场在初期肯定有一个红利期。对此有兴趣的开发者,可抓住机会。
04-09
以太坊智能合约开发第一篇:IDE对solidity语法的支持 HOT
最近在研究以太坊智能合约的开发。随着研究的深入,准备写一个系列教程,将我的实际经验与大家分享,供大家参考借鉴。
solidity是什么?
以太坊官方推荐使用Solidity语言来开发以太坊智能合约。Solidity是一种语法类似JavaScript的高级语言,它被设计成以编译的方式生成以太坊虚拟机代码。在后续内容中你将会发现,使用它很容易创建用于投票、众筹、封闭拍卖、多重签名钱包等等智能合约。
IDE对solidity语法的支持
工欲善其事,必先利于器。在使用 Solidity语言
编写智能合约开始之前,需要一款得心应手的IDE。本篇推荐使用 IntelliJ IDEA
系列的 WebStorm。
07-29
Phalcon教程 HOT
本文对Phalcon教程、相关开源项目以及疑难杂症进行总结归档,方便大家搜索查找(保持持续更新)。
Phalcon文档
Phalcon入门教程
- Phalcon入门教程之安装
- phpstorm识别Phalcon语法及提示
- zendstudio识别Phalcon语法及提示
- Phalcon入门教程之目录结构
- Phalcon入门教程之控制器
- Phalcon入门教程之Volt模板引擎
- Phalcon入门教程之模型
- Phalcon入门教程之模型CURD(1)
- Phalcon入门教程之模型CURD(2)
Phalcon开源项目
07-20
Phalcon入门教程之模型CURD(2) HOT
上一篇 Phalcon入门教程之模型CURD(1) 中介绍了 Phalcon
模型的 insert
和 select
操作,本篇将介绍 update
和 delete
的用法。文中所用的示例代码皆沿用上一篇的数据表,这里不在赘述。
更新记录
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` = ?