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