Простые примеры публичного пространства, пользовательского пространства и замороженного пространства в базе данных оружия
Пистолет кажется отличным - и полезным, и полезным! Тем не менее, я изо всех сил пытаюсь понять разницу между размещением в публичном пространстве, размещением в пользовательском пространстве и размещением в замороженном пространстве . Мои попытки простейших возможных примеров:
Публичное место
let gun = Gun()
gun.put('hello') // public space put anyone can edit?
Пользовательское пространство
let user = gun.user()
user.create('Bob','password123',console.log)
user.auth('Bob' ,'password123',console.log)
user.get('test').put("Bob's text")
let user2 = gun.user()
user2.create('Eve','password456',console.log)
user2.auth('Eve' ,'password456',console.log)
user2.get('test').put("Eve's text")
gun.get('test').once(console.log)
// Should this result in separately indexed entries in the db?
// Is the verification built in or up to the app developer?
Застывшее пространство
// Из примера :
var data = "hello world";
var hash = await SEA.work(data, null, null, {name: "SHA-256"});
gun.get('#').get(hash).put(data);
//Would not this hash key's value be replaceable by another user? Is the onus on the app developer to check result of returned result (and remove peers that send bad info)?
Предполагая, что пользователь может выбрать любой сервер ретрансляции (включая те, которые случайным образом возятся с данными), какая часть аутентификации (пользовательское пространство) и идентификатор контента (замороженный) выполняется в протоколе GUN, а какая часть зависит от приложения. Разработчики)?
Может ли кто-нибудь улучшить приведенные выше примеры?
РЕДАКТИРОВАТЬ
Из документов:
Это полезно, поскольку позволяет убедиться, что данные не были изменены, даже если они находятся в общедоступном месте. А использование SEA с GUN предотвращает изменение данных одноранговыми узлами, если используется какая-либо комбинация имени / ключа «#» + хэш.
Кажется, адресация контента, замороженное пространство , встроена.
1 ответ
Публичное место
Любой может редактировать.
let gun = Gun()
gun.get('foo').put({hello: 'world'})
Документы: https://gun.eco/docs/Hello-World
Пользовательское пространство (или ключевое пространство)
Могут быть помещены только данные, подписанные ключом пользователя. Использует МОРЕ.
Оператор используется для доступа к пользовательскому пространству. Gun интерпретирует это примерно так: « разрешить только данные, подписанные ключом, следующим за
~
положить сюда "
let Bob = await SEA.pair();
await gun.user().auth(Bob)
gun.get('~'+Bob.pub).get('test').get('TestPropery').put("Hello from Bob",console.log)
let Eve = await SEA.pair()
await gun.user().auth(Eve) // comment this out and below line will fail, because authorised user Bob not Eve
gun.get('~'+Eve.pub).get('test').get('TestPropery').put("Hello from Alice",console.log)
Документы: https://gun.eco/docs/SEA#quickstart
Frozen Space (Hash Space, Content Id Space)
В
#
используется оператор. Gun интерпретирует что-то вроде « Разрешить помещать сюда данные только в том случае, если их хэш совпадает с добавленным хэш-объектом » .
var data = "hello world";
var hash = await SEA.work(data, null, null, {name: "SHA-256"});
gun.get('#').get(hash).put(data);
Из документов: https://gun.eco/docs/Content-Addressing
Я также заметил, что вы можете заморозить пространство поверх пользовательского пространства, но не наоборот:
//works (content hash id enforced)
gun.get(pub).get('#').get('bR+eukWF7mYgxibHHRc6tJ+G6PIMEB91O1WVEbAYuWU=').put('NJViiTklbpVb2mmXmRel1cZ0F5lm6ZSTAjYg3RWhqkU.qbu9aOlUXGbrFwqZqeLdw2KiMlpj3QMbezmGRm4u7l0')
//you can't append data to a # obj like this
gun.get('#').get('bR+eukWF7mYgxibHHRc6tJ+G6PIMEB91O1WVEbAYuWU=').get('NJViiTklbpVb2mmXmRel1cZ0F5lm6ZSTAjYg3RWhqkU.qbu9aOlUXGbrFwqZqeLdw2KiMlpj3QMbezmGRm4u7l0').put({'something':'else'})