Pull to refresh

Comments 12

Язык Solidity создан специально под задачу разработки смарт-контрактов с нуля, он имеет C-подобный синтаксис. Кроме него, есть другие языки: есть похожие на JavaScript, есть язык, похожий на Python.

Какой же язык похож на Javascript больше, чем Solidity?
Эмм… а чем он похож на js? Скобочками? Классами (хе)? Множественным наследованием (хехе)? Типизацией (ну вы поняли)?

Да он на go больше похож, чем на js

Я вообще сначала подумал, что это JS. Пока некоторые особенности не кинулись в глаза.

2 therealal Добрый вечер, прежде всего хочу сказать спасибо за статью.
Не могли бы вы ответить, пожалуйста, на пару вопросов:

  1. Вы пишете: «Хорошо, когда ICO декомпозировано».
    Я правильно понимаю, что чем больше сущностей, тем дороже будет стоить деплой и может быть последующее выполнение задеплоиных функций?
    Как найти грани разумного?
    По мне, так тут дилемма: говнокод или красивая архитектура?
    Цена вопроса — свои деньги и деньги инвесторов.
  2. Как Вы предлагаете использовать библиотеку SafeMath? Отдельно ее деплоить и использовать в коде, как отдельную сущность? Если так, то это может обойтись дороговато.
  3. В статье не увидел ни слова про отладку Solidity кода, это очень важный момент в стадии разработки смарт-контрактов. Как производить отладку Solidity кода?
  4. Вы, что серьезно предлагаете тесты проводить на Testnet?
    По мне так очевидный вариант, это сначала задеплоить все на TestRPC, это занимает меньше минуты без дополнительных телодвижений. Если уж говорить, про Testnet, допустим, нужно протестировать логику на реальных суммах, которые будут на продакшене, как это сделать на Testnet? Как получить, например, больше тысячи тестового эфира? Если оперировать тестовыми суммами, то повышается риск чего-то забыть при деплое на Mainnet.
  5. Как рассчитать примерную сумму, которая должна лежать на аккаунте того, кто делает деплой? Кинул я 1 эфир, начал деплоить, а денег не хватило, что в этом случае будет?
  6. В Вашей статье очень мало информации о том, как поднять эфирную ноду, какие решения лучше использовать: Geth, Parity? Сколько занимает времени синхронизация, есть ли подводные камни.
    Я бы, честно говоря, отводил бы под процесс поднятия ноды, при Вашем подходе, около недели.
  7. Можете озвучить среднюю стоимость разработки у вас смарт-контрактов, а также стоимость аудита?
    Приведите пожалуйста примеры, сколько, что стоит, чтобы было понятно как происходит ценообразование.


Лично мне была бы интересна статья, в которой был описан процесс реального проведения ICO (ведь практически любое ICO подразумевает Presale стадию вначале, как в этом случае конвертить Presale токены в ICO токены, а также поддержать обратные переводы в случае фейла, тут очень много нюансов). А то у Вас очень много воды, неподготовленным людям нереально будет самим в этом разобраться. Это мое мнение.
Спасибо за вопросы!

1. По сравнению со сборами даже небольших проектов затраты на деплой и комиссии пренебрежимо малы (к тому же, после последнего хардфорка они стали сильно ниже, см. ethgasstation.info). Гораздо большую угрозу лишние связи представляют для безопасности и надежности, т.к. нужно внимательно проконтролировать доступ и не поиметь проблем из-за reentrancy. Пока что несколько, т.е. единицы контрактов в системе кажется разумным решением. Уверен, с развитием технологий мы увидим и десятки и сотни.

2. В SafeMath методы помечены как internal, т.е. компилятору нет необходимости делать их публичными, и Вам нет нужды ее деплоить. После компиляции и оптимизации их код окажется в теле контракта, и по расходу газа это будет эквивалентно тому, что они прописаны прямо в вызывающем коде.

3. Хороший и важный вопрос. Когда-то столкнулся точно с таким же. К сожалению, готового удобного инструмента получить good ol' stacktrace нет. Приходится прибегать к таким примитивным способам как вывод информации с помощью событий (truffle показывает залогированные события упавшего теста) и локализация багов комментированием кусков кода дихотомией. Надеюсь, я отстал от жизни и в комментариях подскажут решение получше.

4. Автотесты — конечно только на testrpc. В testnet стоит провести тест всего за пределами кода контрактов — т.е. миграций, связи контрактов, верификации, кошельков, и провести пару пробных транзакций.

5. Затраты газа на деплой можно оценить либо по логу testrpc либо опять же на testnet. Затем берем запас на неудачные попытки: умножаем газ на 2.5 — 4. Оцениваем цену газа на момент деплоя — сейчас она в основном мала, 1 Gwei, но в общем случае она колеблется в разы в течение дня в зависимости от загруженности сети. Умножив газ на его цену получим затраты на деплой. Если эфира не хватило в ходе деплоя, текущая миграция завершится с ошибкой, и в следующий раз truffle начнет миграцию с нее.

6. В самом простом варианте можно просто скачать Ethereum Wallet, он скачает geth автоматически и тот начнет синхронизацию. У Вас будет и удобный интерфейс работы с контрактами, и возможность запустить geth с поднятым rpc для truffle:

geth --verbosity 2 --rpcport 8549 --wsport 8550 --rpc console --fast

и добавляем в networks в truffle.js:

    mainnet: {
      host: "localhost",
      port: 8549,
      network_id: 1,
      gasPrice: 1000000000
    }

Первоначальная синхронизация с нуля не проверяет каждую транзакцию и идет относительно быстро (на macbook pro можно уложиться в 8 часов! ура!). Синхронизация не-с-нуля идет заметно медленнее. В определенный момент будет быстрее удалить блокчейн (осторожно — не удалите keystore!) и запустить с нуля. Если есть доверенная контролируемая Вами нода — можно просто скопировать блокчейн с нее. В любом случае мы рекомендуем брать хорошее железо — 256G+ SSD, 8G+ памяти, процессор порядка core i5 или лучше. С магнитными дисками не стоит даже связываться. Совершенно верно, синхронизацию стоит начать за неделю и постоянно донакатывать блоки — уже не раз теряли и свое время и время заказчика на этом, теперь научены опытом.

7. Могу озвучить в личке. Здесь отмечу, что разработчики смарт-контрактов и тем более блокчейнов сейчас могут рассчитывать на очень выгодные условия, в 2-3 раза более выгодные.

Статья эта несмотря на длину, конечно, довольно обзорная. Я уже отмечал, что и по разработке и по безопасности нужны не то что отдельные статьи — отдельные курсы. Отвечая на вопрос про несколько crowdsale'ов — мы используем один токен, владение которым передается от crowdsale к crowdsale с помощью этого mixin'а, защищенного мультиподписью, умеем откатывать токен вместе с возвратом средств. Вот пример из того, что сейчас в работе. Конечно, есть альтернативные варианты.
А есть ли возможность запихнуть в контракт вообще любой разумный код? Ну там, скачать прогноз погоды, и если температура ниже порогового значения — отменить контракт, например…
Возможности контрактов по взаимодействию с внешним миром весьма ограничены, т.к. их работа должна быть проверяема любым узлом сети, и значит всегда возвращать один и тот же результат. Кроме того, опять же поскольку эту работу вынужден будет выполнить любой т.н. полный узел, она дорого стоит (записать 32 байта не так давно стоило порядка $0.2).

Конкретно в случае обращения за прогнозом погоды — это можно, например сходить в какое-либо json-api с помощью сервиса www.oraclize.it — сервис доставит данные в Ваш контракт и ему с какой-то степенью можно доверять. Но лишь с какой-то степенью. Ждем появления т.н. децентрализованных оракулов.
Закончите все это не позднее чем за 3 дня до запуска

Круто, что появляются инфраструктурные статьи по теме!
стоит задеплоить сначала в Testnet — это тестовый блокчейн Ethereum, убедиться, что там все правильно. Там эфир не стоит почти ничего

А что значит «почти»? Т.е. не имея эфира, даже протестировать не получится?
«Почти» потому что его нельзя самому себе нарисовать. В тестнете rinkeby его довольно легко получить: faucet.rinkeby.io. Балансы разных сетей никак не связаны, по сути это независимые криптовалюты.
В процессе погружения в Конкретику ICO, возникли вопросы.
В принципе можно было бы и самому додуматься, на основании логики и Здравого смысла,
но в Реальной жизни к сожалению не все опирается на Л и ЗдрСм.

В связи с этим хотелось бы услышать мнение человека с Опытом в Реальном прцессе ICO.

Итак, воображаемый юзер-кейз:

Скажем, я хочу профинансировать свой Проект за счет ICO
и предлагаю на продажу публике 1000 Токенов, установив продажную цену 1 Токен = 1 ЕТН.
При этом, по сложившейся традиции, я, скажем, 10% оставляю для фаундеров и прочих, а на публику выставлю 90% токенов.

Я старался, мне повезло, никто не облажался, ICO прошло успешно, все Токены проданы.

мои непонятки:

1) эти самые 10% (тоесть 100 токенов) — я САМ добавляю себе в кошелек?
Дo ICO?
Или же, как ни некорректно это звучит/выглядит, выдергиваю их себе из уже проданных
1000 токенов (тоесть Публика получит 900)?
(потому что, если например продалось лишь 880 Токенов, то мои Заранее отложенные 100 токенов — уже никак не будут «10%» ).

2) по факту я привлек 1000 (проданных) Токенов * 1 ЕТН = 1000 ЕТН,
или же ценность Всех токенов составит (1000 Токенов +10% ) * 1ЕТН = 1100 ЕТН?

3) понятно что ценность токенов после ICO определится «биржей»,
тоесть спросом/предложением,
но ДО выхода на биржу, получается некоторая непонятка…
Публика приобрела 1000 Токенов всего, за 1000 ЕТН.
Я потом добавил фаундерские 10%.
Выходит, что на 1000 ЕТН стало 1000+10% окенов, и, таким образом,
токены покупателей обесценились и стали стоить 1000 ЕТН / (1000 токенов +10%) = 0,909 ЕТН?

4) По завершению ICO все эти привлеченные 1000ЕТН — они теперь хранятся/записаны
на МОЕМ кошельке? ( точнее на кошельке ICO/ПРоекта)

Иначе говоря — за счет продажи токенов я привлек 1000 ЕТН, и теперь всю эту 1000 могу использовать на Проект?

Или же (как ни глупо это звучит), «моих» ( Проекта) всего лишь 100 Токенов («10%»)
и чтоб реализовать средства для Проекта мне необходмио продать эти 10%?

И тогда, чтоб еще усугубить, (покольку затраты на Проект не с Потолка, и допустим я расчитал, что нужно именно 1000ЕТН):
чтоб получить эти необходимые для Проекта 1000 ЕТН, которые я вынужден реализовать, продав фаундерские 10%, то тогда на ICO мне надо привлечь 10%* 10 = 10 000 ЕТН?

5) Допустим я озаботился защитой и прочим, и принимал платежи ТОлько в Эфирах.
Если покупатель приобрел напр. 13 моих Токенов, то в его Эфирном кошельке
стало на 13 ЕТН меньше, зато добавилась запись опоявлении млих 13 Токенов?

заранее спасибо за ответ.

Думаю, он будет интересен многим, потому что процедура ICO вроде бы понятна,
но «дьявол в мелочах» и когда начинаешь задумываться о Конкретике,
то появляется куча вопросов без ответов.

(Это не важно, но просто когда я искал в тырнете о распределении токенов после ICO,
то получил 100500 статей для «инвестора» о том, что станет с его деньгами,
но ничего не нашел с ответами именно для ICO-шника )

Здравствуйте!

Спасибо, хорошие вопросы и кейс важный.

Прежде всего рекомендую бесплатную лекцию-воркшоп моего коллеги, где как раз будет затронута тема токена (2 модели токенов: mintable и полный premint) aronicle.timepad.ru/event/665542, по-моему будет трансляция.

По вопросам:

1) Можно добавить себе после ICO (т.н. mintable), а можно до ICO сразу отложить 100, а остальные 900 продать (т.н. полный premint). (900 и 100 чтобы получалось 90% и 10%).

Выдергивать из уже проданных, конечно, не хорошо. Хотя технически возможно в ряде случаев, т.к. балансы токена ведутся в контракте токена, вот тут например: github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/token/ERC20/BasicToken.sol#L15.

2) и 3) Тут как и с покупкой доли в ООО или АО: если 1000 Ваших токенов покупают по 1 ETH, при этом зная, что продаются 90% токенов проекта, значит уже в момент покупки инвесторы оценивают проект в 1000/0.9 = 1111 ETH. До покупки стоимость проекта была сугубо умозрительной, после покупки проект имеет в активах 1000 ETH, плюс у Вас токены оцененные в 111 ETH.
Дополнительное замечание: удвоения стоимости здесь не происходит: т.к. нельзя одновременно продать 90% токенов и продать 1000 ETH (если сначала продать токены, то теряется право распоряжаться эфиром проекта; если сначала продать эфир проекта — то его стоимость наверняка упадет и токены обесценятся).

4) В простом случае — да, эфир собирается сразу Вам в кошелек. Собранный эфир — строго говоря не Ваш, а проекта, напр. пообедать за его счет будет некрасиво и даже (в глазах ряда стран) незаконно. А вот 100 токенов — Ваши личные — можно аккуратно их продать и купить ягуар, но не забывать делать проект.

5) Вцелом да, только число токенов, повторюсь, записано в контракте токена. Адрес этого контракта владелец токенов должен руками добавить в watch token в кошелек.
Sign up to leave a comment.