'''
import random
+import sys
import time
-from twisted.internet import defer, protocol, reactor, task
+from twisted.internet import protocol, task
+import p2pool
from . import data as bitcoin_data
from p2pool.util import deferral, p2protocol, pack, variable
self.factory.gotConnection(None)
if hasattr(self, 'pinger'):
self.pinger.stop()
- print 'Bitcoin connection lost. Reason:', reason.getErrorMessage()
+ if p2pool.DEBUG:
+ print >>sys.stderr, 'Bitcoin connection lost. Reason:', reason.getErrorMessage()
class ClientFactory(protocol.ReconnectingClientFactory):
protocol = Protocol
def getProtocol(self):
return self.conn.get_not_none()
-
-if __name__ == '__main__':
- from . import networks
- factory = ClientFactory(networks.BitcoinMainnet)
- reactor.connectTCP('127.0.0.1', 8333, factory)
-
- @repr
- @apply
- @defer.inlineCallbacks
- def think():
- try:
- print (yield (yield factory.getProtocol()).get_block(0x000000000000003aaaf7638f9f9c0d0c60e8b0eb817dcdb55fd2b1964efc5175))
- except defer.TimeoutError:
- print "timeout"
- reactor.stop()
-
- reactor.run()
--- /dev/null
+from twisted.internet import defer, reactor
+from twisted.trial import unittest
+
+from p2pool.bitcoin import data, networks, p2p
+from p2pool.util import deferral
+
+
+class Test(unittest.TestCase):
+ @defer.inlineCallbacks
+ def test_get_block(self):
+ factory = p2p.ClientFactory(networks.nets['bitcoin'])
+ c = reactor.connectTCP('127.0.0.1', 8333, factory)
+ try:
+ h = 0x000000000000046acff93b0e76cd10490551bf871ce9ac9fad62e67a07ff1d1e
+ block = yield deferral.retry()(defer.inlineCallbacks(lambda: defer.returnValue((yield (yield factory.getProtocol()).get_block(h)))))()
+ assert data.merkle_hash(map(data.hash256, map(data.tx_type.pack, block['txs']))) == block['header']['merkle_root']
+ assert data.hash256(data.block_header_type.pack(block['header'])) == h
+ finally:
+ factory.stopTrying()
+ c.disconnect()