x
564
{ parameter (or (unit %update_price_observations) (or (unit %update_shortest_observations) (unit %update_short_observations))) ; storage (pair (big_map %price_observations nat (pair timestamp (nat %price_0_cumulative) (nat %price_1_cumulative))) (big_map %shortest_observations nat (pair timestamp (nat %shortest_twap))) (big_map %short_observations nat (pair timestamp (nat %short_twap))) (nat %granularity) (nat %shortest_record_period) (nat %shortest_window) (nat %short_record_period) (nat %long_record_period) (nat %long_granularity) (nat %shortest_twap_end) (nat %short_twap_end) (nat %long_twap_end) (nat %shortest_twap_start) (nat %short_twap_start) (nat %long_twap_start) (address %dispatcher)) ; code { UNPAIR ; IF_LEFT { DROP ; SELF_ADDRESS ; NOW ; VIEW "timestamp.priceObsIndex" nat ; IF_NONE { PUSH string "twaps.view failed 448" ; FAILWITH } {} ; RENAME @price_observation_index ; SELF_ADDRESS ; DUP 2 ; VIEW "nat.priceObservation" (pair timestamp nat nat) ; IF_NONE { PUSH string "twaps.view failed 450" ; FAILWITH } {} ; RENAME @price_observation ; CAR @observed_at ; SELF_ADDRESS ; UNIT ; VIEW "unit.granularity" nat ; IF_NONE { PUSH string "twaps.view failed 454" ; FAILWITH } {} ; INT @granularity ; NOW ; SUB ; { COMPARE ; LE ; IF { PUSH string "twaps.already observed this period" ; FAILWITH } {} } ; SWAP ; DUP 2 ; UPDATE 19 ; SELF_ADDRESS ; UNIT ; VIEW "unit.granularity" nat ; IF_NONE { PUSH string "twaps.view failed 474" ; FAILWITH } {} ; INT @granularity ; SELF_ADDRESS ; UNIT ; VIEW "unit.shortestWindow" nat ; IF_NONE { PUSH string "twaps.view failed 476" ; FAILWITH } {} ; INT @shortest_window ; EDIV ; IF_NONE { PUSH string "twaps.division by zero 475" ; FAILWITH } {} ; CAR @window_length ; SELF_ADDRESS ; UNIT ; VIEW "unit.priceMaxIndex" nat ; IF_NONE { PUSH string "twaps.view failed 479" ; FAILWITH } {} ; RENAME @price_max_index ; DUP ; DUG 2 ; SUB ; ISNAT ; IF_NONE { PUSH string "twaps.window size larger than recorded data" ; FAILWITH } {} ; RENAME @window_index_complement ; DUP 4 ; ADD ; EDIV ; IF_NONE { PUSH string "twaps.division by zero 486" ; FAILWITH } {} ; CDR @shortest_twap_start_index ; UPDATE 25 ; DUP ; GET 1 ; DIG 2 ; SELF_ADDRESS ; UNIT ; VIEW "unit.baseTokenCumulativePrices" (pair timestamp nat nat) ; IF_NONE { PUSH string "twaps.view failed 489" ; FAILWITH } {} ; RENAME @current_observation ; SOME ; SWAP ; UPDATE ; UPDATE 1 ; NIL operation } { IF_LEFT { DROP ; SELF_ADDRESS ; NOW ; VIEW "timestamp.shortestObsIndex" nat ; IF_NONE { PUSH string "twaps.view failed 499" ; FAILWITH } {} ; RENAME @shortest_observation_index ; SELF_ADDRESS ; DUP 2 ; VIEW "nat.shortestObservation" (pair timestamp nat) ; IF_NONE { PUSH string "twaps.view failed 501" ; FAILWITH } {} ; RENAME @shortest_observation ; CAR @observed_at ; SELF_ADDRESS ; UNIT ; VIEW "unit.shortestRecordPeriod" nat ; IF_NONE { PUSH string "twaps.view failed 506" ; FAILWITH } {} ; INT @granularity ; NOW ; SUB ; { COMPARE ; LE ; IF { PUSH string "twaps.already observed this period" ; FAILWITH } {} } ; SWAP ; DUP 2 ; UPDATE 21 ; DUP 2 ; PUSH nat 1 ; ADD ; DUP ; SELF_ADDRESS ; UNIT ; VIEW "unit.shortestMaxIndex" nat ; IF_NONE { PUSH string "twaps.view failed 516" ; FAILWITH } {} ; RENAME @shortest_max_index ; { COMPARE ; LE ; IF { DROP ; PUSH nat 0 } {} } ; UPDATE 27 ; DUP ; GET 3 ; DIG 2 ; SELF_ADDRESS ; UNIT ; VIEW "unit.shortestTWAP" (pair timestamp nat) ; IF_NONE { PUSH string "twaps.view failed 523" ; FAILWITH } {} ; RENAME @current_observation ; SOME ; SWAP ; UPDATE ; UPDATE 3 ; NIL operation } { DROP ; SELF_ADDRESS ; NOW ; VIEW "timestamp.shortObsIndex" nat ; IF_NONE { PUSH string "twaps.view failed 533" ; FAILWITH } {} ; RENAME @short_observation_index ; SELF_ADDRESS ; DUP 2 ; VIEW "nat.shortObservation" (pair timestamp nat) ; IF_NONE { PUSH string "twaps.view failed 535" ; FAILWITH } {} ; RENAME @short_observation ; CAR @observed_at ; SELF_ADDRESS ; UNIT ; VIEW "unit.longGranularity" nat ; IF_NONE { PUSH string "twaps.view failed 540" ; FAILWITH } {} ; INT @granularity ; NOW ; SUB ; { COMPARE ; LE ; IF { PUSH string "twaps.already observed this period" ; FAILWITH } {} } ; SWAP ; DUP 2 ; UPDATE 23 ; DUP 2 ; PUSH nat 1 ; ADD ; DUP ; SELF_ADDRESS ; UNIT ; VIEW "unit.shortMaxIndex" nat ; IF_NONE { PUSH string "twaps.view failed 550" ; FAILWITH } {} ; RENAME @short_max_index ; { COMPARE ; LE ; IF { DROP ; PUSH nat 0 } {} } ; UPDATE 29 ; DUP ; GET 5 ; DIG 2 ; SELF_ADDRESS ; UNIT ; VIEW "unit.shortTWAP" (pair timestamp nat) ; IF_NONE { PUSH string "twaps.view failed 557" ; FAILWITH } {} ; RENAME @current_observation ; SOME ; SWAP ; UPDATE ; UPDATE 5 ; NIL operation } } ; PAIR } ; view "nat.priceObservation" nat (pair timestamp nat nat) { UNPAIR @% ; DIP { GET 1 } ; SELF_ADDRESS ; UNIT ; VIEW "unit.priceMaxIndex" nat ; IF_NONE { PUSH string "twaps.view failed 90" ; FAILWITH } {} ; RENAME @price_max_index ; SWAP ; EDIV ; IF_NONE { PUSH string "twaps.division by zero 92" ; FAILWITH } {} ; CDR @remainder ; GET ; IF_NONE { PUSH string "twaps.invalid observation index 97" ; FAILWITH } {} } ; view "nat.shortestObservation" nat (pair timestamp nat) { UNPAIR @% ; DIP { GET 3 } ; SELF_ADDRESS ; UNIT ; VIEW "unit.shortestMaxIndex" nat ; IF_NONE { PUSH string "twaps.view failed 108" ; FAILWITH } {} ; RENAME @shortest_max_index ; SWAP ; EDIV ; IF_NONE { PUSH string "twaps.division by zero 110" ; FAILWITH } {} ; CDR @remainder ; GET ; IF_NONE { PUSH string "twaps.invalid observation index 114" ; FAILWITH } {} } ; view "nat.shortObservation" nat (pair timestamp nat) { UNPAIR @% ; DIP { GET 5 } ; SELF_ADDRESS ; UNIT ; VIEW "unit.shortMaxIndex" nat ; IF_NONE { PUSH string "twaps.view failed 125" ; FAILWITH } {} ; RENAME @short_max_index ; SWAP ; EDIV ; IF_NONE { PUSH string "twaps.division by zero 127" ; FAILWITH } {} ; CDR @remainder ; GET ; IF_NONE { PUSH string "twaps.invalid observation index 131" ; FAILWITH } {} } ; view "unit.priceMaxIndex" unit nat { DROP ; SELF_ADDRESS ; UNIT ; VIEW "unit.granularity" nat ; IF_NONE { PUSH string "twaps.view failed 140" ; FAILWITH } {} ; RENAME @granularity ; SELF_ADDRESS ; UNIT ; VIEW "unit.shortestRecordPeriod" nat ; IF_NONE { PUSH string "twaps.view failed 142" ; FAILWITH } {} ; RENAME @shortest_record_period ; EDIV ; IF_NONE { PUSH string "twaps.division by zero 144" ; FAILWITH } {} ; CAR @index } ; view "unit.shortestMaxIndex" unit nat { DROP ; SELF_ADDRESS ; UNIT ; VIEW "unit.shortestRecordPeriod" nat ; IF_NONE { PUSH string "twaps.view failed 150" ; FAILWITH } {} ; RENAME @granularity ; SELF_ADDRESS ; UNIT ; VIEW "unit.shortRecordPeriod" nat ; IF_NONE { PUSH string "twaps.view failed 152" ; FAILWITH } {} ; RENAME @short_record_period ; EDIV ; IF_NONE { PUSH string "twaps.division by zero 144" ; FAILWITH } {} ; CAR @index } ; view "unit.shortMaxIndex" unit nat { DROP ; SELF_ADDRESS ; UNIT ; VIEW "unit.longGranularity" nat ; IF_NONE { PUSH string "twaps.view failed 160" ; FAILWITH } {} ; RENAME @long_granularity ; SELF_ADDRESS ; UNIT ; VIEW "unit.longRecordPeriod" nat ; IF_NONE { PUSH string "twaps.view failed 162" ; FAILWITH } {} ; RENAME @long_record_period ; EDIV ; IF_NONE { PUSH string "twaps.division by zero 144" ; FAILWITH } {} ; CAR @index } ; view "unit.granularity" unit nat { CDR ; GET 7 } ; view "unit.shortestRecordPeriod" unit nat { CDR ; GET 9 } ; view "unit.shortestWindow" unit nat { CDR ; GET 11 } ; view "unit.shortRecordPeriod" unit nat { CDR ; GET 13 } ; view "unit.longRecordPeriod" unit nat { CDR ; GET 15 } ; view "unit.longGranularity" unit nat { CDR ; GET 17 } ; view "unit.shortestTwapEnd" unit nat { CDR ; GET 19 } ; view "unit.shortTwapEnd" unit nat { CDR ; GET 21 } ; view "unit.longTwapEnd" unit nat { CDR ; GET 23 } ; view "unit.shortestTwapStart" unit nat { CDR ; GET 25 } ; view "unit.shortTwapStart" unit nat { CDR ; GET 27 } ; view "unit.longTwapStart" unit nat { CDR ; GET 29 } ; view "unit.dispatcher" unit address { CDR ; GET 30 } ; view "unit.cumulativePricesWrapper" unit address { DROP ; SELF_ADDRESS ; UNIT ; VIEW "unit.dispatcher" address ; IF_NONE { PUSH string "twaps.view failed 248" ; FAILWITH } {} ; RENAME @dispatcher ; PUSH string "quipu_cumulative_wrapper" ; VIEW "string.getAddress" address ; IF_NONE { PUSH string "twaps.view failed 250" ; FAILWITH } {} ; RENAME @wrapper } ; view "unit.baseTokenCumulativePrices" unit (pair timestamp (nat %token_a_price_cml) (nat %token_b_price_cml)) { DROP ; SELF_ADDRESS ; UNIT ; VIEW "unit.cumulativePricesWrapper" address ; IF_NONE { PUSH string "twaps.view failed 259" ; FAILWITH } {} ; RENAME @wrapper ; UNIT ; VIEW "unit.freshCumulativePrices" (pair timestamp nat nat) ; IF_NONE { PUSH string "twaps.view failed 261" ; FAILWITH } {} ; RENAME @price_data } ; view "timestamp.priceObsIndex" timestamp nat { CAR ; PUSH timestamp 0 ; SWAP ; SUB ; SELF_ADDRESS ; UNIT ; VIEW "unit.shortestRecordPeriod" nat ; IF_NONE { PUSH string "twaps.view failed 272" ; FAILWITH } {} ; RENAME @shortest_record_period ; SWAP ; EDIV ; IF_NONE { PUSH string "twaps.division by zero 274" ; FAILWITH } {} ; CDR @remainder ; SELF_ADDRESS ; UNIT ; VIEW "unit.granularity" nat ; IF_NONE { PUSH string "twaps.view failed 275" ; FAILWITH } {} ; RENAME @granularity ; SWAP ; EDIV ; IF_NONE { PUSH string "twaps.division by zero 277" ; FAILWITH } {} ; CAR @index } ; view "timestamp.shortestObsIndex" timestamp nat { CAR ; PUSH timestamp 0 ; SWAP ; SUB ; SELF_ADDRESS ; UNIT ; VIEW "unit.shortRecordPeriod" nat ; IF_NONE { PUSH string "twaps.view failed 287" ; FAILWITH } {} ; RENAME @short_record_period ; SWAP ; EDIV ; IF_NONE { PUSH string "twaps.division by zero 289" ; FAILWITH } {} ; CDR @remainder ; SELF_ADDRESS ; UNIT ; VIEW "unit.shortestRecordPeriod" nat ; IF_NONE { PUSH string "twaps.view failed 290" ; FAILWITH } {} ; RENAME @shortest_record_period ; SWAP ; EDIV ; IF_NONE { PUSH string "twaps.division by zero 292" ; FAILWITH } {} ; CAR @index } ; view "timestamp.shortObsIndex" timestamp nat { CAR ; PUSH timestamp 0 ; SWAP ; SUB ; SELF_ADDRESS ; UNIT ; VIEW "unit.longRecordPeriod" nat ; IF_NONE { PUSH string "twaps.view failed 302" ; FAILWITH } {} ; RENAME @long_record_period ; SWAP ; EDIV ; IF_NONE { PUSH string "twaps.division by zero 304" ; FAILWITH } {} ; CDR @remainder ; SELF_ADDRESS ; UNIT ; VIEW "unit.shortRecordPeriod" nat ; IF_NONE { PUSH string "twaps.view failed 305" ; FAILWITH } {} ; RENAME @short_record_period ; SWAP ; EDIV ; IF_NONE { PUSH string "twaps.division by zero 307" ; FAILWITH } {} ; CAR @index } ; view "unit.shortestTWAP" unit (pair timestamp nat) { DROP ; SELF_ADDRESS ; UNIT ; VIEW "unit.shortestTwapEnd" nat ; IF_NONE { PUSH string "twaps.view failed 318" ; FAILWITH } {} ; RENAME @end_index ; SELF_ADDRESS ; SWAP ; VIEW "nat.priceObservation" (pair timestamp nat nat) ; IF_NONE { PUSH string "twaps.view failed 320" ; FAILWITH } {} ; RENAME @end_observation ; SELF_ADDRESS ; UNIT ; VIEW "unit.shortestTwapStart" nat ; IF_NONE { PUSH string "twaps.view failed 340" ; FAILWITH } {} ; RENAME @start_index ; SELF_ADDRESS ; SWAP ; VIEW "nat.priceObservation" (pair timestamp nat nat) ; IF_NONE { PUSH string "twaps.view failed 342" ; FAILWITH } {} ; RENAME @start_observation ; DUP ; CAR @start_timestamp ; SELF_ADDRESS ; UNIT ; VIEW "unit.granularity" nat ; IF_NONE { PUSH string "twaps.view failed 346" ; FAILWITH } {} ; INT @granularity ; SELF_ADDRESS ; UNIT ; VIEW "unit.shortestWindow" nat ; IF_NONE { PUSH string "twaps.view failed 348" ; FAILWITH } {} ; INT @shortest_window ; DUP 5 ; CAR @end_timestamp ; SUB ; SUB ; { COMPARE ; GT ; IF { PUSH string "twaps.shortest TWAP: stale start observation" ; FAILWITH } {} } ; DUP ; CAR @start_timestamp ; DUP 3 ; CAR @end_timestamp ; SUB @time_elapsed ; ISNAT ; IF_NONE { PUSH string "twaps.negative time elapsed" ; FAILWITH } {} ; SWAP ; GET @start_price 4 ; DUP 3 ; GET @end_price 4 ; SUB ; ISNAT ; IF_NONE { PUSH string "twaps.negative cumulative price" ; FAILWITH } {} ; EDIV ; IF_NONE { PUSH string "twaps.division by zero 360" ; FAILWITH } {} ; CAR @twap ; PUSH nat 1000000000000 ; SWAP ; EDIV ; IF_NONE { PUSH string "twaps.division by zero 366" ; FAILWITH } {} ; CAR @twap ; SWAP ; CAR @twap_timestamp ; PAIR } ; view "unit.shortTWAP" unit (pair timestamp nat) { DROP ; SELF_ADDRESS ; UNIT ; VIEW "unit.shortTwapEnd" nat ; IF_NONE { PUSH string "twaps.view failed 372" ; FAILWITH } {} ; RENAME @end_index ; SELF_ADDRESS ; SWAP ; VIEW "nat.shortestObservation" (pair timestamp nat) ; IF_NONE { PUSH string "twaps.view failed 374" ; FAILWITH } {} ; RENAME @end_observation ; SELF_ADDRESS ; UNIT ; VIEW "unit.shortTwapStart" nat ; IF_NONE { PUSH string "twaps.view failed 380" ; FAILWITH } {} ; RENAME @start_index ; SELF_ADDRESS ; SWAP ; VIEW "nat.shortestObservation" (pair timestamp nat) ; IF_NONE { PUSH string "twaps.view failed 382" ; FAILWITH } {} ; RENAME @start_observation ; DUP ; CAR @start_timestamp ; SELF_ADDRESS ; UNIT ; VIEW "unit.shortestRecordPeriod" nat ; IF_NONE { PUSH string "twaps.view failed 390" ; FAILWITH } {} ; INT @granularity ; SELF_ADDRESS ; UNIT ; VIEW "unit.shortRecordPeriod" nat ; IF_NONE { PUSH string "twaps.view failed 392" ; FAILWITH } {} ; INT @short_record_period ; DUP 5 ; CAR @end_timestamp ; SUB ; SUB ; { COMPARE ; GT ; IF { PUSH string "short TWAP: stale start observation" ; FAILWITH } {} } ; CDR @start_price ; DUP 2 ; CDR @end_price ; ADD ; PUSH nat 2 ; SWAP ; EDIV ; IF_NONE { PUSH string "twaps.division by zero 400" ; FAILWITH } {} ; CAR @twap ; SWAP ; CAR @twap_timestamp ; PAIR } ; view "unit.longTWAP" unit (pair timestamp nat) { DROP ; SELF_ADDRESS ; UNIT ; VIEW "unit.longTwapEnd" nat ; IF_NONE { PUSH string "twaps.view failed 410" ; FAILWITH } {} ; RENAME @end_index ; SELF_ADDRESS ; SWAP ; VIEW "nat.shortObservation" (pair timestamp nat) ; IF_NONE { PUSH string "twaps.view failed 412" ; FAILWITH } {} ; RENAME @end_observation ; SELF_ADDRESS ; UNIT ; VIEW "unit.longTwapStart" nat ; IF_NONE { PUSH string "twaps.view failed 418" ; FAILWITH } {} ; RENAME @start_index ; SELF_ADDRESS ; SWAP ; VIEW "nat.shortObservation" (pair timestamp nat) ; IF_NONE { PUSH string "twaps.view failed 420" ; FAILWITH } {} ; RENAME @start_observation ; DUP ; CAR @start_timestamp ; SELF_ADDRESS ; UNIT ; VIEW "unit.longGranularity" nat ; IF_NONE { PUSH string "twaps.view failed 428" ; FAILWITH } {} ; INT @granularity ; SELF_ADDRESS ; UNIT ; VIEW "unit.longRecordPeriod" nat ; IF_NONE { PUSH string "twaps.view failed 430" ; FAILWITH } {} ; INT @long_record_period ; DUP 5 ; CAR @end_timestamp ; SUB ; SUB ; { COMPARE ; GT ; IF { PUSH string "long TWAP: stale start observation" ; FAILWITH } {} } ; CDR @start_price ; DUP 2 ; CDR @end_price ; ADD ; PUSH nat 2 ; SWAP ; EDIV ; IF_NONE { PUSH string "twaps.division by zero 438" ; FAILWITH } {} ; CAR @twap ; SWAP ; CAR @twap_timestamp ; PAIR } }