From ca57c6895356b102a2068790beac2bacaeb9c796 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hern=C3=A1n=20Di=20Pietro?= Date: Thu, 18 Nov 2021 18:13:46 -0300 Subject: [PATCH] commit_vaa fixes. updated handtests. --- teal/wormhole/pyteal/vaa-processor.py | 27 ++++++------ test/Handtest-guide.md | 59 +++++++++++++++++++++++---- 2 files changed, 64 insertions(+), 22 deletions(-) diff --git a/teal/wormhole/pyteal/vaa-processor.py b/teal/wormhole/pyteal/vaa-processor.py index edd2c076..24fd752b 100644 --- a/teal/wormhole/pyteal/vaa-processor.py +++ b/teal/wormhole/pyteal/vaa-processor.py @@ -61,15 +61,15 @@ SLOT_TEMP = ScratchVar(TealType.uint64, SLOTID_TEMP_0) # defined chainId/contracts -GOVERNANCE_CHAIN_ID_TEST = 3 -GOVERNANCE_CONTRACT_ID_TEST = 4 -PYTH2WORMHOLE_CHAIN_ID_TEST = 5 -PYTH2WORMHOLE_CONTRACT_ID_TEST = 6 +GOVERNANCE_CHAIN_ID = 1 +GOVERNANCE_EMITTER_ID = '00000000000000000000000000000000000000000000' +PYTH2WORMHOLE_CHAIN_ID = 1 +PYTH2WORMHOLE_EMITTER_ID = Bytes(0x71f8dcb863d176e2c420ad6610cf687359612b6fb392e0642b0ca6b1f186aa3b) # VAA fields -VAA_RECORD_EMITTER_CHAIN_POS = 8 -VAA_RECORD_EMITTER_CHAIN_LEN = 2 +VAA_RECORD_EMITTER_CHAIN_POS = 4 +VAA_RECORD_EMITTER_CHAIN_LEN = 4 VAA_RECORD_EMITTER_ADDR_POS = 10 VAA_RECORD_EMITTER_ADDR_LEN = 32 @@ -116,10 +116,11 @@ 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) + sig_count = ScratchVar(TealType.uint64) return Seq([ + sig_count.store(get_sig_count_in_step(Txn.group_index(), NUM_GUARDIANS)), For(i.store(Int(0)), - i.load() < sig_count, + i.load() < sig_count.load(), i.store(i.load() + Int(1))).Do( If( App.globalGet(Itob(i.load())) != Extract(VERIFY_ARG_GUARDIAN_KEY_SUBSET, @@ -156,16 +157,16 @@ def handle_pyth_price_ticker(): def commit_vaa(): chainId = Btoi(Extract(VERIFY_ARG_PAYLOAD, Int( VAA_RECORD_EMITTER_CHAIN_POS), Int(VAA_RECORD_EMITTER_CHAIN_LEN))) - contractId = Btoi(Extract(VERIFY_ARG_PAYLOAD, Int( + emitterId = Btoi(Extract(VERIFY_ARG_PAYLOAD, Int( VAA_RECORD_EMITTER_ADDR_POS), Int(VAA_RECORD_EMITTER_ADDR_LEN))) return Seq([ If(And( - chainId == Int(GOVERNANCE_CHAIN_ID_TEST), - contractId == Int(GOVERNANCE_CONTRACT_ID_TEST))).Then( + chainId == Int(GOVERNANCE_CHAIN_ID), + emitterId == Bytes(GOVERNANCE_EMITTER_ID))).Then( Return(handle_governance())) .ElseIf(And( - chainId == Int(PYTH2WORMHOLE_CHAIN_ID_TEST), - contractId == Int(GOVERNANCE_CONTRACT_ID_TEST) + chainId == Int(PYTH2WORMHOLE_CHAIN_ID), + emitterId == Bytes(PYTH2WORMHOLE_EMITTER_ID) )).Then( Return(handle_pyth_price_ticker()) ).Else( diff --git a/test/Handtest-guide.md b/test/Handtest-guide.md index c016388d..74a1ee79 100644 --- a/test/Handtest-guide.md +++ b/test/Handtest-guide.md @@ -27,19 +27,39 @@ Now copying /mnt/c/src/PriceCasterService/vaap-clear.teal to Algod container in -Three sample guardian keys: -0x52A26Ce40F8CAa8D36155d37ef0D5D783fc614d2 -K: 563d8d2fd4e701901d3846dee7ae7a92c18f1975195264d676f8407ac5976757 +The nineteen sample guardian keys: +0x52A26Ce40F8CAa8D36155d37ef0D5D783fc614d2 K: 563d8d2fd4e701901d3846dee7ae7a92c18f1975195264d676f8407ac5976757 +0x389A74E8FFa224aeAD0778c786163a7A2150768C K: 8d97f25916a755df1d9ef74eb4dbebc5f868cb07830527731e94478cdc2b9d5f +0xB4459EA6482D4aE574305B239B4f2264239e7599 K: 9bd728ad7617c05c31382053b57658d4a8125684c0098f740a054d87ddc0e93b -0x389A74E8FFa224aeAD0778c786163a7A2150768C -K: 8d97f25916a755df1d9ef74eb4dbebc5f868cb07830527731e94478cdc2b9d5f +0x072491bd66F63356090C11Aae8114F5372aBf12B K: 5a02c4cd110d20a83a7ce8d1a2b2ae5df252b4e5f6781c7855db5cc28ed2d1b4 +0x51280eA1fd2B0A1c76Ae29a7d54dda68860A2bfF 93d4e3b443bf11f99a00901222c032bd5f63cf73fc1bcfa40829824d121be9b2 +0xfa9Aa60CfF05e20E2CcAA784eE89A0A16C2057CB ea40e40c63c6ff155230da64a2c44fcd1f1c9e50cacb752c230f77771ce1d856 + +0xe42d59F8FCd86a1c5c4bA351bD251A5c5B05DF6A 87eaabe9c27a82198e618bca20f48f9679c0f239948dbd094005e262da33fe6a +0x4B07fF9D5cE1A6ed58b6e9e7d6974d1baBEc087e 61ffed2bff38648a6d36d6ed560b741b1ca53d45391441124f27e1e48ca04770 +0xc8306B84235D7b0478c61783C50F990bfC44cFc0 bd12a242c6da318fef8f98002efb98efbf434218a78730a197d981bebaee826e + +0xC8C1035110a13fe788259A4148F871b52bAbcb1B 20d3597bb16525b6d09e5fb56feb91b053d961ab156f4807e37d980f50e71aff +0x58A2508A20A7198E131503ce26bBE119aA8c62b2 344b313ffbc0199ff6ca08cacdaf5dc1d85221e2f2dc156a84245bd49b981673 +0x8390820f04ddA22AFe03be1c3bb10f4ba6CF94A0 848b93264edd3f1a521274ca4da4632989eb5303fd15b14e5ec6bcaa91172b05 + +0x1FD6e97387C34a1F36DE0f8341E9D409E06ec45b c6f2046c1e6c172497fc23bd362104e2f4460d0f61984938fa16ef43f27d93f6 +0x255a41fC2792209CB998A8287204D40996df9E54 693b256b1ee6b6fb353ba23274280e7166ab3be8c23c203cc76d716ba4bc32bf +0xbA663B12DD23fbF4FbAC618Be140727986B3BBd0 13c41508c0da03018d61427910b9922345ced25e2bbce50652e939ee6e5ea56d + +0x79040E577aC50486d0F6930e160A5C75FD1203C6 460ee0ee403be7a4f1eb1c63dd1edaa815fbaa6cf0cf2344dcba4a8acf9aca74 +0x3580D2F00309A9A85efFAf02564Fc183C0183A96 b25148579b99b18c8994b0b86e4dd586975a78fa6e7ad6ec89478d7fbafd2683 +0x3869795913D3B6dBF3B24a1C7654672c69A23c35 90d7ac6a82166c908b8cf1b352f3c9340a8d1f2907d7146fb7cd6354a5436cca + +0x1c0Cc52D7673c52DE99785741344662F5b2308a0 b71d23908e4cf5d6cd973394f3a4b6b164eb1065785feee612efdfd8d30005ed -0xB4459EA6482D4aE574305B239B4f2264239e7599 -K: 9bd728ad7617c05c31382053b57658d4a8125684c0098f740a054d87ddc0e93b Set environment variables for convenience. + + ``` export OWNER_ADDR=OPDM7ACAW64Q4VBWAL77Z5SHSJVZZ44V3BAN7W44U43SUXEOUENZMZYOQU @@ -112,7 +132,7 @@ TestLib {} '8d97f25916a755df1d9ef74eb4dbebc5f868cb07830527731e94478cdc2b9d5f', '9bd728ad7617c05c31382053b57658d4a8125684c0098f740a054d87ddc0e93b' ] -> t.createSignedVAA(0, sigkeys, 1, 1, 1, '0x000000000000000000000000000000000000000000000000000000000000ffff', 0, 0, '0x12345678') +> t.createSignedVAA(0, sigkeys, 1, 1, 1, '0x71f8dcb863d176e2c420ad6610cf687359612b6fb392e0642b0ca6b1f186aa3b', 0, 0, '0x12345678') '0100000000030025a2cec435380f6413e8b5d5531cd8789322a1d8bc488309bb868c33a26cc9492947b48895460d8d2261d669bcef210987cc5eeb9fa21504c3f5a9b5a0ff32df0001ee4d1a5e589b5aa0d4787eaf57ba4b41e6a54e35e8ca60a028a0f1e35db3a8ed5d901a9831272fc117f472fcd0115d31365efd575a19a28eaf5ad9be7cf5f0d90102a671b7c2af66aa6bff3337adaa7e5f196630508f85491e650cfdaccd2f67d2a605faf1c267eddaa50ac6de8d35894afce7974f14982f6173b0d020e0567f2a4a0100000001000000010001000000000000000000000000000000000000000000000000000000000000ffff00000000000000000012345678' ``` @@ -136,7 +156,7 @@ a671b7c2af66aa6bff3337adaa7e5f196630508f85491e650cfdaccd2f67d2a605faf1c267eddaa5 00000001 timestamp 00000001 nonce 0001 chain-id -000000000000000000000000000000000000000000000000000000000000ffff emitterAddress +71f8dcb863d176e2c420ad6610cf687359612b6fb392e0642b0ca6b1f186aa3b emitterAddress 0000000000000000 sequence 00 consistency-level @@ -145,3 +165,24 @@ payload: ``` +VAA Body: +00 00 00 01 00 00 00 01 00 01 71f8dcb863d176e2c420ad6610cf687359612b6fb392e0642b0ca6b1f186aa3b00000000000000010012345678 + +Since there are three signers, VAA can be verified in a group transaction with just one step. + +Stateless logic accepts signature subset as argument (encoded in base64). + + + +``` +export SIGNATURES64=`node -e "console.log(Buffer.from('25a2cec435380f6413e8b5d5531cd8789322a1d8bc488309bb868c33a26cc9492947b48895460d8d2261d669bcef210987cc5eeb9fa21504c3f5a9b5a0ff32df00ee4d1a5e589b5aa0d4787eaf57ba4b41e6a54e35e8ca60a028a0f1e35db3a8ed5d901a9831272fc117f472fcd0115d31365efd575a19a28eaf5ad9be7cf5f0d901a671b7c2af66aa6bff3337adaa7e5f196630508f85491e650cfdaccd2f67d2a605faf1c267eddaa50ac6de8d35894afce7974f14982f6173b0d020e0567f2a4a01','hex').toString('base64'))"` +export VAABODY=`0000000100000001000171f8dcb863d176e2c420ad6610cf687359612b6fb392e0642b0ca6b1f186aa3b00000000000000010012345678` +export VAABODY64=`node -e "console.log(Buffer.from('$VAABODY64', 'hex').toString('base64'))"` +export STATELESS_ADDR=4H2VD6GY4L7HEOVTZBKGTO6EYFASYFOWN34ONR5HIFEE2JIJ2M5GK26SXI +export GUARDIAN_KEYS='52A26Ce40F8CAa8D36155d37ef0D5D783fc614d2389A74E8FFa224aeAD0778c786163a7A2150768CB4459EA6482D4aE574305B239B4f2264239e7599' +export GKEYSBASE64=`node -e "console.log(Buffer.from('$GUARDIAN_KEYS', 'hex').toString('base64'))"` + +goal app call --app-id 45504480 --from "$STATELESS_ADDR" --app-arg "str:verify" --app-arg "b64:$GKEYSBASE64" --app-arg "int:3" --noteb64 "$VAABODY" -o verify.txn + +``` +