Quickstart¶
Note
This guide assume that you have installed and configured bitcoin-core node. See Install cryptocurrency nodes for instructions.
This guide will walk you through the basics of creating simple bitcoin payment system that can receive and send transactions, create addresses, and estimate fees.
Creating currency and node objects¶
django-obm
store configuration for specific node
in database. There are two ways to create them.
1. Managemant command¶
Open settings.py
and define BLOCKCHAIN_NODES_INITIAL_CONFIG
setting. It maps on fields of django_obm.models.Node
and related to it django_obm.models.Currency
models.
BLOCKCHAIN_NODES_INITIAL_CONFIG = [
{
'currency': {
'name': 'BTC',
'min_confirmations': 2,
},
'name': 'bitcoin-core',
'is_default': True,
'rpc_username': 'rpcuser',
'rpc_password': '************',
'rpc_host': 'localhost',
'rpc_port': 18332,
},
]
To apply the config on database execute command bellow in your Django root:
$ python manage.py init_nodes
<Currency: BTC> created successfully.
<Node: bitcoin-core> created successfully.
It’s worth clarifying, that you can’t create Node
or Currency
object if framework doesn’t support corresponded cryptocurrency or node. To
discover supported things you can use special connectors registry property.
>>> from django_obm import connectors
>>> connectors.registry.available_currencies
{'BTC'}
>>> connectors.registry.available_nodes
{'bitcoin-core'}
2. Manual creation¶
Also it can be created in any place of your project then when you need it.
>>> from django_obm import models
>>> currency = models.Currency.objects.create(
... name='BTC',
... min_confirmations=2,
... )
>>> models.Node.objects.create(
... name='bitcoin-core',
... currency=currency,
... is_default=True,
... rpc_username='username',
... rpc_password='password',
... rpc_host='127.0.0.1',
... rpc_port=18332,
... )
<Node: bitcoin-core>
Receive payments¶
There are method and daemon to fetch received transactions from nodes
and write them into database. Each transaction will get status
tx.is_confirmed == True
if the conformations number greater
than tx.node.currency.min_conformations
, in our case it’s 2.
Method¶
Now you are ready to receive payments. For fetch new received transaction
call models.Node
manager process_receipts
method:
>>> models.Node.objects.process_receipts()
Daemon¶
Also you can use built-in daemon, that will do it by timer. Just execute
run_receipts_processing
django command.
python manage.py run_receipts_processing --frequency=120
It runs process_receipts
models.Node
manager method with
specified frequency (defaults to 60 sec.). For defineing your own default
frequency set RECEIPTS_PROCESSING_DEFAULT_FREQUENCY
to needed value
in settings.py
.
The daemon has the --once
option that allow to execute
process_receipts
only once, like regular command. It might be helpful
if you wish to use some system-level (like systemd, crontab etc.) tool to
accept payments.
Example¶
You can find the example in example project.