예제 #1
0
파일: crawler.py 프로젝트: sirk390/coinpy
    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)
예제 #2
0
    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)
예제 #3
0
파일: test_node.py 프로젝트: sirk390/coinpy
 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()
예제 #4
0
    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()
예제 #5
0
파일: test_node.py 프로젝트: sirk390/coinpy
 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()
예제 #6
0
    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()
예제 #7
0
 def setUp(self):
     self.log = stdout_logger()
     self.database1 = InMemoryBlockchainDatabase(blockchain_5blocks_unitnet)
예제 #8
0
파일: dns.py 프로젝트: wizardofozzie/coinpy
        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 setUp(self):
     self.log = stdout_logger()
     self.database1 = InMemoryBlockchainDatabase(blockchain_5blocks_unitnet)
예제 #10
0
파일: dns.py 프로젝트: sirk390/coinpy
    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()