Accounts & keys
from arrekta_sdk import generate_seed, keychain_from_seed
seed = generate_seed()
keychain = keychain_from_seed(seed, network="regtest") # ML-DSA-65 by default
keychain.addresses(1)[0] # 'rarrk1p…'
keychain.account_at(0) # receive key #0 (an Account)
keychain.account_at(0, 1) # change key #0Derivation follows §3.2: HMAC-SHA3-512 and hardened-only paths
m/9000'/0'/account'/change'/index'.
Single keys
from arrekta_sdk import private_key_from_seed
account = private_key_from_seed(seed32) # 32-byte ML-DSA seed (FIPS 204 ξ)
account.public_key # scheme id ‖ raw key
account.key_hash # TH("pubkey", public key)
signature = account.sign(message) # context "ARRK-TX-v1" by defaultAddresses and locks
from arrekta_sdk import encode_address, decode_address, lock_from_public_key
lock = lock_from_public_key(account.public_key)
address = encode_address(lock, "regtest")
assert decode_address(address, "regtest") == lockAny coin can show the same account under its own ticker (gold1…, gold-t1…, gold-r1… for a coin
GOLD). Every function that takes an address accepts both forms.
from arrekta_sdk import encode_coin_address, decode_coin_address, coin_hrp
gold = encode_coin_address(lock, asset["ticker"], "regtest") # 'gold-r1p…'
assert decode_coin_address(gold, "regtest") == (lock, "GOLD") # ticker None for a plain address
assert decode_coin_address(gold) == (lock, "GOLD") # without a network: any known one
coin_hrp("GOLD", "testnet") # 'gold-t'The ticker is a label; the asset id decides what moves. See §3.3.1.
Multisig and policy locks (multisig_lock, policy_lock, builders key/multi/after/older/
sha3/and_/or_/thresh, templates htlc/vault/vesting) follow the same contract; see
Locks & policy locks.