Grant asignación

Construir una dapp de contrato inteligente que permita a los usuarios solicitar una subvención de tasas es una tarea difícil, ya que todas las transacciones requieren el pago de tasas de transacción. Sin embargo, se pueden utilizar varios métodos. He aquí algunos ejemplos:

  • El otorgante puede ejecutar manualmente cada transacción de concesión de tasas utilizando la CLI archwayd

  • Construya un script de despliegue que contenga las direcciones a las que desea asignar una subvención de tasas. Este script utilizará la CLI archwayd para realizar la transacción de concesión de tasas para cada dirección especificada.

  • Implementar una sencilla aplicación frontend que verifique y valide la cuenta de un usuario. Después de confirmar que son el propietario de la cuenta, la aplicación ejecutaría una transacción Javascript con arch3.js para llevar a cabo la transacción de concesión de la cuota.

Crear asignaciones usando archwayd

La CLI archwayd es una herramienta clave para acceder a las funcionalidades fundamentales de Archway Blockchain. Para instalar archwayd, consulte este enlace. He aquí una ilustración de una transacción típica para crear un subsidio de subvención:

Mainnet
archwayd tx feegrant grant "${granter_addr}" "${grantee_address}" \
    --chain-id "archway-1" \
    --node "https://rpc.mainnet.archway.io:443" \
    --spend-limit 500000000000000000aarch \
    --expiration 2025-12-31T23:00:00Z \
    --allowed-messages '/cosmwasm.wasm.v1.MsgExecuteContract' \
    --gas auto \
    --gas-prices "$(archwayd q rewards estimate-fees 1 --node 'https://rpc.mainnet.archway.io:443' --output json | jq -r '.gas_unit_price | (.amount + .denom)')" \
    --gas-adjustment 1.3 \
    --broadcast-mode block \
    --output json \
    --yes
    
Testnet
archwayd tx feegrant grant "${granter_addr}" "${grantee_address}" \
    --chain-id "constantine-3" \
    --node "https://rpc.constantine.archway.tech:443" \
    --spend-limit 500000000000000000aarch \
    --expiration 2025-12-31T23:00:00Z \
    --allowed-messages '/cosmwasm.wasm.v1.MsgExecuteContract' \
    --gas auto \
    --gas-prices $(archwayd q rewards estimate-fees 1 --node 'https://rpc.constantine.archway.tech:443' --output json | jq -r '.gas_unit_price | (.amount + .denom)') \
    --gas-adjustment 1.3 \
    --broadcast-mode block \
    --output json \
    --yes

Desglosemos algunos de los componentes:

  • ${granter_addr}: Este valor representa la dirección de la cuenta que proporciona tokens al cesionario para la ejecución de la transacción.

  • ${grantee_address}: Indica la cuenta que recibe los tokens, lo que le permite realizar transacciones utilizando estas subvenciones.

  • allowed-messages: A través del tipo AllowedMsgAllowance, puede limitar el tipo de mensaje para el que un beneficiario puede utilizar la subvención.

  • expiration: Fecha límite en la que debe utilizarse la indemnización o caducará.

  • spend-limit: La asignación máxima proporcionada al beneficiario. Esta cantidad se ajusta a medida que se utilizan las fichas.

Crear asignaciones usando arch3.js

Esta sección muestra cómo crear una concesión de derechos utilizando arch3.js. Siguiendo los pasos descritos en esta sección, podrá crear un cliente de firma, estructurar un mensaje de concesión de derechos y ejecutar la transacción necesaria que concederá derechos a las cuentas designadas. Vamos a explorar el proceso de creación de derechos de emisión utilizando arch3.js.

  • Cree el cliente de firma que se utilizará para ejecutar la transacción:

const signingClient = await SigningArchwayClient.connectWithSigner(network.endpoint, wallet);
  • El mensaje de asignación consta de tres componentes esenciales: el otorgante, el beneficiario y la asignación propiamente dicha. Como ya se ha mencionado, el otorgante es la dirección responsable de conceder la asignación, mientras que el beneficiario es el destinatario que puede utilizar la asignación concedida. El componente de la indemnización es algo más complejo, y su estructura depende del tipo específico de indemnización emplead

Para ilustrarlo, examinemos la estructura de una basicAllowance utilizando el siguiente ejemplo:

/const basicAllowance = {
    typeUrl: "/cosmos.feegrant.v1beta1.BasicAllowance",
    value: Uint8Array.from(
        BasicAllowance.encode({
        spendLimit: [
            {
            denom: "aconst",
            amount: "5000000000000000000",
            },
        ],
        }).finish(),
    ),
};

Por lo tanto, el mensaje combinado aparecería de la siguiente manera:

const msgGrantAllowance = {
    granter: granterAddress,
    grantee: granteeAddress,
    allowance: basicAllowance,
};
const typeUrl = "/cosmos.feegrant.v1beta1.MsgGrantAllowance";
const msgAny = { typeUrl, value: msgGrantAllowance };

Ahora sólo queda ejecutar la transacción:

const broadcastResult = await signingClient.signAndBroadcast(
    granterAddress,
    [msgAny],
    'auto',
    'Fee Grant', // optional memo
);

Puedes encontrar un ejemplo funcional de este script en el repositorio de ejemplos de dapp.

Iniciar una asignación usando el mensaje arbitrario de keplr

Sería genial si pudieras permitir a los nuevos usuarios indicar su intención de utilizar tu dapp sin requerir que ejecuten una transacción en la cadena, especialmente si no poseen los tokens necesarios para completar la transacción. Monederos como Keplr y otros ofrecen una solución que permite a las dapps verificar la propiedad de la cuenta fuera de la cadena. En el caso de Keplr, esta solución se conoce como Mensaje Arbitrario.

Para implementar esta solución, necesitaría almacenar la solicitud de asignación del usuario en un sistema centralizado o ejecutar la transacción desde una aplicación backend centralizada para conceder al usuario una asignación una vez que haya demostrado con éxito la propiedad de su cuenta.

Podría aplicarse el siguiente proceso:

  • El usuario pulsa un botón en su dapp para solicitar un subsidio.

  • La dapp crea una solicitud de Mensaje Arbitrario para verificar que el usuario es el propietario de la cuenta a la que se concederá el permiso.

  • Esta solicitud genera una ventana Keplr, en la que se pide al usuario que firme el mensaje.

  • Una vez firmado el mensaje, la dirección del usuario se envía a un sistema backend centralizado, que utiliza arch3.js para ejecutar una concesión de tasas.

  • Una vez completada con éxito la asignación, el sistema centralizado devuelve los resultados relativos a la solicitud realizada con éxito y la dapp muestra un mensaje de éxito al usuario.

  • La asignación del usuario se consulta en la cadena, se presenta y se muestra un mensaje explicando que ya puede utilizar la asignación concedida para ejecutar sus transacciones iniciales.

Last updated