在当今的中国,网上购物已经成为了我们不可或缺的一部分,通过电商网站查看商品,下单购物,支付,付款到支付宝,买家收货确认后,货款自动打入卖家的账户,这些购物的体验多数人每天都可能发生。大家都知道,淘宝的背后是阿里巴巴这样的中心化机构操控,卖家在淘宝开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应用前端相似,本文就不多介绍。智能合约的部份代码作了简化,实际的业务场景可能会复杂很多,主要提供一个开发购物应用的思路,希望给读者启到抛转引玉的作用。

参考:以太坊官方文档。

欢迎加公众号一起交流。

Logo

为所有Web3兴趣爱好者提供学习成长、分享交流、生态实践、资源工具等服务,作为Anome Land原住民可不断优先享受各种福利,共同打造全球最大的Web3 UGC游戏平台。

更多推荐