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