x
359
{ parameter (or (or (address %add_bootloader) (or (pair %execute_sale (bytes %sale_id) (pair (address %buyer) (pair (nat %amount) (bytes %extra)))) (address %remove_bootloader))) (or (or (address %set_admin) (nat %set_platform_fee_bps)) (or (pair %set_sale (address %bootloader) (pair (nat %generator_id) (pair %sale_config (option %max_per_wallet nat) (pair (bool %paused) (pair (mutez %price) (option %start_time timestamp)))))) (address %set_treasury)))) ; storage (pair (address %administrator) (pair (big_map %bootloaders address unit) (pair (big_map %mints (pair (pair address nat) address) nat) (pair (nat %platform_fee_bps) (pair (big_map %sales (pair address nat) (pair (address %creator) (pair %sale_config (option %max_per_wallet nat) (pair (bool %paused) (pair (mutez %price) (option %start_time timestamp)))))) (address %treasury)))))) ; code { LAMBDA (pair unit (pair address (pair (big_map address unit) (pair (big_map (pair (pair address nat) address) nat) (pair nat (pair (big_map (pair address nat) (pair address (pair (option nat) (pair bool (pair mutez (option timestamp)))))) address)))))) (pair unit (pair address (pair (big_map address unit) (pair (big_map (pair (pair address nat) address) nat) (pair nat (pair (big_map (pair address nat) (pair address (pair (option nat) (pair bool (pair mutez (option timestamp)))))) address)))))) { CDR ; DUP ; CAR ; SENDER ; COMPARE ; EQ ; IF {} { PUSH string "ONLY_ADMIN" ; FAILWITH } ; UNIT ; PAIR } ; SWAP ; UNPAIR ; IF_LEFT { IF_LEFT { DIG 2 ; UNIT ; SWAP ; DIG 3 ; DIG 2 ; PAIR ; EXEC ; CDR ; DUP ; GET 3 ; PUSH (option unit) (Some Unit) ; DIG 3 ; UPDATE ; UPDATE 3 ; NIL operation } { IF_LEFT { PUSH nat 0 ; DUP 2 ; GET 5 ; COMPARE ; GT ; IF {} { PUSH string "ZERO_AMOUNT" ; FAILWITH } ; PUSH bytes 0x ; DUP 2 ; GET 6 ; COMPARE ; EQ ; IF {} { PUSH string "UNSUPPORTED_EXTRA" ; FAILWITH } ; DUP ; CAR ; UNPACK (pair address nat) ; IF_NONE { PUSH string "INVALID_SALE_ID" ; FAILWITH } {} ; DUP ; UNPAIR ; SENDER ; DUP 2 ; COMPARE ; EQ ; IF {} { PUSH string "SALE_BOOTLOADER_MISMATCH" ; FAILWITH } ; DUP 2 ; SENDER ; PAIR ; DUP 6 ; GET 9 ; DUP 2 ; GET ; IF_NONE { PUSH string "INVALID_SALE_ID" ; FAILWITH } {} ; DUP ; CDR ; DUP ; GET 3 ; IF { PUSH string "SALE_PAUSED" ; FAILWITH } {} ; DUP 7 ; GET 5 ; DUP 2 ; GET 5 ; MUL ; AMOUNT ; COMPARE ; EQ ; IF {} { PUSH string "PRICE_MISMATCH" ; FAILWITH } ; DUP ; GET 6 ; IF_NONE {} { NOW ; COMPARE ; GE ; IF {} { PUSH string "SALE_NOT_STARTED" ; FAILWITH } } ; DUP 7 ; GET 3 ; DUP 4 ; PAIR ; DUP 9 ; GET 5 ; DUP 2 ; GET ; IF_NONE { PUSH nat 0 } {} ; DUP 3 ; CAR ; IF_NONE { DIG 2 ; DROP } { DIG 3 ; DROP ; DUP 9 ; GET 5 ; DUP 3 ; ADD ; COMPARE ; LE ; IF {} { PUSH string "EXCEEDS_MAX_PER_WALLET" ; FAILWITH } } ; DIG 8 ; DUP ; GET 5 ; DUP 10 ; GET 5 ; DIG 3 ; ADD ; SOME ; DIG 3 ; UPDATE ; UPDATE 5 ; DUG 6 ; PUSH nat 10000 ; DUP 8 ; GET 7 ; AMOUNT ; MUL ; EDIV ; IF_NONE { PUSH int 148 ; FAILWITH } {} ; CAR ; DUP ; AMOUNT ; SUB_MUTEZ ; IF_NONE { PUSH int 151 ; FAILWITH } {} ; PUSH mutez 0 ; DUP 3 ; COMPARE ; GT ; IF { NIL operation ; DUP 10 ; GET 10 ; CONTRACT unit ; IF_NONE { PUSH int 154 ; FAILWITH } {} ; DIG 3 ; UNIT ; TRANSFER_TOKENS ; CONS } { SWAP ; DROP ; NIL operation } ; PUSH mutez 0 ; DUP 3 ; COMPARE ; GT ; IF { DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 4 ; DROP ; DIG 2 ; CAR ; CONTRACT unit ; IF_NONE { PUSH int 156 ; FAILWITH } {} ; DIG 2 ; UNIT ; TRANSFER_TOKENS ; CONS } { SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; DIG 2 ; DROP } } { DIG 2 ; UNIT ; SWAP ; DIG 3 ; DIG 2 ; PAIR ; EXEC ; CDR ; DUP ; GET 3 ; NONE unit ; DIG 3 ; UPDATE ; UPDATE 3 ; NIL operation } } } { IF_LEFT { IF_LEFT { DIG 2 ; UNIT ; SWAP ; DIG 3 ; DIG 2 ; PAIR ; EXEC ; CDR ; SWAP ; UPDATE 1 } { DIG 2 ; UNIT ; SWAP ; DIG 3 ; DIG 2 ; PAIR ; EXEC ; CDR ; SWAP ; PUSH nat 10000 ; DUP 2 ; COMPARE ; LE ; IF {} { PUSH string "BPS_TOO_HIGH" ; FAILWITH } ; UPDATE 7 } } { IF_LEFT { DUP 2 ; GET 3 ; DUP 2 ; CAR ; MEM ; IF {} { PUSH string "INVALID_BOOTLOADER" ; FAILWITH } ; DUP ; CAR ; DUP 2 ; GET 3 ; VIEW "get_generator_author" address ; IF_NONE { PUSH string "INVALID_BOOTLOADER" ; FAILWITH } {} ; DUP ; SENDER ; COMPARE ; EQ ; IF {} { PUSH string "ONLY_CREATOR" ; FAILWITH } ; DUP 2 ; GET 3 ; DUP 3 ; CAR ; PAIR ; DUP 4 ; GET 9 ; DUP 2 ; GET ; IF_NONE { DIG 4 ; DROP } { DIG 5 ; DROP ; CAR ; SENDER ; COMPARE ; EQ ; IF {} { PUSH string "ONLY_CREATOR" ; FAILWITH } } ; DIG 3 ; DUP ; GET 9 ; DIG 4 ; GET 4 ; DIG 4 ; PAIR ; SOME ; DIG 3 ; UPDATE ; UPDATE 9 } { DIG 2 ; UNIT ; SWAP ; DIG 3 ; DIG 2 ; PAIR ; EXEC ; CDR ; SWAP ; UPDATE 10 } } ; NIL operation } ; NIL operation ; SWAP ; ITER { CONS } ; PAIR } ; view "is_sale_configured" (pair (address %bootloader) (bytes %sale_id)) bool { UNPAIR ; PUSH bool False ; DUP 2 ; CDR ; UNPACK (pair address nat) ; DUP ; IF_NONE { DROP ; SWAP ; DROP ; SWAP ; DROP } { DIG 2 ; DROP ; DUP ; UNPAIR ; DUP 5 ; CAR ; COMPARE ; EQ ; IF { SWAP ; DROP ; SWAP ; DROP ; DIG 2 ; GET 9 ; SWAP ; DIG 2 ; CAR ; PAIR ; MEM } { DROP 5 ; PUSH bool False } } } ; view "get_sale" (pair (address %bootloader) (nat %generator_id)) (pair (address %creator) (pair %sale_config (option %max_per_wallet nat) (pair (bool %paused) (pair (mutez %price) (option %start_time timestamp))))) { UNPAIR ; SWAP ; GET 9 ; SWAP ; GET ; IF_NONE { PUSH string "INVALID_SALE_ID" ; FAILWITH } {} } }