es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo utilizar el valor de origen en una paleta de sustrato

La función ensure_signed de pallets/template/lib.rs contiene un parámetro llamado origin de tipo OrginFor<>. He estado mirando dentro de varios proyectos y todo lo que veo es ensure_signed(origin)?.

Mi pregunta es cómo puedo obtener realmente algo como una clave pública o una dirección de billetera a partir de ese valor de origen. Creo que algo debe estar dentro de la variante Signed(AccountId). Pero en los archivos de prueba de varios ejemplos y tutoriales, todo lo que veo es que simplemente pasan Origin::Signed(1). ¿Qué se supone que debo hacer con ese 1?

Estoy comenzando en estas cosas de la cadena de bloques, así que cualquier tipo de conocimiento es muy apreciado.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para entender cómo obtener la clave pública o la dirección de billetera del parámetro origin en la función ensure_signed de pallets/template/lib.rs, es necesario comprender qué representa el tipo Origin en una cadena de bloques basada en Substrate.

    En Substrate, el tipo Origin se utiliza para determinar quién tiene permiso para ejecutar una llamada de función. Hay tres tipos diferentes de orígenes: Root, Signed y None. El origen Root se utiliza para los operadores de nodos, el origen None se utiliza para funciones de acceso público, y el origen Signed se utiliza para cuentas regulares que han sido autorizadas para ejecutar una llamada de función.

    En el caso de la función ensure_signed, el parámetro origin debe ser una instancia del origen Signed, lo que significa que representa una cuenta que ha sido autorizada para ejecutar la llamada de función.

    Para obtener la clave pública o la dirección de billetera asociada con el origen Signed, puedes utilizar el tipo AccountId, que es un identificador de 32 bytes para una cuenta en una cadena de bloques basada en Substrate. Puedes obtener el AccountId a partir del origen Signed desempaquetando la variante Signed y accediendo a su propiedad AccountId, de la siguiente manera:

    if let Some(account_id) = origin.into_account() {
       // Usa el `account_id` para obtener la clave pública o la dirección de billetera
    }
    

    Si solo ves Origin::Signed(1) en los archivos de prueba, eso probablemente significa que la prueba no se refiere a la cuenta asociada con el origen Signed, sino únicamente al hecho de que es un origen Signed. En este caso, simplemente puedes pasar cualquier identificador de cuenta a la variante Signed, como Origin::Signed(Default::default()), que proporcionaría el identificador de cuenta predeterminado generado por Substrate en este caso.

Comments are closed.