Введение в разработку умных контрактов Ethereum

  • Tutorial

В последнее время вокруг блокчейна, криптовалют, умных контрактов и связанных с ними технологий поднялся небывалый хайп. Создается ощущение, что даже самые ленивые и пассивные обыватели трубят об этом из каждого болота. Огромное количество стартапов и компаний с историей и опытом из сферы ИТ, услуг, ритейла и реального сектора экономики задумываются о внедрении блокчейна в свою деятельность, а более 100 000 компаний уже сделали это.

Механизм Initial Coin Offering не только способствовал новой волне интереса к краудфандингу, увеличив объем привлекаемых с его помощью инвестиций, но и подхлестнул интерес к криптовалютам и технологии блокчейн. Сегодня все чаще и чаще попадаются новые вакансии в этой области, а также просьбы о помощи в проведении ICO в целом и разработке смарт-контрактов в частности.

К сожалению, сегодня сильно ощущается нехватка специалистов в этой сфере, хотя в действительности процесс разработки умных контрактов гораздо проще, чем это может показаться на первый взгляд. Проблема нехватки специалистов напрямую проистекает из того, что технология блокчейн дошла до массового пользователя не так давно — в виде криптовалюты биткоин, а смарт-контракты в блокчейн пришли значительно позже. Так что лично у меня не вызвал большого удивления тот факт, что материалов по разработке смарт-контрактов все еще очень мало.

С другой стороны, будучи техническим директором компании, в которой мы занимаемся построением основанной на блокчейн цифровой юрисдикции и упрощением процесса создания смарт-контрактов для обычных пользователей, не владеющих навыками программирования, я ощущаю потребность в технических специалистах, имеющих представление о технологии, а еще лучше — опыт работы с ней.

В этом материале я хочу показать, что порог вхождения в разработку смарт-контрактов на самом деле довольно низкий, и постараться привлечь в сферу новых разработчиков. Конечно, не все в жизни бывает так же просто, как в обучающих материалах, и в разработке умных контрактов существует огромное количество тонкостей. Тем не менее, это справедливо и для любой другой технологии, включая знакомый многим JavaScript, и с этим нам, как правило, помогает справиться практический опыт, который невозможно получить, не начав программировать, проектировать, экспериментировать, тестировать и делать все то, чем разработчики обычно занимаются.

В этом уроке мы установим все необходимые для начала разработки инструменты, фреймворки, напишем свой первый токен ERC20 на языке Solidity, скомпилируем его, опубликуем в локальном блокчейне, напишем пару тестов и прогоним их. Мы будем использовать framework truffle, который поможет нам с управлением миграциями, компиляцией, управлением зависимостями, а также тестированием. Помимо этого, мы будем использовать фреймворк OpenZeppelin, который содержит в себе набор контрактов и библиотек, написанных на языке Solidity и уже доказавших свою полезность и безопасность временем.

Для начала давайте установим framework truffle. Для этого просто перейдите к документации фреймворка и найдите там инструкции по установке для вашей операционной системы. После установки создайте папку для вашего проекта. В моем случае эта папка будет называться «jcr-token».После этого откройте созданную папку проекта в терминале и инициализируйте проект при помощи команды truffle init.

Теперь откройте проект в вашем любимом текстовом редакторе (я использую Atom). Посмотрим на структуру проекта. Изначально вы можете увидеть в корневой директории три папки:

  • contracts, предназначенная для хранения исходного кода наших умных контрактов;
  • migrations, содержащая файлы миграций, которые служат для публикации контрактов в блокчейн;
  • test, содержащая тесты наших контрактов. Важно отметить, что тесты можно писать как на Solidity, так и на JavaScript.Если сейчас вам что-то кажется непонятным — не переживайте, дальше мы поговорим о каждой из частей более подробно и научимся создавать контракты, миграции и тесты.


Как вы могли заметить, truffle уже создал пару простых умных контрактов для нас. Мы используем их для тестирования нашей установки.

Для того, чтобы взаимодействовать с контрактами и создавать для них тесты, мы должны сначала опубликовать их в блокчейн. В нашем случае я предлагаю использовать для этих целей легкий ethereum-клиент, который называется testrpc. Он просто эмулирует обычное поведение клиента ethereum-сети, но работает намного быстрее и потребляет меньше ресурсов, что делает его хорошим инструментом для разработки. После установки вы можете запустить ваш собственный development blockchain просто набрав в терминале команду testrpc.

После успешного запуска вы увидите хост и порт вашего блокчейн. Откройте файл `truffle.js` в корневой директории проекта. Этот файл содержит конфигурацию вашего проекта. Убедитесь, что хост и порт в конфигурации совпадают с хостом и портом запущенного testrpc.

Теперь давайте попробуем скомпилировать умные контракты, набрав truffle compile. Этот шаг сгенерирует файлы в директории build. Если вы запускаете compile в первый раз, то директория будет создана автоматически. В этой папке будут располагаться build-артефакты. Мы поговорим о них чуть позже.


Для того чтобы протестировать контракты, наберите truffle test. Если вы знакомы с юнит-тестами в JavaScript или любом другом языке, то вы уже знаете, как тестировать смарт-контракты. Пожалуйста, уделяйте особое внимание тестам, ведь цена ошибки в блокчейн очень высока! Вам даже не нужно заранее компилировать контракты перед запуском тестов, поскольку команда `test` делает это за вас автоматически.


И, наконец, для того чтобы запустить миграции, которые опубликуют наши контракты в блокчейн testrpc, наберите truffle migrate.


Вскоре после этого вы увидите вывод команды в терминале и вывод события в клиенте testrpc. Поздравляю! Мы только что опубликовали наш первый умный контракт в эмулятор сети блокчейн.


Для создания более продвинутых контрактов мы воспользуемся фреймворком OpenZeppelin, который включает в себя несколько очень полезных библиотек, интерфейсов и готовых контрактов. Стоит отметить, что язык Solidity поддерживает наследование и мы можем с легкостью расширять функционал существующих контрактов. Это открывает большие возможности для продумывания вашей архитектуры.

Установить OpenZeppelin можно так же, как и любую другую JavaScript библиотеку, используя ваш любимый менеджер зависимостей, например, npm или yarn. Вы можете найти более подробную информацию на странице проекта OpenZeppelin на github, либо их сайте.

Вот мы и установили все необходимое для начала разработки собственных смарт-контрактов. И это было не так уж и сложно, верно?

Теперь перейдем к текстовому редактору и посмотрим файлы проекта. Можно заметить, что truffle уже создал некоторые базовые контракты при инициализации. Давайте удалим все эти файлы, за исключением файлов миграций. Мы удалим лишний контракт, библиотеку, тесты, а также уберем немного кода из миграций.

Создадим новый solidity-файл с кодом нашего кастомного умного контракта. Я буду делать токен под названием JCR для проведения ICO компании Jincor, а значит, и файл я назову JCR.sol.

Solidity — довольно молодой и динамично развивающийся язык программирования. Это накладывает определенные неудобства, одно из которых — это частые изменения, некоторые из которых способны поломать обратную совместимость, что, в свою очередь, может вызвать проблемы с уже опубликованными контрактами. Для того чтобы это предотвратить, нам необходимо указать версию компилятора языка Solidity. Лично я буду использовать `^0.4.11`.

Заметьте, что здесь `^` означает, что нас также устраивают более новые минорные версии и багфиксы, а не строго указанная версия 0.4.11. Можно определить намного более гибкие шаблоны версионирования точно так же, как вы делаете это в npm.

Как я уже говорил, мы собираемся использовать некоторые контракты из библиотеки OpenZeppelin для того, чтобы не изобретать велосипед, а просто воспользоваться работающими, безопасными наработками, содержащими лучшие практики сообщества и регулярно проходящие security-аудиты.

Для того чтобы импортировать контракт, нужно воспользоваться ключевым словом `import` и далее в кавычках указать путь к импортируемому файлу, как, например, это сделал я: `import «zeppelin-solidity/contracts/token/MintableToken.sol";`.

Я настоятельно рекомендую ознакомиться с документацией OpenZeppelin от корки до корки и посмотреть на реализации их смарт-контрактов, чтобы иметь ясное представление о том, как именно они работают. Кроме того, в процессе изучения вы увидите примеры оформления кода и сможете найти вдохновение для написания новых контрактов. Вы можете найти исходники в директории node_modules.

Давайте посмотрим на Mintable token, который я собираюсь сегодня использовать. Сейчас мы не будем погружаться в детали очень глубоко, ведь с исходными кодами и документацией вы можете ознакомиться и без моей помощи. Мы просто обсудим самое важное.

Мы видим, что «Mintable token is Ownable, Standard token». Ключевое слово «is» обозначает примерно то же самое, что «extends» в Java или PHP. Контракт Mintable token добавляет 2 события, одно публичное свойство, 2 модификатора и 2 функции. Все вместе это составляет функционал для эмиссии токенов. Standard Token добавляет функционал передачи токенов от лица другого пользователя с предварительно полученным разрешением. Basic token — это просто реализация интерфейса ERC20Basic, который определяет передачу токенов и проверку баланса. Контракт Ownable добавляет модификатор onlyOwner, который, как правило, используется для ограничения вызова функций со стороны третьих лиц.

Теперь вернемся к исходникам нашего контракта и немного изменим их. После того как мы импортировали все необходимые контракты, мы называем наш собственный контракт JCR. Пожалуйста, давайте файлам контрактов и названиям одинаковые имена.

В контракте мы определим публично доступные имя, символ и количество знаков после запятой (равное 18, как у Эфириума).

contract JCR is MintableToken {

  string public name = "Jincor Token";
  string public symbol = "JCR";
  uint public decimals = 18;
}

Затем напишем код конструктора. Конструктор — это просто функция, которая называется точно так же, как контракт, и вызывается при инстанциировании объекта контракта, или, иными словами, при создании нового экземпляра. Это довольно удачное место для инициализационного кода. Лично я хочу сделать контракт, который сможет выпускать указанное количество токенов и передавать все токены на баланс создателю контракта. Для этого я просто добавляю аргумент amount в конструктор, назначаю создателя контракта его же владельцем и выпускаю указанное число токенов на кошелек владельца.


function JCR(uint256 _amount) {
    owner = msg.sender;
    mint(owner, _amount);
  }

Итоговый файл JCR.sol (также доступен на github)

pragma solidity ^0.4.11;

import "zeppelin-solidity/contracts/token/MintableToken.sol";


contract JCR is MintableToken {

  string public name = "Jincor Token";
  string public symbol = "JCR";
  uint public decimals = 18;

  function JCR(uint256 _amount) {
    owner = msg.sender;
    mint(owner, _amount);
  }
}

Теперь давайте попробуем скомпилировать то, что у нас получилось. Сделать это можно, набрав `truffle compile`. Заглянем в папку build и посмотрим, что же мы получили на выходе. Первое, что бросается в глаза — это то, что мы получили артефакты всех используемых контрактов от ERC20, до Mintable и JCR. Артефакты сохраняются в JSON-файлах. Эти JSON-файлы содержат название контракта, Application Binary Interface(abi), двоичный код, которой в последствии будет запущен на Ethereum Virtual Machine и немного дополнительной информации.



Мы можем использовать артефакты для того, чтобы опубликовать наши смарт-контракты в блокчейн. Однако лучше с самого начала приучить себя к хорошему и сразу же автоматизировать этот рутинный процесс, добавив миграцию. Помните, что мы еще должны передавать в конструктор количество выпускаемых токенов? Миграции — это хорошее место для подобных манипуляций. Давайте откроем файл 2_deploy_contracts.js и добавим немного кода. Я собираюсь выпустить 1,4 млн токенов.

Мы можем опубликовать контракты в скрипте миграции, используя метод deployer.deploy, в который первым аргументом мы передадим билд-артефакт, а за ним аргументы, которые дальше в том же порядке передадутся конструктору контракта. В нашем случае у нас всего один аргумент — 1 400 000. Все остальное truffle возьмет на себя. Чтобы сделать процесс деплоя проще и приятней, можно разблокировать аккаунт (разрешить совершать действия от его имени). Для этого при старте testrpc добавьте аргемент `-u 0`


var JCR = artifacts.require("./JCR.sol");

module.exports = function(deployer) {
  const tokenAmount = 1400000;
  deployer.deploy(JCR, tokenAmount);
};

Запустим нашу новую миграцию и посмотрим, работает ли она. Отлично! Теперь нам необходимо убедится в том, что наш токен работает так, как мы от него ожидаем. Для этого мы напишем пару тестов на JavaScript. Наберите `truffle create test` и имя тестируемого контракта, чтобы сгенерировать JavaScript-файл с тестом. Замечу, что тесты можно писать и на Solidity, но об этом мы поговорим позже.

Я надеюсь, что у вас уже есть какой-то опыт написания тестов на других языках программирования, например на PHP. Если вы уже сталкивались с фреймворками Mocha и Chai, то все покажется Вам уже знакомым, так как truffle использует именно их. Более подробную информацию можно найти в официальной документации.

Наконец, давайте попробуем убедится в том, что владелец получил правильное количество токенов при создании контракта и функция передачи токенов ведет себя ожидаемым образом.

var JCR = artifacts.require("./JCR.sol");

contract('JCR', function(accounts) {
  it("Create 1 400 000 tokens at the owner account", function(done) {
    JCR.deployed().then(function(instance) {
      return instance.balanceOf.call(accounts[0]);
    }).then(function(balance) {
      assert.equal(web3.toWei(balance.valueOf(), 'ether'), web3.toWei(1400000, 'ether'), "1400000 wasn't in the first account");
    });
    done();
  });

  it('Should transfer tokens correctly', function(done){
    var token;
    var amount = 10;

    var account_one = accounts[0];
    var account_two = accounts[1];

    var acc_one_before;
    var acc_one_after;
    var acc_two_before;
    var acc_two_after;

    JCR.deployed().then(function(instance){
      token = instance;
      return token.balanceOf.call(account_one);
    }).then(function(balanceOne) {
      acc_one_before = balanceOne.toNumber();
      return token.balanceOf.call(account_two);
    }).then(function(balanceTwo) {
      acc_two_before = balanceTwo.toNumber();
      return token.transfer(account_two, amount, {from: account_one});
    }).then(function() {
      return token.balanceOf.call(account_one);
    }).then(function(balanceOne){
      acc_one_after = balanceOne.toNumber();
      return token.balanceOf.call(account_two);
    }).then(function(balanceTwo){
        acc_two_after = balanceTwo.toNumber();

        assert.equal(acc_one_after, acc_one_before - amount, "Token transfer works wrong!");
        assert.equal(acc_two_after, acc_two_before + amount, "Token transfer works wrong!");
    });
    done();
  });
});

На сегодня все. В следующем уроке мы попробуем протестировать наш контракт в более реальном окружении, а также напишем контракт ICO для продажи нашего токена.

Кстати! На youtube доступна видео-версия данной статьи в 2 частях:

1. Подготовка к разработке
2. Пишем контракт токена

Код доступен на github
Метки:
Поделиться публикацией
Комментарии 41
  • 0
    Вроде все переделал под себя, исправил токенов количество на 100 000 000 тесты вот что выдают: Contract: AAWB
    100000000000000000000000000
    1) should put 100 000 000 AAWB in the first account
    > No events were emitted
    ✓ should send coin correctly (125ms)

    1 passing (174ms)
    1 failing

    1) Contract: AAWB should put 100 000 000 AAWB in the first account:
    AssertionError: 100000000 wasn't in the first account: expected '1e+26' to equal 100000000
    at test/jcr_test.js:9:14
    at at process._tickCallback (internal/process/next_tick.js:188:7)
    Откуда могло взяться такое число 100000000000000000000000000?
    • 0
      Перевод эфиров в Wei)
      web3.toWei();


      Вроде все переделал под себя, исправил токенов количество на 100 000 000 тесты вот что выдают:

      Из статьи переделывали или с github брали? Допускаю в статье наличие опечаток
    • 0

      Гадом буду — оно эфиры в веи перевело :-)
      Как раз коэффициент — 18 ноликов

    • 0
      Интересно?! А где эту технологию я могу применить?.. И что мне, как новичку дальше дальше после этой статьи? Где это вообще работает и для чего?
      • +1
        Спросите администрацию Гиктаймс, которая удалила целых 3 моих статьи об этом и скажите им спасибо.
        А если коротко, то сфера примененения очень широка: от распредленных реестров до собственных криптовалют, цифрового правительства, выпуска акции, денежных транзакций и даже порнография и Virtual Reality. Рекомендую погугулить, что такое блокчейн, с чем его едят и почему за ним будущее.
      • +1
        Область применения технология широка: от создания своей криптовалюты до реализации аналога СВИФТа. Да и в компаниях в последнее время растёт спрос на блокчейн технологии. Немного мониторю сайты вакансий, за последние 4 месяца количество вакансий растёт в 2-3 раза каждый месяц.
        • +1
          Область применения технология широка: от создания своей криптовалюты до реализации аналога СВИФТа

          Это у Вас все о финансах. На самом деле все еще куда шире. Мы в Jincor пытаемся упростить использование смарт-контрактов для бизнеса, предоставляя возможность заключать трудовые смарт-контракты с сотрудниками, смарт-контракты на оказание услуг, обмен цифровыми товарами и много чего еще, включая децентрализованные арбитражные суды, страхование сделок, ну и, конечно же, денежные переводы. Подробнее с тем, как смарт-контракты используем именно мы можно почитать в нашем whitepaper. Но я замечу, что даже мы не раскрываем и малой доли потенциала смарт-контрактов)
          • 0
            Я не юрист, но у меня возник, как мне кажется, закономерный.
            Какой вес с юридической точки зрения будут иметь трудовые смарт-контракты с сотрудниками, смарт-контракты на оказание услуг и т.д.
            Ведь по законодательству документом считается бумажка, на которой стоит (условно) дата, печать и подпись.
            Может вы нашли какое-то решение?
            Я пытаюсь представить, как в России смогут использовать вашу платформу. И мне кажется, что пока юридической базы под блокчейн не появится, спросом платформа пользоваться не будет.
            • 0
              Я пытаюсь представить, как в России смогут использовать вашу платформу. И мне кажется, что пока юридической базы под блокчейн не появится

              В этом вы абсолютно правы. Тут важно понмиать, что мы разрабатываем международную платформу и ряд юрисдикций УЖЕ позволяет заключать самрт-контракты. С другой стороны, мы сами позиционируем себя как юрисдикцию и если у вас нет запроса на соответствие законом какой-то страны, то вы вполне можете пользоваться Jincor уже сейчас(это подойдет для очень ограниченного числа компаний).
              Мы не только активно мониторим ситуацию в сфере регулирования блокчейн-технологий в РФ но и стараемся сотрудничать с законотворцами и проповедовать технологии где только можем. После проведения ICO мы займемся этим еще активней, ведь не хотелось бы, что бы наша страна осталась «за бортом» новой революции)
            • –1
              Мы в Jincor пытаемся упростить использование смарт-контрактов для бизнеса, предоставляя возможность заключать трудовые смарт-контракты с сотрудниками, смарт-контракты на оказание услуг, обмен цифровыми товарами и много чего еще, включая децентрализованные арбитражные суды, страхование сделок, ну и, конечно же, денежные переводы.


              Да нет же, в Jincor вы пытаетесь развести лоховлюдей на бабки с пастой телеграма вместе с рядовыми манипуляциями.

              Схема простая, мы обманываем лоховлюдей в том, что выдавая какие-то «гарантии» внутри сети — они каким-то магическим образом экспортируются из неё.

              А разоблачить лохилюди вас могут просто. Достаточно задать один вопрос. Хорошо — мы «заключили» контракт с Васей на помывку окон, либо на покупку у него 10 единиц «цифрового» товара. И теперь, смотрите за руками — каким образом этот контракт узнает о Васи и о его работе, а так же о факте её окончании? Правильно — никак, но этого знать лохамлюдям не нужно.

              У смарт-контрактов потенциал только в одном — собирать бабки с тех, кого мы убедили в их потенциале. Их потенциал заканчивается внутри сети, но не заканчивается простор для манипуляций.
              • +1
                Очень эмоциональный выпад, но решил «допустить» ваш комментарий)

                А разоблачить лохилюди вас могут просто. Достаточно задать один вопрос. Хорошо — мы «заключили» контракт с Васей на помывку окон, либо на покупку у него 10 единиц «цифрового» товара. И теперь, смотрите за руками — каким образом этот контракт узнает о Васи и о его работе, а так же о факте её окончании? Правильно — никак, но этого знать лохамлюдям не нужно.

                На этот(и многие другие, которые могут у вас возникнуть) вопрос мы ответили в нашем whitepaper, очень рекомендую ознакомиться, быть может, вы измените свое мнение ;) Если коротко — Арбитражные суды. Также рекомендую более подробно почитать наши статью о страховании сделок, арбитраже и смарт-контрактов, чтобы у Вас больше не возникало таких необоснованных эмоциональных реакций.

                Как компаниям рассчитываться в криптовалюте и спать спокойно
                Страхование криптовалютных счетов и сделок, хеджирование рисков в криптоэкономике будущего
                Теория децентрализованной арбитражной системы будущего
                Смарт-контракты. Часть 1. Когда бумага знает, что ты ей сказал и делает это
                Смарт-контракты. Часть 2. От хайпа к реальности
                • –2
                  Если коротко — Арбитражные суды.

                  Это не ответ, а манипуляция. Вы, давая лохамлюдям знакомое понятие, которое вы трактуете иначе — просто подменяете понятие. Таким образом человек имея представления об одном понятии и о его свойствах, несознательно «натягивает» их на понятие ваше.

                  А на вопрос вы так и не ответили. По поводу ваших агиток.

                  Естественно, как и всегда процесс очень прост. Мы берём реальные структуры и их свойства, натягиваем на «криптовалюту», а далее всё просто — все проблемы уже решены.

                  Допустим, простой пример с «арбитражем». Мы берём некие свойства криптовалюты( я даже не буду обсуждать истинность этих свойств — мне лень) и натягиваем их на всё, вернее даже не натягиваем — мы просто игнорируем всё остальное.

                  В реальном мире существуют не только данные внутри вашей сети, которыми вы можете «рулить»( предположим), но и физические объекты. Предположим, что система «отъёма» «денег» осуществима, но. Есть одно большой но. Система «отъёма» физических ценностей не осуществима.

                  И тут опять же мы, эксперты «не в юрисдикции государства» побежим к государству, что и рушит все наши «бунтарские» рассуждения. Вот ведь незадача.

                  Вся агитация лоховлюдей строится на банальной манипуляции, а именно экстраполяции свойств( 95% их которых вымышлены) уютного мирка циферок в реальный мир. В агитках сразу, почему-то, исчезают тысячи валют без подобных систем, другие не-крипто валюты, да и вообще весь мир за рамками одной, придуманной нами системы.

                  Я точно так же не буду рассказывать о реализации подобного, о том что их не будет. Меня просто назовут балаболом. Хотят люди верить в подобные агитки от людей «у нас ничего нету — дайте бабок — всё будет, мамой клянусь» — пусть верят.

                  А по поводу вашего ответа. По идее я, как знакомый с темой, должен хайпить её для своей же выгоды. Но мне это не интересно. Если не делаю то, что делают ВСЕ — это не значит, что я не в теме.

                  А по поводу лоховлюдей. Я не перестаю удивляться тому, как люди продолжают верить. Новый Вася изобрёл свою супер-валюту и сказал, что за ней будущие. Ведь Вася эксперт и 100% врать не будет. В каком мире живут люди, которые подобным образом рассуждают? А тут таких людей большинство.

                  Ведь именно Вася напрямую заинтересован в ценности «своего» творения. И чем большую цену он ему набьёт — тем больше цена творения и в результате Васи, как его разработчика. Ах да, можно же поверить ещё в то, что Вася делает это не просто так, а во имя «будущего» — ога, то-то он в своих «просветительных» агитках рекламирует своё ico?

                  Это замкнутый круг. Аудит может делать только «эксперт», который если станет экспертом и изоблачит ту область, в которой он стал экспертом — экспертом быть перестанет. Хайпим, стрижом пока стрижется. Я вам не останавливаю.
                  • 0
                    Вся штука в том, что абсолютно все минусы, которые Вы сейчас причислили крипте присущи и обычному миру) Суды работают только потому, что люди когда-то так договорились(заметьте, что там, где они до сих пор не договорились они не работают). Фиатные деньги имеют ценность только потому, что люди так договорились. И тут встает вопрос, что лучше — когда эти «договоренности» перешли в руки кучке людей, называемых государством, или остались в руках у сообщества и могут изменяться по его хотению.
                    • –2
                      Хорошо. Я бы мог и дальше с вами играть, но но я не хочу терять своё время. Вашу неспособность отвечать на вопросы — я уже продемонстрировал.

                      А по поводу ваших попыток играть в «я умею менять тему» — это глупо. Я не прошу вас там рассуждать о мире, либо о чём-то ещё. Я прошу ответить на вопрос. Каким образом в свои истории вы интегрируете физические ценности?
                      • 0
                        А по поводу ваших попыток играть в «я умею менять тему» — это глупо. Я не прошу вас там рассуждать о мире, либо о чём-то ещё. Я прошу ответить на вопрос. Каким образом в свои истории вы интегрируете физические ценности?


                        На этот вопрос я вам уже ответил, просто вы не желаете видеть ответ.

                        И какое отношение это имеет к тематике статьи, уважаемый студент ;)
                        • –1
                          На этот вопрос я вам уже ответил, просто вы не желаете видеть ответ.

                          Конкретно. Где ответ. Прямую цитату в студию.

                          И какое отношение это имеет к тематике статьи, уважаемый студент ;)

                          Пхп-эксперт решил поюлить, сливаясь на тему статьи. Если поднятая мною тема не относится к теме статьи, то зачем на неё было отвечать? Почему бы не сказать это сразу, а не тогда, когда показался тупик?
                    • 0
                      А по поводу вашего ответа. По идее я, как знакомый с темой, должен хайпить её для своей же выгоды. Но мне это не интересно. Если не делаю то, что делают ВСЕ — это не значит, что я не в теме.


                      О компетенциях человека могут говорить только его дела. Мою компетенцию и компетенции моих коллег может проверить любой желающий. А дата вашего рождения, дата регистрации на Хабре, отсутсвие хоть какой-бы то ни было персональной информации и проверяемого опыта говорят все за Вас. Вы можете сколько угодно брызгать слюной, но что-то я не вижу ни ваших законченных проектов, ни репозиториев на гитхаб, ни какого-то другого опыта в чем бы то нибыло. Почему я должен вас слушать и почему вас должны слушать люди(которых вы к тому же называете лохами, думая, что в 20 лет вы умнее всех)
                      Я доказал свои компетенции в IT, работая в Rocket-Internet, Сколково, крупнейших торговых площадках, разрабатывая игры для социальных сетей. Мои коллеги окончили(и даже преподают) в лучших ВУЗах страны. Могу предположить, что вы просто студент, которому поставили «неуд» ;)
                      Любого члена нашей команды можно найти и проверить информацию о нем. Мы специально стараемся быть МАКСИМАЛЬНО открытыми ;)
                      • –1
                        О компетенциях человека могут говорить только его дела.

                        В параллельной вселенной. Абстрактные дела котируются только как попытка пустить пыль в глаза.

                        А дата вашего рождения, дата регистрации на Хабре, отсутсвие хоть какой-бы то ни было персональной информации и проверяемого опыта говорят все за Вас.

                        Что конкретно говорит, поподробнее.

                        Я доказал свои компетенции в IT, работая в Rocket-Internet

                        Моя полы?
                        Сколково

                        Ходили с классом на экскурсию?
                        крупнейших торговых площадках

                        Что это?

                        разрабатывая игры для социальных сетей

                        О таком я бы на публике не говорил.

                        Мои коллеги окончили(и даже преподают) в лучших ВУЗах страны.

                        Не смог сам — расскажи про коллег.

                        Могу предположить, что вы просто студент, которому поставили «неуд» ;)

                        Действительно, пхп-эксперт на связи. Эти глупые попытки такие смешные. Вам надо отвечать на вопросы, а не юлить. Хотя о чём это я.
                        • 0
                          image
                          • Как это мило. У одно скобочки, а у второго картинки. Детский садик. Минусовать смог — ответить не смог.

                            В целом ситуация та же. Сел в лужу — покажи пацанам клоунскую рожу, ведь ты на самом деле «не всерьёз». Я думаю, что они поверят. Не сомневаюсь.
                      • 0
                        Но в целом, эта дискуссия не имеет никакого отношения к теме данной статьи, на том я и предлагаю)
                    • 0

                      Введение событий внешнего мира внутрь платформы исполнения смарт-контрактов действительноя является серьёзной проблемой. Серьёзной, но не безысходной. Она решается насыщением платформы оракулами, обеспечивающими доступ к информации различных реестров, информации транспортных и торговых компаний по отслеживанию грузов и так далее. И да — требует перехода на "цифровой" учёт услуг. Арбитраж — всё-таки достаточно ресурсоёмкий процесс, почему банки и стремяться избавится именно от него.

                      • 0
                        Согласен, по этому я скинул ссылки на статьи) У нас там есть про оракулы и эти проблемы рассмотрены, впрочем, как и в нашем whitepaper.
                        • –1
                          Серьёзной, но не безысходной.

                          Именно что безысходный.

                          Она решается насыщением платформы оракулами, обеспечивающими доступ к информации различных реестров, информации транспортных и торговых компаний по отслеживанию грузов и так далее.

                          Тут существует две фундаментальные, нерешаемые проблемы. Первая — синхронизация реального мира с миром циферок. Вторая — вы либо не понимаете того, о чём говорите, либо просто врёте.

                          Нет смысла использовать систему валидации как отражение существующей системы. Это не имеет смысла. Попытаетесь её использовать как замену существующей — первая проблема. Ну и собственно вторая — это решение конфликтов с физическими ценностями. Такая же проблема существуете и в рамках криптовалют. Это интеграция валют друг с другом.

                          И да — требует перехода на «цифровой» учёт услуг.

                          В этом и проблемы — вы не понимаете того, что вы говорите. Вы жертва тех методик манипуляции, о которых я говорил выше.

                          У вас есть обстоятельство и есть выводы. Но это обстоятельство никак не связано с выводами. У вас нет ни методики «цифрового учёта», ни чего-бы ни было ещё. Вы просто повторяете заклинание. Но как оно возможно и каким образом из него следует ответ на мой вопрос — вы не знаете.

                          Просто попытайтесь говорить не заклинаниями, а конкретикой. Какой механизм позволим вам осуществить это интеграцию. Его нет. Вы можете прикрутить к себе какое-то отслеживание чего-то, но. Тут и кроется обман — вы теряете все преимущества «смарт-контракта», как и валюты в целом.

                          Надо отличать реальность и то, что вам впаривают. Очень просто попасться на том, что вам выдадут упрощённую вариацию tth( тысячи их) 30летней давности за новую «супер-технологию». Тут главное верить.
                          • 0

                            Безысходно только нежелание что-либо делать...

                            • –1
                              Всё же. Надеюсь, что мои ответы смотивируют вас на подумать. Ведь пока людям не хочется связать своё представление воедино — они не увидят, что оно «шито белыми нитками», да даже вообще не шито. И подобные персонажи и дальше будут паразитировать на этом.

                              А если вы думаете, что у подобных персонажей есть желание что-то делать. Перечитайте это через пару лет.
                              • 0

                                Спасибо великодушно, что любезно оставили за нами умение читать, куда как жёстче было бы: "Пусть ваша патронажная сестра снова перечитает вам это вслух через пару лет". :-)
                                И учите наш великий язык, особенно в части использования идиоматических оборотов.

                                • –1
                                  Спасибо великодушно

                                  Не моя вина, что мне оппонирует настолько слабая аудитория, которая плывёт уже после первого вопроса. Что поделать.
                                  И учите наш великий язык, особенно в части использования идиоматических оборотов.

                                  Поподробнее об этом. Есть что сказать — пожалуйста. Цитата + обоснование своих претензий.

                                  А то болтать не предоставляя никакой конкретики, за которую вас можно поймать — «ваше» любимое занятие.

                                  • 0

                                    Ну, какие могут быть претензии от столь слабой аудитории? Ну, смешно ей-богу :-)
                                    У Вас, мой юный друг, было всего одно идиоматическое выражение — как раз в кавычках.
                                    И да — в святом порыве страсти Вы упустили возможность ввести во фразеологию новый оборот — "Ваш вайтпепер сшит белыми нитками". Теперь поздно, я первый! :-)

                                    • –1
                                      Ну, какие могут быть претензии от столь слабой аудитории? Ну, смешно ей-богу :-)

                                      Естественно, что никаких. Это не претензии, а разочарование.
                                      У Вас, мой юный друг, было всего одно идиоматическое выражение — как раз в кавычках.

                                      Меня мало волнуют эти глупые попытки юлить. В очередной раз ответа нет.

                                      Ничего нового — очередной любитель поболтать боится сказать мне хоть что-то конкретное т.к. знает что за этим последует.

                                      А играть в дурака можно сколько угодно в надежде на то, что аудитория не допрёт. Сел в лужу — поспамь скобочек как идиот, авось кто и поверит.

                                      • 0

                                        Да полно буянить, я понимаю — обидно, таланта не хватило, совсем чуть-чуть, но не хватило. Бывает…
                                        Ну ладно, мне таки стало интересно, "что за этим последует", а то вдруг я ошибаюсь.
                                        Вы, юноша, видимо не знаете, что такое идиоматическое выражение, я вам помогу — Вы несколько совсем неправильно используете выражение «шито белыми нитками».
                                        Чтобы Вас не расстраивать я скобочек уж рисовать не буду, а то ночь на дворе, вдруг Вам клоуны приснятся, а Вы их боитесь, собак местных побудите...

                                        • –1
                                          Да полно буянить, я понимаю — обидно, таланта не хватило, совсем чуть-чуть, но не хватило. Бывает…

                                          Обожаю оценки ото всяких рандомных нонеймов.

                                          Вы, юноша, видимо не знаете, что такое идиоматическое выражение, я вам помогу — Вы несколько совсем неправильно используете выражение «шито белыми нитками».

                                          Я же не ясно что-ли писал условия? Цитата, а далее должны следовать обоснования претензий.

                                          Я там не буду комментировать внезапную смену контекста, а именно с «перечитай» на нитки.

                                          А по поводу текущих глупых попыток. Болтать, а после делать какие-то выводы просто потому, что болтун так захотел — это сильно.

                                          Наверное сложно — надо попроще. Дело в том, что перед обвинениями должны следовать обоснования этих самых обвинений. Без этого — это пустой трёп.

                                          А теперь попробуйте дать цитату, а потом поподробнее о том что я там неправильно использовал. И результат будет предсказуем. Чего же вы боитесь.

                                          А по поводу эти детсадовских попытках играть на «делаю вид, что оппонент дурак и все это знают — авось он поверит в это». Ну это же просто жалко. Вы мне хоть что-то новое покажете? Каждый раз новый трепач, но методичка почему-то одна на всех.

                                          • 0

                                            Бот. Жаль…
                                            Кто смотрящий — словарь-то расширьте.

                                            • Как я и говорил. Персонаж поплыл окончательно и бесповоротно. Выполнить условие и ответить за свой трёп так и не смог.

                                              На что вы надеетесь? Что вы мне что-то сможете сказать? Удивить меня? Нет. Мне есть что ответить и рандомный нонейм с горящем седалищем не даст соврать.

                                              Я всегда ставлю простые условия — отвечайте за то, что транслируете. Я не прошу и не просил вас играться со мною, пытаться меня ловить, демонстрировать мне все эти глупые попытки, которые я видел тысячи раз. Я разговаривал с сотнями посредственностей с одной и той же методичкой. Глупо думать, что на 349 что-то измениться.

                                              Вы сами захотели в это играть и благополучно проиграли. Вы сделали ту же ошибку, что и вас предшественник. Совсем немножко переоценили свои силы — бывает. Я не в обиде.
                • 0
                  Хотелось бы еще статью с реальным использованием-реальный проект, опыт применения под задачу. Плюсы, минусы, какие преимущества дает и какие недостатки не исправить/трудно исправить.
                  • 0
                    Обязательно будет — не переживайте)
                  • 0
                    Спасибо за статью! Было бы очень интересно прочитать про то как добавить умные контракты в логику блокчейна. Я тут в свободное время занимаюсь написанием игрушечного/учебного блокчейна, но пока не разобрался как добавить туда engine для этих умных контрактов.

                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.