以太坊智能合约开发入门

5,687 阅读4分钟

通过本文,你可以了解到:

  • 以太坊知识
  • 基于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