Ir al código fuente en segundo plano
Primero comprendamos los principios básicos de las llamadas de contratos inteligentes. Los contratos inteligentes se ejecutan en el EVM del nodo Ethereum. Por lo tanto, si desea invocar un contrato, debe visitar un nodo.
Tomemos el programa back-end como ejemplo. Si el servicio backend quiere conectarse al nodo, existen dos posibilidades. Una es que ambas partes están en el mismo host. En este momento, el nodo de conexión de backend puede utilizar el mecanismo local IPC (comunicación entre procesos) o el mecanismo RPC (llamada a procedimiento remoto). En otro caso, las dos partes no están en el mismo host y solo pueden comunicarse mediante el mecanismo RPC.
Hablando de RPC, los lectores deberían tener una idea de los parámetros de inicio de Geth. Cuando se inicia Geth, puede elegir iniciar el servicio RPC y el puerto de servicio predeterminado correspondiente es 8545. .
Entonces, echemos un vistazo al proceso de operación de contratos inteligentes.
El proceso de ejecución de los contratos inteligentes es que el servicio back-end se conecta a un nodo y envía llamadas (transacciones) de contrato inteligente al nodo. Después de verificar la legalidad de la transacción, el nodo la transmite a toda la red y los mineros la empaquetan en bloques para indicar la confirmación y finalización de la transacción.
Al igual que las bases de datos, cada plataforma blockchain proporcionará SDK (kit de desarrollo de software) para los principales lenguajes de desarrollo. Dado que Geth está escrito en lenguaje Go, si desea utilizar el lenguaje Go para conectar nodos y enviar transacciones, puede importar directamente el paquete go-ethereum (código fuente de Geth) al proyecto. El problema restante es el proceso y la API.
Para resumir, los dos puntos clave para llamar a contratos inteligentes son los nodos y el SDK.
Debido a que IPC requiere que el backend y el nodo estén en el mismo host, muchos desarrolladores usarán el modo RPC. Además de RPC, Ethereum también proporciona a los desarrolladores la interfaz json-rpc, que no se tratará en este artículo.
A continuación se describe cómo utilizar el lenguaje Go y la biblioteca de código fuente go-ethereum para implementar llamadas de contratos inteligentes. Hay pasos fijos. Primero hablemos de los pasos generales, tomando el siguiente contrato como ejemplo.
Paso 01: Compile el contrato y obtenga el contrato ABI (Application Binary Interface). Haga clic en el botón abi, copie la información de abi del contrato y péguela en el archivo calldemo.abi (el archivo se puede crear usando el IDE del idioma Go, el nombre del archivo se puede personalizar y el sufijo es preferiblemente ABI).
Es mejor guardar calldemo.abi en un único directorio. Solo puedes ver el archivo calldemo.abi ingresando el comando "ls". El efecto de referencia es el siguiente:
Paso 02: Obtener la dirección del contrato. Tenga en cuenta que el contrato se implementará en los nodos Geth. Por lo tanto, seleccione el entorno como proveedor Web3.
Seleccione "Proveedor Web3" en el cuadro de opciones del entorno y luego haga clic en el botón implementar.
Después del despliegue, la dirección del contrato es 0xa 09209 c 28 AEF 59 a 4653 b 905792 a 910 e 78 e 7407.
Paso 03: utilice la herramienta abigen (programa ejecutable en el kit de herramientas Geth) para compilar el contrato inteligente en código Go. La herramienta Abigen se utiliza para convertir archivos abi en código Go. El comando es el siguiente:
El significado de cada parámetro es el siguiente. (1)abi: especifique el archivo abi entrante. (2) Tipo: especifique el tipo de estructura básica en el archivo de salida. (3)pkg: especifique el nombre del paquete del archivo de salida. (4)salida: especifique el nombre del archivo de salida. Después de la ejecución, verá el archivo funcdemo.go en el directorio de códigos. Los lectores pueden abrir el archivo y disfrutarlo, pero tengan cuidado de no modificarlo.
Paso 04: Crea main.go y completa el siguiente código. Anote la dirección del contrato posterior a la implementación en la función HexToAddress en el código, que se obtiene en el paso 01.
Paso 04: Configura go mod para reconocer proyectos automáticamente.
Como se mencionó anteriormente, si desea utilizar el lenguaje Go para llamar a contratos inteligentes, debe descargar el proyecto go-ethereum. Puede usar el siguiente comando:
Este comando lo hará. descargue automáticamente go-ethereum a "$gopath/src/github. com/ether eum/go-ether eum", nada mal. Sin embargo, el lenguaje Go ha agregado un modo de proyecto de gestión de módulos a partir de la versión 1.11. Siempre que go mod esté configurado, no necesita preocuparse por descargar proyectos dependientes.
A continuación, configura el módulo para que surta efecto, GOPROXY. Estos comandos son los siguientes:
En el proyecto, realice la inicialización y calldemo puede personalizar el nombre.
Paso 05: Ejecute el código. Ejecute el código y verá el efecto a continuación y el resultado final en 2020.
Como se puede ver en la información de salida anterior, el lenguaje Go descargará automáticamente los archivos dependientes. Esta es la magia de go mod. Después de ver 2020, creo que los lectores también saben que los resultados de la puntuación acumulada son correctos.