company_banner
19 октября 2016 в 19:52

Погружение в технологию блокчейн: Экосистема цифровой стоматологии

Представляем вторую статью из серии «Погружение в технологию блокчейн». В этом материалы вы узнаете о медицинском проекте Digital Dentistry Exchange, который представляет собой часть экосистемы цифровой стоматологии под названием Digital Dentistry Space.

Мы расскажем о его технологических особенностях, ответим на самые частые вопросы о смарт-контрактах и поделимся видением команды о том, какое будущее у технологии блокчейн.



Цикл статей «Погружение в технологию блокчейн»


1. Серия материалов, посвященных технологии Emer:
1.1. Секреты EmerCoin.
1.2. Децентрализованная нецензурированная система доменных имён.
1.3. Инфраструктура публичных ключей всемирного масштаба.
1.4. Децентрализованная беспарольная система безопасности.
2. Быстрые и безопасные транзакции.
3. Экосистема цифровой стоматологии.
4. Борьба с контрафактными товарами.
5. Взаимное страхование животных.
6. Что такое ICO и как его провести.
7. Loading…

Проблема распределения ответственности и повышения качества комплексных услуг в сфере стоматологии


В современной цифровой стоматологии существует направление под названием CAD/CAM (Computer Aided Design и Computer Aided Manufacturing). Оно применяется для создания таких зуботехнических конструкций, как коронки, виниры или вкладки (очень крутой вид пломб). Процесс производства с помощью ЭВМ состоит из нескольких этапов:

1. Врач производит подготовку зуба к установке зуботехнической конструкции, снимает оттиск и формирует заказ-наряд:



2. Врач договаривается о цене с пациентом, идет предоплата.

3. Оттиск сканируется и получается цифровая трехмерная модель зубов пациента:



4. С помощью системы специализированного проектирования (САПР) на базе этой модели конструируется дизайн зуботехнической конструкции с учетом пожеланий пациента и врача.

5. После подтверждения трехмерная модель зуботехнического изделия отправляется во фрезерный центр, где ее материализуют из выбранного материала (цирконий, титан, полимер или керамика).

6. Изделие дезинфицируется и устанавливается пациенту.



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

Логичным решением является создание многосторонних договоров, которые позволяют распределить ответственность между участниками CAD/CAM процесса. Здесь появляется огромный выбор различных стратегий выплат, например:

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

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

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

Реализация идеи


Примечание: ниже представлен реальный код, написанный в рамках хакатона.

Проблему описанную выше можно решить с помощью смарт-контрактов: сложные схемы оплат упаковываются в кнопки «accept/decline/pay». Для регулировки всего процесса самым надежным решением будет система с блокчейн-архитектурой.

Так у команды был определенный бэкграунд в разработке и дизайне, для back-end был выбран фреймворк Ruby on Rails (RoR), для front-end – JavaScript-фреймворк AngularJS.

С написанием смарт-контрактов было немного сложнее, так как никто из участников ранее не сталкивался с подобной задачей. Поэтому была выбрана платформа Ethereum (инструмент для создания децентрализованных онлайн-сервисов на базе блокчейна) на основе Azure Blockchain as a Service. Смарт-контракты программировались на специальном языке Solidity.

Участники поделились двумя вопросами, которые возникли у них при работе с данным инструментом, и ответами на них.

Где хранится контракт и кто обеспечивает его корректное исполнение?
Когда смарт-контракт написан и отлажен, он помещается в цепочку блоков транзакций, и может быть проверен (но не изменен!) любым пользователем системы, если тот знает адрес по которому расположен этот смарт-контракт. Корректность самого смарт-контракта зависит от того, насколько корректно его написал программист. Если смарт-контракт был описан неверно, его нельзя исправить и придется поместить другой смарт-контракт по другому адресу.

Какова цена создания смарт-контракта?
Для создания смарт-контракта требуется израсходовать некоторое количество внутренней валюты (Eth), чем выше будет его цена, тем выше он получает приоритет у майнеров (это машины которых вычисляют криптоблоки). Майнеры нужны для того, чтобы смарт-контракт был обработан и добавлен в блокчейн. Если первый взнос будет минимальным, может возникнуть ситуация, в которой смарт-контракт никогда не будет размещен в глобальном блокчейне. Стоит обратить внимание, что также можно задать время жизни контракта.

Что нужно знать для работы с платформой Ethereum для клиентской стороны


Прежде всего, вам необходимо понять для какой платформы вы пишете. Как писали выше, в данном решении был использован фреймворк AngularJS, поэтому вся логика была помещена в контроллер, и там происходила вся работа с web3.js.

Примечание: в реальных условиях подобные операции лучше держать на защищенном сервере подальше от клиента.

Далее необходимо инициализировать подключение к программе для связи с блокчейном:

var Web3 = require('web3');
var web3 = new Web3();
web3.setProvider(new web3.providers.HttpProvider("http://адрес_сервера:8545"));
var accounts = web3.eth.accounts;

accounts – это все аккаунты, которые задействованы в программе подключения к блокчейну (в нашем случае, это geth).

Теперь нужна функция для того, чтобы узнать баланс подключенных токенов:

	function getBalance(address){
var funds = web3.eth.getBalance(address);
return funds;
}

Попробуем оплатить что-нибудь через смарт-контракт по адресу contractAddress:

function pay (amount, myToken, password, token, contractAddress){
web3.personal.unlockAccount(myToken,password);
var contract = web3.eth.contract(abi).at(contractAddress);
      	var res = contract.initDoctor.sendTransaction(token, {from:myToken, value:web3.toWei(amount,'ether')});
alert("you dropped to system with token "+token); 
}

Примечание: для простоты был задан пароль в виде plain text, но в реальной системе так делать нельзя.

Это основные функции, которые необходимо знать для вызова смарт-контрактов. Подробности можно узнать на официальном сайте Ethereum.

Что нужно знать для написания смарт-контракта на языке Solidity


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



Далее в блокчейне для написания смарт-контракта был использован код:

pragma solidity ^0.4.0;
contract Dental {
    uint cadPrice = 10;
    uint millPrice = 10;
    uint digitizePrice = 10;

	mapping (address => uint) doctor_balances;
	mapping (address => uint) digitizer_balances;
	mapping (address => uint) cad_balances;
	mapping (address => uint) mill_balances;
	mapping (address => uint) statuses; 
	//0 -start,
	//1 - digitizer initialized,
	//2 - cad initialized,
	//3 - mill initialized,
	//4 - digitizer ready,
	//5 - cad_ready,
	//6 - mill ready,
	//7 -payed
    mapping (address => address) digitizer_addresses;
    mapping (address => address) cad_addresses;
    mapping (address => address) mill_addresses;
    
    function initDoctor() {  //Загрузка денег
       doctor_balances[ msg.sender ] += msg.value;
       statuses[msg.sender] = 0;
    }
    function initDigitizer(address digitizerAddr) {
       digitizer_addresses[msg.sender]  = digitizerAddr;
       digitizer_balances[msg.sender]  += msg.value;
       if (statuses[msg.sender] == 0) statuses[msg.sender] = 1;
    }
    function initCad(address cadAddr) {
       cad_addresses[msg.sender]        =  cadAddr;
       doctor_balances[ msg.sender ]    -= cadPrice;
       cad_balances[msg.sender]         += msg.value;
       if (statuses[msg.sender] == 1) statuses[msg.sender] = 1;
    }
    function initMill(address millAddr) {
       mill_addresses[msg.sender]  = millAddr;
       mill_balances[msg.sender]  += msg.value;
       if (statuses[msg.sender] == 2) statuses[msg.sender] = 3;
    }

    function digitizerDone() {
        if (statuses[msg.sender]==3) statuses[msg.sender] = 4;
    }

    function cadDone() {
       if (statuses[msg.sender]==4) statuses[msg.sender] = 5;
    }

    function millDone() {
       if (statuses[msg.sender]==5) statuses[msg.sender] = 6;
    }

    function doctorDone(bool happy) payable returns (bool) {
        if (statuses[msg.sender]!=6) return false;
        if (!happy){
            doctor_balances[msg.sender] += digitizer_balances[msg.sender];
            doctor_balances[msg.sender] += cad_balances[msg.sender];
            doctor_balances[msg.sender] += mill_balances[msg.sender];
            digitizer_balances[msg.sender]  = 0;
            cad_balances[msg.sender]        = 0;
            mill_balances[msg.sender]       = 0;
            return false;
        }
            
        bool digitizerOk = digitizer_addresses[msg.sender].send(digitizer_balances[msg.sender]);
        digitizer_balances[msg.sender] = 0;
        bool cadOk       = cad_addresses[msg.sender].send(cad_balances[msg.sender]);
        cad_balances[msg.sender] = 0;
        bool millOk      = mill_addresses[msg.sender].send(mill_balances[msg.sender]);
        mill_balances[msg.sender] = 0;
        return (digitizerOk && cadOk && millOk);
    }
}

Разберем его подробнее:

1. Сначала указываем версию Solidity и объявляем контракт:

pragma solidity ^0.4.0;
contract Dental {

2. задаем стоимость услуг 3D-сканирования, дизайна и фрезерования:

    uint cadPrice = 10;
    uint millPrice = 10;
    uint digitizePrice = 10;

3. Создаем массивы балансов для оплаты участников процесса:

	mapping (address => uint) doctor_balances;
	mapping (address => uint) digitizer_balances;
	mapping (address => uint) cad_balances;
	mapping (address => uint) mill_balances;

4. Указываем статусы:

	mapping (address => uint) statuses; 
	//0 - start,
	//1 - digitizer initialized,
	//2 - cad initialized,
	//3 - mill initialized,
	//4 - digitizer ready,
	//5 - cad_ready,
	//6 - mill ready,
	//7 -payed

5. Создаем массивы аккаунтов участников процесса (без врачей):

    mapping (address => address) digitizer_addresses;
    mapping (address => address) cad_addresses;
    mapping (address => address) mill_addresses;

6. Инициализируем врача, им будет считаться отправитель. Обратите внимание, что он может брать новые заказы, только если у него указан статус «еще не начал» или «заказ завершен»:

    function initDoctor() {  //Загрузка денег
       if (statuses[msg.sender] == 0 || statuses[msg.sender] == 7){
doctor_balances[ msg.sender ] = msg.value;
statuses[msg.sender] = 0;
        }
    }


7. Инициализируем сканировщика, который будет задействован, если у врача стоит статус «еще не начал»:

    function initDigitizer(address digitizerAddr) {
       digitizer_addresses[msg.sender]  = digitizerAddr;
       digitizer_balances[msg.sender]  = msg.value;
       if (statuses[msg.sender] == 0) statuses[msg.sender] = 1;
    }

8. Аналогично повторяем с дизайном:

    function initCad(address cadAddr) {
       cad_addresses[msg.sender]        =  cadAddr;
       doctor_balances[ msg.sender ]    -= cadPrice;
       cad_balances[msg.sender]         = msg.value;
       if (statuses[msg.sender] == 1) statuses[msg.sender] = 2;
    }

9. Аналогично повторяем с фрезеровщиком:

    function initMill(address millAddr) {
       mill_addresses[msg.sender]  = millAddr;
       mill_balances[msg.sender]  += msg.value;
       if (statuses[msg.sender] == 2) statuses[msg.sender] = 3;
    }


10. Далее подтверждаем работу сканировщика:

    function digitizerDone() {
        if (statuses[msg.sender]==3) statuses[msg.sender] = 4;
    }

11. Подтверждаем работу дизайнера:

    function cadDone() {
       if (statuses[msg.sender]==4) statuses[msg.sender] = 5;
    }

12. Подтверждаем работу фрезеровщика:

    function millDone() {
       if (statuses[msg.sender]==5) statuses[msg.sender] = 6;
    }

13. Врач может принять или не принять работу. В последнем случае все деньги будут возвращены на его счет. ). Если работа еще не отфрезерована, то ничего не происходит. Если врач принимает работу, деньги отправляются на счета участников:

    function doctorDone(bool happy) payable returns (bool) {
        if (!happy){
            doctor_balances[msg.sender] += digitizer_balances[msg.sender];
            doctor_balances[msg.sender] += cad_balances[msg.sender];
            doctor_balances[msg.sender] += mill_balances[msg.sender];
            digitizer_balances[msg.sender]  = 0;
            cad_balances[msg.sender]        = 0;
            mill_balances[msg.sender]       = 0;
            return true;
        }
       if (statuses[msg.sender]!=6) return false;   
        bool digitizerOk = digitizer_addresses[msg.sender].send(digitizer_balances[msg.sender]);
        digitizer_balances[msg.sender] = 0;
        bool cadOk       = cad_addresses[msg.sender].send(cad_balances[msg.sender]);
        cad_balances[msg.sender] = 0;
        bool millOk      = mill_addresses[msg.sender].send(mill_balances[msg.sender]);
        mill_balances[msg.sender] = 0;
        if (digitizerOk && cadOk && millOk) statuses[msg.sender]=7;
        return (digitizerOk && cadOk && millOk);
    }
}


Слово команде проекта Digital Dentistry Exchange


Мы спросили участников проекта, какое будущее они видят у технологии блокчейн:

«Технология блокчейн – потенциально самая подходящая технология для проведения транзакций любых типов, начиная от финансовых услуг заканчивая приготовлением еды. Единственным дополнением к блокчейну должен быть доработанный механизм proof-of-work, который будет приносить пользу людям или науке (например, давняя задача поиска целых значений параметров a,b,c в выражении a^3+b^3+c^3=33).

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

Количество возможных приложений может быть огромным – главное тестировать идеи, реализации и активно их внедрять. Также было бы не лишним внедрение правового регулирования и ISO стандарта систем с архитектурой блокчейн.»

На фотографии ниже авторы материала: Константин Скобельцын, Виталий Дементьев, Ринат Хатипов, Айдар Нигматжанов, Роман Варнава.

Автор: @Schvepsss
Microsoft
рейтинг 352,04
Microsoft — мировой лидер в области ПО и ИТ-услуг

Комментарии (23)

  • +1
    Класс!
  • +2
    А зачем нужен глобальный блокчейн? В смысле, зачем доктору оплачивать что-то, чтобы поместить смарт-котракт в глобальный блокчейн если все участники именно данного use case находятся локально. И что произойдёт когда таких желающих станет много (например, у Visa 200 тыс транзакций в минуту), и сферическому доктору может стать просто невыгодно оплачивать сумму выше N чтобы попасть туда.
    • 0
      Для решения этого вопроса в блокчейне существует система поощрения майнеров – людей, предоставляющих свои вычислительные ресурсы для проведения транзакций. Ее работоспособность можно посмотреть на примере биткоина.

      Кстати, в Etherium есть и другой вариант: можно поднять локальную сеть блокчейн контрактов и не выпускать транзакции за ее пределы.
    • 0
      Глабальный блок-чейн просто невозможен. Объемы базы будут измеряться в экзабайтах (сейчас у локальной финансовой системы уровня среднего банка — «хорошие» петабайты). Таких систем хранения еще не придумали.
      • 0
        > Таких систем хранения ещё не придумали.
        1. Сколько десятков часов видео заливается на YouTube каждую минуту? (Узнать можно с помощью Google.)
        2. Сколько вариантов каждого ролика генерируется после заливки? (Узнать можно с помощью youtube-dl, запущенного с ключём -F)
        3. Что Сатоси Накамото говорил о хранении огромного блокчейна в отдалённом будущем?
        4. Что Виталик Бутерин предлагает для масштабирования блокчейна помимо шардинга? Что вы знаете о шардинге?

        > Глобальный блок-чейн просто невозможен.
        Ответив для себя на эти вопросы, вы так и не изменили своё мнение по данному вопросу?
        • 0
          Не изменил.
          Ютьюб — просто файловая помойка. Вы понимаете разницу между базой данных и файловой системой?
          Фантазии вымышленного персонажа неинтересны.
          Виталик Бутерин нигде не учился и не работал и ему кажется, что он придумывает что-то новое.
          Что касается шардинга, то он годится для баз данных с крайне простой бизнес-логикой и то не всегда.
          То, что вы легко кидаетесь такими словами, показывает, что вы ни одной серьезной финансовой системы в жизни не делали.
          • 0
            > Ютьюб — просто файловая помойка. Вы понимаете разницу между базой данных и файловой системой?
            Я понимаю к чему вы клоните, но технически конкретно вопрос хранения и обработки таких объемов уже фактически решённый. В мире сотни тысяч, если не миллионы дата-центров которые позволят уже сейчас имеют оборудование, которого будет достаточно для функционирования Ethereum интегрированного в финансовую систему в глобальном масштабе. И ведь дело даже ещё не дошло до затачивания железа под EVM.

            > Фантазии вымышленного персонажа неинтересны.
            Они интересны крупнейшим банковским организациям, но не анону uldaborg с Хабрахабра. Так и запишем.

            > Виталик Бутерин нигде не учился и не работал и ему кажется, что он придумывает что-то новое.
            По-видимому не только ему:
            > «Когда Виталик рассказывает о блокчейне, профессора Стэнфорда достают блокноты и начинают записывать», — так презентовал Бутерина глава Сбербанка Герман Греф на Всемирном экономическом форуме в Давосе.

            > То, что вы легко кидаетесь такими словами, показывает, что вы ни одной серьезной финансовой системы в жизни не делали.
            А вы, я так понимаю, наизобретали больше чем Сатоси и Виталик вместе взятые.

            > Что касается шардинга, то он годится для баз данных с крайне простой бизнес-логикой и то не всегда.
            Обоснуйте.
  • +2
    Во всей этой движухе (несомненно полезной!) вокруг блокчейнов удручает тот факт, что юзкейсы приходится высасывать из пальца и буквально силой «натягивать» на действительность.
    • 0
      Я согласна. Вполне логично, что первый опыт разработки для новой технологии будет набивать «шишки», будут полезные и не очень решения.

      В данном случае кейс помогает решать ежедневные рутинные задачи для стоматологов-ортопедов. Без него можно обойтись, но с ним будет просто удобнее. Так же, как можно вручную сортировать письма по папкам или настроить автоматическую сортировку.
      • 0
        Для описанного кейса вообще никаких блокчейнов не нужно — заказчика интересует (как обычно) только конечный результат, но никак не вся, непонятная ему, цепочка действий, которую он не может ни контролировать, ни даже просто адекватно оценить. И ведь подобная ситуация практически со всеми примерами.

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

          Так как это материал от участников хакатона, было бы странно говорить о конечном результате. Это наработки, которые могут вырасти или не вырасти в готовые проекты, которые как раз будут интересны заказчикам.
          • 0
            А зачем вам об этом рассказывать, вам платят за это? Если да — кто?
            Если не платят — почему вы сами не зарабатываете на своих блокчейн-наработках реальные деньги?
            Изучить основы и толкать информацию на «хакатонах» много ума не нужно
            • 0
              Для того, чтобы вы могли представлять как можно применить новую технологию в своих проектах, нужна ли она и для чего именно.

              Насчет заработка реальных денег — мы можем вести длинную дискуссию о стартапах и о том, как они работают, на чем зарабатывают, которая ни к чему не приведет.
  • 0
    Красиво!
    Только если:

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

    то с чем участники этого забега пойдут в суд?
    • 0
      Участники смогут пойти в суд с выписками всех подтверждений работ, весь ход сделки в блокчейне, в том числе движения денег, легко верифицируется и не может быть подменен.
      • 0
        Юридическая значимость этих выписок какова? Если нет договора. Желаю им удачи!
  • +1
    В данном случае весь функционал, который мы получаем от blockchain'а, сводится к тому, что существуют контракты, записанные в виде формальных алгоритмов, которые автоматически принимаются системой к исполнению в случае наступления определённых условий. Это то, что, к сожалению, сейчас не допускают банки. Но предположим, что какая-нибудь доверенная финансовая организация таки возьмётся исполнять такие контракты, которые связывают между собой несколько счетов в рамках одной организации:
    • данные контракты будут являться юридически-значимыми, в отличии от blockchain-контрактов
    • можно будет в суде оспорить какой-либо контракт или заключение о качестве работ
    • в принципе не будет потерявшихся контрактов или денег, зависших в системе из-за сбоя на жёстком диске доктора


    Кстати, что-то похожее таки-есть и сейчас у банков. Это открытие доступа к банковским ячейкам по договору в случае наступления заранее оговоренных условий. В принципе и с деньгами на счетах что-то такое тоже есть. Если какой-нибудь банк возьмётся выстроить это в законченную инфраструктуру, которая по функционалу (и скорости) совместима с контрактами Ethereum, но без blockchain'а, а просто на базе своих счетов…
    • 0
      Само понятие блокчейна и тем более смарт контрактов очень молодо и только набирает обороты. Банки в классическом понимании здесь просто не нужны: деньги, или правильнее некое обязательство, хранятся прямо в контракте. Когда появятся стандарт, законодательное регулирование и установлен правовой режим, то продукт этой технологии несомненно станет полностью юридически значимым. Опять же, неизменимость блокчейна позволит вести судебное производство и все будут крепко думать прежде, чем что-то подтверждать. В блокчейне деньги не могут затеряться, но они могут «зависнуть» навечно, если контракт написать криво =)

      По поводу банков: они несомненно попытаются сделать нечто подобное, интересно будет посмотреть, что это будет, и какие будут инфраструктурные издержки.
  • +1

    очепятка?


    Аналогично повторяем с дизайном:
    if (statuses[msg.sender] == 1) statuses[msg.sender] = 1;
    • 0
      Спасибо! Исправили.
  • 0
    Во всей этой движухе вокруг криптовалют и блокчейна в частности я пока что вижу только сферический алгоритм в вакууме, который красиво переливается всеми цветами радуги, и который, как maxp заметил, пытаются натянуть на этот и другие юзкейсы. Юзвери всеми силами сопротивляются не в силах понять зачем в разы усложнять то, что и так хорошо работает всю красоту идеи.
    : )))
    • 0
      Юзверю все равно что скрывается за веб страничкой в этих ваших интернетах. Юзверю достаточно увидеть, что контракт заключен, что комиссии по транзакциям значительно меньше банковских. Что не нужно звонить в бухгалтерию участников и направлять к ним курьеров с целью подписания актов.
      Это экономит кадры, время, и, как следствие, деньги.
      Конечно проще все это делать на бумажках по старинке, джвижухи вокруг бумажек значительно больше и бюджеты бумагомарателей совокупно выше.
      Но мне достаточно уведомления, «что ваш билет на паравозик куплен». И я верю, что билетик на пару сотен рублей дешевле, потому что нет сисадмина который меняет картридж в принтере.
      Сбоев пока не было, бумагу не марал, это профит.

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

      Для меня этого достаточно чтобы успешно экстраполировать простой договор между двумя лицами в сложные системы контрактов на блокчейнах.
  • 0
    одна проблема — как быть если нам ну очень хочется вмешаться в контракт по какой то причине и мы считаем что Имеем Право (например потому что мы — суд который хочет принять решение, не предусмотренное в контракте, или разработчик который… ну совсем немного ошибся (история с взлом The DAO когда было прямо сказано — контракт это код, описание — вторично. нашелся тот кто этим воспользовался, непредусмотренным разработчиком способом, и в итоге выясняется что таки если ну очень очень хочется — то откатить все таки можно)

    нужно либо механизм как такое делать (а как? заранее в контракте предусматривать? а смысл тогда?) либо чтобы люди не ожидали такой возможности… все, потенциально замешанные люди.

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

Самое читаемое Разное