集册 区块链技术 以太坊去中心化淘宝智能合约案例

以太坊去中心化淘宝智能合约案例

—— 区块链技术(十):以太坊去中心化淘宝智能合约案例

欢马劈雪     最近更新时间:2020-08-04 05:37:59

170

这篇文章我们来介绍一个简易的区块链电商系统的核心功能,10多年来,我们习惯了淘宝的电商模式,淘宝为电商在中国普及做出了突出贡献,值得肯定,也完成了历史使命。

淘宝模式的核心是什么?

免费是一方面,我认为最核心的是解决了网上交易买卖家的信任问题,通过支付宝作为资金中介,使买卖家可以放心的交易。

但是,淘宝迅速崛起为巨头后,交易环节出现了很多不好的现象:刷信誉、巨大经济利益带来的内部腐败等等。因此,淘宝虽然成为了电商巨头,但是却没有真正的解决电商产业的信誉问题。这个问题其实不是淘宝特有,是一种社会现象,不是淘宝,可能就是腾讯或者百度,总之,有人的地方,必然会存在问题。

未来的电商是什么样的?

我认为未来电商是建立在区块链之上,是一个去中心化的电商平台。一个真正可信、不被任何公司控制的组织形态。交易在区块链里完成,买卖家无须彼此信任,可以在区块链公平公证的体系下安全可靠的运转。

好了,光谈理论是没用的,我们通过下面的案列来解释去中心化电商系统的雏形。

智能合约代码:

contract Purchase {
  // 定义价格、卖家、买家状态变量 
  unit public value;
  address public seller;
  address public buyer;
  // 订单状态枚举类型
  enum State { Created, Locked, Inactive }
  // 定义订单状态变量
  State public state;

  // 定义Purchase构造函数,初始化卖家、价格信息
  function Purchase() {
    seller = msg.sender;
    value = msg.value / 2;
    if (2 * value != msg.value) throw;
  }

  modifier require(bool _condition) {
    if (!_condition) throw;
    _
  }

  modifier onlyBuyer() {
    if (msg.sender != buyer) throw;
    _
  }

  modifier onlySeller() {
    if (msg.sender != seller) throw;
    _
  }

  modifier inState(State _state) {
    if (state != _state) throw;
    _
  }

  // 订单状态变化时调用的事件函数
  event aborted();
  event purchaseConfirmed();
  event itemReceived();

  // 订单处于锁定之前,卖家可以终止购买并退回以太币
  function abort()
    onlySeller
    inState(State.Created)
  {
    aborted();
    seller.sender(this.balance);
    state = State.Inactive;
  }

  // 买家确认购买,以太币将被暂时锁定,直到买家确认收货。
  function confirmPurchase()
    inState(State.Created)
    require(msg.value == 2 * value)
  {
    purchaseConfirmed();
    buyer = msg.sender;
    state = State.Locked;
  }

  // 买家确认收货,锁定的以太币将被激活,分别发送给买卖家。
  // 订单状态变为关闭
  function confirmReceived()
    onlyBuyer
    inState(State.Locked)
  {
    itemReceived();
    buyer.sender(value);
    seller.sender(this.balance);
    state = State.Inactive;
  }

  // 当交易没有数据或者数据不对时,触发此函数,
  // 重置操作,确保参与者不会丢失资金
  function() {
    throw;
  }
}

带来的思考

展开阅读全文