Déclaration : Voici le document « Guide mondial de développement de la concurrence des applications blockchain Xunlei » rédigé par Xunlei Company, pourquoi utiliser ce document rédigé comme guide de développement blockchain ?
Thunder est en réalité une chaîne privée construite avec des smart contracts Ethereum, la technologie est très avancée, et elle fait l’objet de recherches approfondies sur la technologie blockchain, ce qui a une importance directrice pour notre développement blockchain.
Comme le dit le proverbe, « tirez des conclusions d’un exemple », nous pouvons développer d’autres applications blockchain en lisant le guide de développement blockchain rédigé par Xunlei, grâce à Xunlei.
Le document se lit comme suit :
1/16 Guide mondial de développement de la concurrence des applications blockchain Thunder Développement du contrat dans la recommandation de la ligne 1. Avant de rédiger des contrats intelligents, vous devez avoir une certaine compréhension des fondamentaux de la blockchain (en pièce jointe : Aperçu d’Ethereum). 2. Apprenez le langage Solidity (API Solidity). 3. Apprenez à utiliser le cadre truffle en combinaison avec l’apprentissage de la solidité. Utilisez la truffe pour développer localement Exécutez des contrats dans un environnement blockchain. 4. Apprenez et utilisez zeppelin-solidty (un cadre contractuel standardisé dédié à la sécurité) et concevoir l’intégration Mode contrat, séparer les données et les contrats logiques, contrôler la sécurité des permissions, et envisager la logique de mise à niveau. 5. Apprenez à interagir avec les contrats en utilisant web3.js. Utilisez le plugin Metamask et le service web avec blockchain Interaction. 6. Questions et réponses sur le forum : http://wanke.xunlei.com/forum.php ? mod=forumdisplay&fid=53 (Tout problème rencontré peut être annulé sur ce forum.) Nous vous répondrons dans un délai de 3 jours ouvrés) Concepts de base Blockchain La blockchain est un système informatique décentralisé et distribué, dont la caractéristique principale est l’immuabilité permanente des données, Elle ne peut pas être falsifiée, et elle présente un haut degré d’ouverture, de transparence et de confiance. Les technologies clés incluent l’algorithme de consensus byzantin tolérant aux failles (PBFT), technologie de chiffrement, technologie P2P, etc. Transaction La blockchain peut être comprise comme un système de base de données de transactions partagé à l’échelle mondiale. Tout logiciel autorisé peut le lire Prenez les données du réseau blockchain. Lorsqu’il est nécessaire de modifier les données dans le réseau de blocs, une couverture doit être mise en place Il existe des requêtes acceptées par les nœuds blocs, qui sont collectivement appelées transactions dans le système. Les transactions sont transactionnelles et sont soumises à la blockchain, soit toutes, soit toutes exécutées. Un cadre commercial Une fois la ligne terminée, elle est sauvegardée définitivement sur la blockchain et ne peut plus être modifiée ou exécutée. Les transactions sont initiées et signées par le compte dans le système, et grâce à la cryptographie, les transactions ne peuvent être détenues que par la clé privée 2/16 Quelqu’un l’initie, d’autres ne peuvent ni modifier ni falsifier. Cela garantit l’authenticité et la sécurité de la transaction. Compte Il existe deux types de comptes dans le système blockchain : l’un est externe et l’autre est le compte contractuel. Compte externe détenu Vos propres clés publiques et privées uniques, et votre compte est contrôlé par cette paire de clés. Les comptes à terme ont leur propre code, et le compte est créé par Contrôle du code personnel. Le compte est identifié par une adresse, la longueur de l’adresse est la même, et il n’y a aucune différence entre les deux types de comptes. L’adresse du compte externe est fournie par La clé publique est générée, et l’adresse du contrat utilise l’adresse à partir de laquelle le compte contractuel a été créé ainsi que le nombre de transactions ayant généré le compte contractuel (nonce) est produit. Les contrats sont déployés par l’adresse officielle, et les comptes ordinaires ne peuvent pas publier directement les contrats. La combinaison de l’utilisateur Il doit être officiellement examiné et publié par Xunlei. Au sein du système, il n’y a aucune différence entre les deux types de comptes. Chaque compte contient 256 bits à l’intérieur du système La structure de stockage clé-valeur jusqu’à 256 bits est appelée stockage. Chaque compte a un solde appelé Le solde, dans Wei, peut être modifié en envoyant une transaction avec une valeur numérique au compte. Contrat Un contrat est un compte blockchain qui stocke le code, et l’appel contractuel est effectué en envoyant des transactions vers ce compte. Quand Le langage de programmation sous contrat plus populaire précédent était Solidity. Actuellement, le concours ne prend en charge que la soumission de contrats en langage Solidity. Le contrat est divisé en deux parties : le stockage des données et la fonction ; les données stockent l’état du contrat, et la fonction est le contrat L’interface externe réalise la requête des données et la modification d’état en appelant des fonctions. Rédigez un contrat via un langage de programmation, puis obtenez le bytecode EVM après la compilation. En envoyant une transaction au compte contractuel, le réel Appel contractuel en cours. Gaz Le gaz est l’unité de paiement de la blockchain, et lorsqu’une transaction est créée, une certaine quantité de gaz est spécifiée. Seigneur Si c’est pour limiter le montant du calcul sur la transaction et payer des frais pour l’exécution de la transaction. Lors de l’exécution de la transaction, Gas Elle sera consommée par une règle établie par l’EVM. Le prix du gaz est une valeur spécifiée par le créateur de la transaction et le nombre de frais nécessaires pour exécuter la transaction Le montant est Gas_Price*Essence. Fin de la transaction S’il reste du gaz, la portion restante est retournée à la suggestion du créateur utilisateurs. Si le gaz est insuffisant, l’exécution de la transaction échouera, et la transaction ne pourra pas empêcher les attaques par inondation pour la sécurité du système Les frais de manipulation ne sont pas remboursés. La plus petite unité de prix du gaz est le wei, 10^18 wei = 1 gramme de chaîne. Solidité 3/16 Solidity est un langage de programmation de haut niveau conçu pour les contrats intelligents, fonctionnant sur EVM (Ethereum). Virtual Machine)。 L’implémentation de la conception du langage est influencée par C++/Python/JavaScript. Solidity est un langage fortement typé qui supporte l’héritage, le polymorphisme, les interfaces, l’abstraction, les bibliothèques, les types de données personnalisés, et plus encore Le sexe. Solidity prend en compte la programmation d’instructions assembleur, et le code est compilé en bytecode et s’exécute sur l’EVM. La solidité est Le langage de développement des smart contracts le plus populaire est également celui recommandé et supporté par la plateforme Thunder Contract. Notes : 1. Ethereum Virtual Machine est un environnement virtuel sur Ethereum qui fournit un environnement d’exécution pour les contrats intelligents Machine simulée. La plateforme concurrente est compatible avec EVM, mais elle doit respecter les restrictions d’utilisation de la plateforme officielle. 2. Les types de comptes sont divisés en comptes externes (adresses ordinaires de comptes de trading) et comptes à terme. Créez un contrat Il s’agit du processus d’envoi d’une transaction à l’adresse de compte de destination 0. 3. Le concours spécifie l’utilisation de la truffe (truffle v4.1.5 solidity v0.4.21) pour développer des combinaisons intelligentes La plateforme vérifiera le bytecode selon le code source du document soumis par le participant. , Développer des contrats avec la truffe Cadre de développement solide de contrats intelligents. Il offre un ensemble complet de développement, de débogage et d’édition Traduction, déploiement et test d’environnements sur site. Vous pouvez utiliser rapidement la commande de déboître du modèle en fonction de certains modèles Générez la structure contractuelle correspondante. Installer Truffle NPM I -G truffe [root@opennode Sandai]# Version truffe Truffle v4.1.5 (cœur : 4.1.5) Solidity v0.4.21 (solc-js) Début 1. Initialiser le projet contractuel avec de la truffe 4/16 mkdir simple stockage Stockage simple sur CD Init truffe 2. Créer un nouveau fichier de contrat : Vous pouvez utiliser Truffle pour créer un contrat Vous pouvez également créer un nouveau fichier directement depuis la ligne de commande SimpleStorage contract/SimpleStorage.sol SimpleStorage.sol Pragma solidité ^0.4.21 ; contract SimpleStorage { uint myVariable ; function set(uint x) public { myVariable = x ;
} fonction get() rendements publics constants (uint) { return myVariable ;
}
} 3. Ajouter des scripts de migration : Vous pouvez utiliser Truffle Create Migration 2_deploy_contract méthode en ligne de commande est ajoutée, et vous pouvez aussi créer directement un nouveau fichier Migrations/2_deploy_contract.js 2_deploy_contract.js l’exécution de la migration de truffes L’ordre des lignes est lié au nom du fichier, donc plusieurs scripts de déploiement doivent être nommés dans l’ordre var SimpleStorage = artefacts.require(« SimpleStorage ») ; module.exports = function(deployer) { deployer.deploy (SimpleStorage) ; 5/16 }; 4. Exécutez le contrat de compilation truffle, et le contrat compilé se trouve dans le dossier de compilation. par contrat Un fichier json correspondant contient le bytecode, abiCode, etc. est nécessaire pour le déploiement 5. Modifier la truffle.js pour configurer le contrat de déploiement de truffles et la connexion RPC afin d’interagir avec la blockchain. [root@localhost opennode]# vi truffle.js module.exports = {
networks: {
development: {
host: "127.0.0.1",
port: 8545, network_id : « * »
}
} }; 6. Activez l’environnement blockchain par défaut de Truffle sur la console. Développement de la truffe Truffle Develop a débuté à
http://127.0.0.1:9545/
Accounts: (0) 0x627306090abab3a6e1400e9345bc60c78a8bef57 (1) 0xf17f52151ebef6c7334fad080c5704d77216b732 (2) 0xc5fdf4076b8f3a5357c5e395ab970b5b54098fef (3) 0x821aea9a577a9b44299b9c15c88cf3087f3b5544 (4) 0x0d1d4e623d10f9fba5db95830f7d3839406c6af2 (5) 0x2932b7a2355d6fecc4b5c0b6bd44cc31df247a2e (6) 0x2191ef87e392377ec08e7c08eb105ef5448eced5 (7) 0x0f4f2ac550a1b4e2280d04c21cea7ebd822934b5 (8) 0x6330a553fc93768f612722bb8c2ec78ac90b3bbc (9) 0x5aeda56215b167893e80b4fe645ba6d5bab767de 6/16 Clés privées : (0) c87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e 4a9ec0a0f44dc0d3 (1) AE6AE8E5CCBFB04590405997EE2D52D2B330726137B87505 3c36d94e974d162f (2) 0dbbe8e4ae425a6d2687f1a7e3ba17bc98c6736790f1b8 ad91193c05875ef1 (3) c88b703fb08cbea894b6aeff5a544fb92e78a18e19814cd8 5da83b71f772aa6c (4) 388c684f0ba1ef5017716adb5d21a053ea8e90277d086833 7519f97bede61418 (5) 659cbb0e2411a44db63778987b1e22153c086a95eb6b18bd f89de078917abc63 (6) 82d052c865f5763aad42add438569276c00d3d88a2d062d3 6b2bae914d58b8c8 (7) AA3680d5d48A8283413F7A108367c7299CA73F553735860A 87b08f39395618b7 (8) 0f62d96d6675f32685bbdb8ac13cda7c23436f63EFBB9d07 700d8669ff12b7c4 (9) 8d5366123cb560bb606379f90a0bfd4769eecc0557f1b362 dcae9012b548b1e5
Mnemonic: candy maple cake sugar pudding cream Sweet Crumble riche et lisse au miel ⚠ Important ⚠ : Ce mnémotechnique a été créé pour toi, par Truffle. Ce n’est pas sécurisé. Assurez-vous de ne pas l’utiliser en production 7/16 Blockchains, sinon vous risquez de perdre des fonds. Truffe (développer)> Cela offre un environnement blockchain natif permettant à Truffle d’exécuter des contrats, générant 10 comptes par défaut, chacun généré Le solde initial du compte est de 100 ether. Vous pouvez également utiliser l’interface graphique fournie par Ganache , vous devez modifier le port auquel la configuration est connectée. 7. Exécuter le contrat de déploiement du port migrateur truffle dans une nouvelle console (ou dans truffle développe console pour effectuer la migration). 8. Tester le code du contrat avec le développage truffe. SimpleStorage.deployed().then(function(instance ){retour instance.get.call() ; }).alors(fonction(valeur) {return value.toNumber()}) // 0 SimpleStorage.deployed().then(function(instance ){return instance.set(100) ; }); Informations de transaction de sortie SimpleStorage.deployed().then(function(instance ){retour instance.get.call() ; }).alors(fonction(valeur) {return value.toNumber()}) ; // 100 9. Tester le contrat avec le test truffle Utiliser truffle create test SimpleStorage pour créer un nouveau ou Créez un nouveau fichier test/SimpleStorage.test.js directement. const SimpleStorage = artefacts.require('SimpleStorage') ; contract('SimpleStorage', function(accounts) { 8/16 it(« devrait affirmer vrai », fonction(fait)
{ var simpleStorage = SimpleStorage.deployed() ; Instance VAR ; simpleStorage.then(res => { instance = res ; return instance.get() }).alors(valeur => { assert.equal('0', value.toNumber(), 'pas égal à 0') }).then(() => { instance.set(100) }).then(() => { return instance.get() }).alors(valeur => { assert.equal('100', value.toNumber(), 'pas égal à 100') }) terminé() ; }); }); Dans la nouvelle console, saisissez le test truffe ./test/SimpleStorage.test.js. 10. Contrats de test avec remix Contrats de mise développés avec truffle in remix pour modifier rapidement Déploiement et invocation du contrat proposé. Remix offre un environnement d’exécution de compilation pour les contrats et peut être contrôlé par le contrat Le tableau peut voir les informations détaillées de chaque transaction du contrat, telles que les paramètres d’entrée et de sortie, les données de la méthode signée, Hachage de transaction et autres informations. Supportez le débogage. 1. Utilisez les détails de compilation pour voir les détails de la compilation du contrat. Y compris le bytecode, abi et en utilisant web3.js déploiement rapide de la méthode Drip Ah. 9/16 2. Utiliser run pour créer un contrat, et la console peut consulter la transaction qui a créé le contrat. Utilisez Truffle Unbox pour créer des applications de contrats interactives Les étapes ci-dessus créent un environnement contractuel pouvant être compilé, déployé et débogué en utilisant basic truffle init. Ci-dessous Créez un nouveau projet avec Truffle Unbox, qui nous fournit un modèle de projet truffe, à l’intérieur Certaines dépendances dans l’environnement d’interaction avec les applications contractuelles. Vous pouvez consulter les offres officielles dans Truffle Boxes Des boîtes modèles. Voici le modèle React. 1. Nouveau projet truf-react MKDIR TRUF-REACT 10/16 CD Truf-React Truffle Unbox React Le processus d’unbox télécharge le modèle d’extraction et effectue des opérations telles que l’installation de npm. 2. Configurez les truffle.js du projet module.exports = { Voir <http://truffleframework.com/docs/advanced/confi De la grégation> pour personnaliser votre Truffle Configuration !
networks: {
development: {
host: '127.0.0.1',
port: '9545', network_id : '*' // Match N’importe quel ID réseau
}
} }; 3. Commencer un développement de truffes 4. Amendement au SRC/App.js importez React, { Component } de 'react' importer SimpleStorageContract depuis '.. /construire/contracter/SimpleStorage.json' importez getWeb3 depuis './utils/getWeb3' importez './css/oswald.css' importez './css/open-sans.css' importez './css/pure-min.css' 11/16 importez './App.css' contrat const = exige('contrat truffe') const simpleStorage = contract(SimpleStorageContract) class App extends Component { constructor(props) { super(accessoires) this.state = {
storageValue: 0,
web3: null,
inputValue: 0,
address: null
} this.changeValueHandle = this.changeValueHandle.bind(this) this.setHandle = this.setHandle.bind(this)
} componentWillMount() { Obtenez un fournisseur réseau et web3 Exemple. Voir utils/getWeb3 pour plus d’informations infos. getWeb3 .then(results => { this.setState({
web3: results.web3 }) Instancier le contrat Une fois que Web3 a été fourni. 12/16 this.instantiateContract() }) .catch(() => { console.log('Erreur Trouver Web3.') })
} instanceiateContract() {
/* * EXEMPLE DE CONTRAT INTELLIGENT
* * Normalement, ces fonctions être appelé dans le contexte d’un * bibliothèque de gestion d’état, mais Pour plus de commodité, je les ai placés ici. */ this.simpleStorageSet(5)
} changeValueHandle(event) { this.setState({
inputValue: Nombre(événement.cible.valeur) })
} setHandle() { this.simpleStorageSet(this.state.inputValue)
} simpleStorageSet(x) { simpleStorage.setProvider(this.state.web3.curren tProvider) Je déclare cela pour plus tard donc 13/16 nous pouvons chaîner des fonctions sur SimpleStorage. var simpleStorageInstance Obtenez des comptes. this.state.web3.eth.getAccounts((erreur, comptes) => { simpleStorage.deployed().then(instance) => { simpleStorageInstance = instance this.setState({
address: instance.address }) Magasins Valeur donnée, 5 par défaut. Retour simpleStorageInstance.set(x, {from : comptes[0]}) }).then((résultat) => { Obtenez la valeur du contrat pour prouver que ça a fonctionné. Retour simpleStorageInstance.get.call(accounts[0]) }).then((résultat) => { Mise à jour de l’état avec le résultat. Retour this.setState({ storageValue : result.c[0] }) }) })
} render() { retour ( <div className="App"> <navigation className="navbar-menu-pur-menu-pur-horizontal"> 14/16 <a href="# » className="pure-menu-head-pur-link">Truffle Boîte</a> </nav> < principal className="conteneur"> < className="pur-g"> <div className="pure-u-1-1"> <h1>Prêt à partir !</h1> <p>Votre boîte à truffes est installée et prête.</p> <h2>Exemple de contrat intelligent</h2> <p>Si vos contrats ont été compilés et migrés Avec succès, ci-dessous affichera une valeur stockée de 5 (par défaut).</p> <p>Essayez de modifier la valeur stockée <strong>en ligne 59</strong> de App.js.</p> <p>La valeur stockée est : {this.state.stockValue}</p> <p>Adresse du contrat déployé : {this.state.address}</p> </div> <div> <type d’entrée="nombre » onChange= {this.changeValueHandle}/> <bouton onClick={this.setHandle}>set</button> 15/16 </div> </div> </main> </div> );
}
} Export par défaut Application Ajout de l’appel de la méthode de contrat fixé. Et montre l’adresse du contrat. 5. Ouvrir une nouvelle console et lancer npm run start 6. Ouvrez le http://lcoalhost:3000 dans votre navigateur pour voir les résultats du contrat. 7. Définir la valeur du contrat stocké Données via les boîtes d’ensemble et d’entrée. 8. Entrer dans le développement de truffes
//将xxx替换为address SimpleStorage.at('xxxx').then(res => {return res.get()}) La valeur de retour du type BigNUmber est obtenue, et la valeur dans le tableau c est fixée stockedData. Utilisez le plugin de navigateur Metamask pour interagir avec la blockchain Référence http://truffleframework.com/tutorials/pet-shop Les participants soumettent des documents Le concours précise l’utilisation de Truffle pour développer des smart contracts, la version 4.1.5 de Truffle correspondant à la version solcjs v0.4.21. Les développeurs doivent soumettre le package zip du projet Truffle ainsi que les documents d’introduction de projet associés, qui incluent au moins Les suivants : 16/16 1. Structure de base des fichiers du projet Truffle : Test de migration des contrats de construction package.json truffle.js truffle-config.js README.md // Description de la documentation technique Aucune node_modules requise 2. Besoin de fournir une explication PPT ou PDF de l’ensemble du produit du projet, incluant l’introduction du contexte du produit, la signification du produit, Adresse de téléchargement de l’application (optionnelle), introduction du processus d’utilisation du produit. Les développeurs tiers suivants pourront mettre en œuvre des applications contractuelles et des poches Chain selon le prochain document d’orientation ThunderChain Interaction. Documentation et outils API solidity Documentation de la truffe Ganache fournit une interface graphique pour l’environnement blockchain natif Zeppelin-Solidty s’engage à un cadre contractuel sécurisé et standardisé MetaMask propose des plugins pour navigateurs disposant d’un environnement blockchain via des connexions RPC web3.js JS encapsulé Ethereum pour interagir avec la blockchain Enfin, le document pdf à télécharger :
Dev_Guide_zh.pdf
(373.55 KB, Nombre de téléchargements: 6)
|