Ethereum construye y trufa compila e implementa contratos inteligentes

Ethereum construye, compila e implementa contratos inteligentes

Dado que la empresa va a construir un proyecto nft, intenta construir una cadena privada de Ethereum en centos y ubuntu, todos los cuales son exitosos y se pueden compilar y desplegar usando truffle.A continuación se registran los problemas encontrados y las soluciones. sugiero mirar primero la cuenta de Ethereum y el contrato
.

construir centos

  1. Instalar dependencias relacionadas

yum actualizar -y && yum instalar git wget bzip2 vim gcc-c++ ntp epel-release nodejs árbol -y

  1. Descarga el paquete de instalación, puedes elegir la versión que quieras aquí https://geth.ethereum.org/downloads/, copia el enlace a wget

wget -c https://gethstore.blob.core.windows.net/builds/geth-alltools-linux-amd64-1.9.24-cc05b050.tar.gz ./

  1. descomprimir

tar -zxvf geth-alltools-linux-amd64-1.9.24-cc05b050.tar.gz

  1. Copie los comandos relevantes directamente en el contenedor

cp ./abigen /usr/local/bin/abigen
cp ./bootnode /usr/local/bin/bootnode
cp ./clef /usr/local/bin/clef
cp ./evm /usr/local/bin/evm
cp . /geth /usr/local/bin/geth
cp ./puppeth /usr/local/bin/puppeth
cp ./rlpdump /usr/local/bin/rlpdump
5.查看
版本 versión geth

construir en ubuntu

add-apt-repository -y ppa:ethereum/ethereum
apt-get update
apt-get install ethereum
geth version

Empezar Ethereum

  1. Cree un archivo de génesis antes de comenzar a inicializar el bloque de génesis, que es equivalente al nodo principal de la cadena de bloques.

    mkdir private_Eth //Cree una carpeta para colocar archivos relacionados
    cd private_Eth //Cree un archivo json en esta ruta
    vim genesie.json //El sistema viene con vi, vim debe descargarse solo

    El contenido del archivo es el siguiente:

{ "config": { "chainId": 666, "homesteadBlock": 0, "eip150Block": 0, "eip150Hash": "0x00000000000000000000000000000000000000000000000000000000000000000", "eip 155Block”: 0, “eip158Block”: 0, “byzantiumBlock”: 0, "constantinopleBlock": 0, "petersburgBlock": 0, "istanbulBlock": 0, "ethash": {} }, "nonce": "0x0", "timestamp": "0x5ddf8f3e", "extraData": "0x0000000000000000000000000000000000000000000000 000000000000000000000”, “gasLimit”: “0xffffffff”, “dificultad”: “0x00002”, “mixHash”: “0x000000000000000000000000000000000000000000000000000000000000000000”,



















“coinbase”: “0x00000000000000000000000000000000000000000”,
“alloc”: { }, “number”: “0x0”, “gasUsed”: “0x0”, “parentHash”: “0x00000000000000000000000000000000000 00000000000000000000000000000000” }




  1. Inicialice el parámetro del bloque de creación con el archivo anterior: datadir especifica la carpeta utilizada para almacenar datos

mkdir data
geth --datadir data init genesis.json

  1. Inicio Ethereum, con explicación de algunos parámetros

geth --datadir dataA --nodiscover --networkid 333 --ipcdisable --port 1111 --rpcport 2222 --http --http.corsdomain=“” --http.port 8545 --http.addr 0.0.0.0 -- consola de permiso-inseguro-desbloqueo

geth --datadir data --networkid 1337 --http --http.corsdomain=“*” --http.port 8545 --http.addr “0.0.0.0” --allow-insecure-unlock --rpc.allow- desprotegido-txs --puerto 30303 --dev --dev.periodo 1 consola 2>>geth.log

Especifique el directorio de datos: datadir
permite desbloquear la cuenta: allow-insecure-unlock (si no se agrega este parámetro, el desbloqueo de la cuenta fallará al ejecutar personal.unlockAccount(), y el contrato no se puede implementar) puerto de conexión: http.port
8545
para ingresar a la consola interactiva La consola
especifica el archivo de registro >>geth.log
Para obtener más explicaciones sobre los parámetros, consulte este https://blog.csdn.net/pulong0748/article/details/109027085

Compile e implemente contratos inteligentes con truffle

Puede consultar directamente el tutorial introductorio en el sitio web oficial de truffle https://trufflesuite.com/docs/truffle/quickstart
Aquí, se recomienda instalar truffle directamente con ubuntu. Hay demasiados problemas ambientales en Windows. Yo uso la máquina virtual ubuntu Se omite cómo instalar la máquina virtual.

  1. Instale npm primero

apt install npm
npm -g install npm //actualizar npm

  1. instalar trufa

npm install -g trufa

  1. Obtenga plantillas de proyectos con trufa

mkdir MetaCoin
cd MetaCoin
truffle unbox metacoin //Hay un problema de red aquí, y la plantilla del proyecto no se puede obtener directamente. Vaya directamente a git para descargar el archivo zip y descomprima el enlace git. Hay otra manera, directamente truffle init puede
generar la plantilla de proyecto más simple

La estructura del directorio del proyecto después de la descompresión se muestra en la siguiente figura, truffle-config.js está vacío por defecto Estructura del directorio del proyecto5. Compile

compilación de trufas

inserte la descripción de la imagen aquí

  1. Implementación: si no cambia el archivo de configuración truffle-config.js, se implementará en la cadena integrada de truffle de manera predeterminada (la primera cuenta que viene con truffle se usa para la implementación de manera predeterminada), ingrese truffle para desarrollar ingrese al modo interactivo y luego ingrese migrar para implementar.
    inserte la descripción de la imagen aquí
    Si desea implementar en la cadena privada del servidor (yo uso centos), debe cambiar el archivo de configuración truffle-config.js, luego crear una cuenta en la cadena privada de centos, desbloquear la cuenta y dejar entrar a los mineros. la cadena comienza a minar, de lo contrario,
    el archivo de configuración y se agregará la ip y el puerto del servidor
    inserte la descripción de la imagen aquí

centos crear una cuenta
inserte la descripción de la imagen aquí

ver todas las cuentasver cuenta

Desbloquea la cuenta
inserte la descripción de la imagen aquí
y comienza a minar
inserte la descripción de la imagen aquí

Use web3j para compilar,
implementar y llamar al contrato. Si desea usar web3j para compilar e implementar en java, y llamar al contrato, debe generar la versión java del contrato. Hay varias formas de generarlo. Aquí Elijo usar la herramienta de línea de comando web3j para generarlo en Ubuntu (la premisa es Equipado con jdk y truffle)
instalar JDK

https://blog.csdn.net/qq_37034181/article/details/120673562


La forma más sencilla de instalar Web3j CLI es mediante el siguiente script :

curl -L get.web3j.io | sh && fuente ~/.web3j/fuente.sh

web3j genera el archivo java del contrato.
Antes de generarlo, debe compilar el archivo de solidez con trufas (el método de operación es como la compilación de trufa anterior), de modo que obtenga el archivo json del contrato (almacenado en la compilación carpeta)
inserte la descripción de la imagen aquí

Después de eso, llame al comando web3j

web3j generar truffle --truffle-json ./MetaCoin.json -o /home/hqz/Desktop -p com.hqz //-o es la salida, especificando la ruta de salida, -p es el paquete que especifica el nombre del paquete

Aquí hay un archivo de contrato simple que escribí para probar
inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí

Después de obtener el archivo java del contrato, colóquelo en el proyecto java y llame a
inserte la descripción de la imagen aquí
este método para implementar el contrato y llamar al método del contrato, pero parece que los datos no se pueden colocar en el registro de la transacción, por lo que llama directamente a la interfaz de transferencia de Ethereum puede poner los datos en el registro de transacciones, porque los datos están en hexadecimal en Ethereum, por lo que es necesario codificar la cadena: convertir la cadena a unicode y luego convertirla a hexadecimal. El siguiente es el registro de transacciones
Registro de la transacción

Interconexión de nodos de blockchain

admin.nodeInfo.enode //Información actual del nodo
admin.addPeer() //Comando Agregar nodo

Encontró muchos problemas, ha habido muchas veces cuando la conexión falló, y finalmente concluyó que los archivos de génesis de diferentes nodos deben ser los mismos, y se debe prestar atención a los parámetros del comando de inicio

{ "config": { "chainId": 666, "homesteadBlock": 0, "eip150Block": 0, "eip150Hash": "0x00000000000000000000000000000000000000000000000000000000000000000", "eip 155Block”: 0, “eip158Block”: 0, “byzantiumBlock”: 0, "constantinopleBlock": 0, "petersburgBlock": 0, "istanbulBlock": 0, "ethash": {} }, "nonce": "0x0", "timestamp": "0x5ddf8f3e", "extraData": "0x0000000000000000000000000000000000000000000000 000000000000000000000”, “gasLimit”: “0xffffffff”, “dificultad”: “0x00002”, “mixHash”: “0x000000000000000000000000000000000000000000000000000000000000000000”,



















“coinbase”: “0x00000000000000000000000000000000000000000”,
“alloc”: { }, “number”: “0x0”, “gasUsed”: “0x0”, “parentHash”: “0x00000000000000000000000000000000000 00000000000000000000000000000000” }




geth --datadir dataB --nodiscover --networkid 333 --ipcdisable --port 3333 --rpcport 4444 --http --http.corsdomain=“” --http.port 8545 --http.addr 0.0.0.0 -- allow-insecure-unlock --http.api “eth,net,web3,txpool” consola

–rpc.txfeecap 0 --rpc.gascap 0

Complemente la solución de que Java no puede llamar a la interfaz de cadena de bloques
: http.api "eth, net, web3, txpool, personal"

Supongo que te gusta

Origin blog.csdn.net/Heqinze/article/details/124432658
Recomendado
Clasificación