mirror of https://github.com/voidlizard/hbs2
62 lines
1.9 KiB
Plaintext
62 lines
1.9 KiB
Plaintext
|
||
Базовая реализация бандлов
|
||
|
||
Основная идея:
|
||
|
||
Берём список HashRef, каждый HashRef может ссылаться
|
||
на какие-то объекты и создаем журнал (замыкание),
|
||
куда складываем все нужные объекты.
|
||
|
||
Это может быть нужно для ускорения передачи
|
||
большого числа маленьких объектов там, где это
|
||
нужно.
|
||
|
||
Минусы: создаются объекты-обёртки,
|
||
дублируются данные в бандлах и БД.
|
||
|
||
Решение:
|
||
|
||
TODO: introduce-bundle-ttl
|
||
удалять бандлы и BundleRefValue,
|
||
которые никто не трогал дольше, чем
|
||
ttl.
|
||
|
||
Делаем bundle:
|
||
|
||
```
|
||
hbs2 bundle create < bundle-refs
|
||
<SOME-HASH>
|
||
|
||
```
|
||
В bundle-refs список хэшей (HashRef) в текстовом виде
|
||
|
||
|
||
Делаем ссылку на bundle:
|
||
|
||
```
|
||
hbs2 bundle create-ref -k some.key <SOME-HASH>
|
||
<SOME-OTHER-HASH>
|
||
```
|
||
|
||
Создаем объект типа BundleRefValue и подписывает его
|
||
неким ключом.
|
||
|
||
Идея в том, что даже если мы не создатели Bundle и BundleRefValue,
|
||
мы можем его сохранять и распространять, сохраняя оригинальную
|
||
подпись.
|
||
|
||
Клиенты уже сами решают, доверяют они ключу подписанта или нет.
|
||
|
||
Распространение bundle:
|
||
|
||
```
|
||
hbs2-peer announce <SOME-OTHER-HASH>
|
||
|
||
```
|
||
|
||
Теперь те, кто вообще слушают анонсы от пира --- получат
|
||
блок BundleRefValue, проверят подпись, поставят Bundle
|
||
на скачивание, и когда он скачается - импортируют объекты
|
||
из него.
|
||
|