線上購物安全機制的 Smart Contract

這個月因為正在做一個短期的合約所以非常的忙,現在才又有空回來看區塊鏈的 solidity 語言,就先從一個簡單的開始吧 :D

本文會盡量用不需要有程式基礎的方式敘述,讓更多人可以理解。

Solidity 官網的教學其中有個例子是 “Safe Remote Purchase”,是用區塊鏈實作線上購物的安全機制,讀到時覺得很有意思,介紹給大家。

更新:不過要注意到這就是 Solidity 程式語言教學裏所附的範例,並不是實際上線使用的。就像比如教 PHP 的書裡面教學要如何撰寫一個購物車系統一樣,距離實際上線應用還有段距離,不過可以了解其中的概念。

以前 / 目前的交易方法

在沒有線上購物網站的時候,大家都是一手交錢,一手交貨,通常都不會有什麼問題。

image

一手交錢一手交貨,通常不會有什麼問題。

當開始可以透過線上購物後,事情就有點不一樣了。大家在 PChome 或 Amazon 上怎麼確認你會收到所購買的東西呢?雖然有追蹤商品目前送到哪裡的工具,但是商家會不會確實出貨給你,依靠的是商家與平台的信用與法律規範,通常是你先付了錢(或是使用信用卡),接著依靠商家的信用與法律規範,期待他會出貨給你。如果他不出貨給你,他的信譽就會受損,或者利用打官司透過法律懲罰他的行為。

image

透過政府或平台監督,透過合約或法律約束

另外一個常用的方式就是貨到付款,拿到商品之後在付款給物流的人代收,並且最後交付給商家。

image

透過物流代收服務,由中間人經手商品與金錢

不管是那種方式,中間都需要靠合約(法律)的約束或中間人(物流業者代收或是電子商務平台)來確認雙方有拿到款項與貨品,而其實靠合約的方式,中間人也只是換成政府而已,用政府成立的法律來約束這件事情。

這也就是如果我們看到一個新的電商平台,如果是個陌生的品牌甚至網站做得很掉漆時,你可能就會對於他的信譽產生懷疑,進而不願意使用這個平台。

image

使用區塊鏈的交易方法

如果使用區塊鏈,要怎麼讓這個交易在不需要中間人的協助下完成呢?這就是官網上的 Safe Remote Purchase 所介紹的事情。

區塊鏈中的 Smart Contract (智能合約) 是一種放在區塊鏈上的合約,會依照合約的內容執行各種合約上所記載的條文。如果你熟悉軟體程式的話換種方式講:智能合約就是一段在區塊鏈上執行的程式,任何程序都會依照源碼上所撰寫的方式執行。

而智能合約透過區塊鏈的機制,確認合約的執行是沒有遭到偽造竄改的,我們這邊就不提要怎麼確認不受到偽造竄改,那需要一點篇幅解釋。

既然智能合約可以依照合約上所記載的條文執行,那麼監督這個合約會確實履行的監督者,就不需要是政府或是見證人,而是智能合約本身就可以監督合約的履行。

image

直接由智能合約本身監督合約的履行,不需要中間人如政府監督

回到我們想解決的問題:我們要怎麼確認商家有將商品給你,而使用者有付費給商家?因為智能合約會依照條文執行,我們就不需要提供貨到付款的物流業者或是政府監督來解決這個問題,我們可以讓買賣雙方都先繳納一定的保證金,並且在確認交易完成後,再將保證金退回。

  • 跟賣家收保證金是為了防止他收了錢卻不出貨等原因
  • 跟買家收保證金是為了防止他收到貨卻謊稱他沒收到等原因

以 “Safe Remote Purchase” 這個範例來說,假設有一個廠商今天要賣一台約 10,000 台幣的手機,首先賣家要先建立一個智能合約,在建立合約的同時賣家需要先繳納 20,000 元的保證金,這個保證金如果交易沒有履行或沒有人購買時可以取消,而賣家可以拿回所有保證金。

此時若有一個買家想要買這支手機,他可以透過智能合約「付款」,但跟一般交易不同的地方,在於買家也需要付出額外的保證金,在這個例子他也要付出 20,000 的金額,一半是購買手機的費用,另一半是保證金。

此時,這個智能合約中已經有了 40,000 元的金額。

image

接下來,賣家收到訂單後就可以將此手機出貨給買家。當買家收到手機時,他可以在智能合約上註記「已確認收到物品」。此時智能合約確認了整個交易已經完成,會退給買家 10,000 元的保證金(他原本繳了 20,000 元,一半是買手機的費用,另外一半是保證金),而賣家此時則會收到 30,000 的款項,其中 20,000 元是保證金,10,000 元是售出手機的款項。最後智能合約底下不會有任何結餘款項。

上述的所有動作都是由智能合約依照合約的內容執行,所以不會有中間人,當然也不會有無法信任中間人的問題。

image

在這樣的智能合約下,買家與賣家都不會輕易的不送出商品或是不確認收到商品,因為雙方都放了一定價值的保證金在智能合約中,只有雙方都履行了該履行的條文後才會收到退款,而這樣的過程中就不需要有監督者來監督合約是否進行,因為雙方在沒有達成合約時權益都會受損,所以都會儘量達成合約,當然實際的交易不會是這麼簡單,可能會有很多退款條件,不過從這個例子也可以窺見區塊鏈在這樣的場景有什麼應用。

回頭來看,其實這樣的框架也可以用任何公司提供的服務達成,比如說有公司提供這樣保證金架構的服務,並且負責物流,也可以達成同樣的目的對吧?但是如果是這樣,問題又回到了原點:**你要怎麼確認這間公司可以信任?**他不會拿了兩方的錢就跑路了?政府是不是要監督這間公司?只要有中間人,就會有信任問題。

Ethereum 區塊鏈作為一個可以信任的分散運算網路,在不需要中間人的介入下就可以完成這樣的交易。

剩下唯一的限制,就是你的想像力了 :-)


讀者回函
讀完本文之後有什麼建議或回饋嗎?請按此在 Twitter 上面分享此文並且提及我,或是透過寄送電子郵件分享你的看法 😎