Utilisation des conditions dans DuniterPy

Salut,

Je me penche sur la gestion des Unlock dans Silkaj, et je rencontre une erreur avec la méthode Unlock.from_inline().

Je me dis : j’ai dû mal comprendre comment fonctionne from_inline, je teste :

# I know this unlock is good
good_unlock = Unlock(0, [SIGParameter(0)])
str_unlock = good_unlock.inline()
# I check the inline format is good. It returns "0:SIG(0)" as expected.
print (str_unlock)
# Unlock.from_inline method refuses the inline format
false_unlock = Unlock.from_inline(str_unlock)
print (false_unlock.inline())

(j’en ai profité pour tester InputSource.from_inline() et OutputSource.from_inline() sans erreurs)
Je reçois cette erreur :

Traceback (most recent call last):
  File "test_all_inline.py", line 14, in <module>
    false_unlock = Unlock.from_inline(str_unlock)
  File "/home/thomas/.cache/pypoetry/virtualenvs/silkaj-aMRjPcbt-py3.7/lib/python3.7/site-packages/duniterpy/documents/transaction.py", line 424, in from_inline
    raise MalformedDocumentError("Inline input")
duniterpy.documents.document.MalformedDocumentError: Could not parse field Inline input

Est-ce que je fais mal les choses, ou est-ce que Duniterpy 55.1 a un souci ?

Effectivement, après vérification, l’expression régulière qui vérifie le format inline attend un saut de ligne en fin de document. Si je supprime le saut de ligne ton code fonctionne.

Il faut vérifier dans le protocole si c’est une erreur à la création du format inline ou bien à la lecture.

Mais en tous les cas c’est un bug ! Je fais une issue. Bravo et merci !

    class Unlock:
        """
        A Transaction UNLOCK
        """

        re_inline = re.compile("([0-9]+):((?:SIG\\([0-9]+\\)|XHX\\([0-9]+\\)|\\s)+)\n")

Le protocole DUBP attend bien un saut de ligne a la fin de chaque document au format raw/inline sans signature

Une fois la signature ajoutée, il n’y a pas de saut de ligne après la signature.

Je rappelle que pour tester le format des documents j’avais mis en place un outils en ligne voila déjà 1 an : https://dup-tools-front.duniter.io/

3 Likes

Ici il s’agit d’un saut de ligne après chaque unlock. C’est différent d’un saut de ligne à la fin du document Transaction.

1 Like

Du coup il faut se référer aux exemples du protocole qui sont bien fournis : rfc/0009_Duniter_Blockchain_Protocol_V11.md · master · nodes / common / doc · GitLab

1 Like

J’en conclu que c’est la création du document qui est erroné et auquel il manque un saut de ligne.

Cela fera un bon exercice pour l’atelier du vendredi aux RML14 de Toulouse !

2 Likes