Created
January 5, 2020 22:45
-
-
Save amiller/1fc4d818687a73def5f941eab54cc325 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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