Crear un Smart Contract
Crear un Smart Contract
En esta sección, aprenderás a escribir y compilar un contrato inteligente de WAX usando eosio-init.
Cómo funciona
eosio-init es una herramienta de WAX-CDT que crea la siguiente plantilla/directorio de contrato inteligente:
- Carpeta include: Incluye una muestra de archivo .hpp.
- Carpeta ricardian: Incluye un archivo de muestra de contratos ricardianos.
- Carpeta src: Incluye un archivo de muestra .cpp de un contrato inteligente.
Los archivos plantilla se denominan con el nombre del proyecto que se especifica cuando se utiliza eosio-init en la línea de comandos.
Usar eosio-init
Para crear tu primer contrato inteligente WAX usando eosio-init:
-
Crea un directorio de contratos inteligentes. Para este tutorial, usaremos una carpeta llamada mycontracts.
mkdir mycontracts ```shell Accede a este nuevo directorio: ```shell cd mycontracts
-
Desde la línea de comandos, utiliza eosio-init con el parámetro
project
.eosio-init -project wax
eosio-init utiliza el nombre del
proyecto
para crear la siguiente estructura de directorios:- mycontracts/wax/include
- mycontracts/wax/ricardian
- mycontracts/wax/src
-
Opcional. Añade una Cláusula ricardiana. Por defecto, ya se incluye un contrato ricardiano.
Ahora deberías tener una plantilla de contrato inteligente, incluyendo un contrato inteligente de ejemplo (mycontracts/wax/src/wax.cpp). Este contrato incluye la siguiente acción:
#include <wax.hpp>
ACTION wax::hi( name nm ) {
/* fill in action body */
print_f("Name : %\n",nm);
}
El archivo de cabecera (mycontracts/wax/include/wax.hpp) hereda de <eosio/eosio.hpp>.
// Inherit your contract from eosio::contract.
// This exposes the following data types (available to your smart contract):
// eosio::name receiver - the contract that receives an action (this contract)
// eosio::name code - the contract's blockchain account
// eosio::datastream - the data that's passed to the contract. In this example, it's your name.
#include <eosio/eosio.hpp>
using namespace eosio;
CONTRACT wax : public contract {
public:
using contract::contract;
// The ACTION keyword implements the behavior of your contract.
// ACTION is a shortcut for [[eosio::action]]
ACTION hi( name nm );
//action_wrapper: first parameter = action to call
//second parameter = pointer to the action function
using hi_action = action_wrapper<"hi"_n, &wax::hi>;
};
Consejo: La estructura action_wrapper crea una plantilla/puntero basada en una acción específica. Puedes usar action_wrappers para hacer llamadas de acción de un contrato a otro.
Redacta tu contrato
Para desplegar tu contrato inteligente, necesitarás crear un archivo .wasm
y .abi
. Puedes hacerlo utilizando el Kit de herramientas de desarrollo de WAX (WAX Contract Development Toolkit o WAX-CDT).
-
Instala el WAX-CDT (si no lo habías hecho antes).
-
Desde la línea de comandos, ve a la carpeta de construcción mycontracts/wax.
cd wax/build
-
Inicializa cmake para que escriba los archivos de construcción necesarios en el directorio build.
cmake ..
La consola mostrará las siguientes tareas de construcción:
-- The C compiler identification is GNU 7.4.0 -- The CXX compiler identification is GNU 7.4.0 -- Check for working C compiler: /usr/bin/cc -- Check for working C compiler: /usr/bin/cc -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done ... -- Build files have been written to: waxblockchain/wax-blockchain/wax-cdt/examples/hello/build
-
Crea los scripts.
make
La consola mostrará la siguiente confirmación:
Scanning dependencies of target wax [ 50%] Building CXX object CMakeFiles/wax.dir/wax.obj Warning, empty ricardian clause file [100%] Linking CXX executable wax.wasm [100%] Built target wax [ 77%] No install step for 'wax_project' [ 88%] No test step for 'wax_project' [100%] Completed 'wax_project' [100%] Built target wax_project
Puedes localizar los archivos wax.wasm y wax.abi en el directorio build/wax.