Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)

217 views

Published on

В последнее время тема пиринговых технологий становится очень популярной. Уже не первый день работают такие проекты как криптовалюта Bitcoin, микроблоги Twister и мессенджер Tox. Теперь дошло дело и до децентрализованного веба.

Доклад посвящен новому open-source проекту — base.network — распределенному независимому пиринговому вебу. Расскажу про общую схему работы сети, немного о работе с криптографией на JavaScript, о создании приложений на JavaScript без использования центральных серверов.

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)

  1. 1. Пиринговый веб на JavaScript Денис Глазков 1
  2. 2. - обзор пиринговых сетей - устройство сети base.network - серверные ноды - криптография на JS - устройство клиента - разработка клиентских приложений Содержание 2
  3. 3. Закрыли любимую группу в соц. сетях? 3
  4. 4. Великий Китайский Фаервол 4
  5. 5. 5
  6. 6. 6
  7. 7. 7
  8. 8. Цензура в Интернете 8
  9. 9. Пиринговые технологии ethereum 9
  10. 10. Одноранговые сети 10
  11. 11. Мир во всех Мирах! 11
  12. 12. Прекрасное жестоко, не будь ко мне далёко 12
  13. 13. 13
  14. 14. Социальная сеть Земля-Марс ? 14
  15. 15. 15 I2P
  16. 16. Freenet 16
  17. 17. 17
  18. 18. Минусы существующих пиринговых сетей - не умеют работать с динамикой - медленные - установка “мутного” клиентского ПО - страдают “централизацией” 18
  19. 19. base.network О проекте • опенсоурс проект на JavaScript • децентрализованная сеть • без DNS, без центральных серверов • поверх HTTP 19
  20. 20. base.network Возможности • собственные сайты, доменные имена • загрузка и чтение файлов, json-данных • блоги, комменты, фотоальбомы, плейлисты • чаты в реальном времени 20
  21. 21. Устройство сети NodeJS IP:port NodeJS IP:port NodeJS IP:port NodeJS IP:port NodeJS IP:port NodeJS IP:port client JavaScript client JavaScript client JavaScript client JavaScript client JavaScript NodeJS IP:port data: A B C 21
  22. 22. Серверная нода Веб-сервер + БД (NodeJS, SQLite3) Простой и быстрый KeyValue Storage Функции: - сообщает о себе другим нодам - пишет данные в распределенную базу - проверяет валидность данных (подпись автора) - реплицирует данные между нодами - уведомляет о добавлении данных 22
  23. 23. Карта сети - список всех нод curl http://5.9.123.140:8080/-/nodes { "nid":"5.9.123.140/8080", "ver"1, "seg":"D,N,F,P,D0,D1,……" } { "nid":"46.4.76.98/8081", "ver"1, "seg":"……F41,F54,P04" } 23
  24. 24. Информация о ноде curl http://5.9.123.140:8080/-/about { "ver":1, "nid":"5.9.123.140/8080", "updated":1441639911027, "segments":{ "D":{"usage":0.2}, "N":{"usage":0.5}, "F":{"usage":0.3}, … } } 24
  25. 25. https://github.com/basenetwork/base.server-node/ Git Серверная нода NodeJS 25
  26. 26. • sign(data, privateKey) • verify(data, sign, publicKey) • encrypt(data, publicKey) • decrypt(data, privateKey) Криптография на JavaScript - Эллиптические кривые secp256k1 - Длина ключа 256 бит (32 байта) - Минимальный набор функций: 26
  27. 27. Криптография на JavaScript библиотеки CryptoJS v3.1.2 code.google.com/p/crypto-js (c) Tom Wu http://www-cs-students.stanford.edu/~tjw/jsbn/ jsrsasign 4.8.3 (c) 2010-2015 Kenji Urushima kjur.github.com/jsrsasign/license 27
  28. 28. Клиент 28
  29. 29. 29
  30. 30. 30
  31. 31. Под капотом 31
  32. 32. 32
  33. 33. 33
  34. 34. 34
  35. 35. Разработка клиентского приложения //============ MySiteEngine.js ================= var baseAPI = basenetwork.getAPI(0); // request current site information var siteInfo = baseAPI.getCurrentSiteInfo(); // -> {host,owner,title,ring…} 35
  36. 36. Файлы. Пользователи // upload file to cloud baseAPI.uploadFile(fileReader, function(err){ }); // request file from cloud var fileID = "F2/d8f08dd1564510b0f...e2aaf1e22ec2a1.jpeg"; baseAPI.requestFile(fileID, function(err, content, info){ }); // get user info by public certificate baseAPI.getUserInfo(certificate, function(err, userInfo){ }); 36
  37. 37. 37
  38. 38. Добавление данных в канал var channel = siteInfo.host + "/super-chat/"; var data = { message: "Bla-bla-bla" }; // post data to cloud baseAPI.postData({ uid: channel, data: data, ver: 0, pos: "2016-02-25 19:00:00” }, function(err, resp) { // process results console.log(err? "Error" : "OK"); }); 38
  39. 39. Получение списка данных из канала var request = { cmd: "top", // "top|nxt|prv|doc|old" uid: channel, // address of channel sse: true // listen server side events }; baseAPI.requestData(request, function(err, packs) { // process data packs.forEach(function(pack) { // render messages console.log(pack.data.message) }); }); 39
  40. 40. https://github.com/basenetwork/client-js/ Git Клиентское ядро 40
  41. 41. https://github.com/basenetwork/site-engiene-js/ Git Сайтовый движок 41
  42. 42. React.JS Chat // Components/Chat.jsx //======= New Message Form ============= var MessageNew = $class(Form, { render: function() { return ( <form onSubmit={this.submit} className="chat-message-new"> {this.$input("message", {placeholder: "New message”})} <button type="submit">Add message</button> </form> ); } }); 42
  43. 43. React.JS Chat //============ Components/Chat.jsx Message ================= var Message = $component("chat-message", { render: function() { return( <div className="chat-message"> <UserIcon user={this.props.element.author} /> <UserName user={this.props.element.author} /> <p>{this.props.element.get("message")}</p> </div> ); } }); 43
  44. 44. React.JS Chat //====== Register Chat Component ========== $component('chat', Page, { tplChildForm: MessageNew, tplChildItem: Message }); 44
  45. 45. 45
  46. 46. • http://base.network/ • https://github.com/basenetwork Ссылки 46
  47. 47. Перспективы развития WebRTC Client IndexedDB Client IndexedDB Proxy server - Нативная криптография через window.crypto - WebRTC, IndexedDB - Расширение функционала сайтового движка - Приватные чаты 47
  48. 48. base.network Пиринговый веб на JavaScript Денис Глазков 2016 Вопросы? 48

×