@@ -3,16 +3,22 @@ pragma solidity 0.8.28;
33
44import {SafeERC20} from "openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol " ;
55import {IERC20 } from "openzeppelin-contracts/contracts/token/ERC20/IERC20.sol " ;
6- import {
7- VRFV2PlusWrapperConsumerBase
8- } from "@chainlink-contracts-1.2.0/src/v0.8/vrf/dev/VRFV2PlusWrapperConsumerBase.sol " ;
9-
6+ import {VRFV2PlusWrapperConsumerBaseUpgradeable} from "./VRFV2PlusWrapperConsumerBase.sol " ;
107import {Math} from "openzeppelin-contracts/contracts/utils/math/Math.sol " ;
118import {ILemonJet} from "./interfaces/ILemonJet.sol " ;
12- import {Vault } from "./Vault .sol " ;
9+ import {VaultUpgradeable } from "./VaultUpgradeable .sol " ;
1310import {Referral} from "./Referral.sol " ;
14-
15- contract LemonJet is ILemonJet , Referral , Vault , VRFV2PlusWrapperConsumerBase {
11+ import {OwnableUpgradeable} from "openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol " ;
12+ import {UUPSUpgradeable} from "openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol " ;
13+
14+ contract LemonJetUpgradeable is
15+ ILemonJet ,
16+ Referral ,
17+ VaultUpgradeable ,
18+ VRFV2PlusWrapperConsumerBaseUpgradeable ,
19+ OwnableUpgradeable ,
20+ UUPSUpgradeable
21+ {
1622 using SafeERC20 for IERC20 ;
1723
1824 uint8 private constant STARTED = 1 ;
@@ -30,18 +36,27 @@ contract LemonJet is ILemonJet, Referral, Vault, VRFV2PlusWrapperConsumerBase {
3036 uint8 status; // 0, 1, 2
3137 }
3238
33- constructor (
39+ /// @custom:oz-upgrades-unsafe-allow constructor
40+ constructor () {
41+ _disableInitializers ();
42+ }
43+
44+ function initialize (
3445 // VRF Wrapper 2.5 for Direct Funding
3546 address wrapperAddress ,
3647 // EOA which receives a fee
3748 address _reserveFund ,
3849 // ERC20 token for ERC4626 Vault
39- address _asset ,
50+ IERC20 _asset ,
4051 // Vault shares token name
4152 string memory _name ,
4253 // Vault shares token symbol
4354 string memory _symbol
44- ) VRFV2PlusWrapperConsumerBase (wrapperAddress) Vault (_asset, _reserveFund, _name, _symbol) {}
55+ ) public initializer {
56+ VRFV2PlusWrapperConsumerBaseUpgradeable.initialize (wrapperAddress);
57+ VaultUpgradeable.initialize (_asset, _reserveFund, _name, _symbol);
58+ __Ownable_init (msg .sender );
59+ }
4560
4661 function play (uint256 bet , uint32 coef , address referrer ) external payable {
4762 referrer = _setReferrerIfNotExists (referrer);
@@ -112,7 +127,7 @@ contract LemonJet is ILemonJet, Referral, Vault, VRFV2PlusWrapperConsumerBase {
112127 // check if a player has won
113128 if (randomNumber <= gameThreshold) {
114129 /**
115- * @dev See {Vault -_payoutWin}.
130+ * @dev See {VaultUpgradeable -_payoutWin}.
116131 */
117132 _payoutWin (player, payout);
118133 } else {
@@ -153,4 +168,7 @@ contract LemonJet is ILemonJet, Referral, Vault, VRFV2PlusWrapperConsumerBase {
153168 function claimNativeBalance () external {
154169 payable (reserveFund).transfer (address (this ).balance);
155170 }
171+
172+ /// @dev Required by UUPSUpgradeable - only owner can upgrade
173+ function _authorizeUpgrade (address newImplementation ) internal virtual override onlyOwner {}
156174}
0 commit comments