Was ist der globale Registrar?

Ein Typ auf reddit hat eine Adresse mit 235 ETH in seiner Brieftasche gefunden. Er war verwirrt darüber, wie er es geschafft hatte, so viel ETH zu bekommen. Kommentatoren sagten ihm, dass es sich um das globale Registrar-Objekt handele .

Hier ist ein interessanter Ausschnitt seiner Befehlszeilenausgabe :

namereg: {
    address: "0xc6d9d2cd449a754c494264e1809c50e34d64562b",
    AuctionEnded: function(),
    Changed: function(),
    NewBid: function(),
    PrimaryChanged: function(),
    Registrar: function(),
    addr: function(),
    allEvents: function(),
    content: function(),
    disown: function(),
    name: function(),
    owner: function(),
    reserve: function(),
    setAddress: function(),
    setContent: function(),
    setSubRegistrar: function(),
    subRegistrar: function(),
    transfer: function()
}

Was ist namereg? Was ist der globale Registrar ?

Antworten (3)

Der Global Registrar scheint bereits fest in Geth codiert zu sein.

beefee@Kumquat:~$ geth console
I0330 00:29:31.337735    8794 database.go:71] Alloted 16MB cache to /home/beefee/.ethereum/chaindata
...
at block: 1235423 (Tue, 29 Mar 2016 10:10:53 AEDT)
modules: admin:1.0 db:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 shh:1.0 txpool:1.0 web3:1.0
> registrar
{
  address: "0x33990122638b9132ca29c723bdf037f1a891a70c",
  Changed: function(),
  PrimaryChanged: function(),
  Registrar: function(),
  addr: function(),
  allEvents: function(),
  content: function(),
  disown: function(),
  name: function(),
  owner: function(),
  register: function(),
  reserve: function(),
  setAddress: function(),
  setContent: function(),
  setSubRegistrar: function(),
  subRegistrar: function(),
  transfer: function()
}
> registrar.addr("BeefPool.net")
"0xbeef281b81d38096cd8b1d8f69f77be100000000"
> registrar.owner("BeefPool.net")
"0xbeef281b81d383336aca8b2b067a526227638087"

Die Antwort 5chdn scheint einen ungültigen Global Registrar zu geben.

// Using the default hard-coded registrar
> registrar.addr("ethpool")
"0x4bb96091ee9d802ed039c4d1a5f6216f90f81b01"
// Invalid Global Registrar from 5chdn
> registrar = GlobalRegistrar.at('0xc6d9d2cd449a754c494264e1809c50e34d64562b');
{
  address: "0xc6d9d2cd449a754c494264e1809c50e34d64562b",
  Changed: function(),
  PrimaryChanged: function(),
  Registrar: function(),
  addr: function(),
  allEvents: function(),
  content: function(),
  disown: function(),
  name: function(),
  owner: function(),
  register: function(),
  reserve: function(),
  setAddress: function(),
  setContent: function(),
  setSubRegistrar: function(),
  subRegistrar: function(),
  transfer: function()
}
> registrar.addr("ethpool")
"0x"

Auch von https://github.com/ethereum/go-ethereum/blob/master/common/registrar/registrar.go#L56-L63 :

  GlobalRegistrarAddr = "0x33990122638b9132ca29c723bdf037f1a891a70c" // frontier
  HashRegAddr         = "0x23bf622b5a65f6060d855fca401133ded3520620" // frontier
  UrlHintAddr         = "0x73ed5ef6c010727dfd2671dbb70faac19ec18626" // frontier

Hier sind sie:

https://live.ether.camp/account/33990122638b9132ca29c723bdf037f1a891a70c https://live.ether.camp/account/23bf622b5a65f6060d855fca401133ded3520620 https://live.ether.camp/account/73ed5ef6c.181dfa061dbbd76ac.fa061dfc

In geth-1.4.6bekomme ich sowohl für nameregals auch einen ReferenceError registrar. Hat sich das mit den letzten beiden Geth-Versionen geändert oder was?

Ein Namereg-Vertrag ermöglicht die Verknüpfung von für Menschen verständlichen Namen mit für Menschen nicht verständlichen Daten. Einer der Anwendungsfälle ist die Erstellung eines globalen Adressbuchs für Ethereum-Adressen. Unter Verwendung eines Namereg-Vertrags kann man Ether an „5chdn“ statt an „0x<some hex value>“ senden. Man kann auch Dinge wie IPFS-Hashes registrieren, was es einem erlaubt, es als dezentralisiertes DNS für ein dezentralisiertes Web zu verwenden.

Der globale Registrar ist ein gemeinsam genutzter Namereg-Vertrag, der (so wie ich es verstehe) standardmäßig in benutzerfreundliche Clients wie Mist integriert wird.

Update: Beachten Sie, dass dies der Testnet-Registrar ist!

Cool, zusätzlich zu der anderen Antwort ist es bereits implementiert. Um das zu testen , geben Sie in Ihre Geth-Konsole ein:

registrar = GlobalRegistrar.at('0xc6d9d2cd449a754c494264e1809c50e34d64562b');

So richten Sie Ihren eigenen Namen ein und testen ihn:

registrar.reserve.sendTransaction('5chdn', {from: eth.accounts[0]});
registrar.setAddress.sendTransaction('5chdn', eth.accounts[0], true, {from: eth.accounts[0]});

Testen Sie, ob Sie "5chdn" in Ihre Ethereum-Adresse auflösen können:

registrar.addr('5chdn');

Wenn Ihnen jetzt jemand Ether schicken möchte, müssen Sie nur dies tun:

eth.sendTransaction({from: eth.accounts[0], to: registrar.addr('5chdn'), value: web3.toWei(1, 'ether'), gas: 21000});

Sie müssen die GlobalRegistrar.at()Zeile jedes Mal ausführen, wenn Sie geth starten, bis dies fest codiert ist.

Sie können den zweiten Parameter .setAddress()oben auch durch die Adresse eines Vertrags ersetzen, um ihn beim Namen zu nennen.

Registrar.addr('5chdn'); gibt "0x" für mich zurück, ist das richtig?
Es scheint, dass dies der Testnet-Registrar ist, oops :-)