Ejemplo n.º 1
0
def parse_URI(uri):
    import rubycoin
    from rubycoin import COIN

    if ':' not in uri:
        assert rubycoin.is_address(uri)
        return {'address': uri}

    u = urlparse.urlparse(uri)
    assert u.scheme == 'rubycoin'

    address = u.path

    # python for android fails to parse query
    if address.find('?') > 0:
        address, query = u.path.split('?')
        pq = urlparse.parse_qs(query)
    else:
        pq = urlparse.parse_qs(u.query)

    for k, v in pq.items():
        if len(v)!=1:
            raise Exception('Duplicate Key', k)

    out = {k: v[0] for k, v in pq.items()}
    if address:
        assert rubycoin.is_address(address)
        out['address'] = address
    if 'amount' in out:
        am = out['amount']
        m = re.match('([0-9\.]+)X([0-9])', am)
        if m:
            k = int(m.group(2)) - 8
            amount = Decimal(m.group(1)) * pow(  Decimal(10) , k)
        else:
            amount = Decimal(am) * COIN
        out['amount'] = int(amount)
    if 'message' in out:
        out['message'] = out['message'].decode('utf8')
        out['memo'] = out['message']
    if 'time' in out:
        out['time'] = int(out['time'])
    if 'exp' in out:
        out['exp'] = int(out['exp'])
    if 'sig' in out:
        out['sig'] = rubycoin.base_decode(out['sig'], None, base=58).encode('hex')

    return out
Ejemplo n.º 2
0
 def __init__(self, config):
     StoreDict.__init__(self, config, 'contacts')
     # backward compatibility
     for k, v in self.items():
         _type, n = v
         if _type == 'address' and rubycoin.is_address(n):
             self.pop(k)
             self[n] = ('address', k)
Ejemplo n.º 3
0
 def getprivatekeys(self, address):
     """Get private keys of addresses. You may pass a single wallet address, or a list of wallet addresses."""
     if is_address(address):
         return self.wallet.get_private_key(address, self._password)
     domain = json_loads(address)
     return [
         self.wallet.get_private_key(address, self._password)
         for address in domain
     ]
Ejemplo n.º 4
0
 def _read_csv(self, csvpath):
     import csv
     outputs = []
     with open(csvpath, 'rb') as csvfile:
         csvReader = csv.reader(csvfile, delimiter=',')
         for row in csvReader:
             address, amount = row
             assert rubycoin.is_address(address)
             amount = Decimal(amount)
             outputs.append((address, amount))
     return outputs
Ejemplo n.º 5
0
 def resolve(self, k):
     if rubycoin.is_address(k):
         return {"address": k, "type": "address"}
     if k in self.keys():
         _type, addr = self[k]
         if _type == "address":
             return {"address": addr, "type": "contact"}
     out = self.resolve_openalias(k)
     if out:
         address, name, validated = out
         return {"address": address, "name": name, "type": "openalias", "validated": validated}
     raise Exception("Invalid Rubycoin address or alias", k)
Ejemplo n.º 6
0
def create_URI(addr, amount, message):
    import rubycoin
    if not rubycoin.is_address(addr):
        return ""
    query = []
    if amount:
        query.append('amount=%s'%format_satoshis_plain(amount))
    if message:
        if type(message) == unicode:
            message = message.encode('utf8')
        query.append('message=%s'%urllib.quote(message))
    p = urlparse.ParseResult(scheme='rubycoin', netloc='', path=addr, params='', query='&'.join(query), fragment='')
    return urlparse.urlunparse(p)
Ejemplo n.º 7
0
def create_URI(addr, amount, message):
    import rubycoin
    if not rubycoin.is_address(addr):
        return ""
    query = []
    if amount:
        query.append('amount=%s'%format_satoshis_plain(amount))
    if message:
        if type(message) == unicode:
            message = message.encode('utf8')
        query.append('message=%s'%urllib.quote(message))
    p = urlparse.ParseResult(scheme='rubycoin', netloc='', path=addr, params='', query='&'.join(query), fragment='')
    return urlparse.urlunparse(p)
Ejemplo n.º 8
0
 def resolve(self, k):
     if rubycoin.is_address(k):
         return {'address': k, 'type': 'address'}
     if k in self.keys():
         _type, addr = self[k]
         if _type == 'address':
             return {'address': addr, 'type': 'contact'}
     out = self.resolve_openalias(k)
     if out:
         address, name, validated = out
         return {
             'address': address,
             'name': name,
             'type': 'openalias',
             'validated': validated
         }
     raise Exception("Invalid Rubycoin address or alias", k)
Ejemplo n.º 9
0
 def validateaddress(self, address):
     """Check that an address is valid. """
     return is_address(address)
Ejemplo n.º 10
0
def parse_URI(uri, on_pr=None):
    import rubycoin
    from rubycoin import COIN

    if ':' not in uri:
        if not rubycoin.is_address(uri):
            raise BaseException("Not a rubycoin address")
        return {'address': uri}

    u = urlparse.urlparse(uri)
    if u.scheme != 'rubycoin':
        raise BaseException("Not a rubycoin URI")
    address = u.path

    # python for android fails to parse query
    if address.find('?') > 0:
        address, query = u.path.split('?')
        pq = urlparse.parse_qs(query)
    else:
        pq = urlparse.parse_qs(u.query)

    for k, v in pq.items():
        if len(v)!=1:
            raise Exception('Duplicate Key', k)

    out = {k: v[0] for k, v in pq.items()}
    if address:
        if not rubycoin.is_address(address):
            raise BaseException("Invalid rubycoin address:" + address)
        out['address'] = address
    if 'amount' in out:
        am = out['amount']
        m = re.match('([0-9\.]+)X([0-9])', am)
        if m:
            k = int(m.group(2)) - 8
            amount = Decimal(m.group(1)) * pow(  Decimal(10) , k)
        else:
            amount = Decimal(am) * COIN
        out['amount'] = int(amount)
    if 'message' in out:
        out['message'] = out['message'].decode('utf8')
        out['memo'] = out['message']
    if 'time' in out:
        out['time'] = int(out['time'])
    if 'exp' in out:
        out['exp'] = int(out['exp'])
    if 'sig' in out:
        out['sig'] = rubycoin.base_decode(out['sig'], None, base=58).encode('hex')

    r = out.get('r')
    sig = out.get('sig')
    name = out.get('name')
    if r or (name and sig):
        def get_payment_request_thread():
            import paymentrequest as pr
            if name and sig:
                s = pr.serialize_request(out).SerializeToString()
                request = pr.PaymentRequest(s)
            else:
                request = pr.get_payment_request(r)
            on_pr(request)
        t = threading.Thread(target=get_payment_request_thread)
        t.setDaemon(True)
        t.start()

    return out
Ejemplo n.º 11
0
 def validateaddress(self, address):
     """Check that an address is valid. """
     return is_address(address)