構建一個新的區塊(我們稱之為微支付區塊),和現有區塊(我們稱為主區塊)進行一對一錨定。P2MP交易專門用新區塊收集。
微支付區塊使用擴充套件區塊的設計,擴充套件區塊設計請參見《擴充套件區塊Github文件中文翻譯》
在微支付區塊內部的轉賬,應該非常容易實現。難點在於如何實現從主區塊支付到微支付區塊,以及如何從微支付區塊支付到主區塊。
在主區塊的末尾設計一筆特殊的收集所有從主區塊支付到微支付區塊的交易,我們稱之為主區塊尾部coinbase(這和區塊頭部的挖礦獎勵coinbase交易相對應)。尾部coinbase交易的輸入(input)為所有進入微支付區塊的交易的輸入;尾部coinbase交易的輸出是一筆特殊的鎖定指令碼,這個指令碼的公鑰部分留空,簽名部分設計為滿足特定條件就為true。這樣的輸出就類似於一個任何人都可以花費的UTXO。
主區塊coinbase尾部交易輸出:
scriptPubKey: 留空
scriptSig: 特殊條件為True
每一個主區塊的最新高度裡的尾部coinbase交易的輸入,都要包含上一個區塊的尾部coinbase交易的輸出。
最新高度主區塊尾部coinbase的輸出金額=上一個區塊的尾部coinbase交易輸出金額+進入微支付區塊的金額-離開微支付區塊的金額-微支付區塊交易的礦工費
微支付區塊裡的第一筆交易,輸入是留空的,這個和主區塊的挖礦coinbase交易是一樣的,輸出是對應著從主區塊所有進入微支付區塊交易的輸出。
主區塊的尾部coinbase交易和微支付區塊的頭部coinbase交易,就形成一個橋接,把主區塊裡的幣轉移到了微支付區塊。
而從微支付區塊要支付到主區塊,則按上面的過程,反過來。
微支付區塊是可以拋棄的。驗證區塊時,微支付區塊的存在與否不會影響主區塊的驗證,但驗證微支付區塊必須要拿到對應的主區塊才能完成驗證。這樣的設計下,任何一個主區塊,哪怕是拋棄了微支付區塊,也不會影響合法性,這樣就可以讓完整節點拋棄掉微支付區塊。
可拋棄式微支付區塊,讓微支付形成的歷史交易資料不對主網形成成本壓力。
微支付區塊裡的交易可以設定一個時間,比如過了10萬個區塊,節點可以拋棄掉微支付區塊。
微支付區塊甚至可以設計成是賬戶制。賬戶制不會產生大量的細碎UTXO,每一次支付都是修改餘額,而不是像UTXO這樣刪掉原來的UTXO,再生成新的UTXO。賬戶制甚至可以植入一個虛擬機器,像以太坊和EOS那樣,讓比特幣網路真正使用智慧合約。
從技術實現角度上讀,擴充套件區塊的程式碼已經寫好了,是基礎bitcoin core0.13寫的。是在2017年寫好的。在這套程式碼上修改成微支付擴充套件區塊,應該沒有太大的難度。
就目前的技術發展來說,BTC、BCH和BSV有可能實現類似的方案嗎?在技術發展路線上,BTC主要發展閃電網路來解決微支付場景。BSV不支援在主鏈上大做修改。BCH到不會在技術路線上設限,但這個理念還是沒人提起。
可能是我想多了。