Я не хочу использовать Mist для взаимодействия с DAO. Как мне сделать это из geth вместо этого?
Предположение: у вас есть (полностью синхронизированный) geth на Linux, несколько токенов DAO и доступ к учетной записи, с помощью которой вы купили токены DAO.
Во-первых, вам нужен ABI контракта DAO. Это определение интерфейса, которое позволяет вам взаимодействовать с контрактом DAO в блокчейне. Вот это в сущности. Это долго.
https://gist.github.com/fivedogit/4f3e9a035262b99b2e7356a4fdf6dd34
Или отсюда (slockit github):
https://github.com/slockit/DAO/wiki/The-DAO-v1.0-Code
Вырежьте и вставьте все это, а затем введите это в geth, чтобы установить его в переменную:
> var abi = <paste it here, no outer quotes necessary>;
ABI сообщает geth, как понимать байт-код по адресу в блокчейне. С его помощью вы можете использовать метод web3 «eth.contract» для взаимодействия с контрактом DAO по его адресу:
> var contract = web3.eth.contract(abi).at(“0xbb9bc244d798123fde783fcc1c72d3bb8c189413″);
Теперь вы можете выполнять все методы, которые поддерживает контракт DAO. Как насчет проверки баланса?
> contract.balanceOf(eth.coinbase);
или же
> contract.balanceOf(“0xabc123…”);
Разделите это число на 10^16, чтобы получить общее количество токенов DAO в его «естественном» номинале. Для меня:
> contract.balanceOf(eth.accounts[1]);
80000000000000000000
> contract.balanceOf(eth.accounts[1])/10000000000000000;
8000
На момент написания этой статьи у меня было 8000 токенов DAO.
Проверка вашего баланса — это «постоянный» метод (как вы можете видеть из ABI), что означает, что он считывается из блокчейна и не требует газа для выполнения.
Однако перевод баланса меняет состояние блокчейна и требует небольшого платежа за газ. В следующей команде параметр "{from:YOURADDR}" предоставляет этот платеж. Вы можете явно указать газ следующим образом: "{from:YOURADDR,gas:2500000}", но у geth есть значение по умолчанию, которое он предоставит, если вы этого не сделаете, поэтому я не показываю его ниже. (Неиспользованный газ всегда возвращается.)
НО СНАЧАЛА! Нам нужен адрес обмена, чтобы отправить его. В Poloniex он находится в разделах «Баланс» и «Депозиты и снятие средств». Найдите DAO в списке и нажмите на ссылку, чтобы получить адрес депозита.
Теперь вот команда выполнения перевода (это переведет 2000 токенов DAO на адрес поло из моей второй учетной записи ETH):
contract.transfer(“0xaaaaPoloDAODepositAddressaaaaa”, 20000000000000000000, {from:eth.accounts[1]});
Подождите, пока транзакция распространится, затем снова проверьте свой баланс с помощью:
> contract.balanceOf(eth.accounts[1])/10000000000000000;
6000
Моим токенам потребовалось около часа, чтобы попасть в Poloniex (28.05.2016), так что не паникуйте, если вы не видите, что перевод происходит сразу.
Удачи!
Уилл Бикфорд