def c_burn(): '''simulate card burning''' print("Card burn.") addr = select_random_address() if not provider.validateaddress(addr)["ismine"]: provider.importprivkey(keypairs[addr]) print("Imported {address} to wallet.".format(address=addr)) if provider.getreceivedbyaddress(addr) == 0: send_to_address(addr) return ## return until the next time else: try: utxo = provider.select_inputs(0.02, addr) except Exception as e: print("Something went wrong with UTXO selection:", e) return receiver = [deck.issuer] amount = [round(random.randint(1, 40000), deck.number_of_decimals)] ct = pa.CardTransfer(deck, receiver, amount) raw = hexlify(pa.card_burn(deck, ct, utxo, change_addr)).decode() signed = provider.signrawtransaction(raw) print("Burning cards from: {0}".format(addr)) logging.info("Burn: {0}".format(datetime.datetime.now().isoformat())) logging.info("Burning cards from: {0}".format(addr)) txid = provider.sendrawtransaction(signed["hex"]) # send the tx print(txid) Session.total_burns = +1
def __new(self, deckid: str, receiver: list = None, amount: list = None, asset_specific_data: str = None) -> pa.CardTransfer: '''fabricate a new card transaction * deck_id - deck in question * receiver - list of receivers * amount - list of amounts to be sent, must be float ''' deck = self.__find_deck(deckid) if isinstance(deck, pa.Deck): card = pa.CardTransfer(deck=deck, receiver=receiver, amount=[ self.to_exponent( deck.number_of_decimals, i) for i in amount ], version=deck.version, asset_specific_data=asset_specific_data) return card raise Exception( {"error": "Deck {deckid} not found.".format(deckid=deckid)})
def c_transfer(): '''simulate p2p card_transfer''' print("Card burn.") addr = select_random_address() print("Selected addr: {addr}".format(addr=addr)) if not provider.validateaddress(addr)["ismine"]: provider.importprivkey(keypairs[addr]) print("Imported {address} to wallet.".format(address=addr)) if provider.getreceivedbyaddress(addr) == 0: send_to_address(addr) return ## return until the next time else: try: utxo = provider.select_inputs(0.02, addr) except Exception as e: print("Something went wrong with UTXO selection:", e) return receiver = select_random_keypairs() amount = [ round(random.uniform(0.1, 160000), deck.number_of_decimals) for i in range(len(receiver)) ] ct = pa.CardTransfer(deck, receiver, amount) # CardTransfer instance raw = hexlify(pa.card_transfer(deck, ct, utxo, change_addr)).decode() signed = provider.signrawtransaction(raw) print("Sending cards to: {0}".format(receiver)) logging.info("Transfer: {0}".format(datetime.datetime.now().isoformat())) logging.info("Sending cards to: {0}".format(receiver)) txid = provider.sendrawtransaction(signed["hex"]) # send the tx print(txid) Session.total_issuance = +1
def card_transfer(provider, args): ''' Transfer cards to <receivers> pacli card -transfer '{"deck": "deck_id", "receivers": [list of receiver addresses], "amounts": [list of amounts] } ''' args = json.loads(args) try: deck = pa.find_deck(provider, args["deck"])[0] except IndexError: print({"error": "Deck not found!"}) return if not provider.getaddressesbyaccount(deck.name): print( "\n", { "error": "You are not even subscribed to this deck, how can you transfer cards?" }) utxo = provider.select_inputs(0.02) change_address = change(utxo) args["amounts"] = [float(i) for i in args["amounts"]] ct = pa.CardTransfer(deck, args["receivers"], args["amounts"]) raw_ct = hexlify( pa.card_transfer(deck, ct, utxo, change_address, Settings.prod)).decode() signed = provider.signrawtransaction(raw_ct) print("\n", provider.sendrawtransaction(signed["hex"]), "\n") # send the tx
def card_burn(provider, args): ''' Burn cards of this deck. pacli card -burn '{"deck": "deck_id", "amount": ["amount"]}' ''' args = json.loads(args) try: deck = pa.find_deck(provider, args["deck"])[0] except IndexError: print("\n", {"error": "Deck not found!"}) return if not provider.getaddressesbyaccount(deck.name): print( "\n", { "error": "You are not even subscribed to this deck, how can you burn cards?" }) return utxo = provider.select_inputs(0.02) change_address = change(utxo) args["amounts"] = [float(i) for i in args["amounts"]] cb = pa.CardTransfer(deck, [deck.issuer], args["amounts"]) raw_cb = hexlify( pa.card_burn(deck, cb, utxo, change_address, Settings.prod)).decode() signed = provider.signrawtransaction(raw_cb) print("\n", provider.sendrawtransaction(signed["hex"]), "\n") # send the tx
def transfer_cards(deck, receivers, amounts, broadcast): validate_transfer(deck, amounts) utxo = provider.select_inputs(0.02) change_address = change(utxo) ct = pa.CardTransfer(deck=deck, receiver=receivers, amount=amounts) handle_transaction(pa.card_transfer(deck, ct, utxo, change_address), broadcast)
def test_card_transfer(): provider = Explorer(network='tppc') address = "mthKQHpr7zUbMvLcj8GHs33mVcf91DtN6L" inputs = provider.select_inputs(address, 0.02) change_address = address deck = pa.find_deck(provider, '078f41c257642a89ade91e52fd484c141b11eda068435c0e34569a5dfcce7915', 1, True) card = pa.CardTransfer(deck=deck, receiver=['n12h8P5LrVXozfhEQEqg8SFUmVKtphBetj', 'n422r6tcJ5eofjsmRvF6TcBMigmGbY5P7E'], amount=[1, 2] ) card_transfer = pa.card_transfer(provider, card, inputs, change_address, locktime=300000) assert isinstance(card_transfer, Transaction)
def card_issue(provider, args): ''' Issue new cards of this deck. pacli card -issue '{"deck": "deck_id", "receivers": [list of receiver addresses], "amounts": [list of amounts] } ''' issue = json.loads(args) try: deck = pa.find_deck(provider, issue["deck"])[0] except IndexError: print("\n", {"error": "Deck not found."}) return if not provider.getaddressesbyaccount(deck.name): print( "\n", { "error": "You are not even subscribed to this deck, how can you issue cards?" }) return try: utxo = provider.select_inputs(0.02, deck.issuer) except ValueError: print("\n", { "error": "You are not owner of this deck, you can not issue cards." }) return change_address = change(utxo) issue["amounts"] = [float(i) for i in issue["amounts"]] ct = pa.CardTransfer(deck, issue["receivers"], issue["amounts"]) raw_ct = hexlify( pa.card_issue(deck, ct, utxo, change_address, Settings.prod)).decode() signed = provider.signrawtransaction(raw_ct) txid = provider.sendrawtransaction(signed["hex"]) # send the tx print("\n", txid, "\n")
def c_issue(): '''issue cards to selected list of random recipients''' utxo = provider.select_inputs(0.02, deck.issuer) # load random keysets receiver = select_random_keypairs() # amounts for the receiver amount = [ round(random.uniform(0.1, 150000), deck.number_of_decimals) for i in range(len(receiver)) ] issue = pa.CardTransfer(deck, receiver, amount) # CardTransfer instance raw_issue = hexlify(pa.card_issue(deck, issue, utxo, change_addr)).decode() signed = provider.signrawtransaction(raw_issue) logging.info("Issue: {0}".format(datetime.datetime.now().isoformat())) print("Issuing cards to: {0}".format(receiver)) txid = provider.sendrawtransaction(signed["hex"]) logging.info("Issuing cards to: {0} in tx: {1}".format(receiver, txid)) print(txid) Session.total_issuance = +1
def issue(issuence, broadcast): ''' Issue new cards of this deck. pacli card issue '{"deck": "deck_id", "receivers": [list of receiver addresses], "amounts": [list of amounts] } ''' deck = find_deck(issuence["deck"]) if not provider.gettransaction(deck.asset_id)["confirmations"] > 0: print( "\n", "You are trying to issue cards on a deck which has not been confirmed yet." ) if provider.validateaddress(deck.issuer)["ismine"]: try: utxo = provider.select_inputs(0.02, deck.issuer) except ValueError: throw("Please send funds to the deck issuing address: {0}".format( deck.issuer)) else: raise throw("You are not the owner of this deck.") receivers = issuence["receivers"] amounts = [ amount_to_exponent(float(i), deck.number_of_decimals) for i in issuence["amounts"] ] change_address = change(utxo) ct = pa.CardTransfer(deck=deck, receiver=receivers, amount=amounts) handle_transaction(pa.card_issue(deck, ct, utxo, change_address), broadcast)
def __new(self, deckid: str, receiver: list = None, amount: list = None, asset_specific_data: str = None) -> pa.CardTransfer: '''fabricate a new card transaction * deck_id - deck in question * receiver - list of receivers * amount - list of amounts to be sent, must be float ''' deck = self.__find_deck(deckid) if deck: card = pa.CardTransfer( deck, receiver, [self.to_exponent(deck.number_of_decimals, i) for i in amount], deck.version, asset_specific_data) return card else: return {'error:' 'Deck not found.'}
''' 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
found_deck = pa.find_deck( provider=rpc_node, key=deck.id, version=1, prod=False, ) assert found_deck is not None, "Should have found the Friendly Co. Deck." print("Found the Friendly Co. Deck!") # Card Issue print("Build, sign and send the Card Issue transaction to Alice...") card_transfer = pa.CardTransfer( deck=deck, receiver=[ALICE], amount=[1000000], sender=FRIENDLY_CO, ) card_transfer_tx = pa.card_transfer( provider=rpc_node, card=card_transfer, inputs=rpc_node.select_inputs(FRIENDLY_CO, 0.02), change_address=FRIENDLY_CO, ) card_transfer_tx = sign_transaction(rpc_node, card_transfer_tx, friendly_co_key) rpc_node.sendrawtransaction(card_transfer_tx.hexlify()) print("Transaction to issue Friendly Co. Cards sent to the network!") print("Transaction ID: " + card_transfer_tx.txid) print("Waiting for confirmation...")