跳到主要內容

從 ArcBlock DevCon 2020 徽章談起:什麼是通證?

冒志鸿(ArcBlock 首席执行官、首席架构师)、陈俊(ArcBlock 副总裁)
ArcBlockDevConHackathonToken

作者: 冒志鴻(ArcBlock 執行長、首席架構師)、陳俊(ArcBlock 副總裁)

端午節快樂!

ArcBlock DevCon 2020 的門票徽章引發了使用者的極大熱情、業界的極大關注,上面是 ArcBlock 社群使用者用他們貴賓票領到的 NFT 徽章自製的影片。我們借花獻佛,為所有關注支持 ArcBlock 的朋友夥伴送上節日的祝福。與此同時,參加線上黑客松的開發者朋友和我們團隊則加班加點、用自己參賽 DApps 創意為節日獻禮,為大會劃上圓滿的句號。

我們這次大會發行的門票徽章證書,以及即將頒發的黑客松徽章證書,都屬於 NFT(Non-Fungible Token,非同質通證)。那麼什麼是 NFT?通證是什麼?與大家耳熟能詳的比特幣、乙太坊等加密貨幣有何聯繫與區別?由冒志鴻與陳俊撰寫、中信出版集團出版、今天才印刷出廠的新書《區塊鏈實戰:從技術創新到商業模式》在第 2 部分《破除迷思,深入了解區塊鏈的能力與局限》第 7 章《加密貨幣、加密資產和通證》專門做了概念介紹與辨析。

毋庸諱言,這幾年來以比特幣為主的各種加密資產及其帶來的財富效應,才是吸引全世界普通大眾關注了解區塊鏈技術的最大動力,在此之前可能還從未有任何一種電腦技術讓如此多的行外人士如此著迷。

誤解一:區塊鏈就是比特幣或數位貨幣。這是一種對區塊鏈技術缺乏基本認識的典型誤解。比特幣、各種加密數位貨幣只是區塊鏈的一種應用,而區塊鏈支持很多種其他的應用。

誤解二:區塊鏈的作用就是用來「發幣」。與誤解一類似,區塊鏈除了用於「發幣」、發通證之外有很多種用途。「發幣」的說法常來自炒作加密貨幣時代的產物。

誤解三:「幣」或「通證」除了用於炒作沒有別的作用。「通證」有相當多的用途,非常廣泛的應用場景,絕大部分區塊鏈應用的設計都離不開使用某種形式的通證,即使這些應用不需要使用虛擬貨幣。加密貨幣交易雖然在過去可能是加密貨幣的主要用途,但已經有越來越多的實用專案採用區塊鏈和通證技術。

誤解四:政府要發國家數位貨幣就必須使用區塊鏈。這也是一種誤解,設計和實現一個 Token 並不是非需要區塊鏈不可,完全可以不採用區塊鏈技術。不過在技術發展的今天,採用區塊鏈是一個比較有利的選擇。

誤解五:企業政府必須使用「無幣區塊鏈」。「無幣區塊鏈」是一種「名詞之爭」,是一些人用於將「區塊鏈技術」和「幣」劃清界限而炮製的一種不科學的說法,誤導性較強。某種角度而言,幾乎不太存在無幣(通證)的區塊鏈應用場景。「無幣區塊鏈」就好比是「無資料的資料庫」一樣荒唐可笑。

區塊鏈與「幣」

比特幣是世界上第一個區塊鏈,因此毫無疑問,談到區塊鏈是無法迴避數位貨幣的。為了能更好地理解區塊鏈上的幣、通證、數位資產的關係,我們有必要首先深入理解區塊鏈的一些設計以及歷史成因。

在目前流行的區塊鏈設計裡,有兩類常見的設計:UTXO 模型和帳戶模型。無論加密貨幣、通證,還是加密資產等都離不開一個核心問題——在區塊鏈上它們歸屬於誰。而這兩種設計模型就是回答這個問題的基礎。

UTXO 模型

中本聰在比特幣白皮書一開始就引入了「電子硬幣(Electronic Coin)」概念,並將它定義為「一連串的數位簽章(a chain of digital signatures)」,這就是比特幣交易的基礎,可能也是比特幣之所以成為「幣」的原因。

比特幣裡採用了稱為 UTXO(未花費的交易輸出)的交易模型,你可能有所耳聞並在本書其他部分讀到。作為一本非技術的讀物我們不打算仔細講解這一交易模式,但是可將它類比成日常使用的硬幣、紙鈔等現金支付這樣的方式以幫助理解。

假設買一杯奶茶需要支付 32 元,如果用微信錢包、支付寶或銀聯等電子支付的話,那麼非常簡單直接扣除 32 元即可,完全不用擔心零頭的問題,但是拿出現金支付時,就有以下幾種付款找零的情形:

  • 32 枚 1 元的硬幣,這時候正好不用找零,但大部分時候我們沒帶這麼多硬幣在身上
  • 3 張 10 元鈔票,外加 2 枚 1 元硬幣,這樣也不需要找零
  • 4 張 10 元鈔票,店家會給我們 8 枚 1 元硬幣作為找零
  • 1 張 100 元鈔票,店家給我們 1 張 50 元鈔票,外加一張 10 元鈔票,外加 8 枚 1 元硬幣 ……

UTXO 就是類似於上述現金支付找零這樣的方式,只不過並不是硬幣本身,而是一個「找零」記錄,這個「找零」記錄就被稱為 UTXO。

比特幣這一設計思路是:只記錄交易,不記錄最終狀態,其一個最大的好處就是驗證比較容易,我們仍然用現金消費來理解一下:當我們要買上面那杯 32 元的奶茶的時候,我們看下錢包如果發現所有鈔票硬幣加起來也不足 32 元,我們馬上就知道自己錢不夠,而要知道一圈購買下來還剩多少錢,把錢包裡沒花掉的錢加一下即可。

因此比特幣裡的交易不是大家想像的轉帳方式,把 A 的帳戶餘額減少一點,對應把 B 的帳戶餘額增加一點。比特幣的系統裡面並沒有一個「帳戶餘額」的東西存在,你每次在比特幣錢包裡看到的餘額其實是數位錢包根據區塊鏈上的資料(UTXO)計算出來的。從某種角度上來說,在比特幣的系統裡並不真正存在「幣」本身,而只存在 UTXO,「幣」僅僅是計量上的概念。

UTXO 和帳戶餘額的體系相比更複雜,可以表達的狀態和附加資訊更少,擴展性不足。但對於比特幣這樣一個以點對點的電子現金為設計目標的系統來說已經足夠,而其高效率、靈活、防止雙花攻擊更容易等優點更為重要。大量基於比特幣程式碼分叉的區塊鏈都是採用了類似做法,而在更關注應用和擴展能力的區塊鏈,例如乙太坊、Hyperledger Fabric、ArcBlock 等都無一例外還是採用了帳戶模型的設計方式。

帳戶模型

帳戶模型和我們常用的網際網路帳戶、銀行帳戶這些帳戶模型非常接近,因此比較容易理解。你可以把一個使用者的帳戶模型理解成為一組通用的「容器」,其中一種常見的「容器」叫「計數器」,這最容易被用來實現「帳戶餘額」。在這種「帳戶餘額」下的交易,就是我們正規理解中的轉帳——每次轉帳交易實際上就是多個參與帳戶之間的數額變化,當然區塊鏈需要保證這些數額是正確的,不會出現雙花攻擊等,乙太坊裡的乙太幣(ETH)就是這樣實現的。

帳戶就像一組通用容器,意味著帳戶模式非常靈活,一個帳戶可以包含多種不同的「容器」,用來保存不同的資料,這就意味著一個帳戶裡完全可以有多種不同的「幣種」,除了這種可以任意分拆按「帳戶餘額」計數的,還可以保存那些不可分拆的,也可以組合地保存多種不同的。這就不難理解在乙太坊之上,一個帳戶除了有 ETH 餘額,還可以有各種各樣 ERC20 Token 的餘額,實際上還可以保存各種各樣的資料形態。可程式化的區塊鏈系統,如乙太坊、Hyperledger Fabric、ArcBlock 等帳戶系統都可以支持幾乎可以被應用無限擴展的區塊鏈上的資料。

帳戶模型和 UTXO 模型並不矛盾,實際上完全可以直接在帳戶模型下實現和 UTXO 類似的機制,也有一些區塊鏈嘗試將兩者結合起來。不過在 UTXO 模型下想實現類似帳戶的機制也相當麻煩。

Token 命名考源

既然帳戶體系可以保存如此眾多靈活的資料,開發者按照用途作出一些約定(稱為協議、資料規範、資料格式等)用來表述各種各樣的需求。最先出現的稱呼當然是沿用習慣的 Coin,但由於 Coin 本身在比特幣體系裡已有特定含義,而且在實現機制上又有所不同,因此早期開發者採用了 Token 這個詞。

早期還曾有人用 Asset(資產)來指稱過,比較著名的有染色幣時代的「開放資產協議」(Open Assets Protocol)中使用了 Asset 這個詞。但由於 Asset 這個詞本身表示的「資產」有特定含義,乙太坊著名的 ERC20 標準出現時,其規範文件中使用了 Token 來描述這套標準定義。隨著乙太坊和 ERC20 標準的流行,Token 成為最為主流的命名。

其實 Token 在英文語境下,尤其在電腦領域裡,是一個經常拿來指代「一團不知道究竟該如何命名的数据」的「萬金油」名詞,因此早期開發者用 Token 來命名一點不奇怪。

Token 這個詞彙在電腦領域常被用於不同的場合表達不同含義:上圖中所示是一個早期著名的網路架構——權杖環網(Token Ring)裡 Token 控制發送資料的權力。很多電腦應用場合都還有稱為 Token 的東西,比如 Session Token,Security Token,Access Token、JSON Web Token,CSRF Token 等等,注意它們其實都是不相關的概念,其共性就是一種表示「有特定用處的、獨特不重複的、一小塊的数据」。

Token 這個詞彙在中文世界首先被翻譯成了「代幣」,這基本抹殺了當初英文世界命名者稱其為 Token 的「良苦用心」,不過後來有人建議將它翻譯為「通證」,避免其和「幣」有直接的字面聯繫。

Token 翻譯的「代幣」、「通證」之爭

區塊鏈語境中,這些權益的英語表達還是都用 Token。當中文要進行翻譯的時候,顯然,「權杖」一詞不能滿足更豐富的含義,加之區塊鏈專案投機蔚然成風,Token 被許多人翻譯成了「代幣」,但是顯然這個翻譯並沒有反映出 Token 一詞在區塊鏈專案裡所代表的準確含義。2018 年,經過國內區塊鏈行業的熱烈討論之後,Token 開始被更多的文章翻譯成「通證」。

2018 年,中關村區塊鏈聯盟理事長元道與 CSDN 副總孟岩認為,Token 應該翻譯成「通證」更為合適。他們認為 Token 就是一種「可流通的加密數位權益證明」。在一個可以運行 Token 的平台上發行加密數位貨幣,是一件易如反掌的事情。但是直接把 Token 譯為代幣,肯定是錯誤的。因為 Token 所代表的,可以是一切權益證明,甚至是一切憑證,不僅僅是貨幣。但是無論是使用權杖也好,還是代幣也罷,都不能很好的體現出 ICO 之後 Token 處於新階段的角色轉換,因為其擁有了更多的作用,所以創造了一個新詞「通證」。 Token 區塊鏈語境下的翻譯從「代幣」改成「通證」也都是「名詞之爭」。從 Token 究竟翻譯成什麼,我們也可以看出人們根據自己立場觀察技術的心態,雖然 Token 還是那些作用,也仍然是那個英文單字,但如何稱呼它,其實是根據每個人的看法而不同。喜歡以代幣來稱呼 Token 的,可能更認可更強調 Token 在數位貨幣的價值,而喜歡使用通證這個譯名的人,則認為「通證」才能更全面地反映 Token 實現的多樣化功能。

走出「名詞之爭」

在我見解中,讀者完全可以認為區塊鏈領域裡的 Coin(幣)、Token(通證)、Asset(資產)、Cryptocurrency(加密貨幣)、Crypto Token(加密通證)、Crypto Asset(加密資產)是同一類東西,不必在這些名稱裡陷入「名詞之爭」。

比如,說比特幣是一種 Coin(幣)、Token(通證)、Asset(資產)、Cryptocurrency(加密貨幣)、Crypto token(加密通證)、Crypto Asset(加密資產),無論用哪個詞彙指稱它,都對。

在本文的後半部分,我們將用英文的 Token、中文譯名「通證」來表述上述任何一種概念。

絕大部分的區塊鏈應用的核心都圍繞通證

一個資料庫應用的核心是什麼?毫無疑問是「資料」,雖然在偶爾極個別應用場景下,資料庫會用在和資料本身不相關的地方,例如當年著名的網際網路專案 Flickr 曾介紹他們用資料庫來作為一個分散式序號計數器的經驗。一個電子表格應用,比如微軟的 Excel 的核心是什麼?毫無疑問是「電子表格」,雖然有人用 Excel 來作畫,並在網路上引起過小小的轟動。一個區塊鏈應用的核心是什麼,答案就是「通證」。

所有數位貨幣類型的區塊鏈應用,如比特幣等,毫無疑問作為幣的通證就是其全部。而在著名的企業聯盟鏈 Hyperledger Fabric 設計裡,排列其「資產-參與方-交易」模型之首的就是數位資產,一種通證的典型形態,或者另一種叫法。任何使用 DID、可驗證證書技術的應用,本質上都是在使用作為身份的通證和作為證書的通證。讀完本書,你可能會發現通證技術有非常廣泛的應用場景,絕大部分區塊鏈應用設計都離不開使用某種形式的通證,即使這些應用不需要使用虛擬貨幣。

實際上,基於通證的各種應用是區塊鏈未來最令人激動的地方。正如我在序言裡展望的那樣,未來 10 年裡,區塊鏈技術可能將釋放其巨大的威力,區塊鏈網路將成為像今天的電信網和網際網路一樣的社會基礎架構,基於區塊鏈的各種數位通證會如同今天電子郵件一樣無處不在,以區塊鏈為基礎的應用會如今天的萬維網站點和行動應用一樣成為每個人生活中不可缺少的一部分。

為什麼設計實現 Token 需要使用區塊鏈?

首先設計和實現一個 Token 並不是非需要區塊鏈不可。

你沒有看錯,區塊鏈並不是必要的,在區塊鏈誕生和流行之前,人們已經用很多種方式實現了各種各樣類似的數位幣、數位通證的各種功能,被成千上萬人使用。看一看現在的網路銀行、各種航空公司、飯店或商家的里程積分系統、遊戲點卡等等,這些業務已經成熟使用了很多年,這就充分說明沒有區塊鏈不影響這些通證業務成功開展。

那麼,現在需要設計一個使用 Token 的應用需不需要使用區塊鏈技術呢?答案是:Yes!為什麼?因為用區塊鏈技術來定義 Token 是最新的技術進展,比用傳統資料庫的方式更安全、高效、架構成熟。

很多人因為比特幣而知道加密貨幣和通證。在比特幣之前,數位化的貨幣就是密碼學的一個研究分支。密碼學界一直有個夢想:手裡的實物現金能否數位化,透過數位加密技術像發一封電子郵件那樣,直接從某一個數位身份轉移到另外一個數位身份名下?讀者在第一部分第二章「區塊鏈誕生之前」部分了解到的各種密碼學的進步及其應用在 eCash、B-money、BitGold 等探索發明各種數位貨幣。這些創新突破分別透過簽章技術解決了數位貨幣發行者、持有者的身份問題,非對稱加密技術則部分解決了數位貨幣的流通問題,留下的核心難題「雙重花費」問題被 2009 年橫空出世的比特幣用點對點交易、全網記帳和 UTXO 帳戶設計加以解決。

過去使用中心化的系統來實現數位貨幣或通證的功能,需要為安全性、可靠性、可審計性付出巨大的代價。那些小規模行動遊戲裡的積分、虛擬幣系統之所以似乎並沒有花費巨大,只是因為其本身價值還不夠大。

區塊鏈必須有 Token 嗎?

雖然大部分區塊鏈系統都預設設計有 Token,但並不是必須的。區塊鏈系統完全可以不設計 Token。例如一些聯盟鏈系統,比如 Hyperledger Fabric、R3 Corda 等通常就沒有包含預設 Token。

我們已經知道 Token 其實只是用來表徵鏈上某種實體的資料而已,那麼區塊鏈作為一種資料庫,只要裡面有資料存在就一定是表徵某個實體,因此這個區塊鏈系統即使不設計 Token,應用如果需要的話也可以在此基礎上再創建出 Token 來。在數位貨幣概念比較受排斥的時候,有一些人提出了所謂「無幣區塊鏈」,可以認為這是另外一種名詞之爭。當你讀完本章或本書對區塊鏈及其應用有更多理解後,會發現絕大部分區塊鏈應用設計都離不開使用某種形式的通證,即使這些應用不需要使用虛擬貨幣,因此「無幣區塊鏈」純屬於無稽之談

比特幣設計時採用了一個有趣的激勵機制,就是給每輪裡成功產生區塊的「礦工」一定數量的比特幣作為獎勵。後來的很多區塊鏈的激勵機制,也使用類似的「挖礦」獎勵 Token 的形式,因此有人認為 Token 和激勵機制是必然的對應關係。其實,這並非必然,只不過在一個區塊鏈上採用鏈上 Token 作為獎勵懲罰機制比較容易實現。區塊鏈上可以設計 Token 但不用於激勵機制,也完全可以設計或使用一個區塊鏈而沒有激勵機制,或者使用其他的方式來作為激勵機制而不使用通證。

同質通證(FT)和非同質通證(NFT)

還有一種劃分方式是按照 Token 是否同質、是否可拆分來區分出兩類不同的 Token:同質通證(Fungible Token,縮寫 FT)和非同質通證(Non-fungible Token,縮寫 NFT)。

同質通證

所謂同質通證就是可以切分,只要數額相等的就意義相同的這種通證。常見的加密貨幣,如乙太幣(ETH),或者各種 ERC20 Token 都屬於同質通證。

舉例而言,我的乙太坊帳戶裡原來有 10 枚 ETH,無論經過多少次轉帳後,只要我帳戶裡仍然還有 10 枚 ETH,那麼對我而言這個帳戶餘額就沒有任何變化。也就是任何進進出出的 ETH 都是同質的,使用者在意的僅僅是數量。

非同質通證

非同質通證是獨一無二的,也是不可替代的。例如一張證書、一張門票等,即使它們有同類,甚至非常類似,但每一個都是獨一無二的,而且它們通常也無法被切割拆分。

比如著名的乙太坊遊戲加密貓(Cryptokitty)就是使用了 ERC721 標準在乙太坊上發行的非同質通證,每隻貓都對應著一個獨一無二的非同質通證。

非同質通證有各種各樣的形態,從徽章、證書、會員卡、門票等等都是典型的非同質通證,有著非常豐富的場景

其實如果再細分非同質通證的話,還可以有一些更有趣的分類。比如有些通證雖然獨一無二,但屬於同一類型,因此可以為這些通證定義出一個「類」或「模板」,免得每個通證都需要包含相同的信息浪費區塊鏈資源。比如電影票,大部分票的樣子都差不多,因此可以定義一個電影票公用模板的通證,然後每張票只需要很少的獨特資訊(如場次、座位等)。乙太坊上的 ERC1155 標準在 ERC721 上作出延伸,就是解決這樣的非同質但有類和模板的標準。

多個不同的非同質通證有時候也許有需求組合成另外一個通證,一個典型的例子,例如一個情人節的禮物促銷,一個禮包的通證裡包含兩張電影票,一張停車券,還有一張餐廳消費卡。在乙太坊上也有 ERC998 來提供這種組合型的非同質通證的標準。

上面提到的 ERC 標準都是乙太坊上的通證標準,需要注意在不同的區塊鏈上通證的格式、協議等目前沒有統一標準。例如在 ArcBlock 的區塊鏈上與非同質通證相關的協議稱為 ABBA 協議(ArcBlock Blockchain Assets Protocol,ArcBlock 區塊鏈資產協議),而在 Algorand 區塊鏈上稱為 ASA(Algorand Standard Assets,Algorand 標準資產)標準。可以預見在未來 Token 協議標準方面的不同會是一個挑戰。

在這個定義下,細心和喜歡思考的讀者可能會想,那麼比特幣和那些使用 UTXO 的幣應該算哪一種呢?我覺得在概念上可以認為符合同質通證,但在其具體實現上又更接近非同質通證,因為每一個 UTXO 都是獨一無二的。這其實也不難理解,想像一下現實中的鈔票,其實每張鈔票都有獨一無二的編號,從鈔票個體而言是非同質的,而對大多數使用鈔票的人而言,大家關心的只是鈔票上的面值數字而已,因此又是同質的。

我們可以看到,很多概念並不是非黑即白,而是要看從哪一個角度去考慮,「中心化」還是「去中心化」、「同質」還是「非同質」都是如此。

應用通證(Utility Token)和證券通證(Security Token)

另外一種分類方式按照通證的應用屬性來劃分,即應用通證(Utility Token)和證券通證(Security Token)。

應用通證

應用通證是設計賦予持有者某種使用權利的通證。例如,電影票可以認為是一種典型的應用通證的例子,持有某張電影票,就可以讓持有者在特定的時間在特定的場次特定的座位上觀看電影。類似這樣具有應用特性的通證不勝枚舉,除了門票之外,還有如會員卡、禮品卡、身份證、學歷證明等等。

應用通證由於可以承載與應用相關的資訊、規則、甚至業務邏輯,因此應用通證可以大幅度地提高生產效率,甚至革新商業模式。以上面的電影票為例,讀者可以思考一下,為什麼電影院需要有賣票這個步驟,而不是讓人拿著等值的錢入場?原因非常簡單,因為票上含有場次、座位等資訊,有了這些資訊,電影院可以更好地規劃自己的場次,更可預料管理自己的票房收入,而持有票的人可以更有預期了解自己獲得什麼樣的體驗,這是比拿現金臨時入場不可能具備的優勢。正是如此,今天的電影、演唱會、飛機、火車等等都採用票券這樣的應用通證體系。

應用通證的形態和使用場合是千變萬化的,並可進行組合,因此應用通證是一種最常用的區塊鏈應用開發形式。我們前面介紹 DID 的時候提到的可驗證證書(Verifiable Credentials)可以認為是一類典型的應用通證。

一些有可能被認為是數位貨幣的區塊鏈通證實際上也是應用通證,因為這些通證被設計出來使用的目的是用來作為使用特定區塊鏈或網路服務的權利通證,但是由於數位貨幣交易所的存在,使得這些通證被交易從而具有了一些貨幣和證券的形態。正是因為這種複雜性,使得越來越多的有識之士呼籲各國政府應該對通證制定新的法律,因為證券是一個已經有百年歷史的古老事物,很多國家的證券法出現遠遠早於通證這樣的新生事物。

證券通證

證券通證可以用於作為代表公司或專案收入的某種權益,如擁有權、股權、收益權等;證券通證還可以代表傳統的證券,即作為任何一種可交易資產的廣義分類,從房子等不動產,貴重金屬到代幣都算是可交易資產。

用通證技術來升級傳統的證券有非常多的優勢,更為安全可靠,還可以結合智慧合約等實現更多自動化和先進的功能。

由於各國政府的監管因素,一旦通證被認為屬於「證券(Security)」就往往面臨更多嚴格的監管要求,因此很多時候,區塊鏈的應用開發者在設計通證的時候需要仔細規劃和考慮其屬性。通證是否屬於證券,目前還沒有定論,本書不打算就這一法律問題展開,而是專注於介紹通證在技術上的特性和功能。

新書已在京東當當天貓上架,歡迎點擊購買。

本頁涉及

術語

  • Token

    在帳本上,一個可以被交易轉移、可以被規則約束的單位。它代表什麼由發行它的協定決定,而不是由這個詞本身決定。