nanopy

class nanopy.Account(network=Network(name='nano', prefix='nano_', difficulty='ffffffc000000000', send_difficulty='fffffff800000000', receive_difficulty='fffffe0000000000', exp=30, rpc_url='http://localhost:7076', std_unit='Ӿ', _d=<class 'decimal.Decimal'>, _b32std=b'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567', _b32nano=b'13456789abcdefghijkmnopqrstuwxyz', _nano2std=b'\\x00\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x08\\t\\n\\x0b\\x0c\\r\\x0e\\x0f\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f !"#$%&\\'()*+, -./0A2BCDEFGH:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`IJKLMNOPQRSlTUVWXYZ23v4567{|}~\\x7f\\x80\\x81\\x82\\x83\\x84\\x85\\x86\\x87\\x88\\x89\\x8a\\x8b\\x8c\\x8d\\x8e\\x8f\\x90\\x91\\x92\\x93\\x94\\x95\\x96\\x97\\x98\\x99\\x9a\\x9b\\x9c\\x9d\\x9e\\x9f\\xa0\\xa1\\xa2\\xa3\\xa4\\xa5\\xa6\\xa7\\xa8\\xa9\\xaa\\xab\\xac\\xad\\xae\\xaf\\xb0\\xb1\\xb2\\xb3\\xb4\\xb5\\xb6\\xb7\\xb8\\xb9\\xba\\xbb\\xbc\\xbd\\xbe\\xbf\\xc0\\xc1\\xc2\\xc3\\xc4\\xc5\\xc6\\xc7\\xc8\\xc9\\xca\\xcb\\xcc\\xcd\\xce\\xcf\\xd0\\xd1\\xd2\\xd3\\xd4\\xd5\\xd6\\xd7\\xd8\\xd9\\xda\\xdb\\xdc\\xdd\\xde\\xdf\\xe0\\xe1\\xe2\\xe3\\xe4\\xe5\\xe6\\xe7\\xe8\\xe9\\xea\\xeb\\xec\\xed\\xee\\xef\\xf0\\xf1\\xf2\\xf3\\xf4\\xf5\\xf6\\xf7\\xf8\\xf9\\xfa\\xfb\\xfc\\xfd\\xfe\\xff', _std2nano=b'\\x00\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x08\\t\\n\\x0b\\x0c\\r\\x0e\\x0f\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f !"#$%&\\'()*+, -./01tuwxyz89:;<=>?@13456789abcdefghijkmnopqrs[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\\x7f\\x80\\x81\\x82\\x83\\x84\\x85\\x86\\x87\\x88\\x89\\x8a\\x8b\\x8c\\x8d\\x8e\\x8f\\x90\\x91\\x92\\x93\\x94\\x95\\x96\\x97\\x98\\x99\\x9a\\x9b\\x9c\\x9d\\x9e\\x9f\\xa0\\xa1\\xa2\\xa3\\xa4\\xa5\\xa6\\xa7\\xa8\\xa9\\xaa\\xab\\xac\\xad\\xae\\xaf\\xb0\\xb1\\xb2\\xb3\\xb4\\xb5\\xb6\\xb7\\xb8\\xb9\\xba\\xbb\\xbc\\xbd\\xbe\\xbf\\xc0\\xc1\\xc2\\xc3\\xc4\\xc5\\xc6\\xc7\\xc8\\xc9\\xca\\xcb\\xcc\\xcd\\xce\\xcf\\xd0\\xd1\\xd2\\xd3\\xd4\\xd5\\xd6\\xd7\\xd8\\xd9\\xda\\xdb\\xdc\\xdd\\xde\\xdf\\xe0\\xe1\\xe2\\xe3\\xe4\\xe5\\xe6\\xe7\\xe8\\xe9\\xea\\xeb\\xec\\xed\\xee\\xef\\xf0\\xf1\\xf2\\xf3\\xf4\\xf5\\xf6\\xf7\\xf8\\xf9\\xfa\\xfb\\xfc\\xfd\\xfe\\xff'), addr='')
Parameters:

network (Network) – network of this account

property addr: str

Account address

property bal: str

Account balance

change_rep(rep, work='')

Construct a signed change StateBlock with work

Parameters:
  • rep (Account) – representative account

  • work (str) – 16 hex char work for the block

Return type:

StateBlock

Returns:

a signed change StateBlock

property frontier: str

64 hex char account frontier block hash

property pk: str

64 hex char account public key

property raw_bal: int

Account raw balance

receive(digest, raw_amt, rep=None, work='')

Construct a signed receive StateBlock with work

Parameters:
  • digest (str) – 64 hex char hash digest of the receive block

  • raw_amt (int) – raw amount to receive

  • rep (Account | None) – representative account

  • work (str) – 16 hex char work for the block

Return type:

StateBlock

Returns:

a signed receive StateBlock

property rep: Account

Account representative

send(to, raw_amt, rep=None, work='')

Construct a signed send StateBlock with work

Parameters:
  • to (Account) – Destination account

  • raw_amt (int) – raw amount to send

  • rep (Account | None) – representative account

  • work (str) – 16 hex char work for the block

Return type:

StateBlock

Returns:

a signed send StateBlock

property sk: str

64 hex char account secret/private key

property state: tuple[str, int, Account]

State of the account (frontier block digest, raw balance, representative)

class nanopy.Network(name='nano', prefix='nano_', difficulty='ffffffc000000000', send_difficulty='fffffff800000000', receive_difficulty='fffffe0000000000', exp=30, rpc_url='http://localhost:7076', std_unit='Ӿ', _d=<class 'decimal.Decimal'>, _b32std=b'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567', _b32nano=b'13456789abcdefghijkmnopqrstuwxyz', _nano2std=b'\\x00\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x08\\t\\n\\x0b\\x0c\\r\\x0e\\x0f\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f !"#$%&\\'()*+, -./0A2BCDEFGH:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`IJKLMNOPQRSlTUVWXYZ23v4567{|}~\\x7f\\x80\\x81\\x82\\x83\\x84\\x85\\x86\\x87\\x88\\x89\\x8a\\x8b\\x8c\\x8d\\x8e\\x8f\\x90\\x91\\x92\\x93\\x94\\x95\\x96\\x97\\x98\\x99\\x9a\\x9b\\x9c\\x9d\\x9e\\x9f\\xa0\\xa1\\xa2\\xa3\\xa4\\xa5\\xa6\\xa7\\xa8\\xa9\\xaa\\xab\\xac\\xad\\xae\\xaf\\xb0\\xb1\\xb2\\xb3\\xb4\\xb5\\xb6\\xb7\\xb8\\xb9\\xba\\xbb\\xbc\\xbd\\xbe\\xbf\\xc0\\xc1\\xc2\\xc3\\xc4\\xc5\\xc6\\xc7\\xc8\\xc9\\xca\\xcb\\xcc\\xcd\\xce\\xcf\\xd0\\xd1\\xd2\\xd3\\xd4\\xd5\\xd6\\xd7\\xd8\\xd9\\xda\\xdb\\xdc\\xdd\\xde\\xdf\\xe0\\xe1\\xe2\\xe3\\xe4\\xe5\\xe6\\xe7\\xe8\\xe9\\xea\\xeb\\xec\\xed\\xee\\xef\\xf0\\xf1\\xf2\\xf3\\xf4\\xf5\\xf6\\xf7\\xf8\\xf9\\xfa\\xfb\\xfc\\xfd\\xfe\\xff', _std2nano=b'\\x00\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x08\\t\\n\\x0b\\x0c\\r\\x0e\\x0f\\x10\\x11\\x12\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1b\\x1c\\x1d\\x1e\\x1f !"#$%&\\'()*+, -./01tuwxyz89:;<=>?@13456789abcdefghijkmnopqrs[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\\x7f\\x80\\x81\\x82\\x83\\x84\\x85\\x86\\x87\\x88\\x89\\x8a\\x8b\\x8c\\x8d\\x8e\\x8f\\x90\\x91\\x92\\x93\\x94\\x95\\x96\\x97\\x98\\x99\\x9a\\x9b\\x9c\\x9d\\x9e\\x9f\\xa0\\xa1\\xa2\\xa3\\xa4\\xa5\\xa6\\xa7\\xa8\\xa9\\xaa\\xab\\xac\\xad\\xae\\xaf\\xb0\\xb1\\xb2\\xb3\\xb4\\xb5\\xb6\\xb7\\xb8\\xb9\\xba\\xbb\\xbc\\xbd\\xbe\\xbf\\xc0\\xc1\\xc2\\xc3\\xc4\\xc5\\xc6\\xc7\\xc8\\xc9\\xca\\xcb\\xcc\\xcd\\xce\\xcf\\xd0\\xd1\\xd2\\xd3\\xd4\\xd5\\xd6\\xd7\\xd8\\xd9\\xda\\xdb\\xdc\\xdd\\xde\\xdf\\xe0\\xe1\\xe2\\xe3\\xe4\\xe5\\xe6\\xe7\\xe8\\xe9\\xea\\xeb\\xec\\xed\\xee\\xef\\xf0\\xf1\\xf2\\xf3\\xf4\\xf5\\xf6\\xf7\\xf8\\xf9\\xfa\\xfb\\xfc\\xfd\\xfe\\xff')
Parameters:
  • name (str) – name of the network

  • prefix (str) – prefix for accounts in the network

  • difficulty (str) – base difficulty

  • send_difficulty (str) – difficulty for send/change blocks

  • receive_difficulty (str) – difficulty for receive/open blocks

  • exp (int) – exponent to convert between raw and base currency unit

  • rpc_url (str) – default RPC url for the network

  • std_unit (str) – symbol or label for the default currency unit

from_multiplier(multiplier)

Get difficulty from multiplier

Parameters:

multiplier (float) – positive number

Return type:

str

Returns:

16 hex char difficulty

from_pk(pk)

Get account address from public key

Parameters:

pk (str) – 64 hex char public key

Return type:

str

from_raw(raw, exp=0)

Divide raw by 10^exp

Parameters:
  • raw (int) – raw amount

  • exp (int) – positive number

Return type:

str

Returns:

raw divided by 10^exp

to_multiplier(difficulty)

Get multiplier from difficulty

Parameters:

difficulty (str) – 16 hex char difficulty

Return type:

float

Returns:

multiplier

to_pk(addr)

Get public key from account address

Parameters:

addr (str) – account address

Return type:

str

to_raw(val, exp=0)

Multiply val by 10^exp

Parameters:
  • val (str) – val

  • exp (int) – positive number

Return type:

int

Returns:

val multiplied by 10^exp

class nanopy.StateBlock(acc, rep, bal, prev, link, sig='', work='')

State block

Parameters:
  • acc (Account) – account of the block

  • rep (Account) – account representative

  • bal (int) – account balance

  • prev (str) – 64 hex char hash digest of the previous block

  • link (str) – 64 hex char block link

  • sig (str) – 128 hex char block signature

  • work (str) – 16 hex char block work

property digest: str

64 hex char hash digest of block

property json: str

block as JSON string

verify_signature()

Verify signature for block

Return type:

bool

Returns:

True if valid, False otherwise

work_generate(difficulty)

Compute work

Parameters:

difficulty (str) – 16 hex char difficulty

Return type:

None

work_validate(difficulty)

Check whether block has a valid work.

Parameters:
  • difficulty (str) – 16 hex char difficulty

  • multiplier – positive number, overrides difficulty

Return type:

bool

nanopy.deterministic_key(seed, i=0)

Derive deterministic private key from seed based on index i

Parameters:
  • seed (str) – 64 hex char seed

  • i (int) – index number, 0 to 2^32 - 1

Return type:

str

Returns:

64 hex char private key

nanopy.generate_mnemonic(strength=256, language='english')

Generate a BIP39 type mnemonic. Requires mnemonic

Parameters:
  • strength (int) – choose from 128, 160, 192, 224, 256

  • language (str) – one of the installed word list languages

Return type:

str

Returns:

word list

nanopy.mnemonic_key(words, i=0, passphrase='', language='english')
Derive deterministic private key from mnemonic based on index i.

Requires mnemonic

Parameters:
  • words (str) – word list

  • i (int) – account index

  • passphrase (str) – passphrase to generate seed

  • language (str) – word list language

Return type:

str

Returns:

64 hex char private key