@@ -25,8 +25,15 @@ contract GeyserRouter is IERC721Receiver {
25
25
return IERC721Receiver .onERC721Received.selector ;
26
26
}
27
27
28
- function create2Vault (address vaultFactory , bytes32 salt ) public returns (address vault ) {
28
+ function create2Vault (
29
+ address vaultFactory ,
30
+ bytes32 salt ,
31
+ address vaultOwner
32
+ ) public returns (address vault ) {
33
+ // create vault
29
34
vault = IFactory (vaultFactory).create2 ("" , salt);
35
+ // transfer ownership
36
+ IERC721 (vaultFactory).safeTransferFrom (address (this ), vaultOwner, uint256 (vault));
30
37
}
31
38
32
39
function depositStake (
@@ -48,10 +55,7 @@ contract GeyserRouter is IERC721Receiver {
48
55
bytes32 salt ,
49
56
bytes calldata permission
50
57
) external returns (address vault ) {
51
- // create vault
52
- vault = create2Vault (vaultFactory, salt);
53
- // transfer ownership
54
- IERC721 (vaultFactory).safeTransferFrom (address (this ), vaultOwner, uint256 (vault));
58
+ vault = create2Vault (vaultFactory, salt, vaultOwner);
55
59
// transfer tokens and stake
56
60
depositStake (geyser, vault, amount, permission);
57
61
}
@@ -108,36 +112,29 @@ contract GeyserRouter is IERC721Receiver {
108
112
IGeyser (geyser).stake (vault, permit.value, permission);
109
113
}
110
114
111
- struct StakeRequest {
115
+ struct GeyserAction {
112
116
address geyser;
113
117
address vault;
114
118
uint256 amount;
115
119
bytes permission;
116
120
}
117
121
118
- function stakeMulti (StakeRequest [] calldata requests ) external {
119
- for (uint256 index = 0 ; index < requests .length ; index++ ) {
120
- StakeRequest calldata request = requests [index];
121
- IGeyser (request .geyser).stake (request .vault, request .amount, request .permission);
122
+ function stakeMulti (GeyserAction [] calldata actions ) external {
123
+ for (uint256 index = 0 ; index < actions .length ; index++ ) {
124
+ GeyserAction calldata act = actions [index];
125
+ IGeyser (act .geyser).stake (act .vault, act .amount, act .permission);
122
126
}
123
127
}
124
128
125
- struct UnstakeRequest {
126
- address geyser;
127
- address vault;
128
- uint256 amount;
129
- bytes permission;
130
- }
131
-
132
- function unstakeMulti (UnstakeRequest[] calldata requests ) external {
133
- for (uint256 index = 0 ; index < requests.length ; index++ ) {
134
- UnstakeRequest calldata request = requests[index];
135
- IGeyser (request.geyser).unstakeAndClaim (request.vault, request.amount, request.permission);
129
+ function unstakeMulti (GeyserAction[] calldata actions ) external {
130
+ for (uint256 index = 0 ; index < actions.length ; index++ ) {
131
+ GeyserAction calldata act = actions[index];
132
+ IGeyser (act.geyser).unstakeAndClaim (act.vault, act.amount, act.permission);
136
133
}
137
134
}
138
135
139
- function unstakeAndRestake (UnstakeRequest calldata r1 , StakeRequest calldata r2 ) external {
140
- IGeyser (r1 .geyser).stake (r1 .vault, r1 .amount, r1 .permission);
141
- IGeyser (r2 .geyser).unstakeAndClaim (r2 .vault, r2 .amount, r2 .permission);
136
+ function unstakeAndRestake (GeyserAction calldata unstakeAct , GeyserAction calldata stakeAct ) external {
137
+ IGeyser (unstakeAct .geyser).unstakeAndClaim (unstakeAct .vault, unstakeAct .amount, unstakeAct .permission);
138
+ IGeyser (stakeAct .geyser).stake (stakeAct .vault, stakeAct .amount, stakeAct .permission);
142
139
}
143
140
}
0 commit comments