В мире блокчейна и NFT я с незапамятных времен, но так сложилось, что я, как правило, делал достаточно сложные решения. И когда в какой-то момент возникла необходимость создания банального набора NFT токенов в рамках одной незначительной части очередного большого проекта, я подумал, что уж наверняка в эпоху, когда только ленивый не кричит про web3, есть куча решений, которые позволят мне легко и непринужденно, не изобретая велосипедов, решить мою более чем скромную задачу. Каково же было мое удивление, когда такого решения не нашлось! Одни проекты предлагали оформить подписку, другие предлагали создавать токены на базе непонятных смартконтрактов с неприлично широкими правами владельцев этих смартконтрактов. И никто не предложил полноценного решения, которое бы без непонятных лишних костов запустило бы для меня мой собственный смартконтракт, которым бы безраздельно владел я и только я, и предоставило инструментарий для загрузки и хранения контента токенов в какое-нибудь децентрализованное решение, типа IPFS. Было принято решение устранить эту несправедливость и через несколько недель появился MintMe Global, который мы с радостью дарим миру, внося свой посильный вклад в светлое web3 будущее.
Илья Свирин @isvirin
Пользователь
Как закопать и найти клад на Solidity
5 мин
3.3KНи для кого не секрет, что блокчейн является весьма публичной системой, а значит, вся попадающая в него информация, становится незамедлительно доступна всем желающим. Это делает реализацию, казалось бы, простой игровой механики «загадать – дать поотгадывать – дать правильный ответ» не такой уж тривиальной задачей, т.к. на этапе «загадать» можно случайно сообщить всем правильный ответ. Если интересно, как мы это сделали на Solidity, читай под катом.
+4
Смарт контракты Ethereum: что делать при ошибке в смартконтракте или техники миграции
7 мин
10KПри написании смартконтрактов важно помнить, что после загрузки в блокчейн, они уже не могут быть изменены, а следовательно, не могут быть внесены какие-либо улучшения или исправлены какие-то найденные ошибки! Все мы знаем, что ошибки есть в любой программе, а вернувшись к написанному пару месяцев назад коду мы всегда найдем, что там можно улучшить. Как же быть? Единственно возможный вариант – это загрузить новый контракт с исправленным кодом. Но как же быть, если на базе имеющегося контракта уже выпущены токены? На помощь нам приходит миграция! За последний год я попробовал много разных техник ее реализации, проанализировал применяемые в других крупных блокчейн проектах и что-то поизобретал сам. Подробности под катом.
+14
Смарт контракты Ethereum: пишем простой контракт для ICO
7 мин
29KВ последнее время ко мне поступает огромное количество запросов за помощью в разработке смартконтракта для проведения ICO, при этом у меня не хватает времени, чтобы помочь каждому. Поэтому я решил написать этот небольшой пост (ссылка на видео в конце поста), в котором описываю очень простой смартконтракт для проведения crowdsale, который вы можете использовать в своих проектах.
+27
Смарт контракты Ethereum: структурируем токены как акции
9 мин
28KВ настоящее время идет настоящая волна хайпа криптовалют и череда успешных ICO самых разнообразных проектов, в том числе имеющих весьма сомнительное или не имеющих вообще никакого отношения к децентрализации и другим базовым принципам блокчейн. В ходе ICO на продажу широкой публике выставляются некие виртуальные сущности – токены. Наполнение этих самых токенов какой-либо реальной «ценностью», как правило, уникально для каждого проекта. В рамках данной статьи я хочу рассмотреть структурирование токена как «акции», когда держатель этих токенов претендует на получение дивидендов от проекта, пропорционально имеющемуся у него проценту токенов от общей эмиссии. Это создает целый ряд правовых коллизий и неопределенностей, поэтому на сегодня нет ни одного крупного проекта, построенного по этой логичной и понятной для инвесторов модели, но юридические аспекты мы вынесем за скобки и остановимся лишь на технической реализации.
+8
Рецепты против взаимных блокировок на сигнальных переменных
5 мин
22KДоброго времени суток, уважаемые Хабраюзеры!
Этим постом я продолжаю серию статей, направленных на борьбу за чистоту и безопасность разрабатываемых многопоточных программ.
Рисунок 1 – Взаимная блокировка 1-го рода с участием сигнальной переменной.
В рамках этого поста мы рассмотрим проблемы, которые возникают при использовании сигнальных переменных, и покажем, как их можно избежать.
Этим постом я продолжаю серию статей, направленных на борьбу за чистоту и безопасность разрабатываемых многопоточных программ.
Рисунок 1 – Взаимная блокировка 1-го рода с участием сигнальной переменной.
В рамках этого поста мы рассмотрим проблемы, которые возникают при использовании сигнальных переменных, и покажем, как их можно избежать.
+37
Российский центр программирования в Дубне уходит под воду!
2 мин
46K20 апреля 2013 года на официальном Портале Наукограда Дубна появилась новость с устрашающим названием «Паводок развивается по самому тревожному сценарию». Вот небольшая цитата из нее:
Думаю, вы поймете наше беспокойство, если я скажу, что именно в Дубне находится место, называемое Российским центром программирования, в котором, собственно, находится центр разработки нашей группы компаний и большая часть наших корпоративных ресурсов!
На очередном заседании оперативного штаба Глава города В.Э. Прох сообщил: «К сожалению, паводок развивается по самому тревожному сценарию, идет очень мощный сброс воды с Иваньковского водохранилища. Сегодня вода подступила к критической отметке уровня – уже частично затоплены садоводческие товарищества, в т.ч. «Заря», «Заря -1», «Дубна», вода вплотную подступает к жилым домам. В таких условиях, с целью защиты населения, я вынужден был объявить режим чрезвычайной ситуации.
Думаю, вы поймете наше беспокойство, если я скажу, что именно в Дубне находится место, называемое Российским центром программирования, в котором, собственно, находится центр разработки нашей группы компаний и большая часть наших корпоративных ресурсов!
+64
Два простых правила для предотвращения взаимных блокировок на мьютексах
6 мин
57KЗдравствуйте, уважаемые Хабраюзеры!
Так сложилось, что это третий пост в блоге нашей компании, и, как и первые два, он посвящен вопросам многопоточного программирования и проблемам, которые при этом возникают. Получилось так неслучайно, ведь мы на собственной «шкуре» испытали, что ситуации, возникающие при написании многопоточных программ, невероятно сложны для отладки, так как во многом определяются динамикой работы программы на конкретной аппаратной платформе. Уверен, что большинство программистов сталкивались с ситуацией, когда программа, которая прекрасно работает на одном компьютере, на другом совершенно неожиданно начинает дедлочиться практически «на ровном месте».
Так сложилось, что это третий пост в блоге нашей компании, и, как и первые два, он посвящен вопросам многопоточного программирования и проблемам, которые при этом возникают. Получилось так неслучайно, ведь мы на собственной «шкуре» испытали, что ситуации, возникающие при написании многопоточных программ, невероятно сложны для отладки, так как во многом определяются динамикой работы программы на конкретной аппаратной платформе. Уверен, что большинство программистов сталкивались с ситуацией, когда программа, которая прекрасно работает на одном компьютере, на другом совершенно неожиданно начинает дедлочиться практически «на ровном месте».
+64
Pthread_cond_timedwait: проблема, решение, дискуссия
4 мин
15KRecovery Mode
Здравствуйте, уважаемые Хабраюзеры!
Продолжая серию постов по многопоточному программированию, хочется коснуться одной фундаментальной проблемы использования сигнальных переменных в Linux, к сожалению, не имеющей пока красивого универсального решения (а может оно просто неизвестно мне). Многие, к сожалению, даже не догадываются о том, что такая проблема имеет место быть.
Рассмотрим простой пример использования сигнальной переменной:
Продолжая серию постов по многопоточному программированию, хочется коснуться одной фундаментальной проблемы использования сигнальных переменных в Linux, к сожалению, не имеющей пока красивого универсального решения (а может оно просто неизвестно мне). Многие, к сожалению, даже не догадываются о том, что такая проблема имеет место быть.
Рассмотрим простой пример использования сигнальной переменной:
struct timeval now;
struct timespec timeout;
gettimeofday(&now, 0);
timeout.tv_sec = now.tv_sec + 2; // 2 sec
timeout.tv_nsec = now.tv_usec * 1000; // nsec
retval=0;
pthread_mutex_lock(&mutex);
while(!somethingHappens() && retval==0)
{
retval=pthread_cond_timedwait(&condition, &mutex, &timeout);
}
pthread_mutex_unlock(&mutex);
+25
Информация
- В рейтинге
- Не участвует
- Откуда
- Москва, Москва и Московская обл., Россия
- Дата рождения
- Зарегистрирован
- Активность