Firmante

signeres un tipo de recurso Move integrado. A signeres una capacidad que permite al titular actuar en nombre de un particular address. Puedes pensar en la implementación nativa como:

Copiar

struct signer has drop { a: address }

A signeres 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

Un programa Move puede crear cualquier addressvalor sin un permiso especial utilizando literales de dirección:

Copiar

let a1 = @0x1;
let a2 = @0x2;
// ... and so on for every other possible address

Sin embargo, signerlos 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á signervalores automáticamente y los pasará al script:

Copiar

script {
    use std::signer;
    fun main(s: signer) {
        assert!(signer::address_of(&s) == @0x42, 0);
    }
}

Este script abortará con código 0si se envía desde cualquier dirección que no sea 0x42.

Un script de transacción puede tener un número arbitrario de signers siempre que los signers sean un prefijo de cualquier otro argumento. En otras palabras, todos los signerargumentos deben ir primero:

Copiar

script {
    use std::signer;
    fun main(s1: signer, s2: signer, x: u64, y: u8) {
        // ...
    }
}

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 s1y s2.

signerOperadores

El std::signermódulo de biblioteca estándar proporciona dos funciones de utilidad sobre signervalores:

Función

Descripción

signer::address_of(&signer): address

Devuelve el addressenvuelto por esto &signer.

signer::borrow_address(&signer): &address

Devuelve una referencia al addressenvuelto por this &signer.

Además, el move_to<T>(&signer, T)operador de almacenamiento global requiere un &signerargumento para publicar un recurso Ten signer.addressla 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, signerlos valores no se pueden copiar, lo que significa que no se pueden copiar (desde ninguna operación, ya sea mediante una copyinstrucción explícita o mediante una desreferencia *).

Last updated