#!/usr/bin/env python # Pynstawallet 2: Python binding to Instawallet API # by Multiversum # Improvements: # - ability to create new wallet from a passphrase # - ability to get balance in BTC, not only Satoshis from requests import get, post from hashlib import sha256 from base64 import b64encode instaweb_base = r'https://www.instawallet.org' instaapi_base = instaweb_base + r'/api/v1' def btcaddress(walletid): ''' Get Bitcoin address associated with private wallet ID ''' resp = get(instaapi_base+'/w/'+walletid+'/address').json if resp: return resp['address'] else: return None def passtoid(passphrase): ''' Convert (hash) your passphrase or password to the private Instawallet ID ''' preid = b64encode(sha256(passphrase).digest()).strip('/=\\+') return filter(lambda x: x not in '/=\\+', preid) def new_wallet(passphrase=None): ''' Create a new wallet (automatically or from passphrase) and return its private wallet ID and public bitcoin address ''' if passphrase: walletid = passtoid(passphrase) resp = get(instaweb_base+'/w/'+walletid) return walletid, btcaddress(walletid) else: resp = post(instaapi_base+'/new_wallet').json if resp: walletid = resp['wallet_id'] return walletid, btcaddress(walletid) else: return None def balance(walletid): ''' Get your Instawallet balance in Satoshis by private wallet ID ''' resp = get(instaapi_base+'/w/'+walletid+'/balance').json if resp: return resp['balance'] else: return None def btcbalance(walletid): ''' Get your Instawallet balance in Bitcoins by private wallet ID ''' satbalance = balance(walletid) if satbalance is not None: return satbalance/float(100000000.) else: return None def pay(walletid, dest_addr, amount): ''' Initiate a payment from wallet ID to destination Bitcoin address. The payment amount is in Satoshis. The function returns operation result code and message. ''' params = { 'address' : dest_addr, 'amount' : amount } resp = post(instaapi_base+'/w/'+walletid+'/payment', data=params).json if resp: return resp['message_code'], resp['message'] else: return -1, 'Unknown error'