本文节选自电子书《Netkiller Blockchain 手札》
Netkiller Blockchain 手札
本文作者最近在找工作,有意向致电 13113668890
Mr. Neo Chan, 陈景峯(BG7NYT)
中国广东省深圳市龙华新区民治街道溪山美地 518131
+86 13113668890 <netkiller@msn.com>
文档始创于2018-02-10
版权 © 2018 Netkiller(Neo Chan). All rights reserved.
版权声明
转载请与作者联系,转载时请务必标明文章原始出处和作者信息及本声明。
http://www.netkiller.cn |
---|
http://netkiller.sourceforge.net |
|
微信订阅号 netkiller-ebook (微信扫描二维码) |
QQ:13721218 请注明“读者” |
QQ群:128659835 请注明“读者” |
内容摘要
这一部关于区块链开发及运维的电子书。
为什么会写区块链电子书?因为2018年是区块链年。
这本电子书是否会出版(纸质图书)? 不会,因为互联网技术更迭太快,纸质书籍的内容无法实时更新,一本书动辄百元,很快就成为垃圾,你会发现目前市面的上区块链书籍至少是一年前写的,内容已经过时,很多例子无法正确运行。所以我不会出版,电子书的内容会追逐技术发展,及时跟进软件版本的升级,做到内容最新,至少是主流。
这本电子书与其他区块链书籍有什么不同?市面上大部分区块链书籍都是用2/3去讲区块链原理,只要不到 1/3 的干货,干货不够理论来凑,通篇将理论或是大谈特谈区块链行业,这些内容更多是头脑风暴,展望区块链,均无法落地实施。本书与那些书籍完全不同,不讲理论和原理,面向应用落地,注重例子,均是干货。
电子书更新频率?每天都会有新内容加入,更新频率最迟不会超过一周,更新内容请关注 https://github.com/netkiller/netkiller.github.io/commits/master
本文采用碎片化写作,原文会不定期更新,请尽量阅读原文。
http://www.netkiller.cn/blockchain/index.html
您的打赏是我的写作动力:http://www.netkiller.cn/blockchain/donations.html
-----------------------------------
以太坊·电影院场景区块链应用探索
最近一直在思考区块链在各种场景下的落地问题。
下面是电影院场景区块链应用探索,这是我的一个设想,区块链如何在院线场景落地的一些思路。
为此我写一个这样的智能合约,实现了构造方法描述一部电影票价,坐位数量,可以实现订票,扣款,退票,还款等功能。
pragma solidity ^0.4.21; // author: netkiller // home: http://www.netkiller.cn // QQ:13721218 contract Movie { address public publisher; //电影院 string name; //影片名称 uint price; //票价 uint public seat; //坐位数量 mapping (address => uint) public audience; bool play = false; //电影是否已经开播,开播后不允许买票和退票。 //合约构造方法 function Movie(string _name, uint _price, uint _seat) public{ publisher = msg.sender; name = _name; price = _price; seat = _seat; } //获取剩余坐位数量 function getName() public view returns (string){ return name; } //有时需要开放预留坐位,调整坐位数量 function changeSeat(uint _seat) public { if (msg.sender != publisher) { return; } if (play == true){ return; } seat = _seat; } //获取剩余坐位数量 function getSeat() public view returns (uint){ return seat; } //买票方法,参数买票者,票数,买票后扣除用户以太币。 function buyTicket(address _audience, uint _ticket) public payable returns (bool success) { if (_ticket >= seat) { return false; } if (play == true){ return false; } uint amount = price * _ticket; //计算票价 if (this.balance >= amount) { _audience.transfer(_audience.balance - amount); publisher.transfer(publisher.balance + amount); audience[_audience] = _ticket; seat -= _ticket; } return true; } //退票 function refundTicket(address _audience, uint _ticket) public { if (msg.sender != publisher) { return; } if (play == true){ return; } uint amount = price * _ticket; if (audience[_audience] <= _ticket) { if (publisher.balance >= amount) { _audience.transfer(_audience.balance + amount); publisher.transfer(publisher.balance - amount); audience[_audience] -= _ticket; seat += _ticket; } } } //播放电影,锁定 function playMovie() public { play = true; } //销毁合约 function destroy() public{ if (msg.sender == publisher) { selfdestruct(publisher); } } }
用法如下
例如现在要上映一部影片步骤是
首先实例化合约,然后部署合约 Movie("黑客帝国", "25", 80)
var contract; Movie.deployed().then(function(instance){contract=instance;}); contract.getName(); //获得影片名字 contract.buyTicket("0x627306090abab3a6e1400e9345bc60c78a8bef57",1) // 购买 1 张票 contract.buyTicket("0x627306090abab3a6ebc60c78a8bef571400e9345",5) // 购买 5 张票 ... ... contract.refundTicket("0x627306090abab3a6ebc60c78a8bef571400e9345", 2 ) // 退 2 张票 contract.playMovie() // 电影开播,锁定这个合约
原文发布时间为:2018-03-01
本文作者:netkiller
本文来源:腾讯云 云+社区,如需转载请联系原作者。