예제 #1
0
파일: utils.py 프로젝트: tarassh/pyethereum
def coerce_addr_to_hex(x):
    if isinstance(x, (int, long)):
        return zpad(int_to_big_endian(x), 20).encode('hex')
    elif len(x) == 40 or len(x) == 0:
        return x
    else:
        return zpad(x, 20)[-20:].encode('hex')
예제 #2
0
파일: utils.py 프로젝트: tarassh/pyethereum
def coerce_to_bytes(x):
    if isinstance(x, (int, long)):
        return int_to_big_endian(x)
    elif len(x) == 40:
        return x.decode('hex')
    else:
        return x
예제 #3
0
def coerce_to_bytes(x):
    if isinstance(x, (int, long)):
        return int_to_big_endian(x)
    elif len(x) == 40:
        return x.decode('hex')
    else:
        return x
예제 #4
0
def coerce_addr_to_hex(x):
    if isinstance(x, (int, long)):
        return zpad(int_to_big_endian(x), 20).encode('hex')
    elif len(x) == 40 or len(x) == 0:
        return x
    else:
        return zpad(x, 20)[-20:].encode('hex')
예제 #5
0
def test_split():
    node = random_node()
    routing = kademlia.RoutingTable(node)
    assert len(routing.buckets) == 1

    # create very close node
    for i in range(kademlia.k_bucket_size):
        node = kademlia.Node(int_to_big_endian(node.id + 1))
        assert routing.buckets[0].in_range(node)
        routing.add_node(node)
        assert len(routing.buckets) == 1

    assert len(routing.buckets[0]) == kademlia.k_bucket_size

    node = kademlia.Node(int_to_big_endian(node.id + 1))
    assert routing.buckets[0].in_range(node)
    routing.add_node(node)
    assert len(routing.buckets[0]) <= kademlia.k_bucket_size
    assert len(routing.buckets) <= 512
예제 #6
0
파일: utils.py 프로젝트: tarassh/pyethereum
def recursive_int_to_big_endian(item):
    ''' convert all int to int_to_big_endian recursively
    '''
    if isinstance(item, (int, long)):
        return int_to_big_endian(item)
    elif isinstance(item, (list, tuple)):
        res = []
        for item in item:
            res.append(recursive_int_to_big_endian(item))
        return res
    return item
예제 #7
0
def recursive_int_to_big_endian(item):
    ''' convert all int to int_to_big_endian recursively
    '''
    if isinstance(item, (int, long)):
        return int_to_big_endian(item)
    elif isinstance(item, (list, tuple)):
        res = []
        for item in item:
            res.append(recursive_int_to_big_endian(item))
        return res
    return item
예제 #8
0
파일: discovery.py 프로젝트: jnnk/pydevp2p
    def send_find_node(self, node, target_node_id):
        """
        ### Find Node (type 0x03)

        Find Node packets are sent to locate nodes close to a given target ID.
        The receiver should reply with a Neighbors packet containing the `k`
        nodes closest to target that it knows about.

        FindNode packet-type: 0x03
        struct FindNode
        {
            NodeId target;
            unsigned expiration;
        };
        """
        assert isinstance(target_node_id, long)
        target_node_id = rlp.int_to_big_endian(target_node_id)
        assert len(target_node_id) == kademlia.k_id_size / 8
        log.debug('>>> find_node', remoteid=node)
        message = self.pack(self.cmd_id_map['find_node'], [target_node_id])
        self.send(node, message)
예제 #9
0
def random_pubkey():
    pk = int_to_big_endian(random.getrandbits(kademlia.k_id_size))
    return '\x00' * (kademlia.k_id_size / 8 - len(pk)) + pk
예제 #10
0
파일: utils.py 프로젝트: tarassh/pyethereum
def encode_int64(v):
    return zpad(int_to_big_endian(v), 64)
예제 #11
0
파일: utils.py 프로젝트: tarassh/pyethereum
def encode_int(v):
    '''encodes an integer into serialization'''
    if not isinstance(v, (int, long)) or v < 0 or v >= TT256:
        raise Exception("Integer invalid or out of range")
    return int_to_big_endian(v)
예제 #12
0
def encode_int(v):
    '''encodes an integer into serialization'''
    if not isinstance(v, (int, long)) or v < 0 or v >= 2 ** 256:
        raise Exception("Integer invalid or out of range")
    return int_to_big_endian(v)
예제 #13
0
파일: utils.py 프로젝트: ckeenan/pyethereum
def encode_int64(v):
    return zpad(int_to_big_endian(v), 64)