Всем привет
Пытаюсь использовать libbitcoin для создания bitcoin cash транзакции, юзаю пример -
https://github.com/libbitcoin/libbitcoin/wiki/Building-Transactions с моими БИТКОИНовскими prv/pub/inputs/outputs/etc все работает замечательно. Для биткоин КЕША использую свои же prv/pub/inputs/outputs/etc и выставляю sighash_algorithm "all | 0x40". Как описано в биткоин кэше, использую(и его используют в других программах) SIGHASH_FORKID = 0x40(bit 6 set) для подписания транзакции. "Electron cash" тоже использует этот sighash_algorithm.К примеру, я посмотрел различия между электрумом и электроном(для кеша)
https://github.com/Electron-Cash/Electron-Cash/blob/master/lib/transaction.py https://github.com/spesmilo/electrum/blob/master/electrum/transaction.py и увидел различия лишь в этом
electron cash:
def nHashType(cls): '''Hash type in hex.''' return 0x01 | (cls.SIGHASH_FORKID + (cls.FORKID << 8))
electron cash:
def serialize_preimage(self, i): nVersion = int_to_hex(self.version, 4) nHashType = int_to_hex(self.nHashType(), 4)
electrum-btc:
def serialize_preimage(self, i): nVersion = int_to_hex(self.version, 4) nHashType = int_to_hex(1, 4)
Правда они не используют libbitcoin c++
Ок, составляю транзакцию , и если я использую только sighash_algorithm "0x01" с bitcoin CASH транзакцией, получаю такой ответ от ноды
the transaction was rejected by network rules.\n\n16: mandatory-script-verify-flag-failed (Signature must use SIGHASH_FORKID)
OK говорю я, нужно выставить 0x40 как указано и другие используют, выставляю 0x40 | 0x01 и получаю такой ответ от ноды электрума
the transaction was rejected by network rules.\n\n16: mandatory-script-verify-flag-failed (Signature must be zero for failed CHECK(MULTI)SIG operation)
Составляю транзакцию с такими же input и output в electron cash.Моя rawtx и rawtx из electron cash отличаются. у electron cash rawtx - корректная
И так, как же корректно подписать транзакцию bitcoin cash используя libbitcoin c++? Есть ли какие другие отличия кроме выставки 6 бита в sighash_type? Опишите пожалуйста, кто работал.