《智能合约开发课》学习1:两个简单的合约
最近报名参加了硅谷区块链举办的《智能合约开发课》第二期培训班,根据培训要求,不能完全透露课程的内容,但我会在steemit上记录我的成长过程。
由于正式开课在2018年1月7日,最近先零散地学习一点Solidity智能合约的编程语言。从网上查到,要写智能合约有好几种语言可选:有点类似Javascript的Solidity,文件扩展名是.sol,与Python接近的Serpent,文件名以.se结尾,还有类似Lisp的LLL。Serpent曾经流行过一段时间,但现在最流行而且最稳定的要算是Solidity了,因此还是学Solidity最有用。
Solidity英文官方文档在这里:http://solidity.readthedocs.io/en/develop/ 。在微信公众号里找到一篇中文翻译,先对照着学习一下。
一个简单的合约
pragma solidity ^0.4.0;
contract SimpleStorage {
uint storedData;
function set(uint x) public {
storedData = x;
}
function get() public constant returns (uint) {
return storedData;
}
}
官方文档从一个非常简单的合约代码入手,感觉一个合约contract有点像面向对象编程语言中的类class。
- pragma是程序指示,后面用来指示编译器的最低版本
- contract是关键字,表示合约
- 每个合约内部也有变量和函数
- 前面的storedData像OOP中的成员变量,这里用来记录状态state,存储在区块链里
- 函数function,可以用限定符public
- uint是一个256位的无符号整数
- 访问里面的变量,并不需要像其它语言的this.
- 合约名称、变量名、函数名必须是ASCII码
- 在字符串string里可以存UTF-8编码的字符。
这个官方教程有一点不太好,这里应该马上教大家如何编译和运行这段代码,即使无法在区块链上正常地工作,也应该快速反馈出一些结果。
另一个合约例子
pragma solidity ^0.4.0;
contract Coin {
// 关键字public表示可以从外界读取
address public minter;
mapping (address => uint) public balances;
// 事件让外面的客户端可以进行监听到,相应地编程
event Sent(address from, address to, uint amount);
// 构造函数,只在合约构造时运行一次
function Coin() public {
minter = msg.sender;
}
function mint(address receiver, uint amount) public {
if (msg.sender != minter) return;
balances[receiver] += amount;
}
function send(address receiver, uint amount) public {
if (balances[msg.sender] < amount) return;
balances[msg.sender] -= amount;
balances[receiver] += amount;
Sent(msg.sender, receiver, amount);
}
}
- address是一种特殊的类型,地址,是一个160位的数值,不可以进行其它数学运算
- mapping可以理解为哈希表,mapping (address => unit)表示把地址映射到uint整数
- msg,tx和block是全局变量,可以访问区块链的一些属性
- 外界可以监听事件event,方便编程
单位开了一下午的会议,会上玩手机,发现这样几篇素材:
本文由币乎(bihu.com)内容支持计划奖励
2017年年底前与 @yellowbird 共同发起了一项2017年终总结抽奖活动,参与链接:https://steemit.com/cn/@yellowbird/steemit-2017 ,欢迎大家踊跃参加。
不大喜欢以太坊的语言,等eos上线之后,觉得学学eos开发比较好玩
原理应该都一样,学了不会浪费
点个赞,一起学习
这么快就分享学习笔记了!
还没开始,提前准备一下,需要学习的东西非常多。
真正的践行“活在未来”了!
那个白板里面的东西看不懂,基本这post就没法看啦。