编译器
0.8.12+commit.f00d7308
文件 1 的 3:ETHBulkRegistrar.sol
pragma solidity >=0.8.4;
import "./IETHBulkRegistrar.sol";
import "./IETHRegistrarController.sol";
contract ETHBulkRegistrar is IETHBulkRegistrar {
IETHRegistrarController public immutable registrarController;
constructor(IETHRegistrarController _registrarController) {
registrarController = _registrarController;
}
function bulkRentPrice(string[] calldata names, uint256 duration) external view override returns (uint256 total) {
for (uint256 i = 0; i < names.length; i++) {
uint price = registrarController.rentPrice(names[i], duration);
total += price;
}
return total;
}
function bulkMakeCommitment(string[] calldata name, address owner, bytes32 secret) external view override returns (bytes32[] memory commitmentList) {
commitmentList = new bytes32[](name.length);
for (uint256 i = 0; i < name.length; i++) {
commitmentList[i] = registrarController.makeCommitmentWithConfig(name[i], owner, secret, address(0), address(0));
}
return commitmentList;
}
function commitments(bytes32 commit) external view override returns (uint256) {
return registrarController.commitments(commit);
}
function bulkCommit(bytes32[] calldata commitmentList) external override {
for (uint256 i = 0; i < commitmentList.length; i++) {
registrarController.commit(commitmentList[i]);
}
}
function bulkRegister(string[] calldata names, address owner, uint duration, bytes32 secret) external payable override {
uint256 cost = 0;
for (uint256 i = 0; i < names.length; i++) {
uint price = registrarController.rentPrice(names[i], duration);
registrarController.register{value: (price)}(names[i], owner, duration, secret);
cost = cost + price;
}
if (msg.value > cost) {
(bool sent, ) = msg.sender.call{value: msg.value - cost}("");
require(sent, "Failed to send Ether");
}
}
function bulkRenew(string[] calldata names, uint duration) external payable override {
uint256 cost = 0;
for (uint256 i = 0; i < names.length; i++) {
uint price = registrarController.rentPrice(names[i], duration);
registrarController.renew{value: (price)}(names[i], duration);
cost = cost + price;
}
if (msg.value > cost) {
(bool sent, ) = msg.sender.call{value: msg.value - cost}("");
require(sent, "Failed to send Ether");
}
}
function registerWithConfig(string calldata name, address owner, uint duration, bytes32 secret, address resolver, address addr) external payable override {
uint cost = registrarController.rentPrice(name, duration);
registrarController.registerWithConfig{value: cost}(name, owner, duration, secret, resolver, addr);
if (msg.value > cost) {
(bool sent, ) = msg.sender.call{value: msg.value - cost}("");
require(sent, "Failed to send Ether");
}
}
function makeCommitmentWithConfig(string calldata name, address owner, bytes32 secret, address resolver, address addr) external view override returns (bytes32 commitment) {
commitment = registrarController.makeCommitmentWithConfig(name, owner, secret, resolver, addr);
return commitment;
}
}
文件 2 的 3:IETHBulkRegistrar.sol
pragma solidity >=0.8.4;
interface IETHBulkRegistrar {
function bulkRentPrice(string[] calldata names, uint256 duration) external view returns (uint256 total);
function bulkRegister(string[] calldata names, address owner, uint duration, bytes32 secret) external payable;
function bulkRenew(string[] calldata names, uint duration) external payable;
function bulkCommit(bytes32[] calldata commitments) external;
function bulkMakeCommitment(string[] calldata name, address owner, bytes32 secret) external view returns (bytes32[] memory commitments);
function commitments(bytes32 commit) external view returns (uint256);
function registerWithConfig(string calldata name, address owner, uint duration, bytes32 secret, address resolver, address addr) external payable;
function makeCommitmentWithConfig(string calldata name, address owner, bytes32 secret, address resolver, address addr) external view returns (bytes32);
}
文件 3 的 3:IETHRegistrarController.sol
pragma solidity >=0.8.4;
interface IETHRegistrarController {
function rentPrice(string memory, uint) external view returns (uint);
function available(string memory) external returns (bool);
function commit(bytes32) external;
function register(string calldata, address, uint256, bytes32) external payable;
function registerWithConfig(string memory, address, uint256, bytes32, address, address) external payable;
function makeCommitmentWithConfig(string memory, address, bytes32, address, address) external pure returns (bytes32);
function renew(string calldata, uint256) external payable;
function commitments(bytes32) external view returns (uint256);
}
{
"compilationTarget": {
"contracts/bulk/ETHBulkRegistrar.sol": "ETHBulkRegistrar"
},
"evmVersion": "london",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs",
"useLiteralContent": true
},
"optimizer": {
"enabled": true,
"runs": 10000
},
"remappings": []
}
[{"inputs":[{"internalType":"contract IETHRegistrarController","name":"_registrarController","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"bytes32[]","name":"commitmentList","type":"bytes32[]"}],"name":"bulkCommit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string[]","name":"name","type":"string[]"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"bytes32","name":"secret","type":"bytes32"}],"name":"bulkMakeCommitment","outputs":[{"internalType":"bytes32[]","name":"commitmentList","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string[]","name":"names","type":"string[]"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"bytes32","name":"secret","type":"bytes32"}],"name":"bulkRegister","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"string[]","name":"names","type":"string[]"},{"internalType":"uint256","name":"duration","type":"uint256"}],"name":"bulkRenew","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"string[]","name":"names","type":"string[]"},{"internalType":"uint256","name":"duration","type":"uint256"}],"name":"bulkRentPrice","outputs":[{"internalType":"uint256","name":"total","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"commit","type":"bytes32"}],"name":"commitments","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"bytes32","name":"secret","type":"bytes32"},{"internalType":"address","name":"resolver","type":"address"},{"internalType":"address","name":"addr","type":"address"}],"name":"makeCommitmentWithConfig","outputs":[{"internalType":"bytes32","name":"commitment","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"bytes32","name":"secret","type":"bytes32"},{"internalType":"address","name":"resolver","type":"address"},{"internalType":"address","name":"addr","type":"address"}],"name":"registerWithConfig","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"registrarController","outputs":[{"internalType":"contract IETHRegistrarController","name":"","type":"address"}],"stateMutability":"view","type":"function"}]