-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDefisale.sol
More file actions
110 lines (93 loc) · 2.7 KB
/
Defisale.sol
File metadata and controls
110 lines (93 loc) · 2.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
//SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.10;
import "./AbstractSaleRound.sol";
contract PrivateSale is AbstractSale {
using SafeERC20 for IERC20;
/**
* @dev See {AbstractSale-constructor}
*/
constructor(
uint256 amount,
address tokenAddr,
uint256 vesting,
uint256 percentDistributedImmediately,
uint256 pricePerToken,
address[] memory availableCurrencies,
address adapterAddr,
uint256[] memory contribuitionLimits,
uint256 periodDuration,
uint256 tokenGenerationEvent,
uint256[] memory percentReward
) AbstractSale(
amount,
tokenAddr,
vesting,
percentDistributedImmediately,
pricePerToken,
availableCurrencies,
adapterAddr,
contribuitionLimits,
periodDuration,
tokenGenerationEvent,
percentReward
) Pausable() {}
/**
* @dev See {ISaleRound-buyMGB}.
*/
function buyMGB(address referrer)
external
payable
isWhiteList(msg.sender, referrer)
isFinish
whenNotPaused
{
uint256 amountMATIC = msg.value;
(uint256 amountUSD, uint8 decimals) = _getPrice(amountMATIC);
_validateUsdAmount(amountUSD, decimals);
_setReferrals(referrer);
uint256 feeToReferrals = _distributeTheFee(msg.sender, amountMATIC, address(0));
uint256 amountMGB = _buyMGB(amountUSD, _stablecoin);
_receiveMATIC += amountMATIC;
emit BuyMGBOfMATIC(
msg.sender,
amountMGB,
amountMATIC,
amountUSD,
_stablecoin,
feeToReferrals
);
}
/**
* @dev See {ISaleRound-buyMGB}.
*/
function buyMGB(
address usdAddr,
uint256 usdAmount,
address referrer
)
external
isWhiteList(msg.sender, referrer)
isAvailableCurrency(usdAddr)
isFinish
whenNotPaused
{
uint8 decimals = IERC20Metadata(usdAddr).decimals();
_validateUsdAmount(usdAmount, decimals);
_setReferrals(referrer);
IERC20(usdAddr).safeTransferFrom(
msg.sender,
address(this),
usdAmount
);
uint256 feeToReferrals = _distributeTheFee(msg.sender, usdAmount, usdAddr);
uint256 amountMGB = _buyMGB(usdAmount, usdAddr);
_receiveUSD += usdAmount;
emit BuyMGBOfUSD(
msg.sender,
amountMGB,
usdAmount,
usdAddr,
feeToReferrals
);
}
}