Blockchain and decentralized applications are getting used more and more often. Many big enterprises like IBM, Walmart, Alibaba, FedX, British Airways, and others are already integrating blockchain into their ecosystems.
As most of the applications on the web, decentralized applications require a client to make interaction with them user-friendly. I would like to share how to connect/integrate JavaScript applications with decentralized, blockchain services. Take a look at what are the differences between decentralized and standard backends, what challenges and issues developers might meet.
Надежный обмен данными в гетерогенной среде, между разными платформами и технологиями является одним из ключевых моментов разработки сложных систем. Во время обмена данные преобразуются в некоторый промежуточный формат совместимый между платформами. Преобразование в подобный формат и из него — крайне рутинная и подверженная ошибкам работа.
Метаописание данных неким декларативным языком с последующей автогенерацией типизированных структур облегчает жизнь разработчику. Снимает с него необходимость задумываться о промежуточном формате, о правильном порядке полей, а типизированность гарантирует выявление ошибок еще на этапе компиляции кода.
В докладе будет рассмотрено несколько подобных решений, их плюсы и минусы. Также будет рассмотрен с практической стороны наш собственный формат метаданных, используемый нами на протяжении более 5 лет.
Целевая аудитория:
Ограничений нет, но в большей степени разработчики, имеющие уже определенный опыт разработки разнородных систем или приступающие к подобной задаче.
Надежный обмен данными в гетерогенной среде, между разными платформами и технологиями является одним из ключевых моментов разработки сложных систем. Во время обмена данные преобразуются в некоторый промежуточный формат совместимый между платформами. Преобразование в подобный формат и из него — крайне рутинная и подверженная ошибкам работа.
Метаописание данных неким декларативным языком с последующей автогенерацией типизированных структур облегчает жизнь разработчику. Снимает с него необходимость задумываться о промежуточном формате, о правильном порядке полей, а типизированность гарантирует выявление ошибок еще на этапе компиляции кода.
В докладе будет рассмотрено несколько подобных решений, их плюсы и минусы. Также будет рассмотрен с практической стороны наш собственный формат метаданных, используемый нами на протяжении более 5 лет.
Целевая аудитория:
Ограничений нет, но в большей степени разработчики, имеющие уже определенный опыт разработки разнородных систем или приступающие к подобной задаче.
Презентация со встречи сообщества SPb Python Interest Group рассказывающая об устройстве словарей в Python.
В презентации рассмотрена работа словаря в CPython 2.x, словаря в CPython 3.x, а также рассмотрены изменения в CPython 3.6.
Помимо CPython рассмотрены версии словаря в альтернативных реализациях Python, таких как PyPy, IronPython и Jython.
MongoDB - About Performance Optimization, Ivan Griga - Smart GammaEvgeniy Kuzmin
- For which data types MongoDB is more suitable.
- Basic tips for optimizing performance.
- How to quickly and easily speed up a high-load project that uses MongoDB as the main data repository.
- How to build queries and use indexes.
Двойное освобождение ресурсов. Недостижимый код. Некорректные операции сдвига. Неправильная работа с типами. Опечатки и copy-paste. Проблемы безопасности. Путаница с приоритетом операций.
Докладчик: Данил Руденко
О докладе:
У нашего зоопарка опять проблемы, которые необходимо решить максимально технологично!
На первом докладе мы поговорили о сверточных нейронных сетях, в этот раз рассмотрим такие виды нейронных сетей как автоэнкодеры и GAN’ы( генеративные состязательные сети). Также углубимся немного в Keras, напишем кастомный загрузчик данных и немного посмотрим на Jupyter Notebook.
Видео: https://youtu.be/tu-ee_4uAGY
Докладчик: Данил Руденко
О докладе:
По некоторым оценкам, больше половины профессий будет автоматизировано – это и есть максимальный объём, на который может быть увеличен рынок алгоритмов машинного обучения, ярчайшем представителем которого являются нейронные сети.
В докладе мы поговорим об общей концепции нейронных сетей, рассмотрим основные Python - фреймворки для машинного обучения, а также реализуем решение задачи классификации изображений с применением Keras.
При написании программы, разработчик примерно представляет себе, как должна работать его программа. Но не всегда его ожидания соответствуют действительности — приложения тормозят, потребляют много ресурсов и вообще ведут себя не так, как задумывалось, особенно под большой нагрузкой. В своём докладе я покажу, как заглянуть "под капот" ваших приложений на Python (и Django в частности): какие способы профилирования бывают и когда их можно использовать, расскажу об отладке приложений и различных инструментах, которые помогают разработчику при разработке.
Презентация со встречи сообщества SPb Python Interest Group рассказывающая об устройстве словарей в Python.
В презентации рассмотрена работа словаря в CPython 2.x, словаря в CPython 3.x, а также рассмотрены изменения в CPython 3.6.
Помимо CPython рассмотрены версии словаря в альтернативных реализациях Python, таких как PyPy, IronPython и Jython.
MongoDB - About Performance Optimization, Ivan Griga - Smart GammaEvgeniy Kuzmin
- For which data types MongoDB is more suitable.
- Basic tips for optimizing performance.
- How to quickly and easily speed up a high-load project that uses MongoDB as the main data repository.
- How to build queries and use indexes.
Двойное освобождение ресурсов. Недостижимый код. Некорректные операции сдвига. Неправильная работа с типами. Опечатки и copy-paste. Проблемы безопасности. Путаница с приоритетом операций.
Докладчик: Данил Руденко
О докладе:
У нашего зоопарка опять проблемы, которые необходимо решить максимально технологично!
На первом докладе мы поговорили о сверточных нейронных сетях, в этот раз рассмотрим такие виды нейронных сетей как автоэнкодеры и GAN’ы( генеративные состязательные сети). Также углубимся немного в Keras, напишем кастомный загрузчик данных и немного посмотрим на Jupyter Notebook.
Видео: https://youtu.be/tu-ee_4uAGY
Докладчик: Данил Руденко
О докладе:
По некоторым оценкам, больше половины профессий будет автоматизировано – это и есть максимальный объём, на который может быть увеличен рынок алгоритмов машинного обучения, ярчайшем представителем которого являются нейронные сети.
В докладе мы поговорим об общей концепции нейронных сетей, рассмотрим основные Python - фреймворки для машинного обучения, а также реализуем решение задачи классификации изображений с применением Keras.
При написании программы, разработчик примерно представляет себе, как должна работать его программа. Но не всегда его ожидания соответствуют действительности — приложения тормозят, потребляют много ресурсов и вообще ведут себя не так, как задумывалось, особенно под большой нагрузкой. В своём докладе я покажу, как заглянуть "под капот" ваших приложений на Python (и Django в частности): какие способы профилирования бывают и когда их можно использовать, расскажу об отладке приложений и различных инструментах, которые помогают разработчику при разработке.
Где кончается react native? / Павел Кондратенко (Rambler&Co)Ontico
РИТ++ 2017, Frontend Сonf
Зал Мумбаи, 5 июня, 11:00
Тезисы:
http://frontendconf.ru/2017/abstracts/2496.html
В своем выступлении я расскажу про то, как библиотека бумажных книг в нашей компании переехала в онлайн и причем тут react native. Погружаясь в архитектуру этой технологии я постараюсь дать представление о том, что можно выжать из нее и где заканчиваются ее возможности. Разберем потоки в приложении, возможные проблемы и все это на таких простых примерах как ActivityIndicator.
Если у вас еще не дошли руки до react native, но всегда хотели разобраться - приходите обязательно! Из моего доклада вы сможете, как минимум, получить представление об этой технологии.
Дмитрий Сошников Искусственный интеллект и нейросети для .NET-разработчиковMskDotNet Community
2017-12-16 MskDotNet Субботник
Искусственный интеллект сейчас является одной из самых обсуждаемых тем и главным двигателем цифровой трансформации бизнеса. Стратегия Microsoft в области ИИ включает в себя демократизацию ИИ для разработчиков, т.е. предоставление простых в использовании фреймворков и сервисов для решения интеллектуальных задач. Мы расскажем, как.NET-разработчики могут использовать возможности ИИ в своих проектах: начиная от готовых когнитивных сервисов, работающих в облаке, заканчивая обучением нейросетей на.NET-языках и запуском сложных нейросетевых моделей на компактных устройствах типа Raspberry Pi.
Из презентации вы узнаете:
— как мы пришли к Go, оставив идею использования Node.js, Scala или Rust;
— про первый сервис, который мы написали на Go и запустили в продакшен;
— про ошибки, с которыми сталкивались под нагрузкой;
— про оптимизации, которые мы сделали и еще планируем сделать;
— про тестирование и предотвращение тестирования на продакшене (в частности, websocket'ов).
Лекция #5. Введение в язык программирования Python 3Яковенко Кирилл
Web-программирование
Лекция #5. Введение в язык программирования Python 3
Цикл лекций читается в Омском государственном университете им. Ф.М.Достоевского на факультете компьютерных наук.
Лектор: Яковенко Кирилл Сергеевич.
«Облачный» сервис интеллектуального анализа данных. графический интерфейс пос...Анастасия Вязьмина
Презентация к диплому бакалавра
Выполнила: студентка
4 курса, 481 группы
А.Н. Вязьмина
Научный руководитель:
к.ф.-м.н., доцент,
С.И. Жилин
Барнаул, Алтайский государственный университет
2012 год
Видео примера работы с интерфейсом можно скачать тут: https://yadi.sk/i/DlZqdKFPgLCry
Мы все допускаем ошибки при программировании и тратим массу времени на их устранение.
Один из методов который позволяет быстро диагностировать дефекты – статический анализ исходного кода.
Языки C, C++ и C++0x как набор ножей по дереву. С их помощью создаются великолепные изделия, но немного неаккуратности и можно глубоко порезаться. Одной из самых ранних методик обнаружения ошибок в коде программ является статический анализ кода. Запуская анализ сразу после написания нового кода или во время ночных сборок, можно выявить множество ошибок еще до этапа тестирования. Это сокращает стоимость и время их исправления. Также могут быть обнаружены дефекты, редко проявляющие себя, которые могут являться головной болью на протяжении многих месяцев сопровождения программы.
В докладе будет продемонстрировано множество примеров ошибок в известных open source программах и библиотеках, которые можно обнаружить с помощью статических анализаторов.
Всё о статическом анализе кода для Java программистаAndrey Karpov
Этот доклад для тех, кто не знаком со статическими анализаторами кода, или знаком, но ещё не внедрил эти инструменты в процесс разработки. Будет описана методология статического анализа и как она используется для выявления ошибок и запахов кода. Будут кратко рассмотрены некоторые популярные инструменты статического анализа для языка Java, а также платформа SonarQube способная объединить и визуализировать отчёты различных анализаторов. Немного заглянем внутрь и поговорим о технологиях, используемых в современных статических анализаторах кода и позволяющих находить разнообразнейшие паттерны ошибок. Затронем вопрос, почему несмотря на уже существующие инструменты наша команда решила сделать ещё один: PVS-Studio for Java :). В конце рассмотрим важный вопрос интеграции инструментов статического анализа в большие старые проекты и почему так важно регулярное использование подобных инструментов.
200 open source проектов спустя: опыт статического анализа исходного кодаAndrey Karpov
Одна из особенностей работы нашей команды — анализ большого количества различных программных проектов. Рассказывать о закрытых коммерческих проектах часто запрещает NDA, а вот об open source можно и нужно говорить. Какие ошибки допускают в open-source-проектах? Какой код более качественный — закрытый или открытый? Нужно ли придерживаться стандартов кодирования, или они давно устарели? Какие ошибки сложнее найти и исправить — сложные архитектурные или простые опечатки? Проанализировав за несколько лет сотни программных проектов от zlib до Chromium, мы готовы поделиться своим опытом и ответить на эти вопросы.
SAST и Application Security: как бороться с уязвимостями в кодеAndrey Karpov
Проблематика: Объёмы кода растут; Плотность ошибок растёт нелинейно; Все хотят качественный и БЕЗОПАСНЫЙ код; Старых методов контроля качества уже недостаточно.
C++ CoreHard Autumn 2018. Информационная безопасность и разработка ПО - Евген...corehard_by
Информационная безопасность все больше из отдельной сферы плавно перетекает в разработку ПО. А значит «обычным» программистам приходится понимать те требования и терминологию, которые специалисты по безопасности уже давно знают и используют. CWE, CERT, MISRA, SAST– для «обычных» программистов это непонятные аббревиатуры. Поэтому в обзорном докладе мы попробуем рассказать простым языком об этих понятиях так, чтобы все разработчики начали уверенно ориентироваться в этой теме.
Эффективные алгоритмы поиска подобных объектов для терабайтов данных / Евгени...Ontico
Segmento DMP хранит сотни миллионов анонимных профилей пользователей интернета. Часть из задач отдела Data Science связана с их кластеризацией и поиском нечетких дубликатов. Для успешного решения этих задач необходимо вычислить метрики сходства между профилями. Brute force подход на таких объемах данных уже не сработает, поэтому мы выбрали другой путь.
Тезисы - http://www.highload.ru/2015/abstracts/1862.html
JS Fest 2019/Autumn. Роман Савіцький. Webcomponents & lit-element in productionJSFestUA
В далекому 2016 році світ почув про вебкомпоненти, а одна ще тоді не дуже розумна команда, якій приходилось верстати дуже багато, вирішила спробувати те все в продукті, який би допоміг зменшити верстку. Про біди вебкомпонентів відомо всім, але про те, як вижити і дійти з альфи до стабільної версії знають не багато. Використання lit-element & lit-html і вирішення наболілих проблем, ось справня ціль моєї доповіді. Happy end обіцяю.
In this talk, attendees will see examples to improve their Javascript Performance making a few changes in their existent application. We will talk about Cache, Node.js common flow, and best practices. They'll see how to avoid performance problems working in Javascript loops, tips to work with Web APIs and best practices javascript applications.
JS Fest 2019/Autumn. Alexandre Gomes. Embrace the "react fatigue"JSFestUA
As a subset of the JS community, react has seen a lot of so-called ""good practices"" these last years, made out of libraries and design patterns. As if it wasn't hard enough to stay sane in a crazy JS world, we're now doing the same in react.
Together, let's explore how such abundance of new techniques can actually be embraced, without making you lose your mind !
JS Fest 2019/Autumn. Anton Cherednikov. Choreographic or orchestral architect...JSFestUA
When we developing a loosely coupled and reusable application, often arises the question: how to arrange to communicate between services or applications? To a large extent, it depends on the nature of the request and the granularity of your applications or services.
We will discuss the two classic microservice integration patterns: service choreography and orchestration.
What is the difference between these two modes of communication? Which one we should use? How to ensure data consistency? How to implement disturbed transactions?
We will discuss these issues, consider an example of implementing orchestration on nodejs, and of course we will not forget about logging, monitoring and alerting.
JS Fest 2019/Autumn. Adam Leos. So why do you need to know Algorithms and Dat...JSFestUA
During the presentation, we will consider what advantages a front-end developer will get from knowledge of algorithms and data structures.
We will analyze real-world examples where this knowledge simplified logic and accelerated applications dramatically.
And finally we will understand the most necessary things that will allow us to determine the effectiveness of the code and easily improve it.
JS Fest 2019/Autumn. Marko Letic. Saving the world with JavaScript: A Data Vi...JSFestUA
Did you know that the beginnings of data visualization are strongly tied to solving some of the biggest problems humanity has ever faced? Wouldn’t it be more interesting to say that you’re not a doctor, but you do save lives than to say you’re just a developer?
When talking about data visualization and JavaScript your mind usually goes to D3.js. But if our data has a location-based representation, we are faced with a limited choice. The main topic of this talk is to introduce the audience with deck.gl, an open-source WebGL-powered library developed by Uber that allows us to create beautiful data visualizations of large datasets and raise the level of interactivity for the user on a whole new level. We’ll see how our code can tell a story and how that story can potentially save lives. A short introduction to the library and it’s API will be demonstrated along with practical use-cases, live-code examples and it’s integration with popular frameworks such as Angular and React.
JS Fest 2019/Autumn. Александр Товмач. JAMstackJSFestUA
Вы уже слышали о JAMstack, который пришел на смену SSR и SPA? Подход, который оптимизирует веб приложения так, что они ограничены только скоростью вашего интернет соединения. Никаких просадок при рендере на клиенте, никаких падений серверов от нагрузки, только SEO-friendly приложения без проблем с масштабируемостью.
We'll go through the possible ways to bring technology agnostic microservice architecture to the frontend, review pros/cons of each of them. We also will check the "ultimate solution" that handles microservices with SSR in SPA manner.
This talk will be interesting for ones who have multiple teams working on the same frontend application.
JS Fest 2019/Autumn. Maciej Treder. Angular Schematics - Develop for developersJSFestUA
Say hello to the Angular CLI from new perspective. Get to know what schematics are and how you can use them for your purpose. Make use of ng add, ng update, ng new command and much more. Learn how to create read update and delete files automatically in your project, and how to execute npm tasks such as installing dependencies.
JS Fest 2019/Autumn. Kyle Boss. A Tinder Love Story: Create a Wordpress Blog ...JSFestUA
A woman shares her experience finding love through the dating app Tinder, matching with a man and going on dates that led to a relationship. She provides tips for using Tinder successfully, such as taking time to fill out a profile completely and thoughtfully choosing photos that accurately represent you. While online dating requires an investment of time and effort, it can result in meaningful connections when done with sincerity and an open mind.
JS Fest 2019/Autumn. Андрей Старовойт. Зачем нужен тип "true" в TypeScript?JSFestUA
Литеральные типы в TypeScript, которые появились несколько лет назад, на самом деле произвели мини-революцию в языке, которую многие не заметили. Сегодня сложно представить себе TypeScript без этих типов и механизмов, построеных поверх них: mapped, indexer, keyof types и многие другие. В докладе я расскажу, как и почему литеральные типы появились в TypeScript и какие концепции они привнесли в язык. Поговорим также о том, почему с точки зрения разработчика анализатора TypeScript литеральные типы — это по-настоящему сложная языковая фича. Ну и конечно коснемся вопроса, как это все согласуется с реальным миром, а именно с JavaScript.
JS Fest 2019/Autumn. Eyal Eizenberg. Tipping the ScaleJSFestUA
Times Square is the most visited place globally with about 380,000 pedestrian visitors a day - roughly the same amount of people which go to Wix’s dashboard. Building a page which receives such high traffic requires having great performance and intelligent architecture. In this talk, Eyal will go over the challenges of rebuilding Wix’s dashboard, the architecture and how we got it to load under 1 second.
JS Fest 2019/Autumn. Sota Ohara. Сreate own server less CMS from scratchJSFestUA
We created CMS using React, Google Cloud Storage and Google Cloud Functions from scratch.
I'd like to share the knowledge of how to build serverless CMS from scratch.
JS Fest 2019/Autumn. Джордж Евтушенко. Как стать программистом, которого хотятJSFestUA
Что имеется в виду, когда говорят: "С ним приятно работать"? Бывает и наоборот, когда говорят: "Она классный специалист, но работать с ней я бы не хотел". Приходите послушать как формируется отношение к человеку на основании его профессиональных качеств и сможете унести с собой список конкретных полезных советов на этот счет.
JS Fest 2019/Autumn. Алексей Орленко. Node.js N-API for RustJSFestUA
This document discusses using the N-API in Rust to build native Node.js addons. N-API allows addons to work across Node.js versions without recompiling. The document outlines plans to get started with N-API in Rust, generate bindings from C headers, build a type-safe Rust API, use macros to reduce boilerplate, perform parallel computations, and benchmark performance. Resources are provided for following along with the code examples.
JS Fest 2019/Autumn. Daniel Ostrovsky. Falling in love with decorators ES6/Ty...JSFestUA
Decorators are part of proposal TC39 (stage 2), this means that sooner or later decorators will become a part of the JS. However, there is no need to wait! We can use decorators in JavaScript (with babel) and in TypeScript. Let's see how decorators can extend the functionality of classes and methods in a clean and declarative fashion. And many other things which gives you more flexibility.
JS Fest 2019/Autumn. Андрей Андрийко. Гексагональна архітектура в Nodejs проектіJSFestUA
Ідея гексагональної архітектури полягає в тому, щоб відділити зовнішні взаємодії від бізнес логіки задопомогою так званих портів. Мета - ізолювати центральну логіку вашої програми від зовнішніх залежностей.
Під час виступу хочу поділитися досвідом розробки Nodejs додатку з використанням гексагональної архітектури. Обговоримо підводні камені, з якими можна стикнулися під час розробки, основні перевагами та недолікі архітектури. На прикладі розглянемо, як саме організувати архітектуру в Nodejs середовищі, а також стек технологій, що ми використовували, та підходи до тестування.
JS Fest 2019/Autumn. Борис Могила. Svelte. Почему нам не нужно run-time ядроJSFestUA
Использование различных фреймворков дает нам возможность писать быстрые приложения с минимальными затратами времени. Но за это наши пользователи платят продолжительностью первой загрузки и трафиком. Я расскажу как можно писать быстрые приложения с гораздо меньшим размером исходного кода с той же удобностью.
JS Fest 2019/Autumn. Виталий Кухар. Сравнение кластеризации HTTP, TCP и UDP н...JSFestUA
В этом докладе, я хочу сравнить кластеризацию HTTP, TCP, UDP на процессах и потоках в NodeJS. Оценить производительность и использование ресурсов при разных подходах.
Это будет 6 живых демо взлома. Идея не обсудить сухую теория, а увидеть на практике, как не всегда очевидные ошибки являются источником серьезных уязвимостей в твоем JavScript приложении.
4. PROFESSIONAL JS CONFERENCE 8-9
Системы снабжений, цепи поставок.
Цифровая идентификация.
Здравоохранение.
Токенизация, оцифровка активов.
Голосование.
NOVEMBER ‘19 KYIV, UKRAINE
Области применения блокчейн
9. PROFESSIONAL JS CONFERENCE 8-9 NOVEMBER ‘19 KYIV, UKRAINE
Смарт контракты (Smart contracts)
Код исполняющийся в децентрализованных сетях.
Solidity, C++.
Это как backend сервис.
12. PROFESSIONAL JS CONFERENCE 8-9 NOVEMBER ‘19 KYIV, UKRAINE
JSON RPC
Стандарт обмена данными.
Не зависит от транспортного протокола.
Только один метод для HTTP/S – POST.
Данные в JSON формате.
15. PROFESSIONAL JS CONFERENCE 8-9 NOVEMBER ‘19 KYIV, UKRAINE
JSON ABI
Application binary interface.
Получается при сборке или деплойменте контракта.
Спецификация смарт контракта в формате JSON.
Содержит описание контракта, методов, аргументов
полей и т.д.
16.
17.
18. JSON RPC ЗАПРОС без параметров
fetch("https://ropsten.infura.io/v3/084897e338f14cbea8e0d249105bf", {
method: "POST",
body: JSON.stringify({
params: [{
data: "0x8261cf2b",
to: "0xFB3716816d93168788d306fCEab06636CA44682D"
}, "latest"],
jsonrpc: "2.0",
method: "eth_call", id: 1
})
});
подпись метода
адрес контракта
21. Ethereum JSON RPC запрос с параметром. getHero(10)
fetch("https://ropsten.infura.io/v3/084897e338f14cbea8e0d249105b405f", {
method: "POST",
body: JSON.stringify({
params: [{
data: "0x21d801110000000000000000000000000000000……….a",
to: "0xFB3716816d93168788d306fCEab06636CA44682D"},
"latest"
], jsonrpc: "2.0",
method: "eth_call", id: 1
})
});
подпись метода 10 в шестнадцатеричной системе
Про кучу нулей мы погорим чуть позже
22. Tron JSON RPC запрос с параметром. getHero(10)
fetch("https://api.shasta.trongrid.io/wallet/triggersmartcontract", {
method: "POST",
body: JSON.stringify({
contract_address: "415acf1f5da4df144ebdbe04cc1ac2059b8c3bafc1",
owner_address: "415acf1f5da4df144ebdbe04cc1ac2059b8c3bafc1",
function_selector: "getHero(uint256)",
parameter : "00000000000000000000000000000000000000000...a",
})
});
подпись метода
10 в шестнадцатеричной системе
25. 32 байтные подстроки = 64 символа
0000000000000000000000000000000000000000000000000000000
00000000A – id героя
…
44616e20416272616d6f76000000000000000000000000000000000
000000000 – имя героя
…
000000000000000000000000000000000000000000004a617661536
372697074… - категория героя
31. PROFESSIONAL JS CONFERENCE 8-9 NOVEMBER ‘19 KYIV, UKRAINE
Что могут блокчейн библиотеки ?
Инкапсулировать логику запросов.
Кодировать/декодировать параметры и результаты.
Взаимодействовать с крипто кошельками и расширениями.
Предоставлять информацию о сети и др.
32. Пример работы с Web3JS. Все просто!
import Web3 from 'web3';
import superheroesABI from './build/contracts/Superheroes.json';
const web3 = new Web3();
const myContract = new web3.eth.Contract(
superheroesABI,
https://ropsten.infura.io/v3/084897e338f14cbea8e0d249105b405f’
);
myContract.methods.getSuperHeroes().call();
myContract.methods.getHero(10).call();
34. Пример работы с TronWeb. Все просто!
import * as TronWeb from "tronweb";
const tronweb = new TronWeb({
fullNode: "https://api.shasta.trongrid.io",
solidityNode: 'https://api/somesolidity.io'
});
const contract = await tronweb.contract().at(“412573…..d07dcf0f06f1ac948708”);
contract.getSuperHeroes().call();
contract.getHero(10).call();
36. PROFESSIONAL JS CONFERENCE 8-9 NOVEMBER ‘19 KYIV, UKRAINE
Операции записи в блокчейн. Транзакции
Требуют:
Учётной записи в сети.
Подписи ключом.
Дополнительных расширений - плагинов.
38. PROFESSIONAL JS CONFERENCE 8-9 NOVEMBER ‘19 KYIV, UKRAINE
Функции блокчейн браузерныx расширений.
Хранить информацию о учетных записях и ключах.
Глобальные переменные с учетной информацией.
Взаимодействовать с JavaScript библиотеками.
Подписывать транзакции.
Хранить информацию о крипте и других токенах.
52. Транзакции EOSJS
import { Api } from 'eosjs';
import {JsSignatureProvider} from 'eosjs/dist/eosjs-jssig';
const rpc = new JsonRpc(‘https://jungle2.cryptolions.io‘, {fetch});
const signatureProvider = new JsSignatureProvider([‘somekey’]);
const api = new Api({
rpc,
signatureProvider,
textDecoder: new TextDecoder(),
textEncoder: new TextEncoder()
});
54. PROFESSIONAL JS CONFERENCE 8-9 NOVEMBER ‘19 KYIV, UKRAINE
DApp сети очень похожи
Ethereum Tron EOS
✅ Smart contracts
✅ JSON ABI
✅ JSON RPC
✅ JS API, Web3JS
✅ Smart contracts
✅ JSON ABI
✅ JSON RPC
✅ JS API, TronWeb
✅ Smart contracts
✅ JSON ABI
✅ JSON RPC
✅ JS API, EOSJS
55. PROFESSIONAL JS CONFERENCE 8-9 NOVEMBER ‘19 KYIV, UKRAINE
Важные моменты в блокчейн сетях.
Возвращаемые значения
Solidity в текущей версии не поддерживает объекты
56. PROFESSIONAL JS CONFERENCE 8-9 NOVEMBER ‘19 KYIV, UKRAINE
Важные моменты в блокчейн сетях.
Кодирование/декодирование данных
Из шестнадцатеричного/base64/base32.
В десятичный, строковый.
57. PROFESSIONAL JS CONFERENCE 8-9 NOVEMBER ‘19 KYIV, UKRAINE
Важные моменты в блокчейн сетях.
Большие числа:
Максимальное значение числа в JavaScript : 253-1.
Максимальное значение числа uint256 в EVM : 2256-1.
Решаемо с bignumber.js
58. PROFESSIONAL JS CONFERENCE 8-9 NOVEMBER ‘19 KYIV, UKRAINE
Важные моменты в блокчейн сетях.
Подпись транзакций (операций записи).
С помощью MetaMask, TronLink, EOSAuthenticator.
Скорость выполнения транзакций в Ethereum.
59. PROFESSIONAL JS CONFERENCE 8-9 NOVEMBER ‘19 KYIV, UKRAINE
Ресурсы
Обучение:
https://cryptozombies.io/
https://battles.eos.io/
Демки:
https://github.com/DmitriyNoa/angular-ethereum-decentralized-application
https://github.com/DmitriyNoa/eos-superheroes
Добрый вечер ) Какой классный фестиваль! Интересные темы, Отличные докладчики и супер аудитория!
-Очень рад видеть столько людей пришедших сюда, несмотря на то что это окончание второго дня Феста, спасибо что присоединились ко мне.
-Сегодня я бы хотел поговорить о, сюрприз сюрприз – JavaScript, но не в совсем обычном контексте – а именно в контексте Блокчейн.
-Посмотреть на Блокчейн со стороны JavaScript, фронтенд разработчика.
-Понять как Блокчейн и децентрализованные сети отличаются от традиционных бэкендов к которым мы все привыкли, таких как REST или GraphQL.-
-Разобраться в особенностях обмена данными, построении и отправки запросов,
-Показать доступные инструменты и библиотеки
Наверное большинство из вас слышало про Блокчейн и не раз. То слышал? А кто сталкивался на работе?
В последнее время о нем говорили все кому не лень;
в соц сетях, мас медиа,люди технические а так же очень далекие от техники.
-Но на самом деле почти все они говорили – о крипто валютах.
-А это только маленький частый случай использования Блокчейн.
-Сегодня мы не будем говорить а крипто валютах. А посмотрим на реальные возможности блокчейн в других областях жизни и промышленности.
Что такое блокчен? В упрощенной форме это сеть компьютеров объединённых общим программным обеспечением и консенсус алгоритмом – алгоритмом который позволяет валидировать, проверять обработку данных и гарантировать безопасность. прозрачность и подлинность дынных.
Отсутствие единого сервера и единого владельца и делает технологию привлекательной в процессах с множеством участников, которым необходимы прозрачность, безопасность.
На пример.
Цепи снабжения или поставок.
Товар проходит множество этапов пока доберётся от поставщика до потребителя. Это и доставка от фабрики к транспортеру – перевозчику авиа или судопевозки.
Потом хранения на складе, перевозка мастными фирмами доставки. И тд.
Все эти процессы могут осуществляться разными фирмами и должны быть отслуживаемыми и задокументированными.
Цифровая идентификация – как еже паспорт с вашими данными. Это и ваша уникальная цифровая подпись. Которая позволит работать и официально подписывать электронные документы.
Здравоохранения – ваша единая мед карточка. Централизованное место для хранения информации и вас и вашем здравье, которая будет храниться в зашифрованном виде. Сейчас чаще всего приходиться бегать со всякими бумажками, справками и физическими карточками что не удобно и не эффективно.
Токенизация это репрезентация физических активов в цифровом виде, подтверждение владения, на пример права на драгоценные металлы, предметы искусства, недвижимость.
Ну и имея уникальную идентификацию как рассказано выше – мы можем безопасно голосовать.
Эти сферы применения уже отражают крупные компании которые внедряют блокчейн в свои системы,
Что бы сделать разговор более предметны, практическим и интересным я приготовил демо приложение - Система отзывов и обзоров супергероев.
Снова таки – мы хотим что бы данные и отзывы были честными и не поддельными, на пример сторонней компанией – потому блокчейн как раз то что нужно.
Приложение позволяет просматривать список супергероев. Фильтровать по категории-вселенной, Марвел, ДиСм ну и JavaScript,так как в нем то же есть свои герои
Переходить на детальную страницу о герое. Просматривать подробную информацию и оставлять отзывы.
Приложения работающие с блокчейн называются децентрализованные приложения.
Рецепт в целом прост – берем SPA, Single Page application (React или Angular) ан пример.
Добавляем к нему Смарт контракт (Умный контракт)
И получаем децентрализованное приложение – Decentralized application ну или просто dApp
-Смарт контракт это код который исполняется в сети блокчейн.
-Результаты и факт выполнения этого кода будет сохранен для всех участников сети, на всех узлах.
-Чаше всего это код программа написанная на языке Solidity (проприоретарный язык) написанный сп-ециально для блокчейн сетей.
-Или написанный на С++.
-Я люблю воспринимать Смарт контракты как особенный и не стандартный бэкенд сервис.
Мы посмотрим на 3 самые распространенные сети для разработки децентрализованных приложений . Эфир, Трон, и EOS.
Эфир и трон очень похожи: потому я сначала покажу их и потом мы поговорим про EOS.
-Пример архитектуры распределенного приложения. Для сети Эфир И Трон
У нас есть пользователь, который запрашивает веб страницу. И это простая веб страница которая размещена на обычном хостинге или в облачном хранилище, как AWS или GoogleCloud.
-Страница делает запрос на нод (узел в сети).
-Запросы производиться на основе JSON RPC.
-Каждый узел или компьютер в сети хранит копию контракта
-На узле запущенная Виртуальная машина Эфира – EVM, Ethereum Virtual Machine которая выполняет код смарт контракта, Он так же имеет сетевую надстройка которая позволяет совершать JSON RPC запросы. Так же видно что ноды постоянно синхронизируются между собой по P2P соединению без участия центрального сервера
-Что такое RPC ли JSON RPC?
-Кто ни будь сталкивался или работал с RPC сервисами?-
RPC это описание того как две удаленные программы могут обмениваться данными с друг другом (к примеру программа на сервере и на клиента).
Он не зависит транспортного протокола. То есть может применяться в HTTP на пример, веб сокетах, P2P соединениях.
В случае HTTP – используется только один метод – POST и для отправки и для получения данных.
Ну и использует данные в формате JSON.
Запрос для RPC сервиса может выглядеть следующим образом. Скажем мы хотим получить список героев.
Мы отправляем, всегда!, POST запрос, и это очень странно, Потому что обычно если мы получить данные то почти всегда выполняем GET.
Далее в теле запроса мы передаем имя метода или функции которую хотим вызвать на сервере и если нужно какие то дополнительные параметры.
И вроде все понятно. Да?
Но не в случае с блокчейн.
Тут я делаю запрос на узел эфира. Ropsten это тестовая сеть эфира.
И в теле запроса я передаю не человеко понятные значения data и to.
Единственно что более менее понятно – свойство метод. ETH_CALL.
Этим я говорю – ей виртуальная машина Эфира – выполни такой то метод и используй параметры выше.
Но вопрос откуда мы возьмем этот ужас, свойства data и to?
Ответ из JSON ABI.
Расшифруется как Application binary interface.
Это JSON файлик который получается при деплойменте или сборке контракта.
Фактически это спецификация контракта в формате JSON – которая говорит как работать с контрактом, это как Swagger спецификация для REST сервисов.
Содержит описание методов, их параметров, возвращаемых значений и т.д.
Выглядит это примерно вот так:
У нас есть – название контракта – Superheroes.
Свойство abi – которое содержит массив со всей нужной и главной для нас информацией,
Так же поле адрес – это уникальный адрес данного контракта в сети блокчейн, как URL для сервисов.
Заглянем внутрь одного из методов в массиве ABI.
У нас есть имя метода. Get super heroes
Полу inputs – это параметры метода. В данном случае поле пустое – потому что мы просто получаем список всех героев.
Поле outputs это описание возвращаемых значений и их типов. У нас есть ID героя, тип unsigned integer 256, имя героя – строка.
Поле signature – ID укороченное имя или подпись метода.
Теперь у нас есть вся информация что бы сделать запрос для получения списка героев.
Свойство data – содержит подптсь метода.
И поле to – адрес контракта
Это был запрос без параметра. Но что если нам нужно вызвать метод с параметрами?
На пример – страница героя. Мы делаем запрос по его имени или скажем ID?
В этот раз если обратиться к ABI.
Снова видим название метода – getHero, получить героя.
Поле inputs более не пустое. Метод принимает параметр ID - целочисленное значение.
И подпись метода
Скажем мы хотим получить героя с ID 10.
Эфир запрос выглядит так.
В свойство data так же как и в прошлый раз мы передаем подпись метода и далее соединяем ее числом 10 в шестнадцатеричном формате. 10 в шестнадцатеричном формате – это – A.
Про кучу нулей перед A мы поговорим чуть позже
Для сети Трона все примерно одинокого.
Только сигнатура метода не кодируется – а передается просто строкой.
И параметр передаётся в отдельном поле
И эти запросы вернут нам ЭТО. И на первый взгляд это совсем полное безобразие.
Мне напомнило код матрицы!
Но в отличие от героев фильма матрица нам не нужно смотреть на это часами что бы увидеть «девушку в красном» и понять смысл.
Мы можем обратиться к документации Эфира.
Эфир разбивает информацию на 32 байтные пакеты. 32 байта вмешают – 64 строчных символа.
Все храниться в шестнадцатеричном виде.
И если мы разобьем строку на подстроки по 64 символа. Ситуация немного проясняется. Тут видно ID героя – A. A это 10 в десятичном формате.
Имя героя.
Категория.
Нули впереди или позади значений это пустые байты.
Для того что бы декодировать строку – нужно воспользоваться таблицами ASCII.
ASCII это таблицы которые помогают конвертировать значения между форматами.
Обычно у каждого символа у каждой буквы есть свой 2 значений код.
На пример английская A – 41
Английская С – 43 тд
Зная про таблицы мы можем написать следующий метод
Он принимает шестнадцатеричную строку.
Далее необходим пройти в цикле по строке: через каждые два символа (символы в ASCII – двухзначные значения).
С parse Int переводим текущие 2 шестнадцатеричных символа в десятичное значение кода (совместимое с JS)
И далее используем метод fromCharCode который вернет нам значение ASCII символа в unicode формате
В случае с числами все просто – мы можем использовать parseInt который вернет число в десятичном виде.
Фууух. Это было много всего! Я надеюсь вы все ещё со мной! И не сильно заскучали? Это моя дочь кстати, никогда не дает мне скучать. Дальше будет веселее!
К счастью мы в мире JavaScript где для всего есть библиотеки и блокчейн не исключение.
Эфир имеет чудесную библиотеку Web3JS и Трон идет со своей библиотекой, близнецом Web3 - TronWeb
Что умеют библиотеки?
Значительно упростить и инкапсулировать логику запросов.
Кодировать и декодировать данные и параметры из шестнадцатеричного в десятичный и обратно
Взаимодействовать с криптокашельками и бразуреными расширениями. О них чуть позже
Предоставлять другую информацию о сети.
Пример работы с Web3JS! Все очень просто!
Web3 позволяет превратить ABI файл в объект с вызываемыми методами.
Импортируем Web3JS
Импортируем JSON файлик с ABI. Тут поможет Webpack.
Создаем новый экземпляр Web3
Создам экземпляр контракта. Передаем в него адрес узла. И объект с ABI,
И в итоге теперь мы можем вызывать методы просто в одну строку.
Метод getSuperheroes подговорит правильный запрос.
Долее мы вызываем метод call который выполнить запрос и вернет стандартный JavaScript Promise с декодированными и читабельными результатами!
Запрос с параметром – все так же просто; Просто передаем параметр в обычном вид и Web3JS сделает всю нужную кодировку сам!
Магия!
С TronWeb - ситуация еще проще.
Нам нужно знать только адрес контракта и адрес узла-сервера.
Мы так же импортируем TronWeb
Создаем экземпляр TronWeb и передаем в него адрес – URL нода.
Вызываем функцию контракт и передаем ей адрес контракта. TronWeb вcе сделает сам. Получит ABI и трансформирует его в объект.
И снова мы можем вызывать методы в одну строку, Все будет сделано за нас под капотом!
Но тут вы можете заметить! Это же все были примеры запросов чтения. Мы ничего не записывали! Как на счет записи в блокчейн?
И будете правы! Операции записи в блокчейн – обычно называемыми транзакциями – это отдельный случай!
Потому как они требуют!
Учетной записи в сети!
Подписи транзакции ключом!
Дополнительных расширений или плагинов!
Фактически все блокчейн сети имеют свои уже готовые браузерные расширения!
Для Эфира – это MetaMask и для Трона это TronLink
Эти расширения позволяют:
Создавать учетные записи в сети и хранить о них информацию. Учетная запись в сети это комбинация из публичного и приватного ключей.
Инжектить в браузеры глобальную переменную с информацией о сети и записи.
Взаимодействовать с JS библиотеками.
Подписывать транзакции
Хранить информацию и крипте и других токенах! То есть еще выполнять функцию кошелька !
Транзакция с Web3JS и MetaMask для Эфира
Выглядит так.
Мы так же само используем Web3JS для получения объекта из ABI, как в примере ранее,
И просто вызываем метод addHero и передаем в него данные героя. В обычном формате.
В конце вызываем метод send (если помните для операций чтения ранее это был метод call) и он принимает адрес пользователя.
Адрес пользователя доступен в Глобальной переменной предоставленной расширением MetaMask
Ситуация с TronWeb – снова похожа.
На полученом ранее объекте – вызываем метод addHero. Передаем в него дынные!
И зовем метод send!
Выглядит это примерно так.
Когда пользователь заполняет данные и жмет подтвердить. Мы вызываем код показанный на прошлом слайде.
Браузерный плагин слушает когда происходит вызов функции send и предлагает подписать транзакцию!
Тут так же видно что транзакция не бесплатна и в большинстве случаем ложиться на плечи пользователя. В данном случае это стоит 4 десятитысячные эфира что по текущему курсу примерно – 7 центов.
Дальше транзакция отправляться на выполнение и это может занять время.
И в случае с Эфиром это может быть долго. Что бы вы понимали в Главной сети Эфира. Mainnet , в зависимости от нагрузки на сеть транзакция может выполнять минуту и больше. Даже в тест сети у меня в среднем время транзакции было около 30 секунд.
Естественно мучать пользователя показывая ему бесконечный индикатор загрузки не очень хорошая практика.
Для того что бы сделать это взаимодействие лучше и предоставить возможность получать обновления данных как только они становятся доступные Эфир – предоставляет События.
События в эфире работают на основе веб сокетов. Это позволяет осуществлять двухстороннюю связь между клиентским приложениям и Смарт Контактом или между контрактами. То есть клиент может подписываться на серверные события и получать обновления.
На пример как только создаться новый герой или поступает новый отзыв о герое – мы хотим сообщить об это пользователю или отобразить это в UI приложения.
Для реализации этого непобедимо,
Создать новый сокет с адресом Узла в сети. Тем самым мы открываем WSS соединения.
Когда соединение открыто – нужно подписаться на событие которое нас интересует.
Снова формируем JSON RPC запрос. В качестве вызываемого метода на эфире теперь ETH_SUBSCIBE.
Имя события которое нас интересует передаётся в свойстве TOPICS. Значение мы снова таки берем из JSON ABI файла
И дальше нужно просто отправить подписку на сервер.
После этого мы можем слушать событие message на вебсокете.
Данные приходят в шестнадцатеричном формате как и ранее и вот пример того как их можно расшифровать с помощью Web3JS.
Вызываем метод Web3JS decodeLog и передаем в него полученные данные а так же описание события из ABI файла
Но Web3JS делает процесс ещё проще.
Так как и ранее мы можем сформировать объект из ABI файла.И на нем будут доступные для вызова функции подписи на события.
На пример NewHero формирует подпись на событие и возвращает объект с методом ON c параметром data и callllback функцией.
Web3 сделает все за нас. Откроет веб сокет соединение. Подпишется на события и декодирует результаты.
Tron работает на много быстрее и события не так важны.
Пришло время поговорить об EOS.
EOS2.0 – новейшее поколение блокчейн разработанное с мыслью о разработчиках. И это делает работу с сетью на много приятней и проще.
EOS так же выдает JSON ABI с описанием Смарт контакта. В принципе все похоже. Есть описание функций контракта. Они называться actions.
Описание структур – таких как доступные форматы данных, публичные переменные и тд.
Но самое интересное – это таблицы!
Таблицы позволяют эффективно управлять данными.
С стороны frontend разработчика наиболее интересно как мы можем делать запросы.
Данный пример показывает некоторые возможности. Это C++ код, ну пугайтесь. Главная идея тут что мы можем получать отзывы не только по основному ключу как на пример ID но и по вторичным ключам.
На пример я хочу получить все отзывы по определённому герою и таблицы позволяют это сделать.
Ключь By_superhero_id - вернет все отзывы для героя.
К примеру зарос за списком героев выглядит следующим образом.
Запрашиваем get_table_rows на узле EOS.
В теле запроса есть волшебное свойство json со значением true – это дает нам возможность прилучить данные уже в декодированном виде, бекенд сделает все за нас.
Свойства CODE и SCOPE указывают название смартконтракта в сети
И в свойстве table – передаём название таблицы. И ётот запрос вернет нам данные в читабильном виде. Массив с объектами героев.
Никакой мороки стороны кода!
Вот пример более сложного запроса, За отзывами по определенному герою.
Снова указываем название таблицы – reviews.
Название ключа – superhero_id
Указываем что запрос идет по вторичному ключу.
И передаем ID героя в upper и lower bound. В данном случае они одинаковые так как нам нужны отзывы по одному герою. Но так же можно указать промежуток значений. От и до
EOS так же предоставляет JavaScript библиотеку EOSJS.
В случае с простыми запросами чтения она не много упрощает работу.
Импортируем JsonRpc из EOSJS
Создаем экхемпляр JSON RPC и передаем в него URL узла в сети а так же класс для работы с запросами. С браузере нам достепн fetch
И вызываем метод get table rows и передаем в него данные для запроса точно так же как и случае с работы с обычным fetch
Транзакции в EOS более гибкие. Так как позволяют выбирать кто будет подписывать транзакции, Если в случае Эфира или Трона это пользователь, то в EOS можно переложить на владельцев контракта. И для пользователя в таком случае это будет скрыто.
Это позволяет сделать Signature provider.Где вы можете указать подписчика.
После мы создаем Экземпляр класса API. Предаем в него объект RPC созданный выше, подписчика а так же коддер и декодер для данных. ПО умолчанию это нативные JavaScript TextDecoder и TextEncoder
После этого остается выполняить транзакцию.
EOS позволяет выполнять пакеты транзакций. Можно передавать не одну а сразу много в массива actions.
Свойство name принимает название метода которое нужно выполнить – addHero добавить героя.
И в data передаем необходимые данные.EOS работает очень быстро. Сравнимо с классическими бекенд сервисами.
Как мы могли убедиться – все они позволяют выполнять полезные действия с помощью Смарт Контрактов
В всех есть JSON ABI – спецификация Контрактов, которая описывает доступные метода, свойства, типы данных в контракте.
Вся связь, обмен данными происходит на JSON RPC. С единственным HTTP методом POST
Ну и конечно для упрощения жизни – для всех доступны библиотеки. Которые я рекомендую использовать на production
Некоторые важные моменты.
Эфир и Трон на данный момент используют версию Solidity которая не поддерживает объекты.
Это значит что даже при использовании библиотект данные вернуться в виде массива,
Как на примере героя видно что мы получаем массив элементов. На Javascript мы можем использовать destructuring assignment для присвоения этих значений переменным.
Если запрос был за списком героев к примеру – то вы получите массив массивов.
В своем примере я использовал Экспериментальную версию компайлера Solidity которая позволяет вернуть нормальные объекты, Но к созданию она пока не рекомендована для production.
Как мы видели ранее - для Сетей Эфира и Трона данные нужно кодировать/декодировать между различными форматами.
Больщую чатсь работы на себя берут конечно Библиотеки – но важно понимать что этот факт имеет место быть.
Еще одна особенность – это разница в числах.
Solidity к примеру имеет намного болоьщие максимальные значения для целых чисел.
Если для JavaScript максимальное значение числа – это 2 в 53 степени – 1
То для Solidity – это 2 в степени 256 – 1 что значитительно так больше. Естесвенно если передать такое число в JavaScript то ничего зорошего не выйдет.
Если вам нужно произодить какие то действия с такими числами на фроненде – то есть отличная библиотека BigNuberJS. Но лучще конечно перенести все логику рабьоты с числами на СмартКонтракт.
Ну и операции записи – или транзакции Требуют наличия дополнительных инструментов- таких как бразузерные плагины для подлписи транзакций
Скорость выполнения транзакций в сети Эфир на данный момент оставляет желать лучшего. Ethereum foundation работает над этим и в скором времени обезает релиз Ethereum2.0 с новым консенсус алгоритмом который значительно увеличит скорость выполнения транцакий.
На этом фактически все.
Вот некоторые ресурсы которые вы можете использовать для обучения.
Рекомендую КриптоЗобмби – это портал кторый позволяет обучиться основам работы с Ehtereum и Solidity в игровой форме, через содание игры.
BattlesEOS сзодий портал но только для EOS
А так же демо приложения показанные сегодня. Для всех 3 сетей
На этом у меня все! Спасибо за внимание – вы супер аудитория.