文件 1 的 2:AuthorizedClaimers.sol
pragma solidity ^0.8.23;
import {IAuthorizedClaimers} from "./IAuthorizedClaimers.sol";
contract AuthorizedClaimers is IAuthorizedClaimers {
mapping(address => address) authorizedClaimers;
function authorizeClaimer(address claimer) external {
address currentClaimer = authorizedClaimers[msg.sender];
if (currentClaimer == claimer)
revert AuthorizedClaimers_ClaimerAlreadyAuthorized();
authorizedClaimers[msg.sender] = claimer;
emit AuthorizedClaimerChanged(msg.sender, claimer);
}
function removeAuthorizedClaimer() external {
delete authorizedClaimers[msg.sender];
emit AuthorizedClaimerRemoved(msg.sender);
}
function getAuthorizedClaimer(
address authorizer
) external view returns (address) {
return authorizedClaimers[authorizer];
}
}
文件 2 的 2:IAuthorizedClaimers.sol
pragma solidity ^0.8.23;
interface IAuthorizedClaimers {
error AuthorizedClaimers_ClaimerAlreadyAuthorized();
event AuthorizedClaimerChanged(
address indexed authorizer,
address indexed claimer
);
event AuthorizedClaimerRemoved(address indexed authorizer);
function authorizeClaimer(address claimer) external;
function getAuthorizedClaimer(
address authorizer
) external view returns (address);
function removeAuthorizedClaimer() external;
}
{
"compilationTarget": {
"contracts/src/tokens/river/mainnet/AuthorizedClaimers.sol": "AuthorizedClaimers"
},
"evmVersion": "paris",
"libraries": {},
"metadata": {
"appendCBOR": false,
"bytecodeHash": "none"
},
"optimizer": {
"enabled": true,
"runs": 200
},
"remappings": [
":@openzeppelin/=lib/@openzeppelin/",
":@prb/math/=lib/@prb/math/src/",
":@prb/test/=lib/@prb/test/src/",
":account-abstraction/=lib/account-abstraction/contracts/",
":base64/=lib/base64/",
":ds-test/=lib/ds-test/src/",
":forge-std/=lib/forge-std/src/",
":hardhat-deploy/=lib/hardhat-deploy/"
]
}