def test_verify_challenge_tx_contains_infinite_timebounds(self):
        server_kp = Keypair.random()
        client_kp = Keypair.random()
        timeout = 600
        network = 'TESTNET'
        archor_name = 'sdf'

        challenge = Builder(server_kp.seed().decode(),
                            network=network,
                            sequence=-1,
                            fee=100)
        now = int(time.time())
        challenge.add_time_bounds({'minTime': now, 'maxTime': 0})
        nonce = os.urandom(64)
        challenge.append_manage_data_op(
            data_name='{} auth'.format(archor_name),
            data_value=nonce,
            source=client_kp.address().decode())
        challenge.sign()
        challenge_tx_server_signed = challenge.gen_xdr()

        transaction = Builder(client_kp.seed().decode(),
                              network='TESTNET',
                              sequence=0,
                              fee=100)
        transaction.import_from_xdr(challenge_tx_server_signed)
        transaction.sign()
        challenge_tx = transaction.gen_xdr()
        with pytest.raises(
                InvalidSep10ChallengeError,
                match="Transaction requires non-infinite timebounds."):
            Builder.verify_challenge_tx(challenge_tx,
                                        server_kp.address().decode(),
                                        'TESTNET')
Exemple #2
0
def data(
	systemdb,
	Account, 
	name, 
	message):

	q = Query()
	a_sk = systemdb.search(q.name == Account)[0]['sk']
	b = Builder(secret = a_sk, network='TESTNET')

	b.append_manage_data_op(name, message)
	b.sign()
	print b.submit()
Exemple #3
0
def make_data_entry(
	systemdb,
	source_name, 
	key, 
	value):

	q = Query()
	a_sk = systemdb.search(q.name == source_name)[0]['sk']
	b = Builder(secret = a_sk, network='TESTNET')

	b.append_manage_data_op(name, message)
	b.sign()
	response = b.submit()

	print response
 def create_token_and_lock_account(self, code, owner_address, metadata):
     # Setup the base transaction
     builder = Builder(
         secret=self.issuer_secret,
         network=self.network
     )
     # Append relevant payment ops
     ipfs_hash = self.create_ipfs_hash(metadata)
     builder.append_manage_data_op('token_ipfs_hash', ipfs_hash)
     builder.append_payment_op(
         owner_address,
         '0.0000001',
         code,
         self.issuer_keypair.address().decode()
     )
     builder.append_set_options_op(master_weight=0)
     builder.sign()
     return builder.submit()
    def test_verify_challenge_tx_operation_value_is_not_a_64_bytes_base64_string(
            self):
        server_kp = Keypair.random()
        client_kp = Keypair.random()
        timeout = 600
        network = 'TESTNET'
        archor_name = 'sdf'

        challenge = Builder(server_kp.seed().decode(),
                            network=network,
                            sequence=-1,
                            fee=100)
        now = int(time.time())
        challenge.add_time_bounds({'minTime': now, 'maxTime': now + timeout})
        nonce = os.urandom(32)
        challenge.append_manage_data_op(
            data_name='{} auth'.format(archor_name),
            data_value=nonce,
            source=client_kp.address().decode())
        challenge.sign()
        challenge_tx_server_signed = challenge.gen_xdr()

        transaction = Builder(client_kp.seed().decode(),
                              network='TESTNET',
                              sequence=0,
                              fee=100)

        transaction.import_from_xdr(challenge_tx_server_signed)
        transaction.sign()
        challenge_tx = transaction.gen_xdr()
        with pytest.raises(
                InvalidSep10ChallengeError,
                match=
                "Operation value should be a 64 bytes base64 random string."):
            Builder.verify_challenge_tx(challenge_tx,
                                        server_kp.address().decode(),
                                        'TESTNET')
async def build_generate_escrow_wallet_transaction(
    escrow_address: str,
    transaction_source_address: str,
    creator_address: str,
    destination_address: str,
    provider_address: str,
    cost_per_transaction: Decimal,
    starting_native_asset: Decimal,
    starting_custom_asset: Decimal,
    expiration_date: str = None,
    sequence: str = None,
) -> Tuple[Any, str]:
    '''Building transaction for generating escrow wallet with minimum balance of lumens
        and return unsigned XDR and transaction hash.

        Args:

        * escrow_address: an address of new wallet
        * destination_address: an address of wallet which is target
        * transaction_source_address an address from wallet pool
        * provider_address: an address which provides custom_asset to new wallet
        * creator_address: an address of source wallet which is owner of the transaction.
        * cost_per_transaction: cost for each promotion deals.
        * starting_native_asset: starting amount of XLM.
        * starting_custom_asset: starting amount of custom asset(HOT).
        * expiration_date: a date when escrow address is terminated.
    '''

    builder = Builder(
        address=transaction_source_address,
        horizon=settings['HORIZON_URL'],
        network=settings['PASSPHRASE'],
        sequence=sequence,
    )
    builder.append_create_account_op(source=creator_address,
                                     destination=escrow_address,
                                     starting_balance=starting_native_asset)

    try:
        builder.append_trust_op(
            source=escrow_address,
            destination=settings['ISSUER'],
            code=settings['ASSET_CODE'],
            limit=settings['LIMIT_ASSET'],
        )
    except DecodeError:
        raise web.HTTPBadRequest(
            reason='Parameter escrow_address or issuer address are not valid.')
    except Exception as e:
        msg = str(e)
        raise web.HTTPInternalServerError(reason=msg)

    builder.append_manage_data_op(source=escrow_address,
                                  data_name='creator_address',
                                  data_value=creator_address)
    builder.append_manage_data_op(source=escrow_address,
                                  data_name='destination_address',
                                  data_value=destination_address)
    builder.append_manage_data_op(source=escrow_address,
                                  data_name='provider_address',
                                  data_value=provider_address)

    if expiration_date:
        builder.append_manage_data_op(source=escrow_address,
                                      data_name='expiration_date',
                                      data_value=expiration_date)
    builder.append_manage_data_op(source=escrow_address,
                                  data_name='cost_per_transaction',
                                  data_value=str(cost_per_transaction))

    builder.append_set_options_op(source=escrow_address,
                                  signer_address=creator_address,
                                  signer_type='ed25519PublicKey',
                                  signer_weight=1)
    builder.append_set_options_op(source=escrow_address,
                                  signer_address=provider_address,
                                  signer_type='ed25519PublicKey',
                                  signer_weight=1)
    builder.append_set_options_op(source=escrow_address,
                                  master_weight=0,
                                  low_threshold=2,
                                  med_threshold=2,
                                  high_threshold=2)

    builder.append_payment_op(
        source=provider_address,
        destination=escrow_address,
        asset_code=settings['ASSET_CODE'],
        asset_issuer=settings['ISSUER'],
        amount=starting_custom_asset,
    )

    try:
        xdr = builder.gen_xdr()
    except Exception as e:
        raise web.HTTPBadRequest(
            reason='Bad request, Please ensure parameters are valid.')

    tx_hash = builder.te.hash_meta()

    return xdr.decode(), binascii.hexlify(tx_hash).decode()
Exemple #7
0
async def build_joint_wallet(
    transaction_source_address: str,
    deal_address: str,
    parties: List,
    creator: str,
    starting_xlm: Decimal,
    meta: str = None,
    sequence: str = None,
):
    """Build transaction for create joint wallet, trust HOT and set option signer."""
    def _add_signer(builder: Builder, deal_address: str, party: str,
                    amount: Decimal):
        """Set permission of parties can signed transaction that generate from joint account"""
        builder.append_set_options_op(source=deal_address,
                                      signer_address=party,
                                      signer_type='ed25519PublicKey',
                                      signer_weight=1)
        builder.append_payment_op(
            source=party,
            destination=deal_address,
            asset_code=settings['ASSET_CODE'],
            asset_issuer=settings['ISSUER'],
            amount=amount,
        )

    builder = Builder(
        address=transaction_source_address,
        horizon=settings['HORIZON_URL'],
        network=settings['PASSPHRASE'],
        sequence=sequence,
    )
    builder.append_create_account_op(source=creator,
                                     destination=deal_address,
                                     starting_balance=starting_xlm)
    builder.append_trust_op(source=deal_address,
                            destination=settings['ISSUER'],
                            code=settings['ASSET_CODE'],
                            limit=settings['LIMIT_ASSET'])
    builder.append_set_options_op(source=deal_address,
                                  signer_address=creator,
                                  signer_type='ed25519PublicKey',
                                  signer_weight=1)

    for party in parties:
        _add_signer(builder, deal_address, party['address'], party['amount'])

    if meta and isinstance(meta, dict):
        for key, value in meta.items():
            builder.append_manage_data_op(source=deal_address,
                                          data_name=key,
                                          data_value=value)

    builder.append_manage_data_op(source=deal_address,
                                  data_name='creator_address',
                                  data_value=creator)

    weight = len(parties) + 1
    builder.append_set_options_op(source=deal_address,
                                  master_weight=0,
                                  low_threshold=weight,
                                  med_threshold=weight,
                                  high_threshold=weight)
    xdr = builder.gen_xdr()
    tx_hash = builder.te.hash_meta()

    return xdr.decode(), binascii.hexlify(tx_hash).decode()
async def build_remove_manage_data_operation(builder: Builder, source: str, list_name: List):
    for name in list_name:
        builder.append_manage_data_op(name, None, source=source)