Despliegue e instanciación de contratos en la cadena
Sólo los archivos wasm optimizados pueden almacenarse en la cadena. Si su proyecto local no tiene una carpeta de artifacts, o, si la carpeta de artifacts está vacía. Vuelva al paso anterior de la guía para obtener información sobre la producción de ejecutables optimizados CosmWasm.
Almacenamiento de contratos en la cadena
Puedes obtener tokens CONST gratuitos de la red de pruebas para cubrir las tasas de transacción en la red de pruebas de Constantine utilizando el faucet disponible en Discord. Para Mainnet tendrás que adquirir tokens ARCH.
Cuando esté listo para almacenar el ejecutable wasm en cadena, ejecute el siguiente comando a través de la CLI de desarrollador:
archway contracts store CONTRACT [--json] [--
log-level debug|error|info|warn] [--
instantiate-permission any-of|everybody|nobody]
[--allowed-addresses <value>] [--keyring-backend file|os|test]
[--keyring-path <value>] [-f <value>] [--fee <value>] [--no-confirm]
[--gas-adjustment <value>]
Argumentos
CONTRACT (required) Name of the contract
Alternativamente, puede utilizar archwayd:
MAINNET
archwayd tx wasm store artifacts/test_project2.wasm --from my-wallet
--node https://rpc.mainnet.archway.io:443 --chain-id archway-1 --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.4
TESNET
archwayd tx wasm store artifacts/test_project2.wasm --from my-wallet
--node https://rpc.constantine.archway.tech:443 --chain-id constantine-3 --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.4
Instancia del contrato
A continuación, puede instanciar su contrato con el siguiente comando sustituyendo por el nombre del contrato que desea instanciar:
archway contracts instantiate <contract-name> --args '{"my_key":"my value"}'
Como hemos clonado la plantilla de inicio Increment, intente instanciarla con su argumento counter a 0:
Por ejemplo, si se utiliza la CLI archway:
archway contracts instantiate increment --args '{"count":0}'
Si está utilizando archwayd entonces el siguiente comando debería funcionar:
MAINNET
archwayd tx wasm instantiate 795 '{"count":0}' --from my-wallet --node https://rpc.mainnet.archway.io:443 --chain-id archway-1 --label testdev --admin archway1c23y29x9fcs4zlfv5tvl4nrq56p6gywq0snrxl --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
TESNET
archwayd tx wasm instantiate 795 '{"count":0}' --from my-wallet --node https://rpc.constantine.archway.tech:443 --chain-id constantine-3 --label testdev --admin archway1c23y29x9fcs4zlfv5tvl4nrq56p6gywq0snrxl --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
En el caso de usar archwayd, necesitas añadir el Code Id (que puedes ver mirando los datos de transacción de la tienda y establecer la dirección del admin. Puede comprobar esa información y la dirección del contrato en un blockexplorer).
Entonces, ¿por qué estamos enviando nuestro constructor como {"count":0} y cómo podemos verificar que es correcto?
Desde los archivos de tu proyecto abre src/contract.rs. Cerca de la parte superior, es la función pub fn instantiate, que funciona como un constructor y establece el estado inicial del contrato:
pub fn instantiate(
deps: DepsMut,
_env: Env,
info: MessageInfo,
msg: InstantiateMsg,
) -> Result<Response, ContractError> {
let state = State {
count: msg.count, // Here's our count declaration
owner: info.sender.clone(), // Contract owner is wallet that sent tx
};
STATE.save(deps.storage, &state)?; // Save the state
// More code...
}
Verá que el parámetro msg es de tipo InstantiateMsg que se define en el archivo src/msg.rs y contiene los valores que se pueden enviar en formato de objeto JSON:
...
pub struct InstantiateMsg {
pub count: i32,
}
En tu historial deberías ver que se han creado dos acciones:
la transacción de almacenamiento se produjo cuando el ejecutable wasm se cargó en la cadena
La transacción de instanciación, que crea una instancia del contrato con su propio estado.
El siguiente comando historizará las acciones de despliegue:
archway config deployments
Ejemplo de output:
Deployments on constantine-3
increment2 (0.1.0)
Metadata
Contract: archway1aj4u4qdfqdnenmj4zn99wc8qev09wseytg0xr8eerwk7v0uhsevsqjf6zl
Owner address: archway12qj4v8jg5pxk6gsqct09sf9szhwql69xmf9fh4
Rewards address: archway12qj4v8jg5pxk6gsqct09sf9szhwql69xmf9fh4
Transaction: C40C7B55AC2EFF3975DC6F762A06D1B38E5CBDD44EE2F234048E3C4DFBA0958D
Instantiate
Contract: archway1aj4u4qdfqdnenmj4zn99wc8qev09wseytg0xr8eerwk7v0uhsevsqjf6zl
Admin: archway12qj4v8jg5pxk6gsqct09sf9szhwql69xmf9fh4
Transaction: 72CB8910B98370EFE34820A7638C5DB6C01C52E621CB4D0E1B73E9DD357A1697
Store
Code ID: 1776
Transaction: 1CFFA14C7C34C8793A8DA9D02DE747237C433E7366288635EBC528B91CECBC49
También puede acceder a estos datos históricos desde la carpeta ".archway", donde se almacena un archivo respectivo para cada cadena, que contiene los datos históricos. Para Archway testnet, por ejemplo, el archivo sería constantine-3.json.
Configuración del contrato desplegado
Ahora que la dapp está desplegada, se recomienda configurar sus metadatos. Esto te permitirá configurar el contrato inteligente para cobrar recompensas.
Para establecer los metadatos del contrato, utilice el comando:
archway contracts metadata CONTRACT [--json] [--log-level debug|error|info|warn] [--owner-address <value>] [--rewards-address <value>][--keyring-backend file|os|test] [--keyring-path <value>] [-f <value>] [--fee <value>] [--no-confirm] [--gas-adjustment <value>]
Un ejemplo básico sería:
archway contracts metadata increment2 --owner-address "archway12qj4v8jg5pxk6gsqct09sf9szhwql69xmf9fh4" --rewards-address="archway12qj4v8jg5pxk6gsqct09sf9szhwql69xmf9fh4"
Argumentos:
CONTRACT (required) Name of the contract
Ejemplo output:
archway contracts metadata increment2 --owner-address "archway12qj4v8jg5pxk6gsqct09sf9szhwql69xmf9fh4" --rewards-address="archway12qj4v8jg5pxk6gsqct09sf9szhwql69xmf9fh4"
✔ Enter the name or address of the account that will send the transaction … archway12qj4v8jg5pxk6gsqct09sf9szhwql69xmf9fh4
Setting metadata for contract increment2
Chain: constantine-3
Contract: archway1aj4u4qdfqdnenmj4zn99wc8qev09wseytg0xr8eerwk7v0uhsevsqjf6zl
Rewards: archway12qj4v8jg5pxk6gsqct09sf9szhwql69xmf9fh4
Owner: archway12qj4v8jg5pxk6gsqct09sf9szhwql69xmf9fh4
Signer: mywallet
✅ Metadata for the contract increment2-0.1.0 updated
Transaction: D7CBE945F9A464ACB6214FA7E710EB9A147983FE052D68A89FB97C0C5A50BE30
Fijar contratos premiun
Para establecer una prima de contrato, el contrato debe tener ya configurados los metadatos de recompensa. Utilice el siguiente comando para establecer el premiun:
archway contracts premium CONTRACT --premium-fee <value> [--json] [--log-level debug|error|info|warn] [--keyring-backend file|os|test] [--keyring-path <value>] [-f <value>] [--fee <value>] [--no-confirm] [--gas-adjustment <value>]
Un ejemplo básico sería:
archway contracts premium increment2 --premium-fee "1000000000000000000aconst" --from "mywallet"
Argumentos
CONTRACT (required) Name of the contract
Ejemplo output:
Setting premium for contract increment2
Chain: constantine-3
Contract: archway1aj4u4qdfqdnenmj4zn99wc8qev09wseytg0xr8eerwk7v0uhsevsqjf6zl
Premium: 1 CONST (1000000000000000000aconst)
Signer: mywallet
✅ Premium for the contract increment2-0.1.0 updated
Transaction: 8B5A1E3DB826909F898BC2252721C0FD5879D8E3FCAEF020C549C27A31FC2FC0
Last updated