通过本文,你可以了解到:
- 以太坊知识
- 基于Remix开发智能合约
- 基于truffle开发智能合约
以太坊
以太坊是建立在区块链技术上,去中心化的可编程应用平台。开发者可以应用平台solidity语言,开发和运行智能合约(Dapp-DecentralizedApplication)
以太坊革命性的引入智能合约,极大的拓展了区块链应用场景,同时其完善的技术生态,也降低开发应用门槛。
智能合约是由可执行的代码段组成,简单来说,我们将既定规约,用程式实现,部署在以太坊后,再由其他用户访问调用。
运转流程与AWS lambda极为相似。lambda:工程师将代码段上传至AWS,通过AWS工程组件完成程式部署,只有在调用时,才会运行此代码段,之后结果再由AWS返回。
以太坊Dapp完整的内部服务,相比lambda会复杂很多:
开发者通过Remix或Truffle工具,Solidity编程实现合约,测试后编译为Evm可识别的字节码,部署在以太坊,获得合约地址。EOA(合约用户),通过钱包对合约进行访问操作,只读操作不会耗费gas,写入操作即改变合约内部变量或数据,则会消耗一定量的gas。
基于Remix开发智能合约
Remix 是一个开源的Solidity智能合约开发环境,在线提供基本的编译、部署至本地或测试网络、执行合约等功能
我们通过实现一个简单的数据写入和读取的合约,让大家对Solidity、Remix有初步的认知。
01 打开Remix在线IDE 点我
02 编写Dapp程式
pragma solidity ^0.4.24;
contract InfoContract {
string name;
uint age;
function setInfo(string _name, uint _age) public {
name = _name;
age = _age;
}
function getInfo() public view returns(string, uint) {
return (name, age);
}
}
- pragma solidity ^0.4.24; 代码用0.4.24版本的solidity编写,需要0.4.24及以上版本运行
- contract InfoContract; 定义合约名
- string name;声明一个类型为string的变量
- uint age;声明一个类型为uint的变量
- setInfo();修改变量值
- getInfo();读取变量值,view表示此函数只读,不会对类变量做更新
03 编译合约
04 部署合约
- 选择JavaScript VM环境,自动生成10个账号,并将首账号作为智能合约创建者
- GASLIMIT设定油费,读操作不消耗,写操作会消耗
- 点击部署后,成功后,在交互区会显示当前合约地址以及此次操作的交易凭证
05 运行合约
- 运行合约,可以看到智能合约接收到传参,并修改了对应的变量值
06 总结
Solidity是一门类似JavaScript的编程语言,除了官方文档,这里也推荐一份速查手册
使用Remix进行Dapp开发是很简单的,极大的降低了环境搭建成本以及学习验收的门槛,但涉及到更为复杂的逻辑或前后端交互,就需要掌握另外的开发工具truffle了
基于truffle开发智能合约
Truffle是针对基于以太坊的Solidity语言的一套开发框架。本身基于Javascript。
truffle英译是松露盒,官方已经集成了较多项目源码,比如宠物商店、代币,只需要执行truffle unbox nameContract即可下载运行,这里不展开讨论,本文从零搭建应用。
01 必要准备
- npm install -g truffle
- npm install -g ganache-cli
- 环境条件:NodeJS 5.0+、Windows,Linux,或Mac OS X
02 应用truffle生成骨架
创建InfoContract目录,执行 truffle init命令得到骨架,如图所示
-
contracts/: Solidity合约目录
-
migrations/: 部署脚本文件目录
-
test/: 测试脚本目录
-
truffle.js: Truffle 配置文件
03 创建智能合约
04 配置迁移文件
05 设定测试区块链指向本地Ganache
06 运行本地测试链(基于Ganache)
truffle本身也有集成测试区块链,通过truffle develop可以快速创建,以完成合约部署,这里我们选用Ganache(图形可视化)作为区块链运行载体
07 智能合约编译
执行truffle compile进行编译
编译完成后,会自动生成一则build目录,目录下会有对应的合约json文件,下一步骤,会将其部署到区块链上
07 智能合约部署
08 运行测试
在Truffle v5, 控制台支持 async/await 方法(同步方式)
操作步骤:
- truffle console到交互台
- let instance = await InfoContract.deployed() 获取合约实例
- instance.setInfo('xiaoming', 21) 传递参数到合约
- instance.getInfo() 获取返回值
09 总结
本文只是通过基础实例,展示truffle基本操作,更多惊喜,请大家自行解锁吧
写在最后
由于区块链知识体系庞大,本文以实际跑通流程为主轴为大家演示,中间概念部分有所略过,对应的枝干皆有超链,方便大家系统学习。
在下一期,会基于实战项目为大家分享,并且会完整的演示如何部署在以太坊Rinkeby链上。
参考资料:
《以太坊智能合约从入门到上线》 王仕军
《以太坊实战》 Mahesh Murthy