vb連接比特幣節點
㈠ 區塊鏈如何提高tps,區塊鏈如何提高效率
區塊鏈的TPS眾所周知,比特幣每秒只能進行大約7筆交易,以太坊稍微好一些,也就10-20筆。作為一個支付系統,這是遠遠遠遠不夠的,經常也有人拿這點來說事,認為區塊鏈效率低雲雲。
其實現在有很多的方案在試圖解決TPS的問題,比如說fabric可以到數千的TPS,石墨烯系列可以到上萬的TPS,比特幣和以太坊的Off-chain方案理論上支持無限的TPS。那麼是不是說這些新的技術才是區塊鏈的未來呢?這個問題總是很難回答,要說一大堆共識,分布式,安全之類的事情。
過年期間看了BM的一個訪談,他提到了VB的一個理論,Scalability,Decentralization和Security在區塊鏈中不能兼顧,類似於分布式系統裡面的CAP理論。
我發現這個理論用來解釋區塊鏈技術真是簡單粗暴而有效。
比如說:聯盟鏈通過准入機制,控制了驗證節點的數量,通過犧牲Decentralization提升了Scalability;石墨烯系列的DPOS,RippleNet的共識也是同理;比特幣通過提高每個區塊的容量,也可以達到擴容的目的,但結果是對礦機提出了更高的要求,形成自然的准入門檻,實際上也是犧牲了Decentralization;比特幣和以太坊挖礦難度都可以調整,降低挖礦難度實際上也可以提升Scalability,但付出的代價是抗攻擊能力下降了,犧牲的是Security。
但這個理論放在off-chain類型的方案上就失效了,比如說閃電網路(雷電網路),以太坊的plasma還有R3Corda(這個比較特殊,直接把鏈都省了)。對off-chain方案原理感興趣的童鞋移步這里,。大致方案就是交易雙方鎖定準備金,把海量的交易打包以後上鏈,鏈上只保存交易的最終結果。通過智能合約和線下的多重簽名機制,作弊方將會被罰沒准備金。
Off-chain方案看上去很完美,保證Decentralization和Security,同時無限擴展。
但天下沒有免費的午餐,我們以閃電網路為例(事實上plasma我還沒完全理解?),至少它有下面幾個缺點:
1.閃電網路中鎖定的比特幣只能用在閃電網路中,只有交易通道關閉的時候才能真正成為鏈上承認的貨幣,這在理論上會出現類似銀行擠兌的情況。如果大家對閃電網路失去信心,集中關閉通道,會拖垮比特幣網路。但,這個似乎也不是很大的問題,只要閃電網路沒有爆出什麼漏洞,比如說簽名演算法被攻破之類的。
2.交易是在鏈外執行,鏈上無法驗證提交的交易是否最新版本,雖然腳本保證了提交舊版本交易的攻擊者有被罰沒准備金的風險,但前提是要防禦者監控網路並提交更新版本交易的證據。也就是說從原來比特幣的被動防禦(私鑰不丟失就能保證資金安全)轉變成主動防禦。從這個角度看也算是降低了Security吧。這個主動防禦的操作交給用戶也不太現實,最終必然會衍生出一些服務公司,代替用戶保存鏈外交易憑證,並防止作弊。某種意義上面又從「去中介化的信任」轉變為需要信任中介了。這個角度看,似乎也是犧牲了Decentralization。
3.閃電網路中只有保存最終的資金狀態保存,中間的交易細節全部被忽略,支持者認為是保護了用戶的隱私,反對者認為是損失了交易數據。
4.因為通道需要准備金維持,不可能任意兩個用戶間都存在交易通道,用戶之間轉賬可以通過中轉的方法,最終很可能會有大資金形成中心化的中轉節點。
OdinChain奧丁公鏈的銷毀機制體現在哪些方面?有什麼實際意義?一、全球首個基於VRF的VDPoS共識
瑞策科技自主研發的區塊鏈曉電曉受曉受曉曉曉多曉電曉米曉受曉聯曉受曉零曉電曉受曉米曉多曉曉e少量惠量量e米惠d量曉曉受曉曉曉聯曉受曉少曉受曉惠基礎平台使用一種全新的共識演算法:VDPoS(ValidatedDPoS,可驗證的DPoS)共識,該演算法是DPoS+BFT+驗證節點的有機結合,在DPoS共識的基礎上引入驗證節點,基於VRF隨機抽簽機制選擇驗證節點,驗證節點使用BFT共識對區塊進行二次驗證。
二、全球首個DPoS類共識的分片
瑞策科技自主研發的區塊鏈基礎平台將在VDPoS共識的基礎上進行分片,進一步提高區塊鏈的TPS。我們使用多主鏈+多子鏈的混合架構,為全球第一個使用此種混合架構的區塊鏈。根據整個區塊鏈的資源利用情況自動對超級節點進行分片,形成多主鏈並行出塊模式,充分利用網路資源和超級節點資源,極大的提高出塊速度,增+區塊鏈的垂直擴展性;同時在主鏈之上可以根據應用的使用情況,啟動多條子鏈,以支持更多的DApp業務數據上鏈,增+區塊鏈的水平擴展性。
三、全球首個三維數據上鏈
瑞策科技自主研發的區塊鏈基礎平台可以將業務數據結構化上鏈,形成獨有的三維數據上鏈模型。傳統區塊鏈僅將數據內容或者哈希上鏈,上鏈的數據並不是結構化的,不能表達數據之間的關聯、屬性和數據之間的關聯等信息,無法真正保證數據的可信。我們使用結構化的方式保存業務數據,通過鏈的共識保證業務數據的可信。業務數據可以通過鏈本身進行自解釋,不再需要通過第三方應用對非結構化的數據進行解釋,真正實現了數據的可信、確保了數據的價值傳遞。
區塊鏈的TPS是什麼
TPS英文全稱是TransactionPerSecond,應用在數字貨幣,TPS指的是系統吞度量,也是每秒系統處理的數量。假如TPS每秒並發太低,很容易造成網路擁堵嚴重,從而使得區塊鏈在高價值的高並發業務領域無法落地。比如,由於TPS每秒並發太低,比特幣和以太坊都存在交易費用高、確認時間長、擴展性差的問題,比特幣社區因此產生分裂,硬分叉成為常態。
目前很多幣在TPS上做文章,希望能避開比特幣的劣勢。比如說ULAM、USDT、USC、幾種貨幣,他們的吞吐量分別是最低1萬TPS確認、7TPS確認、100TPS確認,我們可以對比他們TPS的高低來辨別他們的速度。
眾所周知,比特幣每秒只能進行大約7筆交易
以太坊稍微好一些,也就10-20筆。
作為一個支付系統,這是遠遠遠遠不夠的,經常也有人拿這點來說事,認為區塊鏈效率低雲雲。
最近發現了一個非常不錯,並且高TPS的公鏈:ULAM公鏈。
ULAM是繼POW、POS、DPOS、PBFT類共識演算法之後的第五個在共識演算法上有重大創新的區塊鏈項目。
ULAM共識演算法其利用哈希函數的特性創造出超低能耗、完全去中心化、高度穩定的區塊鏈系統;是目前唯一一個成功打破區塊鏈「不可能三角」的全新共識演算法。ULAM不需要進行哈希計算競賽,可以允許低功耗的手機、智能手錶、路由器等參與「挖礦」。ULAM設計的全新非互動式交易驗證演算法(NITCV),可以使TPS最低達到1萬。ULAM使用知識證明的方法構造出非互動式交易驗證演算法。ULAM具有超級碎片化節點;完全去中心化;抗算力集中;49%容錯率;抗量子攻擊;
Nio能提高tps嗎可以
FastFabric:提升HyperledgerFabric性能到20000TPS。摘要預計區塊鏈技術將對各種行業產生重大影響。然而,阻礙它們的一個問題是它們有限的交易吞吐量,特別是與諸如分布式資料庫系統之類的已建立的解決方
什麼是比特幣系統的tps,現有的提升tps的方法或者思路有哪些??求大佬們幫我解答,特別著急謝謝!TPS,通俗的定義,就是「系統的吞吐量」,專業一點的解釋,就是「系統每秒鍾能夠處理的業務數量」。估計大部分人的理解,也就到此為止了。然而,這是非常表面的理解,對妨忽悠,對求證價值幾乎沒有意義,甚至還有負面效果!現在有的提升TPS技術有側鏈技術,分片技術,我是小菊專注區塊鏈領域
以太坊聯合創始人表示,"匯總將推動ETH2.0達到100kTPSTPS度量標准被認為是任何區塊鏈可擴展性的標准。
高TPS意味著經過考驗的網路,能夠擴展和快速處理用戶交易。這部分有助於將區塊鏈定位為集中式提供商的穩定替代方案。
目前,比特幣提供4TPS,而以太坊則提高到15TPS。NEO和Cardano等較小的加密貨幣稱正在建立達到1,000TPS的框架。
現在,隨著ETH2.0的到來,該協議可能會逐漸看到超過100,000TPS,並計劃隨著「分片」的部署最終擴展到超過一百萬。
如果發生這種情況,公共區塊鏈比VISA慢的流行論點將被推翻。
六位數TPS即將進入以太坊
以太坊現年26歲的聯合創始人VitalikButerin在本周早些時候發布了推文:
ETH2.0對數據的擴展將先於一般計算,解釋了以ETH1.0作為數據層的2-3kTPS,然後用ETH2.0達到100kTPS(階段1)。
-vitalik.eth(@VitalikButerin)2020年6月30日
Buterin在線評論中指出「匯總可能會增加到成千上萬個,」並補充說,碎片不需要「彼此同步交談,從而能夠實現結合了碎片可伸縮性的同步匯總。」
在相關的Reddit帖子上,Buterin給出了數學公式:
「64個分片*每個分片每個塊256kB/12s插槽時間=1.33MB/秒。匯總:如果打包得當,則每tx約10-12個位元組。1.33m/(10…12)100k。」
他補充說,計算的前提是匯總「准備就緒,第1階段分片准備就緒,並且人們實際使用了該技術。」
*截至6月30日的以太坊的TPS
"匯總"是什麼?
對於初學者而言,匯總是第2層框架,可幫助將網路擴展到當前級別的倍數。匯總以其最基本的形式以壓縮形式存儲在以太坊區塊鏈上的交易數據,而繁重的計算則發生在鏈下。
一個例子是樂觀匯總,它最初由Buterin在2018年提出。一些團隊也在構建特定於應用程序的zk-Rollup,並在相同的體系結構設計上進行迭代以滿足他們的需求。
㈡ 區塊鏈的TPS
眾所周知,比特幣每秒只能進行大約7筆交易,以太坊稍微好一些,也就10-20筆。作為一個支付系統,這是遠遠遠遠不夠的,經常也有人拿這點來說事,認為區塊鏈效率低雲雲。
其實現在有很多的方案在試圖解決TPS的問題,比如說fabric可以到數千的TPS,石墨烯系列可以到上萬的TPS,比特幣和以太坊的Off-chain方案理論上支持無限的TPS。那麼是不是說這些新的技術才是區塊鏈的未來呢?這個問題總是很難回答,要說一大堆共識,分布式,安全之類的事情。
過年期間看了BM的一個訪談,他提到了VB的一個理論,Scalability,Decentralization和Security在區塊鏈中不能兼顧,類似於分布式系統裡面的CAP理論。
我發現這個理論用來解釋區塊鏈技術真是簡單粗暴而有效。
比如說:聯盟鏈通過准入機制,控制了驗證節點的數量,通過犧牲Decentralization提升了Scalability;石墨烯系列的DPOS,RippleNet的共識也是同理;比特幣通過提高每個區塊的容量,也可以達到擴容的目的,但結果是對礦機提出了更高的要求,形成自然的准入門檻,實際上也是犧牲了Decentralization;比特幣和以太坊挖礦難度都可以調整,降低挖礦難度實際上也可以提升Scalability,但付出的代價是抗攻擊能力下降了,犧牲的是Security。
但這個理論放在off-chain類型的方案上就失效了,比如說閃電網路(雷電網路),以太坊的plasma還有R3 Corda(這個比較特殊,直接把鏈都省了)。對off-chain方案原理感興趣的童鞋移步這里, http://www.8btc.com/ln-rn-corda 。大致方案就是交易雙方鎖定準備金,把海量的交易打包以後上鏈,鏈上只保存交易的最終結果。通過智能合約和線下的多重簽名機制,作弊方將會被罰沒准備金。
Off-chain方案看上去很完美,保證Decentralization和Security,同時無限擴展。
但天下沒有免費的午餐,我們以閃電網路為例(事實上plasma我還沒完全理解😅),至少它有下面幾個缺點:
1.閃電網路中鎖定的比特幣只能用在閃電網路中,只有交易通道關閉的時候才能真正成為鏈上承認的貨幣,這在理論上會出現類似銀行擠兌的情況。如果大家對閃電網路失去信心,集中關閉通道,會拖垮比特幣網路。但,這個似乎也不是很大的問題,只要閃電網路沒有爆出什麼漏洞,比如說簽名演算法被攻破之類的。
2.交易是在鏈外執行,鏈上無法驗證提交的交易是否最新版本,雖然腳本保證了提交舊版本交易的攻擊者有被罰沒准備金的風險,但前提是要防禦者監控網路並提交更新版本交易的證據。也就是說從原來比特幣的被動防禦(私鑰不丟失就能保證資金安全)轉變成主動防禦。從這個角度看也算是降低了Security吧。這個主動防禦的操作交給用戶也不太現實,最終必然會衍生出一些服務公司,代替用戶保存鏈外交易憑證,並防止作弊。某種意義上面又從「去中介化的信任」轉變為需要信任中介了。這個角度看,似乎也是犧牲了Decentralization。
3.閃電網路中只有保存最終的資金狀態保存,中間的交易細節全部被忽略,支持者認為是保護了用戶的隱私,反對者認為是損失了交易數據。
4.因為通道需要准備金維持,不可能任意兩個用戶間都存在交易通道,用戶之間轉賬可以通過中轉的方法,最終很可能會有大資金形成中心化的中轉節點。
㈢ 比特幣如何防止篡改
比特幣網路主要會通過以下兩種技術保證用戶簽發的交易和歷史上發生的交易不會被攻擊者篡改:
非對稱加密可以保證攻擊者無法偽造賬戶所有者的簽名;
共識演算法可以保證網路中的歷史交易不會被攻擊者替換;
- 非對稱加密演算法3是目前廣泛應用的加密技術,TLS 證書和電子簽名等場景都使用了非對稱的加密演算法保證安全。非對稱加密演算法同時包含一個公鑰(Public Key)和一個私鑰(Secret Key),使用私鑰加密的數據只能用公鑰解密,而使用公鑰解密的數據也只能用私鑰解密。
- 1使用如下所示的代碼可以計算在無限長的時間中,攻擊者持有 51% 算力時,改寫歷史 0 ~ 9 個區塊的概率9:
- #include
- #include
- double attackerSuccessProbability(double q, int z) {
- double p = 1.0 - q;
- double lambda = z * (q / p);
- double sum = 1.0;
- int i, k;
- for (k = 0; k <= z; k++) {
- double poisson = exp(-lambda);
- for (i = 1; i <= k; i++)
- poisson *= lambda / i;
- sum -= poisson * (1 - pow(q / p, z - k));
- }
- return sum;
- }
- int main() {
- for (int i = 0; i < 10; i++) {
- printf("z=%d, p=%f\n", i, attackerSuccessProbability(0.51, i));
- }
- return 0;
- }
- 通過上述的計算我們會發現,在無限長的時間中,佔有全網算力的節點能夠發起 51% 攻擊修改歷史的概率是 100%;但是在有限長的時間中,因為比特幣中的算力是相對動態的,比特幣網路的節點也在避免出現單節點佔有 51% 以上算力的情況,所以想要篡改比特幣的歷史還是比較困難的,不過在一些小眾的、算力沒有保證的一些區塊鏈網路中,51% 攻擊還是極其常見的10。
- 防範 51% 攻擊方法也很簡單,在多數的區塊鏈網路中,剛剛加入區塊鏈網路中的交易都是未確認的,只要這些區塊後面追加了數量足夠的區塊,區塊中的交易才會被確認。比特幣中的交易確認數就是 6 個,而比特幣平均 10 分鍾生成一個塊,所以一次交易的確認時間大概為 60 分鍾,這也是為了保證安全性不得不做出的犧牲。不過,這種增加確認數的做法也不能保證 100% 的安全,我們也只能在不影響用戶體驗的情況下,盡可能增加攻擊者的成本。
- 研究比特幣這樣的區塊鏈技術還是非常有趣的,作為一個分布式的資料庫,它也會遇到分布式系統經常會遇到的問題,例如節點不可靠等問題;同時作為一個金融系統和賬本,它也會面對更加復雜的交易確認和驗證場景。比特幣網路的設計非常有趣,它是技術和金融兩個交叉領域結合後的產物,非常值得我們花時間研究背後的原理。
- 比特幣並不能 100% 防止交易和數據的篡改,文中提到的兩種技術都只能從一定概率上保證安全,而降低攻擊者成功的可能性也是安全領域需要面對的永恆問題。我們可以換一個更嚴謹的方式闡述今天的問題 — 比特幣使用了哪些技術來增加攻擊者的成本、降低交易被篡改的概率:
比特幣使用了非對稱加密演算法,保證攻擊者在有限時間內無法偽造賬戶所有者的簽名;
比特幣使用了工作量證明的共識演算法並引入了記賬的激勵,保證網路中的歷史交易不會被攻擊者快速替換;
- 通過上述的兩種方式,比特幣才能保證歷史的交易不會被篡改和所有賬戶中資金的安全。
非對稱加密
圖 4 - 51% 攻擊
總結
㈣ 電腦病毒比拼,比特幣和熊貓燒香有哪些相似與不同
近年來的病毒,這里特指蠕蟲病毒。
Stuxnet蠕蟲,MS10-061,當蠕蟲值入機器後,把自己設置成開機自啟動,並釋放驅動文件,把該驅動設置為服務自啟動。該驅動負責突破系統TCP半開連接數限制,以方便蠕蟲通過網路傳播。感染系統的可移動驅動器(即U盤等),可通過U盤傳播自身。通過MS10-061列印機服務遠程代碼執行漏洞在區域網傳播自身。並嘗試利用一些弱口令企圖猜解並取得主機許可權,危及整個網路的安全。為計算機設置了一個後門,不斷嘗試連接遠程黑客伺服器,收集用戶信息,接收黑客指令,並可獲取黑客遠程伺服器木馬並執行,帶來嚴重安全隱患。
熊貓燒香對我來說有點久遠,雖然我有初始的蠕蟲病毒,但沒有解析關鍵的代碼,只從網路中找到說是變了50次的變種一部分。
熊貓燒香是不會損害文件的,但這個是可以的。
.doc, .docx, .xls, .xlsx, .ppt, .pptx, .pst, .ost, .msg, .eml, .vsd, .vsdx, .txt, .csv, .rtf, .123, .wks, .wk1, .pdf, .dwg, .onetoc2, .snt, .jpeg, .jpg, .docb, .docm, .dot, .dotm, .dotx, .xlsm, .xlsb, .xlw, .xlt, .xlm, .xlc, .xltx, .xltm, .pptm, .pot, .pps, .ppsm, .ppsx, .ppam, .potx, .potm, .edb, .hwp, .602, .sxi, .sti, .sldx, .sldm, .sldm, .vdi, .vmdk, .vmx, .gpg, .aes, .ARC, .PAQ, .bz2, .tbk, .bak, .tar, .tgz, .gz, .7z, .rar, .zip, .backup, .iso, .vcd, .bmp, .png, .gif, .raw, .cgm, .tif, .tiff, .nef, .psd, .ai, .svg, .djvu, .m4u, .m3u, .mid, .wma, .flv, .3g2, .mkv, .3gp, .mp4, .mov, .avi, .asf, .mpeg, .vob, .mpg, .wmv, .fla, .swf, .wav, .mp3, .sh, .class, .jar, .java, .rb, .asp, .php, .jsp, .brd, .sch, .dch, .dip, .pl, .vb, .vbs, .ps1, .bat, .cmd, .js, .asm, .h, .pas, .cpp, .c, .cs, .suo, .sln, .ldf, .mdf, .ibd, .myi, .myd, .frm, .odb, .dbf, .db, .mdb, .accdb, .sql, .sqlitedb, .sqlite3, .asc, .lay6, .lay, .mml, .sxm, .otg, .odg, .uop, .std, .sxd, .otp, .odp, .wb2, .slk, .dif, .stc, .sxc, .ots, .ods, .3dm, .max, .3ds, .uot, .stw, .sxw, .ott, .odt, .pem, .p12, .csr, .crt, .key, .pfx, .der
這些都是病毒會攻擊的文檔後綴。
和熊貓不同的是,它會通過tor匿名,監聽9050埠,通過本地代理通信實現與伺服器連接。
㈤ 什麼是utxo區塊鏈
區塊鏈的核心技術是什麼?簡單來說,區塊鏈是一個提供了拜占庭容錯、並保證了最終一致性的分布式資料庫;從數據結構上看,它是基於時間序列的鏈式數據塊結構;從節點拓撲上看,它所有的節點互為冗餘備份;從操作上看,它提供了基於密碼學的公私鑰管理體系來管理賬戶。
或許以上概念過於抽象,我來舉個例子,你就好理解了。
你可以想像有100台計算機分布在世界各地,這100台機器之間的網路是廣域網,並且,這100台機器的擁有者互相不信任。
那麼,我們採用什麼樣的演算法(共識機制)才能夠為它提供一個可信任的環境,並且使得:
節點之間的數據交換過程不可篡改,並且已生成的歷史記錄不可被篡改;
每個節點的數據會同步到最新數據,並且會驗證最新數據的有效性;
基於少數服從多數的原則,整體節點維護的數據可以客觀反映交換歷史。
區塊鏈就是為了解決上述問題而產生的技術方案。
二、區塊鏈的核心技術組成
無論是公鏈還是聯盟鏈,至少需要四個模塊組成:P2P網路協議、分布式一致性演算法(共識機制)、加密簽名演算法、賬戶與存儲模型。
1、P2P網路協議
P2P網路協議是所有區塊鏈的最底層模塊,負責交易數據的網路傳輸和廣播、節點發現和維護。
通常我們所用的都是比特幣P2P網路協議模塊,它遵循一定的交互原則。比如:初次連接到其他節點會被要求按照握手協議來確認狀態,在握手之後開始請求Peer節點的地址數據以及區塊數據。
這套P2P交互協議也具有自己的指令集合,指令體現在在消息頭(MessageHeader)的命令(command)域中,這些命令為上層提供了節點發現、節點獲取、區塊頭獲取、區塊獲取等功能,這些功能都是非常底層、非常基礎的功能。如果你想要深入了解,可以參考比特幣開發者指南中的PeerDiscovery的章節。
2、分布式一致性演算法
在經典分布式計算領域,我們有Raft和Paxos演算法家族代表的非拜占庭容錯演算法,以及具有拜占庭容錯特性的PBFT共識演算法。
如果從技術演化的角度來看,我們可以得出一個圖,其中,區塊鏈技術把原來的分布式演算法進行了經濟學上的拓展。
在圖中我們可以看到,計算機應用在最開始多為單點應用,高可用方便採用的是冷災備,後來發展到異地多活,這些異地多活可能採用的是負載均衡和路由技術,隨著分布式系統技術的發展,我們過渡到了Paxos和Raft為主的分布式系統。
而在區塊鏈領域,多採用PoW工作量證明演算法、PoS權益證明演算法,以及DPoS代理權益證明演算法,以上三種是業界主流的共識演算法,這些演算法與經典分布式一致性演算法不同的是,它們融入了經濟學博弈的概念,下面我分別簡單介紹這三種共識演算法。
PoW:通常是指在給定的約束下,求解一個特定難度的數學問題,誰解的速度快,誰就能獲得記賬權(出塊)權利。這個求解過程往往會轉換成計算問題,所以在比拼速度的情況下,也就變成了誰的計算方法更優,以及誰的設備性能更好。
PoS:這是一種股權證明機制,它的基本概念是你產生區塊的難度應該與你在網路里所佔的股權(所有權佔比)成比例,它實現的核心思路是:使用你所鎖定代幣的幣齡(CoinAge)以及一個小的工作量證明,去計算一個目標值,當滿足目標值時,你將可能獲取記賬權。
DPoS:簡單來理解就是將PoS共識演算法中的記賬者轉換為指定節點數組成的小圈子,而不是所有人都可以參與記賬。這個圈子可能是21個節點,也有可能是101個節點,這一點取決於設計,只有這個圈子中的節點才能獲得記賬權。這將會極大地提高系統的吞吐量,因為更少的節點也就意味著網路和節點的可控。
3、加密簽名演算法
在區塊鏈領域,應用得最多的是哈希演算法。哈希演算法具有抗碰撞性、原像不可逆、難題友好性等特徵。
其中,難題友好性正是眾多PoW幣種賴以存在的基礎,在比特幣中,SHA256演算法被用作工作量證明的計算方法,也就是我們所說的挖礦演算法。
而在萊特幣身上,我們也會看到Scrypt演算法,該演算法與SHA256不同的是,需要大內存支持。而在其他一些幣種身上,我們也能看到基於SHA3演算法的挖礦演算法。以太坊使用了Dagger-Hashimoto演算法的改良版本,並命名為Ethash,這是一個IO難解性的演算法。
當然,除了挖礦演算法,我們還會使用到RIPEMD160演算法,主要用於生成地址,眾多的比特幣衍生代碼中,絕大部分都採用了比特幣的地址設計。
除了地址,我們還會使用到最核心的,也是區塊鏈Token系統的基石:公私鑰密碼演算法。
在比特幣大類的代碼中,基本上使用的都是ECDSA。ECDSA是ECC與DSA的結合,整個簽名過程與DSA類似,所不一樣的是簽名中採取的演算法為ECC(橢圓曲線函數)。
從技術上看,我們先從生成私鑰開始,其次從私鑰生成公鑰,最後從公鑰生成地址,以上每一步都是不可逆過程,也就是說無法從地址推導出公鑰,從公鑰推導到私鑰。
4、賬戶與交易模型
從一開始的定義我們知道,僅從技術角度可以認為區塊鏈是一種分布式資料庫,那麼,多數區塊鏈到底使用了什麼類型的資料庫呢?
我在設計元界區塊鏈時,參考了多種資料庫,有NoSQL的BerkelyDB、LevelDB,也有一些幣種採用基於SQL的SQLite。這些作為底層的存儲設施,多以輕量級嵌入式資料庫為主,由於並不涉及區塊鏈的賬本特性,這些存儲技術與其他場合下的使用並沒有什麼不同。
區塊鏈的賬本特性,通常分為UTXO結構以及基於Accout-Balance結構的賬本結構,我們也稱為賬本模型。UTXO是「unspenttransactioninput/output」的縮寫,翻譯過來就是指「未花費的交易輸入輸出」。
這個區塊鏈中Token轉移的一種記賬模式,每次轉移均以輸入輸出的形式出現;而在Balance結構中,是沒有這個模式的。
數字貨幣里的UTXO什麼意思?UTXO的中文意思叫作:未花費的交易輸出。
UTXO是數字貨幣中的賬戶模型,這個模型和我們現在銀行的賬戶模型是不一樣的。
拿轉賬來說,現在的情況是:
我要給依依轉2000塊錢,我要從我的招商銀行卡裡面給她轉賬,我的卡裡面有5000塊錢,轉給她2000塊錢以後,我的招商銀行賬戶就被扣除了2000塊錢,還剩下3000塊錢。
那麼如果是基於比特幣的UTXO,情況是這樣的:
我有5000比特幣,我給依依轉2000比特幣,2000比特幣消耗掉了對不對?注意!這2000不是從我這5000總數裡面扣除的,而是:我的比特幣總額會分成兩份(一份
2000,一份3000),這就是所謂「生成兩個新的UTXO」:依依收下2000比特幣,我自己收下3000比特幣,3000算是給我的找零。
轉賬成功以後,我給依依的2000比特幣目前已經使用過了,被消耗掉了,就不能再叫UTXO了,而找零給我的3000比特幣目前我還沒有使用,所以它還能稱作UTXO,也就是未花費的交易輸出。那麼,如果我總共有5000比特幣,我全部轉給依依,那麼就只需要生成一個新的
UTXO給依依就可以了,不需要找零了。
基於UTXO,每筆交易出現,都要確認比特幣之前的情況,檢驗比特幣是不是存在於我的UTXO中,如果不存在,那麼系統就會拒絕你的交易行為。
這樣一來,每筆交易的輸入和輸出都是有關系的,可以通過UTXO不斷向前追溯,一直追溯到比特幣誕生的時候,也就是挖礦的源頭。
如果我想用同一筆UTXO發送給兩個人,那麼系統只確認先接受到的那一筆,一旦確認UTXO已經被消耗了,那麼你就不可以再把它轉給下一個人,這樣就避免了雙重支付的問題。
既然系統只確認先接受到的那一筆,那麼問題來了,系統怎麼知道誰先誰後呢?系統當然知道,因為系統有一個叫「時間戳」的東西。
什麼是區塊鏈?不是比特幣進化慢,而是我們進化慢
自從區塊鏈(blockchain)這個詞被從比特幣中抽象出來之後,整個業內就彌漫著一種奇特的意識形態敘事(ideologicalnarrative)。這個敘事是這樣的:比特幣是一架又慢又舊的破馬車,十幾年了沒有什麼改進,什麼炫酷的功能都沒有。當然,從人類「無利不起早」的天然本性而言,給你講這么一通破爛話的人,絕對不是吃飽了撐的無事生非,而通常都會在看到你對手裡的大餅(BTC)起了半信半疑之心之後,趁機向你推銷他正在兜售的拉風跑車項目。
北京時間11月14號下午13點15分27秒,隨著區塊高度709632的區塊被挖出,比特幣自2017年隔離見證升級之後最重要的升級之一,Taproot升級,宣告成功激活(今年6月份就已經獲得超90%礦工投票lock-in了,本次激活屬於明牌)。
該區塊中包含了chainside聯合創始人FedericoTenga的一筆V1_P2TR交易。在該筆交易中,Federico在OP_RETURNDATA中附加了一句話:gmtaproot。據信,這是歷史上第一筆Taproot交易。為了搶到這個名次,Federico支付了2510sat/vB的礦工費(手續費),這大概是正常礦工費(不到10sat/vB)的5百多倍。[1]
Taproot升級為我們帶來了區塊擴容、更好的隱私性以及增強的擴展性等諸多好處。這些好處主要是由於兩項技術的引入而帶來的。其一就是Schnorr簽名,而另一個就是MAST(默克爾化的抽象語法樹)。
Schnorr簽名能夠壓縮數字簽名的尺寸。單簽名比ECDSA節省約12%的尺寸,也就可以節省轉賬手續費。以及,它能夠把多簽名壓縮成一個簽名,這可以極大壓縮多簽地址的尺寸,並保護多簽參與者的隱私。據說早在2012年MikeHearn就在bitcointalk論壇提出過類似想法。通過壓縮簽名尺寸,相當於擴大了區塊容量,容納更多交易量。
MAST則可以大大改善P2SH交易的交易尺寸、隱私性和靈活性。最早的BIP-114提案是由JohnsonLau於2016年提出的。早前的P2SH交易可以允許支付時不揭示script(比特幣腳本代碼)。但是,當花費UTXO(未花費的交易輸出)時,便需要提供script且記錄到鏈上,從而占據區塊鏈的容量。如果script比較復雜,則會占據較多的空間。MAST的引入使得我們可以把包含很多條件的復雜腳本組織成默克爾樹。在花費UTXO時,也只需要揭示默克爾證明和涉及的script,而不需要揭示整顆樹。這就節省了區塊容量,改善了腳本的隱私性。同時,由於打開了script尺寸的限制,這就為比特幣的可編程性引入了更大的擴展性和靈活性。
應該說,上面幾段話對一些只在中心化交易所炒炒幣,甚至連私鑰都不懂的朋友來說無異於天書。別說Taproot了,便是4年前的segwit(隔離見證),對很多所謂圈內的人來說都不知何物。這沒有什麼可恥的。我頭一次看這些新技術、新名詞也是腦袋爆炸。多學習,多研究,多琢磨琢磨,也就搞明白了。
相比於科技的進步,我們掌握知識的能力進化的實在是太慢了。時至今日,很多人還搞不清楚比特幣究竟是存儲在自己手機上的錢包里,還是在比特幣網路上。自己手機或者電腦上的錢包軟體又是起什麼作用的。私鑰是什麼,助記詞是什麼,所謂的HD錢包又是什麼。1開頭的地址,3開頭的地址,5開頭的地址,bc1開頭的地址都有啥分別。怎麼把大餅從交易所提出來,放到所謂鏈上。怎麼自己掌控自己的比特幣。怎麼簽名轉賬比特幣。怎麼使用隔離見證地址。以及現在,如何構建Taproot交易呢?
有人於是說,那就不要讓用戶自己掌握私鑰,遠離這些技術細節好了。回到託管式的環境,回到互聯網中心化的用戶體驗。這樣一種用戶體驗的改善,就像中心化交易所一樣,是以犧牲用戶自主掌握資產為代價的。這直接拋棄了去中心化以來全部的價值觀。這又是一種進化,還是一種退化呢?
如果只是為了發明一個噱頭,讓投機者去炒、去賭,那就盡可以不考慮這些。那就不僅不應該限制OP_RETURN的尺寸,甚至應該擴充script使之支持圖靈完備的編程。這樣就可以在比特幣上發行各種空氣幣、土狗幣,再搞出來各種為炒而生的應用出來,所謂繁榮的生態。但是比特幣一路走來,似乎是走了相反的道路。不僅從一開始就極大限制了script的功能,而且主動縮短了OP_RETURN的數據尺寸,限制了在比特幣鏈上玩各種花活兒的可能性。
比特幣是審慎的。它清楚自己有更大的使命。Taproot的激活,可能會有利於二層的發展。但是,並不會給一層帶來自限性的問題。相反的,它會因為壓縮了數據尺寸,而擴大了一層的容量。
比特幣是富有耐心的。它肩負著普及去中心化數字貨幣(而不是在中心化平台上進行投機)的歷史任務。所以它必須耐心地等待,等待每一個人跟上技術發展的腳步。
UXTO與余額區塊鏈入門從使用錢包開始,我們最關注的是錢包的賬戶余額。可看過很多區塊鏈資料以後,一直存在一個疑問,錢包的余額信息存在區塊鏈的什麼位置?一直沒有找到,只有一個相近的概念叫UTXO(UnspentTransactionOutput),但看完以後還是對應不上。直到翻遍網上所有關於UXTO的資料,才知道在中本聰設計的比特幣系統中,並沒有餘額這個概念,「比特幣余額」是由比特幣等錢包應用派生出來的產物。錢包的余額是通過與賬戶相關的多個UXTO算出來的。下面且聽我詳細道來。
了解過一點點會計學,我們現在的會計系統絕大部分採用的是一種叫做「借貸記賬法」的方法,賬目分成借方和貸方,每發生一筆業務都要登記兩個以上的科目。
簡單來說,Alice轉賬給Bob1美元,使用借貸記賬法至少要產生兩條賬目,Alice賬戶減少1美元,Bob賬戶增加1美元。這種記賬法在企業經營、企業審計中有無數的好處。但是這種記賬法也有一個最大的缺點,就是容易產生記賬錯誤和記賬誤差。一筆交易需要登記兩條以上的賬目,本質上記錄的是「交易的結果」,而不是「交易本身」。
中本聰發明了UTXO(UnspentTransactionOutput)交易模型,並將其應用到比特幣當中。UTXO是「未花費的交易輸出」,簡單來說就是,每一筆比特幣交易實際上都是由若干個交易輸入和輸出組成的。交易輸入是資金來源,交易輸出是資金去向,每一筆交易都要從交易輸入中花費出去一部分,這一部分就是未花費的交易輸出(UTXO)。每一次的交易輸入都可以追溯到之前的UTXO,直至最初的挖礦所得。
由挖礦所得創建的比特幣交易,是每個區塊中的首個交易,又稱之為coinbase交易,它由礦工創建,沒有上一筆交易輸出。
在比特幣交易中UTXO就是基本單位,一個UTXO一旦被創建就不可被繼續分割,它只能當作是下一筆交易的輸入被花費掉,花費後產生新的UTXO,這樣周而復始地實現貨幣的價值轉移。所以我們在比特幣錢包中所看到的賬戶余額,實際上是錢包通過掃描區塊鏈並聚合所有屬於該用戶的UTXO計算得來的。
因此,當我們在說某人擁有1枚比特幣的時候,我們實際上說的是,在當前的區塊鏈記錄中,有若干筆交易的UTXO收款地址寫的是這個人的錢包地址,這些UTXO的總和是1個比特幣。
比特幣的UXTO系統遵守兩個規則:
我們以以太賬戶為例,打開etherscan.io,選擇BLOCKCHAIN-AllAccounts,這樣可以看到所有地址與余額,可以選擇其中一個查看詳細信息。如果看不懂,沒關系,把自己的以太地址輸入到右上角的搜索框回車後,會顯示地址的余額和詳細交易記錄,如下圖。
至此,我能理解李笑來老師說為什麼他的賬戶沒有餘額,只有UXTO了,O(∩_∩)O哈哈~,內行人不要說外行話嘛。