From b1089d5eef466dd9b67e5bece784e29918db933e Mon Sep 17 00:00:00 2001 From: Gleb Alekseev Date: Tue, 20 Jun 2023 19:29:18 +0300 Subject: [PATCH 1/2] pods --- contracts/IERC20Pods.sol | 22 ++++++++++++++++++++++ package.json | 3 ++- yarn.lock | 5 +++++ 3 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 contracts/IERC20Pods.sol diff --git a/contracts/IERC20Pods.sol b/contracts/IERC20Pods.sol new file mode 100644 index 0000000..4124a10 --- /dev/null +++ b/contracts/IERC20Pods.sol @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; + +interface IERC20Pods is IERC20 { + event PodAdded(address account, address pod); + event PodRemoved(address account, address pod); + + function podsLimit() external view returns(uint256); + function podCallGasLimit() external view returns(uint256); + function hasPod(address account, address pod) external view returns(bool); + function podsCount(address account) external view returns(uint256); + function podAt(address account, uint256 index) external view returns(address); + function pods(address account) external view returns(address[] memory); + function podBalanceOf(address pod, address account) external view returns(uint256); + + function addPod(address pod) external; + function removePod(address pod) external; + function removeAllPods() external; +} diff --git a/package.json b/package.json index c79a998..7f15dc7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,7 @@ { "dependencies": { - "hardhat": "^2.15.0" + "hardhat": "^2.15.0", + "@openzeppelin/contracts": "4.8.2" }, "devDependencies": { "@nomicfoundation/hardhat-chai-matchers": "^2.0.0", diff --git a/yarn.lock b/yarn.lock index acba746..1b12a51 100644 --- a/yarn.lock +++ b/yarn.lock @@ -676,6 +676,11 @@ "@nomicfoundation/solidity-analyzer-win32-ia32-msvc" "0.1.1" "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.1.1" +"@openzeppelin/contracts@4.8.2": + version "4.8.2" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.8.2.tgz#d815ade0027b50beb9bcca67143c6bcc3e3923d6" + integrity sha512-kEUOgPQszC0fSYWpbh2kT94ltOJwj1qfT2DWo+zVttmGmf97JZ99LspePNaeeaLhCImaHVeBbjaQFZQn7+Zc5g== + "@scure/base@~1.1.0": version "1.1.1" resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.1.tgz#ebb651ee52ff84f420097055f4bf46cfba403938" From 7ea7285ba21dce1be6951614d9b78617a36ac3e3 Mon Sep 17 00:00:00 2001 From: Gleb Alekseev Date: Wed, 21 Jun 2023 10:43:04 +0300 Subject: [PATCH 2/2] Create Lock2.sol --- contracts/Lock2.sol | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 contracts/Lock2.sol diff --git a/contracts/Lock2.sol b/contracts/Lock2.sol new file mode 100644 index 0000000..3934e6e --- /dev/null +++ b/contracts/Lock2.sol @@ -0,0 +1,34 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.9; + +// Uncomment this line to use console.log +// import "hardhat/console.sol"; + +contract Lock2 { + uint public unlockTime; + address payable public owner; + + event Withdrawal(uint amount, uint when); + + constructor(uint _unlockTime) payable { + require( + block.timestamp < _unlockTime, + "Unlock time should be in the future" + ); + + unlockTime = _unlockTime; + owner = payable(msg.sender); + } + + function withdraw() public { + // Uncomment this line, and the import of "hardhat/console.sol", to print a log in your terminal + // console.log("Unlock time is %o and block timestamp is %o", unlockTime, block.timestamp); + + require(block.timestamp >= unlockTime, "You can't withdraw yet"); + require(msg.sender == owner, "You aren't the owner"); + + emit Withdrawal(address(this).balance, block.timestamp); + + owner.transfer(address(this).balance); + } +}