"Пиринговый веб на javascript"

45
1

Upload: fdconf

Post on 07-Jan-2017

7.394 views

Category:

Education


0 download

TRANSCRIPT

Page 1: "Пиринговый веб на JavaScript"

1

Page 2: "Пиринговый веб на JavaScript"

- обзор пиринговых сетей - устройство сети base.network - серверные ноды - криптография на JS - устройство клиента - разработка клиентских приложений

2

Содержание

Page 3: "Пиринговый веб на JavaScript"

3

Закрыли любимую группу в соц сетях?

Page 4: "Пиринговый веб на JavaScript"

4

Великий Китайский Фаервол

Page 5: "Пиринговый веб на JavaScript"

5

Page 6: "Пиринговый веб на JavaScript"

6

Page 7: "Пиринговый веб на JavaScript"

7

Цензура в Интернете

Page 8: "Пиринговый веб на JavaScript"

Пиринговые технологии

8

ethereum

Page 9: "Пиринговый веб на JavaScript"

9

Одноранговые сети

Page 10: "Пиринговый веб на JavaScript"

10

Page 11: "Пиринговый веб на JavaScript"

11

Page 12: "Пиринговый веб на JavaScript"

12

Социальная сеть Земля-Марс ?

Page 13: "Пиринговый веб на JavaScript"

13

Page 14: "Пиринговый веб на JavaScript"

14

Freenet

Page 15: "Пиринговый веб на JavaScript"

15

Page 16: "Пиринговый веб на JavaScript"

Минусы существующих пиринговых сетей

- ну умеют работать с динамикой - медленные - установка “мутного” клиентского ПО - страдают “централизацией”

16

Page 17: "Пиринговый веб на JavaScript"

О проекте

• опенсоурс проект на JavaScript

• децентрализованная сеть

• без DNS, без центральных серверов

• поверх HTTP

Возможности

• собственные сайты, доменные имена

• загрузка и чтение файлов, json-данных

• блоги, комменты, фотоальбомы, плейлисты

• чаты в реальном времени

17

Page 18: "Пиринговый веб на JavaScript"

Устройство сети

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

18

Page 19: "Пиринговый веб на JavaScript"

Серверная нода

Веб-сервер + БД (NodeJS, SQLite3) Простой и быстрый KeyValue Storage

Функции:

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

19

Page 20: "Пиринговый веб на JavaScript"

Карта сети - список всех нод

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" }

20

Page 21: "Пиринговый веб на JavaScript"

Информация о ноде

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}, … } }

21

Page 22: "Пиринговый веб на JavaScript"

• https://github.com/basenetwork/base.server-node/

Git Серверная нода

NodeJS

22

Page 23: "Пиринговый веб на JavaScript"

• sign(data, privateKey) • verify(data, sign, publicKey)

• encrypt(data, publicKey) • decrypt(data, privateKey)

Криптография на JavaScript

- Эллиптические кривые secp256k1

- Длина ключа 256 бит (32 байта)

- Минимальные функции:

23

Page 24: "Пиринговый веб на JavaScript"

Криптография на 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

24

Page 25: "Пиринговый веб на JavaScript"

Клиент

25

Page 26: "Пиринговый веб на JavaScript"

26

Page 27: "Пиринговый веб на JavaScript"

27

Page 28: "Пиринговый веб на JavaScript"

Под капотом

28

Page 29: "Пиринговый веб на JavaScript"

29

Page 30: "Пиринговый веб на JavaScript"

30

Page 31: "Пиринговый веб на JavaScript"

31

Page 32: "Пиринговый веб на JavaScript"

Разработка клиентского приложения

//============ MySiteEngine.js =================var baseAPI = basenetwork.getAPI(0);

// request current site informationvar siteInfo = baseAPI.getCurrentSiteInfo();

// -> {host,owner,title,ring…}

32

Page 33: "Пиринговый веб на JavaScript"

Файлы. Пользователи

// upload file to cloudbaseAPI.uploadFile(fileReader, function(err){});// request file from cloudvar fileID = "F2/d8f08dd1564510b0f...e2aaf1e22ec2a1.jpeg"; baseAPI.requestFile(fileID, function(err, content, info){});// get user info by public certificatebaseAPI.getUserInfo(certificate, function(err, userInfo){});

33

Page 34: "Пиринговый веб на JavaScript"

34

Page 35: "Пиринговый веб на JavaScript"

Добавление данных в канал

var channel = siteInfo.host + "/super-chat/"; var data = { message: "Bla-bla-bla"}; // post data to cloudbaseAPI.postData({

uid: channel, data: data, ver: 0, pos: "2016-02-25 19:00:00” }, function(err, resp) { // process results console.log(err? "Error" : "OK");});

35

Page 36: "Пиринговый веб на JavaScript"

Получение списка данных из канала

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) });});

36

Page 37: "Пиринговый веб на JavaScript"

• https://github.com/basenetwork/client-js/

Git Клиентское ядро

37

Page 38: "Пиринговый веб на JavaScript"

• https://github.com/basenetwork/site-engiene-js/

Git Сайтовый движок

38

Page 39: "Пиринговый веб на JavaScript"

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> ); }

});

39

Page 40: "Пиринговый веб на JavaScript"

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> ); } });

40

Page 41: "Пиринговый веб на JavaScript"

React.JS Chat

//====== Register Chat Component ========== $component('chat', Page, { tplChildForm: MessageNew,

tplChildItem: Message

});

41

Page 42: "Пиринговый веб на JavaScript"

42

Page 43: "Пиринговый веб на JavaScript"

• http://base.network/

• https://github.com/basenetwork

Ссылки

43

Page 44: "Пиринговый веб на JavaScript"

Перспективы развития

WebRTC

Client

IndexedDB

Client

IndexedDB

Proxy server

- Нативная криптография через window.crypto - WebRTC, IndexedDB - Расширение функционала сайтового движка - Приватные чаты

44

Page 45: "Пиринговый веб на JavaScript"

base.network Пиринговый веб на JavaScript

Денис Глазков 2016

Вопросы?

45