From 3c53c80deede8ef1f29df6f2cedae55c6a463b3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hern=C3=A1n=20Di=20Pietro?= Date: Thu, 18 Nov 2021 14:32:01 -0300 Subject: [PATCH] Several Fixes and unchained ASSERTs for easier debugging. --- teal/wormhole/pyteal/vaa-processor.py | 42 +++++++++++++++------------ teal/wormhole/pyteal/vaa-verify.py | 24 +++++++-------- 2 files changed, 34 insertions(+), 32 deletions(-) diff --git a/teal/wormhole/pyteal/vaa-processor.py b/teal/wormhole/pyteal/vaa-processor.py index 376199bf..edd2c076 100644 --- a/teal/wormhole/pyteal/vaa-processor.py +++ b/teal/wormhole/pyteal/vaa-processor.py @@ -49,8 +49,8 @@ import sys GUARDIAN_ADDRESS_SIZE = 20 METHOD = Txn.application_args[0] -VERIFY_ARG_GUARDIAN_KEY_SUBSET = Txn.application_args[0] -VERIFY_ARG_GUARDIAN_SET_SIZE = Txn.application_args[1] +VERIFY_ARG_GUARDIAN_KEY_SUBSET = Txn.application_args[1] +VERIFY_ARG_GUARDIAN_SET_SIZE = Txn.application_args[2] VERIFY_ARG_PAYLOAD = Txn.note() SLOTID_TEMP_0 = 251 SLOTID_VERIFIED_BIT = 254 @@ -87,7 +87,7 @@ def bootstrap(): guardian_count = ScratchVar(TealType.uint64) i = SLOT_TEMP return Seq([ - Assert(Txn.application_args.length() == Int(2)), + Assert(Txn.application_args.length() == Int(3)), Assert(Len(Txn.application_args[0]) % Int(GUARDIAN_ADDRESS_SIZE) == Int(0)), guardian_count.store( @@ -116,9 +116,10 @@ def check_guardian_key_subset(): # global state for the same keys. # i = SLOT_TEMP + sig_count = get_sig_count_in_step(Txn.group_index(), NUM_GUARDIANS) return Seq([ For(i.store(Int(0)), - i.load() < get_sig_count_in_step(Txn.group_index(), NUM_GUARDIANS), + i.load() < sig_count, i.store(i.load() + Int(1))).Do( If( App.globalGet(Itob(i.load())) != Extract(VERIFY_ARG_GUARDIAN_KEY_SUBSET, @@ -175,15 +176,18 @@ def commit_vaa(): @Subroutine(TealType.uint64) def check_final_verification_state(): + # + # Verifies that previous steps had set their verification bits. + # i = SLOT_TEMP return Seq([ - For(i.store(Int(0)), + For(i.store(Int(1)), i.load() < Global.group_size(), - i.store(i.load() + Int(0))).Do( - Assert( - And(Gtxn[i.load()].type_enum() == TxnType.ApplicationCall, - Gtxn[i.load()].application_id() == Txn.application_id(), - GetBit(ImportScratchValue(i.load(), SLOTID_VERIFIED_BIT), i.load()) == Int(1))) + i.store(i.load() + Int(1))).Do(Seq([ + Assert(Gtxn[i.load()].type_enum() == TxnType.ApplicationCall), + Assert(Gtxn[i.load()].application_id() == Txn.application_id()), + Assert(GetBit(ImportScratchValue(i.load() - Int(1), SLOTID_VERIFIED_BIT), i.load()) == Int(1)) + ]) ), Return(Int(1)) ]) @@ -195,10 +199,10 @@ def setvphash(): # return Seq([ - Assert(And(is_creator(), - Global.group_size() == Int(1), - Txn.application_args.length() == Int(2), - Len(Txn.application_args[1]) == Int(32))), + Assert(is_creator()), + Assert(Global.group_size() == Int(1)), + Assert(Txn.application_args.length() == Int(2)), + Assert(Len(Txn.application_args[1]) == Int(32)), App.globalPut(Bytes("vphash"), Txn.application_args[1]), Approve() ]) @@ -218,11 +222,11 @@ def verify(): return Seq([ SLOT_VERIFIED_BITFIELD.store(Int(0)), - Assert(And(Global.group_size() == get_group_size(NUM_GUARDIANS), - Txn.application_args.length() == Int(3), - Txn.sender() == STATELESS_LOGIC_HASH, - check_guardian_set_size(), - check_guardian_key_subset())), + Assert(Global.group_size() == get_group_size(NUM_GUARDIANS)), + Assert(Txn.application_args.length() == Int(3)), + Assert(Txn.sender() == STATELESS_LOGIC_HASH), + Assert(check_guardian_set_size()), + Assert(check_guardian_key_subset()), SLOT_VERIFIED_BITFIELD.store( SetBit(SLOT_VERIFIED_BITFIELD.load(), Txn.group_index(), Int(1))), If(Txn.group_index() == Global.group_size() - diff --git a/teal/wormhole/pyteal/vaa-verify.py b/teal/wormhole/pyteal/vaa-verify.py index d8c27f56..e54e32a3 100644 --- a/teal/wormhole/pyteal/vaa-verify.py +++ b/teal/wormhole/pyteal/vaa-verify.py @@ -93,19 +93,17 @@ def vaa_verify_program(vaa_processor_app_id): num_guardians = Txn.application_args[2] return Seq([ - Assert(And( - Txn.fee() <= Int(1000), - Txn.application_args.length() == Int(1), - Len(signatures) == get_sig_count_in_step( - Txn.group_index(), Btoi(num_guardians)) * Int(66), - Txn.rekey_to() == Global.zero_address(), - Txn.application_id() == Int(vaa_processor_app_id), - Txn.type_enum() == TxnType.ApplicationCall, - Global.group_size() == get_group_size(Btoi(num_guardians)), - sig_check(signatures, digest, keys)) - ), - Approve()]) - + Assert(Txn.fee() <= Int(1000)), + Assert(Txn.application_args.length() == Int(1)), + Assert(Len(signatures) == get_sig_count_in_step( + Txn.group_index(), Btoi(num_guardians)) * Int(66)), + Assert(Txn.rekey_to() == Global.zero_address()), + Assert(Txn.application_id() == Int(vaa_processor_app_id)), + Assert(Txn.type_enum() == TxnType.ApplicationCall), + Assert(Global.group_size() == get_group_size(Btoi(num_guardians))), + Assert(sig_check(signatures, digest, keys)), + Approve()] + ) if __name__ == "__main__": outfile = "teal/wormhole/build/vaa-verify.teal"