Skip to content

Commit 3f6697c

Browse files
committed
check if basetoken is contract
1 parent 795ffa8 commit 3f6697c

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed

contracts/pools/fixedRate/FixedRateExchange.sol

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,18 @@ contract FixedRateExchange is ReentrancyGuard, IFixedRateExchange {
180180
return IFactoryRouter(router).getOPCFee(baseTokenAddress);
181181
}
182182

183-
183+
/**
184+
* @dev isContract
185+
* checks if address is a contract
186+
* addr - address to be checked
187+
*/
188+
function isContract(address addr) public view returns(bool){
189+
uint32 size;
190+
assembly {
191+
size := extcodesize(addr)
192+
}
193+
return (size > 0);
194+
}
184195
/**
185196
* @dev create
186197
* creates new exchange pairs between a baseToken
@@ -209,6 +220,10 @@ contract FixedRateExchange is ReentrancyGuard, IFixedRateExchange {
209220
addresses[0] != address(0),
210221
"FixedRateExchange: Invalid baseToken, zero address"
211222
);
223+
require(
224+
isContract(addresses[0]),
225+
"FixedRateExchange: Invalid baseToken, looks EOA"
226+
);
212227
require(
213228
datatoken != address(0),
214229
"FixedRateExchange: Invalid datatoken, zero address"

test/flow/FixedRateExchange.test.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,15 @@ describe("FixedRateExchange", () => {
204204
mockDT18 = erc20Token;
205205
});
206206

207+
it("should fail if basetoken is EOA", async () => {
208+
await expectRevert(mockDT18.connect(alice)
209+
.createFixedRate(
210+
fixedRateExchange.address,
211+
[bob.address, alice.address, marketFeeCollector.address, ZERO_ADDRESS],
212+
[18, 18, rate, marketFee, 0])
213+
,"FixedRateExchange: Invalid baseToken, looks EOA" )
214+
215+
});
207216
it("#2 - create exchange", async () => {
208217
marketFee = 1e15;
209218

0 commit comments

Comments
 (0)