Saltar al contenido principal

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
Default caller

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