Skip to content

Commit

Permalink
feat(contracts/solve): native token support in middleman (#3023)
Browse files Browse the repository at this point in the history
Noticed the `SolverNetMiddleman` contract couldn't transfer native
tokens, so I fixed that.

issue: none
  • Loading branch information
Zodomo authored Feb 10, 2025
1 parent 8b73c30 commit 0709e97
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 5 deletions.
2 changes: 1 addition & 1 deletion contracts/bindings/solvernetmiddleman.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion contracts/solve/.gas-snapshot
Original file line number Diff line number Diff line change
Expand Up @@ -36,4 +36,5 @@ SolverNet_Outbox_Fill_Test:test_fill_nativeExpense_succeeds() (gas: 253003)
SolverNet_Outbox_Fill_Test:test_fill_native_overpayment_refund_succeeds() (gas: 285058)
SolverNet_Outbox_Fill_Test:test_fill_no_fill_deadline_succeeds() (gas: 350052)
SolverNet_Outbox_Fill_Test:test_fill_reverts() (gas: 406738)
SolverNet_Outbox_Middleman_Test:test_executeAndTransfer_succeeds() (gas: 91348)
SolverNet_Outbox_Middleman_Test:test_executeAndTransfer_erc20_succeeds() (gas: 91861)
SolverNet_Outbox_Middleman_Test:test_executeAndTransfer_native_succeeds() (gas: 74450)
4 changes: 3 additions & 1 deletion contracts/solve/src/SolverNetMiddleman.sol
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,9 @@ contract SolverNetMiddleman is Initializable {
function executeAndTransfer(address token, address to, address target, bytes calldata data) external payable {
(bool success,) = target.call{ value: msg.value }(data);
if (!success) revert CallFailed();
token.safeTransferAll(to);

if (token == address(0)) SafeTransferLib.safeTransferAllETH(to);
else token.safeTransferAll(to);
}

receive() external payable { }
Expand Down
14 changes: 12 additions & 2 deletions contracts/solve/test/outbox/Middleman.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,31 @@ pragma solidity =0.8.24;

import "../TestBase.sol";
import { MockLST } from "test/utils/MockLST.sol";
import { Refunder } from "test/utils/Refunder.sol";

contract SolverNet_Outbox_Middleman_Test is TestBase {
MockLST lst;
Refunder refunder;

function setUp() public override {
super.setUp();
lst = new MockLST();
refunder = new Refunder();
}

function test_executeAndTransfer_succeeds() public {
function test_executeAndTransfer_erc20_succeeds() public {
vm.deal(solver, 1 ether);
vm.prank(solver);
middleman.executeAndTransfer{ value: 1 ether }(
address(lst.token()), user, address(lst), abi.encodeWithSelector(MockLST.deposit.selector)
);
assertEq(lst.token().balanceOf(user), 1 ether);
assertEq(lst.token().balanceOf(user), 1 ether, "user should have received 1 ether of the LST from middleman");
}

function test_executeAndTransfer_native_succeeds() public {
vm.deal(solver, 1 ether);
vm.prank(solver);
middleman.executeAndTransfer{ value: 1 ether }(address(0), user, address(refunder), "");
assertEq(user.balance, 1 ether, "user should have received 1 ether of native tokens from middleman");
}
}

0 comments on commit 0709e97

Please sign in to comment.