Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@amiller
Created January 5, 2020 22:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save amiller/1fc4d818687a73def5f941eab54cc325 to your computer and use it in GitHub Desktop.
Save amiller/1fc4d818687a73def5f941eab54cc325 to your computer and use it in GitHub Desktop.
pragma solidity ^0.5.0;
contract MyContract {
// 0x83CC162a944afA8537DAaDec8f39C88E4B6c4E31 mainnet registry
// mainnet resolver
// 0x12a0083531C904fe4ac490DF231c2e4e4403dB60 ropsten registry
// 0x12299799a50340FB860D276805E78550cBaD3De3 ropsten resolver
ETHRegistrarController registrar = ETHRegistrarController(0x12a0083531C904fe4ac490DF231c2e4e4403dB60);
BaseRegistrar base = BaseRegistrar(0x227Fcb6Ddf14880413EF4f1A3dF2Bbb32bcb29d7);
address constant _resolverAddr = address(0x12299799a50340FB860D276805E78550cBaD3De3);
Resolver _resolver = Resolver(0x12299799a50340FB860D276805E78550cBaD3De3);
address constant _myAddr = address(0x1B326Ad348e19ecFd1406C43D3bF7a95547AC55c);
bytes32 constant _secret = keccak256("hi");
uint constant minimumwei = 767123285644800; // for 28 days, found from etherscan
//string constant _name = "speedruntest3-soc1024";
// minCommitAge: 60 this many timestamp seconds must pass before you can claim commitment
function computeNamehash(string memory _name) public pure returns (bytes32 namehash) {
namehash = 0x0000000000000000000000000000000000000000000000000000000000000000;
namehash = keccak256(
abi.encodePacked(namehash, keccak256(abi.encodePacked('eth')))
);
namehash = keccak256(
abi.encodePacked(namehash, keccak256(abi.encodePacked(_name)))
);
}
function getCommit(string memory name) public view returns(bytes32) {
return makeCommitmentWithConfig(name, address(this), _secret, _resolverAddr, _myAddr);
}
// Send a commitment transaction
function step1(string memory name) public {
bytes32 commit = makeCommitmentWithConfig(name, address(this), _secret, _resolverAddr, _myAddr);
registrar.commit(commit);
}
// Register, set the resolver and address
function step2(string memory name) public payable {
registrar.registerWithConfig.value(minimumwei)(name, address(this), 28 days,
_secret, _resolverAddr, _myAddr);
//_resolver.setText(node, "URL", "https://soc1024.com/");
}
// Transfer ownership
function step3(string memory name) public payable {
bytes32 label = keccak256(bytes(name));
uint256 tokenId = uint256(label);
base.safeTransferFrom(address(this), _myAddr, tokenId);
//_resolver.setText(node, "url", "https://soc1024.com/");
}
function duration() public pure returns(uint) {
return 28 days;
}
function makeCommitmentWithConfig(string memory name, address owner, bytes32 secret, address resolver, address addr) pure public returns(bytes32) {
bytes32 label = keccak256(bytes(name));
if (resolver == address(0) && addr == address(0)) {
return keccak256(abi.encodePacked(label, owner, secret));
}
require(resolver != address(0));
return keccak256(abi.encodePacked(label, owner, resolver, addr, secret));
}
}
contract ETHRegistrarController {
function commit(bytes32 commitment) public;
function registerWithConfig(string memory name, address owner, uint duration,
bytes32 secret, address resolver, address addr) public payable;
}
interface Resolver {
function setText(bytes32 node, string calldata key, string calldata value) external;
}
interface BaseRegistrar {
function safeTransferFrom(address from, address to, uint256 tokenId) external;
function setOwner(bytes32 node, address owner) external;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment