### Address DEV - 0x5B02caBBF2a291E4F08ebF7D29FeF242B1495554 ### Address PROD - 0xbf2b79Ca4Cb9bE4d7976580709c95da3b6a7b7a5 ### Public DropManager Methods: #### Write methods * createEmptyDrop() * attachNftToDropEvent() * attachNftArrToDropEvent() * detachNftFromDropEventByIndex() * detachNftFromDropEventById() * editDrop() * createDropWithAttachedNfts() * initialBuy() * reserveNftInDrop() * nftPaySell() * updateReservationTime() * updateNftContract() * updateTransferManager() * getAvailableNft() * getNftIds() * getDropReservations() * getDropData() * getDropReservationByNftId() * updateReservationTime() * updateReservations() --- ### createEmptyDrop() ``` createEmptyDrop(EmptyDropDTO DropDTO) external onlyRole(OPERATOR_ROLE) dropNotExists(DropDTO.dropId) ``` > Could be called only by ***OPERATOR***. Function that creates "empty" *Drop* object. *Drop* without assosiated NFT's token. #### Parameters > Drop with *dropId* should not exist. ``` EmptyDropDTO = { uint256 dropId; uint256 releaseStartDate; uint256 releaseEndDate; uint256 nftAmountAllowedToBuy; } ``` **dropId** - int value that identifies *Drop* on the Blockchain. **releaseStartDate** - timestamp in seconds for start selling period. **releaseEndDate** - timestamp in seconds for end selling period. **nftAmountAllowedToBuy** - max number of NFT's that could be sold to one wallet. --- ### attachNftToDropEvent() ``` attachNftToDropEvent(uint256 dropId, uint256 _nftId) external onlyRole(OPERATOR_ROLE) dropExists(dropId) ``` > Could be called only by ***OPERATOR***. Function that attaches NFT to specific *dropId*. Throw an error if NFT has been already attached. #### Parameters > Drop with *dropId* should exist. **dropId** - int value that identifies *Drop* on the Blockchain. **nftId** - int value that identifies NFT on the Blockchain. --- ### attachNftArrToDropEvent() ``` attachNftArrToDropEvent(uint256 dropId, uint256[] calldata nftIdArr) external onlyRole(OPERATOR_ROLE) dropExists(dropId) nftsNotAttached(nftIdArr) ``` > Could be called only by ***OPERATOR***. Function that attaches NFT array to specific *dropId*. Throw an error if any NFT has been already attached. #### Parameters > Drop with *dropId* should exist. > NFT's should not be attached. **dropId** - int value that identifies *Drop* on the Blockchain. **nftIdArr** - int array that contains of NFT id's from the Blockchain. --- ### detachNftFromDropEventByIndex() ``` detachNftFromDropEventByIndex(uint256 dropId, uint256 index) external onlyRole(OPERATOR_ROLE) dropExists(dropId) ``` > Could be called only by ***OPERATOR***. Function that detaches NFT from the Drop by *index* value of the Drop's internal *nftIdList* array. #### Parameters > Drop with *dropId* should exist. **dropId** - int value that identifies *Drop* on the Blockchain. **index** - int value of the internal array index. #### Emitted events ``` detachedNft = { uint256 dropId, uint256 detachedNft } ``` **dropId** - int value that identifies *Drop* on the Blockchain. **detachedNft** - int value that identifies NFT on the Blockchain. --- ### detachNftFromDropEventById() ``` detachNftFromDropEventById(uint256 dropId, uint256 _nftId) external onlyRole(OPERATOR_ROLE) dropExists(dropId) ``` > Could be called only by ***OPERATOR***. Function that detaches NFT from the Drop by *_nftId* value. #### Parameters > Drop with *dropId* should exist. **dropId** - int value that identifies *Drop* on the Blockchain. **nftId** - int value that identifies NFT on the Blockchain. #### Emitted events ``` detachedNft = { uint256 dropId, uint256 detachedNft } ``` **dropId** - int value that identifies *Drop* on the Blockchain. **detachedNft** - int value that identifies NFT on the Blockchain. --- ### editDrop() ``` editDrop(EmptyDropDTO calldata DropDTO) external onlyRole(OPERATOR_ROLE) dropExists(DropDTO.dropId) ``` > Could be called only by ***OPERATOR***. Function that updates *Drop* object. Updates **releaseStartDate**, **releaseEndDate**, **nftAmountAllowedToBuy** parameters of the *Drop*. #### Parameters > Drop with *dropId* should exist. ``` EmptyDropDTO = { uint256 dropId; uint256 releaseStartDate; uint256 releaseEndDate; uint256 nftAmountAllowedToBuy; } ``` **dropId** - int value that identifies *Drop* on the Blockchain. **releaseStartDate** - timestamp in seconds for start selling period. **releaseEndDate** - timestamp in seconds for end selling period. **nftAmountAllowedToBuy** - max number of NFT's that could be sold to one wallet. --- ### createDropWithAttachedNfts() ``` createDropWithAttachedNfts(EmptyDropDTO calldata DropDTO, uint256[] calldata nftIds) external onlyRole(OPERATOR_ROLE) dropNotExists(DropDTO.dropId) ``` > Could be called only by ***OPERATOR***. Function that creates and attach NFT's array to the Drop in one Transaction. Combine together "**createEmptyDrop**" and "**attachNftArrToDropEvent**" methods. #### Parameters > Drop with *dropId* should exist. ``` EmptyDropDTO = { uint256 dropId; uint256 releaseStartDate; uint256 releaseEndDate; uint256 nftAmountAllowedToBuy; } ``` **dropId** - int value that identifies *Drop* on the Blockchain. **releaseStartDate** - timestamp in seconds for start selling period. **releaseEndDate** - timestamp in seconds for end selling period. **nftAmountAllowedToBuy** - max number of NFT's that could be sold to one wallet. **nftIds** - NFT Id's array that will be attached to the drop. #### Emitted events ``` DropEventCreated = { uint256 dropId, uint256[] nftIds } ``` **dropId** - int value that identifies *Drop* on the Blockchain. **nftIds** - NFT Id's array that will be attached to the drop. --- ### initialBuy() ``` initialBuy(uint256 dropId, address buyer) external onlyRole(OPERATOR_ROLE) dropExists(dropId) ``` > Could be called only by ***OPERATOR***. > Updates reservations before executing. Function that sell nft from specific *Drop* to *buyer*. #### Parameters > Drop with *dropId* should exist. **dropId** - int value that identifies *Drop* on the Blockchain. **buyer** - address of the buyer's wallet. #### Emitted events ``` InitialBuyEvent = { address buyer, uint256 nftId, uint256 nftOwnerCap } ``` **buyer** - address of the buyer's wallet. **nftId** - int value that identifies NFT on the Blockchain. **nftOwnerCap** - number of buy's from this Drop. --- ### reserveNftInDrop() ``` reserveNftInDrop(uint256 dropId, address holder) external onlyRole(OPERATOR_ROLE) returns(uint256 nftId) ``` > Could be called only by ***OPERATOR***. > Updates reservations before executing. Function that puts nft into reservation for 15 mins for specific *holder*. #### Parameters > Drop with *dropId* should exist. **dropId** - int value that identifies *Drop* on the Blockchain. #### Emitted events ``` nftReserved = { uint256 reservedNftId, address holder, uint256 reservationDeadline } ``` **reservedNftId** - int value that identifies NFT on the Blockchain. **holder** - address of the holders's wallet. **reservationDeadline** - timestamp when reservation ends. #### Return value **nftId** - int value that identifies NFT on the Blockchain. --- ### nftPaySell() ``` nftPaySell(uint256 dropId, uint256 nftId) external onlyRole(OPERATOR_ROLE) returns(bool) ``` > Could be called only by ***OPERATOR***. > Updates reservations before executing. Function that transfer nft from reservation to *holder* who is setted in reservation. #### Parameters > Drop with *dropId* should exist. **dropId** - int value that identifies *Drop* on the Blockchain. **nftId** - int value that identifies NFT on the Blockchain. #### Return value **result** - bool value that identifies if nft transfer was successful. --- ### updateReservationTime() ``` updateReservationTime(uint256 _reservationTime) external onlyRole(OPERATOR_ROLE) ``` > Could be called only by ***OPERATOR***. Function that changes reservation duration. A new time window is set for the next reservations. #### Parameters **_reservationTime** - int value for the new reservation duration(in seconds). --- ### updateReservations() ``` updateReservations(uint256 dropId) external onlyRole(OPERATOR_ROLE) returns(bool) ``` > Could be called only by ***OPERATOR***. > Updates reservations before executing. Function that checks every reservation in *Drop*. Cancels reservations for NFT that are in reserve state longer than reservation Duration. #### Parameters > Drop with *dropId* should exist. **dropId** - int value that identifies *Drop* on the Blockchain. #### Return value **result** - bool value that identifies if at least one reservation was canceled. --- ### updateNftContract() ``` updateNftContract(address _nftContract) external onlyRole(OPERATOR_ROLE) ``` > Could be called only by ***OPERATOR***. Function that updates NFT contract address which is used by the DropManager. #### Parameters **nftContract** - address value of the NFT contract. --- ### updateTransferManager() ``` updateTransferManager(address _transferManager) external onlyRole(OPERATOR_ROLE) ``` > Could be called only by ***OPERATOR***. Function that updates TransferManager contract address which is used by the DropManager. #### Parameters **_transferManager** - address value of the TransferManager contract. --- ### getAvailableNft() ``` getAvailableNft(uint256 dropId) external view returns(uint availableNft) ``` > Updates reservations before executing. Function that returns a number of NFTs left in *Drop*. #### Parameters **dropId** - int value that identifies *Drop* on the Blockchain. #### Return value **availableNft** - amount of NFTs left in *Drop*. #### Emitted events ``` getAvailableNftEvent = {uint256 nftId} ``` --- ### getNftIds() ``` getNftIds(uint256 dropId) external view dropExists(dropId) returns(uint256[] memory nftIds) ``` Function that returns NFTs id array. > Updates reservations before executing. #### Parameters **dropId** - int value that identifies *Drop* on the Blockchain. #### Return value **nftIds** - array of NFTs id left in *Drop*. #### Emitted events ``` getNftIdsEvent = {uint256[] nftIds} ``` --- ### getDropData() ``` getDropData(uint256 dropId) external view dropExists(dropId) returns(uint256 _releaseStartDate, uint256 _releaseEndDate, uint256[] memory _nftIdList, Reservation[] memory _reservedNfts, uint256 _nftAmountAllowedToBuy) ``` Function that returns info about the Drop. > Updates reservations before executing. #### Parameters > Drop with *dropId* should exist. **dropId** - int value that identifies *Drop* on the Blockchain. #### Return value **releaseStartDate** - timestamp means starting sell period. **releaseEndDate** - timestamp means ending sell period. **nftIdListIds** - array of NFTs id left in *Drop*. **reservedNfts** - array of NFTs id reserved in Drop. **nftAmountAllowedToBuy** - max amount of NFTs that can be sold to one wallet. #### Emitted events ``` getDropDataEvent {uint256 _releaseStartDate, uint256 _releaseEndDate, uint256[] _nftIdList, Reservation[] _reservedNfts, uint256 _nftAmountAllowedToBuy} ``` --- ### getDropReservations() ``` getDropReservations(uint256 dropId) external view dropExists(dropId) returns(Reservation[] memory _reservedNfts) ``` Function that return array of NFTs id reserved in Drop. > Updates reservations before executing. #### Parameters > Drop with *dropId* should exist. **dropId** - int value that identifies *Drop* on the Blockchain. #### Return value **reservedNfts** - array of NFTs id reserved in Drop. #### Emitted events ``` getDropReservationsEvent = {Reservation[] _reservedNfts} ``` --- ### getDropReservationByNftId() ``` getDropReservationByNftId(uint256 dropId, uint256 nftId) external dropExists(dropId) returns(Reservation memory _reservedNft) ``` Function that returns Reservation object by NFT id and Drop id. > Updates reservations before executing. #### Parameters > Drop with *dropId* should exist. **dropId** - int value that identifies *Drop* on the Blockchain. **nftId** - int value that identifies NFT on the Blockchain. #### Return value ``` Reservation = { uint256 nftId; address holder; uint256 reservationDeadline; } ``` **nftId** - int value that identifies NFT on the Blockchain. **holder** - address of the holders's wallet. **reservationDeadline** - timestamp means end of reservation. #### Emitted events ``` getDropReservationByNftIdEvent = {Reservation _reservedNft} ```