Bitcoind
沒有輸入驗證的廣播原始交易
我可以使用什麼工具/軟體來廣播原始交易,它不會因為無效或雙花而拒絕交易?
帶有 RPC 的比特幣有一個驗證步驟,它拒絕任何輸入未知或輸入是雙重支出的原始交易。
另外,我不想依賴像 blockchain.info 這樣的第三方服務。
事實證明有很多方法可以做到這一點:
- Node.js:Bitcore 允許您將原始交易廣播到網路而無需任何類型的驗證,請參閱“通過 P2P 廣播交易”範例。
- Python:Protocoin是一個可以做到這一點的庫。
- Java:BitcoinJ可以做到。
- C#:Bitcoincsharp,它是BitcoinJ的一個埠,也可以做到。
絕對沒有理由嘗試廣播無效交易。這是在浪費你的時間和流量。您的同行將檢查它並將其丟棄。他們不會將其中繼到網路。他們還可以禁止您的 IP 地址一段時間(1 天?)
您可能想發送有效但非標準的交易嗎?或者您可能想要一個自定義工具,將交易發送到網路?
// [...] void NetSocket::pushTx ( const QByteArray& data ) { const MyKey32 key ( data.constData ( ), data.size ( ) ); // calculate txid outTx.insert ( key, data ); // store data write ( "inv", invPacket ( MSG_TX, key ) ); // send inv packet } //-------------------------------------------------------------- void NetSocket::write ( const char* type, const QByteArray& data ) { socket -> write ( packet ( type, data ) ); } //-------------------------------------------------------------- void NetSocket::procGetdataPacket ( const QByteArray& data ) { Stream d ( data ); d.skip24 ( ); // i do not check header now const int count ( d.readVar ( ) ); xassert ( count == 1 ); const quint8* ss = d.readAdvance ( 36 ); const quint32 tag ( *(quint32*)ss ); const MyKey32 key ( ss + 4 ); xassert ( tag == MSG_TX ); xassert ( outTx.contains ( key ) ); write ( "tx", txPacket ( outTx.value ( key ) ) ); } // [...]