def __init__(self, runmode=TESTNET, seeds=[]): self.log = stdout_logger(level=logging.ERROR) self.runmode = runmode nodeparams = NodeParams(runmode=runmode, port=BITCOIN_PORT[runmode], version=60000, enabledservices=SERVICES_NODE_NETWORK, nonce=random.randint(0, 2**64), sub_version_num="/bitcrawler:0.1/") self.node = BasicNode(lambda:0, nodeparams, self.log) self.bootstrapper = Bootstrapper(runmode, self.log) self.node.subscribe(VersionExchangeService.EVT_VERSION_EXCHANGED, self.on_version_exchanged) self.node.subscribe(Node.EVT_DISCONNECTED, self.on_disconnected) self.node.subscribe((VersionExchangeService.EVT_MESSAGE,MSG_ADDR), self.on_addr) self.bootstrapper.subscribe(Bootstrapper.EVT_FOUND_PEER, self.on_found_peer) for sockaddr in seeds: self.addr_pool.addpeer(sockaddr) self.new_addrs = set() self.processing_addrs = set() self.success_addrs = set() self.failed_addrs = set() reactor.schedule_each(2, self.print_status)
def __init__(self, runmode=TESTNET, seeds=[]): self.log = stdout_logger(level=logging.ERROR) self.runmode = runmode nodeparams = NodeParams(runmode=runmode, port=BITCOIN_PORT[runmode], version=60000, enabledservices=SERVICES_NODE_NETWORK, nonce=random.randint(0, 2**64), sub_version_num="/bitcrawler:0.1/") self.node = BasicNode(lambda: 0, nodeparams, self.log) self.bootstrapper = Bootstrapper(runmode, self.log) self.node.subscribe(VersionExchangeService.EVT_VERSION_EXCHANGED, self.on_version_exchanged) self.node.subscribe(Node.EVT_DISCONNECTED, self.on_disconnected) self.node.subscribe((VersionExchangeService.EVT_MESSAGE, MSG_ADDR), self.on_addr) self.bootstrapper.subscribe(Bootstrapper.EVT_FOUND_PEER, self.on_found_peer) for sockaddr in seeds: self.addr_pool.addpeer(sockaddr) self.new_addrs = set() self.processing_addrs = set() self.success_addrs = set() self.failed_addrs = set() reactor.schedule_each(2, self.print_status)
def test_node_connect_accept(self): log = stdout_logger() params1 = NodeParams(runmode=MAIN, port=8333) params2 = NodeParams(runmode=MAIN, port=8334) node1 = Node(params1, log) node2 = Node(params2, log) node1.connect_peer(SockAddr("localhost", 8334)) node2.subscribe(Node.EVT_CONNECTED, lambda event: reactor.stop()) reactor.run()
def test_node_send_receive_message(self): log = stdout_logger() params1 = NodeParams(runmode=MAIN, port=8335) params2 = NodeParams(runmode=MAIN, port=8336) node1 = Node(params1, log) node2 = Node(params2, log) def on_connect(event): node1.send_message(event.handler, VerackMessage()) node1.subscribe(Node.EVT_CONNECTED, on_connect) def on_message(event): assert event.message.type == MSG_VERACK reactor.stop() node2.subscribe(Node.EVT_BASIC_MESSAGE, on_message) node1.connect_peer(SockAddr("localhost", 8336)) reactor.run()
def setUp(self): self.log = stdout_logger() self.database1 = InMemoryBlockchainDatabase(blockchain_5blocks_unitnet)
for s in self.HOSTS: try: ip = socket.gethostbyname(s) except: pass addr = SockAddr(ip, BITCOIN_PORT[self.runmode]) if addr not in self.bootstrap_peers: self.bootstrap_peers.add(addr) self.node.connect_peer(addr) def on_addr(self, event): addr_msg = event.message for taddr in addr_msg.timenetaddr_list: addr = SockAddr(taddr.netaddr.ip, taddr.netaddr.port) if addr not in self.peers and addr not in self.bootstrap_peers: self.fire(self.EVT_FOUND_PEER, peeraddress=addr) def on_version_exchanged(self, event): event.handler.send_message(GetaddrMessage()) if __name__ == '__main__': from coinpy.model.protocol.runmode import MAIN def on_found_peer(event): print event.peeraddress bootstrapper = DnsBoostrapper(MAIN, stdout_logger()) bootstrapper.subscribe(DnsBoostrapper.EVT_FOUND_PEER, on_found_peer) bootstrapper.bootstrap() reactor.run()
def bootstrap(self): for s in self.HOSTS: try: ip = socket.gethostbyname(s) except: pass addr = SockAddr(ip, BITCOIN_PORT[self.runmode]) if addr not in self.bootstrap_peers: self.bootstrap_peers.add(addr) self.node.connect_peer(addr) def on_addr(self, event): addr_msg = event.message for taddr in addr_msg.timenetaddr_list: addr = SockAddr(taddr.netaddr.ip, taddr.netaddr.port) if addr not in self.peers and addr not in self.bootstrap_peers: self.fire(self.EVT_FOUND_PEER, peeraddress=addr) def on_version_exchanged(self, event): event.handler.send_message(GetaddrMessage()) if __name__ == '__main__': from coinpy.model.protocol.runmode import MAIN def on_found_peer(event): print event.peeraddress bootstrapper = DnsBoostrapper(MAIN, stdout_logger()) bootstrapper.subscribe(DnsBoostrapper.EVT_FOUND_PEER, on_found_peer) bootstrapper.bootstrap() reactor.run()