Pull to refresh

Comments 38

Вы молодцы. Вызывает уважение, что вы вообще этим занимаетесь.
Про затраты времени на разработку инфраструктуры вокруг блокчейна — прям в точку. Особенно вокруг Ethereum-a, где по сути единственное нормальное подобие sdk — web3. В том же hyperledger (fabric) всё устроено попроще.
Спасибо за статью, круто. Мы например пытаемся реализовать локальный «блокчейн» не затрагивая глобально, повторить, но только на 10 машинах. Не подскажите что можно почитать (помимо https://blockchain.info)? Т.е. по большому счету эта та же P2P сеть только с небольшими надстройками по вычислению хеш функций как я понимаю.
Если я правильно понял, то что вы хотите — приватный чейн (консорциум)? Думаю, что в данном случае вам можно посмотреть на другие способы достижения консенсуса, например Proof-of-Authority
Спасибо, обязательно глянем. Да. Знакомы и смотрели proof of work and proof of stake. Но наша проблема, скажем, джуновская. Хотим реализовать в.нет. Но тут вылезло недостаток знаний по сети, с чем сейчас активно и боремся. Изначально пробовали через PNRP протокол просто построить P2P. Но не вышло, куча вещей нужно сделать что бы выйти глобально, попытки не оставили пробуем.Второй вариант, возможно экзотичный, через WCF, каждая машина и хост и сервис. Задумка следующая: запускаем первую программу, в настройках вводим ее некоторые параметры, она становится хостом. При запуске аналогичной программы на другой машине она должна по настройкам подключится к первой (тут в голову приходит перекинуть файл тхт, но так не пойдет). Т.е. она как- то должна определить что есть такая-то машина с сервисом. Главное что бы не было сервера. Как такое реализовать? Или без сервера посредника никак? Т.е. первая машина становится node (хост и клиент), и к ее сети должна подключится вторая, потом третья и так далее. При каждом подключении машины копируют настройки/данные одна другой (передают и получают через сервис), что бы могли работать независимо. Далее уже будем реализовывать консенсус. Или мы не в том направлении смотрим? Заранее спасибо,
Если вы хотите передавать настройки и автоматизировать подключение в сеть, только чтобы потом сделать приватный чейн, то может проще посмотреть вот этот туториал.
Так же советую почитать Monax, если собираетесь писать свои смарт-контракты. Там есть много полезной информации по ним (аля паттерны, бестпрактис и прочее)
Подскажите, к каким данным (проверяемым только программно и на основе которых можно строить соответствующую логику) имеет доступ ethereum virtual machine.
У EVM есть доступ к данным в блокчейне, который вы прописали при запуске (паблик или что-то другое).
Если вы хотите получать доступ к внешним данным, то это нужно делать наоборот — сделайте приложение (оракул) которое получает данные из внешнего мира и делает транзакции к вашим смарт контрактам.
Приложение оракул связывает реальный мир с блокчейном, т.е. добавляет в него данные, на основе которых контракты будут действовать, идеологически какие еще функции они исполняют?

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

Если нет, то в чем достоинства использования EVM перед централизованным подходом? или как пример, переноса всей логики, которая могла бы быть запрограммирована в приложение-оракул, и только данные хранить в блокчейне (например bitcoin)?
У них много функций например N-of-M multi-signature transactions, про оракулы есть хорошая статья.
Да можно сделать oracle network. Чтобы противостоять злонамереным владельцам вам потребуется добавить алгоритм консенсуса в вашу сеть, берите этот.
То сколько вычислительных операций вы будете выполнять внутри ethereum и вне его — это ваш выбор, учитывая что внутри они скорее всего будут дороже, возможно вы сделаете выбор хранить в блокчейне только данные. В качестве оправдания вычислительных операций — код контракта не меняется, и вы можете сделать его открытым и обще доступным, тогда ваши эвристические формулы вычисления, например комиссии, будут общедоступны и неизменны — это может повысить доверие к вашему продукту.
немного не понял про oracle network, если закрыть глаза на стоимость исполнения кода внутри EVM, почему нельзя использовать уже существующий блокчейн, а городить свой?

Если хранить данные только в блокчейне, то зачем нам вообще нужен ethereum? если есть bitcoin?

Я просто пытаюсь понять, что именно такого интересного в ethereum что ломанулись писать под него инструментарий, почему не развивать уже существующие блокчейны?

p.s. если сравнивать орг.проблемы, то у ethereum идеологически все еще хуже (форк спасения DAO) чем у bitcoin, с его размером блока.
Что-то первый вопрос я не понял.
Мы не только данные храним в блокчейне, какая-то часть логики там находится.

Вообще мне нравятся идеи ethash, ghost и gas, вот уже хотя бы три причины почему ethereum.

Да, про орг. проблемы согласен, про это есть в статье.
oracle — это third party и centralysed, т.е. все то, ради чего мы уходим в блокчейн, вся беда в том что блокчейн не видит внешнего мира и не существует адекватной технологии эту информацию туда гарантированно положить, вот и получается что нужно внешнее централизованное решение, которое превращает всю систему в зависимую от единого центра… спасибо блокчейну, информацию можно хранить с гарантией что 'она не потеряется' и ее 'не подменят после записи', но просто хранение данных может делать абсолютно любой блокчейн, соответственно выбирай кого-нибудь понадежней, побыстрее и подешевле.

просто причины использование EVM для меня все еще остаются туманными и непонятными, и главное я не могу понять, для каких именно задач этот инструмент становится оправданным

т.е. ваш ответ, выбор ethereum потому что 'красивенько и перламутровые пуговицы', да?
Мне не очень понятно, почему нужно зависеть от единого центра.

Предлагаю вам почитать white paper и yellow paper, там хватает примеров и достаточно подробно изложены преимущества тех идей, которые я перечислил, думаю что цитирование и пересказ — дело бессмысленное.
Если я правильно понимаю, то
1) при получении банком подтверждающих документов по аккредитиву должен быть совершен перевод. И (если он в другой банк) «откатить» его нельзя.
2) при получении банком подтверждающих документов по аккредитиву должен быть закрыть контракт в etherium. И его тоже «откатить» его нельзя.
3) это должно происходить в одной распределённой транзакции.

Как у вас целостность поддерживается?
Я уже писал в статье, что все операции проводились в пределах одного банка. У нас аккредитив — это объект с определённым статусом внутри контракта, поэтому откатить можно.
Тригерром для изменения статуса является проверка данных сотрудником банка и успешное выполнение операций внутри банка, поэтому просто последовательное выполнение операций, в случае ошибки — продолжаем с того места на котором остановились.

Очень толковая статья, спасибо.
Но вот по этой части много вопросов:
Что же такое смарт-контракты Ethereum? Это просто программы, исполняемые EVM (Ethereum Virtual Machine). Контракты могут писаться на нескольких языках, например, на solidity. Все поддерживаемые языки тьюринг-полные, но это не значит, что вы можете всё сделать на EVM. Исполнение вашего кода должно контролироваться, т.к. его будут исполнять другие участники сети, поэтому за исполнение вы будете платить деньги — wei (деноминация ether). Чтобы код, написанный в вашем контракте, начал исполняться, вам нужно создать транзакцию. Эти транзакции передаются майнерам — тем участникам сети, которые занимаются её поддержкой. Они добавляют новые блоки с валидными транзакциями в блокчейн (объяснение намеренно упрощено, подробнее можно почитать тут и тут). Если в качестве адресата транзакции указан смарт-контракт, то майнер исполняет код функции, которая вызывается в транзакции, это стоит вычислительных ресурсов майнера, их использование вы должны оплатить.

Создание смарт-контракта это тоже транзакция, но с пустым адресатом, сохранение контракта в следующее состояние сети потребует ресурсов, которые тоже нужно оплатить. Чтобы сделать процесс оплаты более открытым (превратить его в маркетплэйс), введена концепция внутрисетевого ресурса — газа (вам надо будет много газа, так что вы, видимо, протосс). Газ не является деноминацией эфира, но у любых вычислительных операций и у сохранения данных есть ценник в единицах газа. В транзакции, которую вы хотите сделать, указывается число startgas — сколько газа будет стоить её исполнить, а стоимость одной единицы газа (gasprice) вы назначаете сами, поэтому, указывая более высокий gasprice, вы повышаете шанс включения вашей транзакции в блок, хотя стоит сказать, что большинство майнеров не отбирают транзакции, значит, можно оставлять дефолтное значение.


— создание самого смарт-контракта — оплачивается газом, формируется блок. Откуда брать этот газ? На основании чего определяется его дефолтное значение? Про приватный чейн все понятно, но неинтересно.
— исполнение контракта — оплачивается wei — это тоже блок (транзакция)? Эту криптовалюту тоже надо покупать?
— как определяется цена «обслуживания» умного контракта, от чего зависит ее размер?
Допустим вы вызываете функцию контракта
inContract.sendLetterOfCreditToNextContractAsync(id, { value: 0, gas: 100 })

«gas 100» — означает что ваша транзакция будет стоить 100 * gasprice
gasprice — задаёте либо вы сами, указав прямо в web3 (т.е. добавив вконце gasPrice: 999) либо используется дефолтное значение для клиента сети, которым вы пользуетесь. Обычно клиенты вычисляют дефолтное значение газа, используя для этого информацию о последних транзакциях. подробнее
ether — 1e18 wei про деноминации
Цена выполнения функций контракта зависит от количества вычислительных операций и количества данных которые вы хотите сохранить в блокчейн.
Спасибо, стало понятнее, но все же вопрос остался: кто при совершении аккредитива платил майнерам Etherium: банк, клиент или вы как сервис провайдер?
Это деликатная тема, третий вариант с сервис провайдером, мне нравится больше.
Во всяком случае клиенты не платили майнерам.

?!?!??!?!?!!!?


Чтоа? Что вы, собственно, сделали? Прежде чем писать маркетинговый буллшит и показывать веб-интерфейсы, расскажите, в чём суть произошедшего?


В общем, пролистал пару первых абзацев вашей статьи и отвечаю.


Прежде чем начать свой коммент, хочу сказать пару слов о терминологии. Ethereum — это децентрализованная сеть. Это вполне конкретная децентрализованная сеть (конкретный instance) с некой вполне конкретной цепочкой блоков. Когда мы говорим "Ethereum", мы имеем в виду именно её, эту сеть. Если речь идёт об альтернативной сети, построенной с помощью того же кода и той же технологии, это оговаривается отдельно. Ether — это децентрализованная валюта, лежащая в основе сети Ethereum. По словам разработчиков, "Ether — это топливо для контрактов Ethereum". Опять-таки, Ether — это конкретная валюта с конретным курсом по отношению к доллару. Сейчас Ether равен 19.7 долларов. Если речь идёт об альтернативной валюте на основе той же технологии, то это нужно оговаривать отдельно.


Итак, вы воспользовались одной из существующих криптовалют, одной из запущенных децентрализованных сетей? Одним конкретным запущенным instance'м децентрализованной сети, такой как например, главный instance (main net) сети ethereum, той главной сети, к которой по дефолту подключается скачанный с оф. сайта клиент ethereum? Или вы просто воспользовались технологией блокчейн, т. е. создали свой блокчейн на основе существующего кода? Скажем, взяли код ethereum на его основе запустили свой instance ethereum-сети, получили свою основанную на ethereum сеть?


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


Если первое, то это меняет дело. Это отличный прецедент для России. Это отличная новость для тех, кто с нетерпением ждёт законодательных продвижений в области криптовалют. Это значит, что реальный российский банк воспользовался существующей криптовалютой (этер).


В случае если верно первое, у меня к вам куча доп. вопросов. Во-первых, где вы взяли этеры? Вы их купили? У кого, на какой бирже? Как вы легально оформили сделку? Проблема ведь в том, что насколько мне известно, ни одна из криптобирж не является полностью легальной (как и сами криптовалюты, впрочем). И, как мне известно, никаких действительно законных документов, тем более признаваемых в России, они не дают. И налоговыми агентами не являются. И лицензии на ведение биржевой деятельности у них нет. У них нет лицензии на ведение биржевой деятельности ни в одной стране, но не смотря на это они ведут свою биржевую деятельность во всех странах сразу, не спрашивая порой у очередного клиента, из какой он, собственно, страны.


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


Как вы подстраховались от резкого изменения курса? Вот купили вы кучу этеров, заключили контакты, всё у вас ок. Теперь пришла пора продать этеры. А цена резко изменилась. И вы в убытке. Вы подстраховались от такого? Как?


Ответьте, пожалуйста, на все эти вопросы.


Итак, мне совершенно не нравится ваша статья. С чего нужно начать статью? Можно начать с короткого абзаца для привлечения внимания, который в двух словах рассказывает, что и как. Он может быть непонятным, главное, чтобы он привлёк внимание. И его можно опустить. А вот дальше нужно по порядку рассказать всё как есть. Рассказать, действительно ли вы воспользовались главным instance'ом Ethereum, где вы взяли этеры, кому они перешли в распоряжение после покупки, как вы юридически всё это оформляете и так далее и тому подобное. А потом уже рассказывать про этот ваш веб интерфейс. И про особенности настройки Ethereum. И конкретный код на solidity. Иначе ничего не понятно вообще.


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

В общем, пролистал пару первых абзацев вашей статьи и отвечаю.

Ну наверное стоило бы дочитать до конца, на большинство ваших вопросов есть ответы в статье.
Вопрос на который не было ответа в статье
где вы взяли этеры?

Друг подарил, хотя уже есть даже физические обменники.

А, ну да, ещё вопросы. Как наличие контактов Ethereum гарантирует реальное совершение услуги? Что такое вообще этот ваш аккредетатив? Блин, если бы вы захотели, вы бы могли в одном абзаце всё уместить! В чём суть аккредетатива, т. е. что именно за договор нужно было переместить на блокчейн, и как конкретно вы его на блокчейне разместили.


Далее, действительно ли вам понадобилось количество этеров, равное по своей ценности сумме сделки? Или нет, вы просто воспользовались неким символическим маленьким количеством этеров, к сумме сделке не имеющем отношения? Если маленьким, то какой тогда вообще смысл в этом Ethereum контракте? Что он вообще будет гарантировать? Это поиграться что ли? У вас Ethereum тогда просто для учёта сделок, но для их гарантии что ли?


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


И блин, всё это нужно было запихнуть в начало статьи. Сразу всё написать: мы воспользовались реальным instance'ом Ethreum (или не воспользовались), закупили Ether'ов на всю сумму, на все миллионы рублей (или не закупили), юридически оформили так-то (или не оформили) и т. д.

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

Если вы знакомы с ethereum проектами, то наверное уже должны были догадаться, что мы сделали. Кстати есть мнение, что другие ребята которые делали аккредитивы на блокчейне делали также, во всяком случае те с кем я говорил.

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

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

Как вы понимаете, сейчас в смарт-контрактах реализовано просто сохранение хэшей от некоторых полей аккредитива, его статус и проверка информации при закрытии. Да, у нас было больше идей того, что можно перенести на сторону блокчейна, и, возможно, в дальнейшем их получится реализовать. В данном проекте мы большую часть времени потратили на создание приложений: фронт-энд и апи. Хотя есть мнение, что так происходит во многих проектах, связанных с блокчейном.
> И всё таки зачем вам может понадобиться блокчейн? В идеале если вам нужно создать систему обмена информацией между участниками, независимую от уровня доверия между ними, то это то что вам нужно.

А зачем это нужно вам? Вы же банк, по идее как раз торгуете своим авторитетом в сделках. Любые децентрализованные сделки конкурируют с вашим основным бизнесом. Какая польза от блокчейна может быть для банка?
Согласен пытаться увеличивать доверие к банку странное занятие, но в сделках же участвует не только банк. Поэтому ключевым преимуществом является возможность авторизации внутри сети всех участников сделки и то что все операции подписаны. Разумеется цифровая подпись в ethereum не по ГОСТу, поэтому требуется заключение дополнительных юридических соглашений и использование ГОСТовой цифровой подписи на копии документов. Но возможно в будущем будет реализация блокчейна по ГОСТу, тогда про многие из текущих усложнений можно будет забыть.
Я имел в виду, что банк может использовать свой авторитет для обеспечения сделки. Ну как сейчас сделано: покупатели не боятся платить через банк, потому что если продавец их обманет, они смогут оспорить сделку и получить возврат от банка. И за эту услугу банк берёт свою долю.

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

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

Но менять придётся всю концепцию proof of work. Во-первых, нечего банкам жечь электричество попусту. Во-вторых, изначальная идея proof of work рассчитана на децентрализацию, а банки стремятся к централизации. Когда у тебя не несколько тысяч акторов, а пара десятков, они вполне могут вступить в сговор. В-третьих, о сговорах — зачем соревноваться в количестве сожжённого электричества, когда можно договориться о каком-то уровне выработки газа.

Да и вообще лучше отказаться от proof of work и заменить его на что-то другое, на предустановленную способность банка проводить какой-то процент контрактов, который банки между собой распределяют прямыми договорами, без всякой электронной мишуры.

В результате появится авторитетный орган «совет банков», который устанавливает правила технологической игры, и которому все должны доверять. И снова мы приходим к исходным условиям задачи — есть единственный актор. А если мы не можем его установить, то и договориться не сможем.
Ну да если и делать что-то такое, то нужно использовать не PoW, благо альтернативных алгоритмов достижения консенсуса, не нуждающихся в вычислительных мощностях, достаточно.
Не очень понятно почему должен создаваться совет банков, вырожденный в одного актора, вы почему-то хотите всё централизовать :)
В этом проекте мы хотели использовать публичный чейн, поэтому Ethereum.
Но если говорить про проекты только на приватном чейне, то, наверное, Fabric. Хотя в последних версиях Parity приватный чейн Ethereum получил хороший апгрейд.
Могли бы и нормально в статье код контрактов привести а не давать ссылку на байт-код в блокчейне. Для разработчиков — пользы от статьи почти никакой
Sign up to leave a comment.