Ethereum на практике часть 3: Как построить свой собственный прозрачный банк на блокчейн
Это последний из серии трех постов про то как использовать Ethereum Wallet для создания DAO (Демократических Автономных Организаций). В первой части мы рассмотрели как создать жетоны (token). Во второй части мы сделали демократическую организацию, которая управляется с помощью этих жетонов. Теперь мы замкнем кольцо, и сделаем жетоны, которые контролируются организацией!
Мы собираемся изменить контракт наших жетонов таким образом, чтобы организация сама могла их «печатать». Сохраните адрес вашей текущей DAO в блокноте и постарайтесь запомнить соответствующую ей иконку. Возьмем этот исходный код http://chriseth.github.io/browser-solidity/?gist=1e8ebf35ff1fd48aca46 и сделаем все как обычно: contracts > deploy new contract > solidity source code > pick contract
Вы можете заполнить поля как пожелаете. Более того, теперь разрешено использовать смайлы для текстовых полей! Обратите внимание появилось новое поле, которого раньше не было — Central Minter т.е. тот, кто имеет право печатать новые жетоны. Вставляем сюда адрес нашей DAO.
Подождем немного, пока контракт установится. После того как получим хотя бы два подтверждения, перейдем в контракт описывающий нашу Организацию. На счету появился миллион новых монет! А в списке контрактов появился новый контракт — DAO dollar (admin page).
Выбираем функцию mintToken в выпадающем списке. Указываем какой-нибудь свой адрес, и количество монет, которые мы хотим создать «из воздуха». Нажимаем execute, но не нажимаем отправить (send)! Вы заметите, что высветилось предупреждение о том, что перевод не может быть выполнен. Только ваша Демократическая Организация имеет право печатать новые монеты, а вы пытаетесь делать это собственноручно. Нужно обратиться к Организации, но код вызова будет точно такой же, поэтому просто скопируем его.
Скопируйте исполнимый код из поля data в блокнот. И еще нам понадобится адрес вашего последнего Mint-контракта.
Теперь возвращаемся в контракт вашей Демократической Организации и создадим новое предложение с такими полями:
Beneficiary – адрес вашей новой валюты.
etherAmount – оставляем пустым
jobDescription – маленькое примечание о том, что мы создаем новые монеты
transactionBytecode – вставляем тот байт-код, который мы скопировали в блокнот из поля data перед этим.
Через несколько секунд вы увидите детали по этому предложению. В отличие от других, поле transactionBytecode может быть очень длинным и его дорого хранить в блокчейне. Поэтому архивирование ложится на плечи того кто будет исполнять решение, если оно будет принято.
Но это наверное создает дыру в безопасности: как можно голосовать за действие исходный код которого еще не указан? Что помешает выполнить другой код вместо того который был указан вначале? Именно поэтому мы сохраняем хэш байт-кода. Промотайте немного «read from contract» и вы увидите функцию проверки предложения, где каждый желающий может подставить се параметры и проверить совпадают ли они с теми за которые было голосование. Это также гарантирует, что предложение не будет выполнено, если хэш байт-кода не совпадет в точности с тем который был веден перед началом голосования.
Теперь каждый может голосовать за предложение. А тот, у кого есть правильный байт-код сможет выполнить контракт после того как все за него проголосуют. Если предложение будет поддержано, то свеженапечатанные монетки появятся на счету у Алисы, так как будто они были отправлены с нулевого адреса.
Почему отправка идет с нулевого адреса (0x0000…)? Потому что противоположная операция, отправка на нулевой адрес, это эффективный способ «сжигать» деньги. И что еще более важно — потому что так было описано в исходном коде контракта. Если пожелаете, то можете изменить этот параметр.
Теперь у вас есть свой собственный центробанк на блокчейне. Защищенный от мошенничества, потому что все действия прозрачны и записываются. Организация может также изымать монеты из оборота отправляя их на нулевой адрес или замораживая счета. Но эти действия, также, как и генерация новых монет, происходят только с одобрения членов Демократического Организации.
Возможности использования этой Демократической Автономной Организации:
1) Создание стабильной универсальной криптографической валюты. Управляя количеством монет в обращении участники Организации получают возможность создать актив, стоимость которого не меняется слишком резко.
2) Выдача сертификатов, подтверждающих право на активы: монеты могут соответствовать реальным предметам или внешним деньгам, которыми владеет Организация. Когда имущество приобретается или продается Центробанк может пропорционально увеличивать количество монет в обороте или сжигать их, чтобы удерживать адекватный курс.
3) Цифровые активы. Организация может владеть Эфиром или другими, основанными на эфире, криптовалютами.
Что можно улучшить:
Есть много чего, что можно улучшить. Но мы оставим пока все как есть. Это будет домашним заданием и вызовом для читателей:
1. В данной версии голосование происходит на основе жетонов, которые неконтролируемо раздаются. Может быть сделать так чтоб членство в группе было основано на приглашениях, каждый новичок автоматом получает один голос? Или может быть использовать квадратичное голосование (quadratic voting)? Или текучую демократию (liquid democracy)?
2. Как на счет альтернативных способов голосования? Может быть кроме «за» и «против» добавить более гибкие голоса? Например, голос за перенос голосования, или «воздержался», которое поможет собрать кворум.
3. Сейчас все предложения имеют одинаковый период для обсуждения. Может быть сделать период пропорциональным передаваемой сумме?
4. Попробуйте создать улучшенные жетоны, которые будут автоматически появляться после отправки в них эфира. А после «сжигания» пусть эфир возвращается обратно.
5. Чем Демократическая Автономная Организация может еще владеть и распоряжаться кроме жетонов?
Эфирим тоже класная крипто валюта! я ее зарабатываю