Gun parece genial, ¡tanto útil como usable! Sin embargo, me cuesta entender la diferencia entre una ubicación de espacio público , una ubicación de espacio de usuario y una ubicación de espacio congelado . Mis intentos en los ejemplos más simples posibles son:
Espacio publico
let gun = Gun() gun.put('hello') // public space put anyone can edit?Espacio de usuario
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?Espacio Congelado
// Del ejemplo :
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)?Suponiendo que un usuario pueda elegir cualquier servidor de retransmisión (incluidos los que juegan aleatoriamente con los datos), qué parte de la autenticación (espacio del usuario) y la identificación del contenido (congelado) se realiza en el protocolo GUN, y cuánto depende de la aplicación desarrollador(es)?
¿Alguien puede mejorar los ejemplos anteriores?
EDITAR
De los documentos:
Esto es útil, porque te permite verificar que los datos no hayan sido cambiados, incluso si están en un lugar público. Y al usar SEA con GUN, evita que los compañeros cambien los datos si se usa alguna combinación de nombre/tecla de '#'+hash.
Parece que el direccionamiento del contenido, el espacio congelado , está integrado.
Espacio publico
Cualquiera puede editar.
let gun = Gun() gun.get('foo').put({hello: 'world'})Documentos: https://gun.eco/docs/Hello-World
Espacio de usuario (o espacio clave)
Solo se pueden poner datos firmados con la clave del usuario. Utiliza MAR.
El operador ~ se utiliza para acceder al espacio de usuario. Gun interpreta esto como " solo permitir que los datos firmados por la clave que sigue a ~ se coloquen aquí ".
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)Documentos: https://gun.eco/docs/SEA#quickstart
Espacio congelado (espacio hash, espacio de ID de contenido)
Se utiliza el operador # . Gun interpreta algo como " Permitir que los datos se coloquen aquí solo si su hash coincide con el objeto hash adjunto".
var data = "hello world"; var hash = await SEA.work(data, null, null, {name: "SHA-256"}); gun.get('#').get(hash).put(data);De documentos: https://gun.eco/docs/Content-Addressing
También he observado que puedes tener un espacio congelado encima del espacio del usuario, pero no al revés:
//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'})