《智能合约开发课》学习1:两个简单的合约

in #cn7 years ago (edited)


最近报名参加了硅谷区块链举办的《智能合约开发课》第二期培训班,根据培训要求,不能完全透露课程的内容,但我会在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 ,欢迎大家踊跃参加。

Sort:  

不大喜欢以太坊的语言,等eos上线之后,觉得学学eos开发比较好玩

原理应该都一样,学了不会浪费

点个赞,一起学习

这么快就分享学习笔记了!

还没开始,提前准备一下,需要学习的东西非常多。

真正的践行“活在未来”了!

那个白板里面的东西看不懂,基本这post就没法看啦。