Skip to content

Commit 91ae5f9

Browse files
author
Michał Sieczkowski
authored
⏯ Add Proof of Reserve pausing to TrueUSDWithPoR in contracts-por (#1201)
Add Proof of Reserve pausing
1 parent 47f0bf9 commit 91ae5f9

File tree

3 files changed

+42
-10
lines changed

3 files changed

+42
-10
lines changed

packages/contracts-por/contracts/TrueCurrencyWithPoR.sol

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,6 @@ import {SafeMath} from "@openzeppelin/contracts/math/SafeMath.sol";
1616
abstract contract TrueCurrencyWithPoR is TrueCurrency, IPoRToken {
1717
using SafeMath for uint256;
1818

19-
constructor() public {
20-
uint256 INITIAL_CHAIN_RESERVE_HEARTBEAT = 7 days;
21-
chainReserveHeartbeat = INITIAL_CHAIN_RESERVE_HEARTBEAT;
22-
}
23-
2419
/**
2520
* @notice Overriden mint function that checks the specified proof-of-reserves feed to
2621
* ensure that the total supply of this TrueCurrency is not greater than the reported
@@ -30,7 +25,7 @@ abstract contract TrueCurrencyWithPoR is TrueCurrency, IPoRToken {
3025
* @param amount The amount of tokens to mint
3126
*/
3227
function _mint(address account, uint256 amount) internal virtual override {
33-
if (chainReserveFeed == address(0)) {
28+
if (chainReserveFeed == address(0) || !proofOfReserveEnabled) {
3429
super._mint(account, amount);
3530
return;
3631
}
@@ -61,18 +56,40 @@ abstract contract TrueCurrencyWithPoR is TrueCurrency, IPoRToken {
6156
* @dev Admin function to set a new feed
6257
* @param newFeed Address of the new feed
6358
*/
64-
function setChainReserveFeed(address newFeed) external override onlyOwner returns (uint256) {
59+
function setChainReserveFeed(address newFeed) external override onlyOwner {
6560
emit NewChainReserveFeed(chainReserveFeed, newFeed);
6661
chainReserveFeed = newFeed;
62+
if (newFeed == address(0) && proofOfReserveEnabled) {
63+
proofOfReserveEnabled = false;
64+
}
6765
}
6866

6967
/**
7068
* @notice Sets the feed's heartbeat expectation
7169
* @dev Admin function to set the heartbeat
7270
* @param newHeartbeat Value of the age of the latest update from the feed
7371
*/
74-
function setChainReserveHeartbeat(uint256 newHeartbeat) external override onlyOwner returns (uint256) {
72+
function setChainReserveHeartbeat(uint256 newHeartbeat) external override onlyOwner {
7573
emit NewChainReserveHeartbeat(chainReserveHeartbeat, newHeartbeat);
7674
chainReserveHeartbeat = newHeartbeat;
7775
}
76+
77+
/**
78+
* @notice Disable Proof of Reserve check
79+
* @dev Admin function to disable Proof of Reserve
80+
*/
81+
function disableProofOfReserve() external override onlyOwner {
82+
emit ProofOfReserveDisabled();
83+
proofOfReserveEnabled = false;
84+
}
85+
86+
/**
87+
* @notice Enable Proof of Reserve check
88+
* @dev Admin function to enable Proof of Reserve
89+
*/
90+
function enableProofOfReserve() external override onlyOwner {
91+
require(chainReserveFeed != address(0), "TrueCurrency: chainReserveFeed not set");
92+
emit ProofOfReserveEnabled();
93+
proofOfReserveEnabled = true;
94+
}
7895
}

packages/contracts-por/contracts/common/ProxyStorage.sol

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ contract ProxyStorage {
5959
// PoR feed-related variables
6060
uint256 public chainReserveHeartbeat;
6161
address public chainReserveFeed;
62+
bool public proofOfReserveEnabled;
6263

6364
/* Additionally, we have several keccak-based storage locations.
6465
* If you add more keccak-based storage mappings, such as mappings, you must document them here.

packages/contracts-por/contracts/interface/IPoRToken.sol

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,23 @@ interface IPoRToken {
1212
*/
1313
event NewChainReserveHeartbeat(uint256 oldHeartbeat, uint256 newHeartbeat);
1414

15+
/**
16+
* @notice Event emitted when Proof of Reserve is enabled
17+
*/
18+
event ProofOfReserveEnabled();
19+
20+
/**
21+
* @notice Event emitted when Proof of Reserve is disabled
22+
*/
23+
event ProofOfReserveDisabled();
24+
1525
/*** Admin Functions ***/
1626

17-
function setChainReserveFeed(address newFeed) external returns (uint256);
27+
function setChainReserveFeed(address newFeed) external;
28+
29+
function setChainReserveHeartbeat(uint256 newHeartbeat) external;
30+
31+
function enableProofOfReserve() external;
1832

19-
function setChainReserveHeartbeat(uint256 newHeartbeat) external returns (uint256);
33+
function disableProofOfReserve() external;
2034
}

0 commit comments

Comments
 (0)