J'ai implémenté ma blockchain personnelle en utilisant node js pour des utilisations IoT et je veux maintenant déployer du code de contrat intelligent dans cette blockchain sans utiliser geth ou tuffle ou ganache OU Remix ou web3.js donc mon but est d'utiliser EVM API
juste pour compiler et exécuter un contrat intelligent. Alors, comment ?
Réponses
Trop de publicités?Vous pouvez consulter les spécifications du contrat ABI
Suivez aquí
L'interface binaire d'application (ABI) du contrat est la manière standard de d'interagir avec les contrats dans l'écosystème Ethereum, à la fois de l'extérieur de la la blockchain que pour l'interaction entre contrats. Les données sont codées en fonction de leur type, comme décrit dans cette spécification. Le codage de codage n'est pas autodécrivant et nécessite donc un schéma pour être décoder.
Aussi,
Pour intégrer Ethereum, il faut un nœud client Ethereum tel que Geth, parity
, quorum
etc. avec RPC / IPC activé.
Si vous souhaitez simplement récupérer les données existantes des contrats, ou envoyer des transactions signées hors ligne à partir de la chaîne publique d'Ethereum, vous pouvez simplement utiliser un nœud public tel que Infura
sans avoir besoin d'installer un client local comme Parity ou Geth.
Pour le développement de contrats intelligents, vous pouvez également installer Test RPC
qui va créer un réseau en mémoire sans truffe ni ganache.
testrpc est un client Ethereum basé sur Node.js pour les tests et le développement. développement. Il utilise ethereumjs pour simuler le comportement complet du client et pour et rendre le développement d'applications Ethereum beaucoup plus rapide. Il inclut également fonctions et caractéristiques RPC populaires (comme les événements) et peut être exécuté déterministe pour faire du développement un jeu d'enfant.
pour plus de détails sur testrpc , suivre aquí
Pour installer testrpc
npm install -g ethereumjs-testrpc
Note
Ganache CLI est la dernière version de TestRPC : un émulateur de blockchain rapide et personnalisable. émulateur de blockchain. Il vous permet d'effectuer des appels à la blockchain sans les frais généraux de l'exécution d'un nœud Ethereum réel.
Pour installer ganache-cli
npm install -g ganache-cli
Étapes:-
-
Créer un contrat intelligent pour une application iot.
-
Compiler le contrat à l'aide du compilateur solc solidity pour nodejs
-
A partir de l'objet contrat JS compilé, récupérez l'objet interface.
La chaîne de caractères du bytecode, qui est la représentation binaire du contrat est fondamentalement un ensemble d'instructions d'assemblage (en quelque sorte) pour que la machine virtuelle d'Ethereum les exécute.
-
Déployer le contrat sur le réseau testrpc
aquí est la solution détaillée sans utiliser de truffe ou de ganache
Pour déployer uniquement en utilisant le Bytecode
Voir aussi pour déployer en utilisant uniquement le bytecode : aquí y aquí et le Papier jaune
Compilez votre contrat (le fichier résultat est /build/contracts/YourContract.json) puis déployez-le sans truffe :
// Dependencies
const Web3 = require('web3');
const fs = require("fs");
// Load Parameter
let PROVIDER = ...
let FROM_ACCOUNT = ...
let FROM_PRIVATE_KEY = ...
// Create web3 instance
const web3 = new Web3(new Web3.providers.HttpProvider(PROVIDER), null, {transactionConfirmationBlocks: 1});
// Deploy
web3.eth.getTransactionCount(FROM_ACCOUNT)
.catch(e => {
console.log(e);
})
.then(txCount => {
// construct the transaction data
const txData = {
nonce: web3.utils.toHex(txCount),
from: FROM_ACCOUNT,
data: JSON.parse(fs.readFileSync('./build/contracts/YourContract.json', 'utf8')).bytecode,
gasLimit: web3.utils.toHex(7900000),
gasPrice: web3.utils.toHex(web3.utils.toWei('12', 'gwei')),
};
console.log('nonce : ' + txData.nonce);
console.log('gasPrice : ' + txData.gasPrice);
// contract creation
web3.eth.accounts.signTransaction(txData, FROM_PRIVATE_KEY).then(signed => {
console.log('sign transaction : OK');
web3.eth.sendSignedTransaction(signed.rawTransaction)
.on("error", error => {
console.log('send transaction : ' + error);
throw "DEPLOY FAILED";
})
.on("receipt", (receipt) => {
console.log('send transaction : OK');
let contractAddress = (receipt.contractAddress === null) ? 'n.a.' : receipt.contractAddress;
console.log("CONTRACT_ADDRESS : " + contractAddress);
});
});
});
});
Dépendances web3 v1.2.1 et fs v0.0.2