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

48
Пиринговый веб на JavaScript Денис Глазков

Upload: ontico

Post on 06-Jan-2017

82 views

Category:

Engineering


1 download

TRANSCRIPT

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

Пиринговый вебна JavaScriptДенис Глазков

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

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

Содержание

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

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

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

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

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

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

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

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

ethereum

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

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

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

Мир во всех Мирах!

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

Прекрасное жестоко, не будь ко мне далёко

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

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

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

I2P

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

Freenet

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

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

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

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

base.networkО проекте

• опенсоурс проект на JavaScript• децентрализованная сеть • без DNS, без центральных

серверов • поверх HTTP

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

base.network

Возможности

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

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

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

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

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

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

NodeJSIP:port

NodeJSIP:port

NodeJSIP:port

NodeJSIP:port

NodeJSIP:port

NodeJSIP:port

clientJavaScript

clientJavaScript

clientJavaScript

clientJavaScript

clientJavaScript

NodeJSIP:port

data: A B C

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

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

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

автора)- реплицирует данные между нодами- уведомляет о добавлении данных

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

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

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

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

Информация о ноде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}, … }}

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

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

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

NodeJS

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

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

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

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

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

- Длина ключа 256 бит (32 байта) - Минимальный набор функций:

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

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

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

Клиент

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

Под капотом

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

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

//============ MySiteEngine.js =================

var baseAPI = basenetwork.getAPI(0);

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

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

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

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

// 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){

});

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

Добавление данных в канал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");

});

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

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

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

});

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

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

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

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

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

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

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

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

});

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

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

});

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

React.JS Chat

//====== Register Chat Component ==========

$component('chat', Page, {

tplChildForm: MessageNew,

tplChildItem: Message

});

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

• http://base.network/• https://github.com/basenetwork

Ссылки

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

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

WebRTC

Client

IndexedDB

Client

IndexedDB

Proxy server

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

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

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

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

Вопросы?