Note: Usually I'd use address aliases, rather than hex addresses, for almost everything. But all of the addresses except the base ens
could change, and ideally should be looked up dynamically with each use. So I'll use hex addresses for everything but that. ENS is not really a convenient application to work with "by hand". sbt-ethereum's ens*
tasks will hopefully be updated soon to make this much easier.
So, let's start with the docs here.
Finding the address of the new registrar is straightforward: look up the owner of the domain 'eth' in ENS, by calling owner(namehash('eth')) on the ENS registry.
namehash("eth") is 0x93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae
. (sbt-ethereum
should surface namehash as a utility. In general, its ens*
tasks need to be updated for the new ENS registrar.)
Make sure we have ens
(the one unchanging contract) set as an address alias.
sbt:ethdocstore> ethAddressAliasCheck ens
The alias 'ens' points to address '0x314159265dd8dbb310642f98f50c066173c1259b'.
If we don't, set that via ethAddressAliasSet ens 0x314159265dd8dbb310642f98f50c066173c1259b
. Kewl.
Next, let's look up the current registrar by finding the owner of the namehash('eth')
. As of this writing (it might someday change again!) that yields...
sbt:ethdocstore> ethTransactionView ens owner 0x93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae
[info] The function 'owner' yields 1 result.
[info] + Result 1 of type 'address' is 0xfac7bea255a6990f749363002136af6556b31e04
[success] Total time: 1 s, completed May 6, 2019 4:29:01 PM
That's the address of the new/current registrar.
However, it's probably a bit easier to work with a controller (which saves us the work of computing the label hash, as we would to register directly with the registrar). According to the docs, we'll want the resolver of the top-level-domain eth
to find that:
sbt:ethdocstore> ethTransactionView ens resolver 0x93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae
[info] The function 'resolver' yields 1 result.
[info] + Result 1 of type 'address' is 0x97683a370239817cf33ec2c2ad3b3a1884571f69
[success] Total time: 1 s, completed May 6, 2019 4:35:37 PM
We'll want to interact with this resolver, so we'll need its ABI. (If you haven't, it's really helpful to set up an Etherscan ABI key, although of course you can copy and paste.)
> ethContractAbiImport 0x97683a370239817cf33ec2c2ad3b3a1884571f69
An Etherscan API key has been set. Would you like to try to import the ABI for this address from Etherscan? [y/n] y
Attempting to fetch ABI for address '0x97683a370239817cf33ec2c2ad3b3a1884571f69' from Etherscan.
ABI found:
[{"outputs":[{"name":"","type":"bool"}],"constant":true,"payable":false,"inputs":[{"name":"interfaceID","type":"bytes4"}],"name":"supportsInterface","stateMutability":"pure","type":"function"},{"outputs":[],"constant":false,"payable":false,"inputs":[{"name":"node","type":"bytes32"},{"name":"key","type":"string"},{"name":"value","type":"string"}],"name":"setText","stateMutability":"nonpayable","type":"function"},{"outputs":[{"name":"","type":"address"}],"constant":true,"payable":false,"inputs":[{"name":"node","type":"bytes32"},{"name":"interfaceID","type":"bytes4"}],"name":"interfaceImplementer","stateMutability":"view","type":"function"},{"outputs":[{"name":"","type":"uint256"},{"name":"","type":"bytes"}],"constant":true,"payable":false,"inputs":[{"name":"node","type":"bytes32"},{"name":"contentTypes","type":"uint256"}],"name":"ABI","stateMutability":"view","type":"function"},{"outputs":[],"constant":false,"payable":false,"inputs":[{"name":"node","type":"bytes32"},{"name":"x","type":"bytes32"},{"name":"y","type":"bytes32"}],"name":"setPubkey","stateMutability":"nonpayable","type":"function"},{"outputs":[],"constant":false,"payable":false,"inputs":[{"name":"node","type":"bytes32"},{"name":"hash","type":"bytes"}],"name":"setContenthash","stateMutability":"nonpayable","type":"function"},{"outputs":[{"name":"","type":"address"}],"constant":true,"payable":false,"inputs":[{"name":"node","type":"bytes32"}],"name":"addr","stateMutability":"view","type":"function"},{"outputs":[{"name":"","type":"string"}],"constant":true,"payable":false,"inputs":[{"name":"node","type":"bytes32"},{"name":"key","type":"string"}],"name":"text","stateMutability":"view","type":"function"},{"outputs":[],"constant":false,"payable":false,"inputs":[{"name":"node","type":"bytes32"},{"name":"contentType","type":"uint256"},{"name":"data","type":"bytes"}],"name":"setABI","stateMutability":"nonpayable","type":"function"},{"outputs":[{"name":"","type":"string"}],"constant":true,"payable":false,"inputs":[{"name":"node","type":"bytes32"}],"name":"name","stateMutability":"view","type":"function"},{"outputs":[],"constant":false,"payable":false,"inputs":[],"name":"renounceOwnership","stateMutability":"nonpayable","type":"function"},{"outputs":[],"constant":false,"payable":false,"inputs":[{"name":"node","type":"bytes32"},{"name":"name","type":"string"}],"name":"setName","stateMutability":"nonpayable","type":"function"},{"outputs":[{"name":"","type":"address"}],"constant":true,"payable":false,"inputs":[],"name":"owner","stateMutability":"view","type":"function"},{"outputs":[{"name":"","type":"bool"}],"constant":true,"payable":false,"inputs":[],"name":"isOwner","stateMutability":"view","type":"function"},{"outputs":[{"name":"","type":"bytes"}],"constant":true,"payable":false,"inputs":[{"name":"node","type":"bytes32"}],"name":"contenthash","stateMutability":"view","type":"function"},{"outputs":[{"name":"x","type":"bytes32"},{"name":"y","type":"bytes32"}],"constant":true,"payable":false,"inputs":[{"name":"node","type":"bytes32"}],"name":"pubkey","stateMutability":"view","type":"function"},{"outputs":[],"constant":false,"payable":false,"inputs":[{"name":"node","type":"bytes32"},{"name":"addr","type":"address"}],"name":"setAddr","stateMutability":"nonpayable","type":"function"},{"outputs":[],"constant":false,"payable":false,"inputs":[{"name":"node","type":"bytes32"},{"name":"interfaceID","type":"bytes4"},{"name":"implementer","type":"address"}],"name":"setInterface","stateMutability":"nonpayable","type":"function"},{"outputs":[],"constant":false,"payable":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"node","type":"bytes32","indexed":true},{"name":"indexedKey","type":"string","indexed":false},{"name":"key","type":"string","indexed":false}],"name":"TextChanged","anonymous":false,"type":"event"},{"inputs":[{"name":"node","type":"bytes32","indexed":true},{"name":"x","type":"bytes32","indexed":false},{"name":"y","type":"bytes32","indexed":false}],"name":"PubkeyChanged","anonymous":false,"type":"event"},{"inputs":[{"name":"node","type":"bytes32","indexed":true},{"name":"name","type":"string","indexed":false}],"name":"NameChanged","anonymous":false,"type":"event"},{"inputs":[{"name":"node","type":"bytes32","indexed":true},{"name":"interfaceID","type":"bytes4","indexed":true},{"name":"implementer","type":"address","indexed":false}],"name":"InterfaceChanged","anonymous":false,"type":"event"},{"inputs":[{"name":"node","type":"bytes32","indexed":true},{"name":"hash","type":"bytes","indexed":false}],"name":"ContenthashChanged","anonymous":false,"type":"event"},{"inputs":[{"name":"node","type":"bytes32","indexed":true},{"name":"a","type":"address","indexed":false}],"name":"AddrChanged","anonymous":false,"type":"event"},{"inputs":[{"name":"node","type":"bytes32","indexed":true},{"name":"contentType","type":"uint256","indexed":true}],"name":"ABIChanged","anonymous":false,"type":"event"},{"inputs":[{"name":"previousOwner","type":"address","indexed":true},{"name":"newOwner","type":"address","indexed":true}],"name":"OwnershipTransferred","anonymous":false,"type":"event"}]
Use this ABI? [y/n] y
[info] A default ABI is now known for the contract at address 0x97683a370239817cf33ec2c2ad3b3a1884571f69
[info] Refreshing caches.
[success] Total time: 6 s, completed May 6, 2019 4:36:52 PM
Now we can follow the directions to find a controller for top level domain eth
, using its namehash as its node ID (computed way above), and the documented four-byte interface ID 0x018fac06
:
> ethTransactionView 0x97683a370239817cf33ec2c2ad3b3a1884571f69 interfaceImplementer 0x93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae 0x018fac06
[info] The function 'interfaceImplementer' yields 1 result.
[info] + Result 1 of type 'address' is 0xf0ad5cad05e10572efceb849f6ff0c68f9700455
[success] Total time: 1 s, completed May 6, 2019 4:41:44 PM
Yay! We have the address of a controller for the top-level eth
domain. Let's be user we have its ABI.
> ethContractAbiImport 0xf0ad5cad05e10572efceb849f6ff0c68f9700455
An Etherscan API key has been set. Would you like to try to import the ABI for this address from Etherscan? [y/n] y
Attempting to fetch ABI for address '0xf0ad5cad05e10572efceb849f6ff0c68f9700455' from Etherscan.
ABI found:
[{"outputs":[{"name":"","type":"bool"}],"constant":true,"payable":false,"inputs":[{"name":"interfaceID","type":"bytes4"}],"name":"supportsInterface","stateMutability":"pure","type":"function"},{"outputs":[],"constant":false,"payable":false,"inputs":[],"name":"withdraw","stateMutability":"nonpayable","type":"function"},{"outputs":[],"constant":false,"payable":false,"inputs":[{"name":"_prices","type":"address"}],"name":"setPriceOracle","stateMutability":"nonpayable","type":"function"},{"outputs":[],"constant":false,"payable":false,"inputs":[],"name":"renounceOwnership","stateMutability":"nonpayable","type":"function"},{"outputs":[],"constant":false,"payable":false,"inputs":[{"name":"_minCommitmentAge","type":"uint256"},{"name":"_maxCommitmentAge","type":"uint256"}],"name":"setCommitmentAges","stateMutability":"nonpayable","type":"function"},{"outputs":[{"name":"","type":"uint256"}],"constant":true,"payable":false,"inputs":[{"name":"","type":"bytes32"}],"name":"commitments","stateMutability":"view","type":"function"},{"outputs":[{"name":"","type":"uint256"}],"constant":true,"payable":false,"inputs":[{"name":"name","type":"string"},{"name":"duration","type":"uint256"}],"name":"rentPrice","stateMutability":"view","type":"function"},{"outputs":[],"constant":false,"payable":true,"inputs":[{"name":"name","type":"string"},{"name":"owner","type":"address"},{"name":"duration","type":"uint256"},{"name":"secret","type":"bytes32"}],"name":"register","stateMutability":"payable","type":"function"},{"outputs":[{"name":"","type":"uint256"}],"constant":true,"payable":false,"inputs":[],"name":"MIN_REGISTRATION_DURATION","stateMutability":"view","type":"function"},{"outputs":[{"name":"","type":"uint256"}],"constant":true,"payable":false,"inputs":[],"name":"minCommitmentAge","stateMutability":"view","type":"function"},{"outputs":[{"name":"","type":"address"}],"constant":true,"payable":false,"inputs":[],"name":"owner","stateMutability":"view","type":"function"},{"outputs":[{"name":"","type":"bool"}],"constant":true,"payable":false,"inputs":[],"name":"isOwner","stateMutability":"view","type":"function"},{"outputs":[{"name":"","type":"bool"}],"constant":true,"payable":false,"inputs":[{"name":"name","type":"string"}],"name":"valid","stateMutability":"view","type":"function"},{"outputs":[],"constant":false,"payable":true,"inputs":[{"name":"name","type":"string"},{"name":"duration","type":"uint256"}],"name":"renew","stateMutability":"payable","type":"function"},{"outputs":[{"name":"","type":"bool"}],"constant":true,"payable":false,"inputs":[{"name":"name","type":"string"}],"name":"available","stateMutability":"view","type":"function"},{"outputs":[{"name":"","type":"uint256"}],"constant":true,"payable":false,"inputs":[],"name":"maxCommitmentAge","stateMutability":"view","type":"function"},{"outputs":[],"constant":false,"payable":false,"inputs":[{"name":"commitment","type":"bytes32"}],"name":"commit","stateMutability":"nonpayable","type":"function"},{"outputs":[],"constant":false,"payable":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","stateMutability":"nonpayable","type":"function"},{"outputs":[{"name":"","type":"bytes32"}],"constant":true,"payable":false,"inputs":[{"name":"name","type":"string"},{"name":"owner","type":"address"},{"name":"secret","type":"bytes32"}],"name":"makeCommitment","stateMutability":"pure","type":"function"},{"inputs":[{"name":"name","type":"string","indexed":false},{"name":"label","type":"bytes32","indexed":true},{"name":"owner","type":"address","indexed":true},{"name":"cost","type":"uint256","indexed":false},{"name":"expires","type":"uint256","indexed":false}],"name":"NameRegistered","anonymous":false,"type":"event"},{"inputs":[{"name":"name","type":"string","indexed":false},{"name":"label","type":"bytes32","indexed":true},{"name":"cost","type":"uint256","indexed":false},{"name":"expires","type":"uint256","indexed":false}],"name":"NameRenewed","anonymous":false,"type":"event"},{"inputs":[{"name":"oracle","type":"address","indexed":true}],"name":"NewPriceOracle","anonymous":false,"type":"event"},{"inputs":[{"name":"previousOwner","type":"address","indexed":true},{"name":"newOwner","type":"address","indexed":true}],"name":"OwnershipTransferred","anonymous":false,"type":"event"},{"payable":false,"inputs":[{"name":"_base","type":"address"},{"name":"_prices","type":"address"},{"name":"_minCommitmentAge","type":"uint256"},{"name":"_maxCommitmentAge","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"}]
Use this ABI? [y/n] y
[info] A default ABI is now known for the contract at address 0xf0ad5cad05e10572efceb849f6ff0c68f9700455
[info] Refreshing caches.
[success] Total time: 4 s, completed May 6, 2019 4:43:39 PM
Okay! Now we have an easy contract we can work with to register names! We will follow the directions here.
First, let's see if the name we want is available.
> ethTransactionView 0xf0ad5cad05e10572efceb849f6ff0c68f9700455 available "coldbrew"
[info] The function 'available' yields 1 result.
[info] + Result 1 of type 'bool' is false
[success] Total time: 0 s, completed May 6, 2019 4:52:40 PM
> ethTransactionView 0xf0ad5cad05e10572efceb849f6ff0c68f9700455 available "omnivorous"
[info] The function 'available' yields 1 result.
[info] + Result 1 of type 'bool' is true
[success] Total time: 0 s, completed May 6, 2019 4:53:11 PM
Hmm. Our first choice is not available. But our second choice, "ominvorous" is. Let's snag it.
Next, we let's check the minimum registration duration:
> ethTransactionView 0xf0ad5cad05e10572efceb849f6ff0c68f9700455 MIN_REGISTRATION_DURATION
[info] The function 'MIN_REGISTRATION_DURATION' yields 1 result.
[info] + Result 1 of type 'uint256' is 2419200
[success] Total time: 1 s, completed May 6, 2019 4:55:47 PM
Kewl. Let's find the rent price for that duration:
> ethTransactionView 0xf0ad5cad05e10572efceb849f6ff0c68f9700455 rentPrice "omnivorous" 2419200
[info] The function 'rentPrice' yields 1 result.
[info] + Result 1 of type 'uint256' is 2218914982274932
[success] Total time: 1 s, completed May 6, 2019 4:58:14 PM
That's 0.022 ETH 0.0022 ETH. The directions recommend paying a 5% - 10% premium, the difference of which will be reimbursed. We'll call it 0.025 ETH. (We, um, overpaid by A LOT, off by a factor of 10, but the difference was refunded. ENS doesn't cheat on the change! I thought the minimum registration period was a year, but it is only 2419200 / (24*60*60) = 28 days
)
Next we need to generate a commitment. The controller has a utility that will do that for us. We need a 32 byte "secret", which will help protect us from people trying to guess the name we mean to register and front-run it. Maybe sbt-ethereum should have a utility for this, but for now we'll just go to a website to give us a random-ish 32 byte string. (If this were a high-value operation, we'd be more private about generating secrets, though!)
> ethTransactionView 0xf0ad5cad05e10572efceb849f6ff0c68f9700455 makeCommitment "omnivorous" default-sender 0xec2ac5eb3d0c2b0ae1815fbd4d7cd59a7367f3404ffa67e7e3577cb15a6a5d75
[info] The function 'makeCommitment' yields 1 result.
[info] + Result 1 of type 'bytes32' is 0xd7b8becc2e8c84946c19846ba76bd3a3d83148a1266ac04b1e668007e1cb736c
[success] Total time: 1 s, completed May 6, 2019 5:06:56 PM
OK. Now we begin actually doing this. We call commit
on the controller with our generated commitment.
> ethTransactionInvoke 0xf0ad5cad05e10572efceb849f6ff0c68f9700455 commit 0xd7b8becc2e8c84946c19846ba76bd3a3d83148a1266ac04b1e668007e1cb736c
[info] Unlocking address '0x465e79b940bc2157e4259ff6b2d92f454497f1e4' (on chain with ID 1, aliases ['default-sender','testing0'])
Enter passphrase or hex private key for address '0x465e79b940bc2157e4259ff6b2d92f454497f1e4': *******************
[info] V3 wallet(s) found for '0x465e79b940bc2157e4259ff6b2d92f454497f1e4' (aliases ['default-sender','testing0'])
==> T R A N S A C T I O N S U B M I S S I O N R E Q U E S T
==>
==> The transaction would be a message with...
==> To: 0xf0ad5cad05e10572efceb849f6ff0c68f9700455 (with aliases ['ens-eth-tld-controller'] on chain with ID 1)
==> From: 0x465e79b940bc2157e4259ff6b2d92f454497f1e4 (with aliases ['default-sender','testing0'] on chain with ID 1)
==> Data: 0xf14fcbc8d7b8becc2e8c84946c19846ba76bd3a3d83148a1266ac04b1e668007e1cb736c
==> Value: 0 Ether
==>
==> The transaction is signed with Chain ID 1 (which correctly matches the current session's 'ethNodeChainId').
==>
==> According to the ABI currently associated with the 'to' address, this message would amount to the following method call...
==> Function called: commit(bytes32)
==> Arg 1 [name=commitment, type=bytes32]: 0xd7b8becc2e8c84946c19846ba76bd3a3d83148a1266ac04b1e668007e1cb736c
==>
==> The nonce of the transaction would be 408.
==>
==> $$$ The transaction you have requested could use up to 53206 units of gas.
==> $$$ You would pay 5 gwei for each unit of gas, for a maximum cost of 0.00026603 ether.
==> $$$ This is worth 0.04655391985 USD (according to Coinbase at 5:08 PM).
Would you like to submit this transaction? [y/n] y
A transaction with hash '0x46828d4061dfc4d2c9ac41a8e6754037490e02e9754c4bc0741c18f28b03ff65' will be submitted. Please wait.
[info] Called function 'commit', with args 'd7b8becc2e8c84946c19846ba76bd3a3d83148a1266ac04b1e668007e1cb736c', sending 0 wei to address '0xf0ad5cad05e10572efceb849f6ff0c68f9700455' in transaction '0x46828d4061dfc4d2c9ac41a8e6754037490e02e9754c4bc0741c18f28b03ff65'.
[info] Waiting for the transaction to be mined (will wait up to 5 minutes).
[info] Transaction Receipt:
[info] Transaction Hash: 0x46828d4061dfc4d2c9ac41a8e6754037490e02e9754c4bc0741c18f28b03ff65
[info] Transaction Index: 49
[info] Transaction Status: SUCCEEDED
[info] Block Hash: 0xd3957380725405739d638e2387d676ed15dbf4e766740733311045cd67788213
[info] Block Number: 7710406
[info] From: 0x465e79b940bc2157e4259ff6b2d92f454497f1e4
[info] To: 0xf0ad5cad05e10572efceb849f6ff0c68f9700455
[info] Cumulative Gas Used: 6861463
[info] Gas Used: 44339
[info] Contract Address: None
[info] Logs: None
[info] Events: None
[success] Total time: 48 s, completed May 6, 2019 5:09:28 PM
Now we have to wait at least a minute (but no more than 24h), then the finally we can register our name.
> ethTransactionInvoke 0xf0ad5cad05e10572efceb849f6ff0c68f9700455 register "omnivorous" default-sender 2419200 0xec2ac5eb3d0c2b0ae1815fbd4d7cd59a7367f3404ffa67e7e3577cb15a6a5d75 0.025 ether
Using sender address '0x465e79b940bc2157e4259ff6b2d92f454497f1e4' (on chain with ID 1, aliases ['default-sender','testing0']). OK? [y/n] y
==> T R A N S A C T I O N S U B M I S S I O N R E Q U E S T
==>
==> The transaction would be a message with...
==> To: 0xf0ad5cad05e10572efceb849f6ff0c68f9700455 (with aliases ['ens-eth-tld-controller'] on chain with ID 1)
==> From: 0x465e79b940bc2157e4259ff6b2d92f454497f1e4 (with aliases ['default-sender','testing0'] on chain with ID 1)
==> Data: 0x85f6d1550000000000000000000000000000000000000000000000000000000000000080000000000000000000000000465e79b940bc2157e4259ff6b2d92f454497f1e4000000000000000000000000000000000000000000000000000000000024ea00ec2ac5eb3d0c2b0ae1815fbd4d7cd59a7367f3404ffa67e7e3577cb15a6a5d75000000000000000000000000000000000000000000000000000000000000000a6f6d6e69766f726f757300000000000000000000000000000000000000000000
==> Value: 0.025 Ether
==>
==> The transaction is signed with Chain ID 1 (which correctly matches the current session's 'ethNodeChainId').
==>
==> According to the ABI currently associated with the 'to' address, this message would amount to the following method call...
==> Function called: register(string,address,uint256,bytes32)
==> Arg 1 [name=name, type=string]: "omnivorous"
==> Arg 2 [name=owner, type=address]: 0x465e79b940bc2157e4259ff6b2d92f454497f1e4
==> Arg 3 [name=duration, type=uint256]: 2419200
==> Arg 4 [name=secret, type=bytes32]: 0xec2ac5eb3d0c2b0ae1815fbd4d7cd59a7367f3404ffa67e7e3577cb15a6a5d75
==>
==> The nonce of the transaction would be 409.
==>
==> $$$ The transaction you have requested could use up to 181833 units of gas.
==> $$$ You would pay 5 gwei for each unit of gas, for a maximum cost of 0.000909165 ether.
==> $$$ This is worth 0.160999484025 USD (according to Coinbase at 5:13 PM).
==> $$$ You would also send 0.025 ether (4.427125 USD), for a maximum total cost of 0.025909165 ether (4.588124484025 USD).
Would you like to submit this transaction? [y/n] y
A transaction with hash '0x463c24c5aef9e8c97fd571c9fa3a9c2de1dd04f8c1da0d3f31245a485cce55f1' will be submitted. Please wait.
[info] Called function 'register', with args '"omnivorous", 465e79b940bc2157e4259ff6b2d92f454497f1e4, 2419200, ec2ac5eb3d0c2b0ae1815fbd4d7cd59a7367f3404ffa67e7e3577cb15a6a5d75', sending 25000000000000000 wei to address '0xf0ad5cad05e10572efceb849f6ff0c68f9700455' in transaction '0x463c24c5aef9e8c97fd571c9fa3a9c2de1dd04f8c1da0d3f31245a485cce55f1'.
[info] Waiting for the transaction to be mined (will wait up to 5 minutes).
[info] Transaction Receipt:
[info] Transaction Hash: 0x463c24c5aef9e8c97fd571c9fa3a9c2de1dd04f8c1da0d3f31245a485cce55f1
[info] Transaction Index: 45
[info] Transaction Status: SUCCEEDED
[info] Block Hash: 0x7ffb7eff66d8516e50f447279ff7e1409a0a4178eec89bbb6cad10367ce9754e
[info] Block Number: 7710424
[info] From: 0x465e79b940bc2157e4259ff6b2d92f454497f1e4
[info] To: 0xf0ad5cad05e10572efceb849f6ff0c68f9700455
[info] Cumulative Gas Used: 7927356
[info] Gas Used: 134292
[info] Contract Address: None
[info] Logs: 0 => EthLogEntry [source=0xfac7bea255a6990f749363002136af6556b31e04] (
[info] topics=[
[info] 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef,
[info] 0x0000000000000000000000000000000000000000000000000000000000000000,
[info] 0x000000000000000000000000465e79b940bc2157e4259ff6b2d92f454497f1e4,
[info] 0xbdd753d3174c6057d4300908f42291e9a9b74047fe6074903970054908887b68
[info] ],
[info] data=
[info] ),
[info] 1 => EthLogEntry [source=0x314159265dd8dbb310642f98f50c066173c1259b] (
[info] topics=[
[info] 0xce0457fe73731f824cc272376169235128c118b49d344817417c6d108d155e82,
[info] 0x93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae,
[info] 0xbdd753d3174c6057d4300908f42291e9a9b74047fe6074903970054908887b68
[info] ],
[info] data=000000000000000000000000465e79b940bc2157e4259ff6b2d92f454497f1e4
[info] ),
[info] 2 => EthLogEntry [source=0xfac7bea255a6990f749363002136af6556b31e04] (
[info] topics=[
[info] 0xb3d987963d01b2f68493b4bdb130988f157ea43070d4ad840fee0466ed9370d9,
[info] 0xbdd753d3174c6057d4300908f42291e9a9b74047fe6074903970054908887b68,
[info] 0x000000000000000000000000465e79b940bc2157e4259ff6b2d92f454497f1e4
[info] ],
[info] data=000000000000000000000000000000000000000000000000000000005cf5b7ec
[info] ),
[info] 3 => EthLogEntry [source=0xf0ad5cad05e10572efceb849f6ff0c68f9700455] (
[info] topics=[
[info] 0xca6abbe9d7f11422cb6ca7629fbf6fe9efb1c621f71ce8f02b9f2a230097404f,
[info] 0xbdd753d3174c6057d4300908f42291e9a9b74047fe6074903970054908887b68,
[info] 0x000000000000000000000000465e79b940bc2157e4259ff6b2d92f454497f1e4
[info] ],
[info] data=0000000000000000000000000000000000000000000000000000000000000060
[info] 0000000000000000000000000000000000000000000000000007b3402479ec1a
[info] 000000000000000000000000000000000000000000000000000000005cf5b7ec
[info] 000000000000000000000000000000000000000000000000000000000000000a
[info] 6f6d6e69766f726f757300000000000000000000000000000000000000000000
[info] )
[info] Events: 0 => Anonymous Event [source=0xfac7bea255a6990f749363002136af6556b31e04],
[info] 1 => Anonymous Event [source=0x314159265dd8dbb310642f98f50c066173c1259b],
[info] 2 => Anonymous Event [source=0xfac7bea255a6990f749363002136af6556b31e04],
[info] 3 => NameRegistered [source=0xf0ad5cad05e10572efceb849f6ff0c68f9700455] (
[info] name (of type string): "omnivorous",
[info] label (of type bytes32): 0xbdd753d3174c6057d4300908f42291e9a9b74047fe6074903970054908887b68,
[info] owner (of type address): 0x465e79b940bc2157e4259ff6b2d92f454497f1e4,
[info] cost (of type uint256): 2167412908223514,
[info] expires (of type uint256): 1559607276
[info] )
[success] Total time: 65 s, completed May 6, 2019 5:14:45 PM
Woohoo! omnivorous.eth
is ours!
> ensOwnerLookup omnivorous.eth
The name 'omnivorous.eth' is owned by address '0x465e79b940bc2157e4259ff6b2d92f454497f1e4' (with aliases ['default-sender','testing0'] on chain with ID 1).
[success] Total time: 1 s, completed May 6, 2019 5:15:52 PM
I hope this helps!