Firmante
signer
es un tipo de recurso Move integrado. A signer
es una capacidad que permite al titular actuar en nombre de un particular address
. Puedes pensar en la implementación nativa como:
Copiar
A signer
es algo similar a un UID de Unix en el sentido de que representa un usuario autenticado mediante un código externo a Move (por ejemplo, verificando una firma criptográfica o una contraseña).
Comparación conaddress
address
Un programa Move puede crear cualquier address
valor sin un permiso especial utilizando literales de dirección:
Copiar
Sin embargo, signer
los valores son especiales porque no se pueden crear mediante literales o instrucciones, solo mediante Move VM. Antes de que la VM ejecute un script con parámetros de tipo signer
, creará signer
valores automáticamente y los pasará al script:
Copiar
Este script abortará con código 0
si se envía desde cualquier dirección que no sea 0x42
.
Un script de transacción puede tener un número arbitrario de signer
s siempre que los signer
s sean un prefijo de cualquier otro argumento. En otras palabras, todos los signer
argumentos deben ir primero:
Copiar
Esto es útil para implementar scripts de múltiples firmantes que actúan de forma atómica con la autoridad de varias partes. Por ejemplo, una extensión del script anterior podría realizar un intercambio de moneda atómica entre s1
y s2
.
signer
Operadores
signer
OperadoresEl std::signer
módulo de biblioteca estándar proporciona dos funciones de utilidad sobre signer
valores:
Función | Descripción |
| Devuelve el |
| Devuelve una referencia al |
Además, el move_to<T>(&signer, T)
operador de almacenamiento global requiere un &signer
argumento para publicar un recurso T
en signer.address
la cuenta. Esto garantiza que solo un usuario autenticado pueda optar por publicar un recurso en su archivo address
.
Propiedad
A diferencia de los valores escalares simples, signer
los valores no se pueden copiar, lo que significa que no se pueden copiar (desde ninguna operación, ya sea mediante una copy
instrucción explícita o mediante una desreferencia *
).
Last updated