Ethereum construit, compile et déploie des contrats intelligents
Ethereum construit, compile et déploie des contrats intelligents
Puisque l'entreprise va construire un projet nft, elle essaie de construire une chaîne privée Ethereum en centos et ubuntu, qui réussissent toutes, et peuvent être compilées et déployées à l'aide de truffle.Ce qui suit enregistre les problèmes rencontrés et les solutions. suggérons de regarder d'abord le compte Ethereum et le contrat
.
construction de centos
- Installer les dépendances associées
yum update -y && yum install git wget bzip2 vim gcc-c++ ntp epel-release nodejs tree -y
- Téléchargez le package d'installation, vous pouvez choisir la version que vous voulez ici https://geth.ethereum.org/downloads/, copiez le lien vers wget
wget -c https://gethstore.blob.core.windows.net/builds/geth-alltools-linux-amd64-1.9.24-cc05b050.tar.gz ./
- décompresser
tar -zxvf geth-alltools-linux-amd64-1.9.24-cc05b050.tar.gz
- Copiez les commandes pertinentes directement dans le bac
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.
Version plus récente de geth
construire sur ubuntu
add-apt-repository -y ppa:ethereum/ethereum
apt-get update
apt-get install ethereum
geth version
Démarrer Ethereum
-
Créez un fichier genesis avant de commencer à initialiser le bloc genesis, qui équivaut au nœud principal de la blockchain
mkdir private_Eth //Créer un dossier pour mettre les fichiers associés
cd private_Eth //Créer un fichier json dans ce chemin
vim genesie.json //Le système est livré avec vi, vim doit être téléchargé par lui-mêmeLe contenu du fichier est le suivant :
{ "config": { "chainId": 666, "homesteadBlock": 0, "eip150Block": 0, "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000", "eip1 55Block": 0, "eip158Block": 0, "byzantiumBlock": 0, "constantinopleBlock": 0, "petersburgBlock": 0, "istanbulBlock": 0, "ethash": {} }, "nonce": "0x0", "timestamp": "0x5ddf8f3e", "extraData": "0x000000000000000000000000000000000000000000 0000000000000000000", "gasLimit": "0xffffffff", "difficulté": "0x00002", "mixHash": "0x00000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x000000000000000000000000000000000000000",
"alloc": { }, "number": "0x0", "gasUsed": "0x0", "parentHash": "0x00000000000000000000000000000000 000000000000000000000000000000 » }
- Initialisez le paramètre de bloc de création avec le fichier ci-dessus - datadir spécifie le dossier utilisé pour stocker les données
mkdir data
geth --datadir data init genesis.json
- Démarrer Ethereum, avec explication de certains paramètres
geth --datadir dataA --nodiscover --networkid 333 --ipcdisable --port 1111 --rpcport 2222 --http --http.corsdomain=“” --http.port 8545 --http.addr 0.0.0.0 -- console d'autorisation de déverrouillage non sécurisé
geth --datadir data --networkid 1337 --http --http.corsdomain=“*” --http.port 8545 --http.addr “0.0.0.0” --allow-insecure-unlock --rpc.allow- unprotected-txs --port 30303 --dev --dev.period 1 console 2>>geth.log
Spécifiez le répertoire de données – datadir
permet de déverrouiller le compte – allow-insecure-unlock (si ce paramètre n'est pas ajouté, le déverrouillage du compte échouera lors de l'exécution de personal.unlockAccount(), et le contrat ne peut pas être déployé) port de connexion – http.port
8545
pour entrer dans la console interactive La console
spécifie le fichier journal >>geth.log
Pour plus d'explications sur les paramètres, reportez-vous à ce https://blog.csdn.net/pulong0748/article/details/109027085
Compiler et déployer des contrats intelligents avec truffle
Vous pouvez directement vous référer au tutoriel d'introduction sur le site officiel de truffle https://trufflesuite.com/docs/truffle/quickstart
Ici, il est recommandé d'installer truffle directement avec ubuntu. Il y a trop de problèmes d'environnement dans windows. J'utilise la machine virtuelle Ubuntu. La procédure d'installation de la machine virtuelle est ignorée.
- Installez d'abord npm
apt install npm
npm -g install npm //upgrade npm
- installer la truffe
npm install -g truffe
- Obtenez des modèles de projet avec truffle
mkdir MetaCoin
cd MetaCoin
truffle unbox metacoin // Il y a un problème de réseau ici, et le modèle de projet ne peut pas être obtenu directement. Allez directement sur git pour télécharger le fichier zip et décompressez le lien git . Il existe un autre moyen, directement truffle init peut
générer le modèle de projet le plus simple
La structure du répertoire du projet après décompression est illustrée dans la figure ci-dessous, truffle-config.js est vide par défaut 5. Compiler
compilation de truffes
- Déploiement : si vous ne modifiez pas le fichier de configuration truffle-config.js, il sera déployé sur la chaîne intégrée de truffle par défaut (le premier compte fourni avec truffle est utilisé pour le déploiement par défaut), entrez truffle develop pour entrez dans le mode interactif, puis entrez migrate pour déployer.
Si vous souhaitez déployer sur la chaîne privée du serveur (j'utilise centos), vous devez modifier le fichier de configuration truffle-config.js, puis créer un compte dans la chaîne privée centos, déverrouiller le compte et laisser les mineurs entrer la chaîne démarre l'extraction, sinon
le fichier de configuration , et l'adresse IP et le port du serveur seront ajoutés
centos créer un compte
voir tous les comptes
Déverrouillez le compte
et commencez à miner
Utilisez web3j pour compiler,
déployer et appeler le contrat. Si vous souhaitez utiliser web3j pour compiler et déployer en Java, et appeler le contrat, vous devez générer la version Java du contrat. Il existe plusieurs façons de le générer. Ici Je choisis d'utiliser l'outil de ligne de commande web3j pour le générer dans Ubuntu (le principe est d'être équipé de jdk et de truffe)
installer JDK
https://blog.csdn.net/qq_37034181/article/details/120673562
La façon la plus simple d'installer la CLI Web3j est via le script suivant :
curl -L get.web3j.io | sh && source ~/.web3j/source.sh
web3j génère le fichier java du contrat.
Avant de le générer, vous devez compiler le fichier solidity avec des truffes (la méthode d'opération est comme la compilation truffle ci-dessus), afin que vous obteniez le fichier json du contrat (stocké dans le build dossier)
Après cela, appelez la commande web3j
web3j génère la truffe --truffle-json ./MetaCoin.json -o /home/hqz/Desktop -p com.hqz //-o est la sortie, en spécifiant le chemin de sortie, -p est le package en spécifiant le nom du package
Voici un simple fichier de contrat que j'ai écrit pour les tests
Après avoir obtenu le fichier java du contrat, placez-le dans le projet java et appelez
cette méthode pour déployer le contrat et appeler la méthode du contrat, mais les données semblent ne pas pouvoir être placées dans l'enregistrement de la transaction, donc appelez directement l'interface de transfert d'Ethereum peut mettre les données dans l'enregistrement de transaction, car les données sont en hexadécimal dans Ethereum, il est donc nécessaire d'encoder la chaîne : convertissez la chaîne en unicode, puis convertissez-la en hexadécimal. Voici l'enregistrement de transaction
Interconnexion des nœuds de la blockchain
admin.nodeInfo.enode //Informations sur le nœud actuel
admin.addPeer() //Ajouter une commande de nœud
A rencontré beaucoup de problèmes, il y a eu de nombreuses fois où la connexion a échoué, et a finalement conclu que les fichiers de genèse de différents nœuds doivent être les mêmes, et les paramètres de la commande de démarrage doivent être pris en compte
{ "config": { "chainId": 666, "homesteadBlock": 0, "eip150Block": 0, "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000", "eip1 55Block": 0, "eip158Block": 0, "byzantiumBlock": 0, "constantinopleBlock": 0, "petersburgBlock": 0, "istanbulBlock": 0, "ethash": {} }, "nonce": "0x0", "timestamp": "0x5ddf8f3e", "extraData": "0x000000000000000000000000000000000000000000 0000000000000000000", "gasLimit": "0xffffffff", "difficulté": "0x00002", "mixHash": "0x00000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x000000000000000000000000000000000000000",
"alloc": { }, "number": "0x0", "gasUsed": "0x0", "parentHash": "0x00000000000000000000000000000000 000000000000000000000000000000 » }
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" console
–rpc.txfeecap 0 --rpc.gascap 0
Complétez la solution que java ne peut pas appeler l'interface blockchain
- http.api "eth, net, web3, txpool, personal"