diff --git a/.github/workflows/ci-starknet-tools.yml b/.github/workflows/ci-starknet-tools.yml index 86a0b8fa74..345a2ad2d0 100644 --- a/.github/workflows/ci-starknet-tools.yml +++ b/.github/workflows/ci-starknet-tools.yml @@ -21,9 +21,12 @@ jobs: run: cargo fmt --manifest-path ./target_chains/starknet/tools/test_vaas/Cargo.toml -- --check - name: Run clippy run: cargo clippy --manifest-path ./target_chains/starknet/tools/test_vaas/Cargo.toml --all-targets -- --deny warnings - - name: Run wormhole_mainnet_upgrades binary - run: cargo run --manifest-path ./target_chains/starknet/tools/test_vaas/Cargo.toml --bin wormhole_mainnet_upgrades - name: Run generate_keypair binary run: cargo run --manifest-path ./target_chains/starknet/tools/test_vaas/Cargo.toml --bin generate_keypair - - name: Run generate_wormhole_vaas binary - run: cargo run --manifest-path ./target_chains/starknet/tools/test_vaas/Cargo.toml --bin generate_wormhole_vaas + - name: Check test data + run: | + cargo run --manifest-path ./target_chains/starknet/tools/test_vaas/Cargo.toml --bin generate_test_data > /tmp/data.cairo + if ! diff ./target_chains/starknet/contracts/tests/data.cairo /tmp/data.cairo; then + >&2 echo "Re-run generate_test_data to update data.cairo" + exit 1 + fi diff --git a/target_chains/starknet/contracts/README.md b/target_chains/starknet/contracts/README.md index daa12b053d..550634ed93 100644 --- a/target_chains/starknet/contracts/README.md +++ b/target_chains/starknet/contracts/README.md @@ -13,14 +13,12 @@ The `.tool-versions` file in this directory specifies the tool versions used by Run `snforge test` in this directory to run the contract unit tests and integration tests. -Some tests contain input data that was generated with `test_vaas` tool. -To run it, use the following commands from the repository root (requires Rust installation): +The `tests/data.cairo` file contains input data that was generated with `test_vaas` tool. +To regenerate it, run the following commands from the repository root (requires Rust installation): ``` cd target_chains/starknet/tools/test_vaas -cargo run --bin re_sign_price_updates -cargo run --bin generate_wormhole_vaas -cargo run --bin wormhole_mainnet_upgrades +cargo run --bin generate_test_data > ../../contracts/tests/data.cairo ``` ## Formatting diff --git a/target_chains/starknet/contracts/tests/data.cairo b/target_chains/starknet/contracts/tests/data.cairo new file mode 100644 index 0000000000..c0145acdb9 --- /dev/null +++ b/target_chains/starknet/contracts/tests/data.cairo @@ -0,0 +1,450 @@ +// Generated with generate_test_data.rs, do not edit + +use pyth::byte_array::{ByteArray, ByteArrayImpl}; +use pyth::util::array_try_into; + +// A random update pulled from Hermes. +pub fn good_update1() -> ByteArray { + let bytes = array![ + 141887862745809943100717722154781668316147089807066324001213790862261653767, + 451230040559159019530944948086670994623010697390864133264612902902585665886, + 355897384610106978643111834734000274494997301794613218547634257521495150151, + 140511063638834349363702006999356227863549404051701803148734324248522745879, + 435849190784772134907557391544163070978531038970298390345939133663347953446, + 416390591179833928094641114955594939466104495718036761707729297119441316151, + 360454929416220920336539568461651500076647166763464050800345920693176904002, + 316054999864337699543932294956493808847640383114707243342262764542081441331, + 325277902980160684959962429721294603784343718796390808940252812862355246813, + 43683235854839458868457367619068018785880460427473556950900276498953667, + 448289429405712011882317781416869052550573589492688760675666957663813001522, + 118081463902430977133121147164253483958565039026724621562859841189218059803, + 194064310618695309465615383754562031677972810736048112738513050109934134235, + 133901765334590923121691219814784557892214901646312752962904032795881821509, + 404227501001709279944936006741063968912686453006275462577777397594240621266, + 81649001731335394114026683805238949464016657447685509824621946636993704965, + 32402065226491532148674904435794801976788068837745943243341272676331333141, + 431262841416902409381606630149292665102873776020834630861578112749151562174, + 6164523115980545628843981978797257048781800754033825701059814297149591186, + 408761574582108996678203805090470134287794603493622537384530614829262728153, + 185368533577943244707350150853170361880334596276529206938783888784867529821, + 173578821500714074579643724957224629379984215847383417303110192934676518530, + 90209855380378362490166376523380463998928070428866100240907090599465187835, + 97758466908511588082569287391708453107999243934457382895073183209581711489, + 132725011490528489913736834798247512772139171145730373610858422315799224432, + 117123868005849140967825260063167768530251411611975150066586827543934313288, + 408149062252618928234854115279677715692278734600386004492580987016428761675, + 164529520317122600276020522906605877985809506451193373524142111430138855019, + 444793051809958482843529748761971363435331354795896511243191618771787268378, + 247660009137502548346315865368477795392972486141407800140910365553760622080, + 3281582060272565111592312037403686940429019548922889497694300188, + 93649805131515836129946966966350066506512123780266587069413066350925286142, + 394112423559676785086098106350541172262729583743734966358666094809121292390, + 35403101004688876764673991514113473446030702766599795822870037077688984558, + 99366103604611980443183454746643823071419076016677225828619807954313149423, + 10381657217606191031071521950784155484751645280452344547752823767622424055, + 391045354044274401116419632681482293741435113770205621235865697077178955228, + 311250087759201408758984550959714865999349469611700431708031036894849650573, + 59953730895385399344628932835545900304309851622811198425230584225200786697, + 226866843267230707879834616967256711063296411939069440476882347301771901839, + 95752383404870925303422787, + ]; + ByteArrayImpl::new(array_try_into(bytes), 11) +} + +// A wormhole VAA from a random update pulled from Hermes. +pub fn good_vm1() -> ByteArray { + let bytes = array![ + 1766847066033410293701000231337210964058791470455465385734308943533652138, + 250126301534699068413432844632573953364878937343368310395142095034982913232, + 374780571002258088211231890250917843593951765403462661483498298003400611238, + 23190137343211334092589308306056431640588154666326612124726174150537328574, + 238750269065878649216923353030193912502813798896051725498208457553032584635, + 29844190303057534696518006438077948796328243878877072296680853158289181326, + 106329507856770018708432343978518079724691760719405501795955774399597471533, + 50779865592261858016477142415230454208001695486195806892438697217059319645, + 448669871976126446102256476358498380455807705600424321390063431836375575318, + 115682669871397824853706713833773246708114483862317474710603223566297521279, + 301634766618012930739391408723909107532790832406455099966028276947414082504, + 104473166230846104217366042152018649207811514257244625711402436055500423094, + 64445621634231668761998815864645440965239569561546522651415024970517905416, + 192317190225976528694195501079591384434869624408066864018183189813956862386, + 289982656017597431343118552054719821766658675456661448685110903889153449006, + 218840601196095059731241556733624112758673153548932709011933806481899680620, + 430933799927481265070475198137531816946660368757134588278434352703899277070, + 69322998883710289192076494057541346430050879299268159627180404869988632073, + 23862615839737051269352321086490452186237833007444069999578906611768140646, + 444634264607471510688862284107804392707600799506487897206707262445172121289, + 438038196736233160320436150616293672539386464061037100698335568417587662951, + 4682255185797880874381673193118803274635247527626050223938224759013169366, + 337620725992972686809095065321563509600769533202700218393281926304544120094, + 106657917096532484607371891267699639824731774168349872862335217581425289654, + 71240348385993236445536577509595968468284689483611375124653855125285401592, + 347603391821038175842934311068097986460257977131947418186118379296987051086, + 414263571545410645948841360836383289766662078574048514890988877286444618669, + 250301638008739107522011802538487063969565433276260914336890309092111026583, + 43192785595291340058788190601908070333310658291317702311902081, + 52685537088250779930155363779405986390839624071318818148325576008719597568, + 14615204155786886573933667335033405822686404253588533, + ]; + ByteArrayImpl::new(array_try_into(bytes), 22) +} + +// An actual mainnet wormhole governance VAA from https://github.com/pyth-network/pyth-crosschain/blob/main/contract_manager/src/contracts/wormhole.ts#L32-L37 +pub fn mainnet_guardian_set_upgrade1() -> ByteArray { + let bytes = array![ + 1766847064779994277746302277072294871108550301449637470263976489521154979, + 374953657095152923031303770743522269007103499920836805761143506434463979495, + 373725794026553362537846905304981854320892126869150736450761801254169477120, + 4835703278458516786446336, + 1131377253, + 3533694129556775410652111826415980944262631656421498398215501759245151417, + 145493015216602589471695207668173527044214450021182755196032581352392984224, + 267497573836069714380350521200881787609530659298168186016481773490244091266, + 443348533394886521835330696538264729103669807313401311199245411889706258110, + 200303433165499832354845293203843028338419687800279845786613090211434473108, + 37282816539161742972709083946551920068062204748477644719930149699874385462, + 111200938271608595261384934914291476246753101189480743698823215749338358345, + 5785682963869019134199015821749288033381872318410562688180948003975909269, + 372447340016996751453958019806457886428852701283870538393820846119845147788, + 33251468085387571623103303511315696691298281336333243761063342581452341650, + 323161992096034641767541451811925056802673576212351940217752194462561980347, + 55852237138651071644815135002358067220635692701051811455610533875912981641, + 190413173566657072516608762222993749133, + ]; + ByteArrayImpl::new(array_try_into(bytes), 16) +} + +// An actual mainnet wormhole governance VAA from https://github.com/pyth-network/pyth-crosschain/blob/main/contract_manager/src/contracts/wormhole.ts#L32-L37 +pub fn mainnet_guardian_set_upgrade2() -> ByteArray { + let bytes = array![ + 1766847065210651126944505525521222069599854288126726949998063840465138797, + 39054013088470866893599813322035661048501117089555726788687392536164861911, + 186918267413056900890218521593203545230034250983266377769400670103688217224, + 54214750922097681971590495378823998039261772575502204791108963815396679538, + 248994008232667872698758486001506749115615219491023036208140426934463230397, + 224235483823871042187452194579994340291351644933258737665365374081962645784, + 129444929990547403397151941456764812818993218972657847255833740800106200260, + 318548597134783137700627869311159664823693239605331630210202210299165477657, + 308852933010951129895011963941866000261904600807292935694851016610643657184, + 57272874228621364335170723193404742446392708606247574725663969156507973216, + 268057363923565984687253533797066429881117576606682526627284795527707196557, + 421894189151847402000239734668088381785344768284464330085711322870200424121, + 387584417395337067059819722404321580961380603778956902593594676080614899975, + 443523131755342451570503958659975367050637907361274652611595274647186073286, + 375107813087591446268414166006799680982485924290770541964399283524664437852, + 269085314426821465871247165234113878276592898426373369094610290261431112145, + 394348694527460459816454348661249546781513091938003106009521096332701847735, + 125670844183465056159554034633959680574572737212268749779705635378223489518, + 35053869475614771227400345921974210525173525784259894123687028214330135561, + 57544237843860512274491447149877290860624174166427313971286819807773907946, + 110681468147560408039747352809294082929396639199393789980441736520638055418, + 45709869872872997180086402576677640909777820941436708911954532772405320395, + 339910511168418517917975736269171135752028257685502872671902330279073260362, + 76482764517489607955778008190826845581092838692650194719207882266659669490, + 443663869577220861680293443959666949893574779475752540587040489501289361777, + 231057874919577223790659840464529054850239319545221055959374917590157019925, + 309066533217885002074480704480667619809952056265738927105682076502747220549, + 212379788814604791028007106821871908074818251907335322546331543385945316762, + 165408661499085325620077702639227003047567884011538988728381864749733773312, + 29852013947978990147012099107546124222651092940097518043136, + 5874446556610227706402640854088357165514903, + 314635470832203526600706472223155382046271943513513368538979543914002758100, + 289993023590817330918274026889451152915026890048318491140264484864242055689, + 211265316833000774821515110003986084297271807500310630074520699505436206838, + 314620948986744608212517578488307826224331071350776523303159889004405167502, + 242768143829057016675085776170635413106817756232919004913342240722183648628, + 289318220340670045883106021427202666948428587921558828582664470923483208386, + 254304247593881109676724582609273741670949040469906895867342151706444640548, + 324707984060675446628128892371664948354047882542253609514703956739624414429, + 125786084546320950738753348592393927755418642173185609412108154831520915923, + 192033422676298173731756291271054199566981168481817292625435767748408605264, + 70237018464728620254434305961956673950089621204502627373468857093940647376, + 75218391584551901010047495874303520775865073092730040058902770251005073864, + 13453, + ]; + ByteArrayImpl::new(array_try_into(bytes), 2) +} + +// An actual mainnet wormhole governance VAA from https://github.com/pyth-network/pyth-crosschain/blob/main/contract_manager/src/contracts/wormhole.ts#L32-L37 +pub fn mainnet_guardian_set_upgrade3() -> ByteArray { + let bytes = array![ + 1766847065622031860560134801367788401015571316785630090767859240961980367, + 408239335069601434456324970231880063141100099721451058487412176729277688481, + 239499689753305520381601038928513796227317320911002802551444547638809838552, + 377515301744513788082523380503265415136454305699441419871183462725292421897, + 293792427782284265052215516935690252661713253004854348809536189867737815900, + 307592266914902727916633292174670243188255704510048236277225897328900269063, + 127373290139474278928992577974696343462455769904046193125018730285162391253, + 391788800785481654990215164673817619378887263909639120513493454202816019863, + 410413307118599096084169722886408584518140871169074821252461819158667354254, + 18837648490111595970198935552266546643395427923804444528866768515056419823, + 29964034682984173558839379357821569529808274426015494950430380078317881569, + 86017868501532670528023530422115758730056738654625156800662778409971102579, + 316587967137295297243489759859408971025377360462781809717927347025414193161, + 412080542369789462767669836400697110505430973769191785499739175360336337147, + 342817079347905714229318925597762381802367663565411998187223317628701911440, + 323381353160339090772037140072061985169258958022395380273676898316834639836, + 199931590715070935127318740956564588449721873695471932311700469202637695100, + 53310522180389647586576928116330850824055549848985438538201222342553700451, + 387322343922164253479438966163491855981414317104760621828688810466847848718, + 81609701542274539489711635515209037026645626576756528749469616228397567798, + 182108205861564989333892774796475580877981373947799860454217397980367659628, + 21549663410658134468902761710868642321546772465973442277960059676129502668, + 189434039785735939400321781125039794740638779195156759980704929066694157130, + 52255833533187953003213955242027099690232530588872309460610106220279805641, + 197105018621162723372171195601447549272902142615124680111298974553437412361, + 243585516151555343004264928593678764289083751554802049062044286334698216184, + 98577806073901898829375415748245478967425496216912736575886605480181121443, + 92916551389967933235240931764170084503123511470557201449603712010638670912, + 279247190794260779926452059689914005511524938154821508635388069101252378624, + 27765181507524306000048567556593270127801507143251178553344, + 5874446556610227706402640926145951203442839, + 314635470832203526600706472223155382046271943513513368538979543914002758100, + 289993023590817330918274026889451152915026890048318491140264484864242055689, + 211265316833000774821515110003986084297271807500310630074520699505436206838, + 314620948986744608212517578488307826224331071350776523303159889004405167502, + 242768143829057016675085658054156069029173843566452718977789980910319968372, + 289318220340670045883106021427202666948428587921558828582664470923483208386, + 254304247593881109676724582609273741670949040469906895867342151706444640548, + 324707984060675446628128892371664948354047882542253609514703956739624414429, + 125786084546320950738753348592393927755418642173185609412108154831520915923, + 192033422676298173731756291271054199566981168481817292625435767748408605264, + 70237018464728620254434305961956673950089621204502627373468857093940647376, + 75218391584551901010047495874303520775865073092730040058902770251005073864, + 13453, + ]; + ByteArrayImpl::new(array_try_into(bytes), 2) +} + +// An actual mainnet wormhole governance VAA from https://github.com/pyth-network/pyth-crosschain/blob/main/contract_manager/src/contracts/wormhole.ts#L32-L37 +pub fn mainnet_guardian_set_upgrade4() -> ByteArray { + let bytes = array![ + 1766847066033426987337757245669159273063358729535478806850006662056807068, + 191023158244075433218055661747029015323596061316379687901032561397223546211, + 30156550775609732785124128084945604136341937408029517653427049258063209215, + 301841618969457377999846355946508544313297803407604349411042057045510372286, + 399879387152070823070522891203531321261797829310211644637928969034931151834, + 1184971666775858810527395126763859219514013163556756790208661779020321698, + 427827873217506136303198988655697899138087317492051993053159867826892618987, + 55439109913191967501571602277685262841453050617358377329061538069328212552, + 34944602254693785869427132065664922748183924456022812505745784482260734500, + 50091615215549712387991200985741575718080363004681463525186508796585379155, + 265247833149227842278059484961926330281584344437952973839486092319885300192, + 421631446041795295328070636491346018953171276542115189082171457479754499396, + 59057903625576869235407103565877017330396402246452653660114888284545941770, + 315797852826246435174946736461540321579373154656484006452063031513301027405, + 9521420622979958910372839981791309896262328383324674284772682980734269170, + 272964069264268937653695089515793248726920319914036642027008415285406913245, + 194708434228888226032102758315234166672190899487218971410889219134701358728, + 117864954129109327302856065706421701676973859697066630532570005860486924893, + 323457021720552374478769194145226061243431674370101604382965685057422991463, + 327482733702858147057975319784026874245182397914737119038454598086198587150, + 159726033816658034104416471293601013976445904149240898589368461412472508473, + 165970343982649234398221341351816767302457220504375238905210573566962780340, + 66269488760319836583658182431744051236825244016843316092957806563966254500, + 360882001282595740056823749884962228392082962172369522212117195988772429063, + 202692667772209236945884489592750537635169234501360011152939202347962132650, + 407257364829649465305126488148712878739144584682351279109461295389594525334, + 270499607712829989691415988895838806019492861138165540862008308077962735002, + 388443296961168536186587069708212659389994895697827691755155284015603161464, + 45068266527940236008536134081672474027695203549460934893262212861351952384, + 31319268777966350508118557206583844424308993254125039779840, + 5874446556610227706402640998203302487747647, + 204224545225244051821590480758420624947979343122083461045877549162059250132, + 289993023590817330918274026889451152915026890048318491140264484864242055689, + 211265316833000774821515110003986084297271807500310630074520699505436206838, + 314620948986744608212517578488307826224331071350776523303159889004405167502, + 242768143829057016675085658054156069029173843566452718977789980910319968372, + 289318220340670045883106021427202666948428587921558828582664470923483208386, + 254304247593881109676724582609273741670949040469906895867342151706444640548, + 324707984060675446628128892371664948354047882542253609514703956739624414429, + 125786084546320950738753348592393927755418642173185609412108154831520915923, + 192033422676298173731756291271054199566981168481817292625435767748408605264, + 70237018464728620254434305961956673950089621204502627373468857093940647376, + 75218391584551901010047495874303520775865073092730040058902770251005073864, + 13453, + ]; + ByteArrayImpl::new(array_try_into(bytes), 2) +} + +pub const TEST_GUARDIAN_ADDRESS1: felt252 = 0x686b9ea8e3237110eaaba1f1b7467559a3273819; +pub const TEST_GUARDIAN_ADDRESS2: felt252 = 0x363598f080a817e633fc2d8f2b92e6e637f8b449; + +// An invalid wormhole guardian set upgrade instruction containing no new guardians. +pub fn empty_set_upgrade() -> ByteArray { + let bytes = array![ + 1766847064779992178996580835909277664613661950847933439396875833330622292, + 364268459763994160238907315760635322263304542127720162879870384990884673431, + 419730305090247124548471445441531015782496798516552461724622762829422788608, + 4835703278458516699153920, + 1131377253, + 210141960835432704, + ]; + ByteArrayImpl::new(array_try_into(bytes), 8) +} + +// A wormhole guardian set upgrade instruction with emitter not expected by the test. +pub fn wrong_emitter_upgrade() -> ByteArray { + let bytes = array![ + 1766847064779994286935846877901139612104608837038764127758248269325228906, + 418887508807350452965708560347030276949211978189626151402664101079839557558, + 197343809067707990824443354127489340211392396345777701010771497603219587072, + 6044629098073145873860096, + 1131377253, + 307122819832911374634462256129025725147663742791077927773782095897, + ]; + ByteArrayImpl::new(array_try_into(bytes), 28) +} + +// A wormhole guardian set upgrade instruction with set index = 3 not expected by the test. +pub fn wrong_index_upgrade() -> ByteArray { + let bytes = array![ + 1766847064779996028795173168119917022867471281757617479529431178557452389, + 193283302630366040376283958080462867566389017166937293916301423178932756308, + 242372832420793675848312873608890898918531405734576271399238077831505248256, + 4835703278458516699153920, + 1131377253, + 210624583337115497886730203944140689990237281548333499058561169433, + ]; + ByteArrayImpl::new(array_try_into(bytes), 28) +} + +// A wormhole governance guardian set upgrade instruction signed by test guardian #1 containing test guardian #2 as the new guardian set. +pub fn upgrade_to_test2() -> ByteArray { + let bytes = array![ + 1766847064779995287375101177319600239435018729139341591012343354326614060, + 152103705464783935682610402914146418697934830197930803919710856925871578605, + 421150899970781847000318380764303006646986333759174982038890844802036793344, + 4835703278458516699153920, + 1131377253, + 210624583337114749311237613435643962969294824395451022190048752713, + ]; + ByteArrayImpl::new(array_try_into(bytes), 28) +} + +// A Pyth governance instruction to set fee signed by the test guardian #1. +pub fn pyth_set_fee() -> ByteArray { + let bytes = array![ + 1766847064779993955862540543984267022910717161432209540262366788014689913, + 322968519187498395396360816568387642032723484530650782503164941848016432477, + 407975527128964115747680681091773270935844489133353741223501742992990928896, + 49565958604199796163020368, + 8072278384728444780182694421117884443886221966887092226, + ]; + ByteArrayImpl::new(array_try_into(bytes), 23) +} + +// A Pyth governance instruction to set data sources signed by the test guardian #1. +pub fn pyth_set_data_sources() -> ByteArray { + let bytes = array![ + 1766847064779993795984967344618836356750759980724568847727566676204733945, + 319252252405206634291073190903653114488682078063415369176250618646860635118, + 427774687951454487776318063357824898404188691225649546174530713404617785344, + 49565958604199796163020368, + 148907253454411774545738931219166892876160512393929267898119961543514185585, + 223938022913800988696085410923418445187967252047785407181969631814277398528, + 301, + ]; + ByteArrayImpl::new(array_try_into(bytes), 14) +} + +// A Pyth governance instruction to set wormhole address signed by the test guardian #1. +pub fn pyth_set_wormhole() -> ByteArray { + let bytes = array![ + 1766847064779993746734475762358060494055703996306832791834621971457521573, + 304597972750688370688620483915336485865968448355388067310514768529150663948, + 37753701654018547624593082738443625808734511977366199414609989499994767360, + 49565958604199796163020368, + 148907253456057279176930315687485033494639386197985334929728922792833758561, + 3789456330195130818, + ]; + ByteArrayImpl::new(array_try_into(bytes), 8) +} + +// An update pulled from Hermes and re-signed by the test guardian #1. +pub fn test_price_update1() -> ByteArray { + let bytes = array![ + 141887862745809943100421399774809552050876420277163116849842965275903806689, + 210740906737592158039211995620336526131859667363627655742687286503264782608, + 437230063624699337579360546580839669896712252828825008570863758867641146081, + 3498691308882995183871222184377409432186747119716981166996399082193594993, + 1390200166945919815453709407753165121175395927094647129599868236, + 222819573728193325268644030206737371345667885599602384508424089704440116301, + 341318259000017461738706238280879290398059773267212529438772847337449455616, + 1275126645346645395843037504005879519843596923369759718556759844520336145, + 363528783578153760894082184744116718493621815898909809604883433584616420886, + 301537311768214106147206781423041990995720118715322906821301413003463484347, + 83150006264761451992768264969047148434524798781124754530141755679159432208, + 96387772316726941183358990094337324283641753573556594738287498821253761827, + 395908154570808692326126405856049827157095768069251211022053821585519235652, + 87135893730137265929093180553063146337041045646221968026289709394440932141, + 245333243912241114598596888050489286502591033459250287888834, + ]; + ByteArrayImpl::new(array_try_into(bytes), 25) +} + +// An update pulled from Hermes and re-signed by the test guardian #1. +pub fn test_price_update2() -> ByteArray { + let bytes = array![ + 141887862745809943100421399774809552050874823427618844548942380383465221086, + 106893583704677921907497845070624642590618427233243792006390965895909696183, + 126617671723931969110123875642449115250793288301361049879364132884271078113, + 3498691308882995183871222184377409432186747119716981166996399082193594993, + 1390200461185063661704370212555794334034815850290352693418762308, + 419598057710749587537080281518289024699150505326900462079484531390510117965, + 341318259000017461738706238280879290398059773267212529438780607147892801536, + 1437437604754599821041091415535991441313586347841485651963630208563420739, + 305222830440467078008666830004555943609735125691441831219591213494068931362, + 358396406696718360717615797531477055540194104082154743994717297650279402646, + 429270385827211102844129651648706540139690432947840438198166022904666187018, + 343946166212648899477337159288779715507980257611242783073384876024451565860, + 67853010773876862913176476530730880916439012004585961528150130218675908823, + 370855179649505412564259994413632062925303311800103998016489412083011059699, + 1182295126766215829784496273374889928477877265080355104888778, + ]; + ByteArrayImpl::new(array_try_into(bytes), 25) +} + +// An update pulled from Hermes and re-signed by the test guardian #1 with another emitter address. +pub fn test_update2_alt_emitter() -> ByteArray { + let bytes = array![ + 141887862745809943100421399774809552050876183715022494587482285730295850458, + 359963320496358929787450247990998878269668655936959553372924597144593948268, + 168294065609209340478050191639515428002729901421915929480902120205187023616, + 301, + 1390200461185063661704370212555794334034815850290352693418762308, + 419598057710749587537080281518289024699150505326900462079484531390510117965, + 341318259000017461738706238280879290398059773267212529438780607147892801536, + 1437437604754599821041091415535991441313586347841485651963630208563420739, + 305222830440467078008666830004555943609735125691441831219591213494068931362, + 358396406696718360717615797531477055540194104082154743994717297650279402646, + 429270385827211102844129651648706540139690432947840438198166022904666187018, + 343946166212648899477337159288779715507980257611242783073384876024451565860, + 67853010773876862913176476530730880916439012004585961528150130218675908823, + 370855179649505412564259994413632062925303311800103998016489412083011059699, + 1182295126766215829784496273374889928477877265080355104888778, + ]; + ByteArrayImpl::new(array_try_into(bytes), 25) +} + +// An update pulled from Hermes and re-signed by the test guardian #2. +pub fn test_update2_set2() -> ByteArray { + let bytes = array![ + 141887862745809943100421399774809552391157901121219476151849805356757998433, + 22927445661989480418689320204846867835510434886542566099417398893061382455, + 299474373929736638290349370983054029794228129896969116108467835428084390625, + 3498691308882995183871222184377409432186747119716981166996399082193594993, + 1390200461185063661704370212555794334034815850290352693418762308, + 419598057710749587537080281518289024699150505326900462079484531390510117965, + 341318259000017461738706238280879290398059773267212529438780607147892801536, + 1437437604754599821041091415535991441313586347841485651963630208563420739, + 305222830440467078008666830004555943609735125691441831219591213494068931362, + 358396406696718360717615797531477055540194104082154743994717297650279402646, + 429270385827211102844129651648706540139690432947840438198166022904666187018, + 343946166212648899477337159288779715507980257611242783073384876024451565860, + 67853010773876862913176476530730880916439012004585961528150130218675908823, + 370855179649505412564259994413632062925303311800103998016489412083011059699, + 1182295126766215829784496273374889928477877265080355104888778, + ]; + ByteArrayImpl::new(array_try_into(bytes), 25) +} diff --git a/target_chains/starknet/contracts/tests/pyth.cairo b/target_chains/starknet/contracts/tests/pyth.cairo index ad1587ffd8..47ba8a927c 100644 --- a/target_chains/starknet/contracts/tests/pyth.cairo +++ b/target_chains/starknet/contracts/tests/pyth.cairo @@ -12,6 +12,7 @@ use pyth::wormhole::IWormholeDispatcherTrait; use core::starknet::ContractAddress; use openzeppelin::token::erc20::interface::{IERC20CamelDispatcher, IERC20CamelDispatcherTrait}; use super::wormhole::corrupted_vm; +use super::data; fn decode_event(event: @Event) -> PythEvent { let key0 = *event.keys.at(0); @@ -56,7 +57,7 @@ fn update_price_feeds_works() { let mut spy = spy_events(SpyOn::One(pyth.contract_address)); start_prank(CheatTarget::One(pyth.contract_address), user.try_into().unwrap()); - pyth.update_price_feeds(good_update1()); + pyth.update_price_feeds(data::good_update1()); stop_prank(CheatTarget::One(pyth.contract_address)); spy.fetch_events(); @@ -103,7 +104,7 @@ fn test_governance_set_fee_works() { let mut balance = fee_contract.balanceOf(user); start_prank(CheatTarget::One(pyth.contract_address), user); - pyth.update_price_feeds(price_update1_test()); + pyth.update_price_feeds(data::test_price_update1()); stop_prank(CheatTarget::One(pyth.contract_address)); let new_balance = fee_contract.balanceOf(user); assert!(balance - new_balance == 1000); @@ -113,10 +114,10 @@ fn test_governance_set_fee_works() { .unwrap_with_felt252(); assert!(last_price.price == 6281060000000); - pyth.execute_governance_instruction(governance_set_fee()); + pyth.execute_governance_instruction(data::pyth_set_fee()); start_prank(CheatTarget::One(pyth.contract_address), user); - pyth.update_price_feeds(price_update2_test()); + pyth.update_price_feeds(data::test_price_update2()); stop_prank(CheatTarget::One(pyth.contract_address)); let new_balance = fee_contract.balanceOf(user); assert!(balance - new_balance == 4200); @@ -136,7 +137,7 @@ fn test_rejects_corrupted_governance_instruction(pos: usize, random1: usize, ran let fee_contract = deploy_fee_contract(user); let pyth = deploy_default(owner, wormhole.contract_address, fee_contract.contract_address); - let input = corrupted_vm(governance_set_fee(), pos, random1, random2); + let input = corrupted_vm(data::pyth_set_fee(), pos, random1, random2); pyth.execute_governance_instruction(input); } @@ -153,17 +154,17 @@ fn test_governance_set_data_sources_works() { stop_prank(CheatTarget::One(fee_contract.contract_address)); start_prank(CheatTarget::One(pyth.contract_address), user); - pyth.update_price_feeds(price_update1_test()); + pyth.update_price_feeds(data::test_price_update1()); stop_prank(CheatTarget::One(pyth.contract_address)); let last_price = pyth .get_price_unsafe(0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43) .unwrap_with_felt252(); assert!(last_price.price == 6281060000000); - pyth.execute_governance_instruction(governance_set_data_sources()); + pyth.execute_governance_instruction(data::pyth_set_data_sources()); start_prank(CheatTarget::One(pyth.contract_address), user); - pyth.update_price_feeds(price_update2_test_alt_emitter()); + pyth.update_price_feeds(data::test_update2_alt_emitter()); stop_prank(CheatTarget::One(pyth.contract_address)); let last_price = pyth .get_price_unsafe(0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43) @@ -185,17 +186,17 @@ fn test_rejects_update_after_data_source_changed() { stop_prank(CheatTarget::One(fee_contract.contract_address)); start_prank(CheatTarget::One(pyth.contract_address), user); - pyth.update_price_feeds(price_update1_test()); + pyth.update_price_feeds(data::test_price_update1()); stop_prank(CheatTarget::One(pyth.contract_address)); let last_price = pyth .get_price_unsafe(0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43) .unwrap_with_felt252(); assert!(last_price.price == 6281060000000); - pyth.execute_governance_instruction(governance_set_data_sources()); + pyth.execute_governance_instruction(data::pyth_set_data_sources()); start_prank(CheatTarget::One(pyth.contract_address), user); - pyth.update_price_feeds(price_update2_test()); + pyth.update_price_feeds(data::test_price_update2()); stop_prank(CheatTarget::One(pyth.contract_address)); let last_price = pyth .get_price_unsafe(0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43) @@ -222,7 +223,7 @@ fn test_governance_set_wormhole_works() { stop_prank(CheatTarget::One(fee_contract.contract_address)); start_prank(CheatTarget::One(pyth.contract_address), user); - pyth.update_price_feeds(price_update1_test()); + pyth.update_price_feeds(data::test_price_update1()); stop_prank(CheatTarget::One(pyth.contract_address)); let last_price = pyth .get_price_unsafe(0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43) @@ -236,11 +237,11 @@ fn test_governance_set_wormhole_works() { let wormhole2 = super::wormhole::deploy_declared_with_test_guardian_at( @wormhole_class, wormhole2_address ); - wormhole2.submit_new_guardian_set(super::wormhole::upgrade_test_guardian_1_to_2()); + wormhole2.submit_new_guardian_set(data::upgrade_to_test2()); let mut spy = spy_events(SpyOn::One(pyth.contract_address)); - pyth.execute_governance_instruction(governance_set_wormhole()); + pyth.execute_governance_instruction(data::pyth_set_wormhole()); spy.fetch_events(); assert!(spy.events.len() == 1); @@ -253,7 +254,7 @@ fn test_governance_set_wormhole_works() { assert!(event == PythEvent::WormholeAddressSet(expected)); start_prank(CheatTarget::One(pyth.contract_address), user); - pyth.update_price_feeds(price_update2_test2_guardian()); + pyth.update_price_feeds(data::test_update2_set2()); stop_prank(CheatTarget::One(pyth.contract_address)); let last_price = pyth .get_price_unsafe(0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43) @@ -275,7 +276,7 @@ fn test_rejects_price_update_without_setting_wormhole() { stop_prank(CheatTarget::One(fee_contract.contract_address)); start_prank(CheatTarget::One(pyth.contract_address), user); - pyth.update_price_feeds(price_update1_test()); + pyth.update_price_feeds(data::test_price_update1()); stop_prank(CheatTarget::One(pyth.contract_address)); let last_price = pyth .get_price_unsafe(0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43) @@ -283,7 +284,7 @@ fn test_rejects_price_update_without_setting_wormhole() { assert!(last_price.price == 6281060000000); start_prank(CheatTarget::One(pyth.contract_address), user); - pyth.update_price_feeds(price_update2_test2_guardian()); + pyth.update_price_feeds(data::test_update2_set2()); } // This test doesn't pass because of an snforge bug. @@ -304,7 +305,7 @@ fn test_rejects_set_wormhole_without_deploying() { let user = 'user'.try_into().unwrap(); let fee_contract = deploy_fee_contract(user); let pyth = deploy_default(owner, wormhole.contract_address, fee_contract.contract_address); - pyth.execute_governance_instruction(governance_set_wormhole()); + pyth.execute_governance_instruction(data::pyth_set_wormhole()); } #[test] @@ -334,7 +335,7 @@ fn test_rejects_set_wormhole_with_incompatible_guardians() { super::wormhole::GOVERNANCE_CONTRACT, Option::Some(wormhole2_address), ); - pyth.execute_governance_instruction(governance_set_wormhole()); + pyth.execute_governance_instruction(data::pyth_set_wormhole()); } fn deploy_default( @@ -397,207 +398,3 @@ fn deploy_fee_contract(recipient: ContractAddress) -> IERC20CamelDispatcher { }; IERC20CamelDispatcher { contract_address } } - -// A random update pulled from Hermes. -fn good_update1() -> ByteArray { - let bytes = array![ - 141887862745809943100717722154781668316147089807066324001213790862261653767, - 451230040559159019530944948086670994623010697390864133264612902902585665886, - 355897384610106978643111834734000274494997301794613218547634257521495150151, - 140511063638834349363702006999356227863549404051701803148734324248522745879, - 435849190784772134907557391544163070978531038970298390345939133663347953446, - 416390591179833928094641114955594939466104495718036761707729297119441316151, - 360454929416220920336539568461651500076647166763464050800345920693176904002, - 316054999864337699543932294956493808847640383114707243342262764542081441331, - 325277902980160684959962429721294603784343718796390808940252812862355246813, - 43683235854839458868457367619068018785880460427473556950900276498953667, - 448289429405712011882317781416869052550573589492688760675666957663813001522, - 118081463902430977133121147164253483958565039026724621562859841189218059803, - 194064310618695309465615383754562031677972810736048112738513050109934134235, - 133901765334590923121691219814784557892214901646312752962904032795881821509, - 404227501001709279944936006741063968912686453006275462577777397594240621266, - 81649001731335394114026683805238949464016657447685509824621946636993704965, - 32402065226491532148674904435794801976788068837745943243341272676331333141, - 431262841416902409381606630149292665102873776020834630861578112749151562174, - 6164523115980545628843981978797257048781800754033825701059814297149591186, - 408761574582108996678203805090470134287794603493622537384530614829262728153, - 185368533577943244707350150853170361880334596276529206938783888784867529821, - 173578821500714074579643724957224629379984215847383417303110192934676518530, - 90209855380378362490166376523380463998928070428866100240907090599465187835, - 97758466908511588082569287391708453107999243934457382895073183209581711489, - 132725011490528489913736834798247512772139171145730373610858422315799224432, - 117123868005849140967825260063167768530251411611975150066586827543934313288, - 408149062252618928234854115279677715692278734600386004492580987016428761675, - 164529520317122600276020522906605877985809506451193373524142111430138855019, - 444793051809958482843529748761971363435331354795896511243191618771787268378, - 247660009137502548346315865368477795392972486141407800140910365553760622080, - 3281582060272565111592312037403686940429019548922889497694300188, - 93649805131515836129946966966350066506512123780266587069413066350925286142, - 394112423559676785086098106350541172262729583743734966358666094809121292390, - 35403101004688876764673991514113473446030702766599795822870037077688984558, - 99366103604611980443183454746643823071419076016677225828619807954313149423, - 10381657217606191031071521950784155484751645280452344547752823767622424055, - 391045354044274401116419632681482293741435113770205621235865697077178955228, - 311250087759201408758984550959714865999349469611700431708031036894849650573, - 59953730895385399344628932835545900304309851622811198425230584225200786697, - 226866843267230707879834616967256711063296411939069440476882347301771901839, - 95752383404870925303422787, - ]; - ByteArrayImpl::new(array_try_into(bytes), 11) -} - -// Generated with `../../tools/test_vaas/src/bin/generate_wormhole_vaas.rs` -fn governance_set_fee() -> ByteArray { - ByteArrayImpl::new( - array_try_into( - array![ - 1766847064779993955862540543984267022910717161432209540262366788014689913, - 322968519187498395396360816568387642032723484530650782503164941848016432477, - 407975527128964115747680681091773270935844489133353741223501742992990928896, - 49565958604199796163020368, - 8072278384728444780182694421117884443886221966887092226, - ] - ), - 23 - ) -} - -// Generated with `../../tools/test_vaas/src/bin/generate_wormhole_vaas.rs` -fn governance_set_data_sources() -> ByteArray { - ByteArrayImpl::new( - array_try_into( - array![ - 1766847064779993795984967344618836356750759980724568847727566676204733945, - 319252252405206634291073190903653114488682078063415369176250618646860635118, - 427774687951454487776318063357824898404188691225649546174530713404617785344, - 49565958604199796163020368, - 148907253454411774545738931219166892876160512393929267898119961543514185585, - 223938022913800988696085410923418445187967252047785407181969631814277398528, - 301, - ] - ), - 14 - ) -} - -// Generated with `../../tools/test_vaas/src/bin/generate_wormhole_vaas.rs` -fn governance_set_wormhole() -> ByteArray { - ByteArrayImpl::new( - array_try_into( - array![ - 1766847064779993746734475762358060494055703996306832791834621971457521573, - 304597972750688370688620483915336485865968448355388067310514768529150663948, - 37753701654018547624593082738443625808734511977366199414609989499994767360, - 49565958604199796163020368, - 148907253456057279176930315687485033494639386197985334929728922792833758561, - 3789456330195130818, - ] - ), - 8 - ) -} - -// Generated with `../../tools/test_vaas/src/bin/re_sign_price_updates.rs` -fn price_update1_test() -> ByteArray { - ByteArrayImpl::new( - array_try_into( - array![ - 141887862745809943100421399774809552050876420277163116849842965275903806689, - 210740906737592158039211995620336526131859667363627655742687286503264782608, - 437230063624699337579360546580839669896712252828825008570863758867641146081, - 3498691308882995183871222184377409432186747119716981166996399082193594993, - 1390200166945919815453709407753165121175395927094647129599868236, - 222819573728193325268644030206737371345667885599602384508424089704440116301, - 341318259000017461738706238280879290398059773267212529438772847337449455616, - 1275126645346645395843037504005879519843596923369759718556759844520336145, - 363528783578153760894082184744116718493621815898909809604883433584616420886, - 301537311768214106147206781423041990995720118715322906821301413003463484347, - 83150006264761451992768264969047148434524798781124754530141755679159432208, - 96387772316726941183358990094337324283641753573556594738287498821253761827, - 395908154570808692326126405856049827157095768069251211022053821585519235652, - 87135893730137265929093180553063146337041045646221968026289709394440932141, - 245333243912241114598596888050489286502591033459250287888834, - ] - ), - 25 - ) -} - -// Generated with `../../tools/test_vaas/src/bin/re_sign_price_updates.rs` -fn price_update2_test() -> ByteArray { - ByteArrayImpl::new( - array_try_into( - array![ - 141887862745809943100421399774809552050874823427618844548942380383465221086, - 106893583704677921907497845070624642590618427233243792006390965895909696183, - 126617671723931969110123875642449115250793288301361049879364132884271078113, - 3498691308882995183871222184377409432186747119716981166996399082193594993, - 1390200461185063661704370212555794334034815850290352693418762308, - 419598057710749587537080281518289024699150505326900462079484531390510117965, - 341318259000017461738706238280879290398059773267212529438780607147892801536, - 1437437604754599821041091415535991441313586347841485651963630208563420739, - 305222830440467078008666830004555943609735125691441831219591213494068931362, - 358396406696718360717615797531477055540194104082154743994717297650279402646, - 429270385827211102844129651648706540139690432947840438198166022904666187018, - 343946166212648899477337159288779715507980257611242783073384876024451565860, - 67853010773876862913176476530730880916439012004585961528150130218675908823, - 370855179649505412564259994413632062925303311800103998016489412083011059699, - 1182295126766215829784496273374889928477877265080355104888778, - ] - ), - 25 - ) -} - -// Generated with `../../tools/test_vaas/src/bin/re_sign_price_updates.rs` -// (same as `price_update2_test()` but with a different emitter) -fn price_update2_test_alt_emitter() -> ByteArray { - ByteArrayImpl::new( - array_try_into( - array![ - 141887862745809943100421399774809552050876183715022494587482285730295850458, - 359963320496358929787450247990998878269668655936959553372924597144593948268, - 168294065609209340478050191639515428002729901421915929480902120205187023616, - 301, - 1390200461185063661704370212555794334034815850290352693418762308, - 419598057710749587537080281518289024699150505326900462079484531390510117965, - 341318259000017461738706238280879290398059773267212529438780607147892801536, - 1437437604754599821041091415535991441313586347841485651963630208563420739, - 305222830440467078008666830004555943609735125691441831219591213494068931362, - 358396406696718360717615797531477055540194104082154743994717297650279402646, - 429270385827211102844129651648706540139690432947840438198166022904666187018, - 343946166212648899477337159288779715507980257611242783073384876024451565860, - 67853010773876862913176476530730880916439012004585961528150130218675908823, - 370855179649505412564259994413632062925303311800103998016489412083011059699, - 1182295126766215829784496273374889928477877265080355104888778, - ] - ), - 25 - ) -} - -// Generated with `../../tools/test_vaas/src/bin/re_sign_price_updates.rs` -fn price_update2_test2_guardian() -> ByteArray { - ByteArrayImpl::new( - array_try_into( - array![ - 141887862745809943100421399774809552391157901121219476151849805356757998433, - 22927445661989480418689320204846867835510434886542566099417398893061382455, - 299474373929736638290349370983054029794228129896969116108467835428084390625, - 3498691308882995183871222184377409432186747119716981166996399082193594993, - 1390200461185063661704370212555794334034815850290352693418762308, - 419598057710749587537080281518289024699150505326900462079484531390510117965, - 341318259000017461738706238280879290398059773267212529438780607147892801536, - 1437437604754599821041091415535991441313586347841485651963630208563420739, - 305222830440467078008666830004555943609735125691441831219591213494068931362, - 358396406696718360717615797531477055540194104082154743994717297650279402646, - 429270385827211102844129651648706540139690432947840438198166022904666187018, - 343946166212648899477337159288779715507980257611242783073384876024451565860, - 67853010773876862913176476530730880916439012004585961528150130218675908823, - 370855179649505412564259994413632062925303311800103998016489412083011059699, - 1182295126766215829784496273374889928477877265080355104888778, - ] - ), - 25 - ) -} diff --git a/target_chains/starknet/contracts/tests/wormhole.cairo b/target_chains/starknet/contracts/tests/wormhole.cairo index d3c608067d..6dd0fd05d8 100644 --- a/target_chains/starknet/contracts/tests/wormhole.cairo +++ b/target_chains/starknet/contracts/tests/wormhole.cairo @@ -5,13 +5,14 @@ use pyth::byte_array::{ByteArray, ByteArrayImpl}; use pyth::util::{UnwrapWithFelt252, array_try_into}; use core::starknet::{ContractAddress, EthAddress}; use core::panic_with_felt252; +use super::data; #[test] fn test_parse_and_verify_vm_works() { let dispatcher = deploy_with_mainnet_guardians(); assert!(dispatcher.chain_id() == CHAIN_ID); - let vm = dispatcher.parse_and_verify_vm(good_vm1()); + let vm = dispatcher.parse_and_verify_vm(data::good_vm1()); assert!(vm.version == 1); assert!(vm.guardian_set_index == 3); assert!(vm.signatures.len() == 13); @@ -40,7 +41,7 @@ fn test_parse_and_verify_vm_works() { fn test_parse_and_verify_vm_rejects_corrupted_vm(pos: usize, random1: usize, random2: usize) { let dispatcher = deploy_with_mainnet_guardians(); - let input = corrupted_vm(good_vm1(), pos, random1, random2); + let input = corrupted_vm(data::good_vm1(), pos, random1, random2); let vm = dispatcher.parse_and_verify_vm(input); println!("no error, output: {:?}", vm); } @@ -50,22 +51,7 @@ fn test_parse_and_verify_vm_rejects_corrupted_vm(pos: usize, random1: usize, ran fn test_submit_guardian_set_rejects_invalid_emitter() { let dispatcher = deploy_with_test_guardian(); - dispatcher - .submit_new_guardian_set( - ByteArrayImpl::new( - array_try_into( - array![ - 1766847064779994286935846877901139612104608837038764127758248269325228906, - 418887508807350452965708560347030276949211978189626151402664101079839557558, - 197343809067707990824443354127489340211392396345777701010771497603219587072, - 6044629098073145873860096, - 1131377253, - 307122819832911374634462256129025725147663742791077927773782095897, - ] - ), - 28 - ) - ); + dispatcher.submit_new_guardian_set(data::wrong_emitter_upgrade()); } #[test] @@ -73,8 +59,8 @@ fn test_submit_guardian_set_rejects_invalid_emitter() { fn test_submit_guardian_set_rejects_wrong_index_in_signer() { let dispatcher = deploy(guardian_set0(), CHAIN_ID, GOVERNANCE_CHAIN_ID, GOVERNANCE_CONTRACT); - dispatcher.submit_new_guardian_set(governance_upgrade_vm1()); - dispatcher.submit_new_guardian_set(governance_upgrade_vm3()); + dispatcher.submit_new_guardian_set(data::mainnet_guardian_set_upgrade1()); + dispatcher.submit_new_guardian_set(data::mainnet_guardian_set_upgrade3()); } #[test] @@ -82,22 +68,7 @@ fn test_submit_guardian_set_rejects_wrong_index_in_signer() { fn test_submit_guardian_set_rejects_wrong_index_in_payload() { let dispatcher = deploy_with_test_guardian(); - dispatcher - .submit_new_guardian_set( - ByteArrayImpl::new( - array_try_into( - array![ - 1766847064779996028795173168119917022867471281757617479529431178557452389, - 193283302630366040376283958080462867566389017166937293916301423178932756308, - 242372832420793675848312873608890898918531405734576271399238077831505248256, - 4835703278458516699153920, - 1131377253, - 210624583337115497886730203944140689990237281548333499058561169433, - ] - ), - 28 - ) - ); + dispatcher.submit_new_guardian_set(data::wrong_index_upgrade()); } #[test] @@ -111,22 +82,7 @@ fn test_deploy_rejects_empty() { fn test_submit_guardian_set_rejects_empty() { let dispatcher = deploy_with_test_guardian(); - dispatcher - .submit_new_guardian_set( - ByteArrayImpl::new( - array_try_into( - array![ - 1766847064779992178996580835909277664613661950847933439396875833330622292, - 364268459763994160238907315760635322263304542127720162879870384990884673431, - 419730305090247124548471445441531015782496798516552461724622762829422788608, - 4835703278458516699153920, - 1131377253, - 210141960835432704, - ] - ), - 8 - ) - ); + dispatcher.submit_new_guardian_set(data::empty_set_upgrade()); } #[test] @@ -135,7 +91,7 @@ fn test_submit_guardian_set_rejects_empty() { fn test_submit_guardian_set_rejects_corrupted(pos: usize, random1: usize, random2: usize) { let dispatcher = deploy(guardian_set0(), CHAIN_ID, GOVERNANCE_CHAIN_ID, GOVERNANCE_CONTRACT); - let vm = corrupted_vm(governance_upgrade_vm1(), pos, random1, random2); + let vm = corrupted_vm(data::mainnet_guardian_set_upgrade1(), pos, random1, random2); dispatcher.submit_new_guardian_set(vm); } @@ -144,11 +100,11 @@ fn test_submit_guardian_set_rejects_corrupted(pos: usize, random1: usize, random fn test_submit_guardian_set_rejects_non_governance(pos: usize, random1: usize, random2: usize) { let dispatcher = deploy(guardian_set0(), CHAIN_ID, GOVERNANCE_CHAIN_ID, GOVERNANCE_CONTRACT); - dispatcher.submit_new_guardian_set(governance_upgrade_vm1()); - dispatcher.submit_new_guardian_set(governance_upgrade_vm2()); - dispatcher.submit_new_guardian_set(governance_upgrade_vm3()); + dispatcher.submit_new_guardian_set(data::mainnet_guardian_set_upgrade1()); + dispatcher.submit_new_guardian_set(data::mainnet_guardian_set_upgrade2()); + dispatcher.submit_new_guardian_set(data::mainnet_guardian_set_upgrade3()); - dispatcher.submit_new_guardian_set(good_vm1()); + dispatcher.submit_new_guardian_set(data::good_vm1()); } // Deploys a previously declared wormhole contract class at the specified address. @@ -194,20 +150,18 @@ fn deploy( pub fn deploy_with_mainnet_guardians() -> IWormholeDispatcher { let dispatcher = deploy(guardian_set0(), CHAIN_ID, GOVERNANCE_CHAIN_ID, GOVERNANCE_CONTRACT); - dispatcher.submit_new_guardian_set(governance_upgrade_vm1()); - dispatcher.submit_new_guardian_set(governance_upgrade_vm2()); - dispatcher.submit_new_guardian_set(governance_upgrade_vm3()); - dispatcher.submit_new_guardian_set(governance_upgrade_vm4()); + dispatcher.submit_new_guardian_set(data::mainnet_guardian_set_upgrade1()); + dispatcher.submit_new_guardian_set(data::mainnet_guardian_set_upgrade2()); + dispatcher.submit_new_guardian_set(data::mainnet_guardian_set_upgrade3()); + dispatcher.submit_new_guardian_set(data::mainnet_guardian_set_upgrade4()); dispatcher } -const TEST_GUARDIAN_ADDRESS: felt252 = 0x686b9ea8e3237110eaaba1f1b7467559a3273819; - // Declares and deploys the contract with the test guardian address that's used to sign VAAs generated in `test_vaas`. pub fn deploy_with_test_guardian() -> IWormholeDispatcher { deploy( - array_try_into(array![TEST_GUARDIAN_ADDRESS]), + array_try_into(array![data::TEST_GUARDIAN_ADDRESS1]), CHAIN_ID, GOVERNANCE_CHAIN_ID, GOVERNANCE_CONTRACT, @@ -221,7 +175,7 @@ pub fn deploy_declared_with_test_guardian_at( ) -> IWormholeDispatcher { deploy_declared_at( class, - array_try_into(array![TEST_GUARDIAN_ADDRESS]), + array_try_into(array![data::TEST_GUARDIAN_ADDRESS1]), CHAIN_ID, GOVERNANCE_CHAIN_ID, GOVERNANCE_CONTRACT, @@ -292,241 +246,11 @@ fn corrupted_byte(value: u8, random: usize) -> u8 { (v % 256).try_into().unwrap() } +// Initial mainnet guardian set. fn guardian_set0() -> Array { array_try_into(array![0x58CC3AE5C097b213cE3c81979e1B9f9570746AA5]) } -// A random VAA pulled from Hermes. -fn good_vm1() -> ByteArray { - let bytes = array![ - 1766847066033410293701000231337210964058791470455465385734308943533652138, - 250126301534699068413432844632573953364878937343368310395142095034982913232, - 374780571002258088211231890250917843593951765403462661483498298003400611238, - 23190137343211334092589308306056431640588154666326612124726174150537328574, - 238750269065878649216923353030193912502813798896051725498208457553032584635, - 29844190303057534696518006438077948796328243878877072296680853158289181326, - 106329507856770018708432343978518079724691760719405501795955774399597471533, - 50779865592261858016477142415230454208001695486195806892438697217059319645, - 448669871976126446102256476358498380455807705600424321390063431836375575318, - 115682669871397824853706713833773246708114483862317474710603223566297521279, - 301634766618012930739391408723909107532790832406455099966028276947414082504, - 104473166230846104217366042152018649207811514257244625711402436055500423094, - 64445621634231668761998815864645440965239569561546522651415024970517905416, - 192317190225976528694195501079591384434869624408066864018183189813956862386, - 289982656017597431343118552054719821766658675456661448685110903889153449006, - 218840601196095059731241556733624112758673153548932709011933806481899680620, - 430933799927481265070475198137531816946660368757134588278434352703899277070, - 69322998883710289192076494057541346430050879299268159627180404869988632073, - 23862615839737051269352321086490452186237833007444069999578906611768140646, - 444634264607471510688862284107804392707600799506487897206707262445172121289, - 438038196736233160320436150616293672539386464061037100698335568417587662951, - 4682255185797880874381673193118803274635247527626050223938224759013169366, - 337620725992972686809095065321563509600769533202700218393281926304544120094, - 106657917096532484607371891267699639824731774168349872862335217581425289654, - 71240348385993236445536577509595968468284689483611375124653855125285401592, - 347603391821038175842934311068097986460257977131947418186118379296987051086, - 414263571545410645948841360836383289766662078574048514890988877286444618669, - 250301638008739107522011802538487063969565433276260914336890309092111026583, - 43192785595291340058788190601908070333310658291317702311902081, - 52685537088250779930155363779405986390839624071318818148325576008719597568, - 14615204155786886573933667335033405822686404253588533, - ]; - ByteArrayImpl::new(array_try_into(bytes), 22) -} - pub const CHAIN_ID: u16 = 60051; pub const GOVERNANCE_CHAIN_ID: u16 = 1; pub const GOVERNANCE_CONTRACT: u256 = 4; - -// Generated with `../../tools/test_vaas/src/bin/generate_wormhole_vaas.rs` -pub fn upgrade_test_guardian_1_to_2() -> ByteArray { - ByteArrayImpl::new( - array_try_into( - array![ - 1766847064779995287375101177319600239435018729139341591012343354326614060, - 152103705464783935682610402914146418697934830197930803919710856925871578605, - 421150899970781847000318380764303006646986333759174982038890844802036793344, - 4835703278458516699153920, - 1131377253, - 210624583337114749311237613435643962969294824395451022190048752713, - ] - ), - 28 - ) -} - -// Below are actual guardian set upgrade VAAS from -// https://github.com/pyth-network/pyth-crosschain/blob/main/contract_manager/src/contracts/wormhole.ts#L32-L37 -fn governance_upgrade_vm1() -> ByteArray { - let bytes = array![ - 1766847064779994277746302277072294871108550301449637470263976489521154979, - 374953657095152923031303770743522269007103499920836805761143506434463979495, - 373725794026553362537846905304981854320892126869150736450761801254169477120, - 4835703278458516786446336, - 1131377253, - 3533694129556775410652111826415980944262631656421498398215501759245151417, - 145493015216602589471695207668173527044214450021182755196032581352392984224, - 267497573836069714380350521200881787609530659298168186016481773490244091266, - 443348533394886521835330696538264729103669807313401311199245411889706258110, - 200303433165499832354845293203843028338419687800279845786613090211434473108, - 37282816539161742972709083946551920068062204748477644719930149699874385462, - 111200938271608595261384934914291476246753101189480743698823215749338358345, - 5785682963869019134199015821749288033381872318410562688180948003975909269, - 372447340016996751453958019806457886428852701283870538393820846119845147788, - 33251468085387571623103303511315696691298281336333243761063342581452341650, - 323161992096034641767541451811925056802673576212351940217752194462561980347, - 55852237138651071644815135002358067220635692701051811455610533875912981641, - 190413173566657072516608762222993749133, - ]; - ByteArrayImpl::new(array_try_into(bytes), 16) -} - -fn governance_upgrade_vm2() -> ByteArray { - let bytes = array![ - 1766847065210651126944505525521222069599854288126726949998063840465138797, - 39054013088470866893599813322035661048501117089555726788687392536164861911, - 186918267413056900890218521593203545230034250983266377769400670103688217224, - 54214750922097681971590495378823998039261772575502204791108963815396679538, - 248994008232667872698758486001506749115615219491023036208140426934463230397, - 224235483823871042187452194579994340291351644933258737665365374081962645784, - 129444929990547403397151941456764812818993218972657847255833740800106200260, - 318548597134783137700627869311159664823693239605331630210202210299165477657, - 308852933010951129895011963941866000261904600807292935694851016610643657184, - 57272874228621364335170723193404742446392708606247574725663969156507973216, - 268057363923565984687253533797066429881117576606682526627284795527707196557, - 421894189151847402000239734668088381785344768284464330085711322870200424121, - 387584417395337067059819722404321580961380603778956902593594676080614899975, - 443523131755342451570503958659975367050637907361274652611595274647186073286, - 375107813087591446268414166006799680982485924290770541964399283524664437852, - 269085314426821465871247165234113878276592898426373369094610290261431112145, - 394348694527460459816454348661249546781513091938003106009521096332701847735, - 125670844183465056159554034633959680574572737212268749779705635378223489518, - 35053869475614771227400345921974210525173525784259894123687028214330135561, - 57544237843860512274491447149877290860624174166427313971286819807773907946, - 110681468147560408039747352809294082929396639199393789980441736520638055418, - 45709869872872997180086402576677640909777820941436708911954532772405320395, - 339910511168418517917975736269171135752028257685502872671902330279073260362, - 76482764517489607955778008190826845581092838692650194719207882266659669490, - 443663869577220861680293443959666949893574779475752540587040489501289361777, - 231057874919577223790659840464529054850239319545221055959374917590157019925, - 309066533217885002074480704480667619809952056265738927105682076502747220549, - 212379788814604791028007106821871908074818251907335322546331543385945316762, - 165408661499085325620077702639227003047567884011538988728381864749733773312, - 29852013947978990147012099107546124222651092940097518043136, - 5874446556610227706402640854088357165514903, - 314635470832203526600706472223155382046271943513513368538979543914002758100, - 289993023590817330918274026889451152915026890048318491140264484864242055689, - 211265316833000774821515110003986084297271807500310630074520699505436206838, - 314620948986744608212517578488307826224331071350776523303159889004405167502, - 242768143829057016675085776170635413106817756232919004913342240722183648628, - 289318220340670045883106021427202666948428587921558828582664470923483208386, - 254304247593881109676724582609273741670949040469906895867342151706444640548, - 324707984060675446628128892371664948354047882542253609514703956739624414429, - 125786084546320950738753348592393927755418642173185609412108154831520915923, - 192033422676298173731756291271054199566981168481817292625435767748408605264, - 70237018464728620254434305961956673950089621204502627373468857093940647376, - 75218391584551901010047495874303520775865073092730040058902770251005073864, - 13453, - ]; - ByteArrayImpl::new(array_try_into(bytes), 2) -} - -fn governance_upgrade_vm3() -> ByteArray { - let bytes = array![ - 1766847065622031860560134801367788401015571316785630090767859240961980367, - 408239335069601434456324970231880063141100099721451058487412176729277688481, - 239499689753305520381601038928513796227317320911002802551444547638809838552, - 377515301744513788082523380503265415136454305699441419871183462725292421897, - 293792427782284265052215516935690252661713253004854348809536189867737815900, - 307592266914902727916633292174670243188255704510048236277225897328900269063, - 127373290139474278928992577974696343462455769904046193125018730285162391253, - 391788800785481654990215164673817619378887263909639120513493454202816019863, - 410413307118599096084169722886408584518140871169074821252461819158667354254, - 18837648490111595970198935552266546643395427923804444528866768515056419823, - 29964034682984173558839379357821569529808274426015494950430380078317881569, - 86017868501532670528023530422115758730056738654625156800662778409971102579, - 316587967137295297243489759859408971025377360462781809717927347025414193161, - 412080542369789462767669836400697110505430973769191785499739175360336337147, - 342817079347905714229318925597762381802367663565411998187223317628701911440, - 323381353160339090772037140072061985169258958022395380273676898316834639836, - 199931590715070935127318740956564588449721873695471932311700469202637695100, - 53310522180389647586576928116330850824055549848985438538201222342553700451, - 387322343922164253479438966163491855981414317104760621828688810466847848718, - 81609701542274539489711635515209037026645626576756528749469616228397567798, - 182108205861564989333892774796475580877981373947799860454217397980367659628, - 21549663410658134468902761710868642321546772465973442277960059676129502668, - 189434039785735939400321781125039794740638779195156759980704929066694157130, - 52255833533187953003213955242027099690232530588872309460610106220279805641, - 197105018621162723372171195601447549272902142615124680111298974553437412361, - 243585516151555343004264928593678764289083751554802049062044286334698216184, - 98577806073901898829375415748245478967425496216912736575886605480181121443, - 92916551389967933235240931764170084503123511470557201449603712010638670912, - 279247190794260779926452059689914005511524938154821508635388069101252378624, - 27765181507524306000048567556593270127801507143251178553344, - 5874446556610227706402640926145951203442839, - 314635470832203526600706472223155382046271943513513368538979543914002758100, - 289993023590817330918274026889451152915026890048318491140264484864242055689, - 211265316833000774821515110003986084297271807500310630074520699505436206838, - 314620948986744608212517578488307826224331071350776523303159889004405167502, - 242768143829057016675085658054156069029173843566452718977789980910319968372, - 289318220340670045883106021427202666948428587921558828582664470923483208386, - 254304247593881109676724582609273741670949040469906895867342151706444640548, - 324707984060675446628128892371664948354047882542253609514703956739624414429, - 125786084546320950738753348592393927755418642173185609412108154831520915923, - 192033422676298173731756291271054199566981168481817292625435767748408605264, - 70237018464728620254434305961956673950089621204502627373468857093940647376, - 75218391584551901010047495874303520775865073092730040058902770251005073864, - 13453, - ]; - ByteArrayImpl::new(array_try_into(bytes), 2) -} - -fn governance_upgrade_vm4() -> ByteArray { - let bytes = array![ - 1766847066033426987337757245669159273063358729535478806850006662056807068, - 191023158244075433218055661747029015323596061316379687901032561397223546211, - 30156550775609732785124128084945604136341937408029517653427049258063209215, - 301841618969457377999846355946508544313297803407604349411042057045510372286, - 399879387152070823070522891203531321261797829310211644637928969034931151834, - 1184971666775858810527395126763859219514013163556756790208661779020321698, - 427827873217506136303198988655697899138087317492051993053159867826892618987, - 55439109913191967501571602277685262841453050617358377329061538069328212552, - 34944602254693785869427132065664922748183924456022812505745784482260734500, - 50091615215549712387991200985741575718080363004681463525186508796585379155, - 265247833149227842278059484961926330281584344437952973839486092319885300192, - 421631446041795295328070636491346018953171276542115189082171457479754499396, - 59057903625576869235407103565877017330396402246452653660114888284545941770, - 315797852826246435174946736461540321579373154656484006452063031513301027405, - 9521420622979958910372839981791309896262328383324674284772682980734269170, - 272964069264268937653695089515793248726920319914036642027008415285406913245, - 194708434228888226032102758315234166672190899487218971410889219134701358728, - 117864954129109327302856065706421701676973859697066630532570005860486924893, - 323457021720552374478769194145226061243431674370101604382965685057422991463, - 327482733702858147057975319784026874245182397914737119038454598086198587150, - 159726033816658034104416471293601013976445904149240898589368461412472508473, - 165970343982649234398221341351816767302457220504375238905210573566962780340, - 66269488760319836583658182431744051236825244016843316092957806563966254500, - 360882001282595740056823749884962228392082962172369522212117195988772429063, - 202692667772209236945884489592750537635169234501360011152939202347962132650, - 407257364829649465305126488148712878739144584682351279109461295389594525334, - 270499607712829989691415988895838806019492861138165540862008308077962735002, - 388443296961168536186587069708212659389994895697827691755155284015603161464, - 45068266527940236008536134081672474027695203549460934893262212861351952384, - 31319268777966350508118557206583844424308993254125039779840, - 5874446556610227706402640998203302487747647, - 204224545225244051821590480758420624947979343122083461045877549162059250132, - 289993023590817330918274026889451152915026890048318491140264484864242055689, - 211265316833000774821515110003986084297271807500310630074520699505436206838, - 314620948986744608212517578488307826224331071350776523303159889004405167502, - 242768143829057016675085658054156069029173843566452718977789980910319968372, - 289318220340670045883106021427202666948428587921558828582664470923483208386, - 254304247593881109676724582609273741670949040469906895867342151706444640548, - 324707984060675446628128892371664948354047882542253609514703956739624414429, - 125786084546320950738753348592393927755418642173185609412108154831520915923, - 192033422676298173731756291271054199566981168481817292625435767748408605264, - 70237018464728620254434305961956673950089621204502627373468857093940647376, - 75218391584551901010047495874303520775865073092730040058902770251005073864, - 13453, - ]; - ByteArrayImpl::new(array_try_into(bytes), 2) -} diff --git a/target_chains/starknet/tools/test_vaas/src/bin/generate_test_data.rs b/target_chains/starknet/tools/test_vaas/src/bin/generate_test_data.rs new file mode 100644 index 0000000000..147c366cdb --- /dev/null +++ b/target_chains/starknet/tools/test_vaas/src/bin/generate_test_data.rs @@ -0,0 +1,275 @@ +use libsecp256k1::SecretKey; +use test_vaas::{ + locate_vaa_in_price_update, print_as_cairo_fn, re_sign_price_update, serialize_vaa, u256_to_be, + DataSource, EthAddress, GuardianSet, GuardianSetUpgrade, +}; +use wormhole_vaas::{PayloadKind, VaaBody}; + +fn main() { + println!("// Generated with generate_test_data.rs, do not edit\n"); + println!("use pyth::byte_array::{{ByteArray, ByteArrayImpl}};"); + println!("use pyth::util::array_try_into;"); + + // A random update pulled from Hermes. + let good_update1 = "504e41550100000003b801000000030d012bd1c73ae62606cc22fa95389107ff631c6b0d2aebbb38aa8d910429381580fd3aa13c6261b09fe5e7a6aca95ec96e47ae1a9fd98cd4d0d41e47fdbf19724ed30002ddc260d7b4628cc28e474f86c503cfb287c6d5a60d200a002d0a3b5c3701ba786a6d154aec99d76817f6ae90fe080940c937be8720bbaa3bc21de539b97d9ff7000384ad07fb4f26ebab316b3ebdede91dbb10e4268ad70c3cce30f968e4fabb325a16e2cfe937cc02a069909639a78a8e3c2e2ca53a2d9ce1dc85e8bdb61eadee4101042942b2e17b7e99117517672d1cbd89e5da1615e708e6e1dd49879205921acd1e33b819cbfbf26169f5ef5dfdf02a7cd4a7bd41f33aea14dd29140970e9858edd0006544d201b1b95eb1641795cb4c6338bceb63c1c4ca8f134395dbb5a75c3fdb90b16a143f5e6dc7faab81f50e5d56fda369d2f9bc99bd5c0fb3f78613242d4ecec0107b02ae3c83b21351b8f1c339b65eea873b290006bc0ae3f861b6dd6255883951c457fb6247994f6253c38274a405937cf4ae8e474f6e163db4bc9248402edac2f00086cd9010c7705eff836747cd716153308bfa39ed545e4c8df5475feae6661b2a41fd6834f7a1876283a7ce3209d855702ee189ad22e3631cb504518c75c2e7bdc010a2e29ae09b85df5809e9e2ac459624234051256c36575ef0102736cf3e65f03262b3f4dbec893209b680f2944e892a615f4160bd6e72f0b3d970e273c44f03d50000b0f0fd2c29a2b64869bf861a9be037d2edede3b82b846090d81799d4c197ea7a1358bc65dd5bee2742d8b4e92e759d1774ed014eca366fba7717daa94df769f67010c102f7ec54c04626bd968ea350c8581af8d5ec9f7ebbbbc56e0587d6f467bd0212916e0cb9f99145d623dfc52ca07924f106702a66a7f51d67a257350cadd1745000e39e122d682330e9581197dddd0d8d6bf1628bc09f3ee69b68eee157f1bbd59ac0677f9fb37544f11405b0bf4dd1e3c5dc2056968df22cc8061664add6d5311cd0010814b1ea44a2a417009e9b62852136254aa9fb4476f9271c2f3000631cde32070424a2db74b83190473f8c4bc8e63b14b51d4aa48035d228c7674350526a348e701121efcf29494744eea7701e035b94241f00b2572ee05d85f462e09b24b5d1ed316593de7e3d3ad8daa6bc0962d4023dd8b0ec02ba66ed5bf58c2fe6bfbbe733c4e016614099700000000001ae101faedac5851e32b9b23b5f9411a8c2bac4aae3ed4dd7b811dd1a72ea4aa710000000002f031610141555756000000000007fa222f0000271020e47520c30e6991ec9502edf0eefdc9f1e81c3501005500e62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b430000068a84c7a55a00000000d65e41d9fffffff8000000006614099600000000661409960000068828be9ea000000000f430669c0a0a23ee383d3da068e7578080bd96d41efe039a589c6291a45bced2935e1948dbfbef05e035116c4c1262a2893e7ffa7829d982f39b9a3003fd171b2673754715f7dd52e652fdf5e12f4cddb8272d773d8f8b62aa8e156a615dd6ac7f604475dcb0294b6630f1264bd9950eab29a0397694e694b85378f13532c8bc2861cf8d21eebf795403e3827b113d961f6cf47dff7538abd141faa4b2b8fa21aacd098066eee782ba9434ec0b0907eac638408e648a6e501734b039b4dc30937b8f4f345b1afc3c2a46341f43"; + let good_update1 = hex::decode(good_update1).unwrap(); + print_as_cairo_fn( + &good_update1, + "good_update1", + "A random update pulled from Hermes.", + ); + let indexes = locate_vaa_in_price_update(&good_update1); + print_as_cairo_fn( + &good_update1[indexes.pos_before_vaa..indexes.pos_after_vaa], + "good_vm1", + "A wormhole VAA from a random update pulled from Hermes.", + ); + + // These are actual guardian set upgrade VAAS from + // https://github.com/pyth-network/pyth-crosschain/blob/main/contract_manager/src/contracts/wormhole.ts#L32-L37 + let wormhole_mainnet_upgrades = [ + "010000000001007ac31b282c2aeeeb37f3385ee0de5f8e421d30b9e5ae8ba3d4375c1c77a86e77159bb697d9c456d6f8c02d22a94b1279b65b0d6a9957e7d3857423845ac758e300610ac1d2000000030001000000000000000000000000000000000000000000000000000000000000000400000000000005390000000000000000000000000000000000000000000000000000000000436f7265020000000000011358cc3ae5c097b213ce3c81979e1b9f9570746aa5ff6cb952589bde862c25ef4392132fb9d4a42157114de8460193bdf3a2fcf81f86a09765f4762fd1107a0086b32d7a0977926a205131d8731d39cbeb8c82b2fd82faed2711d59af0f2499d16e726f6b211b39756c042441be6d8650b69b54ebe715e234354ce5b4d348fb74b958e8966e2ec3dbd4958a7cdeb5f7389fa26941519f0863349c223b73a6ddee774a3bf913953d695260d88bc1aa25a4eee363ef0000ac0076727b35fbea2dac28fee5ccb0fea768eaf45ced136b9d9e24903464ae889f5c8a723fc14f93124b7c738843cbb89e864c862c38cddcccf95d2cc37a4dc036a8d232b48f62cdd4731412f4890da798f6896a3331f64b48c12d1d57fd9cbe7081171aa1be1d36cafe3867910f99c09e347899c19c38192b6e7387ccd768277c17dab1b7a5027c0b3cf178e21ad2e77ae06711549cfbb1f9c7a9d8096e85e1487f35515d02a92753504a8d75471b9f49edb6fbebc898f403e4773e95feb15e80c9a99c8348d", + "01000000010d0012e6b39c6da90c5dfd3c228edbb78c7a4c97c488ff8a346d161a91db067e51d638c17216f368aa9bdf4836b8645a98018ca67d2fec87d769cabfdf2406bf790a0002ef42b288091a670ef3556596f4f47323717882881eaf38e03345078d07a156f312b785b64dae6e9a87e3d32872f59cb1931f728cecf511762981baf48303668f0103cef2616b84c4e511ff03329e0853f1bd7ee9ac5ba71d70a4d76108bddf94f69c2a8a84e4ee94065e8003c334e899184943634e12043d0dda78d93996da073d190104e76d166b9dac98f602107cc4b44ac82868faf00b63df7d24f177aa391e050902413b71046434e67c770b19aecdf7fce1d1435ea0be7262e3e4c18f50ddc8175c0105d9450e8216d741e0206a50f93b750a47e0a258b80eb8fed1314cc300b3d905092de25cd36d366097b7103ae2d184121329ba3aa2d7c6cc53273f11af14798110010687477c8deec89d36a23e7948feb074df95362fc8dcbd8ae910ac556a1dee1e755c56b9db5d710c940938ed79bc1895a3646523a58bc55f475a23435a373ecfdd0107fb06734864f79def4e192497362513171530daea81f07fbb9f698afe7e66c6d44db21323144f2657d4a5386a954bb94eef9f64148c33aef6e477eafa2c5c984c01088769e82216310d1827d9bd48645ec23e90de4ef8a8de99e2d351d1df318608566248d80cdc83bdcac382b3c30c670352be87f9069aab5037d0b747208eae9c650109e9796497ff9106d0d1c62e184d83716282870cef61a1ee13d6fc485b521adcce255c96f7d1bca8d8e7e7d454b65783a830bddc9d94092091a268d311ecd84c26010c468c9fb6d41026841ff9f8d7368fa309d4dbea3ea4bbd2feccf94a92cc8a20a226338a8e2126cd16f70eaf15b4fc9be2c3fa19def14e071956a605e9d1ac4162010e23fcb6bd445b7c25afb722250c1acbc061ed964ba9de1326609ae012acdfb96942b2a102a2de99ab96327859a34a2b49a767dbdb62e0a1fb26af60fe44fd496a00106bb0bac77ac68b347645f2fb1ad789ea9bd76fb9b2324f25ae06f97e65246f142df717f662e73948317182c62ce87d79c73def0dba12e5242dfc038382812cfe00126da03c5e56cb15aeeceadc1e17a45753ab4dc0ec7bf6a75ca03143ed4a294f6f61bc3f478a457833e43084ecd7c985bf2f55a55f168aac0e030fc49e845e497101626e9d9a5d9e343f00010000000000000000000000000000000000000000000000000000000000000004c1759167c43f501c2000000000000000000000000000000000000000000000000000000000436f7265020000000000021358cc3ae5c097b213ce3c81979e1b9f9570746aa5ff6cb952589bde862c25ef4392132fb9d4a42157114de8460193bdf3a2fcf81f86a09765f4762fd1107a0086b32d7a0977926a205131d8731d39cbeb8c82b2fd82faed2711d59af0f2499d16e726f6b211b39756c042441be6d8650b69b54ebe715e234354ce5b4d348fb74b958e8966e2ec3dbd4958a7cd66b9590e1c41e0b226937bf9217d1d67fd4e91f574a3bf913953d695260d88bc1aa25a4eee363ef0000ac0076727b35fbea2dac28fee5ccb0fea768eaf45ced136b9d9e24903464ae889f5c8a723fc14f93124b7c738843cbb89e864c862c38cddcccf95d2cc37a4dc036a8d232b48f62cdd4731412f4890da798f6896a3331f64b48c12d1d57fd9cbe7081171aa1be1d36cafe3867910f99c09e347899c19c38192b6e7387ccd768277c17dab1b7a5027c0b3cf178e21ad2e77ae06711549cfbb1f9c7a9d8096e85e1487f35515d02a92753504a8d75471b9f49edb6fbebc898f403e4773e95feb15e80c9a99c8348d", + "01000000020d00ce45474d9e1b1e7790a2d210871e195db53a70ffd6f237cfe70e2686a32859ac43c84a332267a8ef66f59719cf91cc8df0101fd7c36aa1878d5139241660edc0010375cc906156ae530786661c0cd9aef444747bc3d8d5aa84cac6a6d2933d4e1a031cffa30383d4af8131e929d9f203f460b07309a647d6cd32ab1cc7724089392c000452305156cfc90343128f97e499311b5cae174f488ff22fbc09591991a0a73d8e6af3afb8a5968441d3ab8437836407481739e9850ad5c95e6acfcc871e951bc30105a7956eefc23e7c945a1966d5ddbe9e4be376c2f54e45e3d5da88c2f8692510c7429b1ea860ae94d929bd97e84923a18187e777aa3db419813a80deb84cc8d22b00061b2a4f3d2666608e0aa96737689e3ba5793810ff3a52ff28ad57d8efb20967735dc5537a2e43ef10f583d144c12a1606542c207f5b79af08c38656d3ac40713301086b62c8e130af3411b3c0d91b5b50dcb01ed5f293963f901fc36e7b0e50114dce203373b32eb45971cef8288e5d928d0ed51cd86e2a3006b0af6a65c396c009080009e93ab4d2c8228901a5f4525934000b2c26d1dc679a05e47fdf0ff3231d98fbc207103159ff4116df2832eea69b38275283434e6cd4a4af04d25fa7a82990b707010aa643f4cf615dfff06ffd65830f7f6cf6512dabc3690d5d9e210fdc712842dc2708b8b2c22e224c99280cd25e5e8bfb40e3d1c55b8c41774e287c1e2c352aecfc010b89c1e85faa20a30601964ccc6a79c0ae53cfd26fb10863db37783428cd91390a163346558239db3cd9d420cfe423a0df84c84399790e2e308011b4b63e6b8015010ca31dcb564ac81a053a268d8090e72097f94f366711d0c5d13815af1ec7d47e662e2d1bde22678113d15963da100b668ba26c0c325970d07114b83c5698f46097010dc9fda39c0d592d9ed92cd22b5425cc6b37430e236f02d0d1f8a2ef45a00bde26223c0a6eb363c8b25fd3bf57234a1d9364976cefb8360e755a267cbbb674b39501108db01e444ab1003dd8b6c96f8eb77958b40ba7a85fefecf32ad00b7a47c0ae7524216262495977e09c0989dd50f280c21453d3756843608eacd17f4fdfe47600001261025228ef5af837cb060bcd986fcfa84ccef75b3fa100468cfd24e7fadf99163938f3b841a33496c2706d0208faab088bd155b2e20fd74c625bb1cc8c43677a0163c53c409e0c5dfa000100000000000000000000000000000000000000000000000000000000000000046c5a054d7833d1e42000000000000000000000000000000000000000000000000000000000436f7265020000000000031358cc3ae5c097b213ce3c81979e1b9f9570746aa5ff6cb952589bde862c25ef4392132fb9d4a42157114de8460193bdf3a2fcf81f86a09765f4762fd1107a0086b32d7a0977926a205131d8731d39cbeb8c82b2fd82faed2711d59af0f2499d16e726f6b211b39756c042441be6d8650b69b54ebe715e234354ce5b4d348fb74b958e8966e2ec3dbd4958a7cd15e7caf07c4e3dc8e7c469f92c8cd88fb8005a2074a3bf913953d695260d88bc1aa25a4eee363ef0000ac0076727b35fbea2dac28fee5ccb0fea768eaf45ced136b9d9e24903464ae889f5c8a723fc14f93124b7c738843cbb89e864c862c38cddcccf95d2cc37a4dc036a8d232b48f62cdd4731412f4890da798f6896a3331f64b48c12d1d57fd9cbe7081171aa1be1d36cafe3867910f99c09e347899c19c38192b6e7387ccd768277c17dab1b7a5027c0b3cf178e21ad2e77ae06711549cfbb1f9c7a9d8096e85e1487f35515d02a92753504a8d75471b9f49edb6fbebc898f403e4773e95feb15e80c9a99c8348d", + "01000000030d03d4a37a6ff4361d91714730831e9d49785f61624c8f348a9c6c1d82bc1d98cadc5e936338204445c6250bb4928f3f3e165ad47ca03a5d63111168a2de4576856301049a5df10464ea4e1961589fd30fc18d1970a7a2ffaad617e56a0f7777f25275253af7d10a0f0f2494dc6e99fc80e444ab9ebbbee252ded2d5dcb50cbf7a54bb5a01055f4603b553b9ba9e224f9c55c7bca3da00abb10abd19e0081aecd3b352be061a70f79f5f388ebe5190838ef3cd13a2f22459c9a94206883b739c90b40d5d74640006a8fade3997f650a36e46bceb1f609edff201ab32362266f166c5c7da713f6a19590c20b68ed3f0119cb24813c727560ede086b3d610c2d7a1efa66f655bad90900080f5e495a75ea52241c59d145c616bfac01e57182ad8d784cbcc9862ed3afb60c0983ccbc690553961ffcf115a0c917367daada8e60be2cbb8b8008bac6341a8c010935ab11e0eea28b87a1edc5ccce3f1fac25f75b5f640fe6b0673a7cd74513c9dc01c544216cf364cc9993b09fda612e0cd1ced9c00fb668b872a16a64ebb55d27010ab2bc39617a2396e7defa24cd7c22f42dc31f3c42ffcd9d1472b02df8468a4d0563911e8fb6a4b5b0ce0bd505daa53779b08ff660967b31f246126ed7f6f29a7e000bdb6d3fd7b33bdc9ac3992916eb4aacb97e7e21d19649e7fa28d2dd6e337937e4274516a96c13ac7a8895da9f91948ea3a09c25f44b982c62ce8842b58e20c8a9000d3d1b19c8bb000856b6610b9d28abde6c35cb7705c6ca5db711f7be96d60eed9d72cfa402a6bfe8bf0496dbc7af35796fc768da51a067b95941b3712dce8ae1e7010ec80085033157fd1a5628fc0c56267469a86f0e5a66d7dede1ad4ce74ecc3dff95b60307a39c3bfbeedc915075070da30d0395def9635130584f709b3885e1bdc0010fc480eb9ee715a2d151b23722b48b42581d7f4001fc1696c75425040bfc1ffc5394fe418adb2b64bd3dc692efda4cc408163677dbe233b16bcdabb853a20843301118ee9e115e1a0c981f19d0772b850e666591322da742a9a12cce9f52a5665bd474abdd59c580016bee8aae67fdf39b315be2528d12eec3a652910e03cc4c6fa3801129d0d1e2e429e969918ec163d16a7a5b2c6729aa44af5dccad07d25d19891556a79b574f42d9adbd9e2a9ae5a6b8750331d2fccb328dd94c3bf8791ee1bfe85aa00661e99781981faea00010000000000000000000000000000000000000000000000000000000000000004fd4c6c55ec8dfd342000000000000000000000000000000000000000000000000000000000436f726502000000000004135893b5a76c3f739645648885bdccc06cd70a3cd3ff6cb952589bde862c25ef4392132fb9d4a42157114de8460193bdf3a2fcf81f86a09765f4762fd1107a0086b32d7a0977926a205131d8731d39cbeb8c82b2fd82faed2711d59af0f2499d16e726f6b211b39756c042441be6d8650b69b54ebe715e234354ce5b4d348fb74b958e8966e2ec3dbd4958a7cd15e7caf07c4e3dc8e7c469f92c8cd88fb8005a2074a3bf913953d695260d88bc1aa25a4eee363ef0000ac0076727b35fbea2dac28fee5ccb0fea768eaf45ced136b9d9e24903464ae889f5c8a723fc14f93124b7c738843cbb89e864c862c38cddcccf95d2cc37a4dc036a8d232b48f62cdd4731412f4890da798f6896a3331f64b48c12d1d57fd9cbe7081171aa1be1d36cafe3867910f99c09e347899c19c38192b6e7387ccd768277c17dab1b7a5027c0b3cf178e21ad2e77ae06711549cfbb1f9c7a9d8096e85e1487f35515d02a92753504a8d75471b9f49edb6fbebc898f403e4773e95feb15e80c9a99c8348d", + ]; + + for (id, item) in wormhole_mainnet_upgrades.into_iter().enumerate() { + let item = hex::decode(item).unwrap(); + print_as_cairo_fn(&item, format!("mainnet_guardian_set_upgrade{}", id + 1), + "An actual mainnet wormhole governance VAA from \ + https://github.com/pyth-network/pyth-crosschain/blob/main/contract_manager/src/contracts/wormhole.ts#L32-L37"); + } + + // Generated with `generate_keypair.rs`. + let secret1 = "047f10198517025e9bf2f6d09ebb650826b35397f01ca2a64a38348cae653f86"; + let address1_hex = "686b9ea8e3237110eaaba1f1b7467559a3273819"; + let address1 = EthAddress(hex::decode(address1_hex).unwrap()); + println!("\npub const TEST_GUARDIAN_ADDRESS1: felt252 = 0x{address1_hex};"); + + let secret2 = "a95d32e5e2b9464b3f49a0f7ef2ede3ff17585836b253b96c832a86d2b5614cb"; + let address2_hex = "363598f080a817e633fc2d8f2b92e6e637f8b449"; + let address2 = EthAddress(hex::decode(address2_hex).unwrap()); + println!("pub const TEST_GUARDIAN_ADDRESS2: felt252 = 0x{address2_hex};"); + + let guardians = GuardianSet { + set_index: 0, + secrets: vec![SecretKey::parse_slice(&hex::decode(secret1).unwrap()).unwrap()], + }; + + let empty_set_upgrade = serialize_vaa( + guardians.sign_vaa( + &[0], + VaaBody { + timestamp: 1, + nonce: 2, + emitter_chain: 1, + emitter_address: u256_to_be(4.into()).into(), + sequence: 5.try_into().unwrap(), + consistency_level: 6, + payload: PayloadKind::Binary( + GuardianSetUpgrade { + chain_id: 60051, + set_index: 1, + guardians: Vec::new(), + } + .serialize(), + ), + }, + ), + ); + print_as_cairo_fn( + &empty_set_upgrade, + "empty_set_upgrade", + "An invalid wormhole guardian set upgrade instruction containing no new guardians.", + ); + + let wrong_emitter_upgrade = serialize_vaa( + guardians.sign_vaa( + &[0], + VaaBody { + timestamp: 1, + nonce: 2, + emitter_chain: 1, + emitter_address: u256_to_be(5.into()).into(), + sequence: 5.try_into().unwrap(), + consistency_level: 6, + payload: PayloadKind::Binary( + GuardianSetUpgrade { + chain_id: 60051, + set_index: 1, + guardians: vec![address1.clone()], + } + .serialize(), + ), + }, + ), + ); + print_as_cairo_fn( + &wrong_emitter_upgrade, + "wrong_emitter_upgrade", + "A wormhole guardian set upgrade instruction with emitter not expected by the test.", + ); + + let wrong_index_upgrade = serialize_vaa( + guardians.sign_vaa( + &[0], + VaaBody { + timestamp: 1, + nonce: 2, + emitter_chain: 1, + emitter_address: u256_to_be(4.into()).into(), + sequence: 5.try_into().unwrap(), + consistency_level: 6, + payload: PayloadKind::Binary( + GuardianSetUpgrade { + chain_id: 0, + set_index: 3, + guardians: vec![address1.clone()], + } + .serialize(), + ), + }, + ), + ); + print_as_cairo_fn( + &wrong_index_upgrade, + "wrong_index_upgrade", + "A wormhole guardian set upgrade instruction with set index = 3 not expected by the test.", + ); + + let upgrade_to_test2 = serialize_vaa( + guardians.sign_vaa( + &[0], + VaaBody { + timestamp: 1, + nonce: 2, + emitter_chain: 1, + emitter_address: u256_to_be(4.into()).into(), + sequence: 5.try_into().unwrap(), + consistency_level: 6, + payload: PayloadKind::Binary( + GuardianSetUpgrade { + chain_id: 0, + set_index: 1, + guardians: vec![address2], + } + .serialize(), + ), + }, + ), + ); + print_as_cairo_fn( + &upgrade_to_test2, + "upgrade_to_test2", + "A wormhole governance guardian set upgrade instruction signed by test guardian #1 containing \ + test guardian #2 as the new guardian set.", + ); + + // Pyth governance payload bytes are copied from + // `governance/xc_admin/packages/xc_admin_common/src/__tests__/GovernancePayload.test.ts` + let pyth_set_fee = serialize_vaa(guardians.sign_vaa( + &[0], + VaaBody { + timestamp: 1, + nonce: 2, + emitter_chain: 1, + emitter_address: u256_to_be(41.into()).into(), + sequence: 1.try_into().unwrap(), + consistency_level: 6, + payload: PayloadKind::Binary(vec![ + 80, 84, 71, 77, 1, 3, 234, 147, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 2, + ]), + }, + )); + print_as_cairo_fn( + &pyth_set_fee, + "pyth_set_fee", + "A Pyth governance instruction to set fee signed by the test guardian #1.", + ); + + let pyth_set_data_sources = serialize_vaa(guardians.sign_vaa( + &[0], + VaaBody { + timestamp: 1, + nonce: 2, + emitter_chain: 1, + emitter_address: u256_to_be(41.into()).into(), + sequence: 1.try_into().unwrap(), + consistency_level: 6, + payload: PayloadKind::Binary(vec![ + 80, 84, 71, 77, 1, 2, 234, 147, 2, 0, 1, 107, 177, 69, 9, 166, 18, 240, 31, 187, + 196, 207, 254, 235, 212, 187, 251, 73, 42, 134, 223, 113, 126, 190, 146, 235, 109, + 244, 50, 163, 240, 10, 37, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 45, + ]), + }, + )); + print_as_cairo_fn( + &pyth_set_data_sources, + "pyth_set_data_sources", + "A Pyth governance instruction to set data sources signed by the test guardian #1.", + ); + + let pyth_set_wormhole = serialize_vaa(guardians.sign_vaa( + &[0], + VaaBody { + timestamp: 1, + nonce: 2, + emitter_chain: 1, + emitter_address: u256_to_be(41.into()).into(), + sequence: 1.try_into().unwrap(), + consistency_level: 6, + payload: PayloadKind::Binary(vec![ + 80, 84, 71, 77, 1, 6, 234, 147, 5, 3, 63, 6, 213, 196, 123, 204, 231, 150, 14, 167, + 3, 176, 74, 11, 246, 75, 243, 63, 111, 46, 181, 97, 52, 150, 218, 116, 117, 34, + 217, 194, + ]), + }, + )); + print_as_cairo_fn( + &pyth_set_wormhole, + "pyth_set_wormhole", + "A Pyth governance instruction to set wormhole address signed by the test guardian #1.", + ); + + let guardians2 = GuardianSet { + set_index: 1, + secrets: vec![SecretKey::parse_slice(&hex::decode(secret2).unwrap()).unwrap()], + }; + + // Random updates pulled from Hermes: + let data = [ + "504e41550100000003b801000000040d005320dd51d28e0cf68194b22a752470c331df400572b0ca981e34e7d00febfa1121c18ef67a0407fec72db62cdd96222a88bbbcffa93b027f610415302c96de1b00028be7fac9d4a0f3bd207b5791c8b79bec28444c00866191710264b44b57ca5ffe78c82a73bdc9f2beaeb99376bca5d1cb2a5680dead59271ad92823dd94ad1a550103b6fdd034183a36cbcdf347854315ab3b1433a7e701f86c19ba7e60bb36aac3c073ffde73fe4215780c891e15918833a423dde9facce4ec4067c21431c3dd4e110004fa2a06375fea37513caf730e24acd5a51c60bd430938963e436feb8e16ab670419040b5587d12c73b50673e7b963abb927a764671654760946ed01eef411eab9010600aeb3f7e650ce14572204b740de60d3854af67ec619a1d3167c79051a311eed7488f33561c80ba96e67033ff3648a553c4776020eb4f9a3af42251ee000e71300070640f3a0789ba8b70ee0b74e18099f9d22ee9194cace268fc9976dbcdfbcd45163dbab0de5cdd530e0047c27d6d3c30e306234d91c58da5f4f89179ba19d07b5000bd6ef9e47ee571f6373e3111f140fef8368e650c01276c8f1184e6e5928eb0ad670a31d512b7bf60d990ef25c6d4786b24dd3d71001d3301e04b671a16b011dae000ccaab09d4a142d240a500e2e427a3a1eedbbbafb38ab5175bd67beea6f1016f221ca4d47be4689aaa19cdcc844624d43d59786a56f305de5f4672bd5f7701bc50010dbf778eb450a84295bf0601c21a2e136f33f95094d560e268861730573a55bfbe2a460498af433ae0d697c6c0e67a018684305faa05046d3a223c83f44f01cd5c010e1bd1dabe6e765fd5336157a6f927caa63c1538b9a323c6dc106aa4ed08b590ab3b42dcd92ecf1e016ee9c7e0482d199d98fd918cd3e9b3da7f405bfb1e9796da010f8e2b4b0a9a68ac00c0afe3d85390718d4eaca5f46c0fa57a2502774bfa24232813b542ca615987bdd1a9f46205ef5e7d21a4218ea77fe57b2aee6964bbec5b030010e1f9798036c3b17a5ce3b20a2bba3abc7683daeff6879f971bc8419ab45bab7618ff9b00a75cb1a047a241b177c98da8aedf2e6d5600cac0df474c1a73c4f8530012afb324617a35a631e904f7b53c3683f002936668f719c0c406a92141470fc30567453771501e37c0f25eb7d36e790b9e0d14aa2c502be01c73e6c680cec45d97006644907f00000000001ae101faedac5851e32b9b23b5f9411a8c2bac4aae3ed4dd7b811dd1a72ea4aa710000000003611faa01415557560000000000086b3d2c0000271079b5cb7d4c7e1c85556ad969e75614b8a272383701005500e62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43000005b66c59a10000000000b8c11371fffffff8000000006644907e000000006644907e000005ae1b11cdc000000000bccb64b80a266a8aa8ed85761b2716dec7ff80ca93d6463616aaaa0083c4f5764c15cf3da1fd27d31ba71e9b87ad7fdb966c073f4a13e3bb2f0fad258c22041e2edf87f279e6e9570c5376bb170044ed9c4b7989793410368db52de5774bfdd9fb1a182cd1b4c59eb0b84f78d9fbaf9e60dbebb48b23e013799ed36b4a1aa2a98fe3533275198c97d48f3139e5e688c926a9975244315131ee0078e847daa0bda876e1a509c7b8afe9888696b49f424641e6cb2d271576948a8428030d171c3f67fd1dd9ba62fe1a464b7849c2", + "504e41550100000003b801000000040d0078c1c39cc9036ff5b77ab57320c9063446902ca4d8a093eac4f483b58897fdea6ace38344d5b1beb85830c4c6ce6a1069587fe465d90b04baa3e7b31d9d4bf1401019bd155786ca5ba0b0892d6deb4652ee4807e524dde320ef786ae87005bffd319343d4c5fb73a1a37bc070b7b5701efdf5a1d30758aa6501abaa3538a971c1a6e0102e6ac44fc5c5475a791df7b6894993308fc73b760f6386cca37181504b4c981c1427cf9075b396b014d28471dc9a127097e43f7aa3d84253de55f28fbdc0c1e6400035e5570e94a512303d5e6a2fcad70e894a49422a9aae0f33d3b3c817a3a481f3b0e83d84052a1adc88bb5c4e9f243c1cac659aef7f91afd3c8d8345a26632b7480104a605e54eb1aadf738cfa6738e7f8e33cc8c7de75a095165302e3ab531eb5320c09e43454a0fbd6ae73465fd5d74933eba5500c089d65af9cb82ad171f63fae44000625c6f3ec9d903240d136ea1f401f815e559eee6ae0e1b64ccb458fc1e988b8b57ea91188d806a331b47a63de6a2669fb3efc683f5a3a59b5ad56523b46593f0a0107f0fea4b0113f2890ea9214a5cf306c44d6c6c411b26683d9ef29a001a1ec7f211e5a30aab07feddc488c2b7dfeccddd03a95786571899a5b329e813d997b5ded010b6a8542ebe7bfd20893ae6fcba2d9e1c10ffeada79f5bc98fa12cc81b773916780d1c48110065ece3647763c78e995447d691b298630fce719ba5a9bf06b667af000c776d09592a76644442801fd127ed93cc2eef0c7091a15befca05b5896acb19b376bf3499a30b2bf1e4728024fb38ab907e719523e7b61119d93e90686a94550e000ddf0fbecc9dba2b7487ed62bdd78a099aa20c587bfd8a73ac1e7ef344e7cfe5fb4ba92c20f174ac66ecd64b6cf994bf34b6d6cee6582bbaaf14b6a870078de96b000e19479568bb774e1a0b4b985c00e7747c70067daa96ab44008c86784b8b0ee6c729d0632003f9343730a452f359029a0961a260003d8d75245f0c8aa3db23023f010f1ebefdcd36a2fd6b72ce8fabe9e9e16ede44ef2b1c5179a4e44c0ca3a7b24cf03dcee54d90b28fd21dd649581616348565ad30d53fffc75a804bc25b29a85efb0112ca92c3b2c08afc49c7fc49c6678735563c6b3b5fc199ff70c951adb94dfaec0659d0543073a69ab1a8dd46be673af96fafd0c65d83ebfa274239dc7c383ac4c9016644908400000000001ae101faedac5851e32b9b23b5f9411a8c2bac4aae3ed4dd7b811dd1a72ea4aa710000000003611fb601415557560000000000086b3d38000027102c9a35a044ed7becf6fb4d92621d48a930c5b0c501005500e62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43000005b687eb22a900000000d0458627fffffff800000000664490830000000066449083000005ae1e43acc000000000bccb05040adf16c33ea64586472be0d01955ca53f009516b22cad85d8fa0255b15c4f0381b21c92f9861976eeb6fb48d0916e7b5d9c84c96f2f55b8ddee8292b5f737aa48b71bcf5cde935ad180852b00eb9689e4ce50ac2aaa85a2aa42c0d9573b8cc46f9518279e5f5681cd7449ac980c550e409242667480c8e9f3c9ea6a43d7d5a0f1b1969a81e3bf9fa0ea613fb4ef01ab0d7d1e587223a510e17061f9a29a8f52c64fb219556a265c5026844792da87ff3bc59b913bc16a56bd50680b342bd86a51640f9161ebcaa17ca", + ]; + for (index, item) in data.into_iter().enumerate() { + let data = re_sign_price_update(&hex::decode(item).unwrap(), &guardians, None); + print_as_cairo_fn( + &data, + format!("test_price_update{}", index + 1), + "An update pulled from Hermes and re-signed by the test guardian #1.", + ); + } + + let test_update2_alt_emitter = re_sign_price_update( + &hex::decode(data[1]).unwrap(), + &guardians, + Some(DataSource { + emitter_chain_id: 3, + emitter_address: u256_to_be(301.into()).into(), + }), + ); + print_as_cairo_fn( + &test_update2_alt_emitter, + "test_update2_alt_emitter", + "An update pulled from Hermes and re-signed by the test guardian #1 with another emitter address.", + ); + + let test_update2_set2 = re_sign_price_update(&hex::decode(data[1]).unwrap(), &guardians2, None); + print_as_cairo_fn( + &test_update2_set2, + "test_update2_set2", + "An update pulled from Hermes and re-signed by the test guardian #2.", + ); +} diff --git a/target_chains/starknet/tools/test_vaas/src/bin/generate_wormhole_vaas.rs b/target_chains/starknet/tools/test_vaas/src/bin/generate_wormhole_vaas.rs deleted file mode 100644 index 2d1faf29ab..0000000000 --- a/target_chains/starknet/tools/test_vaas/src/bin/generate_wormhole_vaas.rs +++ /dev/null @@ -1,177 +0,0 @@ -use libsecp256k1::SecretKey; -use test_vaas::{ - print_as_array_and_last, serialize_vaa, u256_to_be, EthAddress, GuardianSet, GuardianSetUpgrade, -}; -use wormhole_vaas::{PayloadKind, VaaBody}; - -fn main() { - let secret1 = "047f10198517025e9bf2f6d09ebb650826b35397f01ca2a64a38348cae653f86"; - let address1 = EthAddress(hex::decode("686b9ea8e3237110eaaba1f1b7467559a3273819").unwrap()); - - // secret2 = "a95d32e5e2b9464b3f49a0f7ef2ede3ff17585836b253b96c832a86d2b5614cb" - let address2 = EthAddress(hex::decode("363598f080a817e633fc2d8f2b92e6e637f8b449").unwrap()); - - let guardians = GuardianSet { - set_index: 0, - secrets: vec![SecretKey::parse_slice(&hex::decode(secret1).unwrap()).unwrap()], - }; - - let empty_set_upgrade = serialize_vaa( - guardians.sign_vaa( - &[0], - VaaBody { - timestamp: 1, - nonce: 2, - emitter_chain: 1, - emitter_address: u256_to_be(4.into()).into(), - sequence: 5.try_into().unwrap(), - consistency_level: 6, - payload: PayloadKind::Binary( - GuardianSetUpgrade { - chain_id: 60051, - set_index: 1, - guardians: Vec::new(), - } - .serialize(), - ), - }, - ), - ); - println!("empty upgrade"); - print_as_array_and_last(&empty_set_upgrade); - println!(); - - let wrong_emitter_upgrade = serialize_vaa( - guardians.sign_vaa( - &[0], - VaaBody { - timestamp: 1, - nonce: 2, - emitter_chain: 1, - emitter_address: u256_to_be(5.into()).into(), - sequence: 5.try_into().unwrap(), - consistency_level: 6, - payload: PayloadKind::Binary( - GuardianSetUpgrade { - chain_id: 60051, - set_index: 1, - guardians: vec![address1.clone()], - } - .serialize(), - ), - }, - ), - ); - println!("wrong_emitter_upgrade"); - print_as_array_and_last(&wrong_emitter_upgrade); - println!(); - - let wrong_index_upgrade = serialize_vaa( - guardians.sign_vaa( - &[0], - VaaBody { - timestamp: 1, - nonce: 2, - emitter_chain: 1, - emitter_address: u256_to_be(4.into()).into(), - sequence: 5.try_into().unwrap(), - consistency_level: 6, - payload: PayloadKind::Binary( - GuardianSetUpgrade { - chain_id: 0, - set_index: 3, - guardians: vec![address1.clone()], - } - .serialize(), - ), - }, - ), - ); - println!("wrong_index_upgrade"); - print_as_array_and_last(&wrong_index_upgrade); - println!(); - - let upgrade_to_test2 = serialize_vaa( - guardians.sign_vaa( - &[0], - VaaBody { - timestamp: 1, - nonce: 2, - emitter_chain: 1, - emitter_address: u256_to_be(4.into()).into(), - sequence: 5.try_into().unwrap(), - consistency_level: 6, - payload: PayloadKind::Binary( - GuardianSetUpgrade { - chain_id: 0, - set_index: 1, - guardians: vec![address2], - } - .serialize(), - ), - }, - ), - ); - println!("upgrade_to_test2"); - print_as_array_and_last(&upgrade_to_test2); - println!(); - - let pyth_set_fee = serialize_vaa(guardians.sign_vaa( - &[0], - VaaBody { - timestamp: 1, - nonce: 2, - emitter_chain: 1, - emitter_address: u256_to_be(41.into()).into(), - sequence: 1.try_into().unwrap(), - consistency_level: 6, - payload: PayloadKind::Binary(vec![ - 80, 84, 71, 77, 1, 3, 234, 147, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 2, - ]), - }, - )); - println!("pyth_set_fee"); - print_as_array_and_last(&pyth_set_fee); - println!(); - - let pyth_set_data_sources = serialize_vaa(guardians.sign_vaa( - &[0], - VaaBody { - timestamp: 1, - nonce: 2, - emitter_chain: 1, - emitter_address: u256_to_be(41.into()).into(), - sequence: 1.try_into().unwrap(), - consistency_level: 6, - payload: PayloadKind::Binary(vec![ - 80, 84, 71, 77, 1, 2, 234, 147, 2, 0, 1, 107, 177, 69, 9, 166, 18, 240, 31, 187, - 196, 207, 254, 235, 212, 187, 251, 73, 42, 134, 223, 113, 126, 190, 146, 235, 109, - 244, 50, 163, 240, 10, 37, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 45, - ]), - }, - )); - println!("pyth_set_data_sources"); - print_as_array_and_last(&pyth_set_data_sources); - println!(); - - let pyth_set_wormhole = serialize_vaa(guardians.sign_vaa( - &[0], - VaaBody { - timestamp: 1, - nonce: 2, - emitter_chain: 1, - emitter_address: u256_to_be(41.into()).into(), - sequence: 1.try_into().unwrap(), - consistency_level: 6, - payload: PayloadKind::Binary(vec![ - 80, 84, 71, 77, 1, 6, 234, 147, 5, 3, 63, 6, 213, 196, 123, 204, 231, 150, 14, 167, - 3, 176, 74, 11, 246, 75, 243, 63, 111, 46, 181, 97, 52, 150, 218, 116, 117, 34, - 217, 194, - ]), - }, - )); - println!("pyth_set_wormhole"); - print_as_array_and_last(&pyth_set_wormhole); - println!(); -} diff --git a/target_chains/starknet/tools/test_vaas/src/bin/re_sign_price_updates.rs b/target_chains/starknet/tools/test_vaas/src/bin/re_sign_price_updates.rs deleted file mode 100644 index 51d1886961..0000000000 --- a/target_chains/starknet/tools/test_vaas/src/bin/re_sign_price_updates.rs +++ /dev/null @@ -1,50 +0,0 @@ -use libsecp256k1::SecretKey; -use test_vaas::{ - print_as_array_and_last, re_sign_price_update, u256_to_be, DataSource, GuardianSet, -}; - -fn main() { - let secret1 = "047f10198517025e9bf2f6d09ebb650826b35397f01ca2a64a38348cae653f86"; - // address1 = 0x686b9ea8e3237110eaaba1f1b7467559a3273819 - - let secret2 = "a95d32e5e2b9464b3f49a0f7ef2ede3ff17585836b253b96c832a86d2b5614cb"; - // address2 = 0x363598f080a817e633fc2d8f2b92e6e637f8b449 - - let guardians = GuardianSet { - set_index: 0, - secrets: vec![SecretKey::parse_slice(&hex::decode(secret1).unwrap()).unwrap()], - }; - - let guardians2 = GuardianSet { - set_index: 1, - secrets: vec![SecretKey::parse_slice(&hex::decode(secret2).unwrap()).unwrap()], - }; - - let data = [ - "504e41550100000003b801000000040d005320dd51d28e0cf68194b22a752470c331df400572b0ca981e34e7d00febfa1121c18ef67a0407fec72db62cdd96222a88bbbcffa93b027f610415302c96de1b00028be7fac9d4a0f3bd207b5791c8b79bec28444c00866191710264b44b57ca5ffe78c82a73bdc9f2beaeb99376bca5d1cb2a5680dead59271ad92823dd94ad1a550103b6fdd034183a36cbcdf347854315ab3b1433a7e701f86c19ba7e60bb36aac3c073ffde73fe4215780c891e15918833a423dde9facce4ec4067c21431c3dd4e110004fa2a06375fea37513caf730e24acd5a51c60bd430938963e436feb8e16ab670419040b5587d12c73b50673e7b963abb927a764671654760946ed01eef411eab9010600aeb3f7e650ce14572204b740de60d3854af67ec619a1d3167c79051a311eed7488f33561c80ba96e67033ff3648a553c4776020eb4f9a3af42251ee000e71300070640f3a0789ba8b70ee0b74e18099f9d22ee9194cace268fc9976dbcdfbcd45163dbab0de5cdd530e0047c27d6d3c30e306234d91c58da5f4f89179ba19d07b5000bd6ef9e47ee571f6373e3111f140fef8368e650c01276c8f1184e6e5928eb0ad670a31d512b7bf60d990ef25c6d4786b24dd3d71001d3301e04b671a16b011dae000ccaab09d4a142d240a500e2e427a3a1eedbbbafb38ab5175bd67beea6f1016f221ca4d47be4689aaa19cdcc844624d43d59786a56f305de5f4672bd5f7701bc50010dbf778eb450a84295bf0601c21a2e136f33f95094d560e268861730573a55bfbe2a460498af433ae0d697c6c0e67a018684305faa05046d3a223c83f44f01cd5c010e1bd1dabe6e765fd5336157a6f927caa63c1538b9a323c6dc106aa4ed08b590ab3b42dcd92ecf1e016ee9c7e0482d199d98fd918cd3e9b3da7f405bfb1e9796da010f8e2b4b0a9a68ac00c0afe3d85390718d4eaca5f46c0fa57a2502774bfa24232813b542ca615987bdd1a9f46205ef5e7d21a4218ea77fe57b2aee6964bbec5b030010e1f9798036c3b17a5ce3b20a2bba3abc7683daeff6879f971bc8419ab45bab7618ff9b00a75cb1a047a241b177c98da8aedf2e6d5600cac0df474c1a73c4f8530012afb324617a35a631e904f7b53c3683f002936668f719c0c406a92141470fc30567453771501e37c0f25eb7d36e790b9e0d14aa2c502be01c73e6c680cec45d97006644907f00000000001ae101faedac5851e32b9b23b5f9411a8c2bac4aae3ed4dd7b811dd1a72ea4aa710000000003611faa01415557560000000000086b3d2c0000271079b5cb7d4c7e1c85556ad969e75614b8a272383701005500e62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43000005b66c59a10000000000b8c11371fffffff8000000006644907e000000006644907e000005ae1b11cdc000000000bccb64b80a266a8aa8ed85761b2716dec7ff80ca93d6463616aaaa0083c4f5764c15cf3da1fd27d31ba71e9b87ad7fdb966c073f4a13e3bb2f0fad258c22041e2edf87f279e6e9570c5376bb170044ed9c4b7989793410368db52de5774bfdd9fb1a182cd1b4c59eb0b84f78d9fbaf9e60dbebb48b23e013799ed36b4a1aa2a98fe3533275198c97d48f3139e5e688c926a9975244315131ee0078e847daa0bda876e1a509c7b8afe9888696b49f424641e6cb2d271576948a8428030d171c3f67fd1dd9ba62fe1a464b7849c2", - "504e41550100000003b801000000040d0078c1c39cc9036ff5b77ab57320c9063446902ca4d8a093eac4f483b58897fdea6ace38344d5b1beb85830c4c6ce6a1069587fe465d90b04baa3e7b31d9d4bf1401019bd155786ca5ba0b0892d6deb4652ee4807e524dde320ef786ae87005bffd319343d4c5fb73a1a37bc070b7b5701efdf5a1d30758aa6501abaa3538a971c1a6e0102e6ac44fc5c5475a791df7b6894993308fc73b760f6386cca37181504b4c981c1427cf9075b396b014d28471dc9a127097e43f7aa3d84253de55f28fbdc0c1e6400035e5570e94a512303d5e6a2fcad70e894a49422a9aae0f33d3b3c817a3a481f3b0e83d84052a1adc88bb5c4e9f243c1cac659aef7f91afd3c8d8345a26632b7480104a605e54eb1aadf738cfa6738e7f8e33cc8c7de75a095165302e3ab531eb5320c09e43454a0fbd6ae73465fd5d74933eba5500c089d65af9cb82ad171f63fae44000625c6f3ec9d903240d136ea1f401f815e559eee6ae0e1b64ccb458fc1e988b8b57ea91188d806a331b47a63de6a2669fb3efc683f5a3a59b5ad56523b46593f0a0107f0fea4b0113f2890ea9214a5cf306c44d6c6c411b26683d9ef29a001a1ec7f211e5a30aab07feddc488c2b7dfeccddd03a95786571899a5b329e813d997b5ded010b6a8542ebe7bfd20893ae6fcba2d9e1c10ffeada79f5bc98fa12cc81b773916780d1c48110065ece3647763c78e995447d691b298630fce719ba5a9bf06b667af000c776d09592a76644442801fd127ed93cc2eef0c7091a15befca05b5896acb19b376bf3499a30b2bf1e4728024fb38ab907e719523e7b61119d93e90686a94550e000ddf0fbecc9dba2b7487ed62bdd78a099aa20c587bfd8a73ac1e7ef344e7cfe5fb4ba92c20f174ac66ecd64b6cf994bf34b6d6cee6582bbaaf14b6a870078de96b000e19479568bb774e1a0b4b985c00e7747c70067daa96ab44008c86784b8b0ee6c729d0632003f9343730a452f359029a0961a260003d8d75245f0c8aa3db23023f010f1ebefdcd36a2fd6b72ce8fabe9e9e16ede44ef2b1c5179a4e44c0ca3a7b24cf03dcee54d90b28fd21dd649581616348565ad30d53fffc75a804bc25b29a85efb0112ca92c3b2c08afc49c7fc49c6678735563c6b3b5fc199ff70c951adb94dfaec0659d0543073a69ab1a8dd46be673af96fafd0c65d83ebfa274239dc7c383ac4c9016644908400000000001ae101faedac5851e32b9b23b5f9411a8c2bac4aae3ed4dd7b811dd1a72ea4aa710000000003611fb601415557560000000000086b3d38000027102c9a35a044ed7becf6fb4d92621d48a930c5b0c501005500e62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43000005b687eb22a900000000d0458627fffffff800000000664490830000000066449083000005ae1e43acc000000000bccb05040adf16c33ea64586472be0d01955ca53f009516b22cad85d8fa0255b15c4f0381b21c92f9861976eeb6fb48d0916e7b5d9c84c96f2f55b8ddee8292b5f737aa48b71bcf5cde935ad180852b00eb9689e4ce50ac2aaa85a2aa42c0d9573b8cc46f9518279e5f5681cd7449ac980c550e409242667480c8e9f3c9ea6a43d7d5a0f1b1969a81e3bf9fa0ea613fb4ef01ab0d7d1e587223a510e17061f9a29a8f52c64fb219556a265c5026844792da87ff3bc59b913bc16a56bd50680b342bd86a51640f9161ebcaa17ca", - ]; - for (index, item) in data.into_iter().enumerate() { - println!("update #{}:", index + 1); - let data = re_sign_price_update(&hex::decode(item).unwrap(), &guardians, None); - print_as_array_and_last(&data); - println!(); - } - - println!("update #2 with alt emitter:"); - let update2_alt_emitter = re_sign_price_update( - &hex::decode(data[1]).unwrap(), - &guardians, - Some(DataSource { - emitter_chain_id: 3, - emitter_address: u256_to_be(301.into()).into(), - }), - ); - print_as_array_and_last(&update2_alt_emitter); - - println!("update #2 with test2 guardian:"); - let update2_test2_guardian = - re_sign_price_update(&hex::decode(data[1]).unwrap(), &guardians2, None); - print_as_array_and_last(&update2_test2_guardian); - println!(); -} diff --git a/target_chains/starknet/tools/test_vaas/src/bin/wormhole_mainnet_upgrades.rs b/target_chains/starknet/tools/test_vaas/src/bin/wormhole_mainnet_upgrades.rs deleted file mode 100644 index 54e6bb79ea..0000000000 --- a/target_chains/starknet/tools/test_vaas/src/bin/wormhole_mainnet_upgrades.rs +++ /dev/null @@ -1,17 +0,0 @@ -fn main() { - // This data is from https://github.com/pyth-network/pyth-crosschain/blob/main/contract_manager/src/contracts/wormhole.ts#L32-L37 - let data = [ - "010000000001007ac31b282c2aeeeb37f3385ee0de5f8e421d30b9e5ae8ba3d4375c1c77a86e77159bb697d9c456d6f8c02d22a94b1279b65b0d6a9957e7d3857423845ac758e300610ac1d2000000030001000000000000000000000000000000000000000000000000000000000000000400000000000005390000000000000000000000000000000000000000000000000000000000436f7265020000000000011358cc3ae5c097b213ce3c81979e1b9f9570746aa5ff6cb952589bde862c25ef4392132fb9d4a42157114de8460193bdf3a2fcf81f86a09765f4762fd1107a0086b32d7a0977926a205131d8731d39cbeb8c82b2fd82faed2711d59af0f2499d16e726f6b211b39756c042441be6d8650b69b54ebe715e234354ce5b4d348fb74b958e8966e2ec3dbd4958a7cdeb5f7389fa26941519f0863349c223b73a6ddee774a3bf913953d695260d88bc1aa25a4eee363ef0000ac0076727b35fbea2dac28fee5ccb0fea768eaf45ced136b9d9e24903464ae889f5c8a723fc14f93124b7c738843cbb89e864c862c38cddcccf95d2cc37a4dc036a8d232b48f62cdd4731412f4890da798f6896a3331f64b48c12d1d57fd9cbe7081171aa1be1d36cafe3867910f99c09e347899c19c38192b6e7387ccd768277c17dab1b7a5027c0b3cf178e21ad2e77ae06711549cfbb1f9c7a9d8096e85e1487f35515d02a92753504a8d75471b9f49edb6fbebc898f403e4773e95feb15e80c9a99c8348d", - "01000000010d0012e6b39c6da90c5dfd3c228edbb78c7a4c97c488ff8a346d161a91db067e51d638c17216f368aa9bdf4836b8645a98018ca67d2fec87d769cabfdf2406bf790a0002ef42b288091a670ef3556596f4f47323717882881eaf38e03345078d07a156f312b785b64dae6e9a87e3d32872f59cb1931f728cecf511762981baf48303668f0103cef2616b84c4e511ff03329e0853f1bd7ee9ac5ba71d70a4d76108bddf94f69c2a8a84e4ee94065e8003c334e899184943634e12043d0dda78d93996da073d190104e76d166b9dac98f602107cc4b44ac82868faf00b63df7d24f177aa391e050902413b71046434e67c770b19aecdf7fce1d1435ea0be7262e3e4c18f50ddc8175c0105d9450e8216d741e0206a50f93b750a47e0a258b80eb8fed1314cc300b3d905092de25cd36d366097b7103ae2d184121329ba3aa2d7c6cc53273f11af14798110010687477c8deec89d36a23e7948feb074df95362fc8dcbd8ae910ac556a1dee1e755c56b9db5d710c940938ed79bc1895a3646523a58bc55f475a23435a373ecfdd0107fb06734864f79def4e192497362513171530daea81f07fbb9f698afe7e66c6d44db21323144f2657d4a5386a954bb94eef9f64148c33aef6e477eafa2c5c984c01088769e82216310d1827d9bd48645ec23e90de4ef8a8de99e2d351d1df318608566248d80cdc83bdcac382b3c30c670352be87f9069aab5037d0b747208eae9c650109e9796497ff9106d0d1c62e184d83716282870cef61a1ee13d6fc485b521adcce255c96f7d1bca8d8e7e7d454b65783a830bddc9d94092091a268d311ecd84c26010c468c9fb6d41026841ff9f8d7368fa309d4dbea3ea4bbd2feccf94a92cc8a20a226338a8e2126cd16f70eaf15b4fc9be2c3fa19def14e071956a605e9d1ac4162010e23fcb6bd445b7c25afb722250c1acbc061ed964ba9de1326609ae012acdfb96942b2a102a2de99ab96327859a34a2b49a767dbdb62e0a1fb26af60fe44fd496a00106bb0bac77ac68b347645f2fb1ad789ea9bd76fb9b2324f25ae06f97e65246f142df717f662e73948317182c62ce87d79c73def0dba12e5242dfc038382812cfe00126da03c5e56cb15aeeceadc1e17a45753ab4dc0ec7bf6a75ca03143ed4a294f6f61bc3f478a457833e43084ecd7c985bf2f55a55f168aac0e030fc49e845e497101626e9d9a5d9e343f00010000000000000000000000000000000000000000000000000000000000000004c1759167c43f501c2000000000000000000000000000000000000000000000000000000000436f7265020000000000021358cc3ae5c097b213ce3c81979e1b9f9570746aa5ff6cb952589bde862c25ef4392132fb9d4a42157114de8460193bdf3a2fcf81f86a09765f4762fd1107a0086b32d7a0977926a205131d8731d39cbeb8c82b2fd82faed2711d59af0f2499d16e726f6b211b39756c042441be6d8650b69b54ebe715e234354ce5b4d348fb74b958e8966e2ec3dbd4958a7cd66b9590e1c41e0b226937bf9217d1d67fd4e91f574a3bf913953d695260d88bc1aa25a4eee363ef0000ac0076727b35fbea2dac28fee5ccb0fea768eaf45ced136b9d9e24903464ae889f5c8a723fc14f93124b7c738843cbb89e864c862c38cddcccf95d2cc37a4dc036a8d232b48f62cdd4731412f4890da798f6896a3331f64b48c12d1d57fd9cbe7081171aa1be1d36cafe3867910f99c09e347899c19c38192b6e7387ccd768277c17dab1b7a5027c0b3cf178e21ad2e77ae06711549cfbb1f9c7a9d8096e85e1487f35515d02a92753504a8d75471b9f49edb6fbebc898f403e4773e95feb15e80c9a99c8348d", - "01000000020d00ce45474d9e1b1e7790a2d210871e195db53a70ffd6f237cfe70e2686a32859ac43c84a332267a8ef66f59719cf91cc8df0101fd7c36aa1878d5139241660edc0010375cc906156ae530786661c0cd9aef444747bc3d8d5aa84cac6a6d2933d4e1a031cffa30383d4af8131e929d9f203f460b07309a647d6cd32ab1cc7724089392c000452305156cfc90343128f97e499311b5cae174f488ff22fbc09591991a0a73d8e6af3afb8a5968441d3ab8437836407481739e9850ad5c95e6acfcc871e951bc30105a7956eefc23e7c945a1966d5ddbe9e4be376c2f54e45e3d5da88c2f8692510c7429b1ea860ae94d929bd97e84923a18187e777aa3db419813a80deb84cc8d22b00061b2a4f3d2666608e0aa96737689e3ba5793810ff3a52ff28ad57d8efb20967735dc5537a2e43ef10f583d144c12a1606542c207f5b79af08c38656d3ac40713301086b62c8e130af3411b3c0d91b5b50dcb01ed5f293963f901fc36e7b0e50114dce203373b32eb45971cef8288e5d928d0ed51cd86e2a3006b0af6a65c396c009080009e93ab4d2c8228901a5f4525934000b2c26d1dc679a05e47fdf0ff3231d98fbc207103159ff4116df2832eea69b38275283434e6cd4a4af04d25fa7a82990b707010aa643f4cf615dfff06ffd65830f7f6cf6512dabc3690d5d9e210fdc712842dc2708b8b2c22e224c99280cd25e5e8bfb40e3d1c55b8c41774e287c1e2c352aecfc010b89c1e85faa20a30601964ccc6a79c0ae53cfd26fb10863db37783428cd91390a163346558239db3cd9d420cfe423a0df84c84399790e2e308011b4b63e6b8015010ca31dcb564ac81a053a268d8090e72097f94f366711d0c5d13815af1ec7d47e662e2d1bde22678113d15963da100b668ba26c0c325970d07114b83c5698f46097010dc9fda39c0d592d9ed92cd22b5425cc6b37430e236f02d0d1f8a2ef45a00bde26223c0a6eb363c8b25fd3bf57234a1d9364976cefb8360e755a267cbbb674b39501108db01e444ab1003dd8b6c96f8eb77958b40ba7a85fefecf32ad00b7a47c0ae7524216262495977e09c0989dd50f280c21453d3756843608eacd17f4fdfe47600001261025228ef5af837cb060bcd986fcfa84ccef75b3fa100468cfd24e7fadf99163938f3b841a33496c2706d0208faab088bd155b2e20fd74c625bb1cc8c43677a0163c53c409e0c5dfa000100000000000000000000000000000000000000000000000000000000000000046c5a054d7833d1e42000000000000000000000000000000000000000000000000000000000436f7265020000000000031358cc3ae5c097b213ce3c81979e1b9f9570746aa5ff6cb952589bde862c25ef4392132fb9d4a42157114de8460193bdf3a2fcf81f86a09765f4762fd1107a0086b32d7a0977926a205131d8731d39cbeb8c82b2fd82faed2711d59af0f2499d16e726f6b211b39756c042441be6d8650b69b54ebe715e234354ce5b4d348fb74b958e8966e2ec3dbd4958a7cd15e7caf07c4e3dc8e7c469f92c8cd88fb8005a2074a3bf913953d695260d88bc1aa25a4eee363ef0000ac0076727b35fbea2dac28fee5ccb0fea768eaf45ced136b9d9e24903464ae889f5c8a723fc14f93124b7c738843cbb89e864c862c38cddcccf95d2cc37a4dc036a8d232b48f62cdd4731412f4890da798f6896a3331f64b48c12d1d57fd9cbe7081171aa1be1d36cafe3867910f99c09e347899c19c38192b6e7387ccd768277c17dab1b7a5027c0b3cf178e21ad2e77ae06711549cfbb1f9c7a9d8096e85e1487f35515d02a92753504a8d75471b9f49edb6fbebc898f403e4773e95feb15e80c9a99c8348d", - "01000000030d03d4a37a6ff4361d91714730831e9d49785f61624c8f348a9c6c1d82bc1d98cadc5e936338204445c6250bb4928f3f3e165ad47ca03a5d63111168a2de4576856301049a5df10464ea4e1961589fd30fc18d1970a7a2ffaad617e56a0f7777f25275253af7d10a0f0f2494dc6e99fc80e444ab9ebbbee252ded2d5dcb50cbf7a54bb5a01055f4603b553b9ba9e224f9c55c7bca3da00abb10abd19e0081aecd3b352be061a70f79f5f388ebe5190838ef3cd13a2f22459c9a94206883b739c90b40d5d74640006a8fade3997f650a36e46bceb1f609edff201ab32362266f166c5c7da713f6a19590c20b68ed3f0119cb24813c727560ede086b3d610c2d7a1efa66f655bad90900080f5e495a75ea52241c59d145c616bfac01e57182ad8d784cbcc9862ed3afb60c0983ccbc690553961ffcf115a0c917367daada8e60be2cbb8b8008bac6341a8c010935ab11e0eea28b87a1edc5ccce3f1fac25f75b5f640fe6b0673a7cd74513c9dc01c544216cf364cc9993b09fda612e0cd1ced9c00fb668b872a16a64ebb55d27010ab2bc39617a2396e7defa24cd7c22f42dc31f3c42ffcd9d1472b02df8468a4d0563911e8fb6a4b5b0ce0bd505daa53779b08ff660967b31f246126ed7f6f29a7e000bdb6d3fd7b33bdc9ac3992916eb4aacb97e7e21d19649e7fa28d2dd6e337937e4274516a96c13ac7a8895da9f91948ea3a09c25f44b982c62ce8842b58e20c8a9000d3d1b19c8bb000856b6610b9d28abde6c35cb7705c6ca5db711f7be96d60eed9d72cfa402a6bfe8bf0496dbc7af35796fc768da51a067b95941b3712dce8ae1e7010ec80085033157fd1a5628fc0c56267469a86f0e5a66d7dede1ad4ce74ecc3dff95b60307a39c3bfbeedc915075070da30d0395def9635130584f709b3885e1bdc0010fc480eb9ee715a2d151b23722b48b42581d7f4001fc1696c75425040bfc1ffc5394fe418adb2b64bd3dc692efda4cc408163677dbe233b16bcdabb853a20843301118ee9e115e1a0c981f19d0772b850e666591322da742a9a12cce9f52a5665bd474abdd59c580016bee8aae67fdf39b315be2528d12eec3a652910e03cc4c6fa3801129d0d1e2e429e969918ec163d16a7a5b2c6729aa44af5dccad07d25d19891556a79b574f42d9adbd9e2a9ae5a6b8750331d2fccb328dd94c3bf8791ee1bfe85aa00661e99781981faea00010000000000000000000000000000000000000000000000000000000000000004fd4c6c55ec8dfd342000000000000000000000000000000000000000000000000000000000436f726502000000000004135893b5a76c3f739645648885bdccc06cd70a3cd3ff6cb952589bde862c25ef4392132fb9d4a42157114de8460193bdf3a2fcf81f86a09765f4762fd1107a0086b32d7a0977926a205131d8731d39cbeb8c82b2fd82faed2711d59af0f2499d16e726f6b211b39756c042441be6d8650b69b54ebe715e234354ce5b4d348fb74b958e8966e2ec3dbd4958a7cd15e7caf07c4e3dc8e7c469f92c8cd88fb8005a2074a3bf913953d695260d88bc1aa25a4eee363ef0000ac0076727b35fbea2dac28fee5ccb0fea768eaf45ced136b9d9e24903464ae889f5c8a723fc14f93124b7c738843cbb89e864c862c38cddcccf95d2cc37a4dc036a8d232b48f62cdd4731412f4890da798f6896a3331f64b48c12d1d57fd9cbe7081171aa1be1d36cafe3867910f99c09e347899c19c38192b6e7387ccd768277c17dab1b7a5027c0b3cf178e21ad2e77ae06711549cfbb1f9c7a9d8096e85e1487f35515d02a92753504a8d75471b9f49edb6fbebc898f403e4773e95feb15e80c9a99c8348d", - ]; - - for (id, item) in data.into_iter().enumerate() { - let data = hex::decode(item).unwrap(); - - println!("guardian set #{}:", id + 1); - test_vaas::print_as_array_and_last(&data); - println!(); - } -} diff --git a/target_chains/starknet/tools/test_vaas/src/lib.rs b/target_chains/starknet/tools/test_vaas/src/lib.rs index e335014a05..00d9dbdaba 100644 --- a/target_chains/starknet/tools/test_vaas/src/lib.rs +++ b/target_chains/starknet/tools/test_vaas/src/lib.rs @@ -1,4 +1,7 @@ -use std::io::{Cursor, Seek, SeekFrom}; +use std::{ + fmt::Display, + io::{Cursor, Seek, SeekFrom}, +}; use alloy_primitives::FixedBytes; use byteorder::{ReadBytesExt, WriteBytesExt, BE}; @@ -53,14 +56,21 @@ pub fn print_as_cli_input(data: &[u8]) { } /// Print data in the format suitable for embedding in tests. -pub fn print_as_array_and_last(data: &[u8]) { +pub fn print_as_cairo_fn(data: &[u8], name: impl Display, comment: impl Display) { + println!(); + println!("// {comment}"); let data = to_cairo_byte_array_data(data); - println!("let bytes = array!["); + println!("pub fn {name}() -> ByteArray {{"); + println!(" let bytes = array!["); for item in data.data { - println!(" {item},"); + println!(" {item},"); } - println!("];"); - println!("let last = {};", data.num_last_bytes); + println!(" ];"); + println!( + " ByteArrayImpl::new(array_try_into(bytes), {})", + data.num_last_bytes + ); + println!("}}"); } pub struct GuardianSet { @@ -144,11 +154,13 @@ pub struct DataSource { pub emitter_address: FixedBytes<32>, } -pub fn re_sign_price_update( - update: &[u8], - guardian_set: &GuardianSet, - new_emitter: Option, -) -> Vec { +pub struct VaaIndexes { + pub pos_before_vaa_size: usize, + pub pos_before_vaa: usize, + pub pos_after_vaa: usize, +} + +pub fn locate_vaa_in_price_update(update: &[u8]) -> VaaIndexes { let mut reader = Cursor::new(update); reader.seek(SeekFrom::Current(6)).unwrap(); let trailing_header_len = reader.read_u8().unwrap(); @@ -161,6 +173,23 @@ pub fn re_sign_price_update( let wh_proof_size: usize = reader.read_u16::().unwrap().into(); let pos_before_vaa: usize = reader.position().try_into().unwrap(); let pos_after_vaa = pos_before_vaa + wh_proof_size; + VaaIndexes { + pos_before_vaa_size, + pos_before_vaa, + pos_after_vaa, + } +} + +pub fn re_sign_price_update( + update: &[u8], + guardian_set: &GuardianSet, + new_emitter: Option, +) -> Vec { + let VaaIndexes { + pos_before_vaa_size, + pos_before_vaa, + pos_after_vaa, + } = locate_vaa_in_price_update(update); let mut vaa = Vaa::read(&mut Cursor::new(&update[pos_before_vaa..pos_after_vaa])).unwrap(); if let Some(new_emitter) = new_emitter {