Skip to content
This repository has been archived by the owner on Feb 11, 2022. It is now read-only.

Latest commit

 

History

History
261 lines (226 loc) · 7.98 KB

Resolvable.md

File metadata and controls

261 lines (226 loc) · 7.98 KB

Neptune Mutual Governance: Resolvable Contract (Resolvable.sol)

View Source: contracts/core/governance/resolution/Resolvable.sol

↗ Extends: Finalization, IResolvable ↘ Derived Contracts: Unstakable

Resolvable

Enables governance agents to resolve a contract undergoing reporting. Provides a cool-down period of 24-hours during when governance admins can perform emergency resolution to defend against governance attacks.

Functions

resolve

function resolve(bytes32 key, uint256 incidentDate) external nonpayable nonReentrant 

Arguments

Name Type Description
key bytes32
incidentDate uint256
Source Code
function resolve(bytes32 key, uint256 incidentDate) external override nonReentrant {
    s.mustNotBePaused();
    AccessControlLibV1.mustBeGovernanceAgent(s);
    s.mustBeReportingOrDisputed(key);
    s.mustBeValidIncidentDate(key, incidentDate);
    s.mustBeAfterReportingPeriod(key);

    bool decision = s.getCoverStatus(key) == CoverUtilV1.CoverStatus.IncidentHappened;

    _resolve(key, incidentDate, decision, false);
  }

emergencyResolve

function emergencyResolve(bytes32 key, uint256 incidentDate, bool decision) external nonpayable nonReentrant 

Arguments

Name Type Description
key bytes32
incidentDate uint256
decision bool
Source Code
function emergencyResolve(
    bytes32 key,
    uint256 incidentDate,
    bool decision
  ) external override nonReentrant {
    s.mustNotBePaused();
    AccessControlLibV1.mustBeGovernanceAdmin(s);
    s.mustBeValidIncidentDate(key, incidentDate);
    s.mustBeAfterReportingPeriod(key);

    _resolve(key, incidentDate, decision, true);
  }

_resolve

function _resolve(bytes32 key, uint256 incidentDate, bool decision, bool emergency) private nonpayable

Arguments

Name Type Description
key bytes32
incidentDate uint256
decision bool
emergency bool
Source Code
function _resolve(
    bytes32 key,
    uint256 incidentDate,
    bool decision,
    bool emergency
  ) private {
    CoverUtilV1.CoverStatus status = decision ? CoverUtilV1.CoverStatus.Claimable : CoverUtilV1.CoverStatus.FalseReporting;

    uint256 claimBeginsFrom = 0; // solhint-disable-line
    uint256 claimExpiresAt = 0;

    if (decision) {
      claimBeginsFrom = block.timestamp + 24 hours; // solhint-disable-line
      claimExpiresAt = claimBeginsFrom + s.getClaimPeriod();

      s.setUintByKeys(ProtoUtilV1.NS_CLAIM_BEGIN_TS, key, claimBeginsFrom);
      s.setUintByKeys(ProtoUtilV1.NS_CLAIM_EXPIRY_TS, key, claimExpiresAt);
    }

    s.setStatus(key, status);

    s.updateStateAndLiquidity(key);

    emit Resolved(key, incidentDate, decision, emergency, claimBeginsFrom, claimExpiresAt);
  }

Contracts