def test_sign_transaction(): network_params = net_query('tppc') provider = Cryptoid(network='tppc') key = pa.Kutil( network='tppc', privkey=bytearray.fromhex( '9e321f5379c2d1c4327c12227e1226a7c2e08342d88431dcbb0063e1e715a36c') ) dest_address = pa.Kutil(network='tppc').address unspent = provider.select_inputs(key.address, 1) output = tx_output(network='tppc', value=Decimal(0.1), n=0, script=p2pkh_script(network='tppc', address=dest_address)) unsigned = MutableTransaction( version=1, ins=unspent['utxos'], outs=[output], locktime=Locktime(0), network=network_params, timestamp=int(time.time()), ) assert isinstance(sign_transaction(provider, unsigned, key), Transaction)
def load_key(deck): try: wif = pa.Kutil(privkey=unhexlify(deck.id), network=node.network).wif node.importprivkey( wif, deck.id) sys.stdout.write('\rImported {}'.format(wif)) sys.stdout.flush() except: pass
def load_session(): try: # try to load session from the file session = pickle.load(open("session.db", "rb")) except: session = Session session.keys = [pa.Kutil(network="tppc") for i in range(MAX_RECEIVERS)] session.keypairs = {k.address: v.wif for k, v in zip(keys, keys)}
def random(self, n: int = 1) -> list: '''generate <n> of random addresses, useful when testing''' rand_addr = [ pa.Kutil(network=Settings.network).address for i in range(n) ] pprint(rand_addr)
def simulate_issue(self, deckid: str = None, ncards: int = 10, verify=False) -> str: '''create a batch of simulated CardIssues on this deck''' receiver = [pa.Kutil(network='tppc').address for i in range(ncards)] amount = [random.randint(1, 100) for i in range(ncards)] return self.transfer(deckid=deckid, receiver=receiver, amount=amount, verify=verify)
def init_p2thkeys(): from binascii import unhexlify n = 0 if autoload: pa.pautils.load_p2th_privkey_into_local_node(node, production) for deck_id in subscribed: wif = pa.Kutil(privkey=unhexlify(deck_id), network=node.network).wif try: node.importprivkey(wif, deck_id) n += 1 except Exception as e: print(e) return print('{} P2TH Key(s) Registered'.format(n))
def simulate_issue(self, deckid: str = None, ncards: int = 10, verify: bool = False, sign: str = False, send: bool = False) -> str: '''create a batch of simulated CardIssues on this deck''' receiver = [ pa.Kutil(network=Settings.network).address for i in range(ncards) ] amount = [random.randint(1, 100) for i in range(ncards)] return self.transfer(deckid=deckid, receiver=receiver, amount=amount, verify=verify, sign=sign, send=send)
def deck_spawn(): '''spawn a new, random deck''' key = pa.Kutil(wif=wif, network='peercoin-testnet') name = ''.join([ random.choice(string.ascii_letters + string.digits) for n in range(8) ]) deck = pa.Deck(name=name, number_of_decimals=3, issue_mode=4, version=1, fee=0) unspent = provider.select_inputs(key.address, 0.02) new_deck = pa.deck_spawn(provider, key, deck, unspent, change_addr) Session.deck = deck print(new_deck)
import datetime, time import pickle import logging logging.basicConfig(filename='pypa.log', level=logging.INFO) logging.info("Started new session: {0}".format( datetime.datetime.now().isoformat())) provider = pa.RpcNode(testnet=True) deck = pa.find_deck(provider, "clementines")[0] change_addr = deck.issuer try: # try to load keypairs from the file keypairs = pickle.load(open("keypairs.db", "rb")) except: keys = [pa.Kutil(network="tppc") for i in range(MAX_RECEIVERS)] keypairs = {k.address: v.wif for k, v in zip(keys, keys)} class Session: pass def total_issuance(): return len([ ct for ct in pa.find_card_transfers(provider, deck) if ct.type is "CardIssue" ]) def total_tranfers():
def derive(self, key: str) -> str: '''derive a new address from <key>''' return pa.Kutil(Settings.network, from_string=key).address
def p2th(self, deck_id: str) -> str: '''print out deck p2th''' return pa.Kutil(network=Settings.network, privkey=bytearray.fromhex(deck_id)).address
import pypeerassets as pa from decimal import Decimal import string import random import datetime, time import pickle import logging logging.basicConfig(filename='pypa_simulation.log', level=logging.INFO) logging.info("Started new session: {0}".format( datetime.datetime.now().isoformat())) wif = 'cRvV1mhVvr9FTkGdUYkYXcBbomNgAmpfzhvhTep861thfp6noqyy' provider = pa.Cryptoid(network='tppc') change_addr = pa.Kutil(wif=wif, network='peercoin-testnet').address class Session: '''temporary variable store''' pass def deck_spawn(): '''spawn a new, random deck''' key = pa.Kutil(wif=wif, network='peercoin-testnet') name = ''.join([ random.choice(string.ascii_letters + string.digits) for n in range(8) ])
''' Issue cards for new deck. ''' import pypeerassets as pa from binascii import hexlify import random provider = pa.RpcNode(testnet=True) change_addr = "mhPuRGwWRyhXRhzSfzgfoPPFHPXgAyZVSz" deck = pa.Deck(**deck) # use deck from deck_spawn.py example ## utxo must be owned by the deck issuer utxo = provider.select_inputs(0.02, deck.issuer) # generate 9 receiver addresses receivers = [pa.Kutil(network="tppc").address for i in range(9)] # amounts for the receivers amounts = [random.randint(1, 999) for i in range(9)] issue = pa.CardTransfer(deck, receivers, amounts) # CardTransfer instance raw_issue = hexlify(pa.card_issue(deck, issue, utxo, change_addr)).decode() signed = provider.signrawtransaction(raw_issue) provider.sendrawtransaction(signed["hex"]) # send the tx
def new_address(): '''generate a new address and import into wallet.''' key = pa.Kutil(network=provider.network) provider.importprivkey(key.wif, "PACLI") print(key.address)
transaction = provider.gettransaction(transaction_id) if transaction["confirmations"] > 0: break time.sleep(10) if __name__ == "__main__": # Deck Spawn print("Build, sign and send the Friendly Co. Deck spawning transaction...") rpc_node = RpcNode(testnet=True, username=RPC_USERNAME, password=RPC_PASSWORD) friendly_co_key = pa.Kutil( network="tppc", from_wif=rpc_node.dumpprivkey(FRIENDLY_CO), ) deck = pa.Deck( name="Friendly Co. Deck", number_of_decimals=0, issue_mode=IssueMode.ONCE.value, network="tppc", production=False, version=1, issuer=FRIENDLY_CO, ) deck_spawn_tx = pa.deck_spawn( provider=rpc_node, deck=deck,