潛在的需求
區(qū)塊鏈上的資產(chǎn)幾乎是不可追蹤的,當然你可以通過追溯歷史的方式查詢一筆余額可能來自于哪些源頭,但你無法區(qū)分余額里面的哪一部分與源頭有關(guān)。例如源頭的 100 個 BTC 其中 10 個轉(zhuǎn)給地址 A,A 接收其他來源的 20 個 BTC,然后對外支付 25 個 BTC,剩余 5 個,這時,我們很難判斷這 5 個 BTC 和源頭 100 個 BTC 的關(guān)聯(lián)度。
不可追蹤性是數(shù)字資產(chǎn)非常重要的屬性,它保障了匿名性和不可審查性,由于鏈上資產(chǎn)公開了所有交易歷史,他們其實并不能完全保障不可追蹤性。
但并不是所有的業(yè)務場景都要求資產(chǎn)不可追蹤性,很多場景下我們需要一種可追蹤的數(shù)字資產(chǎn)用來限制資產(chǎn)的流轉(zhuǎn)符合來源方的意愿。例如,資助方希望自己的提供的資金用在特定領(lǐng)域,因此需要對分發(fā)的資金進行追蹤或限制;交易所希望自己交易的資金提現(xiàn)后具有一定時間內(nèi)的可追蹤性,以防止黑客利用漏洞挖空交易所。
可追蹤代幣將代幣的持有人或應用領(lǐng)域劃分出子集,在子集內(nèi)由管理方進行監(jiān)管,通過這種方式滿足特殊的業(yè)務需求。
潛在的應用場景
例如 MakerDAO 或其他抵押借貸類 DeFi 服務中,我們可以將用戶抵押的 CKB 打上追蹤標記,這樣用戶可以在抵押借貸的同時使用這些 CKB 進行拆分、合并或者部署合約、存儲數(shù)據(jù)。除非用戶違約,否則這些 CKB 仍然可以正常使用。
此外,交易所可以對自己提現(xiàn)的代幣進行限時可追蹤處理,例如在 1 小時內(nèi),無論提現(xiàn)的代幣如何拆分,都可以精確地定位他們,一旦發(fā)現(xiàn)這些提現(xiàn)是黑客行為,交易所可以對他們進行回收。
技術(shù)實現(xiàn)
Nervos CKB 可以實現(xiàn)代幣的可追蹤性的原因是 Cell 模型的 lock script 設計。每一個 CKB 鏈上資產(chǎn)都是由 Cell 來承載的,每個 Cell 都有一個 lock script 來標識所屬權(quán)。lock script 可以定義用戶使用(轉(zhuǎn)賬)這個 Cell 的時候需要執(zhí)行的動作。一個典型的 lock script 是這樣寫的(偽代碼)
if lock_script.recover(signature, hash(m)) == lock_script.pk then
pass Transaction
而通過簡單的變化即可將這個 Cell 進行可追蹤處理:
find all cells in output that use the same lock script code hash,
make sure that their capacity equals to input cells that use the
same lock script code hash.
&&
if lock_script.recover(signature, hash(m)) == lock_script.pk then
pass TransacTIon
通過這樣的 lock script 設計,可以保證一個類 UTXO 交易輸入的帶標記代幣的數(shù)量和輸出的帶標記代幣數(shù)量一致。進一步地,我們可以用 lock script 對這些代幣的持有人、完全解鎖時間等特性進行設置。
結(jié)論
可追蹤代幣將 fungible token 做了擴展,它們隸屬于 fungible token,但變成了同類 token 的一個子集。子集內(nèi)的代幣是 fungible 的,但它們與外部的同類 token 又有著區(qū)別。這種特殊性質(zhì)可以讓可追蹤代幣實現(xiàn)標準 fungible token 無法實現(xiàn)的業(yè)務功能。