Exemplo n.º 1
0
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
Exemplo n.º 2
0
    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)})
Exemplo n.º 3
0
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
Exemplo n.º 4
0
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
Exemplo n.º 5
0
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
Exemplo n.º 6
0
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)
Exemplo n.º 7
0
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)
Exemplo n.º 8
0
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")
Exemplo n.º 9
0
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
Exemplo n.º 10
0
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)
Exemplo n.º 11
0
    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.'}
Exemplo n.º 12
0
'''
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
Exemplo n.º 13
0
    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...")