Create proposal and interfaces
This commit is contained in:
parent
a972fbf8e5
commit
135fbdf043
@ -1,7 +0,0 @@
|
|||||||
// SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
pragma solidity ^0.8.19;
|
|
||||||
|
|
||||||
contract ExampleProposal {
|
|
||||||
function executeProposal() public { /* ... */ }
|
|
||||||
}
|
|
50
src/Proposal.sol
Normal file
50
src/Proposal.sol
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
pragma solidity ^0.8.19;
|
||||||
|
|
||||||
|
import { IStakingRewards } from "@interfaces/IStakingRewards.sol";
|
||||||
|
import { IRelayerRegistry } from "@interfaces/IRelayerRegistry.sol";
|
||||||
|
|
||||||
|
contract PenalisationProposal {
|
||||||
|
address constant _registryAddress = 0x58E8dCC13BE9780fC42E8723D8EaD4CF46943dF2;
|
||||||
|
address constant _stakingAddress = 0x5B3f656C80E8ddb9ec01Dd9018815576E9238c29;
|
||||||
|
|
||||||
|
function getCheatingRelayersBalanceSum(address[7] memory cheatingRelayers) public returns (uint256) {
|
||||||
|
uint256 balanceSum;
|
||||||
|
for (uint8 i = 0; i < cheatingRelayers.length; i++) {
|
||||||
|
balanceSum += IRelayerRegistry(_registryAddress).getRelayerBalance(cheatingRelayers[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return balanceSum;
|
||||||
|
}
|
||||||
|
|
||||||
|
function nullifyRelayersBalance(address[7] memory cheatingRelayers) internal {
|
||||||
|
IRelayerRegistry relayerRegistry = IRelayerRegistry(_registryAddress);
|
||||||
|
|
||||||
|
for (uint8 i = 0; i < cheatingRelayers.length; i++) {
|
||||||
|
relayerRegistry.nullifyBalance(cheatingRelayers[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function executeProposal() public {
|
||||||
|
address[7] memory cheatingRelayers = [
|
||||||
|
0x5007565e69E5c23C278c2e976beff38eF4D27B3d, // official-tornado.eth
|
||||||
|
0x065f2A0eF62878e8951af3c387E4ddC944f1B8F4, // 0xtorn365.eth
|
||||||
|
0x18F516dD6D5F46b2875Fd822B994081274be2a8b, // torn69.eth
|
||||||
|
0x30F96AEF199B399B722F8819c9b0723016CEAe6C, // moon-relayer.eth
|
||||||
|
0xa42303EE9B2eC1DB7E2a86Ed6C24AF7E49E9e8B9, // relayer-tornado.eth
|
||||||
|
0x2ffAc4D796261ba8964d859867592B952b9FC158, // safe-tornado.eth
|
||||||
|
0xCEdac436cEA98E93F471331eCC693fF41D730921 // relayer-secure.eth
|
||||||
|
];
|
||||||
|
|
||||||
|
uint256 nullifiedTotalAmount = getCheatingRelayersBalanceSum(cheatingRelayers);
|
||||||
|
|
||||||
|
nullifyRelayersBalance(cheatingRelayers);
|
||||||
|
|
||||||
|
IStakingRewards(_stakingAddress).withdrawTorn(nullifiedTotalAmount);
|
||||||
|
|
||||||
|
// Burn compensation from cheating relayer abracadabra-money-gone.eth - 67.8 TORN
|
||||||
|
// https://etherscan.io/tx/0xdb15a8bbb808cdbe88883fcc99d5aeab84ae544cdb51c2b5acdd8e9489c0e418
|
||||||
|
IStakingRewards(_stakingAddress).addBurnRewards(678 * 1e17);
|
||||||
|
}
|
||||||
|
}
|
@ -1,84 +0,0 @@
|
|||||||
// SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
pragma solidity ^0.8.19;
|
|
||||||
|
|
||||||
interface IGnosisSafe {
|
|
||||||
enum Operation {
|
|
||||||
Call,
|
|
||||||
DelegateCall
|
|
||||||
}
|
|
||||||
|
|
||||||
function NAME() external view returns (string memory);
|
|
||||||
|
|
||||||
function VERSION() external view returns (string memory);
|
|
||||||
|
|
||||||
function nonce() external view returns (uint256);
|
|
||||||
|
|
||||||
function domainSeparator() external view returns (bytes32);
|
|
||||||
|
|
||||||
function signedMessages(bytes32) external view returns (uint256);
|
|
||||||
|
|
||||||
function approvedHashes(address, bytes32) external view returns (uint256);
|
|
||||||
|
|
||||||
function setup(
|
|
||||||
address[] calldata _owners,
|
|
||||||
uint256 _threshold,
|
|
||||||
address to,
|
|
||||||
bytes calldata data,
|
|
||||||
address fallbackHandler,
|
|
||||||
address paymentToken,
|
|
||||||
uint256 payment,
|
|
||||||
address payable paymentReceiver
|
|
||||||
) external;
|
|
||||||
|
|
||||||
function execTransaction(
|
|
||||||
address to,
|
|
||||||
uint256 value,
|
|
||||||
bytes calldata data,
|
|
||||||
Operation operation,
|
|
||||||
uint256 safeTxGas,
|
|
||||||
uint256 baseGas,
|
|
||||||
uint256 gasPrice,
|
|
||||||
address gasToken,
|
|
||||||
address payable refundReceiver,
|
|
||||||
bytes calldata signatures
|
|
||||||
) external returns (bool success);
|
|
||||||
|
|
||||||
function requiredTxGas(address to, uint256 value, bytes calldata data, Operation operation)
|
|
||||||
external
|
|
||||||
returns (uint256);
|
|
||||||
|
|
||||||
function approveHash(bytes32 hashToApprove) external;
|
|
||||||
|
|
||||||
function signMessage(bytes calldata _data) external;
|
|
||||||
|
|
||||||
function isValidSignature(bytes calldata _data, bytes calldata _signature) external returns (bytes4);
|
|
||||||
|
|
||||||
function getMessageHash(bytes memory message) external view returns (bytes32);
|
|
||||||
|
|
||||||
function encodeTransactionData(
|
|
||||||
address to,
|
|
||||||
uint256 value,
|
|
||||||
bytes memory data,
|
|
||||||
Operation operation,
|
|
||||||
uint256 safeTxGas,
|
|
||||||
uint256 baseGas,
|
|
||||||
uint256 gasPrice,
|
|
||||||
address gasToken,
|
|
||||||
address refundReceiver,
|
|
||||||
uint256 _nonce
|
|
||||||
) external view returns (bytes memory);
|
|
||||||
|
|
||||||
function getTransactionHash(
|
|
||||||
address to,
|
|
||||||
uint256 value,
|
|
||||||
bytes memory data,
|
|
||||||
Operation operation,
|
|
||||||
uint256 safeTxGas,
|
|
||||||
uint256 baseGas,
|
|
||||||
uint256 gasPrice,
|
|
||||||
address gasToken,
|
|
||||||
address refundReceiver,
|
|
||||||
uint256 _nonce
|
|
||||||
) external view returns (bytes32);
|
|
||||||
}
|
|
@ -43,6 +43,7 @@ interface IGovernance {
|
|||||||
function VOTING_PERIOD() external view returns (uint256);
|
function VOTING_PERIOD() external view returns (uint256);
|
||||||
function CLOSING_PERIOD() external view returns (uint256);
|
function CLOSING_PERIOD() external view returns (uint256);
|
||||||
function VOTE_EXTEND_TIME() external view returns (uint256);
|
function VOTE_EXTEND_TIME() external view returns (uint256);
|
||||||
|
function userVault() external view returns (address);
|
||||||
function torn() external view returns (address);
|
function torn() external view returns (address);
|
||||||
function proposals(uint256 index) external view returns (Proposal memory);
|
function proposals(uint256 index) external view returns (Proposal memory);
|
||||||
function lockedBalance(address account) external view returns (uint256);
|
function lockedBalance(address account) external view returns (uint256);
|
||||||
|
9
src/interfaces/IRelayerRegistry.sol
Normal file
9
src/interfaces/IRelayerRegistry.sol
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
pragma solidity ^0.8.19;
|
||||||
|
|
||||||
|
interface IRelayerRegistry {
|
||||||
|
function getRelayerBalance(address relayer) external returns (uint256);
|
||||||
|
|
||||||
|
function nullifyBalance(address relayer) external;
|
||||||
|
}
|
11
src/interfaces/IStakingRewards.sol
Normal file
11
src/interfaces/IStakingRewards.sol
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
pragma solidity ^0.8.19;
|
||||||
|
|
||||||
|
interface IStakingRewards {
|
||||||
|
function withdrawTorn(uint256 amount) external;
|
||||||
|
|
||||||
|
function addBurnRewards(uint256 amount) external;
|
||||||
|
|
||||||
|
function checkReward(address account) external view returns (uint256);
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user