Смарт-контракты – что это такое и как появились. Смарт-контракты – давайте разбираться вместе.
Оглавление
История смарт-контрактов
Принцип интеллектуальных контрактов был описан американским криптографом и программистом Ником Сабо еще в 1996 году задолго до появления технологии blockchain. Согласно концепции Сабо, интеллектуальные контракты — это цифровые протоколы для передачи информации, которые используют математические алгоритмы для автоматического выполнения транзакции после выполнения установленных условий и полного контроля процесса. Это определение, которое опережало свое время более чем на десять лет, остается точным и по сей день. Однако в 1996 году эта концепция не могла быть реализована: в то время необходимые технологии не существовали, в частности, распределенная книга.
В 2008 году появился bitcoin, появилась первая криптовалюта, созданная на основе революционной технологии blockchain, которой ранее не хватало децентрализованной книги. Blockchain биткоина не позволяет устанавливать условия для совершения транзакции в новом блоке, поскольку он содержит только информацию о самой транзакции. Тем не менее появление технологии послужило толчком для разработки смарт-контрактов. Спустя пять лет блочная платформа Ethereum позволила использовать смарт-контракты на практике. Сегодня рынок предлагает множество платформ, которые позволяют использовать смарт-контракты, но Ethereum остается одним из самых распространенных.
Внешний вид смарт-контракта:
Фото из книги А. Вашкевича «Смарт-контракты: что, зачем и как»
Можно прописать в умном контракте все стадии сделки или отдельную часть. В зависимости от этого он может быть:
- полностью автоматизированным, без бумажных носителей;
- частично автоматизированным, с копией на бумажном носителе (в таком случае нужно заранее договориться, у кого приоритет в случае несоответствия – у кода или текста);
- частично автоматизированным, преимущественно на бумажном носителе (например, если умный контракт регулирует только расчеты, а порядок разрешения споров, заверения об обстоятельствах и т. д. содержится в договоре на естественном языке. Кстати, это наиболее популярная модель).
Язык программирования смарт-контракта зависит от технологии. Если планируется использовать технологию распределенных реестров (блокчейн), есть смысл выбирать Solidity (используется в Ethereum), Go (используется в Hyperledger fabric), Java, Kotlin (Corda R3).
Как работают смарт-контракты?
Как уже упоминалось выше, интеллектуальные контракты — это компьютерные протоколы или, проще говоря, компьютерный код.
Код используется для ввода всех условий договора, заключенного между сторонами сделки, в blockchain. Обязательства участников предоставляются в интеллектуальном контракте в форме «если- то» (например: «если Сторона А переводит деньги, тогда Сторона В, передает права на квартиру»). Могут быть два или более участников, и они могут быть отдельными лицами или организациями. Как только данные условия будут выполнены, смарт-контракт самостоятельно выполняет транзакцию и гарантирует, что соглашение будет соблюдаться.
Смарт-контракты позволяют обменять деньги, товары, недвижимость, ценные бумаги и другие активы. Контракт хранится и повторяются в децентрализованной книге, в которой информация не может быть сфальсифицирована или удалена. В то же время шифрование данных обеспечивает анонимность сторон соглашения. Важной особенностью интеллектуальных контрактов является то, что они могут работать только с активами, находящимися в их цифровой экосистеме. Как подключить виртуальный и реальный мир в настоящее время является одной из основных трудностей работы со смарт-контрактами. Это является причиной существования «оракулов», специальных программ, которые помогают компьютерным протоколам получать необходимую информацию из реального мира.
Преимущества смарт-контрактов
- Скорость. Обработка документов вручную занимает много времени и задерживает выполнение задач. Смарт- контракты предполагают автоматизированный процесс и в большинстве случаев не требуют личного участия, что экономит драгоценное время.
- Независимость. Смарт-контракты исключают возможность вмешательства третьих сторон. Гарантия на транзакцию — сама программа, которая, в отличие от посредников, не даст основания сомневаться в ее целостности.
- Надежность. Данные, записанные в blockchain, не могут быть изменены или уничтожены. Если одна сторона сделки не выполняет свои обязательства, другая сторона будет защищена условиями интеллектуального договора.
- Нет ошибок — Автоматическая система для выполнения транзакций и удаления человеческого фактора обеспечивает высокую точность при выполнении контрактов.
- Сбережения. Смарт-контракты могут обеспечить значительную экономию за счет устранения расходов для посредников и сокращения операционных расходов, а также возможность для сторон работать вместе на более выгодных условиях.
Недостатки Smart Contracrs
Несмотря на их перспективный потенциал, у умных контрактов также есть свои недостатки:
- Отсутствие регулирования. В международно-правовой области отсутствуют концепции «blockchain», «умный контракт» и «криптовалюты».
- Сложность реализации. Интеграция интеллектуальных контрактов с элементами реального мира часто занимает много времени, денег, и усилия.
- Невозможность изменения интеллектуального контракта. Парадоксально, что один из главных плюсов интеллектуальных контрактов также можно рассматривать как конфликт. Если стороны достигают более выгодного соглашения или возникают новые факторы, они не смогут изменить контракт. По этой причине варианты дополнительных соглашений должны быть реализованы по мере разработки новых blockchain платформ.
Где можно использовать смарт-контракты?
Смарт-контракты могут изменять разные области. Мы можем выделить несколько отраслей, в которых интеллектуальные контракты будут наиболее эффективными:
- Финансы
- Страхование
- Электронная коммерция
- Аудит и налогообложение
- Выборы
Теги:
- смарт-контракты
- blockchain
- bitcoin
- Smart Contracrs
Добавить меткиХабы:
- Криптография
- Криптовалюты
Укажите причину минуса, чтобы автор поработал над ошибкамиОтправить анонимноПометьте публикацию своими меткамиМетки лучше разделять запятой. Например: программирование, алгоритмыСохранитьОй, у вас баннер убежал!
Ну. И что? Реклама
Характеристика существующих блокчейн-платформ:
Фото из книги А. Вашкевича «Смарт-контракты: что, зачем и как»
Практическое применение умных контрактов
Используя умные контракты, можно упростить работу во многих сферах жизни, в том числе логистике, менеджменте, юриспруденции и даже в выборах.
Выборы
По мнению экспертов, сфальсифицировать итоги выборов практически нереально, однако благодаря умным контрактам можно полностью исключить возможность внешнего вмешательства в систему голосования.
В таком случае голоса избирателей будут помещены в распределенный реестр, и для их декодирования потребуется исключительные вычислительные возможности. Таких компьютеров не существует, так что взломать эту систему будет невозможно.
Менеджмент
Блокчейн не только предлагает надежный и прозрачный общий реестр, но и помогает избежать недопонимания при совместной работе или ситуаций, когда стороны составляют контракты независимо друг от друга.
Логистика и снабжение
Разработчик протокола Bitcoin Core Джефф Гарзик говорит:
«UPS может исполнять контракты, в которых будет сказано: “Если мы получим оплату за доставку товара, то его производитель, который в цепочке поставок находится на много звеньев выше, немедленно начнет создавать новый такой товар, поскольку этот уже доставлен по назначению”».
Снабжение слишком часто страдает из-за бюрократии, когда разные формы должны пройти утверждение в многочисленных инстанциях. Из-за этого мошенники получают возможность заработать, а компании несут убытки. Блокчейн позволяет избежать этих проблем, так как каждый участник цепочки поставок получает доступ к безопасной электронной системе, которая контролирует выполнение работ и платежи.
Так, банк Barclays Corporate Bank использует умные контракты для того, чтобы регистрировать переход права собственности и автоматически перечислять платежи в другие кредитно-финансовые учреждения.
Автомобили
Задумайтесь о будущем, где все будет автоматизировано. Google уже строит его, создавая умные телефоны, умные очки и даже умные автомобили. И здесь на помощь придут умные контракты.
Возьмем, например, самоуправляемые или самопаркующиеся автомобили. Умные контракты будут определять, кто виновен в аварии: датчик или водитель, а также помогут при разрешении любых других ситуаций. С помощью умных контрактов страховые компании могут устанавливать размер взносов в зависимости от того, где и при каких условиях водители управляют транспортными средствами.
Другие сферы
Другие индустрии, такие как эквайринг, кредитование и бухгалтерский учет, тоже будут использовать умные контракты — например, для оценки рисков и аудита в режиме реального времени. Юристы смогут перейти от составления традиционных контрактов к созданию типовых образцов умных контрактов. А на сайте Blockchain Technologies умные контракты превратились в электронно-бумажный гибрид: они подтверждаются блокчейном и получают материальное воплощение в виде бумажной копии.
Патрик Хаббард, главный специалист и старший управляющий маркетингом продуктов в SolarWinds:
«Янгонская фондовая биржа в Мьянме производит платежи с помощью распределенного реестра. Особый интерес вызывают те функции блокчейна, которые выходят за рамки традиционного использования технологии. Так на Янгонской бирже удалось решить проблему производимых в разное время расчетов в торговой системе, которая синхронизирует торги всего лишь дважды в день. Благодаря тому, что умные контракты сами обеспечивают исполнение сделок, блокчейны с их надежной системой проведения транзакций могут использоваться в ситуациях, где требуется выполнение сложных операций, зависящих от разных изменяющихся факторов. Вот почему Amazon, Microsoft Azure и IBM Bluemix уделяют такое внимание разработке облачной технологии “блокчейн как услуга”».
Разработка смарт-контракта на Ethereum: как создавалась инновация?
Идея создания программы, которая регулировала бы финансовые сделки автоматически, появилась довольно давно. Ее разработка связана с именем Ника Сабо, который еще в 1994 году разрабатывал подобный инструмент. Однако на то время еще никто не придумал блокчейн и реализовать такие идеи было практически невозможно.
Все изменилось с появлением первой криптовалюты: в 2008 году Сатоши Накамото рассказал миру о своем продукте. В исходном коде биткоина уже тогда были встроены элементы смарт-контрактов для безопасного оформления финансовых сделок. Однако в то время разработчики популярной криптовалюты не задействовали всего потенциала блокчейна.
Но все изменилось, когда собственную цифровую валюту начал разрабатывать Виталик Бутерин со своей командой. Они решили внедрить пойти дальше всех остальных и создали эфириум контракты, которые позволили оформлять безопасные сделки в интернете с использование криптовалют.
Первоначально разработчики планировали создать лишь инструмент для безопасных операций в сети. Немного позже криптовалюта Ethereum начала становится полноценным коином, который сейчас является одним из самых популярных на рынке.
Смарт-контракты в Ethereum: где их можно использовать?
Сфера применения новой технологии очень широка: вы можете использовать Ethereum контракты практически во всех торговых сферах. Однако самое большое распространение контракт получил, конечно же, в интернет-торговле.
Сегодня потребители очень большую часть товаров покупают напрямую через интернет. И им важно знать, что они точно получать свой товар, если заплатят его онлайн-магазину. Данная инновация нашла свое применение не только в покупке мелких товаров, но также в сфере услуг.
Предположим, вы приехали на отдых в Италию и вам нужно снять квартиру на несколько недель, чтобы спокойно провести время у моря. Отлично, вы можете заранее найти подходящий вариант в интернете. Сейчас оплату можно произвести и не встречаясь с арендодателем: вы можете оформить сделку через смарт-контракт, внести определенную сумму за проживание, а также деньги в качестве залога.
Сам владелец квартиры может установить в жилище некоторые инструменты “умного дома” и, например, поставить блокировку замков при истечении двух недель. Как только время аренды завершается, замки автоматически закрываются, а вы получаете свой залог при помощи smart-contract Ethereum.
Также известны случаи, когда люди составляли завещание и помещали его в смарт-контракты. Это позволяло не обращаться к посторонним лицам для распределения наследства и быть уверенным в том, что после смерти все имущество будет распределено так, как это написано в завещании.
Сама программа будет периодически проверять список умерших, который государство размещает в сети. Как только там появится владелец наследства, все деньги автоматически перейдут в руки наследников. И все эти операции будут выполнены с помощью программы.
Нетрудно догадаться о том, что создание смарт-контракта на Ethereum подразумевает за собой интеграцию с внешними источниками информации. Проверять требуемые данные тоже можно в автоматическом режиме. Для этого используются оракулы.
Эфириум-контракты: зачем нужен оракул и как он работает?
Сегодня основные задачи, которые ставят перед собой разработчики смарт-контрактов – это совершенствование путей получения данных, которые говорили бы об исполнении условий того или иного контракта.
Оракулы созданы для того, чтобы перерабатывать полученную из источников информацию и поставлять ее в смарт-контракт Эфириума в пригодном для считывания виде. Это своеобразный посредник, который адаптирует данные.
Как вы понимаете, в сфере получения объективной информации есть некоторые проблемы: сейчас в сети очень много источников и многие из них противоречат друг другу. Поэтому задача программистов сегодня – разработка оракулов, которые смогут добывать достоверную и проверенную информацию. А этого добиться не так уж и просто.
Причем следует добиться того, чтобы оракулы имели доступ в абсолютно все возможные сферы человеческой деятельности: любые колебания цен на биржах, финансовое состояние той или иной компании и другие важные сведения. Это позволит использовать Ethereum-контракты при различных сделках и обеспечивать безопасность транзакций.
Сейчас над разработкой способов получения объективных данных работает множество специалистов. Так, например, Microsoft и IBM вкладывают огромные средства в разработку платформ, которые помогут собирать различную информацию в одном месте. Но, стоит отметить, что в данной сфере еще очень много работы.
Сегодня, кстати, многие программисты получают неплохой заработок на написании смарт-контрактов для Ethereum, ведь основная проблема при создании кода – найти путь получений важных фактов. А это трудозатратная работа, которая стоит дорого.
Создание смарт-контракта на Ethereum: основные преимущества
Что же, давайте выделим некоторые плюсы, которые может получить любой пользователь при использовании данной технологии. Почему многие эксперты считают, что данное нововведение может стать неотъемлемой частью торговли в будущем?
- Сфера применения. Вы можете использовать данные контракты практически при любых операциях. Причем транзакции с использованием смарт-контрактов всегда будут безопасными;
- Скорость обмена. По причине отсутствия посредников, скорость транзакций в разы увеличится. Давно известно, что чем меньше «цепь» из участников сделки, тем быстрее она завершается. В данном случае обмен происходит напрямую между покупателем и продавцом;
- Сохранение всех данных. Сведения о транзакциях невозможно будет подделать, удалить или изменить. Этот факт помогает предотвратить незаконные действия мошенников и обезопасить процесс торговли.
Это основные преимущества, которые делают Ethereum смарт-контракты перспективными для развития.
Смарт-контракты в Ethereum: минусы разработки
Но не все так гладко, как хотелось бы разработчикам и пользователям. При использовании данных инноваций есть некоторые недостатки, которые нельзя обойти вниманием. Почему смарт-контракты не так хороши?
- При работе с данными контрактами всегда используются криптоденьги. А они, в свою очередь, не так популярны. И во многих странах правительства их попросту игнорируют, что создает некоторые несостыковки с законом;
- Чтобы разобраться, как создать смарт-контракт на Ethereum, нужно потратить довольно много времени. Обычно его разрабатывают программисты. При его создании нельзя допускать никаких ошибок – иначе сделки будут недействительны, либо будут проводиться по неправильным алгоритмам;
- Также можно выделить ряд проблем с получением достоверных данных в сети. Объективность получаемой оракулами информации по прежнему остается спорной.
Что же, как вы можете видеть, Ethereum смарт-контракты имеют ряд преимуществ и недостатков. И сложно точно сказать о том, смогут ли они в будущем использоваться повсеместно, ведь не так легко внедрить данную технологию в жизнь. Однако частные случаи показывают, что использование подобных контрактов улучшают работу любой системы.
Код токена
Ниже размещен код нашего токена. Это простой токен. Что я подразумеваю под простым токеном? Есть токены с краудсейлами, баунти, эирдропами и т.д. У нас же будет простой токен без всех этих вещей, в последующих уроках напишем и краудсейлы, и баунти и т.д. Несмотря на то что это простой токен, он вполне работоспособен и соответствует стандарту ERC20. Эмиссия токена будет составлять 10 000 000 (десять миллионов) штук, токен будет называться SET, описанием будет Simple Ethereum Token. Название, описание и количествово токенов можно изменить в первых строчках кода.
Откройте сайт http://remix.ethereum.org, удалите имеющийся там код и вставьте код нашего токена.
C++ pragma solidity ^0.4.21; contract simpleToken { uint256 totalSupply_; string public constant name = “Simple Ethereum Token”; string public constant symbol = “SET”; uint8 public constant decimals = 18; uint256 public constant initialSupply = 10000000*(10**uint256(decimals)); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; function totalSupply() public view returns (uint256){ return totalSupply_; } function balanceOf(address _owner) public view returns (uint256){ return balances[_owner]; } function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } function transfer(address _to, uint256 _value) public returns (bool ) { require(_to != address(0)); require(balances[msg.sender] >= _value); balances[msg.sender] = balances[msg.sender] – _value; balances[_to] = balances[_to] + _value; emit Transfer(msg.sender, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue – _subtractedValue; } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function simpleToken() public { totalSupply_ = initialSupply; balances[msg.sender] = initialSupply; emit Transfer(0x0, msg.sender, initialSupply); } } 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 pragma solidity^0.4.21; contractsimpleToken{ uint256 totalSupply_; stringpublicconstant name=”Simple Ethereum Token”; stringpublicconstant symbol=”SET”; uint8 publicconstant decimals=18; uint256 publicconstant initialSupply=10000000*(10**uint256(decimals)); eventTransfer(address indexed from,address indexed to,uint256 value); eventApproval(address indexed owner,address indexed spender,uint256 value); mapping(address=>uint256)balances; mapping(address=>mapping(address=>uint256))allowed; functiontotalSupply()publicview returns(uint256){ returntotalSupply_; } functionbalanceOf(address _owner)publicview returns(uint256){ returnbalances[_owner]; } functionallowance(address _owner,address _spender)publicview returns(uint256){ returnallowed[_owner][_spender]; } functiontransfer(address _to,uint256 _value)publicreturns(bool){ require(_to!=address(0)); require(balances[msg.sender]>=_value); balances[msg.sender]=balances[msg.sender]-_value; balances[_to]=balances[_to]+_value; emit Transfer(msg.sender,_to,_value); returntrue; } functionapprove(address _spender,uint256 _value)publicreturns(bool){ allowed[msg.sender][_spender]=_value; emit Approval(msg.sender,_spender,_value); returntrue; } functiontransferFrom(address _from,address _to,uint256 _value)publicreturns(bool){ require(_to!=address(0)); require(_value<=balances[_from]); require(_valueoldValue){ allowed[msg.sender][_spender]=0; } else{ allowed[msg.sender][_spender]=oldValue-_subtractedValue; } emit Approval(msg.sender,_spender,allowed[msg.sender][_spender]); returntrue; } functionsimpleToken()public{ totalSupply_=initialSupply; balances[msg.sender]=initialSupply; emit Transfer(0x0,msg.sender,initialSupply); }}
В Remix-е перейдите на вкладку Settings и измените версию Solidity на 0.4.21
После этого вернитесь на вкладку Compile и нажмите Start to compile. Дождитесь окончания компиляции (обычно несколько секунд) и нажмите на Details.
Откроется всплывающее окно с необходимыми нам данными — Байткодом и ABI. В байткоде нам необходимо скопировать то, что находится в поле object: от кавычек до кавычек. Скопируйте и сохраните в блокнот или другой редактор, ABI скопируйте полностью и тоже сохраните в блокнот. В моем случае Bytecode и ABI выглядят так:
Bytecode
6060604052341561000f57600080fd5b601260ff16600a0a6298968002600081905550601260ff16600a0a6298968002600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff1660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601260ff16600a0a62989680026040518082815260200191505060405180910390a3611174806100dd6000396000f3006060604052600436106100ba576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146100bf578063095ea7b31461014d57806318160ddd146101a757806323b872dd146101d0578063313ce56714610249578063378dc3dc1461027857806366188463146102a157806370a08231146102fb57806395d89b4114610348578063a9059cbb146103d6578063d73dd62314610430578063dd62ed3e1461048a575b600080fd5b34156100ca57600080fd5b6100d26104f6565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101125780820151818401526020810190506100f7565b50505050905090810190601f16801561013f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561015857600080fd5b61018d600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061052f565b604051808215151515815260200191505060405180910390f35b34156101b257600080fd5b6101ba610621565b6040518082815260200191505060405180910390f35b34156101db57600080fd5b61022f600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061062a565b604051808215151515815260200191505060405180910390f35b341561025457600080fd5b61025c6109b9565b604051808260ff1660ff16815260200191505060405180910390f35b341561028357600080fd5b61028b6109be565b6040518082815260200191505060405180910390f35b34156102ac57600080fd5b6102e1600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506109ce565b604051808215151515815260200191505060405180910390f35b341561030657600080fd5b610332600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610c4f565b6040518082815260200191505060405180910390f35b341561035357600080fd5b61035b610c98565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561039b578082015181840152602081019050610380565b50505050905090810190601f1680156103c85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156103e157600080fd5b610416600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610cd1565b604051808215151515815260200191505060405180910390f35b341561043b57600080fd5b610470600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610ed5565b604051808215151515815260200191505060405180910390f35b341561049557600080fd5b6104e0600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506110c1565b6040518082815260200191505060405180910390f35b6040805190810160405280601581526020017f53696d706c6520457468657265756d20546f6b656e000000000000000000000081525081565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60008054905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561066757600080fd5b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111515156106b557600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561074057600080fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205403600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205401600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205403600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b601281565b601260ff16600a0a629896800281565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905080831115610adf576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610b63565b828103600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6040805190810160405280600381526020017f534554000000000000000000000000000000000000000000000000000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610d0e57600080fd5b81600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515610d5c57600080fd5b81600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205403600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205401600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205401600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050929150505600a165627a7a72305820c9398ad1b13b5cf341a545adbcc39ca80078948a31f68888b23eafc4542239e20029
[свернуть] ABI [ { «constant»: true, «inputs»: [], «name»: «name», «outputs»: [ { «name»: «», «type»: «string» } ], «payable»: false, «stateMutability»: «view», «type»: «function» }, { «constant»: false, «inputs»: [ { «name»: «_spender», «type»: «address» }, { «name»: «_value», «type»: «uint256» } ], «name»: «approve», «outputs»: [ { «name»: «», «type»: «bool» } ], «payable»: false, «stateMutability»: «nonpayable», «type»: «function» }, { «constant»: true, «inputs»: [], «name»: «totalSupply», «outputs»: [ { «name»: «», «type»: «uint256» } ], «payable»: false, «stateMutability»: «view», «type»: «function» }, { «constant»: false, «inputs»: [ { «name»: «_from», «type»: «address» }, { «name»: «_to», «type»: «address» }, { «name»: «_value», «type»: «uint256» } ], «name»: «transferFrom», «outputs»: [ { «name»: «», «type»: «bool» } ], «payable»: false, «stateMutability»: «nonpayable», «type»: «function» }, { «constant»: true, «inputs»: [], «name»: «decimals», «outputs»: [ { «name»: «», «type»: «uint8» } ], «payable»: false, «stateMutability»: «view», «type»: «function» }, { «constant»: true, «inputs»: [], «name»: «initialSupply», «outputs»: [ { «name»: «», «type»: «uint256» } ], «payable»: false, «stateMutability»: «view», «type»: «function» }, { «constant»: false, «inputs»: [ { «name»: «_spender», «type»: «address» }, { «name»: «_subtractedValue», «type»: «uint256» } ], «name»: «decreaseApproval», «outputs»: [ { «name»: «», «type»: «bool» } ], «payable»: false, «stateMutability»: «nonpayable», «type»: «function» }, { «constant»: true, «inputs»: [ { «name»: «_owner», «type»: «address» } ], «name»: «balanceOf», «outputs»: [ { «name»: «», «type»: «uint256» } ], «payable»: false, «stateMutability»: «view», «type»: «function» }, { «constant»: true, «inputs»: [], «name»: «symbol», «outputs»: [ { «name»: «», «type»: «string» } ], «payable»: false, «stateMutability»: «view», «type»: «function» }, { «constant»: false, «inputs»: [ { «name»: «_to», «type»: «address» }, { «name»: «_value», «type»: «uint256» } ], «name»: «transfer», «outputs»: [ { «name»: «», «type»: «bool» } ], «payable»: false, «stateMutability»: «nonpayable», «type»: «function» }, { «constant»: false, «inputs»: [ { «name»: «_spender», «type»: «address» }, { «name»: «_addedValue», «type»: «uint256» } ], «name»: «increaseApproval», «outputs»: [ { «name»: «», «type»: «bool» } ], «payable»: false, «stateMutability»: «nonpayable», «type»: «function» }, { «constant»: true, «inputs»: [ { «name»: «_owner», «type»: «address» }, { «name»: «_spender», «type»: «address» } ], «name»: «allowance», «outputs»: [ { «name»: «», «type»: «uint256» } ], «payable»: false, «stateMutability»: «view», «type»: «function» }, { «inputs»: [], «payable»: false, «stateMutability»: «nonpayable», «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» }, { «anonymous»: false, «inputs»: [ { «indexed»: true, «name»: «owner», «type»: «address» }, { «indexed»: true, «name»: «spender», «type»: «address» }, { «indexed»: false, «name»: «value», «type»: «uint256» } ], «name»: «Approval», «type»: «event» } ]Деплоим смарт-контракт в MyEtherWallet
Теперь открывайте https://www.myetherwallet.com/ — именно здесь мы задеплоим наш контракт. Если вы хотите создать токен в тестовой сети, то в правом верхнем выпадающем списке выберите Network Ropsten (Myetherapi.com). Если в реальной сети, то останьтесь в ETH (Myetherapi). Я буду создавать токен в тестовой сети.
В верхнем меню выберите контракт и нажмите подменю Опубликовать контракт.
- В поле Байткод вставьте байткод (тот, который копировали от кавычек до кавычек)
- В поле Лимит газа автоматически рассчитается значение лимита (сами ничего в него не пишите)
- Теперь ниже нужно вставить приватный ключ от нашего кошелька чтобы отпереть его и произвести транзакцию создания токена. Сделайте это и нажмите Отпереть.
- После этого жмите Подписать транзакцию и Опубликовать контракт. В сплывающем окне подтвердите.
Вот и готов наш токен. Теперь его нужно добавить в Метамаск или MyEtherWallet. Для этого нам потребуется адрес контракта. Запомните: при деплое любого контракта блокчейн Эфира автоматически создает адрес контракта. Не путайте его с адресом своего кошелька.
Чтобы узнать адрес созданного контракта перейдите в https://ropsten.etherscan.io и введите в поиск адрес своего кошелька. В списке транзакций вы увидите запись под названием Contract Creation. Выглядит это так:
Жмите на Contract Creation и перейдете на страницу со своим контрактом. Копируйте адрес контракта и добавляйте его в Метамаск или MyEtherWallet, а после этого можете рассылать свой токен друзьям и знакомым.
Стоимость деплоя смарт-контракта
Вы можете видеть что в нашем контракте есть определенное количество переменных и функций. Каждая переменная и функция стоит определенное количество газа — запомните это! Чем больше функций будет в нашем токене, тем больше газа он потребует на свой деплой. В Эфире есть такое понятие как лимит газа, он плавающий и составляет примерно 7 000 000. Это сделано для того чтобы какой-нибудь «хороший» гражданин не надумал сделать бесконечный цикл, например. Наш вышесозданный контракт требует примерно 1 000 000 газа. Это значит что вы не сможете задеплоить контракт, состоящий, например, из 10 000 строчек кода и выполняющий невообразимые вещи. Это возможно, но код придется разносить по нескольким контрактам и деплоить их по отдельности. Например игры, созданные на Ethereum, могут состоять из 10-20-30 контрактов, подключающихся друг к другу с помощью интерфейсов. Но об этом поговорим в следубщих уроках.
На скриншоте я отметил то, на что надо обратить внимание.
Предположим, вам надо задеплоить контракт или просто перевести Эфиры со своего адреса на адрес биржи. Вы заходите на этот сайт, смотрите сколько стоит сейчас газ, потом открываете Метамаск и при совершении транзакции указываете немного большее количество гвеев, чем указано. Если на скриншоте сейчас 3,1 , то в Метамаске укажите 3,5 (обязательно через запятую).
Почему это важно? Метамаск научился определять нужное кол-во гвеев, однако он не учитывает цифры после запятой. То есть если газ стоит 3,1 , Метамаск предложит вам 3. И этой самой 0,1 может не хватить вам для проведения транзакции, она будет висеть в пендингах часы или даже сутки. Поэтому всегда немножко прибавляйте.
Вначале статьи я написал что деплой контракта вам обойдется в 0,05-0,06 эфира. Это при стоимости газа в 21 гвей. Вы можете (не) много сэкономить если будете смотреть стоимость газа на https://ethgasstation.info/. При стоимости газа 3,5 контракт обойдется уже в 0.0135 ETH. Если сеть сейчас штормит и стоимость зашкаливает за 60-70 гвей (что стало не редкостью), то иногда стоит подождать несколько часов пока все устаканится.
Источники:
- https://habr.com/post/448056/
- https://pravo.ru/story/205151/
- https://Mining-CryptoCurrency.ru/umnye-smart-kontrakty/
- https://howtobuycoin.com/ethereum/smart-contact/
- https://contractcreator.ru/ethereum/first-smart-contract/