Que faire si la transaction est en attente ? Tout ce que vous devez savoir sur le pool de transactions Transactions générées

Sujet : « Objets de transaction : blocs GENERATE et TERMINATE. Bloc ADVANCE dans l’environnement de programmation GPSS World.

Objectifs d'apprentissage:

1. Apprenez la modélisation simple. Apprenez à modéliser un processus réel dans lequel les clients passeront du temps avant de quitter le modèle.

2. Apprenez à faire un retard en simulation.

Objets de transaction : blocs GENERATION et COMPLETION

(GÉNÉRER et TERMINER).

GPSS Transaction est un objet avec un ensemble d'attributs. Chaque Transaction est unique dans le sens où elle peut être identifiée par un Numéro de Transaction unique. Les transactions créées dans la simulation sont numérotées en commençant par 1. De plus, vous pouvez modifier les attributs associés à chaque transaction. Les attributs se présentent sous forme de priorité, en fonction de l'heure programmée, du jeu de traduction et des « Paramètres de transaction », les noms ou numéros attribués sont des données utilisateur. Paramètres de transaction - comme des lettres dans le sac d'un courrier postal adressées à une personne spécifique. Les paramètres contiennent des informations concernant une transaction qui sont uniques à cette transaction. Vous pouvez utiliser Snapshot Windows pour afficher les informations contenues dans ces paramètres.



Contrairement aux langages de programmation à usage général, chaque transaction dans GPSS possède un marqueur de localisation. Bien qu'il n'y ait qu'un seul emplacement à mémoriser dans un programme informatique, dans une simulation GPSS, il peut y avoir des milliers de transactions situées dans différents blocs. Les transactions ne commencent pas nécessairement en haut du programme. Une simulation GPSS peut comporter de nombreuses instructions GENERATE, dont chacune crée de nombreuses transactions dotées d'un marqueur de lieu.

Les transactions peuvent être créées par lots ou dans un bloc GENERATE. Le modèle doit avoir au moins un bloc GENERATE. Considérons le cas où une nouvelle Transaction est créée 60 fois dans le modèle. S'il n'y a pas de contradictions, le module horaire spécial n'a pas encore été défini. Laissez un module de temps s'exécuter toutes les secondes. Considérez le formulaire correspondant pour le bloc GENERATE, qui crée une nouvelle transaction toutes les minutes : GENERATE 60 ; Une nouvelle transaction est créée

Une fois l'horloge à virgule flottante réglée dans GPSS World, vous pouvez parler de création de transactions à petits intervalles.

GÉNÉRER 1 ; Créer une nouvelle transaction

Ensuite, si vous souhaitez représenter un intervalle de seconde, vous pouvez représenter 1/60 de minute ou 0,01666667. Vous pouvez sélectionner l'événement le plus significatif dans votre modèle. Ici, l’expression utilisée doit être hésitante.

Démarrez une session GPSS World, pour ce faire, vous devez procéder comme suit.

SELECT Fichier/Nouveau

Puisque le modèle a déjà été sélectionné

Entrez l'instruction de type GENERATE dans la page Fenêtre Modèle qui apparaît. Ensuite, traduisez votre modèle à partir d'une seule ligne. Appuyez sur la touche Tab.

CLIQUEZ SUR

CLIQUEZ SUR

CLIQUEZ SUR

TAPER; Crée une nouvelle transaction

Vous avez utilisé le bouton de tabulation pour aligner le modèle. Mais cela n'est pas nécessaire pour que les parties GPSS de la gamme de modèles soient placées dans certaines colonnes, mais cela est fait pour en faciliter la lecture. Vous pouvez modifier les intervalles en modifiant les paramètres de l'objet du modèle. Regardons cela plus tard.

Dans la boîte de dialogue dans la zone en surbrillance

Commande SELECT/Créer une simulation

Fenêtre SELECT / Fenêtre Simulation / Fenêtre Blocs

Votre bloc GÉNÉRER dans la fenêtre Blocs. Les blocs sont toujours numérotés à partir de 1. Il s'agit de la "VUE DÉTAILLÉE" de la fenêtre Blocs, où les blocs les plus une information important pour chaque bloc est répertorié en colonnes.

Désactivez « VUE DÉTAILLÉE ». Pour ça

Cela « fait passer » la fenêtre de la « VUE DÉTAILLÉE » à la « Vue non détaillée ». Les blocs sont placés en dessous de leurs prédécesseurs. Si le bloc suivant ne rentre pas en dessous de son prédécesseur, la vue non détaillée le déplacera en haut de la colonne suivante à droite. L'emplacement des blocs dépend également de la taille de la fenêtre et vous pouvez modifier la taille de la fenêtre.

Revenons maintenant à la "VUE DÉTAILLÉE".

SELECT Détails de la vue/de l'entité

Bloc TERMINATE, supprime les transactions de la simulation. Lorsqu'une transaction entre dans un bloc TERMINATE, elle est détruite. Il existe également un opérande optimal, auquel est attribué un numéro spécial appelé « Compte d'achèvement ». Lorsque vous tapez START 123, vous définissez le nombre d'achèvements sur 123. Ces contrôles déterminent la durée d'exécution de la simulation. Si vous mettez un 1 dans l'opérande d'un bloc TERMINATE, chaque fois qu'une transaction est détruite par ce bloc dont le nombre de terminaisons est inférieur à 1. Lorsque le nombre de terminaisons devient 0 ou moins, la simulation est terminée ou supprimée par l'opérande START. Le rapport standard est enregistré automatiquement. Le nombre de terminaisons peut être inférieur à zéro lorsque la simulation se termine si l'opérande du bloc TERMINATE est supérieur à 1.

Ajoutons un bloc TERMINATE à notre modèle. Cliquez sur la zone de titre MyModel.gps de la fenêtre Modèle. Dans la fenêtre Modèle, démarrez une nouvelle ligne après la ligne GENERATE Block, avec le curseur à la fin de la ligne GENERATE Block.

CLIQUEZ SUR

CLIQUEZ SUR

TYPE TERMINER

CLIQUEZ SUR

CLIQUEZ SUR

TAPER; Détruire la transaction

Commande SELECT / Retraduction (Fig. 5.1)

Ces deux blocs représentent une petite simulation. Ils pourraient

imaginez une situation où le client accède à la mémoire chaque minute.

Vous verrez plus tard comment le modèle évoluera en fonction de votre situation spécifique. Pour l’instant, nous utiliserons ce modèle pour l’étude.

Les opérations du Presse-papiers Couper, Copier et Coller sont disponibles lorsque vous configurez votre modèle. De grands segments de blocs peuvent être sélectionnés puis copiés, déplacés ou supprimés. N'hésitez pas à expérimenter.

Avant de commencer la simulation, vous devez être conscient du fonctionnement de deux listes de transactions, appelées chaîne d'événements actuels et chaîne d'événements futurs. Pour comprendre ces chaînes, vous devez garder à l’esprit « l’horloge système », qui vous indique l’heure actuelle simulée. Chaque transaction possède un attribut qui indique quand la prochaine entrée de bloc sera tentée. Si l'horloge simulée actuelle n'a pas encore atteint l'heure spécifiée, il existe une chaîne d'événements futurs pour cela. La chaîne d'événements futurs est une zone d'attente pour les transactions planifiées dans le futur.

Lors de la création de la deuxième transaction, chaque fois que le bloc GENERATE est saisi, la deuxième transaction est créée. Mais la nouvelle transaction n'entre pas immédiatement dans le bloc GENERATE ; elle est plutôt placée dans la chaîne d'événements future en fonction de l'intervalle de temps que vous avez défini dans le bloc GENERATE.

Chaîne d'événements actuels - un ensemble de transactions qui ont encore

Blocs qui seront saisis pendant les heures système actuelles. Les transactions sont acceptées depuis le front de la chaîne d’événements actuels. Entrez autant de blocs un à la fois que bon vous semble. Une fois l'introduction des transactions sur la chaîne d'événements en cours terminée, GPSS World avancera l'horloge du système.

Considérons la chaîne d'événements actuels et la chaîne d'événements futurs dans notre modèle actuel. Définissez d’abord une condition d’arrêt qui entraînera l’arrêt de la simulation à chaque tentative d’entrée de bloc.

Assurez-vous que la fenêtre Blocs est en surbrillance. Vous devriez maintenant voir deux blocs

CLIQUEZ SUR l'icône Générer un bloc

Dans les icônes de débogage de la barre d'outils de débogage en haut

Bloquer les fenêtres Vous verrez une icône en forme d'indicateur d'arrêt.

CLIQUEZ SUR l'icône d'emplacement dans la barre d'outils de débogage en haut de la fenêtre

Cela placera un STOP dans le bloc généré. La simulation s'arrêtera

à la tentative d’entrée dans le bloc GENERATE. La commande STOP est abordée au chapitre 6 du manuel de référence GPSS World. Avant d'exécuter la simulation, examinez le contenu de la chaîne d'événements actuels et de la chaîne d'événements futurs.

Fenêtre SELECT / Instantané de simulation / Instantané CEC

Il n'y a rien dans le CEC, mais il y a plusieurs Transactions dans le FEC ! Le fait est que le bloc GENERATE était "Premier", créant ainsi la première transaction lorsque vous avez entré la commande STOP. Dès que vous entrez la commande START, 1 transaction sera déplacée vers la chaîne d'événements en cours et l'heure sera réglée sur 60.

Fermez chacune des fenêtres d'instantanés.

CLIQUEZ SUR le coin X-haut droit de chaque fenêtre

Ces fenêtres ne ressemblent pas aux fenêtres que vous sélectionnez Fenêtre / Fenêtre de simulation. Les instantanés sont des vues statiques de la condition actuelle et ne changeront pas pendant l'exécution de la simulation. Ils peuvent se régénérer en arrêtant la simulation et en ouvrant une fenêtre lorsque vous êtes prêt à visualiser les informations actuelles. Vous ne pouvez pas arrêter la simulation sans enregistrer les informations dans la fenêtre Frame sur l'état actuel de la simulation.

Assurez-vous que vous pouvez voir la fenêtre du journal. Cliquez sur À propos

zone d’en-tête si vous en avez besoin.

Commande SELECT/START

Et dans la boîte de dialogue, remplacez 1

Cela définit le score d'achèvement sur 100, déplace 1 transaction vers la chaîne d'événements en cours et la simulation commence. Mais n'oubliez pas que vous avez défini une condition d'arrêt. C'est pourquoi la simulation s'arrête à la première entrée du bloc et écrit un deuxième message dans la fenêtre journal. Vous pouvez également placer une condition d'arrêt sur n'importe quel bloc en utilisant stop dans le menu de la fenêtre Blocs. Les conditions d'arrêt actuelles peuvent être visualisées dans une fenêtre spéciale de simulation.

Travaillons avec la première transaction en entrant un bloc GENERATE. Utilisez la commande STEP 1, décrite dans les touches de fonction.

CLIQUEZ SUR

Regardez maintenant la chaîne d'événements actuels et la chaîne d'événements futurs en utilisant le menu Fenêtre / Instantané de simulation comme vous l'avez fait il y a un instant.

Vos fenêtres devraient ressembler aux figures 5.2 et 5.3.

Regardez maintenant la trame FEC afin de voir la transaction en attente de modélisation des informations. L'heure FEC est le BDT « heure de départ du bloc », qui est l'horloge du système lorsque les transactions en FEC doivent revenir à la simulation. La colonne Bloc suivante indique le numéro de bloc dans lequel la transaction sera saisie. Le bloc numéro 1 est le bloc GENERATE et le bloc numéro 2 est le bloc TERMINATE. 2 La transaction attend d'être entrée dans le bloc GENERATE.

Examinons maintenant la vue avancée de CEC. Fenêtre Frame CEC CLIQUEZ SUR + dans la fenêtre CEC (Fig. 5.4)

1 transaction est entrée dans le bloc GENERATE, créant ainsi 2 transactions, qui entrent dans la chaîne des événements futurs. 1 transaction est dans la chaîne d'événements actuels avec M1, le temps d'entrée de simulation est de 60 secondes et 2 transactions sont dans la chaîne d'événements futurs, prêtes à entrer dans le bloc GENERATE lorsque l'horloge simulée est de 120 secondes. Le fonctionnement du bloc GENERATE doit introduire une nouvelle transaction toutes les 60 secondes simulées. Vous verrez ces informations dans différentes vues de ces fenêtres. Vous verrez plus tard que les paramètres de Transaction sont facilement accessibles dans ces fenêtres.

Fermez les fenêtres Frame comme vous l'avez fait il y a quelques minutes.

Voyons quelle est l'heure actuelle. Pour ce faire, activez la fenêtre de journal.

Commande SELECT/AFFICHER

Dans la boîte de dialogue :

SÉLECTIONNER OK

AC1 est un SNA qui renvoie la valeur d'horloge absolue du système. 1

La transaction se déplacera aussi loin que possible dans le modèle actuel, où le temps était de 60. Si elle n'avance pas plus loin, alors la chaîne d'événements actuels sera supprimée.

Chargeons la commande SHOW dans .

SELECT Édition/Paramètres

Dans le bloc-notes Paramètres du modèle, sélectionnez l'onglet Les touches de fonction(Les touches de fonction).

Dans le bloc F8

1 La transaction sera détruite en entrant un bloc TERMINATE. C'est fait comme ça.

CLIQUEZ SUR

La transaction déplacera un bloc en réponse à la commande STEP 1, provoquée par une seule frappe. 1 La transaction a été détruite. La prochaine transaction qui se déplace dans la simulation est 2 transactions supprimées du FEC.

1 transaction terminée. Puisque cela a épuisé la chaîne d'événements actuels, il n'y a rien d'autre à exécuter à l'heure 60. GPSS World a avancé l'horloge jusqu'à la prochaine heure programmée de 120. 2 La transaction est supprimée de la chaîne d'événements futurs et placée sur la chaîne d'événements actuels. événements (Chaîne d'événements actuels). La chaîne d'événements futurs est désormais vide. Cependant, la transaction 2 est sur le point d'entrer dans un bloc GENERATE. Cela créera 3 transactions et cela est prévu pour les futurs modèles 60 fois. La transaction 2 poursuivra ensuite son chemin. Laissons 2 transactions entrer dans le bloc GENERATE.

CLIQUEZ SUR

Considérons maintenant les chaînes.

Fenêtre SELECT / Instantané de simulation / Instantané CEC

Et avec une fenêtre à cadre CEC ayant un centre

CLIQUEZ SUR LE SIGNE +

Puis dans la fenêtre principale

Fenêtre SELECT / Instantané de simulation / Instantané FEC

Placez les fenêtres les unes au-dessus des autres. Ensuite, rallongez-les pour que vous puissiez voir toutes les informations. 3 La transaction est dans la chaîne d'événements futurs et son heure est 180, et 2 Transaction est entrée dans le bloc TERMINATE. Lorsque cela se produit, il sera détruit et la simulation se terminera au temps 120.

N'oubliez pas que la transaction 1 a déjà été saisie dans le bloc TERMINATE. Cela signifie que le nombre de terminaisons a diminué de 1. Vérifions TG1, le SNA, qui affiche le nombre de terminaisons restant. Dans le menu de la fenêtre Modèle

Commande SELECT/AFFICHER

Dans la boîte de dialogue.

La valeur est enregistrée dans la fenêtre Journal ainsi que dans la ligne d'état en bas de la fenêtre principale.

Nous avons donc mis en place un bloc TERMINATE pour soustraire 1 du nombre de terminaisons chaque fois que nous entrons dans une transaction. Depuis qu'il a été saisi précédemment, le nombre de terminaisons est désormais de 99. Si vous supprimez la condition d'arrêt et autorisez l'exécution de la simulation, elle s'arrêtera automatiquement lorsque le nombre de terminaisons atteindra 0.

Vous pouvez charger d'autres commandes dans les touches de fonction et vous familiariser pleinement avec la création et le fonctionnement des transactions dans la chaîne d'événements en cours. Pour ce faire, utilisez Snapshot Windows pour examiner ces modifications. Après avoir étudié, fermez toutes les fenêtres d'instantanés qui seront ouvertes.

Ouvrez maintenant la fenêtre d'expression sur l'horloge, sur le compte de clôture et le numéro de transaction active.

Fenêtre SELECT / Fenêtre de simulation / Fenêtre d'expression

Dans la boîte de dialogue, pour Étiquette

Et pour l'expression

CLIQUEZ SUR Voir

CLIQUEZ SUR Mémoriser

Vous verrez l'expression dans la fenêtre d'expression actuelle et mémoriserez, cela vous permettra de sauvegarder les informations avec la simulation et vous n'aurez pas à saisir les informations la prochaine fois. Vous pouvez l'afficher dans la fenêtre d'expression ou la fenêtre de tracé. Vous pouvez également saisir les expressions que vous souhaitez enregistrer avec le modèle en utilisant Edition / Paramètres Paramètres. En cliquant sur l'onglet Expressions, vous enregistrez le modèle pour les expressions que vous entrez. Les expressions seront mémorisées et seront disponibles la prochaine fois que vous créerez une simulation à partir de ce modèle.

Ajoutez maintenant l'expression suivante. Tapez-le dans l'étiquette et l'expression dans la boîte de dialogue, en supprimant les informations précédentes.

TYPE Loi. Xact

CLIQUEZ SUR Voir

CLIQUEZ SUR Mémoriser

Et répétez la procédure pour la troisième expression dans la boîte de dialogue pour

Étiquettes et expressions,

CLIQUEZ SUR Voir

CLIQUEZ SUR Mémoriser

Fermez la boîte de dialogue de la fenêtre Modifier l'expression

Vous devriez maintenant voir une nouvelle fenêtre d'expression.

Pour accélérer les choses, supprimez toutes les conditions d'arrêt.

Fenêtre SELECT / Instantané de simulation / Arrêts utilisateur

CLIQUEZ SUR Supprimer tout

Examinez à nouveau la fenêtre Blocs.

CLIQUEZ SUR N'importe où dans la fenêtre des blocs

CLIQUEZ SUR

Faites cela plusieurs fois pour observer les effets du mouvement.

Transactions dans le système en synchronisant le compte d'achèvement. Faites attention à la fenêtre de bloc, dans laquelle chaque bloc est mis en surbrillance après qu'une transaction y ait été saisie.

Lorsque vous êtes prêt, utilisez l'icône Continuer dans la barre d'outils de débogage en haut de la fenêtre Blocs ou les touches de fonction chargées pour continuer la simulation.

CLIQUEZ SUR l'icône (Continuer) dans la barre d'outils

Débogage en haut de Windows Ou

CLIQUEZ SUR

La simulation se terminera bientôt et il y aura un rapport. Vous pouvez examiner le rapport plus tard si vous le souhaitez.

Faisons une revue. GPSS World prévoit la transaction pour une modélisation future. Pour ce faire, il place la Transaction dans une chaîne de Transactions appelée Future Event Chain ou FEC. FEC augmente les valeurs de temps programmées. En d'autres termes, une transaction planifiée à l'heure 200 précédera une transaction planifiée à l'heure 300. Lorsqu'il n'y a aucune donnée sur l'horloge simulée, GPSS World prend les transactions de la future chaîne d'événements qui ont la valeur temporelle planifiée la plus basse.

Cette action fait avancer l’horloge système. Étant donné que le système synchronise les transitions après une certaine période pendant laquelle aucun événement ne se produit, il faut un temps discret pour simuler l'événement afin de l'exécuter beaucoup plus rapidement que le processus réel simulé.

La chaîne d'événements actuels, ou CEC, est utilisée comme zone d'attente pour les transactions modélisées par l'heure actuelle. L'absence de transactions sur CEC signifie qu'il n'y a aucun événement à l'heure actuelle de la simulation. GPSS World déplace toutes les transactions planifiées à l'heure la plus basse sur FEC vers CEC et avance l'horloge système à la nouvelle valeur.

Veuillez noter que lorsque des transactions planifiées sont répétées lors de leur entrée dans la simulation, elles passent de FEC à CEC, leur ordre est aléatoire. Cela évite le développement de certaines séquences temporelles involontaires. Vous pouvez empêcher cette randomisation en définissant la durée du lien de randomisation sur zéro dans la page du bloc-notes des paramètres de modèle personnalisé. Si vous souhaitez envisager cette installation

SELECT Édition/Paramètres

Sélectionnez l'onglet Page aléatoire.

Il est important de rappeler qu'à chaque fois que l'horloge simulée d'une Transaction est améliorée, la Transaction doit être extraite de la Chaîne des Événements Futurs.

Le temps ne s’écoule pas de manière fluide dans la simulation informatique numérique. Une simulation se compose généralement de plusieurs blocs dans une horloge donnée, suivis d'une transition soudaine vers l'horloge suivante. L'interprétation de la simulation parcourt tous les blocs GPSS trouvés dans cette horloge, le temps passe instantanément. Les transitions instantanées rapides permettent souvent à la simulation de s'exécuter beaucoup plus rapidement que le processus simulé en temps réel. La durée simulée est toujours associée aux nouvelles transactions reçues du FEC.

Lorsque vous utilisez la commande INTEGRATE pour gérer automatiquement une variable continue, l'algorithme d'intégration mathématique utilise des temps discrets pour modifier les variables continues. Cette simulation mixte se poursuit en alternant phases discrètes et continues. Nous considérerons cette question dans des travaux pratiques sur la modélisation relative continue.

PRESSE X-à droite coin supérieur de la fenêtre principale

Si vous souhaitez utiliser le modèle dans la leçon suivante, répondez « Non » à la question « Voulez-vous enregistrer les modifications » pour l'objet de simulation (.sim) et l'objet de rapport (.gpr), puis « Oui » pour enregistrer l'objet modèle (.gps).

Comme vous le savez probablement, avant qu'une transaction n'atteigne les mineurs, les nœuds la relaient entre eux jusqu'à ce qu'elle se propage à travers le réseau. Les transactions qui n'ont pas encore été traitées et confirmées par les mineurs sont stockées dans la mémoire des nœuds du mempool. En examinant le pool de transactions, un nœud peut décider s'il doit relayer une nouvelle transaction qu'il reçoit.

Il y a autant de pools dans le réseau que de nœuds. Le réseau Bitcoin étant distribué, tous les nœuds ne reçoivent pas des transactions spécifiques en même temps, de sorte que certains nœuds stockent plus de transactions que d'autres. De plus, le logiciel du nœud fonctionne sur différents matériels avec différentes quantités de RAM. Pour ces raisons, l'état du pool sur chaque nœud est unique.

Comment les transactions entrent dans le pool

Avant de placer une transaction dans son pool, un nœud doit effectuer les étapes suivantes.

  1. Vérifiez que la syntaxe de la transaction est correcte.
  2. Assurez-vous que les listes d'entrée et de sortie de transaction ne sont pas vides.
  3. Assurez-vous que la taille de la transaction en octets est inférieure à taille maximum bloc.
  4. Assurez-vous que tous les résultats et leur somme sont des valeurs monétaires valides.
  5. Assurez-vous que la transaction n'est pas une transaction Coinbase.
  6. Assurez-vous que nLockTime ne dépasse pas la valeur entière maximale (INT_MAX), que la taille de la transaction est d'au moins 100 octets et que le nombre d'opérandes de signature est inférieur ou égal à 2.
  7. Rejetez une transaction si l'algorithme scriptSig ou scriptPubKey y effectue des actions non standard.
  8. Rejetez une transaction si la transaction est déjà dans le pool ou la branche principale du bloc.
  9. Rejetez une transaction si l’une de ses entrées fait référence à la sortie d’une autre transaction du pool.
  10. Pour chaque entrée de transaction dans la branche principale d'un bloc ou d'un pool, recherchez une transaction avec une sortie correspondante. Si une entrée n’en a pas, ajoutez la transaction au groupe « transaction orpheline ».
  11. Pour chaque entrée : si la transaction avec la sortie correspondante est une transaction coinbase, assurez-vous qu'elle comporte au moins 100 confirmations (COINBASE_MATURITY), sinon rejetez la transaction.
  12. Pour chaque entrée : si aucune sortie correspondant à l’entrée n’existe, rejeter la transaction.
  13. En utilisant des transactions avec des sorties correspondantes, assurez-vous que chaque entrée et chaque montant sont des valeurs monétaires valides.
  14. Si la somme des entrées est inférieure à la somme des sorties, rejetez la transaction.
  15. Si les frais de transaction (définis comme la différence entre la somme des entrées et la somme des sorties) sont trop faibles pour inclure la transaction dans un bloc vide, rejetez la transaction.
  16. Vérifiez la validité de l'algorithme scriptPubKey pour chaque entrée et, si l'une des vérifications échoue, rejetez la transaction.
  17. Ajoutez une transaction au pool.
  18. Si la transaction est adressée au nœud lui-même, ajoutez-la au portefeuille.
  19. Relayez la transaction vers d’autres nœuds.
  20. Pour chaque transaction orpheline qui utilise la transaction en cours comme l'une de ses entrées, effectuez de manière récursive les 20 étapes décrites.

Si une transaction réussit tous ces contrôles, elle est placée dans le pool et le nœud commence à la relayer. Dans le cas contraire, la transaction n'est pas relayée.

Comment la réception d'un nouveau bloc affecte l'état du pool

Lorsqu'un nœud reçoit un nouveau bloc valide, il supprime du pool toutes les transactions contenues dans le bloc reçu, ainsi que les transactions avec des entrées conflictuelles. En conséquence, la taille du pool est considérablement réduite :


Les transactions qui ne sont pas dans le nouveau bloc restent dans le pool du nœud et ne sont pas rediffusées, c'est-à-dire que le nœud ne relaie une transaction que lorsqu'elle est ajoutée au pool. Si une transaction n’est pas confirmée au bout de plusieurs blocs, le portefeuille se charge de la relayer.

Que se passe-t-il lorsqu'un nœud manque de mémoire ?

Contrairement au minage, les utilisateurs n’ont aucune motivation financière pour faire fonctionner le nœud. Pour cette raison, la plupart des nœuds fonctionnent sur du matériel à faible consommation et le pool épuise souvent toutes les ressources disponibles. RAM. Dans les anciennes versions de Bitcoind, le nœud plantait simplement et redémarrait avec un pool vide.

Dans les versions ultérieures de Bitcoind (0.12+), à mesure que la taille du pool se rapproche de la quantité de mémoire disponible, le nœud définit des frais minimum. Les transactions dans lesquelles les frais par Ko de données n'atteignent pas ce seuil sont immédiatement supprimées du pool, après quoi seules les transactions avec des frais suffisants sont autorisées dans le pool.


Au fil du temps, le nœud réduit les frais de seuil, les ramenant progressivement à la valeur minrelayfee. Les frais de seuil peuvent être surveillés à l'aide de la commande getmempoolinfo RPC. Vous trouverez ci-dessous un exemple de modification de la commission minimale du pool pour un intervalle de temps aléatoire.


Le générateur de transactions est un module comptable universel.

Le générateur de transactions vous permet de :

  • établir des règles d'exécution d'événements comptables individuels et d'un ensemble d'événements au sein d'une opération ;
  • assurer la transactionnalité lors de la réalisation d'une opération qui est un ensemble complexe de plusieurs événements comptables ;
  • utiliser la norme et fonctions supplémentaires, règles d'interprétation et/ou d'évaluation des expressions ;
  • construire un schéma des événements comptables réalisés dans le cadre de l'opération, en obtenant les montants calculés et les comptes comptables des transactions ;
  • intégrer les transactions nouvellement développées avec les événements comptables standard du système.

Développement et innovation
Dans le processus de localisation du système Equation, nous avions besoin d'un outil nous permettant de configurer les règles d'enregistrement des transactions. Un tel outil a été développé. Les premières versions d'EHI ont été créées pour fonctionner en conjonction avec un système de caisse, d'où le nom du produit : EHI, Enhanced CS Host Interface. EHI a été utilisé pour mettre en place des règles de génération de transactions et de leur exécution lors de la réalisation de transactions en espèces. La prochaine génération du produit a été étendue pour inclure la possibilité d'utiliser EHI dans toute application nécessitant une comptabilité des transactions flexible et personnalisable.

Objectifs pour développer un module de comptabilité
Lors de la création d'un module d'opérations comptables typique, le développeur doit prendre en compte trois aspects principaux :

  • étudier les exigences pour la formation des actions comptables. Vous devez savoir quelles actions doivent être effectuées lors de l'application d'une transaction ;
  • concevoir le format d'appel pour ce module. Le format doit contenir tous les paramètres nécessaires à la génération des actions comptables (numéros de compte, montants, devises, etc.) ;
  • veillez à maintenir l’intégrité de la transaction. Si l'une des actions comptables ne peut être effectuée, la totalité de la transaction (actions effectuées précédemment) doit être annulée.
Tous les points ci-dessus doivent être pris en compte lors de la conception et du codage. Une fois le développement terminé, le code source est créé pour être compilé dans un module logiciel. Si les règles comptables, les formats d'appel ou d'autres exigences changent, vous devez apporter des modifications au code source et recompiler le programme.
En règle générale, chaque domaine fonctionnel a ses propres exigences pour effectuer les opérations comptables, ce qui conduit à la nécessité de répéter le processus décrit ci-dessus.
En développant le Transaction Generator, nous avons résolu le problème de la création d'un outil unique et universel qui permet de définir des règles pour effectuer des opérations comptables et générer des transactions selon certains paramètres. Cela ne nécessite aucune modification du logiciel.

Flexibilité dans la personnalisation des opérations
EHI peut être utilisé comme module de comptabilité universel, car avec son aide, un développeur (ou un analyste informatique) peut configurer des règles comptables, définir des paramètres d'appel, étendre les capacités standard du module avec des fonctions commerciales supplémentaires et intégrer le module de comptabilité dans leur candidature.
Lors de l'exécution, le noyau EHI interprète les paramètres et exécute les transactions en fonction de ces paramètres. L'intégrité des transactions est également assurée par EHI. Il n’est pas nécessaire de coder en dur les règles comptables dans un module séparé. Si les exigences changent, le développeur (ou l'analyste informatique) n'a qu'à modifier les paramètres de transaction définis dans le module de comptabilité.

Intégration du module de comptabilité
Les mécanismes du système d’équation standard doivent être utilisés pour intégrer des modules personnalisés dans les applications requises. Ils offrent à la fois la possibilité d'intégrer les développements propres de la banque dans le système et de modifier le fonctionnement des modules système standards en appelant des procédures utilisateur.
Pour appeler le module d'exécution EHI afin de traiter une transaction prédéfinie, l'application correspondante doit transmettre les paramètres suivants à EHI :

  • type de transaction (ou « mise en page » - utilisé pour obtenir les paramètres de transaction) ;
  • mode de fonctionnement (définit le mode de fonctionnement de l'EHI) ;
  • chiffre de transaction. Une référence unique qui permet d'identifier cette transaction dans les tables EHI. Peut être laissé vide, alors le module générera une référence conformément à la règle de génération de référence (configurée dans la fonction « EHI Layout Definition ») ;
  • Options supplémentaires. Des paramètres supplémentaires peuvent être utilisés pour transférer des données commerciales spécifiques vers le générateur de transactions. Le développeur peut définir la structure des paramètres en fonction de ses besoins (à l'aide de la fonction « Personnaliser les cartes de variables »).
EHI générera la transaction conformément aux paramètres et générera une liste des actions terminées, qui sera transférée à l'application appelante (via une table temporaire). Si des erreurs ou des avertissements surviennent, ils seront également signalés.

Modes de fonctionnement Le module de comptabilité EHI peut fonctionner dans les modes suivants :

  • Générer - seule la liste des actions pour une transaction est construite. Les actions elles-mêmes ne sont pas exécutées ;
  • Valider - une liste d'actions est construite, chaque action est vérifiée séparément pour la possibilité d'exécution. Si des erreurs ou des avertissements surviennent (devises différentes, fonds insuffisants, etc.), ils seront renvoyés à l'application appelante ;
  • Post - construit et applique une liste d'actions. Si une erreur survient lors du traitement d'une action, toutes les actions précédemment effectuées sont annulées.
  • Requête - ce mode est utilisé pour obtenir des informations sur les actions précédemment effectuées. L'application appelante doit transmettre le chiffrement de la transaction à EHI pour récupérer les informations ;
  • Supprimer - similaire au mode Requête, seules toutes les actions terminées sont supprimées. Par exemple, si une transaction a été générée aujourd'hui, elle sera supprimée. Si l'écriture a été effectuée les jours précédents, alors une écriture inversée ou corrective sera générée.

Définir les paramètres d'appel
Lors de l'appel d'EHI, les paramètres sont transmis sous forme de zone de données (tableau), composée de deux parties principales : les paramètres standard et les paramètres supplémentaires. Des paramètres supplémentaires peuvent contenir toute information commerciale spécifique à l'application (numéros de compte, montants, etc.). Pour qu'EHI puisse comprendre la structure des paramètres supplémentaires, le développeur doit configurer ce que l'on appelle une carte de paramètres contenant des informations sur chaque composant des paramètres supplémentaires.
Sur la base de paramètres supplémentaires statiques, vous pouvez définir des paramètres virtuels qui sont les résultats de l'évaluation des expressions. Ces expressions peuvent contenir n'importe lequel des paramètres définis précédemment.

Mise en place des règles comptables
Un ensemble de règles de comptabilité des transactions se compose de règles individuelles pour l'exécution des transactions. Chaque règle a son propre type et se compose d'éléments individuels (selon le type de règle).
Pour chaque élément de règle, un algorithme de calcul de sa valeur est configuré. L'interpréteur d'expression est intégré à EHI et constitue la principale raison pour laquelle EHI est un outil si flexible (voir la section suivante).

Interprétation des expressions
Le module de comptabilité dispose d'un outil intégré qui vous permet d'interpréter les expressions du langage de base le plus simple. Il fonctionne avec trois types de données principaux : chaîne de caractères, nombre et booléen.
Les opérateurs de base sont pris en charge, tels que plus, moins, diviser, multiplier, etc. Les expressions peuvent contenir des variables définies dans la carte des paramètres. De plus, des fonctions telles que SUBSTR, ROUND, MIN, MAX et autres sont prises en charge. L'interpréteur EHI peut appeler des fonctions supplémentaires liées à EHI, à l'équation ou à OS400. Par exemple, CONVERT - convertir un montant d'une devise à une autre en fonction des taux de détail, CHECKACC - vérifier l'existence d'un compte, DAJOBCTL - récupérer le contenu de la zone de données DAJOBCTL, etc. De plus, la banque peut définir ses propres fonctions et intégrez-les dans l’interpréteur EHI.

Extension des fonctionnalités de base du module de comptabilité S'il est nécessaire d'étendre les fonctionnalités de base du module comptable, la banque peut :

  • développer des fonctions supplémentaires à utiliser dans l'interpréteur d'expression EHI. Avec EHI, un environnement de développement est fourni contenant de la documentation et des modèles de programme dans les langages RPG et ILE C ;
  • développer des types d’actions supplémentaires. Pour ce faire, vous devez créer trois modules supplémentaires : un module pour ajouter une action, un module pour vérifier une action et un module pour annuler une action. La documentation EHI contient des informations sur la façon de procéder. De plus, EHI est livré avec plusieurs utilitaires qui peuvent être utilisés pour créer rapidement de nouveaux types d'actions basées sur les journaux du système Equation ;
  • utiliser des points d'appel pour les programmes utilisateur dans le module de comptabilité. La version standard d'EHI ne contient pas de points d'appel pour les programmes utilisateur, cependant, cette fonctionnalité peut être ajoutée à la demande de la banque.

Intégration de systèmes externes
EHI vous permet d'utiliser le mécanisme standard du système Equation - Cashier Host Interface - pour intégrer des systèmes externes.
Le mécanisme de l'interface hôte du caissier vous permet d'appeler un objet programme (module d'action) à partir de systèmes externes, auquel est transmise une liste standard de paramètres contenant les informations nécessaires pour effectuer une opération dans le système d'équation.
Le module d'action effectue (si nécessaire) une conversion de données supplémentaire et effectue les opérations requises.
EHI est livré avec un module d'action qui vous permet d'utiliser les fonctionnalités du module Transaction Generator à partir d'applications externes qui utilisent Cashier Host Interface, par exemple Cashier System, EBA et les propres développements de la banque.

Synopsis

Cet opérateur génère un SampleSet qui représente les données de transaction. Le nombre de transactions, le nombre de clients, le nombre d'articles et le nombre de clusters peuvent être spécifiés par l'utilisateur.

Description

L’opérateur Generate Transaction Data génère un SampleSet représentant les données de transaction. Cet exampleSet peut être utilisé lorsque vous ne disposez pas d'un ensemble de données représentant des données de transaction réelles. Il peut également être utilisé comme espace réservé pour une telle exigence. Cet ensemble de données comporte 2 attributs réguliers et 1 attribut spécial. Les attributs réguliers sont Item (nominal) et Amount (entier). L'attribut spécial est Id (nominal). Cet attribut Id représente l’ID client. Tous les articles achetés par un seul client sont répertoriés sous forme de plusieurs exemples avec le même identifiant client. L'attribut Article indique quel article a été acheté et l'attribut Montant indique la quantité de l'article acheté. Le nombre de transactions peut être défini par le nombre de transactions paramètre. Pour jeter un œil à cet ExempleSet, exécutez simplement l’exemple de processus ci-joint.

Sortir

Paramètres

  • number_transactions Ce paramètre spécifie le nombre de transactions générées. Plage : entier
  • number_customers Ce paramètre spécifie le nombre de clients générés. Plage : entier
  • number_items Ce paramètre spécifie le nombre d'éléments générés. Plage : entier
  • number_clusters Ce paramètre spécifie le nombre de clusters générés. Plage : entier
  • use_local_random_seed Ce paramètre indique si un graine aléatoire locale doit être utilisé pour la randomisation. En utilisant la même valeur de graine aléatoire locale produira le même SampleSet. La modification de la valeur de ce paramètre modifie la façon dont les exemples sont randomisés, ainsi l'ExampleSet aura un ensemble de valeurs différent. Plage : booléenne
  • local_random_seed Ce paramètre spécifie le graine aléatoire locale. Ce paramètre n'est disponible que si le utiliser des graines aléatoires locales Le paramètre est défini sur true. Plage : entier

Processus du didacticiel

Introduction à l'opérateur Générer des données de transaction

L’opérateur Generate Transaction Data est appliqué pour générer un SampleSet qui représente les données de transaction. Le paramètre number transactions est défini sur 1 000, donc l’ExampleSet aura 1 000 exemples. Le paramètre number customer est défini sur 50, il y aura donc 50 valeurs uniques dans l'attribut Id. Le paramètre number items est défini sur 80, il y aura donc 80 valeurs uniques dans l'attribut Item. Vous pouvez voir l'ExampleSet dans l'espace de travail des résultats. Le paramètre use local random seed est défini sur false dans cet exemple de processus. Définissez le paramètre use local random seed sur true et exécutez le processus avec différentes valeurs de graine aléatoire locale. Vous verrez que changer les valeurs de la graine aléatoire locale modifie la randomisation.

DRAFT - DRAFT (L'article est en cours de finalisation)

DANS Dernièrement La charge sur le réseau de diffusion a augmenté. De plus, des ICO sont souvent organisées, ce qui peut presque tripler la charge sur le réseau.

Une augmentation de la charge du réseau peut conduire à une situation dans laquelle votre transaction reste en attente pendant très longtemps.

Le fait est que les mineurs essaient d’abord de traiter les transactions les plus coûteuses. Par conséquent, les transactions dont les coûts de gaz sont plus élevés ont plus de chances d’être traitées. Quand la charge du réseau augmente les transactions avec de faibles coûts de gaz peut attendre son tour pendant plusieurs jours, voire plusieurs semaines.

Au moment de la rédaction de cet article, sous une charge normale du réseau, le nombre de transactions en attente varie de 2 000 à 4 000 000. Quand quelqu'un démarre une ICO, le nombre de transactions en attente peut augmenter jusqu'à 8-11 mille . L’image montre un saut si net.

Lorsqu'une transaction est en attente depuis très longtemps, l'utilisateur essaie d'envoyer la même transaction mais avec plus de gaz, puis une autre et une autre. En espérant qu'au moins l'un d'entre eux passera. Et toutes ces transactions restent en suspens.

Le fait est que les transactions à partir d’une adresse sont généralement traitées par ordre de priorité. Par conséquent, le tout premier n'a pas encore été traité - transaction de verrouillage, le reste attendra.

Pourquoi la transaction en attente apparaît-elle et disparaît-elle et le temps d'attente est-il remis à zéro ?

Lorsqu'une transaction passe à l'état en attente, cela signifie que le nœud a accepté votre transaction pour traitement. Et maintenant, il cherche un bloc. Cependant, le bloc peut être trouvé plus rapidement par un autre nœud qui ne contient pas votre transaction. Dans ce cas, le nœud qui a pris votre transaction « la recrache » et maintenant un autre nœud peut prendre votre transaction pour traitement. Dans ce cas, le temps est remis à zéro.

Comment pousser ou supprimer une transaction de verrouillage

Il convient de noter qu’attendre 2 à 3 heures pour une transaction, bien que ce ne soit pas normal, est toujours acceptable.

Les transactions dans un bloc ont leurs propres numéros uniques - occasionnellement. Si vous envoyez deux transactions au réseau avec le même occasionnellement, alors un seul d’entre eux sera traité. Et l’autre sera considéré comme incorrect. Il nous suffit donc de répéter la transaction avec le même occasionnellement mais augmenter le prix du gaz. Dans ce cas, le nœud acceptera la transaction ayant le coût de traitement le plus élevé et rejettera celle qui bloque comme incorrecte. Et nous résoudrons notre problème.

Comment faire?

Ainsi, si vous souhaitez supprimer spécifiquement la transaction de verrouillage, il suffit alors d'envoyer une transaction vide avec à un prix élevé gaz Il n’y a pas d’option pour fixer le prix du gaz dans le portefeuille Mist ou Ethereum. Nous utiliserons donc MyEtherWallet.

  1. Recherchez la transaction de verrouillage. Pour cela, rendez-vous sur etherscan.io et saisissez dans le champ adresse l'adresse à partir de laquelle les transactions ont été envoyées et cliquez sur le bouton aller.
  2. Une liste de toutes les transactions de votre compte apparaîtra, cliquez sur le lien « Txns en attente »
  3. Vous verrez une liste de toutes les transactions en attente et le prix du gaz sera également affiché. En règle générale, la transaction de verrouillage est la première. C’est vrai, on voit que lors de la première transaction le prix du gaz est de 1 Gwei. Et le prochain en ligne, bien qu'il ait un prix du gaz de 21 Gwei, ne sera pas traité tant que la transaction de verrouillage n'est pas traitée. Cliquez sur le lien de hachage de transaction de verrouillage pour afficher les détails.
  4. Copiez le numéro pour plus de détails aucun et adresse depuis(en fait, c'est l'adresse du compte à partir duquel vous avez envoyé la transaction)
  5. Allez maintenant sur https://www.myetherwallet.com/ et sélectionnez l'onglet Envoyer hors ligne(Traduction hors ligne).
  6. Maintenant, parmi tous les champs, nous devons remplir les suivants :
  7. Notre tâche est désormais de déverrouiller votre portefeuille d'une manière qui vous convient. Fais le toi-même. Après le déverrouillage, vous aurez accès au bouton générer une transaction. Clique dessus. Et puis cliquez sur envoyer une transaction.
  8. Dans la fenêtre qui apparaît, cliquez sur le bouton bleu « Oui, je suis sûr ! » Effectuez une transaction.

Votre transaction devrait maintenant être supprimée après un certain temps. Ouvrez etherscan.io avec votre adresse et observez le processus. S'il y a des transactions ultérieures avec une faible quantité de gaz, cette procédure doit également être effectuée pour elles. Dans notre exemple, après une transaction de 1 GWei, il y a une transaction de 21 GWei, il suffit donc de supprimer la première.

gastrogourou 2017