以太坊智能合约开发二三事
接触区块链快两年了,整天听人谈论以太坊智能合约,自己却从来没有手把手写过。
一个重要原因就是,当年以太坊的The DAO事件发生后的分叉,让我对ETH产生了"偏见"...
不过最近参加了一个以太坊智能合约开发的课程,改变一些对以太坊的看法,开始正视其在区块链发展史中的地位。
这篇文章用来简要记录一下智能合约开发感受,理解不对的地方,更希望有人来打脸..
0X01 智能合约介绍
智能合约,听起来很“高大上”的一个词,其实就是一个运行在区块链上的程序。
区块链是一个可公开访问且不可篡改的数据库,增删改查这个数据库的代码就是智能合约。
传统程序员理解上面这句话后,基本就可以无缝转型成“区块链软件工程师”了,哈哈。
0X02 以太坊开发工具
以太坊作为目前发展最好的公链,其实软件开发生态也十分强大。
1.开发语言: Solidity
Solidity 是一个编译型语言,类似于Java,编译生成的代码需要在以太坊虚拟机(EVM:类似于Java的JVM)运行。
这门语言是为了以太坊开发定制的,发展时间比较短,所以坑也很多。。
不过语法比较简单,和Python一样易上手,贴一段代码感受一下,很容易理解吧。
pragma solidity ^0.4.0;
contract SimpleStorage {
uint storedData;
function set(uint x) public {
storedData = x;
}
function get() public constant returns (uint) {
return storedData;
}
}
2.在线IDE: Remix
平时调试一些简单的合约,使用Remix就足够了,它提供了语法检查,错误提示,多种编译器,Debug模块,以太坊模拟器等等好用的功能。不过有时在线加载容易出问题,但它是基于JS编写并开源的,可以在本地直接安装。
3.开发框架: truffle
Truffle的出现可以说极大的简化了以太坊应用的开发,看看这些强大的功能
- Built-in smart contract compilation, linking, deployment and binary management.
- Automated contract testing with Mocha and Chai.
- Configurable build pipeline with support for custom build processes.
- Scriptable deployment & migrations framework.
- Network management for deploying to many public & private networks.
- Interactive console for direct contract communication.
- Instant rebuilding of assets during development.
- External script runner that executes scripts within a Truffle environment.
我尤其喜欢 truffle unbox react 这个命令,直接生产一套前后端开发脚手架,可以直接往里边填充solidity和react的代码。
4.Web3.js
虽然Truffle中已经内置了Web3.js,但还是要重点提一下,因为它有点像steem-js,但相比之下,比steem-js更强大,通过web3.js,可以编译,发布,调用sodility,是以太坊开发的绝对利器。
...还有一些工具比较,还在学习之中,以后再单独补充
0X03 智能合约的未来
说实话,现在除了ICO,智能合约并没有其他广泛的实际应用,我个人觉得是和”手续费“这个东西有极大的关系。
现代程序员,如果在编写代码时,还要考虑怎么编写才能省钱(对,solidity就是这样的),这绝对是反人性的...
长期会导致对程序员的要求过高,无法大规模,合作开发应用。
这里我要奶一下EOS了,牺牲一些去中心化,在区块链上自由的开发符合当地法律的应用,有何不好呢?
毕竟”去中心化“只是手段,不是目的,而且人于人的差异之大,绝对的去中心就是伪命题吧
Leave 以太坊智能合约开发二三事 to:
Read more #cn posts
Best Posts From skenan
We have not curated any of skenan's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.