cryptoassets.core library integration for Django
Project description
Cryptoassets library integration for Django
This package provides integration of cryptoassets.core Bitcoin and cryptoasset framework for Django web framework.
Features
Use Django settings.py configure mechanism to set up cryptoassets.core
Django management command mappings for cryptoassets helper service
Django native logging
Django event dispatch integration
Setting up SQLAlchemy sessions and database conflict resolution inside Django
Usage
Add cryptoassets.django to your Django application list in settings.py:
INSTALLED_APPS = ( 'cryptoassets.django', )
Add cryptoassets.core configuration as Python dictionary to your Django settings.py module under CRYPTOASSETS variable.
Example for settings.py:
# TESTNET settings CRYPTOASSETS = { # It is recommended to use separate database for cryptoassets, # but you can share the database with Django as well. # In any case, cryptoassets # will use a separate db connection. # cryptoassets.django does not read the existing DATABASES setting. # Configure the connection using SQLAlchemy syntax: # http://cryptoassetscore.readthedocs.org/en/latest/config.html#database "database": { "url": "postgresql://localhost/cryptoassets", "echo": False, }, # Configure block.io API service with Bitcoin testnet # (let's not play around with real Bitcoins yet) "coins": { "btc": { "backend": { "class": "cryptoassets.core.backend.blockio.BlockIo", "api_key": "923f-xxxx-yyyy-zzzz", "network": "btctest", "pin": "foobar123", # Cryptoassets helper process will use this UNIX named pipe to communicate # with bitcoind "walletnotify": { "class": "cryptoassets.core.backend.sochainwalletnotify.SochainWalletNotifyHandler", "pusher_app_key": "e9f5cc20074501ca7395" }, } }, }, # Bind cryptoassets.core event handler to Django dispacth wrapper "events": { "django": { "class": "cryptoassets.core.event.python.InProcessEventHandler", "callback": "cryptoassets.django.incoming.handle_tx_update" } }, # Start simple status at port 9001 for diagnostics "status_server": { "ip": "127.0.0.1", "port": 9001 } }
Initializing database
Run:
python manage.py cryptoassets_initialize_database
This will build database tables for configured cryptocurrencies.
This is Django management command warpper for cryptoassets-initialize-database.
Starting cryptoassets helper service
Start a helper service. This standalone process runs, connects to APIs and networks, listens to incoming transactions, broadcasts outgoing transaction.
Run:
python manage.py cryptoassets_helper_service
For more information see helper service command.
Handling incoming transactions
Make sure walletnotify is configured in CRYPTOASSETS setting as described above. It will translate incoming interprocess communication to Django events.
Grab incoming transactions in your application code in txupdate signal:
from cryptoassets.django.signals import txupdate from django.dispatch import receiver @receiver(txupdate) def txupdate_received(event_name, data, **kwargs): """ Received transaction update from cryptoassets.core. """ if data.get("transaction_type") != "deposit": # We are only interest updates on incoming transctions return transaction_hash = data["txid"] value = data['amount'] address = data['address'] confirmations = int(data.get('confirmations', -1)) logger.info("Transaction update received: %s BTC:%s address:%s confirmations:%d", transaction_hash, value, address, confirmations)
The handler is executed inside cryptoassets helper service process.
Accessing cryptoassets data
Accessing database models
To get access to database models:
from cryptoassets.django.app import get_cryptoassets cryptoassets = get_cryptoassets() BitcoinWallet = cryptoassets.coins.get("btc").coin_description.Wallet
Making database queries
All database access goes through a separate SQLAlcemy session which is wrapped with database transaction conflict resolver.
For convenience, cryptoassets.django.assetsdb.managed_transaction() decorator is provided:
Example code:
from cryptoassets.django.app import get_cryptoassets from cryptoassets.django import assetdb def get_wallet(session): """Return the master shared wallet used to receive payments. """ cryptoassets = get_cryptoassets() BitcoinWallet = cryptoassets.coins.get("btc").coin_description.Wallet wallet = BitcoinWallet.get_or_create_by_name("default", session) return wallet def create_new_receiving_address(label): @assetdb.managed_transaction def tx(session): wallet = get_wallet(session=session) account = wallet.get_or_create_account_by_name("my account") session.flush() # account id gets written inside commit addr = wallet.create_receiving_address(account, label) logging.info("Created receiving address %s", addr.address) address = addr.address return address return tx()
The rest is by model API and SQLAlchemy.
Other
Example Django application
cryptoassets.core tutorial
Running helper service as system service
To have automatic start/stop and other functionality for cryptoassets helper service, use something akin systemd or supervisord to manage python manage.py cryptoassets_helper_service.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.