天天看點

以太坊區塊鍊實作去中心化購物功能

在當今的中國,網上購物已經成為了我們不可或缺的一部分,通過電商網站檢視商品,下單購物,支付,付款到支付寶,買家收貨确認後,貨款自動打入賣家的賬戶,這些購物的體驗多數人每天都可能發生。大家都知道,淘寶的背後是阿裡巴巴這樣的中心化機構操控,賣家在淘寶開C店,開天貓需要經過淘寶,要交押金,交維護費用,推廣商品也是需要交費的,,羊毛自然出在羊身上,這些費用又會通過商品價格轉移到消費者的身上,加大了顧客的負擔。我們來看看通過區塊鍊實作的去中心化的購物功能。下面我們先從淘寶購物流程進行分析,再來設計一下去中心化購物流程的實作。

淘寶購物核心流程分析

以太坊區塊鍊實作去中心化購物功能

我們通過在淘寶一次購物來分析一下整個購物流程,以及相關的角色,包括買家,賣家,以及淘寶,我們把淘寶認為是一個中心化的組織。

我們先看看買家主要的操作流程,如下圖所示:

以太坊區塊鍊實作去中心化購物功能

買家檢視商品,選好商品下訂單購物,支付商品的費用,由淘寶進行保管。

買家線下收貨,确認收貨後,通過通知淘寶,完成購物。

再看看賣家銷售的流程,如下圖所示:

以太坊區塊鍊實作去中心化購物功能

 賣家接收訂單後,線下發貨,通知淘寶,更新訂單狀态,待客戶收貨後,接收貨款。

淘寶承擔的工作,如下圖所示:

以太坊區塊鍊實作去中心化購物功能

網上購物時,電商作為中心化的組織,主要為買家提供付款保管作用。待買家确認收貨後,将的付款,發送給賣家。其實承擔的工作也比較簡單,但卻是電商網站最核心的功能。

去中心化購物應用設計

由上面的分析,我們不難發現,電商購物網站是一個中心化應用,其主要的功能為買賣雙方提供一個付款監管的,讓買賣雙方都能按照購物規則完成購物和銷售。通過電商平台進行商品的銷售,因為有了一個中心化的組織,使得我們網上購物有了一個保證,保證了我們資金安全和貨品的安全,與此同時也增加了商品的費用。

那麼我們有沒有一種去中心化的購物網站,答案當然是有的,要不筆者也不會寫這篇文章。基于以太坊區塊鍊開發去中心化的購物應用,可以很好地解決我們遇到的問題,降低商品銷售的成本,進而降低商品的價格。

區塊鍊的特性公開透明,不可抵賴,不可篡改。運作在區塊鍊上的智能合約,就行法律一樣的程式代碼,讓我們得訂立的條文,寫到合約上,釋出後不可篡改,這樣的特性保證我們得資金更加的安全。

我們現在考慮使用以太坊的智能合約來實作電商網站所承擔的職能:

  1. 買方下訂單,支付後,合約對付款進行監管,買方不能再操控付款。
  2. 待買家收貨确認後,把貨款發送給賣方。
  3. 買賣交易通過ether币作為貨币。需要首先把商品的價格轉換為以太币相應的價值。

智能合約的購物實作

pragma solidity^0.4.22;

contractProductsales {

    uint public price;

    uint public amount ;

    address public seller;

    address public buyer;

    enum State { Created, Locked, Inactive}

    State public state;

    // 合約建立者為賣家

    constructor(uint productPrice) publicpayable {

        seller = msg.sender;

        price =productPrice;

    }

    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();

    ///買家下單支付以太币後觸發

    function () public payable {

         require(

         msg.value == price,

         "請按商品價格付款!"

         );

         emit PurchaseConfirmed();

         buyer = msg.sender;

         state = State.Created;

    }

    /// 取消購物取回以太币

    /// 隻允許買家通路,隻有賣家未發貨之前可以通路.

    function abort()

        public

        onlyBuyer

        inState(State.Created)

        payable

    {

        emit Aborted();

        state = State.Inactive;

        buyer.transfer(price);

    }

    /// 确認收貨,發送貨款到賣家

    function confirmReceived()

        public

        onlyBuyer

        inState(State.Locked)

        payable

    {

        emit ItemReceived();

        // 防止‘send’方法被再次調用,首先設定state。這一步非常重要。

        state = State.Inactive;

        // 賣家提取貨款

        seller.transfer(address(this).balance);

    }

合約主要實作了商品支付的監管,買家支付後費用先儲存在合約賬戶,訂單确認收貨後,支付貨款才發送給賣家,因為智能合約一經釋出即不可修改,進而保證了合約按既定的購物規則執行,保證買賣雙方的利益。

去中心化應用的前端與WEB應用前端相似,前端設計就忽略過了。

總結:本文介紹了去中心化購物應用的設計思路,使用以太坊智能合約實作,訂單支付,貨款保管,訂單确認後支付貨款給賣家,這些中心化組織承擔的核心的功能。應用前端的設計和開發和web應用前端相似,本文就不多介紹。智能合約的部份代碼作了簡化,實際的業務場景可能會複雜很多,主要提供一個開發購物應用的思路,希望給讀者啟到抛轉引玉的作用。

參考:以太坊官方文檔。

歡迎加公衆号一起交流。

以太坊區塊鍊實作去中心化購物功能

繼續閱讀