Woher weiß EtherScan, dass ich an ein Shapeshift/Poloniex-Wallet sende?

Ich habe viele Transaktionen auf Etherscan bemerkt, die darauf hindeuten, dass eine der Parteien eine bestimmte Art von Wallet ist (z. B. Poloniex oder Shapeshift). Hier ist ein Beispiel.

Wie identifiziert es die Quelle? Registrieren diese Börsen ihre Adressen öffentlich (z. B. auf IPFS oder mit einer API)?

Bearbeiten : Klärung meiner Frage anhand eines Beispiels: Nehmen wir an, Shapeshift führt heute 10.000 Transaktionen durch. Das würde dazu führen, dass 10.000 Adressen generiert werden. Ich würde hoffen , dass es keine Möglichkeit gibt, das Format dieser Adressen zu steuern (da es sich um SHA3-Hashes handelt), also bleiben uns 10.000 zufällige Adresszeichenfolgen. Wie werden diese 10.000 einzelnen Adressen bei Etherscan registriert? Es fällt mir schwer zu glauben, dass es sich um einen manuellen Prozess handelt (dies würde einen Vollzeitjob für mehrere Personen darstellen) und ich würde vermuten, dass es eine Art öffentliche Nachschlagetabelle gibt oder dass sie eine Etherscan-API aufrufen, aber ich habe noch nie eine gesehen Dokumentation so oder so.

Könnten Sie in Bezug auf Ihre Bearbeitung bestätigen, dass Sie über Adresszeichenfolgen in Form von "0x1234abcd ... fedc" und nicht über einen Namen wie "joesaddress" sprechen?
Mit "Adresse" beziehe ich mich auf die Ethereum-Adresse (eine Hash-Zeichenfolge). Mit „registrieren“ meine ich den Prozess der Zuordnung einer Ethereum-Adresse zu einem Namen (z. B. „Poloniex Wallet“).

Antworten (2)

Wenn Sie den Namen neben der Adresse sehen, ist es ein manueller Prozess, eine Textzeichenfolge mit dieser Adresse zu verknüpfen. So einfach ist das. Sie haben ein Metadatenfeld, das sie jeder Adresse hinzufügen können. Dieser Prozess erfolgt nicht über eine API oder über das gesamte Ethereum-Netzwerk. Jeder Blockchain-Explorer (etherscan, etherchain und live.ether.camp) macht es anders und hat unterschiedliche Konten gekennzeichnet.

Da Sie meine Antwort nicht für richtig zu halten scheinen, ist hier die Antwort von EtherScan :

Senden Sie Links zu Ihrer offiziellen Website im Kommentarbereich und überprüfen Sie den Quellcode Ihres Vertrags.. und warten Sie dann :-)

Nachdem ich diese Frage beantwortet hatte, wollte ich mich vergewissern, dass sie richtig war, also kommentierte ich die Adresse des Spendenkontos von MyEtherWallet . Ein paar Tage später hat Matt @ EtherScan meinen Kommentar positiv bewertet und jetzt haben wir ein Tag.

Außerdem sind nicht alle Adressen auf Shapeshift aufgeführt. Ich habe mir gerade eines meiner Konten angesehen und die eindeutige Adresse, an die ich die ETH gesendet habe, ist nicht als Shapeshift gekennzeichnet.

Die Adresse, von der ETH gesendet wurde (in diesem Fall habe ich nicht die richtige Menge an ETH, also wurde sie mir zurückgegeben), ist mit folgender Bezeichnung versehen: http://etherscan.io/address/0x120a270bbc009644e35f0bb6ab13f95b8199c4ad

Dies scheint ihre Ethereum Hot Wallet zu sein (obwohl sich dies höchstwahrscheinlich aufgrund der Sicherheitsverletzung am 4/7 ändert) und kann daher leicht gekennzeichnet werden. Ich habe mich umgesehen und konnte keine anderen Adressen mit der Bezeichnung Shapeshift finden, daher denke ich, dass Ihre Annahme, dass jede Adresse, die ShapeShift in der Bezeichnung Shapeshift generiert, falsch ist.

Okay, die manuelle Eingabe ist definitiv sinnvoller, wenn ShapeShift Adressen wiederverwendet und Etherscan nicht alle einmaligen Wegwerfadressen markiert. Tut mir leid, ein Zweifler zu sein; Ich wollte nur eine Art offizielles Wort dazu sehen, weil mir das alles sehr mysteriös vorkam.

Woher weiß EtherScan, dass ich an ein Shapeshift/Poloniex-Wallet sende?

Die kurze Antwort lautet, dass die Details From:und To:Brieftaschen (auch bekannt als Konto oder Adresse) zusammen mit der Transaktion im gesamten Ethereum-Netzwerk gesendet werden und EtherScan einen Tap (Knoten) in das Netzwerk hat.

Die lange Antwort folgt:

  • Jeder Computer, der Transaktionen vom/an das Ethereum-Netzwerk empfangen oder senden möchte, würde entweder einen Ethereum-Knoten betreiben oder eine Verbindung zu einem Ethereum-Knoten haben.

  • Die Hauptknotensoftware von Ethereum ist geth, die offizielle Go- Sprachimplementierung des Ethereum-Protokolls. Weitere Informationen finden Sie auf ethereum.github.io und den Quellcode auf github .

  • EtherScan würde einen Ethereum-Knoten betreiben.

  • Eine Transaktion wird an das Ethereum-Netzwerk gesendet, indem der sendTransactionAufruf verwendet wird, wie in Verträge und Transaktionen dokumentiert . Der folgende Befehl wird direkt in gethoder über eine Anwendungsprogrammierschnittstelle (API) ausgeführt:

    eth.sendTransaction({from: '0x036a03fc47084741f83938296a1c8ef67f6e34fa', to: '0xa8ade7feab1ece71446bed25fa0cf6745c19c3d5', value: web3.toWei(1, "ether")})
    
  • Die Knotensoftware sendet dann diese unbestätigte Transaktion an die anderen Knoten, mit denen sie verbunden ist. Diese Knoten senden dann dieselbe Transaktion an die Knoten, mit denen sie verbunden sind. Die Transaktion erreicht schließlich die meisten, wenn nicht alle Knoten im Ethereum-Netzwerk.

  • Da EtherScan einen Ethereum-Knoten ausführt, erhält er eine Kopie der unbestätigten Transaktion. Sie können die Liste der Transaktionen auf der rechten Seite der EtherScan-Hauptseite und einen Link zu PendingTxns anzeigen .

  • Hier ist ein Beispiel einer unbestätigten Transaktion von der EtherScan- Website – das Block HeightFeld ist markiert (Ausstehend). Beachten Sie, dass die From:und To:-Adressen in der Transaktion angegeben werden:Ausstehende Transaktion 0xb68c6c0c1af99b0e08e05e768523256bbc2e6c2896f6cb7eb9ed5042dc2232c3

  • Einige der Knoten im Ethereum-Netzwerk sind Mining-Knoten. Jeder dieser Mining-Knoten empfängt die unbestätigten Transaktionen, die über das Ethereum-Netzwerk verbreitet werden, und verpackt sie in Blöcke. Die Mining-Knoten versuchen dann, eine rechenintensive Berechnung zu lösen, um ein mathematisches Problem zu lösen.

  • Der erste Mining-Node, der das mathematische Problem löst, verpackt den gelösten Block inklusive der nun bestätigten Transaktion an die restlichen Nodes im Ethereum-Netzwerk. Der Miner erhält eine Blockbelohnung für das „Gewinnen“ dieses Blocks.

  • EtherScan als einer der Knoten im Netzwerk erhält diesen Block einschließlich der nun bestätigten Transaktion. Sie finden die Liste der Blöcke auf der linken Seite der EtherScan-Website. Hier ist dieselbe unbestätigte Transaktion, die jetzt als bestätigte Transaktion auf EtherScan angezeigt wird:Bestätigte Transaktion 0xb68c6c0c1af99b0e08e05e768523256bbc2e6c2896f6cb7eb9ed5042dc2232c3



Wie identifiziert es die Quelle? Die Quelladresse befindet sich im From:Feld in der gesendeten Transaktion.



Registrieren diese Börsen ihre Adressen öffentlich (z. B. auf IPFS oder mit einer API)?

Nein. Aber damit Sie den Namen Poloniex neben der Adresse des Poloniex sehen können, mussten sie ihren Namen bei EtherScan registrieren – siehe Wie kann ich meinen Namen neben der Adresse auf Etherscan hinzufügen? .



Aber erstellt Shapeshift nicht generell für jede Transaktion eine neue Adresse?

Wenn Sie ShapeShift-Bitcoins zur Umwandlung in Ether senden, erstellt SS eine Bitcoin-Adresse, an die Sie Ihre Bitcoins senden können. Die Ether würden an Ihre angegebene Ethereum-Adresse gesendet.

Wenn Sie SS-Ether senden, um sie in Bitcoins umzuwandeln, erstellt SS eine neue Ethereum-Adresse, an die Sie Ihre Ether senden können. Die Bitcoins werden dann an Ihre angegebene Bitcoin-Adresse gesendet.



Gibt es eine Art API, die diese Börsen für jede neue Adresse aufrufen, die nicht in den Etherscan-Dokumenten aufgeführt ist?

Wie Konten erstellt werden

Die Konten wurden alle zu einem bestimmten Zeitpunkt mit einer der Ethereum-Knotensoftware erstellt, höchstwahrscheinlich geth. Der Befehl gethzum Erstellen eines Kontos (siehe Antwort von Deploying the Greeter contract via the geth CLI is not registering in my private blockchain ) folgt:

user@Kumquat:~/ESE/Deploy$ geth account new
Your new account is locked with a password. Please give a password. Do not forget this password.
Passphrase: 
Repeat Passphrase: 
Address: {730b87e78b07fb2bf1b1e8b127b3353d08d72706}

Programmgesteuert kann die Kontoerstellung gethmit dem folgenden Befehl ausgeführt werden:

personal.newAccount("passphrase")

Dieser Befehl kann in eine API wie die standardmäßige JSON-RPC - API von Ethereum eingeschlossen werden, ist jedoch nicht auf Sicherheitsüberlegungen zurückzuführen.

Weitere Einzelheiten zur Kontoerstellung finden Sie unter Verwalten Ihrer Konten .


Der gethCode zum Erstellen von Konten

Den gethCode zum Erstellen neuer Konten finden Sie unter accounts/account_manager.go :

func (am *Manager) NewAccount(auth string) (Account, error) {
    key, err := am.keyStore.GenerateNewKey(crand.Reader, auth)
    if err != nil {
            return Account{}, err
    }
    return Account{Address: key.Address}, nil
}

Was wiederum crypto/key_store_passphrase.go aufruft , das die Magie der Kontoerstellung bewirkt:

func (ks keyStorePassphrase) GenerateNewKey(rand io.Reader, auth string) (key *Key, err error) {
    return GenerateNewKeyDefault(ks, rand, auth)
}



Wie werden diese 10.000 einzelnen Adressen bei Etherscan registriert?

Bearbeiten: Klärung meiner Frage anhand eines Beispiels: Nehmen wir an, Shapeshift führt heute 10.000 Transaktionen durch. Das würde dazu führen, dass 10.000 Adressen generiert werden. Ich würde hoffen, dass es keine Möglichkeit gibt, das Format dieser Adressen zu steuern (da es sich um SHA3-Hashes handelt), also bleiben uns 10.000 zufällige Adresszeichenfolgen. Wie werden diese 10.000 einzelnen Adressen bei Etherscan registriert? Es fällt mir schwer zu glauben, dass es sich um einen manuellen Prozess handelt (dies würde einen Vollzeitjob für mehrere Personen darstellen) und ich würde vermuten, dass es eine Art öffentliche Nachschlagetabelle gibt oder dass sie eine Etherscan-API aufrufen, aber ich habe noch nie eine gesehen Dokumentation so oder so.

Ich werde den Prozess zum Abrufen der Daten mit dem Ethereum-Knotenclient demonstrieren, der gethüber die Befehlszeile ausgeführt wird. Es gibt äquivalente API-Aufrufe, um dieselben Befehle auszuführen, die ich in die Konsole eingebe, und die zurückgegebenen Daten abzurufen.

beefee@Kumquat:~$ geth console
I0410 00:59:38.739148   18803 database.go:71] Alloted 16MB cache to /home/beefee/.ethereum/chaindata
I0410 00:59:38.926341   18803 database.go:71] Alloted 16MB cache to /home/beefee/.ethereum/dapp
I0410 00:59:38.929816   18803 backend.go:314] Protocol Versions: [63 62 61], Network Id: 1
I0410 00:59:38.930737   18803 backend.go:362] Blockchain DB Version: 3
I0410 00:59:38.936326   18803 blockchain.go:214] Last header: #1303921 [4410d5b0…] TD=12764539073939571484
I0410 00:59:38.936411   18803 blockchain.go:215] Last block: #1303921 [4410d5b0…] TD=12764539073939571484
I0410 00:59:38.936444   18803 blockchain.go:216] Fast block: #1303921 [4410d5b0…] TD=12764539073939571484
I0410 00:59:38.948725   18803 cmd.go:115] Starting Geth/v1.3.6/linux/go1.5.1
I0410 00:59:38.948873   18803 server.go:311] Starting Server
I0410 00:59:40.853966   18803 udp.go:212] Listening, enode://d8a2002783851b7bd966a4d6cff2d91919a81bb42c2d2164c4a1a3c7a75473fba87c62d7190ad3e81bb9d83d5f5c314e9249ef2ce28fcbd9ea146b241d8c512b@[::]:30303
I0410 00:59:40.854203   18803 backend.go:526] Server started
I0410 00:59:40.856840   18803 server.go:552] Listening on [::]:30303
I0410 00:59:40.865236   18803 ipc.go:112] IPC service started (/home/beefee/.ethereum/geth.ipc)
instance: Geth/v1.3.6/linux/go1.5.1
 datadir: /home/beefee/.ethereum
coinbase: 0xbeefeebeefeebeefeebeefeebeefeebeefeebeef
at block: 1303921 (Sat, 09 Apr 2016 18:01:23 AEST)
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

Die vorletzte Zeile oben zeigt mir, dass meine Blockchain-Daten zuletzt auf Block 1303921 synchronisiert wurden. Ich tippe nun eth.blockNumberin die gethKonsole ein und bestätige, dass der letzte Block 1303921 ist:

> eth.blockNumber
1303921

Ich tippe admin.peersund gethsagt mir, dass ich mit einem anderen Ethereum-Knoten verbunden bin. Diese Zahl wird steigen, wenn meine gethInstanz mehr Peers im Netzwerk entdeckt:

> admin.peers
[{
    caps: ["eth/61", "eth/62", "eth/63"],
    id: "dbc0024aa19bccca07371ae80efd0ca9fb3393a645aae532039edb43703a8a0a6ceaf00d445dbdbed6f9a6bffdc7a9526bc9f2a45ffbc88dfb65d29359ecd587",
    name: "Geth/v1.4.0-unstable/linux/go1.5.1",
    network: {
      localAddress: "192.168.1.14:54363",
      remoteAddress: "13.73.0.80:30303"
    },
    protocols: {
      eth: {
        difficulty: 12804217404531728000,
        head: "b76e33014471d9929b624a1160a539d76a1397894c9a4aba2ed79c39fe8349f2",
        version: 63
      }
    }
}]

Dann startet die Synchronisierung und meine gethInstanz erhält neue Blockchain-Blöcke, seit ich meine Kette zuletzt synchronisiert habe. Die erste Meldung zeigt, dass 4 Blöcke mit 367 Transaktionen importiert wurden, die zweite 2 Blöcke mit 21 Transaktionen.

> I0410 01:02:23.660101   18824 blockchain.go:1251] imported 4 block(s) (0 queued 0 ignored) including 367 txs in 3.7787239s. #1303925 [9b90c2a9 / 9a9c4463]
I0410 01:02:23.699594   18824 blockchain.go:1251] imported 2 block(s) (0 queued 0 ignored) including 21 txs in 39.366618ms. #1303927 [51c73110 / 6ad7e8ad]
I0410 01:02:23.929353   18824 blockchain.go:1251] imported 1 block(s) (0 queued 0 ignored) including 14 txs in 57.625409ms. #1303928 [2472bfe0 / 2472bfe0]

Meine Blockchain-Daten werden jetzt bis 1305673 synchronisiert. Ich rufe die Blockinformationen ab und dieser Block hat keine Transaktionen, wie in der folgenden Meldung gezeigt transactions: []:

> eth.blockNumber
1305673
> eth.getBlock(1305673, true)
{
  difficulty: 26912099163184,
  extraData: "0xd783010306844765746887676f312e352e31856c696e7578",
  gasLimit: 4712388,
  gasUsed: 0,
  hash: "0x760c0430bb58ad52184e065ebcfc8033a56a9d733c3d95218c5bea080f4b668c",
  logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
  miner: "0x2a65aca4d5fc5b5c859090a6c34d164135398226",
  nonce: "0x241f99fc5fe741b5",
  number: 1305673,
  parentHash: "0x3397535d554535738d9116721661c16a40d050811971303e31b10f1c8f661998",
  receiptRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
  sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
  size: 541,
  stateRoot: "0x7d45816464427590a2f47a3f142f6b629bab6516869bf1be3e42dbb2eaba0e50",
  timestamp: 1460214123,
  totalDifficulty: 12812372432726769049,
  transactions: [],
  transactionsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
  uncles: []
}

Ich führe den Befehl eth.getBlock("latest", true)aus und wir sind jetzt bei Block 1305695 angelangt, wo Sie zwei Transaktionen sehen können, jede mit ihren from:und to:Adressen:

> eth.getBlock("latest", true)
{
  ...
  miner: "0x61c808d82a3ac53231750dadc13c777b59310bd9",
  nonce: "0xc0e616c43374dfac",
  number: 1305695,
  parentHash: "0xa8a5dee1f42ba4d3e211006960dfa554a37a8bc35f83cb4b45f3b7a46f587d4c",
  ...
  timestamp: 1460214363,
  totalDifficulty: 12812965182286929610,
  transactions: [{
      blockHash: "0xf326691704f297404207e476bd076f2cbbefc3247afc5cecae3e47ca4adbdcc8",
      blockNumber: 1305695,
      from: "0x63a9975ba31b0b9626b34300f7f627147df1f526",
      gas: 90000,
      gasPrice: 20000000000,
      hash: "0xeed4dc863c788bc182cc6c4b83c55904487876a7e25eeca02d8510dd61449e65",
      input: "0x",
      nonce: 179074,
      to: "0x3ed74b5067bc1020bdbeb25fd8628baa29573a55",
      transactionIndex: 0,
      value: 15044289999999998
  }, {
      blockHash: "0xf326691704f297404207e476bd076f2cbbefc3247afc5cecae3e47ca4adbdcc8",
      blockNumber: 1305695,
      from: "0xb1fca483324dbeddbf5862559988d33dc0d6495e",
      gas: 53000,
      gasPrice: 20000000000,
      hash: "0x36a02cfcdc3f1c8dfa8e43e38150fc49e1d8ab7af84a559ce31882070efd0d19",
      input: "0x",
      nonce: 190,
      to: "0xb02a824df54dfb0fa36ca2cb263419b8ff840c79",
      transactionIndex: 1,
      value: 11933101527912825
  }],
  transactionsRoot: "0x7f53b96130949ded6a218c74e64982b7024d3ec68f6a9547c0ea49f5bccb03ec",
  uncles: []
}

Und so sieht Block 1305695 auf EtherScan aus:

EtherScan-Block 1305695

Und so sehen die beiden Transaktionen auf EtherScan aus:

EtherScan-Transaktionen für Block 1305695

Durch das Abrufen der Daten vom gethEthereum-Knoten-Client erhält EtherScan Daten zu den neuen Adressen.

Aber erstellt Shapeshift nicht generell für jede Transaktion eine neue Adresse? Gibt es eine Art API, die diese Börsen für jede neue Adresse aufrufen, die nicht in den Etherscan-Dokumenten aufgeführt ist ?
Ich habe die Antwort mit weiteren Informationen aktualisiert. Wenn Sie weitere Fragen haben, sollten Sie erwägen, neue Fragen zu erstellen, da die Moderatoren dieser Website es vorziehen, dass einzelne Fragen separat gestellt werden, damit sie durchsucht werden können.
@BokkyPooBah imho, viele dieser Antworten scheinen die Frage zu übersehen :) Die Frage möchte wissen, ob Polo jedem der Entdecker gesagt hat, er solle seine Adresse registrieren? Oder registriert sich Polo irgendwo, dann nehmen die Entdecker es manuell auf und fügen es ihren Seiten hinzu? Wenn Polo/Shift jedes Mal eine neue Adresse verwendet, wie kann Etherscan dies wissen und mithalten?
Jetzt verbessert. Lesen Sie bitte. Danke.
Dies ist ein guter Überblick darüber, wie ein Dritter die Blockchain indizieren kann, aber es gibt immer noch eine „magische“ Ebene, von der ich keine Rede sehe. Ich habe die Frage aktualisiert.
asmiller, ich habe meine Antwort mit weiteren Informationen aktualisiert, von denen ich hoffe, dass sie Ihre zusätzliche Frage beantworten.