@@ -4,28 +4,35 @@ pragma solidity 0.8.24;
44import "../../common/Borsh.sol " ;
55import {AccessControlUpgradeable} from '@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol ' ;
66import {UUPSUpgradeable} from '@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol ' ;
7- import {IENear} from './IENear.sol ' ;
7+ import {IENear, INearProver } from './IENear.sol ' ;
88import {ICustomMinter} from '../../common/ICustomMinter.sol ' ;
9+ import "../../omni-bridge/contracts/SelectivePausableUpgradable.sol " ;
910
10- contract ENearProxy is UUPSUpgradeable , AccessControlUpgradeable , ICustomMinter {
11+ contract ENearProxy is UUPSUpgradeable , AccessControlUpgradeable , ICustomMinter , SelectivePausableUpgradable {
1112 IENear public eNear;
1213
1314 bytes32 public constant MINTER_ROLE = keccak256 ("MINTER_ROLE " );
15+ bytes32 public constant PAUSABLE_ADMIN_ROLE = keccak256 ("PAUSABLE_ADMIN_ROLE " );
1416 bytes public nearConnector;
1517 uint256 public currentReceiptId;
18+ INearProver public prover;
19+
20+ uint constant PAUSED_LEGACY_FIN_TRANSFER = 1 << 0 ;
1621
1722 /// @custom:oz-upgrades-unsafe-allow constructor
1823 constructor () {
1924 _disableInitializers ();
2025 }
2126
22- function initialize (address _eNear , bytes memory _nearConnector , uint256 _currentReceiptId , address _adminAddress ) public initializer {
27+ function initialize (address _eNear , address _prover , bytes memory _nearConnector , uint256 _currentReceiptId , address _adminAddress ) public initializer {
2328 __UUPSUpgradeable_init ();
2429 __AccessControl_init ();
2530 eNear = IENear (_eNear);
2631 nearConnector = _nearConnector;
2732 currentReceiptId = _currentReceiptId;
33+ prover = INearProver (_prover);
2834 _grantRole (DEFAULT_ADMIN_ROLE, _adminAddress);
35+ _grantRole (PAUSABLE_ADMIN_ROLE, _msgSender ());
2936 }
3037
3138 function mint (address token , address to , uint128 amount ) public onlyRole (MINTER_ROLE) {
@@ -53,6 +60,26 @@ contract ENearProxy is UUPSUpgradeable, AccessControlUpgradeable, ICustomMinter
5360 eNear.transferToNear (amount, string ('' ));
5461 }
5562
63+ function finaliseNearToEthTransfer (
64+ bytes memory proofData ,
65+ uint64 proofBlockHeight
66+ ) external whenNotPaused (PAUSED_LEGACY_FIN_TRANSFER) {
67+ require (
68+ prover.proveOutcome (proofData, proofBlockHeight),
69+ "Proof should be valid "
70+ );
71+
72+ eNear.finaliseNearToEthTransfer (proofData, proofBlockHeight);
73+ }
74+
75+ function pauseAll () external onlyRole (PAUSABLE_ADMIN_ROLE) {
76+ _pause (PAUSED_LEGACY_FIN_TRANSFER);
77+ }
78+
79+ function pause (uint flags ) external onlyRole (DEFAULT_ADMIN_ROLE) {
80+ _pause (flags);
81+ }
82+
5683 function _authorizeUpgrade (
5784 address newImplementation
5885 ) internal override onlyRole (DEFAULT_ADMIN_ROLE) {}
0 commit comments