用戶在淘寶上買東西是先將錢轉(zhuǎn)入支付寶,然后賣方發(fā)貨,用戶收到貨后確認(rèn)收獲,支付寶就可以將錢打給賣方,如果賣方?jīng)]有貨,賣方就可以終止交易,支付寶將將返還給用戶。
支付寶在交易中起到信用中介的作用,避免用戶錢貨兩空。雖然支付寶主要是保護(hù)了用戶方的利益,但是支付寶會(huì)從商家店鋪收取租金,羊毛出在羊身上,商家再將這筆費(fèi)用隱形的轉(zhuǎn)給用戶。
現(xiàn)在有了以太坊,支付寶作為信用中介的功用就可以被區(qū)塊鏈合約所取代。我們看下面這個(gè)簡(jiǎn)單的買賣合約代碼。
合約代碼邏輯采用的形式不同于支付寶的邏輯,合約還多了個(gè)押金,這里的押金和實(shí)物的價(jià)錢相等,買賣的流程也不一樣,方向倒置,達(dá)到了和支付寶買賣擔(dān)保一樣的功能。
由商鋪發(fā)起合約,將押金和商品的價(jià)錢打到合約賬戶,表示要賣東西了。
用戶表示對(duì)商品感興趣,于是也交納等量的押金和商品的價(jià)錢到合約賬戶。
商鋪在線下將商品發(fā)送給用戶。
用戶收到商品后確認(rèn),押金自動(dòng)返還給用戶,合約賬戶的余額自動(dòng)返回給商鋪。
在用戶繳納押金和價(jià)錢后,合約賬戶余額為4倍價(jià)錢,返還押金給用戶后,賬戶余額還剩3倍價(jià)錢,這部分余額包含商鋪繳納的押金和價(jià)錢,還有用戶繳納的價(jià)錢,一起打給商鋪。于是交易成功完成。
如果商鋪在繳錢之后,不想賣了,這個(gè)時(shí)候只要用戶沒(méi)有繳錢,商鋪是可以主動(dòng)取消交易的,這個(gè)時(shí)候合約賬戶的余額會(huì)全部返還給商鋪。
一旦用戶繳錢了,商鋪就不可以反悔,否則就會(huì)損失繳納的費(fèi)用。
用戶一旦收到貨了,如果不確認(rèn)收貨,也就拿不到繳納的押金。
這樣就保證了雙方都不會(huì)失信。下面我們分析代碼
代碼中this.balance表示合約賬戶的余額。payable表示該動(dòng)作需要支付以太幣,支付的數(shù)量會(huì)累加到合約賬戶的余額。
Purchase()構(gòu)造器表示商鋪發(fā)起合約,支付押金和商品的價(jià)錢,用戶通過(guò)查詢賬戶的balance就知道商品值多少錢。
confirmPurchase()表示用戶對(duì)商品感興趣,支付押金和商品的價(jià)錢。支付成功后,合約賬戶的余額變成了4倍價(jià)錢。
confirmReceived()表示用戶收到貨了,確認(rèn)交易完成。合約執(zhí)行buyer.transfer(value)返還押金給用戶,然后再執(zhí)行seller.transfer(this.balance)將合約的余額返還給商鋪。
abort()表示商鋪反悔了不想賣了,撤銷交易。合約執(zhí)行seller.transfer(this.balance)將合約余額返還給商鋪。
該合約的缺點(diǎn)是商鋪和用戶如果沒(méi)有2倍的商品價(jià)錢,將無(wú)法完成交易。這明顯是不合理的。
其實(shí)商家只需要交押金,用戶只需要交價(jià)錢就可以了。押金也沒(méi)必要等價(jià)與價(jià)錢,但是也不能太小,以免商家覺得押金太小懶的去取消交易,那用戶將無(wú)法取回繳納的價(jià)錢,就會(huì)給用帶來(lái)?yè)p失。
也許你會(huì)問(wèn)中介費(fèi)哪里去了,是不是區(qū)塊鏈合約不需要交羊毛了呢?
以太坊交易是需要收費(fèi)的,這部分費(fèi)用在用戶和商鋪執(zhí)行合約動(dòng)作的時(shí)候從相應(yīng)的外部賬戶里扣除了,只是從合約代碼里無(wú)法體現(xiàn)出來(lái)。這部分羊毛會(huì)被自動(dòng)獎(jiǎng)勵(lì)給礦工,作為辛勤挖礦的激勵(lì),畢竟合約的代碼是需要在礦工的機(jī)器里執(zhí)行的。
閱讀相關(guān)文章,關(guān)注微信公眾號(hào)/知乎專欄/頭條號(hào)【碼洞】