Callers
En el contexto de una transacción en una blockchain, el término caller
se refiere al sujeto o entidad que realiza la transacción o invoca una función inteligente en el contrato inteligente de la blockchain.
Cuando alguien desea interactuar con un contrato inteligente, ya sea para enviar una transacción o solicitar información, se convierte en el caller
de la transacción. El caller
puede ser un individuo, una organización o incluso otro contrato inteligente en la misma o en una blockchain diferente.
El caller
proporciona los parámetros necesarios y la firma digital correspondiente para autorizar y validar la transacción. Estos parámetros pueden incluir datos de entrada, como valores numéricos o cadenas de texto, que se utilizan en la ejecución del contrato inteligente.
El concepto de caller
es importante porque permite rastrear la fuente de una transacción o solicitud en la cadena de bloques. También juega un papel en la gestión de permisos y control de acceso en los contratos inteligentes, ya que el contrato puede realizar comprobaciones para verificar la identidad o los privilegios del caller
antes de ejecutar una función específica.
En resumen, el caller
en una transacción sobre la blockchain es la entidad que inicia la interacción con un contrato inteligente, proporcionando los datos necesarios y la autorización para ejecutar la transacción o función deseada.
Utilidad CallerUtil
El sdk proporciona una utilidad llamada CallerUtil
dentro del modulo de transacciones. Esta utilidad nos permite obtener un caller
que se utilizará para firmar las transacciones.
const caller = sdk.transactions.callers.getCaller();
La manera como se obtiene el caller
en modo local o servidor son distintas. En modo local se obtiene a partir de la wallet conectada del usuario, mientras que en modo servidor se obtiene a partir del mapa de claves enviado como configuración al momento de inicializar el sdk.
Obtener el caller
en modo servidor
Al inicializar el sdk enviamos un mapa de claves-valor con las direcciones Ethereum que se utilizaran como los callers
en cada transacción.
Un solo caller
const wallets = new Map<string, string>();
const myWalletAddress = '0xa73a3b8ACa335855EeaC2f9Fb505BB0360A1B703';
wallets.set('default', myWalletAddress);
// Despues de inicializar el sdk
const caller = sdk.transactions.callers.getCaller(); //0xa73a3b8ACa335855EeaC2f9Fb505BB0360A1B703
No es necesario al obtener el caller
especificar el nombre default
, ya que se verifica si solo existe uno; entonces se devolverá este.
Múltiples callers
En este ejemplo, la dirección 0xa73a3b8ACa335855EeaC2f9Fb505BB0360A1B703
es la que se utilizará como caller
en todas las transacciones. El nombre default
es el nombre del caller
y se utiliza para identificarlo en el mapa de claves. Si nuestro mapa de claves tiene más de un caller
, podemos obtenerlos utilizando el nombre correspondiente.
const user1 = ['Juan', '0xa73a3b8ACa335855EeaC2f9Fb505BB0360A1B703'];
const user2 = ['Pedro', '0xa73a3b8ACa335855EeaC2f9Fb506BB0360A1B702'];
const user3 = ['Lucas', '0xa73a3b8ACa335855EeaC2f1Fb505BB0360A1C603'];
const wallets = new Map<string, string>([user1, user2, user3]);
// Despues de inicializar el sdk
const caller1 = sdk.transactions.callers.getCaller('Juan'); //0xa73a3b8ACa335855EeaC2f9Fb505BB0360A1B703
const caller2 = sdk.transactions.callers.getCaller('Pedro'); //0xa73a3b8ACa335855EeaC2f9Fb506BB0360A1B702
const caller3 = sdk.transactions.callers.getCaller('Lucas'); //0xa73a3b8ACa335855EeaC2f1Fb505BB0360A1C603