| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- import pytest
- import coincurve
- from algosdk.future import transaction
- from algosdk.error import AlgodHTTPError
- from algosdk.logic import get_application_address
- from Cryptodome.Hash import keccak
- @pytest.fixture(scope='module')
- def app_id(portal_core, client, creator):
- return portal_core.createTestApp(client,creator)
- @pytest.fixture(scope='module')
- def signers(gen_test):
- return bytes.fromhex("".join(gen_test.guardianKeys))
- @pytest.fixture(scope='module')
- def signers_private_keys(gen_test):
- return gen_test.guardianPrivKeys
- @pytest.fixture(scope='module')
- def hash():
- return keccak.new(digest_bits=256).update(b"42").digest()
- @pytest.fixture(scope='module')
- def incorrect_hash():
- return keccak.new(digest_bits=256).update(b"error").digest()
- @pytest.fixture
- def signatures(gen_test,signers_private_keys, hash):
- signatures = ""
- for i in range(len(signers_private_keys)):
- signatures += gen_test.encoder("uint8", i)
- key = coincurve.PrivateKey(bytes.fromhex(signers_private_keys[i]))
- signature = key.sign_recoverable(hash, hasher=None)
- signatures += signature.hex()
- return bytes.fromhex(signatures)
- def tests_rejection_on_rekey(client, portal_core, creator, vaa_verify_lsig, app_id):
- with pytest.raises(AlgodHTTPError):
- doubleFee = client.suggested_params()
- doubleFee.flat_fee = True
- doubleFee.fee = 2000
- feePayment = transaction.PaymentTxn(
- sender=creator.getAddress(),
- receiver=creator.getAddress(),
- amt=0,
- sp=doubleFee
- )
- zeroFee = client.suggested_params()
- zeroFee.flat_fee = True
- zeroFee.fee = 0
- noop = transaction.ApplicationCallTxn(
- index=app_id,
- sender=vaa_verify_lsig.address(),
- sp=zeroFee,
- rekey_to=get_application_address(app_id),
- on_complete=transaction.OnComplete.NoOpOC
- )
- transaction.assign_group_id([feePayment, noop])
- signedFeePayment = feePayment.sign(creator.getPrivateKey())
- signedNoop = transaction.LogicSigTransaction(lsig=vaa_verify_lsig, transaction=noop)
- client.send_transactions([signedFeePayment, signedNoop])
- portal_core.waitForTransaction(client, signedNoop.get_txid())
- def tests_rejection_on_non_app_call(client, portal_core, creator, vaa_verify_lsig):
- with pytest.raises(AlgodHTTPError):
- doubleFee = client.suggested_params()
- doubleFee.flat_fee = True
- doubleFee.fee = 2000
- feePayment = transaction.PaymentTxn(
- sender=creator.getAddress(),
- receiver=creator.getAddress(),
- amt=0,
- sp=doubleFee
- )
- zeroFee = client.suggested_params()
- zeroFee.flat_fee = True
- zeroFee.fee = 0
- payment = transaction.PaymentTxn(
- sender=vaa_verify_lsig.address(),
- receiver=vaa_verify_lsig.address(),
- amt=0,
- sp=zeroFee,
- )
- transaction.assign_group_id([feePayment, payment])
- signedFeePayment = feePayment.sign(creator.getPrivateKey())
- signedPayment = transaction.LogicSigTransaction(lsig=vaa_verify_lsig, transaction=payment)
- client.send_transactions([signedFeePayment, signedPayment])
- portal_core.waitForTransaction(client, signedPayment.get_txid())
- def tests_rejection_on_zero_fee(client, portal_core, vaa_verify_lsig, app_id, signatures, hash, signers, suggested_params):
- with pytest.raises(AlgodHTTPError):
- noop = transaction.ApplicationCallTxn(
- index=app_id,
- sender=vaa_verify_lsig.address(),
- sp=suggested_params,
- on_complete=transaction.OnComplete.NoOpOC,
- app_args=[b"nop", signatures, signers, hash]
- )
- signedNoop = transaction.LogicSigTransaction(lsig=vaa_verify_lsig, transaction=noop)
- client.send_transaction(signedNoop)
- portal_core.waitForTransaction(client, signedNoop.get_txid())
- def tests_rejection_on_hash_not_signed(client, portal_core, creator, vaa_verify_lsig, app_id, signatures, incorrect_hash, signers):
- with pytest.raises(AlgodHTTPError):
- doubleFee = client.suggested_params()
- doubleFee.flat_fee = True
- doubleFee.fee = 2000
- feePayment = transaction.PaymentTxn(
- sender=creator.getAddress(),
- receiver=creator.getAddress(),
- amt=0,
- sp=doubleFee
- )
- zeroFee = client.suggested_params()
- zeroFee.flat_fee = True
- zeroFee.fee = 0
- noop = transaction.ApplicationCallTxn(
- index=app_id,
- sender=vaa_verify_lsig.address(),
- sp=zeroFee,
- on_complete=transaction.OnComplete.NoOpOC,
- app_args=[b"nop", signatures, signers, incorrect_hash]
- )
- transaction.assign_group_id([feePayment, noop])
- signedFeePayment = feePayment.sign(creator.getPrivateKey())
- signedNoop = transaction.LogicSigTransaction(lsig=vaa_verify_lsig, transaction=noop)
- client.send_transactions([signedFeePayment, signedNoop])
- portal_core.waitForTransaction(client, signedNoop.get_txid())
- def tests_success(client, portal_core, creator, vaa_verify_lsig, app_id, signatures, hash, signers):
- doubleFee = client.suggested_params()
- doubleFee.flat_fee = True
- doubleFee.fee = 2000
- feePayment = transaction.PaymentTxn(
- sender=creator.getAddress(),
- receiver=creator.getAddress(),
- amt=0,
- sp=doubleFee
- )
- zeroFee = client.suggested_params()
- zeroFee.flat_fee = True
- zeroFee.fee = 0
- noop = transaction.ApplicationCallTxn(
- index=app_id,
- sender=vaa_verify_lsig.address(),
- sp=zeroFee,
- on_complete=transaction.OnComplete.NoOpOC,
- app_args=[b"nop", signatures, signers, hash]
- )
- transaction.assign_group_id([feePayment, noop])
- signedFeePayment = feePayment.sign(creator.getPrivateKey())
- signedNoop = transaction.LogicSigTransaction(lsig=vaa_verify_lsig, transaction=noop)
- client.send_transactions([signedFeePayment, signedNoop])
- portal_core.waitForTransaction(client, signedNoop.get_txid())
|