ethereum(以太坊)(实例)--"安全的远程购买"
- 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.在函数执行之后,修改状态变量的值
ethereum(以太坊)(实例)--"安全的远程购买"的更多相关文章
- ethereum(以太坊)(实例)--"简单的公开竞拍"
说真的,刚开始接触这个竞拍案例--“简单的公开竞拍”,我就抱着简单的心态去查看这个实例,但是自我感觉并不简单.应该是我实力不到家的原因吧!!!233333...不过经过大半天的努力,自己理解完之后,觉 ...
- ethereum(以太坊)(一)
从这周开始,开始学习以太坊开发--solidity,开始决定往区块链方向发展,毕竟区块链技术应用广泛.一开始接触solidity开发语言不太习惯,毕竟一直在学习python语法,有很多都不能接受.有难 ...
- ethereum(以太坊)(十四)--Delete
pragma solidity ^0.4.10; contract Delete{ /* delete可用于任何变量(除mapping),将其设置成默认值 bytes/string:删除所有元素,其长 ...
- ethereum(以太坊)(基础)--容易忽略的坑(三)
pragma solidity ^0.4.10; contract Byte{ bytes [] public T=new bytes[](3); function setLeng(uint len) ...
- ethereum(以太坊)(基础)--容易忽略的坑(二)
pragma solidity ^0.4.0; contract EMath{ string public _a="lin"; function f() public{ modif ...
- ethereum(以太坊)(基础)--容易忽略的坑(一)
pragma solidity ^0.4.0; contract base{ address public _owner=msg.sender; uint _a; string internal _b ...
- ethereum(以太坊)(十三)--异常处理/元祖
pragma solidity ^0.4.4; contract Students{ uint[] data= new uint[](4); address _owner = msg.sender; ...
- ethereum(以太坊)(十二)--应用(二)__投票(基础总和)
编写应用合约之前,先弄清它的逻辑,有助于我们更好的部署合约 pragma solidity ^0.4.21; pragma experimental ABIEncoderV2; contract vo ...
- ethereum(以太坊)(十二)--应用(一)__集资(构造函数/映射)
pragma solidity ^0.4.4; contract funder{ //0xca35b7d915458ef540ade6068dfe2f44e8fa733c //0x14723a09ac ...
随机推荐
- 微信小程序开发2-第一个小程序开发准备
1.首先在官网上注册一个账号( https://mp.weixin.qq.com/ )申请一个AppID(类似于人的身份证,小程序也需要身份证) 注册过程不多说 2.安装开发工具( https://m ...
- Element和vue框架报错提示
上面报错提示Error in render function: "TypeError:Cannot read property '$options' of undefined" 就 ...
- C# 导出excel文件处理科学计数法办法
在邦定gridview控件时在rowdatabound事件中队数据格式化 protected void DataGridView1_RowDataBound(object sender, GridVi ...
- git rebase vs git merge详解
https://medium.com/@porteneuve/getting-solid-at-git-rebase-vs-merge-4fa1a48c53aa#.std3ddz0g 请参考另外一篇文 ...
- SSIS ->> Environment Variables
SQL Server Integration Services(SSIS) 在2012版本引入了Environment Variables这个新特性.它允许我们为一个环境创建出一套变量用于为项目内的包 ...
- Controller与View数据传递 多Model传递
1)ViewBag变量方式 使用4个ViewBag变量进行数据传递,Data1.Data2.Data3.Data4的数据直接从数据库里调. Control中伪代码如下所示: 1 public Acti ...
- linux和aix内核参数检查
安装oracle软件时需要设置操作系统级别的用户限制,后期检查可以使用如下命令,方便问题的排查工作 linux: tail -15 /etc/security/limits.conf tail -30 ...
- redis在windows平台安装和启动
官网: https://redis.io/ 中文网站:http://www.redis.net.cn/ 一.下载windows版本的redis 官网没有提供windows版本的下载,只有linux版本 ...
- spring集成ehcache本地缓存
1.maven依赖 <!-- ehcache 相关依赖 --> <dependency> <groupId>net.sf.ehcache</groupId&g ...
- BZOJ3999:[TJOI2015]旅游(树链剖分)
Description 为了提高智商,ZJY准备去往一个新世界去旅游.这个世界的城市布局像一棵树.每两座城市之间只有一条路径可 以互达.每座城市都有一种宝石,有一定的价格.ZJY为了赚取最高利益,她会 ...