Der DAO-Vertrag wurde am 17. Juni 2016 angegriffen, wobei der Angreifer Ether im Wert von etwa 50 Millionen USD abzog, indem er eine Schwachstelle bei rekursiven Aufrufen im DAO-Vertragscode nutzte.
Der Angreifer leitete die gestohlenen Ether in einige untergeordnete DAOs ab und die Robin Hood Group leitete die verbleibenden Gelder in andere untergeordnete DAOs ab.
Ein Hard Fork ist für Block #1.920.000 geplant (in etwa 24 Stunden, ~ 23:26 Uhr 20.07.2016 Australian Eastern Standard Time), um die Ether aus dem DAO-Vertrag und seinen untergeordneten DAOs in einen Auszahlungsvertrag zu übertragen.
Wie wandle ich meine The DAO-Token in Ether um, wenn die Hard Fork vorbei ist?
Der Auszahlungsvertrag hat einen Saldo von 11.597.664,781027947 Ether (145.318.739,71 $).
Ein erfolgreicher Hard Fork. Allen eine fröhliche Hard Fork! Gute Arbeit Entwickler und andere Beteiligte.
Der Auszahlungsvertrag hat jetzt einen Saldo von 6.369.298,685677664 Ether (79.807.312,53 $). Etwa 45 % der DAOs wurden inzwischen in ETHs umgewandelt, über 1.506 Transaktionen.
Der Auszahlungsvertrag hat jetzt einen Saldo von 4.595.418,245476871 Ether (65.944.251,82 $). Etwa 60 % der DAOs wurden inzwischen in ETHs umgewandelt, über 3.887 Transaktionen.
Hier ist ein Diagramm von https://slacknation.github.io/medium/11/11.html :
13,55 % verbleibender Restbetrag.
Die neuesten Anweisungen finden Sie unter The DAO Refunds .
withdraw()
Funktion einen Fehler aus und verbraucht das gesamte mit der Transaktion angegebene Gas.Jeder, der DAOs in den letzten zwei Wochen der DAO-Crowdfunding-Phase gekauft hat, hat mehr als 1 ETH pro 100 DAOs bezahlt. Der Betrag von mehr als 1 ETH pro 100 DAOs wurde auf dem extraBalance-Konto von The DAO gespeichert . Das Guthaben des extraBalance-Kontos wurde nun in das Multisig-Wallet des Kurators übertragen.
Es gibt ein separates Verfahren für Käufer, die mehr als 1 ETH pro 100 DAOs bezahlt haben, um den zusätzlich gezahlten Betrag (über 1 ETH pro 100 DAOs) erstattet zu bekommen. Dieser Prozess wird in dieser Antwort nicht behandelt, aber seien Sie versichert, dass die Entwickler ihr Bestes geben, um die überschüssigen Mittel fair an die ursprünglichen DAO-Käufer zurückzuzahlen.
Siehe Wie erhalte ich eine Rückerstattung für den Betrag, den ich über 1 Ether für 100 The DAO-Tokens bezahlt habe , der aktualisiert wird, wenn weitere Details bekannt gegeben werden.
Wenn Sie eine legitime Trennung von The DAO durchgeführt haben, wurde Ihr DAO-Guthaben auf das untergeordnete DAO verschoben und Ihr DAO-Guthaben in The DAO wird auf Null gesetzt. Da Ihr DAO-Guthaben in The DAO Null ist, können Sie Ihre DAOs nicht mit dem Verfahren in diesen Fragen und Antworten in ETHs umwandeln.
Siehe Wie erhalte ich eine Rückerstattung für meine The DAO-Token, die in ein untergeordnetes DAO aufgeteilt wurden? da Sie TheDAOCurator kontaktieren müssen, um Ihre Rückerstattung zu arrangieren.
Warten Sie nach dem Hard Fork einige Zeit, bevor Sie versuchen, Ihre DAOs in ETHs umzuwandeln. Es gibt keine Frist für die Auszahlungen. Das Sicherste ist abzuwarten.
Update 06:33 26.10.2016 Einige DAO -> ETH-Transaktionen schlagen aufgrund von Rundungsfehlern fehl. Siehe Warum schlagen meine DAO-zu-ETH-Rückerstattungen fehl? .
Gehen Sie zu http://www.myetherwallet.com/#the-dao
Laden Sie Ihre Keystore-Datei / Ihren privaten Schlüssel hoch / fügen Sie sie ein, um auf Ihre Brieftasche zuzugreifen.
Drücken Sie den großen roten Knopf.
Bestätigen Sie, dass Sie sicher sind, dass Sie abheben möchten.
Warten Sie ein paar Sekunden und 2 Transaktionslinks werden angezeigt. Warten Sie weitere 30 Sekunden und überprüfen Sie den Kontostand Ihres Kontos auf Etherscan. Sie sollten mehr ETH und 0 DAO haben. Ich (@tayvano) bestätigte, dass es um 6:43 Uhr PDT funktionierte, indem ich das MyEtherWallet-Spendenkonto verwendete: http://etherscan.io/address/0x7cb57b5a97eabe94205c07890be4c1ad31e486a8
Der (zirkulär referenzierte) Artikel How to use the Withdraw Contract with Mist von Griff Green bietet eine Schritt-für-Schritt-Anleitung im Siebdruck, ähnlich der unten stehenden Anleitung.
Stellen Sie sicher, dass Sie Ethereum Wallet 0.8.1 oder höher heruntergeladen haben.
Wenn Sie Ethereum Wallet 0.8.1 zum ersten Mal starten, wählen Sie „Ja“ auf die Frage „Möchten Sie die Kette aktivieren, in der mit dem Exploit verbundene Gelder in einen Vertrag zurückgeführt werden, wo sie von The DAO-Token-Inhabern abgehoben werden können?“ . Sie haben nun die Wahl getroffen, die Hard-Fork-Kette von Ethereum zu verwenden.
Wenn Ethereum Wallet einfriert, siehe UPDATE vom 23. Juli 2016 in Wie entferne ich den DAO-Vertrag aus der Beobachtungsliste von Ethereum Wallet (Mist), da es einfriert? .
Wenn Sie den DAO-Vertrag noch nicht überwacht haben, finden Sie weitere Informationen unter The DAO – Hinzufügen und Überwachen des DAO-Vertrags . Dieser Schritt gibt Ihnen Zugriff, um die Übertragung von DAOs auf den Auszahlungsvertrag zu genehmigen.
Wenn Sie die unten erforderliche Approve -Funktion nicht finden können , laden Sie die JSON-Schnittstelle für den DAO-Vertrag neu, indem Sie die Schritte direkt oben ausführen. Wenn Sie Probleme haben, die Ethereum-Wallet mit einfrierender Anzeige zu verwenden, versuchen Sie, den DAO-Vertrag aus der Ethereum -Wallet zu entfernen ( Wie entferne ich den DAO-Vertrag aus der Ethereum-Wallet (Mist)-Beobachtungsliste, da er einfriert? ), und sehen Sie sich dann den DAO-Vertrag erneut an .
Fügen Sie eine Uhr zum DAO-Entnahmevertrag hinzu. Verwenden Sie das gleiche Verfahren wie im Link direkt oben, aber setzen Sie:
The DAO Withdrawal
0xbf4ed7b27f1d666546e30d74d50d173d20bca754
[{"constant":false,"inputs":[],"name":"trusteeWithdraw","outputs":[],"type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"mainDAO","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":true,"inputs":[],"name":"trustee","outputs":[{"name":"","type":"address"}],"type":"function"}]
23:47 20.07.2016 AEST – Ich habe bestätigt, dass der unten stehende Prozess mit der Ethereum Wallet funktioniert
Holen Sie sich die Kontoadresse, von der Sie Ihre DAOs in ETHs umwandeln möchten
Holen Sie sich das Guthaben des Kontos, von dem Sie Ihre DAOs in ETHs umwandeln möchten
Genehmigen Sie die Übertragung des DAO-Guthabens Ihres Kontos an die Adresse des Auszahlungsvertrags
0xbf4ed7b27f1d666546e30d74d50d173d20bca754
in das Feld spender-address ein.ETH aus dem Austrittsvertrag austreten
geth
Stellen Sie sicher, dass Sie Version 1.4.10 oder höher ausführen . geth
Und führen Sie Ihre geth
Befehle mit der --support-dao-fork
Option aus, damit Sie sich auf der Hard-Fork-Blockchain befinden. Zum Beispiel:
geth --support-dao-fork console
Die --support-dao-fork
Einstellung wird zwischen separaten Ausführungen von beibehalten geth
, sodass Sie diesen Parameter nur einmal angeben müssen.
Bestätigen Sie Ihre geth
Version mit
user@Kumquat:~$ geth version
Geth
Version: 1.4.10-stable
Protocol Versions: [63 62]
Network Id: 1
Go Version: go1.5.1
OS: linux
Hier ist der Prozess, mit geth
dem Sie Ihre DAOs in ETHs für Ihr Konto umwandeln {x}
.
00:14 21.07.2016 AEST - Ich habe bestätigt, dass der unten stehende Prozess geth
funktioniert
geth --support-dao-fork --unlock {your account} console
...
Unlocking account {your account}
Passhrase: {enter your passphrase}
// Allow your blockchain to sync
> var account = "{your account}";
undefined
> var theDAOAddress = "0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413";
undefined
> var theDAOWithdrawalAddress = "0xbf4ed7b27f1d666546e30d74d50d173d20bca754";
undefined
> var theDAOABIFragment = [{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"type":"function"}, {"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"type":"function"}];
undefined
> var theDAO = web3.eth.contract(theDAOABIFragment).at(theDAOAddress);
undefined
> var approve = theDAO.approve(theDAOWithdrawalAddress, theDAO.balanceOf(account), {from: account});
undefined
> eth.getTransaction(approve);
// Repeat the command above until you see that blockNumber is not null
// Wait a few blocks (~ 15 seconds each) for your approve transaction to get mined
> var theDAOWithdrawalABIFragment = [{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"type":"function"}];
undefined
> var theDAOWithdrawal = web3.eth.contract(theDAOWithdrawalABIFragment).at(theDAOWithdrawalAddress);
undefined
> var withdrawal = theDAOWithdrawal.withdraw({from: account});
undefined
> eth.getTransaction(withdrawal);
// Repeat the command above until you see that blockNumber is not null
// Wait a few blocks (~15 second each) and check your new account balance
web3.fromWei(eth.getBalance(account), "ether")
11.023456789012345678
Stellen Sie sicher, dass Sie Ethereum Wallet 0.8.1 oder höher heruntergeladen haben.
Wenn Sie Ethereum Wallet 0.8.1 zum ersten Mal starten, wählen Sie „Ja“ auf die Frage „Möchten Sie die Kette aktivieren, in der mit dem Exploit verbundene Gelder in einen Vertrag zurückgeführt werden, wo sie von The DAO-Token-Inhabern abgehoben werden können?“ . Sie haben nun die Wahl getroffen, die Hard-Fork-Kette von Ethereum zu verwenden. Beenden Sie die Ethereum Wallet.
Führen Sie nun das Ethereum Wallet im Mist-Browsermodus mit dem folgenden Befehl aus dem Unterverzeichnis aus, in dem Sie die Software installiert haben:
Unter Linux & dem MacBook
./Ethereum-Wallet --mode mist &
Unter Windows
Ethereum-Wallet --mode mist
(Alternativ können Sie den Mist-Browser direkt herunterladen - siehe @johnmardlin
Antwort unten).
Dann:
(Methode 4 hinzugefügt, wie von @slacknation gefordert in https://www.reddit.com/r/ethereum/comments/4tx13d/how_do_i_withdraw_dao_tokens_eth_after_hf_update/ )
Es gibt einen zweistufigen Prozess, um Ihre DAOs in ETHs umzuwandeln.
Der erste Schritt besteht darin, die Übertragung von DAOs von The DAO in den Widerrufsvertrag zu genehmigen. Dies geschieht durch Aufrufen der approve(...)
unten aufgeführten DAO-Funktion:
Aus dem Quellcode von The DAO ist hier die Funktionsdefinition TokenInterface.approve():
/// @notice `msg.sender` approves `_spender` to spend `_amount` tokens on
/// its behalf
/// @param _spender The address of the account able to transfer the tokens
/// @param _amount The amount of tokens to be approved for transfer
/// @return Whether the approval was successful or not
function approve(address _spender, uint256 _amount) returns (bool success);
Hier ist die Token.approve(...)-Funktion, die die oben definierte Funktion implementiert:
function approve(address _spender, uint256 _amount) returns (bool success) {
allowed[msg.sender][_spender] = _amount;
Approval(msg.sender, _spender, _amount);
return true;
}
Nachdem Sie die Genehmigen(...)-Funktion von The DAO aufgerufen haben, haben Sie eine Genehmigung für den Widerrufsvertrag erstellt, um Ihre DAOs in den Widerrufsvertrag zu übertragen.
Der zweite Schritt besteht darin, die withdraw()
Funktion des Auszahlungsvertrags aufzurufen, um DAOs von The DAO in den Auszahlungsvertrag zu übertragen, und damit der Auszahlungsvertrag Ihrem Konto den entsprechenden Betrag in ETH sendet.
Hier ist der Quellcode für die withdraw()
Funktion:
function withdraw(){
uint balance = mainDAO.balanceOf(msg.sender);
if (!mainDAO.transferFrom(msg.sender, this, balance) || !msg.sender.send(balance))
throw;
}
Benutzer @lefteris in thedao.slack.com gab an, dass der DAO -Auszahlungsvertrag unter 0xbf4ed7b27f1d666546e30d74d50d173d20bca754 zu finden ist und der Prozess zur Umwandlung von DAOs in ETHs wie folgt ist:
a) call dao.approve("0xbf4ed7b27f1d666546e30d74d50d173d20bca754", dao.balanceOf(youraccount)) b) call withdrawContract.withdraw()
Der Quellcode für den Widerrufsvertrag ist unter 0xbf4ed7b27f1d666546e30d74d50d173d20bca754 zu finden und lautet wie folgt:
contract DAO {
function balanceOf(address addr) returns (uint);
function transferFrom(address from, address to, uint balance) returns (bool);
uint public totalSupply;
}
contract WithdrawDAO {
DAO constant public mainDAO = DAO(0xbb9bc244d798123fde783fcc1c72d3bb8c189413);
address public trustee = 0xda4a4626d3e16e094de3225a751aab7128e96526;
function withdraw(){
uint balance = mainDAO.balanceOf(msg.sender);
if (!mainDAO.transferFrom(msg.sender, this, balance) || !msg.sender.send(balance))
throw;
}
function trusteeWithdraw() {
trustee.send((this.balance + mainDAO.balanceOf(this)) - mainDAO.totalSupply());
}
}
Aus dem Quellcode von The DAO (siehe oben) ist hier die Token.transferFrom(...)
Funktion:
function transferFrom(
address _from,
address _to,
uint256 _amount
) noEther returns (bool success) {
if (balances[_from] >= _amount
&& allowed[_from][msg.sender] >= _amount
&& _amount > 0) {
balances[_to] += _amount;
balances[_from] -= _amount;
allowed[_from][msg.sender] -= _amount;
Transfer(_from, _to, _amount);
return true;
} else {
return false;
}
}
1.5.9
? Ich erhalte einen flag provided but not defined: -support-dao-fork
FehlerDies ist eine ziemlich einfache Methode mit Mist .
mazzydan
Datenschutz ist ein Menschenrecht.eth