为什么80%的码农都做不了架构师?>>>
基本概念:
- 以太坊是一个开放的、公开的区块链平台,允许用户构建自己的去中心化应用在上面运行
- Solidity是一种语法类似JavaScript的高级语言。它被设计成以编译的方式生成以太坊虚拟机代码。因此以太坊智能合约代码又该语言开发
- Remix是基于浏览器的Solidity IDE,可以用于开发一些比较简单的智能合约,当然还有很多其他IDE,此处暂不敖述
- MIST客户端是以太坊的客户端(可用于管理钱包、转账、部署和管理智能合约,链接测试以太坊网络,搭建虚拟的以太坊区块链平台等)
更多资源信息可关注前两天刚写的文章(整理的一些关于以太坊学习资源),初学者会遇到很多各种各样的概念,以及网上的一些资料有些是比较过时的了,学习起来会显得比较凌乱。 主要把握以下几点就行。
- 以太坊技术原理
- 智能合约(DAPP)概念
- 开发语言
- 开发工具
- 开发环境
- 开发框架
准备工作:
- 了解以太坊基本技术原理以及DAPP概念,本文不做分析
- 开发语言选定solidity,可去学习solidity语法和样例代码。http://wiki.jikexueyuan.com/project/solidity-zh/ 或官网教程http://solidity.readthedocs.io/en/develop/
- 开发工具IDE准备,在线Remix访问地址http://remix.ethereum.org, 简单合约开发比较好用。
- 开发环境,开发环境及开发的应用所运行的环境,其实也就是以太坊平台,我们可以直接访问以太坊平台,但是要把应用部署到以太坊平台是要以太坊币的,太贵了。 开发模式下当然有开发环境,下载MIST http://ethfans.org/wikis/%E4%BB%A5%E5%A4%AA%E5%9D%8A%E9%92%B1%E5%8C%85%20Mist%20%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B 参照该文档安装MIST客户端,注意因为是用于开发环境,不需要与以太坊网络连接并下载区块数据,直接启动应用。然后选择建立私有网络。如下图所示:
启用之后,客户端上就会显示当前是私有网络:
启动网络,开启挖矿,因为部署智能合约是需要钱,需要有旷工干活的,咱们就搭建了一个单节点的以太坊网络,这个节点也就是矿工,需要干活。
开启挖矿之后,创世区块,以太坊币就不断产生了。 所有的数字货币都将被自己挖到。
可惜不是真的以太坊,否则就发了!o(* ̄︶ ̄*)o。
至此,个人的以太坊网络,也就是开发运行环境就搭建好了,为了后续的测试,可以创建多个账号。
智能合约应用举例:
为了开发、部署、和测试一个智能合约(DAPP),我们列举一个简单的应用场景。 开发一个应用,该应用可以由我控制发行虚拟货币,并且能够将货币发送给别人。就这么简单。(当然以太坊平台很强大,这只是万里长征第一步,类似HelloWorld)
代码开发与解释:
我们开发智能合约使用的IDE是 基于浏览器的Remix,访问该工具如下图所示:
代码解释如下:
pragma solidity ^0.4.0;
contract Coin{
// 声明 一个 address 类型 变量 256 bits, 用于 存储启动该智能合约的账户地址。
address public minter;
// 声明 mapping 类型 变量 类似于 java map ,用于存储账户的资产信息
mapping(address => uint) public balances;
// 声明 一个事件 ,客户端可以来监听该事件
event Sent(address from, address to , uint value);
//构造函数,在合约启动的时候执行一次,因此minter保存的是启动该智能合约的账户地址
function Coin() public{
minter = msg.sender;
}
//为当前启动合约账号 ,也就是自己发币。每次加20
function go() public{
//如果不是启动合约的账号 则返回,即别人无法给自己发币
if(msg.sender != minter) return;
balances[msg.sender] += 20;
}
//为指定账号发币
function mint(address receiver) public{
//只有自己可以发币 其他账号调用无效
if(msg.sender != minter) return;
balances[receiver] += 15;
}
//账号之间发送货币
function send(address receiver) public{
uint amount = 15;
if(balances[msg.sender]
代码编译:
使用Remix对代码进行编译
代码调试与测试:
选择右上角run标签,模拟参数都采用默认(默认会生成一个账号),点击create,即模拟部署智能合约代码。create成功后,右下角则会出现部署好的合约(包括合约地址以及合约方法)
测试为自己发币:
点击go方法按钮,控制端会显示已经调用成功
为了验证查看是否成功给自己发币,可以通过查询balances变量,在balances按钮右侧输入我的账号地址,进行查询,如下图,由于我点了八次(每次发币20),所以我的账号余额是160.
注意,此处需要了解如何获取账号,个人账号其实就在,如下图所示:点击右侧复制按钮可以获取账号字符串。该账号也是部署合约的账号。当时复制到的账号信息只有20个字节,而address类型是需要32个字节的(因为address的地址是256bits的),那么我们就需要对该地址进行补全去查询,在地址前端补24个0即最终用于查询的账号地址是0x000000000000000000000000ca35b7d915458ef540ade6068dfe2f44e8fa733c
测试为别人发币:
点击mint按钮,随意写一个别人的账号,比如为0x000000000000000000000000ca35b7d915458ef540ade6068dfe2f44e8fa733b
验证发币结果:
在balances右侧输入别人账号0x000000000000000000000000ca35b7d915458ef540ade6068dfe2f44e8fa733b,点击查询,如下图所示,发币15.
测试发送数字货币:
由当前合约部署者(自己)给别人转币,在send按钮输入别人账号0x000000000000000000000000ca35b7d915458ef540ade6068dfe2f44e8fa733b,点击send按钮,转15个币过去。
验证转币结果,之前自己有160个币,别人有15个币。 转15个币过去后自己有145,别人有30.如下图所示。
部署到以太坊平台(搭建的单点开发环境):
打开MIST平台,创建两个演示账号A,B 。其中A账号用来部署智能合约, B账号为别人的账号。用于测试发币,和传输货币。打开MIST的智能合约界面
点击DEPLOY NEW CONTRACT创建新的智能合约:
代码拷贝完成之后,就会进行自动编译,并生成合约,如下图所示,合约名称为Coin:
选择该合约,然后再页面最下角,点击部署,部署的时候需要输入账号密码:
部署成功后,点击智能合约界面即可查看到:
测试部分 就不做了,跟Remix很类似。