# (pair signed_weather_data actual_level) parameter (pair (signature @sig) (nat @nat)); # (pair (under_key over_key) (pair weather_service_key (pair rain_level days_in_future))) storage (pair (pair (contract @lt unit unit) (contract @geq unit unit)) (pair nat key)); return unit; code { DUP; DUP; CAR; MAP_CDR{H}; SWAP; CDDDR; CHECK_SIGNATURE; # Check if the data has been correctly signed ASSERT; # If signature is not correct, end the execution DUP; DUP; DUP; DIIIP{CDR}; # Place storage type on bottom of stack DIIP{CDAR}; # Place contracts below numbers DIP{CADR}; # Get actual rain CDDAR; # Get rain threshold CMPLT; IF {CAR @lt; ANNOT @winner} {CDR @geq; ANNOT @winner}; # Select contract to receive tokens BALANCE; UNIT; TRANSFER_TOKENS; # Setup and execute transfer PAIR }; # Save storage