Transactions

腳本比特幣代表數字 > 16

  • April 12, 2019

我正在學習腳本語言,但我不明白如何表示數字 > 16,例如 210

我想做一個簡單的求和

OP_10 210 OP_ADD

我如何代表210?我正在嘗試使用 OP_PUSHDATA1 沒有運氣。

如果您嘗試將超過 75 個字節的數據壓入堆棧,則只需使用 OP_PUSHDATA1。

為了將較小的值壓入堆棧,您可以使用操作碼 0x01 到 0x4b 來指示被壓入的字節數。因此,要將值 210 (0xD2) 的單個字節壓入堆棧,您將使用 byte sequence 0x01 0xd2

要將 16 位數字(例如 1000)壓入堆棧,您將使用字節序列0x02 0xe8 0x03。請注意,使用了 little-endian 字節順序。您可以對 24 位數字或 32 位數字執行類似操作。

推送值時應始終使用最小大小 - 這意味著推送值的最高有效字節不應為零。

推送的值將在內部進行零擴展,以表示 32 位有符號整數。比特幣腳本中的所有數字運算都限於 32 位整數。數值運算返回的結果可以視為帶符號的 64 位值,但超出 32 位整數範圍的值可能不會在後續數值運算中使用。


在 OP_PUSHDATA1 上,這用於將任意二進制數據推送到堆棧上,這些數據可以用作諸如 OP_SHA256 之類的操作的參數。這通過使序列的第一個字節為 OP_PUSHDATA1,第二個字節為推送數據的長度,其餘字節為內容來實現。對於超過 255 字節的數據,使用 OP_PUSHDATA2,其中序列的第二個和第三個字節表示長度,依此類推。最小大小規則適用於所有類型的推送,包括您不應嘗試使用 2 個字節將單個字節 <=16 推送到堆棧上,而應使用 OP_N 單字節操作碼。

要將數據推送到堆棧,如果沒有操作碼(即數字 210 沒有操作碼,但數字 1-16 有操作碼:),則OP_1 - OP_16需要提供推送操作。由於 210 可以用單個字節表示:

OP_10 0x01 210 OP_ADD
 ^    ^    ^    ^
 |    |    |    | pop the top 2 items, add, and return result
 |    |    | Push number 210 to the stack
 |    | The next 1 byte is pushed to the stack
 | Push 10 to the stack

見<https://en.bitcoin.it/wiki/Script#Constants>

引用自:https://bitcoin.stackexchange.com/questions/85989