智慧合約和 DApp
2017年11月份和2018年5月份的技術雷達,都將 ofollow,noindex">Ethereum for decentralised applications . 放到了 Technique 象限的 ASSESS 環裡,鼓勵在數字貨幣和銀行等金融領域之外多嘗試構建嶄新的DApp。那我們就來聊聊什麼是去中心化應用。

技術雷達 Ethereum for DApps
Ethereum(以太坊)是眾多區塊鏈平臺裡除了比特幣之外最為有名的區塊鏈平臺了。它標榜成為世界的計算機,然後在這臺世界計算機上執行的就是智慧合約,智慧合約相當於後臺程式,和前端程式一組合(sdk/rpc)也就是這裡的 DApp 。
智慧合約和 DApp
大俠留步,智慧合約(Smart Contract)是個什麼東西,和AI有關係?嗯,沒半毛錢關係。

刺客伍六七
舉個例子,我們來聽首歌:“阿珍愛上了阿強,在一個有星星的夜晚,飛機從頭頂飛過,流星也劃破那夜空”。這是一首描寫愛情的美妙歌曲,因為太美妙了,所以很多人在傳唱,結果很多人都知道了一個事實:阿珍愛上了阿強。這就是多人形成的一種共識,傳播方式類似於流行感冒,所以也叫流行歌曲(大概是這麼回事兒)。
智慧合約和這個原理差不多,不同的是它會把事件編成程式碼,放到區塊鏈這個不可篡改的資料庫上,然後區塊鏈網路中的每個節點都去跑一遍這個程式碼,結果都得到“阿珍愛上了阿強”這個事實。以後,你跑去查一查區塊鏈的歷史記錄,總是能得到“阿珍愛上了阿強”,這就叫做可追溯。
什麼是DApp
Dapp 是去中心化應用(Decentralized Application)的簡稱。與之相對的是中心化應用(Centralized Application),比如現在常見的BS模式下的 web 應用。而中心化應用通常會出於可用性的考慮將例項部署到多個節點上,形成分散式應用。所以說,中心化應用可以是分散式的,也可以是非分散式,但是去中心化應用一定是分散式的。那麼由此就會引出一個思考,去中心化應用和現在的分散式應用的區別到底在哪裡呢?去中心化應用具有四個基本特點:
- 開源
- 內部貨幣
- 去中心化的共識機制
- 無單點故障缺陷

Ethereum DApps
DApp 和普通的 App 有什麼不同?
DApp和App之間最大的不同就在這D(Decentralized)上,這個D有兩層含義,第一它具備分散式(Distributed)的特徵,第二它具備
的特徵。
分散式理解起來比較簡單,這個app是部署到多個節點上的,不用害怕單點故障。
關鍵是這個分權比較難以理解。在這裡,分權其實也包含兩層含義。第一點,應用的開發者在上線應用之後,就不能隨意修改升級應用內容,當然更加不可能修改資料;第二點,應用本身具有博弈的特點,都把使用者想象成理性經濟人,做事之前考慮成本,這也是為什麼大多數DApp都有它內建的代幣(Token,也作通證)。
這樣說起來比較抽象,我們來看看一些典型的DApp的特徵。
購買商品合約
想象一個場景,我們在一個沒有淘寶這種電商平臺下,怎麼和個體商家做交易?
假想一下,商家釋出了一個合約,合約裡說,我這裡有一件商品價值1塊錢,你給這個合約打入一塊錢,我就把商品發過去,然後你那邊確認收貨之後,我就收到這1塊。

第一回合
聽上去不錯,但是這裡面有問題。如果使用者打進1塊錢,商家根本沒有貨,那使用者只能白白浪費一塊錢。只要使用者不傻,他就不會打進去這1塊錢,這個交易不可能完成。
怎麼辦?商家說那好,我先打進去1塊錢表示我這裡有1塊錢的商品,這樣就能確保我發貨。然後使用者打入1塊錢,然後商家發貨,使用者簽收,商家得到2塊錢。

第二回合
聽上去不錯,但是這裡面還是有問題。如果使用者收到貨之後,不去觸發簽收操作呢?對於使用者而言,沒啥損失,但是商家不僅損失了商品,還損失了1塊錢。
怎麼辦?使用者說那好,你先打進去1塊錢,我打進去2塊錢。我收到商品之後,自然會觸發簽收操作,那樣你就得到了2塊錢,返還我1塊錢。如果我不進行這樣的操作,就會損失1塊錢呢。

第三回合
聽上去不錯,不過我們稍微鑽點牛角尖,就會說剛才方案還是有漏洞,商家可能會用1塊錢套住使用者2塊錢的,就是不發貨。那商家就得和使用者一樣打進去2塊錢,但是使用者收貨之後,完全會考慮我只損失1塊錢,你損失了3塊錢,那我就不簽收哈哈哈。

第四回合
不過,我們還是基於理性經濟人的假設,商家是想通過買東西賺錢的,所以他在抵押1塊錢的情況下,一定會發貨。
通過這個例子,我們很容易發現,在沒有中間人擔保的場景下,兩個陌生人也是可能完成一筆交易的。這裡面充滿了博弈的套路,在實際編碼的過程中,最好有兩個人扮演不同的角色,然後坐到一起,從自己的利益出發,達成交易,而且使交易的信任成本最小化。剛才的場景下效率肯定不高,我想不會有哪個商家和顧客願意質押自己的現金流,去達成這種交易吧。
錘子剪刀布
如何在Dapp中玩錘子剪刀布的遊戲呢?我們面對面玩這個遊戲還是比較簡單的,彼此同時亮出來就好了。但是在網路環境下就不一樣了,總有一個人先出,另一個後出。那放到DApp中更加有問題了,先出的人一定會輸,為啥?因為先出的已經被記錄在區塊鏈上,那就意味著後面的人一定能看到對方的出拳結果,所以他一定會贏。

先手
所以先出的人一定會把出拳的結果加salt然後hash才上鍊,後出因為看不到結果,所以只能隨機選擇一個出拳。

後手
不過這個時候,問題又來了。先出的一看結果,是對方贏了,那就乾脆不揭露結果。這對遊戲而言不公平。所以還得設計在對方出拳之後,多長時間內,如果先出拳的一方不揭露,那麼不論結果如何都算他輸。

公平
去中心的智慧鎖
區塊鏈上的智慧合約承載了原來中間商信任擔保的角色,也是我們常常說的“去中介”和“去信任”的由來。詳細請看這篇 《基於以太坊的去中心化智慧鎖》
在很多共享經濟的場景當中,其實一把“智慧”的鎖就可以勝任。這也是為什麼我們會有去中心化智慧鎖的想法。整體的實現邏輯如下:
- 房東通過智慧合約 Smart Lock Contract 設定房屋租金。
- 租客通過查詢合約地址,對所要租的房屋合約轉賬;
- 租客來到房屋門前出示二維碼(由自己簽名的訊息轉成的二維碼);
- 門鎖上的攝像頭識別二維碼,並向合約驗證簽名的真實性以及租客的租房時間的合法性,進行開門。

去中心化的智慧鎖
以太貓(Cryptokitty)
Cryptokitty是一款構建在以太坊區塊鏈平臺上的以太貓遊戲( cryptokitties )著實火了,火熱的程度直接引發以太坊網路的大擁堵,由於這個遊戲佔用了較多的 以太坊網路頻寬 ,導致很多交易得不到及時處理,比如你想從火幣網轉出一筆 ETH 到自己的錢包,這筆交易就會長時間處於 等待確認的狀態 。
Cryptokitties 類似於此前席捲全球的遊戲 Pokémon,不過它是一個基於以太坊的DAPP(Decentralized Application,去中心化應用),由設計工作室 AxiomZen 設計打造,上線不到10天就迅速成為以太坊上交易量最大的 DAPP。在這個遊戲當中,你可以收藏,交易和繁殖以太喵,有別於比特幣這類加密貨幣,以太喵更像加密收藏品,這意味著你的 CryptoKitty 始終屬於你,合法性由智慧合約(Smart Contract)確定,而智慧合約是無法關停的,這點也是它區別於 Pokémon 的地方,因為一旦 Pokémon 背後的公司倒閉,你所擁有的寵物也隨之消失。而且作為收藏品,以太喵的市場價格是由市場需求、本身的稀缺性和你的報價決定的,這也是為什麼一隻以太喵的價格會如此之高,甚至高達17萬美元。
CryptoKittes 是一個收藏遊戲,它能滿足人們娛樂的需求。你可以收藏和買賣那些通過隱形基因繁殖出來的稀有品種、給喵命名、給它找物件,開啟一段區塊鏈吸貓的新時尚。這裡也顯現了 DAPP 的另一個重要特徵 —— 內部代幣,通過和外部轉換代幣進而盈利。

以太貓
FoMo3D
傳銷集大成者,前段時間火的不能再火的DApp FoMo3D,它的網站名稱叫做 exitscam.me,妥妥的騙局?
這個賭博的方式類似傳銷,它設定了崩盤的上限為24小時,每個新加入這個騙局的人都會自動給遊戲續命30s(嗯,+30s)。為啥明知是個騙局還有很多人願意進來玩呢,因為它的規則是在崩盤的時候,最後一個遊戲參與者能獲得之前所有參與者資金的23%,而其他的後來者需要為前面進來的人買單。
當然也有人給這款天才之作洗白,這歸功於DApp的特性,程式碼開源,無法篡改。它巧妙地將陽謀編碼到程式當中,而且明碼標價地讓參與者投注,即便是程式的擁有者也無法“攜款潛逃”!驅使賭局越來越大的是人的貪婪本性。所以從本質上,這又不是傳銷。
這樣一款邪惡的遊戲現在已經募集了21,468.75ETH,價值9,903,536.56252刀,而且還會繼續漲下去。把人性玩得如此得心應手,這也是區塊鏈當前的狀態。

FoMo3D
小結
綜合來看,我們可以下個簡明的定義:DApp 是一種執行在去中心化 P2P 網路上,沒有任何一個節點可以獲得完全控制權並且原始碼開放,含有內部激勵的網路應用。

三個基本特點