Skip to content

Commit c1726ac

Browse files
authored
Merge pull request #11 from thirdweb-dev/yash/universal-bridge-more-tests
Add spender address, remove direct transfer flag
2 parents ccc8857 + dc3226b commit c1726ac

File tree

4 files changed

+280
-62
lines changed

4 files changed

+280
-62
lines changed

src/UniversalBridgeV1.sol

+12-19
Original file line numberDiff line numberDiff line change
@@ -140,9 +140,9 @@ contract UniversalBridgeV1 is Initializable, UUPSUpgradeable, Ownable, Reentranc
140140
address tokenAddress,
141141
uint256 tokenAmount,
142142
address payable forwardAddress,
143+
address payable spenderAddress,
143144
address payable developerFeeRecipient,
144145
uint256 developerFeeBps,
145-
bool directTransfer,
146146
bytes calldata callData,
147147
bytes calldata extraData
148148
) external payable nonReentrant onlyProxy {
@@ -161,40 +161,33 @@ contract UniversalBridgeV1 is Initializable, UUPSUpgradeable, Ownable, Reentranc
161161
if (tokenAmount == 0) {
162162
revert UniversalBridgeInvalidAmount(tokenAmount);
163163
}
164-
uint256 sendValue = msg.value; // includes bridge fee etc. (if any)
165164

166165
// mark the pay request as processed
167166
_universalBridgeStorage().processed[transactionId] = true;
168167

168+
uint256 sendValue = msg.value; // includes bridge fee etc. (if any)
169+
169170
// distribute fees
170171
uint256 totalFeeAmount = _distributeFees(tokenAddress, tokenAmount, developerFeeRecipient, developerFeeBps);
171172

172-
// determine native value to send
173173
if (_isNativeToken(tokenAddress)) {
174174
sendValue = msg.value - totalFeeAmount;
175175

176176
if (sendValue < tokenAmount) {
177177
revert UniversalBridgeMismatchedValue(tokenAmount, sendValue);
178178
}
179-
}
180-
181-
if (directTransfer) {
182-
if (_isNativeToken(tokenAddress)) {
183-
_call(forwardAddress, sendValue, "");
184-
} else {
185-
if (msg.value != 0) {
186-
revert UniversalBridgeMsgValueNotZero();
187-
}
188-
189-
SafeTransferLib.safeTransferFrom(tokenAddress, msg.sender, forwardAddress, tokenAmount);
179+
_call(forwardAddress, sendValue, callData); // calldata empty for direct transfer
180+
} else if (callData.length == 0) {
181+
if (msg.value != 0) {
182+
revert UniversalBridgeMsgValueNotZero();
190183
}
184+
SafeTransferLib.safeTransferFrom(tokenAddress, msg.sender, forwardAddress, tokenAmount);
191185
} else {
192-
if (!_isNativeToken(tokenAddress)) {
193-
// pull user funds
194-
SafeTransferLib.safeTransferFrom(tokenAddress, msg.sender, address(this), tokenAmount);
195-
SafeTransferLib.safeApprove(tokenAddress, forwardAddress, tokenAmount);
196-
}
186+
// pull user funds
187+
SafeTransferLib.safeTransferFrom(tokenAddress, msg.sender, address(this), tokenAmount);
197188

189+
// approve to spender address and call forward address -- both will be same in most cases
190+
SafeTransferLib.safeApprove(tokenAddress, spenderAddress, tokenAmount);
198191
_call(forwardAddress, sendValue, callData);
199192
}
200193

0 commit comments

Comments
 (0)