@@ -9,37 +9,18 @@ import "@openzeppelin/contracts/access/Ownable.sol";
99import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol " ;
1010import "hardhat/console.sol " ; // for debugging
1111
12- import "./Events.sol " ;
1312import "./IFluiDex.sol " ;
1413import "./IVerifier.sol " ;
1514
1615/**
1716 * @title FluiDexDemo
1817 */
19- contract FluiDexDemo is
20- AccessControl ,
21- Events ,
22- IFluiDex ,
23- Ownable ,
24- ReentrancyGuard
25- {
18+ contract FluiDexDemo is AccessControl , IFluiDex , Ownable , ReentrancyGuard {
2619 using SafeERC20 for IERC20 ;
2720
2821 bytes32 public constant PLUGIN_ADMIN_ROLE = keccak256 ("PLUGIN_ADMIN_ROLE " );
29- bytes32 public constant TOKEN_ADMIN_ROLE = keccak256 ("TOKEN_ADMIN_ROLE " );
3022 bytes32 public constant DELEGATE_ROLE = keccak256 ("DELEGATE_ROLE " );
3123
32- enum BlockState {
33- Empty,
34- Committed,
35- Verified
36- }
37-
38- struct UserInfo {
39- address ethAddr;
40- bytes32 bjjPubkey;
41- }
42-
4324 /// hard limit for ERC20 tokens
4425 uint16 constant TOKEN_NUM_LIMIT = 65535 ;
4526 /// hard limit for users
@@ -66,10 +47,8 @@ contract FluiDexDemo is
6647 GENESIS_ROOT = _genesis_root;
6748 verifier = _verifier;
6849 _setupRole (DEFAULT_ADMIN_ROLE, msg .sender );
69- _setRoleAdmin (TOKEN_ADMIN_ROLE, DEFAULT_ADMIN_ROLE);
7050 _setRoleAdmin (PLUGIN_ADMIN_ROLE, DEFAULT_ADMIN_ROLE);
7151 _setRoleAdmin (DELEGATE_ROLE, DEFAULT_ADMIN_ROLE);
72- grantRole (TOKEN_ADMIN_ROLE, msg .sender );
7352 grantRole (PLUGIN_ADMIN_ROLE, msg .sender );
7453 grantRole (DELEGATE_ROLE, msg .sender );
7554 }
@@ -91,14 +70,13 @@ contract FluiDexDemo is
9170 * @param tokenAddr the ERC20 token address
9271 * @return the new ERC20 token tokenId
9372 */
94- function addToken (address origin , address tokenAddr )
73+ function addToken (address tokenAddr )
9574 external
9675 override
9776 nonReentrant
9877 onlyRole (DELEGATE_ROLE)
9978 returns (uint16 )
10079 {
101- require (hasRole (TOKEN_ADMIN_ROLE, origin));
10280 require (tokenAddrToId[tokenAddr] == 0 , "token existed " );
10381 tokenNum++ ;
10482 require (tokenNum < TOKEN_NUM_LIMIT, "token num limit reached " );
@@ -107,64 +85,65 @@ contract FluiDexDemo is
10785 tokenIdToAddr[tokenId] = tokenAddr;
10886 tokenAddrToId[tokenAddr] = tokenId;
10987
110- emit NewToken (origin, tokenAddr, tokenId);
11188 return tokenId;
11289 }
11390
11491 /**
11592 * @param to the L2 address (bjjPubkey) of the deposit target.
11693 */
117- function depositETH (address origin , bytes32 to )
118- external
119- payable
120- override
121- orCreateUser (origin, to)
122- onlyRole (DELEGATE_ROLE)
123- {
124- emit Deposit (ETH_ID, to, msg .value );
125- }
94+ function depositETH (bytes32 to )
95+ external
96+ payable
97+ override
98+ onlyRole (DELEGATE_ROLE)
99+ {}
126100
127101 /**
128- * @param to the L2 address (bjjPubkey) of the deposit target.
129102 * @param amount the deposit amount.
130103 */
131- function depositERC20 (
132- address origin ,
133- IERC20 token ,
134- bytes32 to ,
135- uint128 amount
136- ) external override nonReentrant tokenExist (token) orCreateUser (origin, to) {
137- uint16 tokenId = tokenAddrToId[address (token)];
104+ function depositERC20 (IERC20 token , uint256 amount )
105+ external
106+ override
107+ nonReentrant
108+ tokenExist (token)
109+ onlyRole (DELEGATE_ROLE)
110+ returns (uint16 tokenId , uint256 realAmount )
111+ {
112+ tokenId = tokenAddrToId[address (token)];
138113
139114 uint256 balanceBeforeDeposit = token.balanceOf (address (this ));
140- token.safeTransferFrom (origin , address (this ), amount);
115+ token.safeTransferFrom (msg . sender , address (this ), amount);
141116 uint256 balanceAfterDeposit = token.balanceOf (address (this ));
142- uint256 realAmount = balanceAfterDeposit - balanceBeforeDeposit;
143- emit Deposit (tokenId, to, realAmount);
117+ realAmount = balanceAfterDeposit - balanceBeforeDeposit;
144118 }
145119
146120 /**
147121 * @dev this won't verify the pubkey
148122 * @param ethAddr the L1 address
149123 * @param bjjPubkey the L2 address (bjjPubkey)
150124 */
151- function registerUser (address ethAddr , bytes32 bjjPubkey ) public {
125+ function registerUser (address ethAddr , bytes32 bjjPubkey )
126+ external
127+ override
128+ onlyRole (DELEGATE_ROLE)
129+ returns (uint16 userId )
130+ {
152131 require (userBjjPubkeyToUserId[bjjPubkey] == 0 , "user existed " );
153132 userNum++ ;
154133 require (userNum < USER_NUM_LIMIT, "user num limit reached " );
155134
156- uint16 userId = userNum;
135+ userId = userNum;
157136 userIdToUserInfo[userId] = UserInfo ({
158137 ethAddr: ethAddr,
159138 bjjPubkey: bjjPubkey
160139 });
161140 userBjjPubkeyToUserId[bjjPubkey] = userId;
162- emit RegisterUser (ethAddr, userId, bjjPubkey);
163141 }
164142
165143 function getBlockStateByBlockId (uint256 _block_id )
166- public
144+ external
167145 view
146+ override
168147 returns (BlockState)
169148 {
170149 return block_states[_block_id];
@@ -230,13 +209,54 @@ contract FluiDexDemo is
230209 }
231210
232211 /**
233- * @dev create a user if not exist
234- * @param bjjPubkey the L2 address (bjjPubkey)
212+ * @param tokenId tokenId
213+ * @return tokenAddr
235214 */
236- modifier orCreateUser (address origin , bytes32 bjjPubkey ) {
237- if (userBjjPubkeyToUserId[bjjPubkey] == 0 ) {
238- registerUser (origin, bjjPubkey);
239- }
240- _;
215+ function getTokenAddr (uint16 tokenId )
216+ external
217+ view
218+ override
219+ returns (address )
220+ {
221+ return tokenIdToAddr[tokenId];
222+ }
223+
224+ /**
225+ * @param tokenAddr tokenAddr
226+ * @return tokenId
227+ */
228+ function getTokenId (address tokenAddr )
229+ external
230+ view
231+ override
232+ returns (uint16 )
233+ {
234+ return tokenAddrToId[tokenAddr];
235+ }
236+
237+ /**
238+ * @param userId userId
239+ * @return UserInfo
240+ */
241+ function getUserInfo (uint16 userId )
242+ external
243+ view
244+ override
245+ returns (UserInfo memory )
246+ {
247+ return userIdToUserInfo[userId];
248+ }
249+
250+ /**
251+ * @param bjjPubkey user's pubkey
252+ * @return userId, returns 0 if not exist
253+ */
254+ function getUserId (bytes32 bjjPubkey )
255+ external
256+ view
257+ override
258+ returns (uint16 )
259+ {
260+ return userBjjPubkeyToUserId[bjjPubkey];
241261 }
242262}
0 commit comments