@@ -9,37 +9,18 @@ import "@openzeppelin/contracts/access/Ownable.sol";
9
9
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol " ;
10
10
import "hardhat/console.sol " ; // for debugging
11
11
12
- import "./Events.sol " ;
13
12
import "./IFluiDex.sol " ;
14
13
import "./IVerifier.sol " ;
15
14
16
15
/**
17
16
* @title FluiDexDemo
18
17
*/
19
- contract FluiDexDemo is
20
- AccessControl ,
21
- Events ,
22
- IFluiDex ,
23
- Ownable ,
24
- ReentrancyGuard
25
- {
18
+ contract FluiDexDemo is AccessControl , IFluiDex , Ownable , ReentrancyGuard {
26
19
using SafeERC20 for IERC20 ;
27
20
28
21
bytes32 public constant PLUGIN_ADMIN_ROLE = keccak256 ("PLUGIN_ADMIN_ROLE " );
29
- bytes32 public constant TOKEN_ADMIN_ROLE = keccak256 ("TOKEN_ADMIN_ROLE " );
30
22
bytes32 public constant DELEGATE_ROLE = keccak256 ("DELEGATE_ROLE " );
31
23
32
- enum BlockState {
33
- Empty,
34
- Committed,
35
- Verified
36
- }
37
-
38
- struct UserInfo {
39
- address ethAddr;
40
- bytes32 bjjPubkey;
41
- }
42
-
43
24
/// hard limit for ERC20 tokens
44
25
uint16 constant TOKEN_NUM_LIMIT = 65535 ;
45
26
/// hard limit for users
@@ -66,10 +47,8 @@ contract FluiDexDemo is
66
47
GENESIS_ROOT = _genesis_root;
67
48
verifier = _verifier;
68
49
_setupRole (DEFAULT_ADMIN_ROLE, msg .sender );
69
- _setRoleAdmin (TOKEN_ADMIN_ROLE, DEFAULT_ADMIN_ROLE);
70
50
_setRoleAdmin (PLUGIN_ADMIN_ROLE, DEFAULT_ADMIN_ROLE);
71
51
_setRoleAdmin (DELEGATE_ROLE, DEFAULT_ADMIN_ROLE);
72
- grantRole (TOKEN_ADMIN_ROLE, msg .sender );
73
52
grantRole (PLUGIN_ADMIN_ROLE, msg .sender );
74
53
grantRole (DELEGATE_ROLE, msg .sender );
75
54
}
@@ -91,14 +70,13 @@ contract FluiDexDemo is
91
70
* @param tokenAddr the ERC20 token address
92
71
* @return the new ERC20 token tokenId
93
72
*/
94
- function addToken (address origin , address tokenAddr )
73
+ function addToken (address tokenAddr )
95
74
external
96
75
override
97
76
nonReentrant
98
77
onlyRole (DELEGATE_ROLE)
99
78
returns (uint16 )
100
79
{
101
- require (hasRole (TOKEN_ADMIN_ROLE, origin));
102
80
require (tokenAddrToId[tokenAddr] == 0 , "token existed " );
103
81
tokenNum++ ;
104
82
require (tokenNum < TOKEN_NUM_LIMIT, "token num limit reached " );
@@ -107,64 +85,65 @@ contract FluiDexDemo is
107
85
tokenIdToAddr[tokenId] = tokenAddr;
108
86
tokenAddrToId[tokenAddr] = tokenId;
109
87
110
- emit NewToken (origin, tokenAddr, tokenId);
111
88
return tokenId;
112
89
}
113
90
114
91
/**
115
92
* @param to the L2 address (bjjPubkey) of the deposit target.
116
93
*/
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
+ {}
126
100
127
101
/**
128
- * @param to the L2 address (bjjPubkey) of the deposit target.
129
102
* @param amount the deposit amount.
130
103
*/
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)];
138
113
139
114
uint256 balanceBeforeDeposit = token.balanceOf (address (this ));
140
- token.safeTransferFrom (origin , address (this ), amount);
115
+ token.safeTransferFrom (msg . sender , address (this ), amount);
141
116
uint256 balanceAfterDeposit = token.balanceOf (address (this ));
142
- uint256 realAmount = balanceAfterDeposit - balanceBeforeDeposit;
143
- emit Deposit (tokenId, to, realAmount);
117
+ realAmount = balanceAfterDeposit - balanceBeforeDeposit;
144
118
}
145
119
146
120
/**
147
121
* @dev this won't verify the pubkey
148
122
* @param ethAddr the L1 address
149
123
* @param bjjPubkey the L2 address (bjjPubkey)
150
124
*/
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
+ {
152
131
require (userBjjPubkeyToUserId[bjjPubkey] == 0 , "user existed " );
153
132
userNum++ ;
154
133
require (userNum < USER_NUM_LIMIT, "user num limit reached " );
155
134
156
- uint16 userId = userNum;
135
+ userId = userNum;
157
136
userIdToUserInfo[userId] = UserInfo ({
158
137
ethAddr: ethAddr,
159
138
bjjPubkey: bjjPubkey
160
139
});
161
140
userBjjPubkeyToUserId[bjjPubkey] = userId;
162
- emit RegisterUser (ethAddr, userId, bjjPubkey);
163
141
}
164
142
165
143
function getBlockStateByBlockId (uint256 _block_id )
166
- public
144
+ external
167
145
view
146
+ override
168
147
returns (BlockState)
169
148
{
170
149
return block_states[_block_id];
@@ -230,13 +209,54 @@ contract FluiDexDemo is
230
209
}
231
210
232
211
/**
233
- * @dev create a user if not exist
234
- * @param bjjPubkey the L2 address (bjjPubkey)
212
+ * @param tokenId tokenId
213
+ * @return tokenAddr
235
214
*/
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];
241
261
}
242
262
}
0 commit comments