Add docs on sending transfers

This commit is contained in:
Michał Sałaban 2018-02-14 00:47:30 +01:00
parent ae778383d4
commit c366fa8d90
2 changed files with 101 additions and 3 deletions

View File

@ -1,7 +1,9 @@
Python module for Monero -- docs
================================================
.. image:: https://getmonero.org/press-kit/logos/monero-logo-symbol-on-white-480.png
Welcome to the documentation for the `monero` Python module.
Python module for Monero
========================
Welcome to the documentation for the ``monero`` Python module.
The aim of this project is to offer a set of tools for interacting with Monero
cryptocurrency in Python. It provides higher level classes representing objects
@ -10,6 +12,8 @@ from the Monero environment, like wallets, accounts, addresses, transactions.
Currently it operates over JSON RPC protocol, however other backends are
planned as well.
Project homepage: https://github.com/emesik/monero-python
.. toctree::
:maxdepth: 1
:caption: Contents:

View File

@ -140,9 +140,103 @@ payment object:
Mempool: Unconfirmed payments
-----------------------------
New transactions, before they are mined in the blocks, land in place called mempool. Each network
node updates the mempool contents with new transactions coming from their peers, while offering
them the transactions they do not have.
.. warning:: The presence of a transaction in the mempool is an indication that someone has already
attempted a payment, but **should never be used as a proof the payment has been done**. A
transaction in mempool might be replaced by another one spending the same funds, it might
expire before being included in a block due to competition of other transactions with higher
fees. It might also be a result of a sophisticated attack.
**With significant amounts you should also wait for a few confirmations to appear.** The top
of the blockchain sometimes gets replaced by a competing block. It is a popular practice to
wait for at least 6 confirmations to appear, which is also the standard in Monero before funds
get unlocked and can be used in subsequent transactions.
However, it is possible to query the wallet for transactions in the mempool. You may use them as
proofs of payment for less significant amounts where time of acceptance is more important than
limiting the risk of a fraud.
By default, the queries check only the blockchain. This behavior can be changed by ``confirmed``
and ``unconfirmed`` query parameters that accept boolean values:
.. code-block:: python
In [12]: wallet.incoming(unconfirmed=True, confirmed=False)
Out[12]: [in: 21fd4c0b2671bfc32d7c968fdf3cab1001042128d9429d4a26d4f3dc76bcecb8 @ pool 3.141592653589 id=0000000000000000]
In [13]: incoming[0].transaction.height is None
Out[13]: True
In [14]: wallet.confirmations(incoming[0])
Out[14]: 0
You may as well query for both confirmed and unconfirmed transactions using
``wallet.incoming(unconfirmed=True)`` (the default value for ``confirmed`` is ``True``).
Sending payments
----------------
There are two methods for sending Monero. For a single payment use the ``transfer`` method of
``Wallet`` or ``Account`` object.
It returns a list of resulting transactions. In most cases it will contain only one element, but
sometimes, for example when many small inputs are used, it might become necessary to split the
payment into multiple transactions.
.. code-block:: python
In [15]: from decimal import Decimal
In [16]: txs = wallet.transfer(
'BdYguH2fVo3G37o8bKp8RbTRuRsTpvBaUdxeo9fj6LFrE2XqNMYKytvBLXvNtnbmXtDUwrKLcpeH4NCuhFL2cXikDV4Rzq6',
Decimal('2.54'))
In [17]: txs
Out[17]: [f6e7532322f2cab837e668e7ee7be38f0ca4c0cb8c6cff7aa1cfaaf764735acb]
In [18]: txs[0].height is None
Out[18]: True
In [19]: wallet.confirmations(txs[0])
Out[19]: 0
In [20]: wallet.outgoing(unconfirmed=True, confirmed=False)
Out[20]: [out: f6e7532322f2cab837e668e7ee7be38f0ca4c0cb8c6cff7aa1cfaaf764735acb @ pool 2.540000000000 id=0000000000000000]
When sending multiple payments at once, it is more convenient and cheaper in terms of network fees
to use ``transfer_multiple``:
.. code-block:: python
In [25]: txs = wallet.transfer_multiple([
('Ba8xvGs5qw1JfiQVJDj8D28NuyL7MuKsB59jtnx2q1ydH4CazTWfJo9iKvTyeYEoYYQ6RT6A1DfoSj1UiwssKfdjUNumu2K', Decimal('0.11')),
('BcVT4P2r1Md1DftWBDKHdK38Md6NtFPu4Heof8atNpxx7zbKfhMtRmUUMooU4cJuH4EKXrpke5A77XVbPhekWuiCSTaDFjw', Decimal('1.22')),
('Bf2xXxMLdH9gyh35o6LEyKCz6ZsPRmcujBU9rFK81Brd8HmynFj16KFHAYCETU625hY2x7XBH7CvjCHAC6bxQfsjN77Jv7e', Decimal('2.33'))])
In [26]: txs
Out[26]: [2785a1ad7f6d794802ea27a00e679f8c9706be0ec0b78b73d3182c551c6d69d2]
In [28]: wallet.outgoing(unconfirmed=True, confirmed=False)
Out[28]: [out: 2785a1ad7f6d794802ea27a00e679f8c9706be0ec0b78b73d3182c551c6d69d2 @ pool 3.660000000000 id=0000000000000000]
In [29]: txs[0].fee
Out[29]: Decimal('0.006282400000')
The fee is something you might like to verify before sending the transaction to the network.
In such case you'd probably be interested in the chapter about :doc:`interaction with daemon
<daemon>`.
There are some additional options you may set when sending transfer, like payment ID, priority,
ring size or unlock time. See API reference below for details.
.. note:: Be aware that transactions sent from another instance of the same wallet will not appear
in mempool queries. They will, of course, become visible once mined.
API reference
-------------