> For the complete documentation index, see [llms.txt](https://luckydegen.gitbook.io/community-launchpad/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://luckydegen.gitbook.io/community-launchpad/api-reference/contracts/dealfundraising.md).

# DealFundraising

Contract behaviors:

* `purchase(dealUuid,amount) - can be called multiple times to add to previous value`
* `refund(dealUuid) - only when refunds are allowed`

Contract properties:

* `mapping(string => mapping(address => uint256)) dealsWalletsDeposits`
* `mapping(string => address[]) public dealsWallets; //can be multiple times!`
* `mapping(string => uint256) public dealsDeposits`
* `mapping(string => uint256) public dealsWithdrawals`
* `mapping(string => uint256) public dealsLastChangeAt`
* `lastChangeAt`

Contract events:

* `event WalletPurchased(string dealUuid, address wallet, uint256 amount);`
* `emit WalletRefunded(dealUuid, msg.sender, depositedAmount);`

Roles:&#x20;

* `DEFAULT_ADMIN_ROLE`
* `EDITOR_ROLE`

Admin-only functions:

* `withdrawFundraisedTokens(DEFAULT_ADMIN_ROLE) - withdraw money`

### Importing original deals

To be able to import original deals, contract contains method `importOldDealPurchase`. This method allows to configure deal purchases without transferring real token. This feature is enabled only during deployment and after that it is revoked by `revokeImportingOldDealPurchases`. After revoking, there is no way how to enable it again and there is no way how to create deal purchases without money transferring.

* `importOldDealPurchase(``EDITOR_ROLE) - import original deals`
* revokeImportingOldDealPurchases() - revoke importing feature
* allowedImportingOldDeals - info about importing enabled

### CA

```solidity
interface IDealFundrising {
    //register interest in specific deal (can be called multiple times)
    function purchase(string memory dealUuid, uint256 amount) external;

    //refund to caller from specific deal (if refund is allowed)
    function refund(string memory dealUuid) external;

    //withdraw colleted tokens
    function withdrawFundraisedTokens(
        string memory dealUuid,
        address withdrawDestination
    ) external;

    //import original deals before platform
    function importOldDealPurchase(
        string memory dealUuid,
        address[] memory recipients,
        uint256[] memory amounts
    ) public onlyRole(DEFAULT_ADMIN_ROLE);
}


```
