Les + populaires

BTC ETH SOL XRP BNB USDC USDT

Suivez-nous

Commandant la ligne. Beaucoup d’entre nous vivent et travaillent sur Linux… | par Thomas Jay Rush | Coinmoines | nov. 2021

IAavec
Titres Titres

Beaucoup d’entre nous vivent et travaillent sur la ligne de commande Linux.

Thomas Jay Rush

Je vis dans ce quartier depuis 1986. Pendant la majeure partie de ce temps, la ligne de commande me commandait. Mais finalement, j’ai commencé à commander la ligne de commande.

Dans cet article, je vais partager avec vous un exemple de commande de la ligne de commande. Je vais prendre la ligne de commande par son col de chemise et la secouer jusqu’à ce qu’elle fasse ce que je veux. La cible de mon agression sera une ligne de commande TrueBlocks fournie par l’un de nos utilisateurs. (Merci Pintail.)

Utiliser des tuyaux Linux

chifra export --cache --articulate 
--first_block 12550000 --last_block 13520000
--fmt csv 0x6b175474e89094c44da98b954eedeac495271d0f |
grep 'approve' |
tr -d '"' |
cut -d ',' -f1,2,5,6,13-20
> dai_uniswapv2_approvals.csv

Traduit en anglais, cela dit :

Afficher chaque transaction contre le DAI StableCoin (0x6b17…71d0f), à partir du bloc 12 550 000 et continuer jusqu’au bloc 13.520.000 inclusif rapportant les résultats dans CSV format. Par ailleurs, articuler ces résultats et cache la requête au fur et à mesure. Puis…

pousser les résultats à travers grep pour ne prélever que les transactions d’approbation de jeton ; supprimer les guillemets ; et, en utilisant une virgule comme délimiteur de champ, extrayez les premier, deuxième, cinquième, sixième et treizième à 20e champs (blockNumber, transactionIndex, from, to, compressedTx) ; et, enfin, stockez les résultats dans un fichier appelé dai_uniswapv2_approvals.csv

Tu vois, je te l’avais dit. La ligne de commande a tendance à commander l’utilisateur. C’est une commande folle.

Pouvons-nous nous améliorer ?

Comment?

  1. Produire la liste des transactions avec exportation chifra
  2. Filtrage des enregistrements pour approbations avec grep
  3. Extraire seulement cinq des nombreux champs de chaque enregistrement avec Couper
  4. Supprimer les guillemets avec tr
  5. Le stockage des résultats dans un fichier avec une redirection (>)

On va commencer par simplifier les choses.

Nous supprimons toute partie de la commande ci-dessus qui n’est pas pertinente pour cet article (le —-cache options et le --first_block et --last_end options de blocage. Nous garderons le --articulate option. Nous allons également supprimer la tuyauterie, la saisie, la transformation et la redirection.

Donc, nous nous retrouvons avec cette commande:

chifra export --fmt csv 
--articulate 0x6b175474e89094c44da98b954eedeac495271d0f

Cette commande affiche chaque transaction dans tout l’historique du DAI Stablecoin. Nous rajouterons des options à partir d’ici.

Filtrage des enregistrements pour les approbations

chifra export [flags] 
<address> [address...] [topics...] [fourbytes...]

Vous pouvez voir ici qu’il est possible de fournir non seulement addresses à la commande export, mais aussi un ou plusieurs topics et/ou un ou plusieurs fourbyte signature.

Afin de trouver le fourbyte signature qui nous intéresse, nous pouvons faire cette commande :

chifra abis 0x6b175474e89094c44da98b954eedeac495271d0f | grep approve

qui renvoie :

fourbyte       type         name        signature
-----------------------------------------------------------------
0x095ea7b3 function approve approve(address,uint256)

Nous pouvons ajouter que fourbyte signature à notre commande croissante :

chifra export --fmt csv --articulate 
0x6b175474e89094c44da98b954eedeac495271d0f
0x095ea7b3

Cette commande affiche chaque approve transaction qui a été exécutée à chaque fois contre DAI.

La commande ci-dessus remplace le besoin de grep dans la commande d’origine. C’est aussi plus rapide que la commande d’origine puisque de nombreuses transactions (celles qui ne sont pas approve) ne sont jamais générés. Il n’y a pas besoin de grep les sortir.

Sélection de champ

La commande d’origine utilise tr pour supprimer les guillemets de la sortie et cut pour sélectionner les champs 1,2,5,6 et 13-20 des données. Cela peut être accompli en utilisant une fonctionnalité non documentée (et donc expérimentale) de TrueBlocks appelée « chaînes d’affichage ». Je n’expliquerai pas les chaînes d’affichage, car cet article devient déjà long, mais ils vous permettent de sélectionner des champs et (en fait) de décrire la sortie exacte des données que vous souhaitez.

Exécutez cette commande :

DISPLAY_FORMAT="[{BLOCKNUMBER}]" 
chifra export --fmt txt --articulate
0x6b175474e89094c44da98b954eedeac495271d0f
0x095ea7b3 2>/dev/null

Noter: J’ai changé le format d’exportation de csv à txt afin de rendre les données affichées plus claires. Cela résout également un problème avec la commande d’origine. le compressedTx Le champ contient des virgules, donc l’utilisation de CSV ne fonctionne pas vraiment car les champs sont brouillés.

La commande ci-dessus produit ligne sur ligne affichant uniquement le blockNumber de chaque opération.

Exécutez cette commande :

DISPLAY_FORMAT="[{BLOCKNUMBER}][{TRANSACTIONINDEX}]" 
chifra export --fmt csv --articulate
0x6b175474e89094c44da98b954eedeac495271d0f
0x095ea7b3 2>/dev/null

Rangée sur rangée de blockNumber et transactionIndex. Vous avez eu l’idée.

Vous pouvez indiquer à TrueBlocks quels champs afficher à l’aide d’une variable d’environnement.

Les champs 1,2,,5,6 et 13-20 correspondent à blockNumber, transactionIndex, from, to, et compressedTx. Vous pouvez voir les champs exportés ici.

En étendant cela aux champs que nous voulons, la commande devient :

DISPLAY_FORMAT="[{BLOCKNUMBER}]t[{TRANSACTIONINDEX}]t[{FROM}]t[{TO}]t[{COMPRESSEDTX}]" 
chifra export --articulate
0x6b175474e89094c44da98b954eedeac495271d0f
0x095ea7b3 2>/dev/null

Noter: Vous devez corriger la commande ci-dessus pour la mettre sur une seule ligne.

Si vous exécutez la commande ci-dessus via | head -1 vous verrez que seuls les champs qui nous intéressent sont exportés :

blocknumber    transactionindex   from   to   compressedtx

Pas de citations. C’est ce que nous voulons. Cette commande est plus rapide car vous n’avez pas besoin de transférer des données superflues via le cut commander. Lorsque vous effectuez un traitement de données en ligne de commande, chaque petit ajustement compte.

Stockage des résultats dans un fichier

Oui.

Chifra a une option appelée --output <filename> qui permet à l’utilisateur de spécifier la destination des données résultantes.

La dernière commande améliorée est donc :

DISPLAY_FORMAT="[{BLOCKNUMBER}]t[{TRANSACTIONINDEX}]t[{FROM}]t[{TO}]t[{COMPRESSEDTX}]" 
chifra export --articulate
0x6b175474e89094c44da98b954eedeac495271d0f
0x095ea7b3 --output dai_uniswapv2_approvals.csv

Noter: Edité pour être tout sur une seule ligne.

Performance

Source medium.com

Gérez vos cryptos
Bitstack
5€ offerts en Bitcoin

Donnez votre avis

Soyez le 1er à noter cet article


Partagez cet article maintenant !

Envoyez simplement nos contenus crypto et finance à vos proches.