blog quotidien | Python en utilisant les données de la chaîne de bloc a grimpé à une base de données locale

La Chine préoccupée par le nombre global OSC open source, obtenir les dernières informations techniques

Séminaire sur l'introduction de la chaîne de blocs pairs généralement des réseaux tels histoires commencent par faciles à comprendre et les grands livres de la banque, puis passez à écrire un contrat intelligent, ce qui est très gênant. Alors, imaginez-vous dans la jungle, imaginez la chaîne de bloc Ethernet Square est une étrange créature que vous êtes sur le point d'étude. Aujourd'hui, nous allons regarder la créature, et d'interagir et collecter toutes les données à ce sujet à un stockage centralisé pour leur propre usage.

Pour la première série de temps

Tout d'abord, vous devez installer web3py. Web3py pour la connexion Ethernet est une chaîne de blocs carrés bibliothèque Python. Vous devez savoir à l'avance qu'il n'y a pas de système de gestion central peut télécharger des données. Copie des données stockées dans la validation d'un autre noeud connecté à des ressources partagées ( « peer ») (ou une partie de celui-ci). Carré exécution de protocole de réseau Ethernet, contrat intelligente sur les règles d'interaction entre le noeud définie dans le protocole et le réseau avec une autre.

Si vous souhaitez accéder aux informations sur les transactions, les soldes, bloquer ou toute autre information est écrite à la chaîne de blocs, l'accord vous oblige à vous connecter au nud. Chaque nud continuer à partager de nouvelles données et vérifier les données, afin que vous puissiez déterminer les données ne sont pas trafiqués, ce sont les données les plus récentes.

Vous pouvez utiliser deux types de noeuds dans le processus du premier contact dans l'éther place: local ou hébergé. Le nud local peut exécuter sur votre ordinateur, ce qui signifie que vous devez d'abord télécharger un client comme Geth, il bloque la synchronisation de la chaîne à votre appareil, de prendre l'espace de stockage et de passer beaucoup de temps à remplir. Pour la première étude, le noeud géré est un meilleur choix - elle est contrôlée par d'autres personnes, mais vous pouvez facilement connecter et jouer à votre chaîne de blocs.

Infura aller créer votre propre compte gratuit pour accéder à ces noeuds gérés. Avant, quand vous avez terminé, vous pouvez voir le réseau principal MainNet (c.-à-chaîne de blocs Ethernet Square) et un groupe de testnets réseau de test, ils peuvent essentiellement tester votre contrat de renseignement, de sorte que vous pouvez déployer à MainNet cher dans le code les erreurs et les corriger.

Ceci est la première fois que nous avons d'abord l'objet de Web3 d'importation et établit une connexion HTTP.

de Web3 import web3 web3 = Web3 (Web3.HTTPProvider ( "https://mainnet.infura.io/your-own-personal-number"))

Maintenant que vous avez fait! Vous pouvez utiliser l'API Parcourir web3 pour interroger la structure de données.

Interroge informations de bloc spécifique

numéro de bloc #current > > >  web3.eth.blockNumber 5658173 #GET le contenu du bloc le plus récent extrait > > >  web3.eth.getBlock ( 'latest')

Cette commande renvoie la structure de données de AttributeDict qui est la clé du dictionnaire valeur-clé, comme suit:

AttributeDict ({ 'difficulté': 3297284143124448, 'ExtraData': HexBytes ( '0x65746865726d696e652d6177732d61736961312d34'), 'GasLimit': 7999992, 'GasUsed': 7990111, 'hachage': HexBytes ( '0x8c09ba67123601c08ef5d292acaffd36798ca178b7d6fecd5e1144ce8e3b9e50'), 'LogsBloom': HexBytes ( '0x348000240b40620836308460180004415000c8ccb260021402420721c22801ca847c625c0a89030482044001523a4d100050100250d100858381260a186312088006c154010000491216446840888200c1812088c12b06000809a808530014160000812c2ac20008a201c83380314d02242338400c0500c2a028005010988c44b0608a020400201032e10e16142b931115469824248066100b082224200222140a41a20aa2006224d608210f1a22811d03969423e8c08058100388c0800402002a000802130c40d289201900c38142a1cc0380a4010f0201040d4022200022018c5801346c168502841906940485ea1d9864044060a00000a00616004d006090'), 'Miner': '0xEA674fdDe714fd979de3EdF0F56AA9716B898ec8', 'MixHash': HexBytes ( '0x84320fd71345778b48e437f3403e9021575520ba23aaac48dd7a352c9ce31f75'), 'Nonce': HexBytes ( '0x98a0b1e00bfabac6'), 'Nombre': 5658173, 'ParentHash': HexBytes ( '0x01eda8a47a0151533d1afacf9b9108606d4d89a86e269dddaac9698b6fb12930'), 'ReceiptsRoot': HexBytes ( '0xc40f774ad10ad443457c3a5a0db96b539af3007f8d351b198ca7bf2ef196b7e0'), '': Sha3Uncles HexBytes ( '0x55725ec296c6c64257ed6a88d7d8c66160abe7b672f5d89bbad5487779b1d5fe'), 'Taille': 27161, 'StateRoot': HexBytes ( '0x5bfc7a9a87fb9991f2760807d56319154f1dab91d3cfc9530a597b6c5d064aba'), 'Timestamp': 1527002893, 'TotalDifficulty': 4339832462578780814928, 'Transactions': , '': TransactionsRoot HexBytes ( '0x67e1e1f2f4b1d33791a0fba2d5ebf039bd6c331c665cb8020ff41d0e0eade46e'), « Oncles »: })

Toutes ces variables seront immédiatement utiles pour vous, parce que certaines variables très techniques, que si vous avez une meilleure compréhension de la chaîne de blocs de travail réel, leur sens logique. Vous pouvez en savoir plus sur eux dans la soi-disant Livre jaune, ou les sauter facile à comprendre et à utiliser.

En bref, un bloc contenant des informations d'en-tête de bloc, écrire une liste des transactions qui ont été vérifiées et une liste d'identificateur de bloc (les mineurs non confirmées, leur bloc est trop lent, ne peut pas entrer dans la chaîne bloc principal mais encore à cause de la charge de travail et de calcul sont récompensés Ethernet). Ci-dessous vous pouvez voir le sens de chaque variable, je le diviser en sous-catégories.

données de routine générale

Bloquer variableMeaning valeur translation numberscalar égal au nombre d'ancêtres des blocs (bloc d'origine = 0) la valeur scalaire du nombre relatif de blocs constitutifs, bloc de genèse = 0sizesize du bloc en octets la taille de bloc, en octets du temps de timestampUnix () à cette création de bloc adresse miner160 bits temps Unix pour les frais au début de ce bloc est recueilli avec succès de l'exploitation minière réussie chargée adresse Ethernet de 160 dépenses de gaz gasLimitmaximum autorisés dans ce bloc pour ce bloc pour permettre une consommation de gaz maximale gaz gasUsedtotal utilisé par toutes les transactions dans ce bloc ce bloc toutes les transactions en utilisant le gaz total liste de hachage transactionslist de transaction de transaction hachages inclus dans le bloc inclus dans le bloc de hachage parentHashKeccak256 de l'en-tête de bloc d'en-tête de bloc parent du parent Keccak 256 la valeur de hachage de hachage de bloc hashcurrent du courant la valeur de hachage du bloc de données extraDataextra dans le tableau d'octets du tableau d'octets de données supplémentaire

liés au secteur minier

Bloc variableMeaning translation valeur difficultyscalar correspondant au niveau de difficulté du bloc au bloc correspondant au niveau de difficulté d'une totalDifficultyinteger valeur scalaire de la difficulté totale de la chaîne jusqu'à ce que ce bloc jusqu'à ce que la valeur totale noncehash difficulté de ce bloc de chaîne de la proof- générée de travail, nul lorsque sa valeur de hachage de bloc en attente généré la charge de travail de preuve, quand un bloc est suspendu hachage bits nullmixHash256 qui est combiné avec le nonce et sert à prouver la quantité suffisante de calcul a été effectué sur ce nonce de bits block256 utilisé en conjonction avec une table de hachage pour démontrer que ce bloc a été exécutée une quantité suffisante de calcul

oncle liés

Bloc variableMeaning valeur uncleslist de SHA-3 liste de valeurs de hachage de traduction oncle hashesuncle sha3UnclesSHA3 des données oncles dans les blocs de données de bloc oncles

Liés à la technologie

Bloc traduction variableMeaning receiptsRootKeccak hachage 256 bits du nud racine de l'arborescence peuplée avec des recettes de toutes les transactions dans le nud racine de hachage 256 bits de la structure de l'arbre de cette blockKeccak rempli cette réception de bloc de hachage de toutes les transactions du nud racine si la trie d'état après que toutes les transactions sont exécutées et finalisations appliquée après l'exécution de toutes les opérations et se termine d'application, telles que la valeur de hachage état racine d'arborescence keccak256 transactionsRootKeccak256 hachage du noeud de racine de la structure arborescente remplie avec les recettes de chaque transaction dans la racine des transactions la structure listtrie hachage keccak256 rempli de reçus logsBloomthe filtre Bloom de la liste d'information indexables des transactions dans chaque transaction (adresse de l'enregistreur et les sujets log) contenu dans chaque entrée du journal de la réception de chaque transaction dans le commerce de la liste des transactions il peut être l'information d'index (adresse d'enregistrement du journal et le sujet) du filtre Bloom reçoit les entrées du journal dans la liste incluse dans chaque transaction

Transactions et recettes

Maintenant, nous pouvons également trouver un seul bloc commercial par son identifiant unique (c.-à-hachage de transaction).

> > >  web3.eth.getTransaction ( '0x1ce6bca99701c4e8acae986b10e7649d628d70ec62b7a8314bbb13726a312225') AttributeDict ({ 'blockHash': HexBytes ( '0x8c09ba67123601c08ef5d292acaffd36798ca178b7d6fecd5e1144ce8e3b9e50'), 'BlockNumber': 5658173, 'De': '0x390dE26d772D2e2005C6d1d24afC902bae37a4bB', 'Gaz': 45000, 'GasPrice': 123400000000, 'hachage': HexBytes ( '0x1ce6bca99701c4e8acae986b10e7649d628d70ec62b7a8314bbb13726a312225'), 'Entrée': '0x', 'Nonce': 415710, 'R': HexBytes ( '0x1bb901ad0a3add517504cc459fdb1545d193020ec5c63a566e440ee39dbfe131'), 'S': HexBytes ( '0x4b7ac95eb321b5947948ecb624e1d80b19d9cc876668c69cc2b32670f52b061a'), 'Pour': '0xBbA2D99C9B3aF394B0d6417b1D58815eE495029D', 'TransactionIndex': 0, 'V': 37, 'Valeur': 1000000000000000000})

Comme précédemment, la propriété web3py retourne un dictionnaire. Le tableau suivant résume la signification de chaque touche.

Transaction variableMeaning traduction blockHashhash du bloc de la transaction fait partie d'une valeur de hachage de la transaction, qui bloquent blockNumbernumber hachage hashtransaction que le numéro de bloc de la table de hachage de l'adresse bloc (identifiant unique) de transaction (identifiant unique) d'adresse from160 bits d'un expéditeur de lorsqu'une transaction 160 bits adresse hachage toaddress de l'expéditeur de la transaction du destinataire ou nulle pour une adresse de transaction de création de contrat du bénéficiaire ou de créer un accord de contrat pour nullvaluenumber de wei à être transféré au destinataire ou compte nouvellement créé (cas de création de contrat) à transférer au destinataire ou pour créer un nouveau numéro de compte wei (créer la situation contractuelle) gasgas consommé gasPricenumber de gaz naturel par la consommation de transaction de transaction de Wei à payer par unité de gaz pour tous les frais de computatioon de cette opération de transaction tous les coûts calculés par unité de nombre de gaz naturel de noncenumber des transactions / créations de contrat envoyé par l'expéditeur avant celui-ci expéditeur avant d'envoyer les transactions v le nombre de contrats et la création de / r / s indice TransactionIndexindex valeur de la signature de données des données de inputthe envoyées le long des valeurs de signature de la transaction pour identifier l'expéditeur de la transaction avec la transaction avec la transaction transmise en même temps de l'opération dans le bloc dans la transaction de bloc, utilisé pour identifier l'expéditeur

Enfin, nous pouvons également voir la réception de la transaction:

> > >  web3.eth.getTransactionReceipt ( '0x68c70c5ffe54a42ebf7118e7e931aeac018cee4656a816ffe6a01388da50c851') AttributeDict ({ 'blockHash': HexBytes ( '0x44338e1f80302037c7213e8f56dd35d8a473b000319bc200f76e910e62d12f98'), 'BlockNumber': 5617795, 'ContractAddress': Aucun, 'CumulativeGasUsed': 21004, 'De': '0xea6e3e41ebaa09d550d3c3f0d72971b3c5ccc261', 'GasUsed': 21004, 'Journaux': , 'LogsBloom': HexBytes ( '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'), 'Status': 1, 'Pour': '0xd96a6e75d099ce529bbd257cbcb403224cceaebf', 'TransactionHash': HexBytes ( '0x68c70c5ffe54a42ebf7118e7e931aeac018cee4656a816ffe6a01388da50c851'), 'TransactionIndex': 0})

Justificatif de transaction contient des entrées en double et nouvelles, les nouvelles entrées sont expliquées ci-dessous.

Réception variableMeaning traduction statusboolean si la transaction était Successfull; false si le EVM (Ethereum Virtual Machine) est revenu si la transaction la transaction est réussie, si EVM (Ethernet place VM) de réduire les rendements d'adresse du contrat de transaction falsecontractAddressthe créé si la transaction était une création de contrat sinon nulle si la transaction est un contrat créé, la création d'une adresse de contrat, sinon de gaz utilisé lorsque la quantité totale de gaz cumulativeGasUsedthe résumer cette opération lorsque l'opération a été exécutée dans le bloc d'exécution dans l'utilisation de blocs de gasUsed par là nullgasUsedthe quantité totale gasUse transaction et toutes les opérations précédentes dans le même bloc et cet objet de journal de transactions en utilisant un tableau avec la somme de tous logsarray dans une opération préalable des objets du journal qui a généré la transaction des transactions générées

À titre de référence, en plus du livre jaune, je ajoute aussi une variété de ressources supplémentaires pour préparer ces tables 2,3,4,5.

Comme vous pouvez le voir, avec quelques commandes simples, vous pouvez vous connecter au réseau et l'accès à l'information de base sur le format d'origine de la transaction, bloc ou condition. Cela ouvrira une nouvelle fenêtre de données!

Base de données de gestion des systèmes

Lorsque le programme écrit des données dans la base de données appropriée, vous pouvez comprendre qu'il existe de nombreuses solutions pour des solutions de système de gestion des amateurs Python, tels que le serveur SQLite, ou basés sur le serveur MySQL, PostgreSQL ou Hadoop. Selon vos intentions, vous devez déterminer quelle est la meilleure option pour votre projet. Dans l'ensemble, j'ai trouvé ces points utiles:

  • Quelle est la taille attendue de la base de données (par exemple peuvent être traités sur un seul système de la machine)?
  • Ces entrées sont souvent modifiées ou restent les mêmes?
  • Que ce soit la base de données doit être accessible et édité par le multipartisme / applications en même temps?

Au fil du temps, la chaîne de bloc Ethernet Square est en croissance constante, à partir de Juin 2018 près de 1 To, ce qui est très petit, donc pour que le système de traitement distribué Hadoop est pas le meilleur choix. base de données bloc de la chaîne sera écrite une fois, et seulement une nouvelle entrée est prolongée pour maintenir l'ancien inchangé entrée. Cette base de données devrait être écrit par l'exemple d'un canal par d'autres canaux accès en lecture seule, donc nous ne avons pas vraiment besoin de l'exécuter sur le serveur. Sur votre machine locale pour sauver la base de données conduira à la lecture rapide, ce qui est souhaitable et réalisable comme les systèmes de gestion de serveur SQLite. Python a une bibliothèque intégrée sqlite3, donc nous ne même pas besoin d'installer un nouveau package.

Conception de base de données

L'étape suivante consiste à concevoir la base de données. Rappelez-vous que les champs de données sont les plus pertinents pour votre analyse, et est conçu pour la recherche d'optimisation et magasin. Par exemple, si vous ne comptez pas utiliser stateRoot, vous pouvez sauter entièrement ou l'enregistrer dans une table séparée. Peut rechercher rapidement une table avec moins de colonnes, si plus tard vous vous rendez compte qui a effectivement des cas stateRoot d'utilisation, vous pouvez toujours y accéder. Vous pouvez également séparer les blocs d'informations et de renseignements sur les transactions, si vous ne le faites pas, le bloc des attributs tels que l'horodatage permet de bloquer toutes les transactions répétées N fois, de perdre beaucoup d'espace. L'utilisation ultérieure opération JOIN peut facilement bloquer la transaction et ses attributs pour correspondre.

J'ai conçu la base de données contient trois tableaux:

  • Rapide: informations sur les transactions les plus pertinentes pour un accès rapide et l'analyse.
  • TX: toutes les informations sur les transactions restantes,
  • Bloc: Bloc Les informations spécifiées.

conventions de nommage des variables par rapport à la web3py d'origine légèrement modifié afin d'éliminer l'ambiguïté, comme l'opération de hachage de bloc et hachage est appelé un « hachage », ou « de » / « à » comme nom de colonne, dans SQL ont des significations différentes, il fera l'accident.

Valeur de la transaction, l'équilibre et d'autres grands besoins numériques en tant que chaîne stockée dans la base de données. La raison en est que SQLite peut gérer jusqu'à entier signé de 8 octets est mémorisée, la puissance maximale de 63 -12 à environ 9223372036854775807. Ceci est généralement beaucoup plus faible que la valeur de la transaction dans le wei (par exemple, 1ETH = 10 * 18 wei) .

Construisez votre mini-base de données

Le code complet est disponible sur GitHub. L'architecture du tissu de la couche supérieure permet de bloquer des informations de chaîne, et délivre en sortie le nombre spécifié de blocs de pré-fichier contenant des données blockchain.db. Pour le tester, allez dans le fichier et sélectionnez database.py chiffre raisonnable pour le nombre de blocs à écrire, par exemple:

Nblocks = 10000

Par défaut, vous devez objets Web3 Point Endpoint Infura. Si vous avez des fournisseurs IPC (votre nud local), vous pouvez passer aux fournisseurs IPC, juste décommenter la ligne:

# Ou la connexion via le noeud sur la machine virtuelle # Web3 = Web3 (Web3.IPCProvider ( '/ path-to-geth.ipc /'))

Modifiez le chemin, et puis juste python database.py course de la ligne de commande. Aucun bloc dumping de code sera écrit dans le fichier lastblock.txt finale, au cas où vous devez redémarrer.

Comment utiliser la base de données

Une fois que la première entrée dans la base de données, elle commence à communiquer avec lui à travers la coquille ipython. Par exemple, pour imprimer la table « rapide » dans les 5 premières lignes, vous pouvez exécuter le code suivant.

sqlite3 importation comme SQ3 conn = sq3.connect ( "blockchain.db") cur = conn.cursor () # Certains code SQL, sélectionnez par exemple cinq premières entrées de la table rapide cur.execute ( "SELECT * FROM rapide LIMITE 5") a = cur.fetchall () #list de tuples contenant tous les éléments de la rangée print (a) conn.close ()

nud local et Infura

Si vous construisez une grande base de données, vous devez télécharger le Geth et synchroniser les noeuds. La synchronisation peut être effectuée selon trois modes de base:

Si vous ne prennent pas en compte le statut dans le passé, vous pouvez synchroniser le noeud 6 en mode rapide.

Le tableau suivant montre la vitesse du code écrit à la base de données, en communication avec l'adresse Infura (Infura) avec le noeud local (IPC) entièrement synchronisée. Comme vous pouvez le voir, ce code est exécuté sur le noeud local vaut la peine, parce que vous pouvez améliorer la vitesse de près de deux ordres de grandeur (c.-à-100x)!

résumé

Maintenant que vous avez votre propre base de données locale pour comprendre ce qui se passe sur la chaîne de bloc, nous pouvons commencer à explorer. Par exemple, vous pouvez calculer le nombre de transactions depuis ses origines pour afficher le nombre d'adresses générées en fonction du temps - le ciel est la limite que vous pouvez en apprendre davantage sur la chaîne de bloc. Nous avons jeté les bases de votre terrain de jeu de la science des données. Par conséquent, s'il vous plaît continuer à explorer, ou pour consulter l'article suivant, comprendre les applications potentielles.

le développement des bibliothèques python avec web3.py Ethernet Square est très pratique, les utilisateurs intéressés peuvent suivre notre place Ethernet python tutoriel, est principalement réalisée à l'aide de la chaîne bloc détaillé web3.py Ethernet développé pour la place ingénieur en python.

En outre, d'autres langues peuvent être apprises tutoriel Ethernet place ci-dessous:

  • tutoriels web3j, réalisées principalement web3j chaîne bloc détaillé développement Ethernet Square pour Java et programmeur Android.
  • tutoriel Ethernet Place présente le contrat de développement d'applications intelligent avec DAPP pour l'entrée.
  • développement Ethernet Square, est d'introduire l'utilisation de Node.js, MongoDB, chaîne de blocs, ipfs ATTEINDRE combat décentralisé avec le fournisseur d'électricité pour Dapp avancé.
  • php Ethernet Square, est d'introduire l'utilisation du contrat de développement php interaction intelligente, création de compte contenu, transaction, transfert, les filtres de développement et les jetons et les événements.
  • C # Ethernet Square, principalement sur la façon d'utiliser le développement C # .Net basé sur des applications Ethernet carrés, y compris la gestion des comptes et de l'état de la transaction, le développement des contrats et une interaction intelligente, les filtres et les événements.

Blog Auteur: geek12345

Une colonne de blog quotidien, les articles techniques de qualité avec d'excellents blogueurs quotidien recommandé pour vous. Tout en se félicitant de la présentation de l'utilisateur, une fois que l'article est inclus dans le compte officiel, nous recommanderons oh à la maison et d'autres endroits. La Chine préoccupée par l'accès quotidien OSC open source pour pousser la qualité, cliquez sur " En savoir plus « Lire l'article original.

Benz Saab sous la tutelle de Chi Road, Beiqi propre capacité de tenir l'ère 2.0?
Précédent
Ford SUV point de vente populaire est le contrôle? Vous ne l'avez moitié!
Prochain
travail de conseil est vraiment une « proposition libre »?
L'Inde est les pilotes ennemis trouvés après l'aéroport d'atterrissage, Jizhongshengzhi a dit quelque chose foule amusant
Fidji Nouvelles expérience quotidienne de prise intelligente: le coût élevé des débouchés
McLaren: 720S Araignée officiellement publié
Amour qui touche de bleu - Citizen Eco AO9000-06B, les États-Unis et commencer à récurer l'expérience Adriatique
Wei ES6 dernières photos espion, sera officiellement publié le 15 NIO jour
Meng affaire est votre visage, a donné aux femmes le vote était une bonne collection numérique
Daily Bo Shu "fait roues" --cicada (cadre léger WEB)
Les sociétés cotées de Tobacco Company, il comment faire de l'argent?
Investissement dans les statistiques: un quart du secteur agricole de financement par CR / PE de la Chine a pris un plongeon
box-office Smashed, de bouche à oreille fracassé! Ce jour de l'An, le film Tang Wei Ge était tel ......
Investissement dans les statistiques: un quart de la consommation et le secteur des services de financement chaud vitesse constante introduction en bourse