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