以太坊区块链实现去中心化购物功能
?
在當今的中國,網上購物已經成為了我們不可或缺的一部分,通過電商網站查看商品,下單購物,支付,付款到支付寶,買家收貨確認后,貨款自動打入賣家的賬戶,這些購物的體驗多數人每天都可能發生。大家都知道,淘寶的背后是阿里巴巴這樣的中心化機構操控,賣家在淘寶開C店,開天貓需要經過淘寶,要交押金,交維護費用,推廣商品也是需要交費的,,羊毛自然出在羊身上,這些費用又會通過商品價格轉移到消費者的身上,加大了顧客的負擔。我們來看看通過區塊鏈實現的去中心化的購物功能。下面我們先從淘寶購物流程進行分析,再來設計一下去中心化購物流程的實現。
?
淘寶購物核心流程分析
我們通過在淘寶一次購物來分析一下整個購物流程,以及相關的角色,包括買家,賣家,以及淘寶,我們把淘寶認為是一個中心化的組織。
?
我們先看看買家主要的操作流程,如下圖所示:
?
買家查看商品,選好商品下訂單購物,支付商品的費用,由淘寶進行保管。
買家線下收貨,確認收貨后,通過通知淘寶,完成購物。
再看看賣家銷售的流程,如下圖所示:
?賣家接收訂單后,線下發貨,通知淘寶,更新訂單狀態,待客戶收貨后,接收貨款。
淘寶承擔的工作,如下圖所示:
網上購物時,電商作為中心化的組織,主要為買家提供付款保管作用。待買家確認收貨后,將的付款,發送給賣家。其實承擔的工作也比較簡單,但卻是電商網站最核心的功能。
去中心化購物應用設計
由上面的分析,我們不難發現,電商購物網站是一個中心化應用,其主要的功能為買賣雙方提供一個付款監管的,讓買賣雙方都能按照購物規則完成購物和銷售。通過電商平臺進行商品的銷售,因為有了一個中心化的組織,使得我們網上購物有了一個保證,保證了我們資金安全和貨品的安全,與此同時也增加了商品的費用。
那么我們有沒有一種去中心化的購物網站,答案當然是有的,要不筆者也不會寫這篇文章。基于以太坊區塊鏈開發去中心化的購物應用,可以很好地解決我們遇到的問題,降低商品銷售的成本,從而降低商品的價格。
區塊鏈的特性公開透明,不可抵賴,不可篡改。運行在區塊鏈上的智能合約,就行法律一樣的程序代碼,讓我們得訂立的條文,寫到合約上,發布后不可篡改,這樣的特性保證我們得資金更加的安全。
我們現在考慮使用以太坊的智能合約來實現電商網站所承擔的職能:
買方下訂單,支付后,合約對付款進行監管,買方不能再操控付款。
待買家收貨確認后,把貨款發送給賣方。
買賣交易通過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應用前端相似,本文就不多介紹。智能合約的部份代碼作了簡化,實際的業務場景可能會復雜很多,主要提供一個開發購物應用的思路,希望給讀者啟到拋轉引玉的作用。
參考:以太坊官方文檔。
歡迎加公眾號一起交流。
總結
以上是生活随笔為你收集整理的以太坊区块链实现去中心化购物功能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 库卡机器人报错“一般变频器故障“
- 下一篇: bits不能在本地计算机启动,Win10