Как мне получить возмещение за сумму, которую я заплатил сверх 1 эфира на 100 токенов DAO

Любой, кто купил DAO в течение последних двух недель этапа краудфандинга The DAO, заплатил более 1 эфира (ETH) за 100 токенов The DAO (DAO). Сумма ETH, превышающая 1 ETH на 100 DAO, хранилась в учетной записи ExtraBalance DAO . Баланс учетной записи extraBalance переведен в мультиподписной кошелек куратора.

Как описано в разделе «Как конвертировать токены The DAO в эфиры с помощью контракта на снятие средств после хардфорка?» , Владельцы токенов DAO в настоящее время могут конвертировать свои DAO в ETH по курсу 100 DAO = 1 ETH.

Как мне получить возмещение суммы, которую я заплатил сверх 1 эфира за 100 токенов The DAO?



Возврат средств DAO



Смотрите также:

Попробуйте добавить более одного тега в будущем. Я добавил несколько подходящих. :-)
Есть ли опасность оставить мои токены dao без конвертации, пока разработчики не решат простой способ вернуть деньги людям, которые заплатили более 1ETH: 100DAO ???

Ответы (2)

Обновление от 29 марта 2017 г.

Последние инструкции можно найти на сайте The DAO Refunds .



В блоке хард-форка #1,920,000 баланс ETH от DAO и его дочерних DAO (включая баланс со счета extraBalance) был переведен в контракт на вывод средств .

Сразу после хард-форка, в блоке # 1,920,090 , trusteeWithdraw()в этой транзакции была вызвана функция контакта по снятию средств для перевода 463,798.08818109 ETH в мультиподписной кошелек TheDAOCurator .

См . раздел ExtraBalance в статье The DAO’s Edge Cases Multisig (Post Hard Fork) Гриффа Грина, чтобы узнать о планируемом процессе возмещения.

Вы сможете найти свою учетную запись, которая внесла вклад в учетную запись Extra Balance, на github.com/bokkypoobah/TheDAOData с более подробной информацией в разделе Какие учетные записи внесли вклад в учетную запись ExtraBalance DAO? :

Заметки:

Обновление 08:07 13 сен 2016 UTC

Контракт на снятие средств с ExtraBalance будет профинансирован 15 сентября 2016 года. Контракт на снятие средств Griff Greenбудет профинансирован кураторами 15 сентября 2016 года. Затем вы сможете вывести свои эфиры, используя методы, перечисленные ниже. Вы найдете более подробное руководство по выполнению контракта на снятие средств с использованием кошелька Ethereum (аналогично методу 2 ниже) в этой статье по ссылке. Убедитесь, что баланс ETH 0x755cdba6AE4F479f7164792B318b2a06c759833B отличен от нуля, прежде чем пытаться вывести средства.

Обновление 14:08 17 сен 2016 UTC

Контракт на вывод был пополнен кураторами на 344 917,580854976758120496 ETH. Теперь вы можете выполнять свои выводы!


Ниже приведены 3 способа вывода средств:

  • Способ 1 — MyEtherWallet
  • Способ 2 — кошелек Ethereum
  • Способ 3 -geth



Способ 1 — вывод средств с помощью MyEtherWallet

Обновление 07:00, 17 сентября 2016 г., UTC . От @tayvano:

Пожалуйста, убедитесь, что средства были внесены, проверив, что контракт на вывод средств extraBalance имеет баланс перед попыткой вывода. Мы запустили этот прямой эфир, так как мы недоступны до ночи 17 сентября. Спасибо.

Запустите MyEtherWallet со страницы https://www.myetherwallet.com/#the-dao (будьте осторожны, так как в Интернете появляются поддельные фишинговые сайты MyEtherWallet с похожими URL-адресами с целью украсть ваши закрытые ключи.)введите описание изображения здесь



Способ 2 — вывод средств с помощью кошелька Ethereum

ОБНОВЛЕНИЕ, 05:22, 8 сентября 2016 г., UTC — Контракт ExtraBalWithdrawal был обновлен — замените старую версию, если вы ее уже настроили. Также обратите внимание, что контракт на вывод средств еще не заполнен.

ОБНОВЛЕНИЕ, 06:04, 9 сентября 2016 г. UTC — @ledgerwatch создал документ « Как отказаться от контракта на возврат дополнительного баланса» , который включает в себя некоторые шаги для защиты от повторного использования.

Убедитесь, что вы загрузили Ethereum Wallet 0.8.1 или более позднюю версию.

При первом запуске Ethereum Wallet 0.8.1 выберите «Да» на вопрос «Хотите ли вы активировать цепочку, в которой средства, связанные с эксплойтом, восстанавливаются в контракт, где они могут быть сняты держателями токенов The DAO?» . Теперь вы сделали выбор в пользу использования хард-форка Ethereum.

Способ 2 - Шаг 1 - Смотрите ExtraBalTokenконтракт

В Ethereum Wallet выберите страницу КОНТРАКТЫ в верхнем меню. Нажмите ПОСМОТРЕТЬ КОНТРАКТ.

  • Введите НАЗВАНИЕ КОНТРАКТАExtraBalToken
  • Введите ДОГОВОРНЫЙ АДРЕС0x5c40ef6f527f4fba68368774e6130ce6515123f2
  • Введите в поле JSON INTERFACE следующий текст:[{"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"}]
  • Нажмите «ОК». Ваш Watch Contract должен выглядеть так:введите описание изображения здесь

Способ 2 - Шаг 2 - Смотрите ExtraBalWithdrawalконтракт

В Ethereum Wallet выберите страницу КОНТРАКТЫ в верхнем меню. Нажмите ПОСМОТРЕТЬ КОНТРАКТ.

  • Введите НАЗВАНИЕ КОНТРАКТАExtraBalWithdrawal
  • Введите ДОГОВОРНЫЙ АДРЕС0x755cdba6ae4f479f7164792b318b2a06c759833b
  • Введите в поле JSON INTERFACE следующий текст:[{"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"}]
  • Нажмите «ОК». Ваш Watch Contract должен выглядеть так:введите описание изображения здесь

Способ 2 — Шаг 3 — ВыполнитьExtraBalToken.Approve

Это подтвердит перевод токенов с вашей учетной записи на ExtraBalWithdrawalконтракт. Убедитесь, что вы отправляете 0 эфиров, так как эта транзакция может быть воспроизведена в цепочке Ethereum Classic.

Выберите страницу КОНТРАКТЫ в верхнем меню. Нажмите на ЭКСТРАБАЛТОКЕН .

  • В поле « Баланс» в левой части страницы в разделе «ПРОЧИТАТЬ ИЗ КОНТАКТА» введите адрес своей учетной записи, ВСЕ В НИЖНЕМ РЕГИСТРЕ . Ваш баланс вывода средств в wei должен отображаться под вашим адресом.
    • Скопируйте эту цифру баланса
  • В правой части страницы в разделе НАПИСАТЬ КОНТРАКТ
    • Выберите функцию Одобрить .
    • В транше введите 0x755cdba6ae4f479f7164792b318b2a06c759833bадрес ExtraBalWithdrawalконтакта.
    • Скопируйте значение Баланса результата с левой стороны страницы и вставьте это значение в поле значения .
    • В разделе «Выполнить из » выберите свою учетную запись.
    • Введите 0 в качестве количества ETH в поле «Отправить ETHER».
    • Нажмите кнопку ВЫПОЛНИТЬ, введите свой пароль и подтвердите.

Вот изображение экрана:введите описание изображения здесь

Способ 2 — Шаг 4 — ВыполнитьExtraBalWithdrawal.Withdraw

--- ПОКА НЕ ВЫПОЛНЯЙТЕ ЭТУ ИНСТРУКЦИЮ. Кураторы не заполнили extraBalWithdrawalдоговор и исполнение не удастся. Этот пост будет обновлен, когда вы сможете выполнить этот скрипт ---

Это приведет к выводу ETH из ExtraBalWithdrawalконтракта на ваш счет. Убедитесь, что вы отправляете 0 эфиров, так как эта транзакция может быть воспроизведена в цепочке Ethereum Classic.

Выберите страницу КОНТРАКТЫ в верхнем меню. Нажмите на EXTRABALWITHDRAWAL . В правой части страницы в разделе ЗАПИСАТЬ КОНТРАКТ выберите функцию Снять . В разделе «Выполнить из » выберите свою учетную запись. Введите 0 в качестве количества ETH в поле «Отправить ETHER». Нажмите кнопку ВЫПОЛНИТЬ, введите свой пароль и подтвердите. Вот изображение экрана:

введите описание изображения здесь



Способ 3 - Вывод средств с помощьюgeth

ОБНОВЛЕНИЕ, 05:22, 8 сентября 2016 г., UTC. Контракт ExtraBalWithdrawal был обновлен, а приведенный ниже код протестирован. Обратите внимание на новый адрес и ABI в приведенном gethниже сценарии.

Убедитесь, что вы используете версию geth 1.4.10 или более позднюю. И запускайте свои команды geth с помощью --support-dao-fork option, чтобы вы были на хард-форке блокчейна.

--- ПОКА НЕ ВЫПОЛНЯЙТЕ СЛЕДУЮЩИЕ КОМАНДЫ. Кураторы не заполнили extraBalWithdrawalдоговор и исполнение не удастся. Этот пост будет обновлен, когда вы сможете выполнить этот скрипт ---

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");



Контракт ExtraBalToken

@ledgerwatch в thedao.slack.com/messages/extrabal_community развернул контракт ExtraBalToken по адресу 0x5c40ef6f527f4fba68368774e6130ce6515123f2 .

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;
    }    
}

Контракт ABI это: [{"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"}].

Затем fill(...)@ledgerwatch отредактировал контракт ExtraBalToken со значениями extraBalance, сгенерированными из сценария, аналогичного моему сценарию getTheDAOCreatedTokenEventsWithNonZeroExtraBalance_v4 . Результаты моего скрипта можно найти в CreatedTokenEventsWithNonZeroExtraBalance_v4.txt или CreatedTokenEventsWithNonZeroExtraBalance_v4.xlsx .

Я протестировал контракт ExtraBalToken — см. сценарий сверки и отчет на github.com/bokkypoobah/TheDAOData/ExtraBalTokenValuesReconciliation .

Затем контракт был оформлен seal()в блоке № 2 202 674 .



ExtraBalWithdrawalДоговор

ОБНОВЛЕНИЕ 05:22 8 сентября 2016 UTC ( ExtraBalWithdrawalв WithdrawDAOисходном коде) был обновлен и развернут по новому адресу. trusteeWithdraw(...)был заменен на clawback().

@ledgerwatch развернул обновленный контракт на 0x755cdba6ae4f479f7164792b318b2a06c759833b .

// 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;
    }
}

Контракт ABI это: [{"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"}].

ПРИМЕЧАНИЕ . В этот контракт еще не добавлены эфиры для вывода держателями токенов DAO.



Дополнительные ссылки

Я отправляю следующее в качестве примера, чтобы проверить, использую ли я правильный подход к проверке того, сколько эфира я могу получить. Проверяя свои транзакции на Etherscan, я думаю, что на заключительном этапе я заплатил 100 эфиров в DAO (по 1,5 эфира за 100 DAO). Это было распределено по 7 транзакциям, оплаченным с одного и того же эфирного адреса. При поиске расчетов возврата средств Arachnid я вижу, что мой адрес указан следующим образом. [ "мой адрес", "33000000000000001049" ], я не уверен, что означает длинный номер? Я предполагаю, что это означает
Подтверждено, что у вас есть 33 ETH на счете ExtraBalance в электронной таблице _v3.xls.
И уж точно, всего не могу понять, когда я получу свой ETH с дополнительного баланса? это мой кошелек 0x5ed61b8839E823884B68Cefb915BfC0846272b6c
Можешь проверить мой? Мне должны вернуть от 5 до 6 ETH, так как я принес DAO в последний момент. Мой ETH-адрес: 0x70aD044822570A44F2addf89f0B1c16A70FF44dB. Я также видел свой адрес в электронной таблице.
@Volodka, ваш вклад в ExtraBalance составляет 36,666666667 ETH. @ Неизвестно, ваш вклад в ExtraBalance составляет 5,5 ETH. Любые другие, просто проверьте свой баланс, и если он правильный, все, что вам нужно сделать, это дождаться, пока попечители будут готовы, и вернуть суммы. В настоящее время они связаны с возмещением (более сложных) разделенных DAO. Если ваши суммы неправильно указаны в электронной таблице в столбце TokenOwner, сообщите мне об этом.
Я заметил в электронной таблице, что в некоторых кошельках указано «Прокси», а в других — «Владелец». В моем случае в кошельке написано «Прокси», хотя я являюсь владельцем рассматриваемого кошелька ETH (можно получить к нему доступ прямо сейчас на myetherwallet.com). Не будут ли они сообщать о дополнительном балансе держателям «прокси» кошельков?
Моя транзакция по снятию средств каким-то образом зависает, в то время как мое одобрение завершается успешно. EtherScan
@PaulduLong , кураторы ещё не пополнили контракт extraBalWithdraw. Я объявлю об этом как об обновлении в этом разделе вопросов и ответов, когда кураторы решат сделать это (или любым альтернативным методом). Просто периодически проверяйте.
Все эти действительно замечательные инструкции, предположим, что ваши токены DAO были куплены из вашего КОНТРАКТА ГЛАВНОГО АККАУНТА, а не из вашего контракта КОШЕЛЬКА... Как можно использовать следующие инструкции (особенно более простые, расположенные ближе к началу), если вы купил токены dao из вашего кошелька - theethereum.wiki/w/index.php/The_DAO_Refunds Все инструкции требуют, чтобы вы ввели адрес базовой учетной записи, что, если вы это сделаете, покажет, что у вас нет токенов doa, вы можете проверить баланс ваш кошелек, но не может вернуть дополнительный баланс, обычный eth и т. д.

Люди, которые считают, что имеют право на дополнительный баланс, могут также проверить свой баланс в этих двух файловых результатах.

По состоянию на пятницу, 26 августа, два других файла от Arachnid и Bokkypoobah имеют небольшие проблемы с округлением при расчете ETH. (Bokkypoobah отличается всего на 0,000000000086360144 ETH, так что вы тоже можете доверять его результатам)

Привет @b25, спасибо за еще один чек. Позже я придумал, как решить проблемы округления, суммируя числа токенов DAO, используя BigNumber и .plus(...)github.com/bokkypoobah/TheDAOETCTokenBalance/blob/master/… , но оставил свой ответ как есть, поскольку цифры достаточно хороши. Спасибо еще раз.