27 lines
1.4 KiB
Plaintext
27 lines
1.4 KiB
Plaintext
|
parameter (or (pair string (pair tez (contract unit unit))) nat);
|
||
|
return unit;
|
||
|
storage (pair (contract nat (pair nat bool)) (pair nat (map nat (pair string (pair tez (contract unit unit))))));
|
||
|
code { DUP; DIP{CDR}; CAR; # Get the input while preserving the output
|
||
|
IF_LEFT { DIP{ DUP; CAR; SWAP; CDR; DUP; CAR; DIP{CDR}};
|
||
|
SOME; SWAP; DUP; DIP{UPDATE}; # Add the element to the map
|
||
|
PUSH nat 1; ADD; PAIR; SWAP; # Add 1 to the index
|
||
|
PAIR; UNIT; PAIR} # Cleanup and finish
|
||
|
# Check our other contract to see if the transaction is allowed
|
||
|
{ DIP{DUP; CAR}; PUSH tez "0.00"; SWAP; TRANSFER_TOKENS;
|
||
|
# Arrange the stack
|
||
|
DUP; CDR;
|
||
|
IF { CAR; DUP; DIIP{DUP; CDDR; DUP};
|
||
|
DIP{ GET; # Get the value of the data
|
||
|
IF_NONE {FAIL} {}; # This should not happen
|
||
|
SWAP;
|
||
|
NONE (pair string (pair tez (contract unit unit)))};
|
||
|
UPDATE; # Delete the element
|
||
|
SWAP;
|
||
|
# More stack arranging
|
||
|
DIP{ SWAP; DUP; CAR; DIP{CDR}};
|
||
|
DIP{DIP{CAR; PAIR}; PAIR};
|
||
|
DUP; CDAR;
|
||
|
DIP{CDDR}; UNIT; TRANSFER_TOKENS; # Make the transfer
|
||
|
PAIR}
|
||
|
{ FAIL }}}
|