diff --git a/script/Counter.s.sol b/script/Counter.s.sol deleted file mode 100644 index cdc1fe9..0000000 --- a/script/Counter.s.sol +++ /dev/null @@ -1,19 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.13; - -import {Script, console} from "forge-std/Script.sol"; -import {Counter} from "../src/Counter.sol"; - -contract CounterScript is Script { - Counter public counter; - - function setUp() public {} - - function run() public { - vm.startBroadcast(); - - counter = new Counter(); - - vm.stopBroadcast(); - } -} diff --git a/src/Counter.sol b/src/Counter.sol deleted file mode 100644 index aded799..0000000 --- a/src/Counter.sol +++ /dev/null @@ -1,14 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.13; - -contract Counter { - uint256 public number; - - function setNumber(uint256 newNumber) public { - number = newNumber; - } - - function increment() public { - number++; - } -} diff --git a/src/ERC20Amplifier.sol b/src/ERC20Amplifier.sol new file mode 100644 index 0000000..023f698 --- /dev/null +++ b/src/ERC20Amplifier.sol @@ -0,0 +1,39 @@ +// SPDX-License-Identifier: MIT +/* yak tracks all over the place */ +pragma solidity 0.8.23; + +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; + +event Deposit(address indexed sender, uint256 originalTokenAmount); +event Withdraw(address indexed receiver, uint256 originalTokenAmount); + +contract ERC20Amplifier is ERC20 { + address public originalToken; + uint256 public amplification; + + constructor(address _originalToken, uint256 _amplification, string memory _name, string memory _symbol) + ERC20(_name, _symbol) + { + originalToken = _originalToken; + amplification = _amplification; + } + + function deposit(uint256 _originalTokenAmount) public { + require(_originalTokenAmount > 0, "!gt0"); + + _mint(msg.sender, _originalTokenAmount * amplification); + IERC20(originalToken).transferFrom(msg.sender, address(this), _originalTokenAmount); + + emit Deposit(msg.sender, _originalTokenAmount); + } + + function withdraw(uint256 _originalTokenAmount) external { + require(_originalTokenAmount > 0, "!gt0"); + + _burn(msg.sender, _originalTokenAmount * amplification); + IERC20(originalToken).transfer(msg.sender, _originalTokenAmount); + + emit Withdraw(msg.sender, _originalTokenAmount); + } +} diff --git a/test/Counter.t.sol b/test/Counter.t.sol deleted file mode 100644 index 54b724f..0000000 --- a/test/Counter.t.sol +++ /dev/null @@ -1,24 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.13; - -import {Test, console} from "forge-std/Test.sol"; -import {Counter} from "../src/Counter.sol"; - -contract CounterTest is Test { - Counter public counter; - - function setUp() public { - counter = new Counter(); - counter.setNumber(0); - } - - function test_Increment() public { - counter.increment(); - assertEq(counter.number(), 1); - } - - function testFuzz_SetNumber(uint256 x) public { - counter.setNumber(x); - assertEq(counter.number(), x); - } -} diff --git a/test/ERC20Amplifier.t.sol b/test/ERC20Amplifier.t.sol new file mode 100644 index 0000000..9846f98 --- /dev/null +++ b/test/ERC20Amplifier.t.sol @@ -0,0 +1,24 @@ +// // SPDX-License-Identifier: UNLICENSED +// pragma solidity ^0.8.13; + +// import {Test, console} from "forge-std/Test.sol"; +// import {Counter} from "../src/Counter.sol"; + +// contract CounterTest is Test { +// Counter public counter; + +// function setUp() public { +// counter = new Counter(); +// counter.setNumber(0); +// } + +// function test_Increment() public { +// counter.increment(); +// assertEq(counter.number(), 1); +// } + +// function testFuzz_SetNumber(uint256 x) public { +// counter.setNumber(x); +// assertEq(counter.number(), x); +// } +// }