pragma solidity ^0.4.10;

contract Safebuy{

    uint public price;
address public seller;
address public buyer; constructor() public payable{
seller = msg.sender;
//uint value = msg.value / 2 ;
//require(value *2 ==msg.value);
price = msg.value;
} enum State{Create,Block,Release}
State public state;
//根据函数的执行,更改条件状态--对函数方法的执行规定一定的顺序
modifier StateStatus(State _state){
require(state == _state);
_;
} modifier OnlyBuyer(){
require(buyer == msg.sender);
_;
} modifier OnlySeller(){
require(seller == msg.sender);
_;
} event Abort();
event Deal();
event EndDeal(); function getBalance() view public returns(uint){
return address(this).balance;
//向该合约内共放入的以太币
//刚部署合约时:address(this).balance = msg.value
//买家交易达成时:address(this).balance = msg.value *2
} //state = State.Release 其他函数都无法执行,该合约被终止
//abort()在其他2个函数执行之前才能调用
function abort() OnlySeller StateStatus(State.Create) public{
emit Abort();
state = State.Release;
seller.transfer(address(this).balance);
}
//deal() 确定购买:在其他2个函数执行之前才能调用,先到先得,只执行一次
function deal() StateStatus(State.Create) payable public{
emit Deal();
buyer = msg.sender;
require(msg.value == price);
state = State.Block;
} //endDeal 确认付款:在deal()执行之后,才能够执行该函数
function endDeal() OnlyBuyer StateStatus(State.Block)payable public{
emit EndDeal();
state = State.Release; // 注意: 这实际上允许买方和卖方阻止退款 - 应该使用取回模式
//buyer.transfer(msg.value);在执行deal函数时,已经扣掉了ether
seller.transfer(address(this).balance);
}
}
学到的知识点:
1.enum:枚举根据改变枚举的状态,能够确定函数的执行顺序
2.address(this).balance:往该合约内注入的以太币
3.在函数执行之后,修改状态变量的值

最新文章

  1. Djago模板拾起
  2. 【JSTREE】 复选框默认选中【总结】
  3. 基于spring4.0配置分布式ehcache,以及相关使用
  4. PHP 与网址相关内容
  5. uva 562
  6. ios-控件的frame_center_bounds简单介绍
  7. python 打包与部署
  8. Java并发编程-volatile
  9. 伴随ListView、RecyclerView、ScrollView滚动滑入滑出小图标--第三方开源--FloatingActionButton
  10. android侧滑菜单笔记
  11. SQL Server调优系列基础篇 - 索引运算总结
  12. python is == 的区别
  13. HTML 5与HTML 4的区别
  14. MyBatis快速入门(一)
  15. win10应用 UWP 使用MD5算法
  16. WEB应用:预览
  17. django 表单过滤与查询
  18. Linux内核 kmalloc, kzalloc & devm_kzalloc 区别【转】
  19. css美化页面
  20. EL表达式、 jstl标签

热门文章

  1. 提升PPT制作效率和颜值
  2. python 进程池的使用
  3. Python pymysql模块学习心得
  4. Linux 安装问题
  5. [Errno 14] problem making ssl connection Trying other mirror.
  6. Azkaban3.X的安装(2018年8月19日最新版本)
  7. Android Studio 独立引入(非友盟)微博分享和回调时问题
  8. (转)从信息隐藏的一个需求看C++接口与实现的分离
  9. ListView实现分页加载(三)实现分页加载
  10. codeforces 814E An unavoidable detour for home