Para construir interfaces web, necesitar谩s el arch3.js npm package para conectar tu p谩gina web a la Red Archway.
Conexi贸n con Archway
Necesitaremos que nuestra dapp se conecte a los monederos de los usuarios con una extensi贸n de navegador como Keplr.
Tras instalar la extensi贸n, observar谩 que Keplr se expone a las p谩ginas web como una propiedad del objeto ventana de JavaScript.
Keplr tambi茅n necesita metadatos espec铆ficos sobre la cadena a la que se est谩 conectando. A continuaci贸n se indican los par谩metros necesarios para establecer una conexi贸n con la red de prueba Constantine de Archway.
Ahora podemos utilizar ChainInfo para configurar Keplr para Constantine testnet.
import { SigningArchwayClient } from '@archwayhq/arch3.js';
let accounts, CosmWasmClient, queryHandler;
async function connectKeplrWallet() {
if (window['keplr']) {
if (window.keplr['experimentalSuggestChain']) {
await window.keplr.experimentalSuggestChain();
await window.keplr.enable(ChainInfo.chainId);
window.keplr.defaultOptions = {
sign: {
preferNoSetFee: true,
}
}
const offlineSigner = await window.getOfflineSignerAuto(ChainInfo.chainId);
CosmWasmClient = await SigningArchwayClient.connectWithSigner(ChainInfo.rpc, offlineSigner);
// This async waits for the user to authorize your dapp
// it returns their account address only after permissions
// to read that address are granted
accounts = await this.offlineSigner.getAccounts();
// A less verbose reference to handle our queries
queryHandler = CosmWasmClient.queryContractSmart;
console.log('Wallet connected', {
offlineSigner: offlineSigner,
CosmWasmClient: CosmWasmClient,
accounts: accounts,
chain: ChainInfo,
queryHandler: queryHandler,
});
} else {
console.warn('Error accessing experimental features, please update Keplr');
}
} else {
console.warn('Error accessing Keplr, please install Keplr');
}
}
Informaci贸n
Una cosa a tener en cuenta es que, por defecto, Keplr anula las tarifas establecidas por el frontend. Para evitar que Keplr anule estas tarifas, establezca el valor de la opci贸n interactiva preferNoSetFee en true, como se muestra en el ejemplo anterior. Puede encontrar m谩s informaci贸n sobre estas opciones de anulaci贸n aqu铆.
Consultando el contador
En el paso anterior guardamos una referencia a CosmWasmClient.queryContractSmart. La utilizaremos para consultar nuestro punto de entrada QueryMsg::GetCount del contrato Increment.
Al igual que cuando consultamos desde CLI, necesitamos convertir los argumentos de entrada a min煤sculas y may煤sculas. En JavaScript los argumentos se convierten en {get_count: {}}.
const getCount = async () => {
// Your contract address
const ContractAddress = process.env.CONTRACT_ADDRESS;
// Query arguments
let entrypoint = {
get_count: {}
};
// Do query type 'smart'
let queryResult = await queryHandler.query(ContractAddress, entrypoint);
console.log('GetCount Query', queryResult);
},
Incrementar el contador
Para emitir transacciones llamamos a la funci贸n execute usando nuestra referencia anterior CosmWasmClient. Llamamos a esta funci贸n con los siguientes par谩metros:
userAddress - la direcci贸n que emite la transacci贸n
ContractAddress - la direcci贸n del contrato con el que el usuario est谩 realizando una transacci贸n.
entrypoint - argumentos a ejecutar que coinciden con un punto de entrada en el contrato
Fee - con arch3.js las tasas de transacci贸n se pueden calcular autom谩ticamente usando "auto".
Convertimos las may煤sculas y min煤sculas de los argumentos del punto de entrada y las volvemos a repetir, de modo que ExecuteMsg::Increment {} de nuestro contrato Rust se convierte en {increment: {}} en nuestro JavaScript.
En el repositorio de ejemplos de dapp encontrar谩s ejemplos de dapp frontends para la plantilla de c贸digo Increment starter.
Optimizacion de la funcionalidad de la Dapp con indexadores
Despu茅s de completar esta gu铆a, integre SubQuery para una recuperaci贸n de datos eficiente y una funcionalidad mejorada. Este indexador de blockchain va m谩s all谩 de los datos hist贸ricos, permitiendo consultas r谩pidas, soportando contratos inteligentes y proporcionando datos en tiempo real para aplicaciones. Mejore las experiencias de usuario y libere todo el potencial de su dapp en diversos casos de uso aprovechando estos potentes indexadores.