如何解決比特幣發(fā)展的心智模型
隨著我在比特幣開發(fā)方面獲得越來(lái)越多的經(jīng)驗(yàn),我不時(shí)地有一個(gè)頓悟,它徹底改變了我的思維方式、我的想法以及我如何處理錢包軟件中的基本構(gòu)件。事實(shí)上,每次發(fā)生這種情況時(shí),我都會(huì)在腦海中以新的視角徹底重寫我正在創(chuàng)建的錢包。
在過去的幾天里,我想我意識(shí)到還有另一種更好的方式來(lái)做我現(xiàn)在正在做的事情。不幸的是,重寫我的錢包這次不是一個(gè)選項(xiàng),因?yàn)閃asabi 錢包有一個(gè)重要的用戶基礎(chǔ),它可能太冒險(xiǎn)重構(gòu)軟件的本質(zhì)。但至少我可以和你們分享這些見解。
1. 解決心智模型
比特幣錢包有地址,這些地址里有余額。
我創(chuàng)建了我的第一個(gè)比特幣錢包:DotNetWallet,附帶一篇文章:構(gòu)建自己的比特幣錢包。這使用了這個(gè)心智模型。但比特幣網(wǎng)絡(luò)不是這樣運(yùn)作的。區(qū)塊鏈上沒有地址,并且根據(jù)地址組織基本數(shù)據(jù)結(jié)構(gòu)可以防止將來(lái)進(jìn)行任何遠(yuǎn)程高級(jí)操作。
2. 交易心理模型
下一步是考慮交易而不是地址。我的第二個(gè)比特幣錢包: HiddenWallet,它是這樣工作的:我有一堆交易,每當(dāng)我必須做些什么的時(shí)候都需要向用戶顯示余額,找到未使用的UTXO時(shí),我就從交易中計(jì)算出所有東西。這最終使我能夠在任何時(shí)候都擁有正確的wallet-state并執(zhí)行各種高級(jí)操作,但結(jié)果證明這是非常低效的,我需要添加各種輔助的數(shù)據(jù)結(jié)構(gòu),以減少這種痛苦。
3.代幣心理模型
接下來(lái),我轉(zhuǎn)向UTXO模型,或者更確切地說(shuō)是coin模型。我的代幣很聰明,它們知道一堆事情:誰(shuí)花了它們,它們花了誰(shuí),標(biāo)簽,匿名設(shè)置,等等……我的錢包的下一個(gè)迭代,Wasabi錢包使用這個(gè)數(shù)據(jù)結(jié)構(gòu)為基礎(chǔ)。
交易開始了,我將把相關(guān)的UTXO組織成代幣。
問題是,隨著軟件的發(fā)展,當(dāng)錢包變得太鼓時(shí),那些檢查我的代幣列表的算法就會(huì)變得非常慢。因此,我也開始改變?cè)阱X包外添加代幣的方式,這可以解決一些邊緣情況,但我擔(dān)心這會(huì)讓一切變得更慢,這只會(huì)再次影響性能。我需要一種方法來(lái)正確地檢查這些代幣之間的關(guān)系。
4. 心智模型圖
我的下一個(gè)小技巧是創(chuàng)建心智模型圖。如果我要?jiǎng)?chuàng)建一個(gè)圖形數(shù)據(jù)結(jié)構(gòu),其中節(jié)點(diǎn)將是我的代幣,加權(quán)后的邊將記錄硬代幣之間的關(guān)系,這可能會(huì)很好。
現(xiàn)在的代幣是頂點(diǎn),不過我會(huì)把一些東西移到邊緣。邊是這里的重要部分。
代幣心智模型的問題是,代幣通過txid相互連接:一枚硬代幣在哪個(gè)tx中,又會(huì)在哪個(gè)tx中使用代幣。但在現(xiàn)實(shí)中,代幣之間有著各種各樣的聯(lián)系。例如代幣會(huì)將共享腳本也應(yīng)該連接起來(lái)。擁有相同標(biāo)簽的代幣也會(huì)連接起來(lái)。
好吧,但是為什么要擔(dān)心重量呢?以一筆交易為例:
假設(shè)輸入#0(代幣#0)和輸出#2(代幣#1)來(lái)自同一個(gè)用戶,有6種不同的輸出,所以代幣#1的匿名集是6。但是如果0號(hào)代幣和1號(hào)代幣在同一個(gè)地址呢?那么1號(hào)代幣的匿名集就是1。我們?cè)赪asabi中處理這種關(guān)系,但是,這些額外的檢查和啟發(fā)是資源密集型的,并且遍布整個(gè)代碼庫(kù)。最好將這種關(guān)系添加到圖的邊緣,完全放棄匿名集的概念,轉(zhuǎn)而使用概率模型。
然后我們可以這樣說(shuō):
· 如果沒有標(biāo)簽或腳本匹配,則代幣1號(hào)和代幣0號(hào)鏈接的強(qiáng)度為1/6。
· 如果存在標(biāo)簽、腳本或腳本匹配,則無(wú)論交易如何,鏈接的強(qiáng)度都為1。
引入更多的連接,并認(rèn)識(shí)到鏈接的強(qiáng)度是圖的權(quán)重。這將使我們能夠做很多瘋狂的圖論的事情。例如,我們將能夠決定哪些代幣是最合理的合并在一起,這將導(dǎo)致最小的隱私妥協(xié),只要看看重量!
蝴蝶效應(yīng)
像這樣的概念乍一看似乎無(wú)關(guān)緊要,但是在這些層次上的改變和調(diào)整會(huì)產(chǎn)生深遠(yuǎn)的影響。之前,我以一種非常有趣的方式討論了導(dǎo)致深遠(yuǎn)影響的小變化,所以您可能想嘗試一下。





