¿Cómo hago que los usuarios firmen diferentes cadenas con su clave privada por separado?

Aquí está el escenario.

Los usuarios vienen a mi sitio web y se registran (usando correo electrónico y contraseña). Luego inician sesión. Después de eso, agregan un nuevo artículo (que tiene campos de nombre y cantidad). Después de hacer clic en enviar, lo que sucede es en un front-end o back-end, genero la misma cantidad de UUID-s que la cantidad que especificó. Por ejemplo, si agregó un elemento nuevo ("Toy123", 15), genero 15 UUID-s en esa página. Entonces, lo que debo hacer es que este usuario firme estos UUIDS con su clave privada. La cuestión es que podría convertir los 15 UUIDS en uno y dejar que el usuario firme este último con su clave privada, pero no me gusta esta opción porque necesito diferentes tipos de firmas para cada uuid porque cada uuid significa cada elemento y cada el artículo es diferente. Entonces, lo que necesito que haga es firmar estos uuids por separado. Probé metamask, pero no es genial, porque para firmar por separado, metamask muestra un cuadro de diálogo de confirmación para cada uuid. Imagínese si un usuario especificara 150 uuids, 150 diálogos de confirmación. No parece genial. Es por eso que no quiero usar metamask. La segunda opción es pedirle a un usuario su clave privada y luego firmar cada uuid programáticamente, pero si le pido a un usuario su clave privada, tendrá miedo.

Traté de explicar toda la situación que estoy enfrentando. La pregunta es: ¿Qué hago para firmar los uuid de un usuario por separado con su clave privada sin pedir su clave privada? ¿Es posible con metamask?

Respuestas (1)

no puedes Metamask sigue un sistema de 1 diálogo, 1 firma para la seguridad de los usuarios. Si desea realizar acciones como esta, deberá implementar su propia firma (web3 tiene soporte directo para ello) y pedirle al usuario que ingrese la clave privada. Tenga en cuenta que puede hacer esto completamente en el dispositivo del usuario y no es necesario enviar la clave a su servidor.

Dicho esto, aún podría hacer esto con 1 firma/lote. Simplemente haga que el usuario firme una raíz Merkle de los valores n. Si en algún momento en el futuro, el usuario desea transferir/modificar/vender solo uno de esos n valores, puede generar una nueva firma en la antigua raíz de merkle y la transformación que tendrá lugar en ese momento. Esto todavía le permite a su usuario probar la propiedad y autorizar cambios, sin requerir n firmas para empezar.