
發表時間:2021年10月19日
資訊來源:bitcoinsv.io

BSV節點軟體v1.0.9(正式版)是在v1.0.8(正式版)基礎之上的推薦升級版本;這次升級版本改進了安全模式下的處理性能,同時增設了網路回呼(webhook)通知、區塊內發生雙花時的點對點通知訊息、以及允許在雙花發生時凍結其對應的交易輸出,
詳細內容列示如下:
- 在區塊內有雙花發生時,新增點對點通知訊息,*
- 改進了的安全模式下的處理性能,包括新增RPC介面允許手動控制安全模式,*
- 在發生鏈競爭和雙花時將有網路回呼通知,
- 允許凍結交易輸出,*
- 在處理交易鏈時的性能提升,
對區塊預扣(withholding)攻擊的回應
背景
在過去的幾個月里,BSV網路上發生了多次攻擊嘗試,攻擊涉及挖掘一條隱藏的備用鏈(長度大于80個區塊),然后將其一次性發布到區塊鏈上,使其成為新的主鏈,新的區塊鏈中用雙花交易替換了原始區塊鏈中的一些交易,交易所通常會在存取資金的交易達到一定數量的區塊確認(例如攻擊者試圖替換的交易上已有50個確認)后才認為有效,舉例來說,這樣可以防止攻擊者在存入雙花的BSV后就立即開始交易,或在隱藏鏈中重復之前在主鏈上的操作再次提取資金,
BSV區塊鏈和其它PoW區塊鏈很容易遭到此類攻擊,因為在互相競爭的網路中有大量可隨時切換使用的算力,
我們針對此類攻擊的對策包括:
- 設定全天候不間斷的監控:
? 在網路中出現很長的競爭鏈時通知礦工,
? 在新鏈里出現雙花交易時通知交易所和用戶, - 請求誠實礦工使用invalidateblock命令將整條隱藏鏈全部作廢,然后回到原來誠實的鏈上繼續挖礦,直至其成為主鏈,
對安全模式狀態改變的通知(競爭鏈)
如果發生可疑事件(很可能是攻擊),交易所和礦工將收到通知,觸發條件是網路中突然出現了一條很長的競爭區塊鏈,
區塊重組通知也是安全模式通知的一部分,
BSV節點軟體目前包含的“安全模式”邏輯可以檢測競爭鏈并停用對錢包的RPC呼叫(進入安全模式),安全模式的邏輯已被更新,現在可以配置對鏈的檢測(允許用戶根據他們對可疑事件的敏感程度來自定義),并通過網路回呼(webhook)觸發對交易所、礦工和應用服務提供商的通知,
對雙花的通知
交易所和礦工將收到有關BSV網路競爭鏈最近雙花的通知,
區塊鏈監控應用可能會向BSV節點(即挖礦節點)發送DSD點對點通知訊息,然后節點會將該訊息傳播給其它節點,訊息里包含了雙花證明(區塊包含某個交易的Merkle證明),通知通過網路回呼(webhook)發出,
凍結雙花交易
BSV節點(特指挖礦節點)現在可以“凍結”特定的TXO(交易輸出),例如被雙花交易使用的交易輸出,
如果某個交易輸出被策略凍結,那么節點在挖礦時將不會把試圖花費這個TXO的交易放進區塊模板中,但會接受包含了花費這個TXO的交易的外部區塊,
一些特定改動
DS Detector介面
節點軟體將在雙花被檢測到時收到DSD點對點訊息,節點收到DSD訊息后,(a)驗證DSD訊息的有效性(以確保不是惡意偽造),(b)將DSD訊息傳播給其他節點,以及(c)使用網路回呼通知用戶,
請注意,沒有必要將每個區塊中的每個雙花都通知給對等節點(peers),只通知在不同區塊中相互沖突的單個交易的詳細資訊,就足夠了,
DSD點對點訊息
新的DSD點對點訊息格式如下:

block_details:

block_header:

點擊這里獲取DSD點對點訊息的技術檔案,
網路回呼(webhook)DSD通知訊息
當在備用鏈上檢測到新的雙花時,節點將使用網路回呼通知監聽器,可以使用新的命令列引數dsdetectedwebhookurl設定網路回呼訊息的接收者,
DSD通知訊息模板示例:
{
"version" : number,
"blocks : [
{
"divergentBlockHash" : string,
"headers" : [
{
"version" : number,
"hashPrevBlock" : string,
"hashMerkleRoot" : string,
"time" : number,
"bits" : number,
"nonce" : number
}
],
"merkleProof" : {
"index" : number,
"txOrId" : string, // Full transaction, serialised, hex-encoded
"targetType": "merkleRoot",
"target" : string, // Merkle-root
"nodes" : [ "hash", ... ]
}
},
...
]
}
這個通知訊息的檔案是docs/web_hooks.md,
RPC介面getblockheader已被更新為報告區塊的有效或無效狀態,
升級安全模式的觸發機制
安全模式會禁用節點的錢包功能導致用戶無法花費BSV,當檢測到長的競爭(并行)區塊鏈時,安全模式會被觸發,即當攻擊鏈被發現時,網路回呼叫于在安全模式狀態發生改變時通知用戶,
此次更新還修改了安全模式的觸發邏輯,
這個版本引入了3個全新的命令列引數:
- safemodemaxforkdistance,默認值為1000(挖礦7天)
- safemodeminforklength,默認值為3
- safemodeminblockdifference,默認值為-72(在低于當前鏈高度的鏈上挖礦12小時)
如果下列條件均被滿足,則會觸發安全模式:
- 當前塊高與分叉處最后一個公共區塊頭之間的距離小于safemodemaxforkdistance,
- 分叉鏈的長度超過safemodeminforklength,
- 分叉鏈累計的作業量證明超過最小的分叉作業量證明(POW),分叉作業量證明的最小值與活躍鏈的高度有關,可用此公式計算:< total-proof-of-work-active-chain > + safemodeminblockdifference * < proof-of-work-of-the-active-tip >,實際上,它歸結為:如果分叉鏈的高度大于< height-active-chain-tip > + safemodeminblockdifference,則激活安全模式,請注意,safemodeminblockdifference的負值意味著它會在分叉鏈的高度低于活躍鏈時激活安全模式,
當前實作的第一個條件被保留,但會在競爭鏈超過活動鏈之前被觸發,當競爭鏈追趕主鏈到兩者的高度差小于safemodeminforklength,或者競爭鏈高度大于主鏈高度,安全模式就會被激活,
網路回呼DSD通知訊息
節點會在自己進入或退出安全模式、或在安全模式中發生了下列任一事件時,通過網路回呼通知監聽器,
- 非主鏈被延長
- 拉取到了非主鏈的最新區塊
- 某條鏈的有效狀態發生變化(例如使用了invalidateblock命令)
- 發生了區塊重組(reorg)
在初始化區塊下載或重建索引時,即使存在觸發安全模式的條件也不會有通知發生,
只對當前安全模式狀態感興趣的用戶可以查看通知訊息中的safemodeenabled 欄位(見下文),
可以使用新的命令列引數safemodewebhookurl來設定網路回呼訊息的接收者,
安全模式通知訊息模板示例:
{
"safemodeenabled": boolean, // Is the node in the safe mode.
"activetip": { // Tip of the main chain.
"hash": string, // Block hash.
"height": number, // Block height.
"blocktime": string, // Human readable, UTC, block time.
"firstseentime": string, // Human readable, UTC, time when the node first received header.
"status": "active" // Status of the block. Possible values: active, invalid
// headers-only, valid-fork, and valid-headers.
},
"timeutc": string, // Human readable, UTC, time of creation of this message.
"reorg": { // Information about possible reorg.
"happened": bool, // Indicates if an reorg happened.
"numberofdisconnectedblocks": number, // Number of blocks disconnected in reorg.
"oldtip": { // Information about old active tip, "null" if an reorg did not happened.
"hash": string,
"height": number,
"blocktime": string,
"firstseentime": string,
"status": string
}
},
"forks": [ // List of forks that are triggering the safe mode.
{
"forkfirstblock": { // Root of the fork, this block's parent is on the main chain.
"hash": string,
"height": number,
"blocktime": string,
"firstseentime": string,
"status": string
},
"tips": [ // List of tips of this fork.
{
"hash": string,
"height": number,
"blocktime": string,
"firstseentime": string,
"status": string
},
...
],
"lastcommonblock": { // Block on the main chain which is parent of the "forkfirstblock"
"hash": string,
"height": number,
"blocktime": string,
"firstseentime": string,
"status": string
},
"activechainfirstblock": { // Block on the main chain which is child of the "lastcommonblock"
"hash": string,
"height": number,
"blocktime": string,
"firstseentime": string,
"status": string
},
},
...
]
}
該通知訊息的檔案也是docs/web_hooks.md,
全新的用于啟用和禁用安全模式的RPC方法
這些RPC方法允許用戶手動修改安全模式狀態,而不需要重啟節點軟體,
此版本引入了三個全新的RPC介面:
- ignoresafemodeforblock <block_hash> - 在驗證是否進入安全模式的條件時,忽略指定的區塊及其后面的所有區塊,
- reconsidersafemodeforblock <block_hash> - 在驗證是否進入安全模式的條件時,考慮指定的區塊及其后面的所有區塊,
- getsafemodeinfo - 獲取安全模式狀態的詳細資訊,
這些RPC設定不會在節點重啟后被保留,
對凍結TXO(交易輸出)的支持
節點現在可以“凍結”指定的TXO(交易輸出),凍結可被應用在已花費的和未花費的交易輸出上,并可被用來確保節點不處理已知的雙花,
如果某個TXO被策略凍結,那么節點在挖礦時將不會把試圖花費這個TXO的交易放進區塊模板中,但會接受包含了花費這個TXO的交易的外部區塊,
此版本引入了全新的RPC介面:
- addToPolicyBlacklist < funds : object > - 將某個TXO加入策略凍結黑名單(即不再接受花費這個TXO的交易,但可能接受包含花費這個TXO的交易的區塊,如果這個TXO不在共識凍結黑名單中),
- removeFromPolicyBlacklist < funds : object > - 從策略凍結黑名單中移除某個TXO,
- queryBlacklist – 從資料庫中回傳所有被凍結的TXO,
- clearBlacklists <removeAllEntries : boolean, default=true> - 從黑名單中移除條目,
性能改進
這個版本優化了在極端負載下節點對長且復雜的鏈式交易的處理,
請在此下載可執行檔案和源代碼:https://download.bitcoinsv.io/bitcoinsv/,
如有問題,您可以通過郵件support@bitcoinsv.io或Telegram https://t.me/bitcoinsvsupport聯系我們,
感謝您對BSV的持續支持!
本公告代表Steve Shadders和BSV基礎架構團隊向您發送,
目前,全球已有超過400個專案構建于BSV區塊鏈之上,憑借堅如磐石的協議及超高的網路性能,BSV生態系統迅猛發展,我們期待未來出現更多前所未有的商業應用,
- 對BSV區塊鏈開發感興趣的朋友可以通過CSDN站內私信聯系我們,申請加入BSV開發者交流群,
- 同時,您也可以掃描下方二維碼,關注BSV區塊鏈官方微信公眾號,了解更多區塊鏈領域的實時資訊,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/330405.html
標籤:區塊鏈
上一篇:抖音賬號都是如何出售的
