Jeder, der DAOs in den letzten zwei Wochen der The DAO-Crowdfunding-Phase gekauft hat, zahlte mehr als 1 Ether (ETH) pro 100 The DAO-Tokens (DAO). Der ETH-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.
Wie unter Wie wandle ich meine The DAO-Token in Ether um, indem ich den Auszahlungsvertrag nach der Hard Fork verwende? , Die DAO-Token-Inhaber können derzeit ihre DAOs mit einer Rate von 100 DAO = 1 ETH in ETH umwandeln.
Wie erhalte ich eine Rückerstattung für den Betrag, den ich über 1 Ether für 100 The DAO-Token hinaus bezahlt habe?
Siehe auch:
Die neuesten Anweisungen finden Sie unter The DAO Refunds .
Beim Hard-Fork-Block Nr. 1.920.000 wurden das ETH-Guthaben von The DAO und seinen untergeordneten DAOs (einschließlich des Guthabens vom extraBalance-Konto) in den Auszahlungsvertrag übertragen .
Unmittelbar nach der Hard-Fork, bei Block # 1.920.090 , wurde die Funktion des Withdrawal-Kontakts trusteeWithdraw()
in dieser Transaktion aufgerufen , um 463.798,08818109 ETH in die TheDAOCurator Multisig-Wallet zu übertragen .
Siehe den ExtraBalance- Abschnitt in The DAO's Edge Cases Multisig (Post Hard Fork) von Griff Green für den geplanten Rückerstattungsprozess.
Sie sollten Ihr Konto, das zum Extra-Balance-Konto beigetragen hat, unter github.com/bokkypoobah/TheDAOData finden können, mit weiteren Details unter Welche Konten haben zum extraBalance-Konto von The DAO beigetragen? :
Anmerkungen:
Aus dem ExtraBalance-Abhebungsvertrag, der am 15. September von Griff Green
finanziert werden soll, wird der Abhebungsvertrag von den Kuratoren am 15. September 2016 finanziert. Sie können dann Ihre Ether mit den unten aufgeführten Methoden abheben. Eine ausführlichere Anleitung zur Ausführung des Auszahlungsvertrags mit dem Ethereum Wallet (ähnlich Methode 2 unten) finden Sie in diesem verlinkten Artikel. Überprüfen Sie, ob der ETH-Saldo von 0x755cdba6AE4F479f7164792B318b2a06c759833B nicht Null ist, bevor Sie versuchen, Ihre Auszahlung auszuführen.
Der Austrittsvertrag wurde von den Kuratoren mit 344.917,580854976758120496 ETH aufgestockt. Sie können jetzt Ihre Auszahlungen ausführen!
Im Folgenden finden Sie 3 Methoden, um Ihr Geld abzuheben:
geth
Aktualisierung 17. September 2016, 07:00 UTC Von @tayvano
:
Bitte vergewissern Sie sich, dass das Geld eingezahlt wurde, indem Sie überprüfen, ob der extraBalance-Abhebungsvertrag ein Guthaben aufweist, bevor Sie versuchen, abzuheben. Wir haben dies live verschoben, da wir bis zur Nacht des 17. September nicht verfügbar sind. Vielen Dank.
Führen Sie MyEtherWallet von https://www.myetherwallet.com/#the-dao aus (Seien Sie vorsichtig, da es gefälschte MyEtherWallet-Phishing-Sites mit ähnlichen URLs gibt, die über das Internet auftauchen und darauf abzielen, Ihre privaten Schlüssel zu stehlen.)
UPDATE 05:22 8. September 2016 UTC – Der ExtraBalWithdrawal-Vertrag wurde aktualisiert – ersetzen Sie Ihre alte Version, wenn Sie sie bereits eingerichtet haben. Beachten Sie auch, dass der Widerrufsvertrag noch nicht ausgefüllt wurde.
UPDATE 06:04 9. September 2016 UTC – @ledgerwatch hat das Dokument „So kündigen Sie den extraBalance-Rückerstattungsvertrag“ erstellt , das einige Schritte zum Schutz vor Wiederholungen enthält.
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.
ExtraBalToken
Vertrag beobachtenWählen Sie in Ethereum Wallet die Seite CONTRACTS im oberen Menü. Klicken Sie auf VERTRAG ANSEHEN.
ExtraBalToken
0x5c40ef6f527f4fba68368774e6130ce6515123f2
[{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":false,"inputs":[],"name":"seal","outputs":[],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"data","type":"uint256[]"}],"name":"fill","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"sealed","outputs":[{"name":"","type":"bool"}],"type":"function"},{"inputs":[],"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"}]
ExtraBalWithdrawal
Vertrag beobachtenWählen Sie in Ethereum Wallet die Seite CONTRACTS im oberen Menü. Klicken Sie auf VERTRAG ANSEHEN.
ExtraBalWithdrawal
0x755cdba6ae4f479f7164792b318b2a06c759833b
[{"constant":false,"inputs":[],"name":"clawback","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"}]
ExtraBalToken.Approve
Dadurch wird die Übertragung der Token von Ihrem Konto auf den ExtraBalWithdrawal
Vertrag genehmigt. Stellen Sie sicher, dass Sie 0 Ether senden, da diese Transaktion möglicherweise auf der Ethereum Classic-Kette wiederholt wird.
Wählen Sie die Seite VERTRÄGE im oberen Menü. Klicken Sie auf EXTRABALTOKEN .
0x755cdba6ae4f479f7164792b318b2a06c759833b
Adresse des ExtraBalWithdrawal
Kontakts ein.ExtraBalWithdrawal.Withdraw
--- FÜHREN SIE DIESE ANWEISUNG NOCH NICHT AUS. Die Kuratoren haben den Vertrag nicht erfüllt extraBalWithdrawal
und die Ausführung wird scheitern. Dieser Beitrag wird aktualisiert, wenn Sie dieses Skript ausführen können ---
Dadurch wird ETH vom ExtraBalWithdrawal
Vertrag auf Ihr Konto zurückgezogen. Stellen Sie sicher, dass Sie 0 Ether senden, da diese Transaktion möglicherweise auf der Ethereum Classic-Kette wiederholt wird.
Wählen Sie die Seite VERTRÄGE im oberen Menü. Klicken Sie auf EXTRABALENTZUG . Wählen Sie rechts auf der Seite unter AUF VERTRAG SCHREIBEN die Funktion Widerrufen . Wählen Sie unter Ausführen von Ihr Konto aus. Geben Sie 0 als Zahl der ETH unter dem Feld Send ETHER ein. Klicken Sie auf die Schaltfläche AUSFÜHREN, geben Sie Ihr Passwort ein und bestätigen Sie. Hier ist ein Bildschirmfoto:
geth
UPDATE 05:22 8. September 2016 UTC – Der ExtraBalWithdrawal Vertrag wurde aktualisiert und der Code unten wurde getestet. Beachten Sie die neue Adresse und ABI im geth
folgenden Skript.
Stellen Sie sicher, dass Sie die Geth-Version 1.4.10 oder höher ausführen. Und führen Sie Ihre Geth-Befehle mit --support-dao-fork option
aus, damit Sie sich auf der Hard-Fork-Blockchain befinden.
--- FÜHREN SIE DIE FOLGENDEN BEFEHLE NOCH NICHT AUS. Die Kuratoren haben den Vertrag nicht erfüllt extraBalWithdrawal
und die Ausführung wird scheitern. Dieser Beitrag wird aktualisiert, wenn Sie dieses Skript ausführen können ---
user@Kumquat:~$ geth --support-dao-fork console
// Allow chain to sync
var account = "{your account}".toLowerCase();
personal.unlockAccount(account, "{your account password}")
var extraBalTokenAddress = "0x5c40ef6f527f4fba68368774e6130ce6515123f2";
var extraBalTokenABIFragment = [{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"type":"function"}, {"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"type":"function"}];
var extraBalTokenContract = eth.contract(extraBalTokenABIFragment).at(extraBalTokenAddress);
var extraBalWithdrawalAddress = "0x755cdba6ae4f479f7164792b318b2a06c759833b";
var extraBalWithdrawalABIFragment = [{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"type":"function"}];
var extraBalWithdrawalContract = eth.contract(extraBalWithdrawalABIFragment).at(extraBalWithdrawalAddress);
var balance = extraBalTokenContract.balanceOf(account);
console.log("Your extraBalTokenContract.balance() for " + account + " is " + web3.fromWei(balance, "ether") + " ethers");
// Approve the transfer of your tokens from the extraBalToken contract
// to the extraBalWithdrawal contract
var approve = extraBalTokenContract.approve(extraBalWithdrawalAddress, balance, {from: account, value: 0});
console.log("approve() returned " + approve);
// Wait for approve() to be mined. Repeat checking using the following command until you get a non-null result.
eth.getTransactionReceipt(approve).blockNumber;
var withdraw = extraBalWithdrawalContract.withdraw({from: account, value: 0});
console.log("withdraw() returned " + withdraw);
// Wait for withdraw() to be mined. Repeat checking using the following command until you get a non-null result.
eth.getTransactionReceipt(withdraw).blockNumber;
// Your withdrawal should now be complete. Check your account balance has received the withdrawal amount.
web3.fromWei(eth.getBalance(account), "ether");
@ledgerwatch in thedao.slack.com/messages/extrabal_community hat den ExtraBalToken-Vertrag auf 0x5c40ef6f527f4fba68368774e6130ce6515123f2 bereitgestellt .
contract ExtraBalToken {
uint256 public totalSupply;
/* This creates an array with all balances */
mapping (address => uint256) public balanceOf;
mapping (address => mapping (address => uint256)) public allowance;
/* This generates a public event on the blockchain that will notify clients */
event Transfer(address indexed from, address indexed to, uint256 value);
/* Send coins */
function transfer(address _to, uint256 _value) {
if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough
if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows
balanceOf[msg.sender] -= _value; // Subtract from the sender
balanceOf[_to] += _value; // Add the same to the recipient
Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place
}
/* Allow another contract to spend some tokens in your behalf */
function approve(address _spender, uint256 _value)
returns (bool success) {
allowance[msg.sender][_spender] = _value;
return true;
}
/* A contract attempts to get the coins */
function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {
if (balanceOf[_from] < _value) throw; // Check if the sender has enough
if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows
if (_value > allowance[_from][msg.sender]) throw; // Check allowance
balanceOf[_from] -= _value; // Subtract from the sender
balanceOf[_to] += _value; // Add the same to the recipient
allowance[_from][msg.sender] -= _value;
Transfer(_from, _to, _value);
return true;
}
/* This unnamed function is called whenever someone tries to send ether to it */
function () {
throw; // Prevents accidental sending of ether
}
uint constant D160 = 0x10000000000000000000000000000000000000000;
address public owner;
function ExtraBalToken() {
owner = msg.sender;
}
bool public sealed;
// The 160 LSB is the address of the balance
// The 96 MSB is the balance of that address.
function fill(uint[] data) {
if ((msg.sender != owner)||(sealed))
throw;
for (uint i=0; i<data.length; i++) {
address a = address( data[i] & (D160-1) );
uint amount = data[i] / D160;
if (balanceOf[a] == 0) { // In case it's filled two times, it only increments once
balanceOf[a] = amount;
totalSupply += amount;
}
}
}
function seal() {
if ((msg.sender != owner)||(sealed))
throw;
sealed= true;
}
}
Der Vertrag ABI ist: [{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"type":"function"},{"constant":false,"inputs":[],"name":"seal","outputs":[],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":false,"inputs":[{"name":"data","type":"uint256[]"}],"name":"fill","outputs":[],"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[],"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"type":"function"},{"constant":true,"inputs":[],"name":"sealed","outputs":[{"name":"","type":"bool"}],"type":"function"},{"inputs":[],"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"}]
.
@ledgerwatch bearbeitete dann fill(...)
den ExtraBalToken-Vertrag mit den extraBalance-Werten, die von einem Skript generiert wurden, das meinem getTheDAOCreatedTokenEventsWithNonZeroExtraBalance_v4- Skript ähnelt. Die Ergebnisse meines Skripts finden Sie unter CreatedTokenEventsWithNonZeroExtraBalance_v4.txt oder CreatedTokenEventsWithNonZeroExtraBalance_v4.xlsx .
Ich habe den ExtraBalToken-Vertrag getestet – siehe das Abstimmungsskript und den Bericht unter github.com/bokkypoobah/TheDAOData/ExtraBalTokenValuesReconciliation .
Der Vertrag wurde dann seal()
in Block Nr. 2.202.674 veröffentlicht .
ExtraBalWithdrawal
VertragUPDATE 05:22 8. September 2016 UTC Die ExtraBalWithdrawal
( WithdrawDAO
im Quellcode) wurde aktualisiert und an einer neuen Adresse bereitgestellt. trusteeWithdraw(...)
wurde durch ersetzt clawback()
.
@ledgerwatch stellte den aktualisierten Vertrag auf 0x755cdba6ae4f479f7164792b318b2a06c759833b bereit .
// Refund contract for extraBalance
// Amounts to be paid are tokenized in another contract and allow using the same refund contract as for theDAO
// Though it may be misleading, the names 'DAO', 'mainDAO' are kept here for the ease of code review
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(0x5c40ef6f527f4fba68368774e6130ce6515123f2);
address constant public trustee = 0xda4a4626d3e16e094de3225a751aab7128e96526;
function withdraw(){
uint balance = mainDAO.balanceOf(msg.sender);
if (!mainDAO.transferFrom(msg.sender, this, balance) || !msg.sender.send(balance))
throw;
}
/**
* Return funds back to the curator.
*/
function clawback() external {
if (msg.sender != trustee) throw;
if (!trustee.send(this.balance)) throw;
}
}
Der Vertrag ABI ist: [{"constant":false,"inputs":[],"name":"clawback","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"}]
.
HINWEIS Dieser Vertrag muss noch die Ether hinzugefügt haben, damit Inhaber von The DAO-Token sich zurückziehen können.
Personen, die glauben, Anspruch auf das extraGuthaben zu haben, können ihr Guthaben auch anhand dieser beiden Dateiergebnisse überprüfen
Ab Freitag, dem 26. August, haben die anderen 2 Dateien von Arachnid und Bokkypoobah kleine Rundungsprobleme in ihrer ETH-Berechnung. (Bokkypoobah ist nur um 0,000000000086360144 ETH ausgeschaltet, sodass Sie auch seinen Ergebnissen vertrauen können)
.plus(...)
- github.com/bokkypoobah/TheDAOETCTokenBalance/blob/master/… summiert , aber ich habe meine Antwort unverändert gelassen, da die Zahlen gut genug sind. Danke noch einmal.
q9f
Benutzer3541