Raw-Transaction

試圖找到原始創世交易長度

  • April 6, 2015

我看到許多不同的山寨幣在初始創世交易中具有不同的長度。我將如何找到初始創世 tx 的長度?我看到了另一個答案,但我不需要讓它變得複雜;我只需要長度,沒有別的。

例如,比特幣是

01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000.

但是,山寨幣有不同的長度。是否有一個標識符可以用來確定 genesis tx 的長度,僅此而已?

編輯:我正在製作一個區塊瀏覽器,所以我不能使用區塊瀏覽器來幫助我獲取資訊。

不幸的是,大多數山寨幣中沒有索引創世塊(因為它們從比特幣分叉並保留相同的錯誤),因此您無法真正通過 RPC 方法訪問它。

你可以做什麼:

  • 使用一個區塊瀏覽器,它會告訴你交易的大小。例如,blockchain.info使此資訊可用(204 字節)。
  • 找到參數文件並將創世塊的大小列印到標準輸出。

第二個選項基本上需要將以下行放在末尾CMainParams()然後編譯。

CDataStream ssBlock(SER_NETWORK, PROTOCOL_VERSION);
ssBlock << genesis;
printf("block: %s\n", HexStr(ssBlock.begin(), ssBlock.end()).c_str());
printf("block size: %i\n", (int)::GetSerializeSize(genesis, SER_NETWORK, PROTOCOL_VERSION));
printf("tx size: %i\n", (int)::GetSerializeSize(genesis.vtx[0], SER_NETWORK, PROTOCOL_VERSION));

這將列印原始塊數據、大小和交易大小。(注意,這是未經測試的,但這些方面的東西應該​​可以工作)

注意:雖然不是常態,但可以將多個交易放在一個創世塊中。只需檢查您的假設是否正確。

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