Several Fixes and unchained ASSERTs for easier debugging.

This commit is contained in:
Hernán Di Pietro 2021-11-18 14:32:01 -03:00
parent b93fe26905
commit 3c53c80dee
2 changed files with 34 additions and 32 deletions

View File

@ -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() -

View File

@ -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"