Blockchain | EOS | Contrato inteligente introducción de contrato inteligente 1-Hello World!

1. Cree una nueva carpeta helloWorld en su directorio de contratos.

cd /Users/yourUserName/Documents/EOS/contracts
mkdir helloWorld
cd helloWorld

2. Cree un archivo C ++ en la carpeta recién creada.

touch helloWorld.cpp

3. Escriba lo siguiente en él. 

#include <eosio/eosio.hpp>  //导入eosio头文件

using namespace eosio;      //使用命名空间,可以使代码更加简洁,因为eos中所有类跟函数都在eosio命名空间下;

class [[eosio::contract]] helloWorld : public contract { //合约需继承自eosio::contract(因为使用了命名空间,此处可以简写为public contract);
							//同时使用[[eosio::contract]]来指定编译器生成主调度程序并用来生成ABI。
  public:
      using eosio::contract::contract;  //继承eosio::contract中的构造函数,可省略eosio::;

      [[eosio::action]]    //用eosio::action来修饰该方法为一个动作;
      void hello( name user ) {   //name是eosio中的一种常用数据类型;
		  print( "Hello World", user );
		}
};

Nota: #warning "<eosiolib / eosio.hpp> está en desuso uso <eosio / eosio.hpp>", la advertencia anterior está escrita en el archivo fuente eoiso.hpp.

4. Compile el archivo. El contrato debe compilarse en formato wasm antes de poder implementarse en la red blockchain. 

eosio-cpp helloWorld.cpp -o helloWorld.wasm

    Aparecerá la siguiente advertencia, no es necesario prestar atención.

Warning, empty ricardian clause file
Warning, empty ricardian clause file
Warning, action <hello> does not have a ricardian contract

    Después de que la compilación sea exitosa, habrá dos archivos más .abi y .wasm en el mismo directorio de .cpp. .abi se llama interfaz binaria de aplicación, que es un documento de descripción de interfaz basado en json. .wasm es un archivo binario, un formato de Web Assembly, que tiene otro formato de texto legible wast, los dos son equivalentes.

 5. Cree una cuenta llamada hello y luego implemente el contrato anterior en la cuenta.

cleos create account eosio hello EOS6GwYrUANGhouVRR97W8ukiCPX49Z74toqMTTxGH8mViYiPuuPi -p eosio@active

     Significa que la cuenta eosio crea una cuenta de clase hola y usa la clave pública EOS6G ... uPi para darle permisos activos. Si usa cleos get account hello, encontrará que la clave pública de permiso de propietario también se establece en la misma clave pública que el permiso activo

Al mismo tiempo, crea una cuenta bob. Por simplicidad, aquí se usa la misma clave pública.

cleos create account eosio bob EOS6GwYrUANGhouVRR97W8ukiCPX49Z74toqMTTxGH8mViYiPuuPi -p eosio@active

6. Implemente el contrato helloWorld en la cuenta hello.

cleos set contract hello /Users/yourUserName/Documents/EOS/contracts/helloWorld -p hello@active

    Explicación de la línea de comando: configure contract accountName contractDirect. Se implementa para el usuario hola, la dirección del contrato es /...../helloWorld. El permiso es del usuario hola al permiso activo.

    El resultado es el siguiente, porque ya lo he ejecutado, por lo que el abi que se muestra aquí es el mismo que el existente. 

Reading WASM from /Users/yourUserName/Documents/EOS/contracts/helloWorld/helloWorld.wasm...
Skipping set abi because the new abi is the same as the existing abi
Publishing contract...
executed transaction: b73420d8256676389aaeffbcd8f6e0d30d76d3cdaebae8ada5988844f3098cde  640 bytes  358 us
#         eosio <= eosio::setcode               {"account":"hello","vmtype":0,"vmversion":0,"code":"0061736d0100000001370b6000017f60027f7f0060037f7f...
warn  2020-04-22T01:24:38.839 thread-0  main.cpp:506                  print_result     warning: transaction executed locally, but may not be confirmed by the network yet

7. Ejecute el contrato helloWorld.

cleos push action hello hi '["bob"]' -p bob@active

     Los resultados son los siguientes.

executed transaction: 8857adbe3a2671c98f39ec7dc212313163092eea09f096f4c3c14bbc64e396ae  104 bytes  154 us
#         hello <= hello::hello                 {"user":"bob"}
>> Hello Worldbob
warn  2020-04-22T01:27:29.754 thread-0  main.cpp:506                  print_result     warning: transaction executed locally, but may not be confirmed by the network yet

 

Además, a continuación se agrega una línea de verificación de usuario, es decir, el parámetro de nombre de entrada debe ser coherente con el destinatario; de lo contrario, el contrato no se puede ejecutar.

#include <eosio/eosio.hpp>  //导入eosio头文件

using namespace eosio;      //使用命名空间,可以使代码更加简洁,因为eos中所有类跟函数都在eosio命名空间下;

class [[eosio::contract]] helloWorld : public contract { //合约需继承自eosio::contract(因为使用了命名空间,此处可以简写为public contract);
							//同时使用[[eosio::contract]]来指定编译器生成主调度程序并用来生成ABI。
  public:
      using eosio::contract::contract;  //继承eosio::contract中的构造函数,可省略eosio::;

      [[eosio::action]]    //用eosio::action来修饰该方法为一个动作;
      void hello( name user ) {   //name是eosio中的一种常用数据类型;
		  require_auth( user );
		  print( "Hello World", name{user} );
		}
};

 

Nota: Este artículo hace referencia al documento oficial de desarrollo y agrega los comentarios apropiados.

Publicado 4 artículos originales · Me gusta1 · Visitantes más de 10,000

Supongo que te gusta

Origin blog.csdn.net/weixin_40462761/article/details/105696618
Recomendado
Clasificación