sig_hash_type 是位元幣交易中每個簽名之後乙個位元組的值。有如下型別:
- all 0b00000001
- none 0b00000010
- single 0b00000011
- anyonecanpay 0b10000000
- 31 它的二進位制是 0b11111, 十六進製制是 0x1f
- 128 它的二進位制是 0b10000000, 十六進製制是 0x80
那麼就有以下幾種特殊的位運算:
- x &&& 31 : 取二進位制的x的最低 5 位
- x &&& 128 : 如果二進位制的x的從右往左第8位等於1, 則結果等於128. 反之等於0
而在沒有forkid的情況下,也就是bch分叉之前的位元幣中,sighash的型別是這樣劃分的:
設二進位制的x為某筆交易中的sighash:
x 的最低5位 等於 0b10 -> none
x 的最低5位 等於 0b11 -> single
x 是其它情況 -> all
x 的從右往左第 8 位等於1 -> sig_hash_anyonecanpay
注意到最後乙個情況和之前的3個是可以疊加的。
所以我們可以這樣判斷乙個 sig_hash 位元組的型別:
base(x) when x &&& 31 == 2 -> none;
base(x) when x &&& 31 == 3 -> single;
base(x) -> all.
anyone(x) when x &&& 128 === 128 -> anyonecanpy;
anyone(x) -> false.
其實乙個byte就可以表示256種狀態,位元幣這樣做是出於什麼原因,不得而知。
那麼forkid又是怎麼一回事?forkid的目的是讓之前方法的簽名全部不能通過新的驗證,同時新的驗證方式要保有所有的sig hash 型別。
以forkid = 0x40 為例。 設x為原本的sig hash。
首先看以下幾種特殊的位運算:
- x ||| (0x40 <<< 8) : 一共16位,前8位是forkid,後8位是x
這樣,得到了乙個數作為新的 sighash, 同時不改變之前的型別判斷規則。而且由於這個 sighash 的值改變了,所以簽名結果也改變了。從而實現了隔離的目的。
複製**
關於程式關於世界
首先,在學了1年多的軟體設計的基礎上,問下自己 程式是什麼?業務需求是什麼?程式有什麼用?什麼是演算法?什麼是資料庫?或許每個人的理解不同,會給出不同的答案。那麼自己的理解 程式是乙個讓計算機工作的流程,在程式寫好之後,計算機就會按照,程式設計師定義好流程在執行。其實很多時候,乙個程式的好壞,在於乙...
關於血液關於軟體
1 自然沉降法 將血袋垂直吊掛於4 2 冰箱內,使紅細胞自然下沉1 3d,或將血袋呈70 80 角立於冰箱,需用時,用一次性分漿器分出血漿,制得濃縮紅細胞。2 洗滌法 一般用生理鹽水反覆洗滌3 6次。經洗滌的紅細胞,除白細胞和血小板減少外,血漿蛋白也極少,紅細胞中殘存的血漿蛋白含量約為原總蛋白的1 ...
關於冷漠,關於愛情
我不知道為什麼今天又莫名其妙開始思考愛情這件事,隨之就解決了我一直無法面對冷漠這件事 被冷漠是我始終無法消化的一件事,每當遇見冷漠時,我總會覺得就像一團火把自己燒得面目全非,但對方卻毫無傷害。但我突然懂了,遇到冷漠時,體面的離開即可 在乎你的人一定會在你離開後,找到你跟你解釋為什麼 連解釋都來不及,...