Introducción al desarrollo común de los contratos de la cadena móvil de China (5) Compilación de proyectos de contratos

01

Objetivo

Este documento presenta el directorio del árbol del proyecto del proyecto de contrato inteligente de desarrollo de ingeniería y presenta el significado y el propósito de cada carpeta y archivo. Este documento seguirá el contenido del contrato de la libreta de direcciones implementado en el artículo anterior e introducirá el proyecto de inicialización como ejemplo. Es adecuado para los desarrolladores que son nuevos en el desarrollo de contratos para comprender los proyectos de contratos inteligentes y ayudarlos a comprender y comenzar rápidamente. con contratos inteligentes.

02

Introducción al contrato inteligente

Como plataforma informática distribuida y confiable, blockchain es su característica más esencial de descentralización. Un registro de cada transacción se almacena inmutablemente en la cadena de bloques. Los contratos inteligentes definen acciones y códigos de transacción que se pueden ejecutar en la cadena de bloques. Se puede ejecutar en una cadena de bloques e incluir el estado de ejecución del contrato como parte del historial inmutable de esa instancia de la cadena de bloques.

Como resultado, los desarrolladores pueden confiar en blockchain como un entorno informático confiable donde la entrada, la ejecución y los resultados de los contratos inteligentes son independientes de la influencia externa.

03

Terminología Explicación

Ensamblaje web (WASM)

Una máquina virtual para ejecutar formato de código binario portátil, alojada en nodeos.

Interfaz binaria de aplicación (ABI)

Una interfaz que define cómo se calculan los datos dentro y fuera de la máquina virtual WebAssembly.

04

Introducción a Hacer

La herramienta make se puede considerar como una herramienta inteligente de procesamiento por lotes. No tiene la función de compilar y vincular por sí misma, sino que compila y vincula llamando al comando especificado por el usuario en el archivo Makefile.

Permite a los usuarios compilar e instalar sin conocer los detalles de la compilación, porque los detalles se registran en el Makefile.

05

Introducción a CMake

CMake es una herramienta de instalación (compilación) multiplataforma, que puede describir la instalación (proceso de compilación) de todas las plataformas con oraciones simples. El archivo de configuración se llama CMakeLists.txt, que puede generar archivos Makefile al identificar CMakeLists.txt y puede probar las características de C++ compatibles con el compilador. Los desarrolladores familiarizados con un entorno de desarrollo integrado (IDE) pueden usar CMake para crear software de forma estándar.

El proyecto de inicialización generado a través de la línea de comandos en EOS viene con un archivo CMakeLists.txt. Si no hay necesidad de realizar cambios personalizados, el usuario solo necesita usar el comando cmake para construir el proyecto y no se requieren otras modificaciones.

Introducción a la gramática:

  • La palabra clave PROYECTO se puede usar para especificar el nombre del proyecto y los idiomas compatibles, todos los idiomas son compatibles de forma predeterminada

  • PROJECT(HELLO) especifica el nombre del proyecto y es compatible con todos los idiomas

  • PROJECT(HELLO CXX) especifica el nombre del proyecto, admite C++

  • PROJECT(HELLO C CXX) especifica el nombre del proyecto, admite C y C++

  • La palabra clave SET se utiliza para mostrar la variable especificada

  • SET(SRC_LIST main.cpp) La variable SRC_LIST contiene main.cpp

  • SET(SRC_LIST main.cpp t1.cpp t2.cpp) La variable SRC_LIST contiene múltiples cpp

  • La palabra clave MENSAJE envía información definida por el usuario al terminal

  • SEND_ERROR generó un error, se omitió el proceso de generación

  • ESTADO genera información con el prefijo --

  • FATAL_ERROR termina todos los procesos cmake inmediatamente

  • La palabra clave ADD_EXECUTABLE genera un archivo ejecutable

  • ADD_EXECUTABLE(hello ${SRC_LIST}) genera un archivo ejecutable llamado hola, y la variable de lectura del archivo fuente es SRC_LIST

06

Introducción al árbol de directorios después de la compilación

(1. Información general

Este artículo todavía toma el proyecto de la libreta de direcciones como ejemplo.

Utilice la herramienta de inicialización eosio-init para crear un proyecto de contrato inteligente con un nombre de proyecto personalizado. Agregue la ruta del proyecto creado después de --path= y agregue el nombre del proyecto creado después de --project=. Ejecute el siguiente comando para obtener una libreta de direcciones de proyecto vacía de contrato inteligente:

eosio-init --path=. --project=addressbook

Hay una carpeta de compilación vacía en el proyecto, ingrese el directorio de compilación y ejecute el comando:

cmake ..

La directiva generará construcciones basadas en los archivos CMakeLists.txt en las carpetas raíz y src. Todos los archivos temporales se generarán en el directorio de compilación sin ningún impacto en los archivos de origen, también conocidos como compilaciones externas.

El contenido del archivo CMakeLists.txt en el directorio raíz es el siguiente:

include(ExternalProject)
# if no cdt root is given use default path
if(EOSIO_CDT_ROOT STREQUAL "" OR NOT EOSIO_CDT_ROOT)
   find_package(eosio.cdt)
endif()

ExternalProject_Add(
   addressbook_project
   SOURCE_DIR ${CMAKE_SOURCE_DIR}/src
   BINARY_DIR ${CMAKE_BINARY_DIR}/addressbook
   CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=${EOSIO_CDT_ROOT}/lib/cmake/eosio.cdt/EosioWasmToolchain.cmake
   UPDATE_COMMAND ""
   PATCH_COMMAND ""
   TEST_COMMAND ""
   INSTALL_COMMAND ""
   BUILD_ALWAYS 1
)

El archivo especifica la forma de la construcción externa, la ubicación de la carpeta de origen después de la construcción y la configuración relacionada con eosio.

El archivo CMakeLists.txt en src es el siguiente:

project(addressbook)

set(EOSIO_WASM_OLD_BEHAVIOR "Off")
find_package(eosio.cdt)

add_contract( addressbook addressbook addressbook.cpp )
target_include_directories( addressbook PUBLIC ${CMAKE_SOURCE_DIR}/../include )
target_ricardian_directory( addressbook ${CMAKE_SOURCE_DIR}/../ricardian )

El documento dice:

  • proyectoNombre del proyecto

  • Todos los archivos cpp involucrados en el contrato add_contract

  • La ubicación de almacenamiento del archivo de encabezado del contrato target_include_directories

  • La ubicación de almacenamiento del contrato ricardiano del contrato target_ricardian_directory

Después de ejecutar cmake, se crearán los siguientes archivos en la carpeta de compilación:

├── addressbook 空文件夹
├── addressbook_project-prefix 项目前缀文件夹
├── CMakeFiles CMake版本文件夹
├── cmake_install.cmake 安装文件
├── CMakeCache.txt Cache文件
└── Makefile CMake初始化文件

Ejecute el siguiente comando para completar la compilación:

make

Después de ejecutarse con éxito, la carpeta de la libreta de direcciones generará el siguiente contenido:

├── CMakeFiles CMake版本文件夹
├── addressbook.abi 应用程序二进制接口文件
├── addressbook.wasm WebAssembly文件
├── cmake_install.cmake 安装文件
├── CMakeCache.txt Cache文件
└── Makefile CMake初始化文件

(2) conjunto de archivos CMake

La carpeta CMakeFiles, el archivo cmake_install.cmake, el archivo CMakeCache.txt y el archivo Makefile son todos archivos relacionados con CMake generados por el comando cmake. Este conjunto de archivos aparecerá repetidamente en el directorio de carpetas creado automáticamente y, por lo general, no es necesario cambiarlo.

1. Carpeta CMakeFiles

Varios archivos relacionados con la versión de CMake y el inicio del proyecto se almacenan en la carpeta CMakeFiles.

2. archivo cmake_install.cmake

cmake_install.cmake instala el script para el directorio del proyecto, instala el nombre de configuración y los componentes.

# Install script for directory: /home/xxx/biosboot/genesis/addressbook

# Set the install prefix
if(NOT DEFINED CMAKE_INSTALL_PREFIX)
  set(CMAKE_INSTALL_PREFIX "/usr/local")
endif()
string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")

# Set the install configuration name.
if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)
  if(BUILD_TYPE)
    string(REGEX REPLACE "^[^A-Za-z0-9_]+" ""
           CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}")
  else()
    set(CMAKE_INSTALL_CONFIG_NAME "")
  endif()
  message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"")
endif()

# Set the component getting installed.
if(NOT CMAKE_INSTALL_COMPONENT)
  if(COMPONENT)
    message(STATUS "Install component: \"${COMPONENT}\"")
    set(CMAKE_INSTALL_COMPONENT "${COMPONENT}")
  else()
    set(CMAKE_INSTALL_COMPONENT)
  endif()
endif()

# Install shared libraries without execute permission?
if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE)
  set(CMAKE_INSTALL_SO_NO_EXE "1")
endif()

# Is this installation the result of a crosscompile?
if(NOT DEFINED CMAKE_CROSSCOMPILING)
  set(CMAKE_CROSSCOMPILING "FALSE")
endif()

if(CMAKE_INSTALL_COMPONENT)
  set(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INSTALL_COMPONENT}.txt")
else()
  set(CMAKE_INSTALL_MANIFEST "install_manifest.txt")
endif()

string(REPLACE ";" "\n" CMAKE_INSTALL_MANIFEST_CONTENT
       "${CMAKE_INSTALL_MANIFEST_FILES}")
file(WRITE "/home/ljy/biosboot/genesis/addressbook/addressbook/build/${CMAKE_INSTALL_MANIFEST}"
     "${CMAKE_INSTALL_MANIFEST_CONTENT}")

3. Archivo CMakeCache.txt

El archivo CMakeCache.txt describe algunos valores de inicialización establecidos y utilizados por CMake. Si necesita cambiarlo, puede editar el archivo y guardar y salir.

# This is the CMakeCache file.
# For build in directory: /home/xxx/biosboot/genesis/addressbook/build
# It was generated by CMake: /usr/bin/cmake
# You can edit this file to change values found and used by cmake.
# If you do not want to change any of the values, simply exit the editor.
# If you do want to change a value, simply edit, save, and exit the editor.
# The syntax for the file is as follows:
(文件的语法如下:)
# KEY:TYPE=VALUE
(键:类型=值)
# KEY is the name of a variable in the cache.
(KEY是缓存中变量的名称。)
# TYPE is a hint to GUIs for the type of VALUE, DO NOT EDIT TYPE!.
(TYPE是对GUI的VALUE类型的提示,请勿编辑TYPE!。)
# VALUE is the current value for the KEY.
(VALUE是KEY的当前值。)

4. Archivo de creación

Los archivos Makefile son generados automáticamente por el generador Unix Makefiles según la versión, por favor no los edite. Ejecuta el destino predeterminado cuando no hay argumentos para generar.

# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 3.16

# Default target executed when no arguments are given to make.
default_target: all

.PHONY : default_target

# Allow only one "make -f Makefile2" at a time, but pass parallelism.
.NOTPARALLEL:

(3) Libreta de direcciones de carpetas de proyectos

Una vez completada la construcción, además del conjunto de archivos CMake, hay dos archivos addressbook.abi y addressbook.wasm en la carpeta del proyecto.

addressbook.abi es el archivo de interfaz binaria de la aplicación ABI (Application Binary Interface). Describe la interfaz de bajo nivel entre una aplicación y el sistema operativo, entre una aplicación y sus bibliotecas, o entre los componentes de una aplicación.

El ABI cubre varios detalles tales como:

  • Tamaño, diseño y alineación de los tipos de datos;

  • Convención de llamada (controla cómo se pasan los parámetros de la función y cómo se acepta el valor de retorno);

  • Qué registro se usa para qué parámetro de función, si el primer parámetro de función pasado a través de la pila se coloca en la pila primero o último;

  • Codificación de llamadas al sistema y cómo una aplicación realiza llamadas al sistema operativo;

  • En un sistema operativo completo ABI, el formato binario de archivos de objetos, bibliotecas de programas, etc.

El archivo .abi define cómo se calculan los datos dentro y fuera del motor WASM.

addressbook.wasm es un archivo WebAssembly, un nuevo formato que es portátil, de tamaño pequeño, de carga rápida y compatible con la Web. WebAssenbly no es un lenguaje de programación, sino un objetivo de compilación de un compilador. El archivo .wasm puede considerarse como el archivo generado después de compilar el archivo .cpp. Un archivo .wasm es el código binario ejecutado por el motor WebAssembly en la cadena de bloques. El motor WebAssembly está alojado en un demonio de nodeos y ejecuta código de contrato inteligente.

(4) Carpeta de prefijo del proyecto addressbook_project-prefix

La carpeta temporal generada por cmake contiene dos carpetas, src y tmp. La mayoría de ellos son archivos vacíos o instrucciones cmd relacionadas con cmake.

Acceso informático al portal web de DDC

ddc.bsnbase.com

-FIN-

Supongo que te gusta

Origin blog.csdn.net/BSN_yanxishe/article/details/130809535
Recomendado
Clasificación