实现一个买卖合约 / 学习智能合约#11

实现一个买卖合约 / 学习智能合约#11

buy.jpg

用智能合约来实现买卖合约是再恰当不过了! 它是完全的去中介化的、自动执行的合约,也是在一些情景下取代支付宝等中介的好办法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
pragma solidity >=0.5.0 <0.7.0;

contract Purchase {
uint public value;
address payable public seller;
address payable public buyer;

enum State { Created, Locked, Release, Finished }
//定义合约的状态,初始为Created
State public state;

modifier condition(bool _condition) {
require(_condition);
_;
}

modifier onlyBuyer() {
require(msg.sender == buyer);
_;
}

modifier onlySeller() {
require(msg.sender == seller);
_;
}

modifier inState(State _state) {
require(state == _state );
_;
}

event Aborted();
event PurchaseConfirmed();
event ItemReceived();
event SellerRefunded();

//卖家创建合约时需提交物品价格的双倍做为押金。
constructor() public payable {
seller = msg.sender;
value = msg.value / 2;
require((2 * value) == msg.value);
}

//卖家提前终止合约,同时取回押金。
function abort()
public
onlySeller
inState(State.Created)
{
emit Aborted();
state = State.Finished;
seller.transfer(address(this).balance);
}

// 买家确认购买,提交价格+押金(双倍价格)
function confirmPurchase()
public
inState(State.Created)
condition(msg.value == (2 * value))
payable
{
emit PurchaseConfirmed();
buyer = msg.sender;
state = State.Locked;
}

// 买家确认收到商品,取回押金
function confirmReceived()
public
onlyBuyer
inState(State.Locked)
{
emit ItemReceived();
state = State.Release;
buyer.transfer(value);
}

//卖家确认交易完成,取回价格+押金(3倍价格)
function refundSeller()
public
onlySeller
inState(State.Release)
{
emit SellerRefunded();
state = State.Finished;
seller.transfer(3 * value);
}
}

buy2.jpg

结和上图,稍捋一下逻辑:

  1. 由卖家发起合约,将2倍押金打到合约账户,表示要卖东西了。
  2. 买家表示对商品感兴趣,于是也交纳2倍的金额(物价+押金)到合约账户。
  3. 卖家将商品发送给买家。
  4. 买家收到商品后确认,押金自动返还给买家。
  5. 卖家确认交易完成终止合约,同时得到账户的余额(3A)。

同此可见,用智能合约来实现买卖是完全可以去中介化的,而且基于一种内在的动力(有押金的存在)买卖双方是会自动地去完成合约的。如果是一些数字资产,用它来交易是不是比在淘宝上更好呢?!


This page is synchronized from the post: ‘实现一个买卖合约 / 学习智能合约#11’

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×