用戶在淘寶上買東西是先將錢轉(zhuǎn)入支付寶驻粟,然后賣方發(fā)貨,用戶收到貨后確認收獲凶异,支付寶就可以將錢打給賣方蜀撑,如果賣方?jīng)]有貨挤巡,賣方就可以終止交易,支付寶將將返還給用戶酷麦。
支付寶在交易中起到信用中介的作用矿卑,避免用戶錢貨兩空。雖然支付寶主要是保護了用戶方的利益沃饶,但是支付寶會從商家店鋪收取租金母廷,羊毛出在羊身上,商家再將這筆費用隱形的轉(zhuǎn)給用戶绍坝。
現(xiàn)在有了以太坊徘意,支付寶作為信用中介的功用就可以被區(qū)塊鏈合約所取代。我們看下面這個簡單的買賣合約代碼轩褐。
合約代碼邏輯采用的形式不同于支付寶的邏輯椎咧,合約還多了個押金,這里的押金和實物的價錢相等把介,買賣的流程也不一樣勤讽,方向倒置,達到了和支付寶買賣擔(dān)保一樣的功能拗踢。
由商鋪發(fā)起合約脚牍,將押金和商品的價錢打到合約賬戶,表示要賣東西了巢墅。
用戶表示對商品感興趣诸狭,于是也交納等量的押金和商品的價錢到合約賬戶。
商鋪在線下將商品發(fā)送給用戶君纫。
用戶收到商品后確認驯遇,押金自動返還給用戶,合約賬戶的余額自動返回給商鋪蓄髓。
在用戶繳納押金和價錢后叉庐,合約賬戶余額為4倍價錢,返還押金給用戶后会喝,賬戶余額還剩3倍價錢陡叠,這部分余額包含商鋪繳納的押金和價錢,還有用戶繳納的價錢肢执,一起打給商鋪枉阵。于是交易成功完成。
如果商鋪在繳錢之后预茄,不想賣了岭妖,這個時候只要用戶沒有繳錢,商鋪是可以主動取消交易的反璃,這個時候合約賬戶的余額會全部返還給商鋪昵慌。
一旦用戶繳錢了,商鋪就不可以反悔淮蜈,否則就會損失繳納的費用斋攀。
用戶一旦收到貨了,如果不確認收貨梧田,也就拿不到繳納的押金淳蔼。
這樣就保證了雙方都不會失信。下面我們分析代碼
代碼中this.balance表示合約賬戶的余額裁眯。payable表示該動作需要支付以太幣鹉梨,支付的數(shù)量會累加到合約賬戶的余額。
Purchase()構(gòu)造器表示商鋪發(fā)起合約穿稳,支付押金和商品的價錢存皂,用戶通過查詢賬戶的balance就知道商品值多少錢。
confirmPurchase()表示用戶對商品感興趣逢艘,支付押金和商品的價錢旦袋。支付成功后,合約賬戶的余額變成了4倍價錢它改。
confirmReceived()表示用戶收到貨了疤孕,確認交易完成。合約執(zhí)行buyer.transfer(value)返還押金給用戶央拖,然后再執(zhí)行seller.transfer(this.balance)將合約的余額返還給商鋪祭阀。
abort()表示商鋪反悔了不想賣了,撤銷交易鲜戒。合約執(zhí)行seller.transfer(this.balance)將合約余額返還給商鋪专控。
該合約的缺點是商鋪和用戶如果沒有2倍的商品價錢,將無法完成交易袍啡。這明顯是不合理的踩官。
其實商家只需要交押金,用戶只需要交價錢就可以了境输。押金也沒必要等價與價錢蔗牡,但是也不能太小,以免商家覺得押金太小懶的去取消交易嗅剖,那用戶將無法取回繳納的價錢辩越,就會給用帶來損失。
也許你會問中介費哪里去了信粮,是不是區(qū)塊鏈合約不需要交羊毛了呢黔攒?
以太坊交易是需要收費的,這部分費用在用戶和商鋪執(zhí)行合約動作的時候從相應(yīng)的外部賬戶里扣除了,只是從合約代碼里無法體現(xiàn)出來督惰。這部分羊毛會被自動獎勵給礦工不傅,作為辛勤挖礦的激勵,畢竟合約的代碼是需要在礦工的機器里執(zhí)行的赏胚。
閱讀相關(guān)文章访娶,關(guān)注微信公眾號/知乎專欄/頭條號【碼洞】