diff --git a/.openzeppelin/unknown-421614.json b/.openzeppelin/unknown-421614.json index 7bf48ee5..e0c4411f 100644 --- a/.openzeppelin/unknown-421614.json +++ b/.openzeppelin/unknown-421614.json @@ -4725,6 +4725,689 @@ } } } + }, + "d62f79a617cf064068e920064330cc46b616b55167dc6797c5a122ed40b62929": { + "address": "0xF5731f7351155374545dd5a4DC574F3b2eF220b7", + "layout": { + "solcVersion": "0.8.17", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" + }, + { + "label": "__gap", + "offset": 0, + "slot": "51", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC165Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" + }, + { + "label": "_roles", + "offset": 0, + "slot": "101", + "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", + "contract": "AccessControlUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" + }, + { + "label": "__gap", + "offset": 0, + "slot": "102", + "type": "t_array(t_uint256)49_storage", + "contract": "AccessControlUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" + }, + { + "label": "_roleMembers", + "offset": 0, + "slot": "151", + "type": "t_mapping(t_bytes32,t_struct(AddressSet)4590_storage)", + "contract": "AccessControlEnumerableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage", + "contract": "AccessControlEnumerableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" + }, + { + "label": "__gap", + "offset": 0, + "slot": "201", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC1967UpgradeUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" + }, + { + "label": "__gap", + "offset": 0, + "slot": "251", + "type": "t_array(t_uint256)50_storage", + "contract": "UUPSUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" + }, + { + "label": "__gap0", + "offset": 0, + "slot": "301", + "type": "t_array(t_uint256)500_storage", + "contract": "Bridge", + "src": "contracts/bridge/Bridge.sol:24" + }, + { + "label": "__gap1", + "offset": 0, + "slot": "801", + "type": "t_array(t_uint256)50_storage", + "contract": "Bridge", + "src": "contracts/bridge/Bridge.sol:63" + }, + { + "label": "liquidityBp", + "offset": 0, + "slot": "851", + "type": "t_uint256", + "contract": "Bridge", + "src": "contracts/bridge/Bridge.sol:90" + }, + { + "label": "lockTimeEpochs", + "offset": 0, + "slot": "852", + "type": "t_uint256", + "contract": "Bridge", + "src": "contracts/bridge/Bridge.sol:91" + }, + { + "label": "liquidityEpochLength", + "offset": 0, + "slot": "853", + "type": "t_uint256", + "contract": "Bridge", + "src": "contracts/bridge/Bridge.sol:92" + }, + { + "label": "mpond", + "offset": 0, + "slot": "854", + "type": "t_contract(MPond)7419", + "contract": "Bridge", + "src": "contracts/bridge/Bridge.sol:94" + }, + { + "label": "pond", + "offset": 0, + "slot": "855", + "type": "t_contract(Pond)7723", + "contract": "Bridge", + "src": "contracts/bridge/Bridge.sol:95" + }, + { + "label": "startTime", + "offset": 0, + "slot": "856", + "type": "t_uint256", + "contract": "Bridge", + "src": "contracts/bridge/Bridge.sol:96" + }, + { + "label": "liquidityStartTime", + "offset": 0, + "slot": "857", + "type": "t_uint256", + "contract": "Bridge", + "src": "contracts/bridge/Bridge.sol:97" + }, + { + "label": "requests", + "offset": 0, + "slot": "858", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_struct(Requests)5107_storage))", + "contract": "Bridge", + "src": "contracts/bridge/Bridge.sol:120" + }, + { + "label": "claimedAmounts", + "offset": 0, + "slot": "859", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "contract": "Bridge", + "src": "contracts/bridge/Bridge.sol:121" + }, + { + "label": "totalAmountPlacedInRequests", + "offset": 0, + "slot": "860", + "type": "t_mapping(t_address,t_uint256)", + "contract": "Bridge", + "src": "contracts/bridge/Bridge.sol:122" + }, + { + "label": "stakingContract", + "offset": 0, + "slot": "861", + "type": "t_address", + "contract": "Bridge", + "src": "contracts/bridge/Bridge.sol:124" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)500_storage": { + "label": "uint256[500]", + "numberOfBytes": "16000" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(MPond)7419": { + "label": "contract MPond", + "numberOfBytes": "20" + }, + "t_contract(Pond)7723": { + "label": "contract Pond", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_struct(Requests)5107_storage))": { + "label": "mapping(address => mapping(uint256 => struct Bridge.Requests))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_struct(AddressSet)4590_storage)": { + "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Requests)5107_storage)": { + "label": "mapping(uint256 => struct Bridge.Requests)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_struct(AddressSet)4590_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)4275_storage", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Requests)5107_storage": { + "label": "struct Bridge.Requests", + "members": [ + { + "label": "amount", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "releaseEpoch", + "type": "t_uint256", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(RoleData)179_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_mapping(t_address,t_bool)", + "offset": 0, + "slot": "0" + }, + { + "label": "adminRole", + "type": "t_bytes32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Set)4275_storage": { + "label": "struct EnumerableSetUpgradeable.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } + }, + "397aa0f386afe6935d75144bc39262acad28ef5adb79d7c31a184eafc136ecf4": { + "address": "0x1a36735fBB105F359e97F578078dE92CA16c9721", + "txHash": "0xd7db36c9b021d760ee477a1d7412bffd9bf5f62dbf5e75a2d845b6d83885ef65", + "layout": { + "solcVersion": "0.8.17", + "storage": [ + { + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:63", + "retypedFrom": "bool" + }, + { + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool", + "contract": "Initializable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:68" + }, + { + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage", + "contract": "ContextUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" + }, + { + "label": "__gap", + "offset": 0, + "slot": "51", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC165Upgradeable", + "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" + }, + { + "label": "_roles", + "offset": 0, + "slot": "101", + "type": "t_mapping(t_bytes32,t_struct(RoleData)179_storage)", + "contract": "AccessControlUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:62" + }, + { + "label": "__gap", + "offset": 0, + "slot": "102", + "type": "t_array(t_uint256)49_storage", + "contract": "AccessControlUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:260" + }, + { + "label": "_roleMembers", + "offset": 0, + "slot": "151", + "type": "t_mapping(t_bytes32,t_struct(AddressSet)4590_storage)", + "contract": "AccessControlEnumerableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:22" + }, + { + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage", + "contract": "AccessControlEnumerableUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol:76" + }, + { + "label": "__gap", + "offset": 0, + "slot": "201", + "type": "t_array(t_uint256)50_storage", + "contract": "ERC1967UpgradeUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol:169" + }, + { + "label": "__gap", + "offset": 0, + "slot": "251", + "type": "t_array(t_uint256)50_storage", + "contract": "UUPSUpgradeable", + "src": "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol:111" + }, + { + "label": "__gap0", + "offset": 0, + "slot": "301", + "type": "t_array(t_uint256)500_storage", + "contract": "Bridge", + "src": "contracts/bridge/Bridge.sol:24" + }, + { + "label": "__gap1", + "offset": 0, + "slot": "801", + "type": "t_array(t_uint256)50_storage", + "contract": "Bridge", + "src": "contracts/bridge/Bridge.sol:63" + }, + { + "label": "liquidityBp", + "offset": 0, + "slot": "851", + "type": "t_uint256", + "contract": "Bridge", + "src": "contracts/bridge/Bridge.sol:90" + }, + { + "label": "lockTimeEpochs", + "offset": 0, + "slot": "852", + "type": "t_uint256", + "contract": "Bridge", + "src": "contracts/bridge/Bridge.sol:91" + }, + { + "label": "liquidityEpochLength", + "offset": 0, + "slot": "853", + "type": "t_uint256", + "contract": "Bridge", + "src": "contracts/bridge/Bridge.sol:92" + }, + { + "label": "mpond", + "offset": 0, + "slot": "854", + "type": "t_contract(MPond)7484", + "contract": "Bridge", + "src": "contracts/bridge/Bridge.sol:94" + }, + { + "label": "pond", + "offset": 0, + "slot": "855", + "type": "t_contract(Pond)7788", + "contract": "Bridge", + "src": "contracts/bridge/Bridge.sol:95" + }, + { + "label": "startTime", + "offset": 0, + "slot": "856", + "type": "t_uint256", + "contract": "Bridge", + "src": "contracts/bridge/Bridge.sol:96" + }, + { + "label": "liquidityStartTime", + "offset": 0, + "slot": "857", + "type": "t_uint256", + "contract": "Bridge", + "src": "contracts/bridge/Bridge.sol:97" + }, + { + "label": "requests", + "offset": 0, + "slot": "858", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_struct(Requests)5107_storage))", + "contract": "Bridge", + "src": "contracts/bridge/Bridge.sol:120" + }, + { + "label": "claimedAmounts", + "offset": 0, + "slot": "859", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "contract": "Bridge", + "src": "contracts/bridge/Bridge.sol:121" + }, + { + "label": "totalAmountPlacedInRequests", + "offset": 0, + "slot": "860", + "type": "t_mapping(t_address,t_uint256)", + "contract": "Bridge", + "src": "contracts/bridge/Bridge.sol:122" + }, + { + "label": "stakingContract", + "offset": 0, + "slot": "861", + "type": "t_address", + "contract": "Bridge", + "src": "contracts/bridge/Bridge.sol:124" + } + ], + "types": { + "t_address": { + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)500_storage": { + "label": "uint256[500]", + "numberOfBytes": "16000" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_contract(MPond)7484": { + "label": "contract MPond", + "numberOfBytes": "20" + }, + "t_contract(Pond)7788": { + "label": "contract Pond", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_struct(Requests)5107_storage))": { + "label": "mapping(address => mapping(uint256 => struct Bridge.Requests))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_struct(AddressSet)4590_storage)": { + "label": "mapping(bytes32 => struct EnumerableSetUpgradeable.AddressSet)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_struct(RoleData)179_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)", + "numberOfBytes": "32" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_struct(Requests)5107_storage)": { + "label": "mapping(uint256 => struct Bridge.Requests)", + "numberOfBytes": "32" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32" + }, + "t_struct(AddressSet)4590_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)4275_storage", + "offset": 0, + "slot": "0" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Requests)5107_storage": { + "label": "struct Bridge.Requests", + "members": [ + { + "label": "amount", + "type": "t_uint256", + "offset": 0, + "slot": "0" + }, + { + "label": "releaseEpoch", + "type": "t_uint256", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(RoleData)179_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_mapping(t_address,t_bool)", + "offset": 0, + "slot": "0" + }, + { + "label": "adminRole", + "type": "t_bytes32", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_struct(Set)4275_storage": { + "label": "struct EnumerableSetUpgradeable.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage", + "offset": 0, + "slot": "0" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)", + "offset": 0, + "slot": "1" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "label": "uint8", + "numberOfBytes": "1" + } + } + } } } } diff --git a/contracts/bridge/Bridge.sol b/contracts/bridge/Bridge.sol index 5a880ac5..cd3e208b 100644 --- a/contracts/bridge/Bridge.sol +++ b/contracts/bridge/Bridge.sol @@ -106,6 +106,10 @@ contract Bridge is uint256 requestCreateEpoch, uint256 unlockRequestEpoch ); + event CancelledRequest( + address indexed sender, + uint256 indexed requestCreateEpoch + ); event MPondToPond( address indexed sender, uint256 indexed requestCreateEpoch, @@ -226,30 +230,42 @@ contract Bridge is return _amount * pondPerMpond; } - // function placeRequest(uint256 amount) external returns (uint256, uint256) { - // uint256 epoch = getCurrentEpoch(); - // uint256 amountInRequests = totalAmountPlacedInRequests[_msgSender()]; - // uint256 amountOnWhichRequestCanBePlaced = mpond.balanceOf(_msgSender()) + - // mpond.getDelegates(stakingContract, _msgSender()) - - // amountInRequests; - // require( - // amount != 0 && amount <= amountOnWhichRequestCanBePlaced, - // "Request should be placed with amount greater than 0 and less than remainingAmount" - // ); - // // require( - // // amount != 0 && amount <= mpond.balanceOf(_msgSender()), - // // "Request should be placed with amount greater than 0 and less than the balance of the user" - // // ); - // require( - // requests[_msgSender()][epoch].amount == 0, - // "Only one request per epoch is acceptable" - // ); - // Requests memory _req = Requests(amount, epoch + lockTimeEpochs); - // requests[_msgSender()][epoch] = _req; - // totalAmountPlacedInRequests[_msgSender()] = amountInRequests + amount; - // emit PlacedRequest(_msgSender(), epoch, _req.releaseEpoch); - // return (epoch, _req.releaseEpoch); - // } + function placeRequest(uint256 amount) external returns (uint256, uint256) { + uint256 epoch = getCurrentEpoch(); + uint256 amountInRequests = totalAmountPlacedInRequests[_msgSender()]; + uint256 amountOnWhichRequestCanBePlaced = mpond.balanceOf(_msgSender()) + + mpond.getDelegates(stakingContract, _msgSender()) - + amountInRequests; + require( + amount != 0 && amount <= amountOnWhichRequestCanBePlaced, + "Request should be placed with amount greater than 0 and less than remainingAmount" + ); + // require( + // amount != 0 && amount <= mpond.balanceOf(_msgSender()), + // "Request should be placed with amount greater than 0 and less than the balance of the user" + // ); + require( + requests[_msgSender()][epoch].amount == 0, + "Only one request per epoch is acceptable" + ); + Requests memory _req = Requests(amount, epoch + lockTimeEpochs); + requests[_msgSender()][epoch] = _req; + totalAmountPlacedInRequests[_msgSender()] = amountInRequests + amount; + emit PlacedRequest(_msgSender(), epoch, _req.releaseEpoch); + return (epoch, _req.releaseEpoch); + } + + function cancelRequest(uint256 _epoch) external { + uint256 _epochAmount = requests[msg.sender][_epoch].amount; + uint256 _claimedAmount = claimedAmounts[msg.sender][_epoch]; + uint256 _amountInRequests = totalAmountPlacedInRequests[msg.sender]; + + delete requests[msg.sender][_epoch]; + delete claimedAmounts[msg.sender][_epoch]; + totalAmountPlacedInRequests[msg.sender] = _amountInRequests + _claimedAmount - _epochAmount; + + emit CancelledRequest(msg.sender, _epoch); + } function addLiquidity(uint256 _mpond, uint256 _pond) external diff --git a/deployments/bridge/Bridge.ts b/deployments/bridge/Bridge.ts index 95c8dfc3..7bff21b0 100644 --- a/deployments/bridge/Bridge.ts +++ b/deployments/bridge/Bridge.ts @@ -1,6 +1,8 @@ import { ethers, upgrades, run } from 'hardhat'; import * as fs from 'fs' +import { upgrade as upgradeUtil } from '../utils/Upgrade'; + async function main() { let chainId = (await ethers.provider.getNetwork()).chainId; console.log("Chain Id:", chainId); @@ -43,6 +45,16 @@ async function main() { fs.writeFileSync('address.json', JSON.stringify(addresses, null, 2), 'utf8'); } +export async function importDeployed(proxyAddress: string) { + const Bridge = await ethers.getContractFactory('Bridge'); + await upgrades.forceImport(proxyAddress, Bridge); +} + +export async function upgrade() { + await upgradeUtil('Bridge', 'Bridge', []); + await verify(); +} + async function verify() { let chainId = (await ethers.provider.getNetwork()).chainId; console.log("Chain Id:", chainId);