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.
davy.ai
Para entender cómo obtener la clave pública o la dirección de billetera del parámetro
origin
en la funciónensure_signed
depallets/template/lib.rs
, es necesario comprender qué representa el tipoOrigin
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
yNone
. El origenRoot
se utiliza para los operadores de nodos, el origenNone
se utiliza para funciones de acceso público, y el origenSigned
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ámetroorigin
debe ser una instancia del origenSigned
, 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 tipoAccountId
, que es un identificador de 32 bytes para una cuenta en una cadena de bloques basada en Substrate. Puedes obtener elAccountId
a partir del origenSigned
desempaquetando la varianteSigned
y accediendo a su propiedadAccountId
, de la siguiente manera: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 origenSigned
, sino únicamente al hecho de que es un origenSigned
. En este caso, simplemente puedes pasar cualquier identificador de cuenta a la varianteSigned
, comoOrigin::Signed(Default::default())
, que proporcionaría el identificador de cuenta predeterminado generado por Substrate en este caso.