// File: contracts/Whitelister.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.6.12;
interface SupportsWhitelisting {
function addToWhiteList(address account) external;
}
contract Whitelister {
SupportsWhitelisting private target_contract;
address private backend;
constructor (address _target, address _backend) public {
target_contract = SupportsWhitelisting(_target);
backend = _backend;
}
function ecrecover1(bytes32 msgHash, bytes32 r, bytes32 s, uint8 v) public pure returns (address ret) {
ret = ecrecover(msgHash, v, r, s);
}
function submit(bytes32 r, bytes32 s, uint8 v) external {
bytes32 assertion = keccak256(abi.encodePacked(msg.sender));
require(ecrecover(assertion, v, r, s) == backend);
target_contract.addToWhiteList(msg.sender);
}
}
{
"compilationTarget": {
"browser/Whitelister.sol": "Whitelister"
},
"evmVersion": "istanbul",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": true,
"runs": 200
},
"remappings": []
}
[{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"address","name":"_backend","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"bytes32","name":"msgHash","type":"bytes32"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint8","name":"v","type":"uint8"}],"name":"ecrecover1","outputs":[{"internalType":"address","name":"ret","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint8","name":"v","type":"uint8"}],"name":"submit","outputs":[],"stateMutability":"nonpayable","type":"function"}]