Using wallet and accounts

The Wallet class provides an abstraction layer to retrieve wallet information, manage accounts and subaddresses, and of course send transfers.

The wallet

The following example shows how to create and retrieve wallet’s accounts and addresses via the default JSON RPC backend:

In [1]: from monero.wallet import Wallet

In [2]: w = Wallet(port=28088)

In [3]: w.address()
Out[3]: A2GmyHHJ9jtUhPiwoAbR2tXU9LJu2U6fJjcsv3rxgkVRWU6tEYcn6C1NBc7wqCv5V7NW3zeYuzKf6RGGgZTFTpVC4QxAiAX

Accounts and subaddresses

The accounts are stored in wallet’s accounts attribute, which is a list.

Regardless of the version, the wallet by default operates on its account of index 0, which makes it consistent with the behavior of the CLI wallet client.

In [4]: len(w.accounts)
Out[4]: 1

In [5]: w.accounts[0]
Out[5]: <monero.account.Account at 0x7f78992d6898>

In [6]: w.accounts[0].address()
Out[6]: A2GmyHHJ9jtUhPiwoAbR2tXU9LJu2U6fJjcsv3rxgkVRWU6tEYcn6C1NBc7wqCv5V7NW3zeYuzKf6RGGgZTFTpVC4QxAiAX

In [7]: w.addresses()
Out[7]: [A2GmyHHJ9jtUhPiwoAbR2tXU9LJu2U6fJjcsv3rxgkVRWU6tEYcn6C1NBc7wqCv5V7NW3zeYuzKf6RGGgZTFTpVC4QxAiAX]

Creating accounts and addresses

Every wallet can have separate accounts and each account can have numerous addresses. The Wallet.new_account() and Account.new_address() will create new instances, then return a tuple consisting of the subaddress itself, and the subaddress index within the account.

In [8]: w.new_address()
Out[8]: (BenuGf8eyVhjZwdcxEJY1MHrUfqHjPvE3d7Pi4XY5vQz53VnVpB38bCBsf8AS5rJuZhuYrqdG9URc2eFoCNPwLXtLENT4R7, 1)

In [9]: w.addresses()
Out[9]:
[A2GmyHHJ9jtUhPiwoAbR2tXU9LJu2U6fJjcsv3rxgkVRWU6tEYcn6C1NBc7wqCv5V7NW3zeYuzKf6RGGgZTFTpVC4QxAiAX,
 BenuGf8eyVhjZwdcxEJY1MHrUfqHjPvE3d7Pi4XY5vQz53VnVpB38bCBsf8AS5rJuZhuYrqdG9URc2eFoCNPwLXtLENT4R7]

In [10]: w.new_account()
Out[10]: <monero.account.Account at 0x7f7894dffbe0>

In [11]: len(w.accounts)
Out[11]: 2

In [12]: w.accounts[1].address()
Out[12]: Bhd3PRVCnq5T5jjNey2hDSM8DxUgFpNjLUrKAa2iYVhYX71RuCGTekDKZKXoJPAGL763kEXaDSAsvDYb8bV77YT7Jo19GKY

In [13]: w.accounts[1].new_address()
Out[13]: (Bbz5uCtnn3Gaj1YAizaHw1FPeJ6T7kk7uQoeY48SWjezEAyrWScozLxYbqGxsV5L6VJkvw5VwECAuLVJKQtHpA3GFXJNPYu, 1)

In [14]: w.accounts[1].addresses()
Out[14]:
[Bhd3PRVCnq5T5jjNey2hDSM8DxUgFpNjLUrKAa2iYVhYX71RuCGTekDKZKXoJPAGL763kEXaDSAsvDYb8bV77YT7Jo19GKY,
 Bbz5uCtnn3Gaj1YAizaHw1FPeJ6T7kk7uQoeY48SWjezEAyrWScozLxYbqGxsV5L6VJkvw5VwECAuLVJKQtHpA3GFXJNPYu]

As mentioned above, the wallet by default operates on the first account, so w.new_address() is equivalent to w.accounts[0].new_address().

In the next chapter we will learn about addresses.

API reference

class monero.account.Account(backend, index, label=None)

Monero account.

Provides interface to operate on a wallet’s account.

Accounts belong to a Wallet and act like separate sub-wallets. No funds can be moved between accounts off-chain (without a transaction).

Parameters:
  • backend – a wallet backend
  • index – the account’s index within the wallet
  • label – optional account label as str
address()

Return account’s main address.

Return type:SubAddress
address_balance(addresses=None)

Returns balances of given addresses, or all addresses if none given.

Parameters:addresses – a sequence of address as Address or their indexes within the account as `int`s
Return type:list of index, subaddress, balance, num_UTXOs: (int, Address, Decimal, int)
addresses()

Returns all addresses of the account.

Return type:list
balance(unlocked=False)

Returns specified balance.

Parameters:unlocked – if True, return the unlocked balance, otherwise return total balance
Return type:Decimal
balances()

Returns a tuple of balance and unlocked balance.

Return type:(Decimal, Decimal)
new_address(label=None)

Creates a new address.

Parameters:label – address label as str
Return type:tuple of subaddress, subaddress index (minor): (SubAddress, int)
sweep_all(address, priority=2, payment_id=None, subaddr_indices=None, unlock_time=0, relay=True)

Sends all unlocked balance to an address. Returns a list of resulting transactions.

Parameters:
  • address – destination Address or subtype
  • priority – transaction priority, implies fee. The priority can be a number from 1 to 4 (unimportant, normal, elevated, priority) or a constant from monero.const.PRIO_*.
  • payment_id – ID for the payment (must be None if IntegratedAddress is used as the destination)
  • subaddr_indices – a sequence of subaddress indices to sweep from. Empty sequence or None means sweep all positive balances.
  • unlock_time – the extra unlock delay
  • relay – if True, the wallet will relay the transaction(s) to the network immediately; when False, it will only return the transaction(s) so they might be broadcast later
Return type:

list of Transaction

transfer(address, amount, priority=2, payment_id=None, unlock_time=0, relay=True)

Sends a transfer. Returns a list of resulting transactions.

Parameters:
  • address – destination Address or subtype
  • amount – amount to send
  • priority – transaction priority, implies fee. The priority can be a number from 1 to 4 (unimportant, normal, elevated, priority) or a constant from monero.const.PRIO_*.
  • payment_id – ID for the payment (must be None if IntegratedAddress is used as the destination)
  • unlock_time – the extra unlock delay
  • relay – if True, the wallet will relay the transaction(s) to the network immediately; when False, it will only return the transaction(s) so they might be broadcasted later
Return type:

list of Transaction

transfer_multiple(destinations, priority=2, payment_id=None, unlock_time=0, relay=True)

Sends a batch of transfers. Returns a list of resulting transactions.

Parameters:
  • destinations – a list of destination and amount pairs: [(Address, Decimal), …]
  • priority – transaction priority, implies fee. The priority can be a number from 1 to 4 (unimportant, normal, elevated, priority) or a constant from monero.const.PRIO_*.
  • payment_id – ID for the payment (must be None if IntegratedAddress is used as the destination)
  • unlock_time – the extra unlock delay
  • relay – if True, the wallet will relay the transaction(s) to the network immediately; when False, it will only return the transaction(s) so they might be broadcast later
Return type:

list of transaction and amount pairs: [(Transaction, Decimal), …]