Pages:
Author

Topic: Одноранговая сеть на базе WebRTC - page 2. (Read 489 times)

member
Activity: 126
Merit: 23

Вообще-то у меня есть мечта: сделать полностью независимый ни от кого обменник. Первое, что для этого нужно - создание надежной p2p сети, доступ к которой сможет в два клика поиметь любая домохозяйка.

Я себе представляю такую сеть как статичный html файл на рабочем столе пользователя.
Файл открывается в браузере, браузер подключается ...

браузер подключается к эфиру, например через метамаск, и с помощью
Dapp на js вызывает смарт контракт твоего обменника.
Авторизация через счет в блокчейне эфира, безопасно через метамаск.
При желании, можно сунуть туда и эскроу для всего что ERC20 держит.
Единственный минус - за объявки и коммуникацию платить газом надо.

Хотя - можно тупо на и на ропстене поставить, если там чисто
обмен сообщениями.
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
Для WebRTC много чего уже написано, так что если у кого-то что-то не получилось, это никакой не показатель полезности/бесполезности технологии. Я уже приводил ссылку, приведу еще раз https://www.npmjs.com/package/simple-peer
Если лень ходить по ссылке, то процитирую здесь:
Quote
Who is using simple-peer?

    WebTorrent - Streaming torrent client in the browser
    Instant.io - Secure, anonymous, streaming file transfer
    Zencastr - Easily record your remote podcast interviews in studio quality.
    Friends - Peer-to-peer chat powered by the web
    Socket.io-p2p - Official Socket.io P2P communication library
    ScreenCat - Screen sharing + remote collaboration app
    WebCat - P2P pipe across the web using Github private/public key for auth
    RTCCat - WebRTC netcat
    PeerNet - Peer-to-peer gossip network using randomized algorithms
    PusherTC - Video chat with using Pusher. See guide.
    lxjs-chat - Omegle-like video chat site
    Whiteboard - P2P Whiteboard powered by WebRTC and WebTorrent
    Peer Calls - WebRTC group video calling. Create a room. Share the link.
    Netsix - Send videos to your friends using WebRTC so that they can watch them right away.
    Stealthy - Stealthy is a decentralized, end-to-end encrypted, p2p chat application.
    oorja.io - Effortless video-voice chat with realtime collaborative features. Extensible using react components 🙌
    TalktoMe - Skype alternative for audio/video conferencing based on WebRTC, but without the loss of packets.
    CDNBye - CDNBye implements WebRTC datachannel to scale live/vod video streaming by peer-to-peer network using bittorrent-like protocol
    Detox - Overlay network for distributed anonymous P2P communications entirely in the browser
    Metastream - Watch streaming media with friends.
    firepeer - secure signalling and authentication using firebase realtime database
    Genet - Fat-tree overlay to scale the number of concurrent WebRTC connections to a single source (paper).
    WebRTC Connection Testing - Quickly test direct connectivity between all pairs of participants (demo).
    Firstdate.co - Online video dating for actually meeting people and not just messaging them
    TensorChat - It's simple - Create. Share. Chat.

Этот список только тех, кто использует конкретно библиотеку simple-peer
Разумеется, список не полный и реально работающих приложений в десятки или сотни раз больше. Так что на мой взгляд рано списывать эту технологию на пенсию.

Вообще-то у меня есть мечта: сделать полностью независимый ни от кого обменник. Первое, что для этого нужно - создание надежной p2p сети, доступ к которой сможет в два клика поиметь любая домохозяйка.

Я себе представляю такую сеть как статичный html файл на рабочем столе пользователя.
Файл открывается в браузере, браузер подключается к пирам которых он запомнил с прошлой сессии. Только если все пиры недоступны, тогда браузер подключается к сидерам через сигнальные или TURN сервера.
То есть не нужно устанавливать никаких дополнительных приложений. Браузер есть у всех.
Загвоздка в том, что я пока даже не знаю - будет ли это работать в принципе через WebRTC? Хотя теоретически выглядит привлекательно.

Сам идеальный децентрализованный обменник представляю себе так:
А посылает публичное сообщение в общедоступную доску объявлений: "продам битки за яндекс рубли" Сообщение содержит в себе публичный ключ и цифровую подпись.
Б шлет приватное сообщение для А: "куплю твои битки через гаранта В"
А посылает сообщение для Б: "нет, давай через гаранта Г"
Б посылает сообщение: "ладно давай"...
А посылает публичное сообщение в общедоступную доску объявлений: "предложение закрыто"
Дальше идет обычный обмен через гаранта.

То есть p2p обменник это по сути обычный месседжер плюс доска объявлений. Гарантов можно искать в других местах.
sr. member
Activity: 1316
Merit: 420
KTO EC/\U HUKTO?
Отличие WebRTC в том, что связь идет напрямую, а не через сервер мордокниги, вконтакта, ютуба и т.п. То есть это в чистом виде p2p соединение.

Не всегда напрямую (TURN) и всегда не в чистом виде.

Недостаток (один из...) в том, что для начала соединения нужно обменяться некими "сигнальными" данными. Обмен можно произвести хоть голубинной почтой, но обычно для этого используют промежуточные "сигнальные сервера". Эти сигнальные сервера являются уязвимым местом для возможных атак из вне или для всяких роскомпозоров.

Обмен хоть и можно произвести голубинной почтой, но есть нюансы и работать толком ничего не будет, поэтому "обычно используют" в данном случае уместно заменить на "всегда используют".
А ещё, сигнальные серверы это bottleneck для производительности и масштабирования сети.

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

Сейчас идея на стадии идеи. Концепция более или менее уже понятна. Совсем нет времени на реализацию. Если кто-то захочет реализовать, то буду рад помочь и поучаствовать в разработке.

Я на эту идею джва года как забил. Минимизировать роль сигнальных серверов невозможно, потому что WebRTC это не настоящий p2p.

Суть в том, что нужно провести что-то типа научного исследования... То есть сейчас мне не понятно в принципе: реализуема ли идея или нет?

Нет.

Чтобы установить соединение, два пира должны обменяться сигнальными данными: один пир генерирует сигнал который называется offer - это тупой набор тектовых данных, другой пир получает этот текст и на его основе генерирует сигнал answer - тоже текст который надо послать обратно первому пиру.
Когда пиры обменялись этими текстовыми данными, происходит магия: соединение считается установленным, пиры получают возможность обмениваться данными, даже если между ними 100500 роутеров и ип адреса у этих пиров что-то типа 192.168.1.1 или 127.0.0.1

Это не тупой набор текстовых данных. К нему прилагается маршрут, поэтому никакой магии нет. Без браузеров и WebRTC хендшейк нескольких пиров организовать ещё проще, что более магично, как по мне.

Так вот, сейчас я пока не могу понять: что происходит при разрыве соединения? Офферы и ансверы протухают и надо генерировать новые? Или можно например запомнить оффер, выключить комп, потом сгенерировать новый ансвер на основе старого оффера, отправить партнеру новый ансвер и опять соединиться получается со старым оффером, но с новым ансвером?

А может вообще можно запомнить офферы и ансверы при разрыве соединения и потом использовать эту сигнальную информацию повторно для нового соединения? Это было бы вообще прикольно. Тогда точно можно сделать одноранговую p2p сеть, запоминая офферы и ансверы где-нибудь в localStorage и используя эту информацию так, как обычные p2p сети используют IP адреса.

Так не получится. Протухают даже при закрытии вкладки, порты закрываются, движок отклоняет все некошерные соединения. Браузеры это проприетарное говно с открытым исходным кодом, поэтому никакой децентрализации и прочих p2p они совсем не умеют, а все их фичи a.k.a. стандарты отдалённо похожие на это спроектированы настолько извратно, чтобы их использование третьей стороной никак не могло угрожать централизованной монополии Цукербринов.
sr. member
Activity: 1932
Merit: 349
Первое: тема самомодерируемая, все сообщения от investgroup буду удалять не читая.
...

Вот это правильно  Grin
и была ж где то тема про децентрализованный чат и там много букв уже понаписали или это она и есть?
legendary
Activity: 2646
Merit: 1141

Да, такая идея тоже имеет место быть. Даже знаю парней, которые сделали такой браузер https://github.com/Zigridar/blockchainsites
Это приложение которое подключается к тестовой сети биткоина и позволяет публиковать сайты не в интернет, а прямо в блокчейн. Там же встроенный браузер (на движке хромиум) который эти сайты может открывать так же как любые другие сайты в интернете.

А вот эта тема очень интересная. Получается, что можно сделать сайт и заплатив за первичное размещение больше не беспокоится о продлении домена, оплате хостеру. Т.е. он будет в интернете навечно. Думаю, что когда народ просечет эту фишку, то все сайты потихоньку туда и переместятся.
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange

Возникла идея - можно ли приспособить для такого вот localStorage стандартный мемо пул?
Броузер делается на базе обычного кошелька. При необходимости обменяться информацией с другим пользователем ему просто посылается транзакция с сообщением, которая попадает в мемо пул.

Да, такая идея тоже имеет место быть. Даже знаю парней, которые сделали такой браузер https://github.com/Zigridar/blockchainsites
Это приложение которое подключается к тестовой сети биткоина и позволяет публиковать сайты не в интернет, а прямо в блокчейн. Там же встроенный браузер (на движке хромиум) который эти сайты может открывать так же как любые другие сайты в интернете.
legendary
Activity: 2646
Merit: 1141

А может вообще можно запомнить офферы и ансверы при разрыве соединения и потом использовать эту сигнальную информацию повторно для нового соединения? Это было бы вообще прикольно. Тогда точно можно сделать одноранговую p2p сеть, запоминая офферы и ансверы где-нибудь в localStorage и используя эту информацию так, как обычные p2p сети используют IP адреса.


Возникла идея - можно ли приспособить для такого вот localStorage стандартный мемо пул?
Броузер делается на базе обычного кошелька. При необходимости обменяться информацией с другим пользователем ему просто посылается транзакция с сообщением, которая попадает в мемо пул.
sr. member
Activity: 1736
Merit: 254
Сегодня проверял безопасность браузера хром и наткнулся на какой-то плагин web rtc. И удалил. Даже не помню для чего его установил, или кто-то установил мне
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
WebRTC на данный момент не совсем жив.

Вообще же есть проект PeerJS, который серьезно облегчает реализацию сервера и клиента:

https://peerjs.com/

Описанная же проблема общая для всех P2P сетей, включая биткойн, нодам которого для начального обмена пирами тоже приходится полагаться на централизованный dns seed. Увы, любой P2P сети нужно с чего-то начинаться, если хочется чтобы она была массовой. В противном случае, будет как с CJDNS - идеальная децентрализация при почти полном отсутствии потребителей.

Да, разработчики на WebRTC как-то не обращают внимания, хотя на мой взгляд незаслуженно.
Библиотек есть куча, мне больше нравится simple-peer. Суть в том, что нужно провести что-то типа научного исследования... То есть сейчас мне не понятно в принципе: реализуема ли идея или нет?

Да, все клиенты любой p2p сети, при первом запуске должны подключиться к заранее известным нодам-сидерам. В биткоине часть сидеров зашита прямо в исходник, часть ищется через dns seed. В некоторых p2p клиентах список пиров достается тупо из текстового файла... Во многих говнофорках начальный список сидеров задается в ветке с анонсом ))

Теперь про WebRTC.
Чтобы установить соединение, два пира должны обменяться сигнальными данными: один пир генерирует сигнал который называется offer - это тупой набор тектовых данных, другой пир получает этот текст и на его основе генерирует сигнал answer - тоже текст который надо послать обратно первому пиру.
Когда пиры обменялись этими текстовыми данными, происходит магия: соединение считается установленным, пиры получают возможность обмениваться данными, даже если между ними 100500 роутеров и ип адреса у этих пиров что-то типа 192.168.1.1 или 127.0.0.1

Так вот, сейчас я пока не могу понять: что происходит при разрыве соединения? Офферы и ансверы протухают и надо генерировать новые? Или можно например запомнить оффер, выключить комп, потом сгенерировать новый ансвер на основе старого оффера, отправить партнеру новый ансвер и опять соединиться получается со старым оффером, но с новым ансвером?

А может вообще можно запомнить офферы и ансверы при разрыве соединения и потом использовать эту сигнальную информацию повторно для нового соединения? Это было бы вообще прикольно. Тогда точно можно сделать одноранговую p2p сеть, запоминая офферы и ансверы где-нибудь в localStorage и используя эту информацию так, как обычные p2p сети используют IP адреса.



member
Activity: 264
Merit: 13
Есть идея: создать децентрализованную WebRTC сеть в которой сигнальными серверами, будут сами клиенты (браузеры, приложения).
То есть совсем от настоящих сигнальных серверов отказаться не получится, но попытаться минимизировать их роль в поддержке сети.

Сейчас идея на стадии идеи. Концепция более или менее уже понятна. Совсем нет времени на реализацию. Если кто-то захочет реализовать, то буду рад помочь и поучаствовать в разработке.
Ну, по сути Вы описываете идею банального децентрализованного интернета. Она существует даже в виде целого американского сериала, где несколько стартаперов якобы лепят нечто подобное.
Технически это возможно реализовать и тут нет ничего сложного, просто каждый участник должен одновременно поддерживать связанные приложения (демоны), каждое из которых отвечает за свою часть работы системы в целом. Один демон - пользователь, другой - сервер, третий - БД, четвертый - неймер (DNS), пятый - гидер и так далее.
С современными мощностями нет никакой проблемы реализовать подобный пакет на базе одного компа. Для раскрутки проекта проще всего начать с реализации простейшего мессенджера, но с высокой степенью анонимизации, глубоким шифрованием и прочими плюшками. Дальше можно это расширять до уровня автономных сайтов, торрент-трекеров и так далее.
НО! Чтобы это все работало не через пень-колоду, нужно это делать не по принципу слоно-жирафо-оленя, лепя один хардкорный движок на другой, и заделывая все щели скриптами. Нужно писать чистый код бэкграунда с нуля на компилируемом языке.
Ну и средства нужны для финансирования такого детища. Хотя бы на старте, пока не заработает мессенджер, а там можно пробовать привлекать средства через рекламу (я бы даже на это пошел, чтобы раскрутить такой проект).
legendary
Activity: 3108
Merit: 1358
WebRTC на данный момент не совсем жив.

Вообще же есть проект PeerJS, который серьезно облегчает реализацию сервера и клиента:

https://peerjs.com/

Описанная же проблема общая для всех P2P сетей, включая биткойн, нодам которого для начального обмена пирами тоже приходится полагаться на централизованный dns seed. Увы, любой P2P сети нужно с чего-то начинаться, если хочется чтобы она была массовой. В противном случае, будет как с CJDNS - идеальная децентрализация при почти полном отсутствии потребителей.
sr. member
Activity: 1337
Merit: 288
0xbt
В этой сети остались фанаты и узкие специалисты.
Думаю, чем меньше мы о ней будем вспоминать, тем быстрее о ней будут забывать, следовательно более менее она будет оставаться, так сказать, менее более(тавтология) децентрализованной  Smiley.
По моему в топике fxpc, вроде как этот вариант рассматривался.
(не хочется перечитывать)
kzv
legendary
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
Первое: тема самомодерируемая, все сообщения от investgroup буду удалять не читая.

Теперь по теме.

Коротко о технологии WebRTC, если кто-то не знает или чтобы просто освежить в памяти.

WebRTC это технология, которая позволяет соединяться напрямую двум браузерамм (и другим приложениям которые поддерживают эту технологию). После соединения, иожно обмениваться любыми данными: стриминговые видео, просто файлы, текстовые сообщения... в общем любыми которые поддерживает браузер или приложение.

Отличие WebRTC в том, что связь идет напрямую, а не через сервер мордокниги, вконтакта, ютуба и т.п. То есть это в чистом виде p2p соединение.

Недостаток (один из...) в том, что для начала соединения нужно обменяться некими "сигнальными" данными. Обмен можно произвести хоть голубинной почтой, но обычно для этого используют промежуточные "сигнальные сервера". Эти сигнальные сервера являются уязвимым местом для возможных атак из вне или для всяких роскомпозоров.

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

Сейчас идея на стадии идеи. Концепция более или менее уже понятна. Совсем нет времени на реализацию. Если кто-то захочет реализовать, то буду рад помочь и поучаствовать в разработке.
Pages:
Jump to: