Ğ1 en fork : bloc refusé car la transaction utilise des sources inexistantes surement perdue dans la résolution d’un fork


#1

Remuniter, mes nœuds et d’autres refusent le bloc 191946-000002F1 et sont en fork :
https://moul.re/zerobin/?cf2a12f6d04da0d9#JOXdFJ0ZyDv5tE1H36CQ4J+CKBdvNrZLQu4ZKf2hFRE=

En particulier :

2019-01-30T10:51:28+01:00 - info: Fork resolution: suite 1/1 REFUSED block#191946: Cannot read property 'match' of undefined
2019-01-30T10:51:28+01:00 - info: Fork resolution: suite 1/1 reached HEAD + 19. Now rolling back.
2019-01-30T10:51:42+01:00 - error:  TypeError: Cannot read property 'match' of undefined
    at txSourceUnlock (/opt/duniter/app/lib/indexer.js:1835:27)
    at Promise.all.underscore_1.Underscore.where.map (/opt/duniter/app/lib/indexer.js:759:31)
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:160:7)

Bloc invalidé par certains nœuds du réseau :

curl g1.duniter.org/blockchain/block/191946
{
  "version": 11,
  "nonce": 120100000140395,
  "number": 191946,
  "powMin": 87,
  "time": 1548819621,
  "medianTime": 1548811053,
  "membersCount": 1592,
  "monetaryMass": 529305715,
  "unitbase": 0,
  "issuersCount": 29,
  "issuersFrame": 146,
  "issuersFrameVar": 0,
  "currency": "g1",
  "issuer": "HqSgtznEg3MEyhq81aX95XuFwRMGmuZ3Rzs7UxgvBH1f",
  "signature": "TiMas5TyvFiKnJpwEvbyGYkWZDg8mYP3qate01YxO/AaYOdHvKc1Fp4iCuaZkFdzJBDSIVRA+vcpRo2EFFElAw==",
  "hash": "000002F1B31E67D021F440360DC1B370AB31C1BF4B49DAE56BDB0981AC137C23",
  "parameters": "",
  "previousHash": "000000A9F4D910FE4977DFC628ED1B24929CA2C2ACE169921F7FEFEE5BBFAA2E",
  "previousIssuer": "D3krfq6J9AmfpKnS3gQVYoy7NzGCc61vokteTS8LJ4YH",
  "inner_hash": "FCA00AD3E2EDD63E5A4218630A6673D7A4A008C8E525D896204E6345878F7A21",
  "dividend": null,
  "identities": [],
  "joiners": [],
  "actives": [],
  "leavers": [],
  "revoked": [],
  "excluded": [],
  "certifications": [],
  "transactions": [
    {
      "version": 10,
      "currency": "g1",
      "locktime": 0,
      "hash": "32EEB19446A77052C42C7E7B4F0DA4E7AA9405FCD7AC7D56426031A000C0A0B2",
      "blockstamp": "191943-000004DDB40CC456F319BDEE9CE603561DF9AC6B9ACD21E0AFC682F326435BE7",
      "blockstampTime": 0,
      "issuers": [
        "DQh2YyvsGbfehrDmYta3XZXwqNpQXx7yeRMK7Ak59JMg"
      ],
      "inputs": [
        "1000:0:T:94FD41FA2A256A20F2689B2AF2BB8BB370C7896F0F4E7E6A0F9A622DD6969A35:1",
        "6000:0:T:0D3A680DBAC4CA50036EBD336CC16197B9952E25BDE1E53160A60ACA48A2FEF5:0"
      ],
      "outputs": [
        "1255:0:SIG(6vjF4vk9UiGWk7b12yPx2NXWQ4QaVDDesZXdpactihMR)",
        "5745:0:SIG(DQh2YyvsGbfehrDmYta3XZXwqNpQXx7yeRMK7Ak59JMg)"
      ],
      "unlocks": [
        "0:SIG(0)",
        "1:SIG(0)"
      ],
      "signatures": [
        "fl07WGoRpmKlKBmVEI9ah/77I/Vd2nVplwnBHbPeVNV78R+EbjNoeCV8jggmLAm2+gGlEMsrzTPFEIyL5QxVBQ=="
      ],
      "comment": "GU2POM"
    }
  ],
  "raw": "Version: 11\nType: Block\nCurrency: g1\nNumber: 191946\nPoWMin: 87\nTime: 1548819621\nMedianTime: 1548811053\nUnitBase: 0\nIssuer: HqSgtznEg3MEyhq81aX95XuFwRMGmuZ3Rzs7UxgvBH1f\nIssuersFrame: 146\nIssuersFrameVar: 0\nDifferentIssuersCount: 29\nPreviousHash: 000000A9F4D910FE4977DFC628ED1B24929CA2C2ACE169921F7FEFEE5BBFAA2E\nPreviousIssuer: D3krfq6J9AmfpKnS3gQVYoy7NzGCc61vokteTS8LJ4YH\nMembersCount: 1592\nIdentities:\nJoiners:\nActives:\nLeavers:\nRevoked:\nExcluded:\nCertifications:\nTransactions:\nTX:10:1:2:2:2:1:0\n191943-000004DDB40CC456F319BDEE9CE603561DF9AC6B9ACD21E0AFC682F326435BE7\nDQh2YyvsGbfehrDmYta3XZXwqNpQXx7yeRMK7Ak59JMg\n1000:0:T:94FD41FA2A256A20F2689B2AF2BB8BB370C7896F0F4E7E6A0F9A622DD6969A35:1\n6000:0:T:0D3A680DBAC4CA50036EBD336CC16197B9952E25BDE1E53160A60ACA48A2FEF5:0\n0:SIG(0)\n1:SIG(0)\n1255:0:SIG(6vjF4vk9UiGWk7b12yPx2NXWQ4QaVDDesZXdpactihMR)\n5745:0:SIG(DQh2YyvsGbfehrDmYta3XZXwqNpQXx7yeRMK7Ak59JMg)\nGU2POM\nfl07WGoRpmKlKBmVEI9ah/77I/Vd2nVplwnBHbPeVNV78R+EbjNoeCV8jggmLAm2+gGlEMsrzTPFEIyL5QxVBQ==\nInnerHash: FCA00AD3E2EDD63E5A4218630A6673D7A4A008C8E525D896204E6345878F7A21\nNonce: 120100000140395\n"
}⏎

Car il ne respecte pas la règle BR_G47 :

####### BR_G47 - ENTRY.isLocked
INPUT_ENTRIES = LOCAL_SINDEX[op='CREATE',identifier=ENTRY.identifier,pos=ENTRY.pos,amount=ENTRY.amount,base=ENTRY.base]
If COUNT(INPUT_ENTRIES) == 0 Then
    INPUT_ENTRIES = GLOBAL_SINDEX[identifier=ENTRY.identifier,pos=ENTRY.pos,amount=ENTRY.amount,base=ENTRY.base]
EndIf
INPUT = REDUCE(INPUT_ENTRIES)
ENTRY.isLocked = TX_SOURCE_UNLOCK(INPUT.conditions, ENTRY)

Le code incriminé :

        // BR_G47
        await Promise.all(underscore_1.Underscore.where(sindex, { op: constants.IDX_UPDATE }).map(async (ENTRY) => {
            const source = await getInputLocalFirstOrFallbackGlobally(sindex, ENTRY);
            ENTRY.conditions = source.conditions;
            ENTRY.isLocked = !txSourceUnlock(ENTRY, source, HEAD);
        }));

Les sources utilisées par cette transaction ne sont pas disponibles avant ou n’existaient pas (nœud bloqué avant ce bloc) :

curl duniter.moul.re/tx/sources/DQh2YyvsGbfehrDmYta3XZXwqNpQXx7yeRMK7Ak59JMg
{
  "currency": "g1",
  "pubkey": "DQh2YyvsGbfehrDmYta3XZXwqNpQXx7yeRMK7Ak59JMg",
  "sources": [
    {
      "type": "T",
      "noffset": 1,
      "identifier": "2D9679448680654A4694B52F855F44E57A2E99D86A2FA3BD48028E99B98D1F42",
      "amount": 5400,
      "base": 0,
      "conditions": "SIG(DQh2YyvsGbfehrDmYta3XZXwqNpQXx7yeRMK7Ak59JMg)"
    },
    {
      "type": "T",
      "noffset": 1,
      "identifier": "8D28C0AEB4B651B584312737AE25D79FAD1455FA149CDFD23C4B1B9A176E7E03",
      "amount": 2000,
      "base": 0,
      "conditions": "SIG(DQh2YyvsGbfehrDmYta3XZXwqNpQXx7yeRMK7Ak59JMg)"
    }
  ]
}

Ni après (nœud qui a accepté ce bloc) :

curl g1.duniter.org/tx/sources/DQh2YyvsGbfehrDmYta3XZXwqNpQXx7yeRMK7Ak59JMg
{
  "currency": "g1",
  "pubkey": "DQh2YyvsGbfehrDmYta3XZXwqNpQXx7yeRMK7Ak59JMg",
  "sources": [
    {
      "type": "T",
      "noffset": 0,
      "identifier": "90FF03A666B9EF6C6E9A5981193FBD2E614C306098E6728DCD8D330420616D23",
      "amount": 1000,
      "conditions": "SIG(DQh2YyvsGbfehrDmYta3XZXwqNpQXx7yeRMK7Ak59JMg)",
      "base": 0
    },
    {
      "type": "T",
      "noffset": 1,
      "identifier": "2D9679448680654A4694B52F855F44E57A2E99D86A2FA3BD48028E99B98D1F42",
      "amount": 5400,
      "conditions": "SIG(DQh2YyvsGbfehrDmYta3XZXwqNpQXx7yeRMK7Ak59JMg)",
      "base": 0
    },
    {
      "type": "T",
      "noffset": 1,
      "identifier": "8D28C0AEB4B651B584312737AE25D79FAD1455FA149CDFD23C4B1B9A176E7E03",
      "amount": 2000,
      "conditions": "SIG(DQh2YyvsGbfehrDmYta3XZXwqNpQXx7yeRMK7Ak59JMg)",
      "base": 0
    },
    {
      "type": "T",
      "noffset": 1,
      "identifier": "32EEB19446A77052C42C7E7B4F0DA4E7AA9405FCD7AC7D56426031A000C0A0B2",
      "amount": 5745,
      "conditions": "SIG(DQh2YyvsGbfehrDmYta3XZXwqNpQXx7yeRMK7Ak59JMg)",
      "base": 0
    },
    {
      "type": "T",
      "noffset": 1,
      "identifier": "92467116650E0FA4DBCB5E66B779D4BB42E89373087459F428693A107096B2F1",
      "amount": 19150,
      "conditions": "SIG(DQh2YyvsGbfehrDmYta3XZXwqNpQXx7yeRMK7Ak59JMg)",
      "base": 0
    }
  ]
}

Bon, je suis allé mettre un point d’arrêt en ligne de commande grâce à cette doc.

Ajouter debugger; autour de /opt/duniter/app/lib/indexer.js:759, lancer :

cd /opt/duniter/
./node/bin/node inspect bin/duniter direct_start
continue # still you reach your `debugg;` breakpoint
repl # To display variables content

Ce que je semble conclure, c’est qu’il manque la source pour que la transaction puisse avoir lieu :

> source
{  }
> ENTRY
{ index: 'SINDEX',
  op: 'UPDATE',
  srcType: 'T',
  tx: '32EEB19446A77052C42C7E7B4F0DA4E7AA9405FCD7AC7D56426031A000C0A0B2',
  identifier: '94FD41FA2A256A20F2689B2AF2BB8BB370C7896F0F4E7E6A0F9A622DD6969A35',
  ... }

C’est bien ça, la source est vide, j’ai comparé sur ğ1-test où la source existait dans un nouveau bloc ajouté.
Du coup, le client a dû faire une erreur en envoyant cette transaction avec ces fausses sources.
Mais, l’important est que l’implémentation des nœuds ne devraient pas accepter dans leurs bacs à sable des transactions avec des sources inexistantes et encore moins permettre que ça entre dans la chaîne.


Ğ1 en forks à partir du bloc #206587
Historique des difficultés techniques recontrés par la Ğ1
Ğ1 en forks à partir du bloc #206587
#2

Un noeud qui a accepté le bloc ne peut plus avoir la source dans l’URL puisqu’elle a été consommée non ?

En tout cas belle analyse, bravo pour la démarche et la documentation.

Je me demande si il ne faudrait pas avertir les utilisateurs qu’un gros fork est en cours et qu’il y a un risque de perte de donnée, donc faire attention à tracer ses échanges ?

Je ne maitrise pas bien les conséquences de ce fork, je préfère laisser @cgeek nous dire ce qu’il faudrait faire.


#3

Oui, bien vu.

Merci, je suis ravi et satisfait de la progression de ma compréhension.

Oui, il y a déjà 10 heures de donnés en jeu, bien que ça ne soit pas dense. Ces donnés sont surement rejouable sur une autre branche.
Il y a actuellement six/sept transactions, huit certifications et quatre renouvellements, deux expirations et un DU.


Forks réguliers avec obligation de resynchroniser à partir de zéro
#4

Je ne peux pas intervenir avant ce soir. Vous pourriez effectivement prévenir les utilisateurs.


#5

Et notamment connaître l’ampleur du fork et sa légitimité (sur ce dernier point @Moul tu sembles avoir investigué mais je n’ai pas compris les conclusions : le fork majoritaire est-il dans l’erreur d’un point de vue protocolaire ou pas ?).


#6

Les inputs de cette transaction sont des sources qui n’existeraient pas selon mes investigations :

Mon nœud qui est actuellement au bloc 191945, dit ne pas avoir ces deux sources :

curl duniter.moul.re/tx/sources/DQh2YyvsGbfehrDmYta3XZXwqNpQXx7yeRMK7Ak59JMg
{
  "currency": "g1",
  "pubkey": "DQh2YyvsGbfehrDmYta3XZXwqNpQXx7yeRMK7Ak59JMg",
  "sources": [
    {
      "type": "T",
      "noffset": 1,
      "identifier": "2D9679448680654A4694B52F855F44E57A2E99D86A2FA3BD48028E99B98D1F42",
      "amount": 5400,
      "base": 0,
      "conditions": "SIG(DQh2YyvsGbfehrDmYta3XZXwqNpQXx7yeRMK7Ak59JMg)"
    },
    {
      "type": "T",
      "noffset": 1,
      "identifier": "8D28C0AEB4B651B584312737AE25D79FAD1455FA149CDFD23C4B1B9A176E7E03",
      "amount": 2000,
      "base": 0,
      "conditions": "SIG(DQh2YyvsGbfehrDmYta3XZXwqNpQXx7yeRMK7Ak59JMg)"
    }
  ]
}

Il faudrait vérifier rigoureusement que ces sources n’existent pas.

Il respecte surement la règle BR_G47, mais pas le fait d’accepter une transaction avec une source inexistante. Ce qui me semble être un non-respect du protocole.


#7

Il y a bien un fork qui refuse cette transaction qui se développe :

Issuers for last 5 blocks from block n°191943 to block n°191947 
|   block |  gentime  |  mediantime  |    hash    |    uid    |
|---------+-----------+--------------+------------+-----------|
|  191947 | 04:51:38  |   02:28:50   | 0000002D60 | BnimajneB |
|  191946 | 04:40:21  |   02:17:33   | 000008397D | Mententon |
|  191945 | 04:29:11  |   02:06:23   | 000000A9F4 |  ji_emme  |

Avec #191945 comme bloc commun.


#8

Je suis dans le fork, faut-il que je j’arrête mon nœud ou autre chose ?


#9

Tant qu’on a pas connaissance de la cause du problème il est préférable de ne rien faire quant au fait de choisir une branche ou une autre.


#10

Bon au final, c’est un mini-fork incluant 3 membres et Remuniter.

D’après le test suivant, je dirais que le fork majoritaire a eu raison d’accepter la transaction.

  1. Synchroniser au point de fork (dernier bloc commun)

    bin/duniter sync g1.cgeek.fr --nointeractive 191945
    
  2. Dumper le s_index (table de protocole contenant les sources de monnaie).
    N.B. : il faut ajouter un peu de RAM (ici 4GB) car le dump est un peu rudimentaire (voire bourrin), ici j’utilise donc directement le fichier bin/duniter pour pouvoir forcer NodeJS.

    node --max-old-space-size=4096 bin/duniter dump table s_index > sindex
    
  3. Afficher l’état des sources consommées :

$ head -n 3 sindex && grep 94FD41FA2A256A20F2689B2AF2BB8BB370C7896F0F4E7E6A0F9A622DD6969A35 sindex 
┌────────┬──────────────────────────────────────────────────────────────────┬──────────────────────────────────────────────────────────────────┬────────┬─────────────────────────────────────────────────────────────────────────┬─────────┬──────┬──────────┬──────────┬───────────────────────────────────────────────────┬───────────┐
│ op     │ tx                                                               │ identifier                                                       │ pos    │ created_on                                                              │ amount  │ base │ locktime │ consumed │ conditions                                        │ writtenOn │
├────────┼──────────────────────────────────────────────────────────────────┼──────────────────────────────────────────────────────────────────┼────────┼─────────────────────────────────────────────────────────────────────────┼─────────┼──────┼──────────┼──────────┼───────────────────────────────────────────────────┼───────────┤
│ UPDATE │ 94FD41FA2A256A20F2689B2AF2BB8BB370C7896F0F4E7E6A0F9A622DD6969A35 │ 5E97C80CF04C0D7955AC86052E549D56DEC69881436639A5566F5B1095789CAA │ 0      │ 191736-000000BF7BAC15770F91FAF69A304C5D0EC909080839EF54CBD2A3ECA878C414 │ 2000    │ 0    │ 0        │ 1        │ SIG(DQh2YyvsGbfehrDmYta3XZXwqNpQXx7yeRMK7Ak59JMg) │ 191738    │
│ CREATE │ 94FD41FA2A256A20F2689B2AF2BB8BB370C7896F0F4E7E6A0F9A622DD6969A35 │ 94FD41FA2A256A20F2689B2AF2BB8BB370C7896F0F4E7E6A0F9A622DD6969A35 │ 0      │ NULL                                                                    │ 1000    │ 0    │ 0        │ 0        │ SIG(6vjF4vk9UiGWk7b12yPx2NXWQ4QaVDDesZXdpactihMR) │ 191738    │
│ CREATE │ 94FD41FA2A256A20F2689B2AF2BB8BB370C7896F0F4E7E6A0F9A622DD6969A35 │ 94FD41FA2A256A20F2689B2AF2BB8BB370C7896F0F4E7E6A0F9A622DD6969A35 │ 1      │ NULL                                                                    │ 1000    │ 0    │ 0        │ 0        │ SIG(DQh2YyvsGbfehrDmYta3XZXwqNpQXx7yeRMK7Ak59JMg) │ 191738    │

$ head -n 3 sindex && grep 0D3A680DBAC4CA50036EBD336CC16197B9952E25BDE1E53160A60ACA48A2FEF5 sindex 
┌────────┬──────────────────────────────────────────────────────────────────┬──────────────────────────────────────────────────────────────────┬────────┬─────────────────────────────────────────────────────────────────────────┬─────────┬──────┬──────────┬──────────┬───────────────────────────────────────────────────┬───────────┐
│ op     │ tx                                                               │ identifier                                                       │ pos    │ created_on                                                              │ amount  │ base │ locktime │ consumed │ conditions                                        │ writtenOn │
├────────┼──────────────────────────────────────────────────────────────────┼──────────────────────────────────────────────────────────────────┼────────┼─────────────────────────────────────────────────────────────────────────┼─────────┼──────┼──────────┼──────────┼───────────────────────────────────────────────────┼───────────┤
│ CREATE │ 0D3A680DBAC4CA50036EBD336CC16197B9952E25BDE1E53160A60ACA48A2FEF5 │ 0D3A680DBAC4CA50036EBD336CC16197B9952E25BDE1E53160A60ACA48A2FEF5 │ 0      │ NULL                                                                    │ 6000    │ 0    │ 0        │ 0        │ SIG(DQh2YyvsGbfehrDmYta3XZXwqNpQXx7yeRMK7Ak59JMg) │ 191739    │
│ CREATE │ 0D3A680DBAC4CA50036EBD336CC16197B9952E25BDE1E53160A60ACA48A2FEF5 │ 0D3A680DBAC4CA50036EBD336CC16197B9952E25BDE1E53160A60ACA48A2FEF5 │ 1      │ NULL                                                                    │ 40      │ 0    │ 0        │ 0        │ SIG(6vjF4vk9UiGWk7b12yPx2NXWQ4QaVDDesZXdpactihMR) │ 191739    │
│ UPDATE │ 0D3A680DBAC4CA50036EBD336CC16197B9952E25BDE1E53160A60ACA48A2FEF5 │ 3D16393A3FD5562AA8EABD6CEB15D132D2A0C3E100736937987BAAFEAA2CDDB1 │ 0      │ 191737-00000009E740868AB2B1B99D69C962638A0A42C748A6CBA2E30070E7C2B17C00 │ 1000    │ 0    │ 0        │ 1        │ SIG(6vjF4vk9UiGWk7b12yPx2NXWQ4QaVDDesZXdpactihMR) │ 191739    │
│ UPDATE │ 0D3A680DBAC4CA50036EBD336CC16197B9952E25BDE1E53160A60ACA48A2FEF5 │ 79A50223071F72AB919F1D80C25DA56CDE89E2F5261D659A9E09FFF26C3A5759 │ 1      │ 191737-00000009E740868AB2B1B99D69C962638A0A42C748A6CBA2E30070E7C2B17C00 │ 5040    │ 0    │ 0        │ 1        │ SIG(6vjF4vk9UiGWk7b12yPx2NXWQ4QaVDDesZXdpactihMR) │ 191739    │

Ici nous sommes donc positionnés avant la transaction provoquant le fork. On voit que les deux sources invoquées :

  1. 94FD41FA2A256A20F2689B2AF2BB8BB370C7896F0F4E7E6A0F9A622DD6969A35:1
  2. 0D3A680DBAC4CA50036EBD336CC16197B9952E25BDE1E53160A60ACA48A2FEF5:0

sont effectivement disponibles, car :

  • la source 94F…35:1 est créée (dernière ligne du premier dump, op = CREATE et pos = 1, amount = 1000) et jamais consommée (pas de op = UPDATE avec le même identifier + op = 1)
  • la source 0D3…F5:0 est créée (premier ligne du second dump, op = CREATE et pos = 0, amount = 6000) et jamais consommée (pas de op = UPDATE avec le même identifier + op = 0)

En conclusion, les nœuds ayant forké auraient dû accepter le bloc. Reste à comprendre pourquoi, selon eux, ces deux sources étaient déjà consommées.


#11

Mon identité et mes nœuds sont également sur cette branche mais isolés de la PoW.

Et juste une petite faute : c’est pos = 0.

Ça semble être une bonne nouvelle. Attendons de voir pourquoi ces quatre nœuds ont refusés cette transaction.
Souhaites-tu un dump ou Remuniter te satisfait amplement ?


#12

Bien vu :slight_smile:

Pour le dump, je regarde celui de Remuniter. J’espère que l’élagage n’a pas déjà supprimé l’historique …

edit : malheureusement je ne trouve plus les enregistrements des 2 sources, ni de leurs consommations. L’élagage est déjà passé par là.

J’ai quand même une idée de ce qui a pu se passer, la cause implique sûrement la résolution de fork. Ticket #1336 créé.


Ğ1 en forks à partir du bloc #206587
#13

Bon du coup, on ne saura pas ce qu’il s’est passé. Cet élagage a dû aussi avoir lieu sur ces quatre autres nœuds ? Il a lieu quand cet élagage ? J’ai un nœud qui a crashé dans la nuit, que j’ai relancée autour de midi. Peut-être a-t-il cette information ?
Je vais synchroniser un de mes nœuds sur la branche majeure.
Est-ce que je fais bien de notifier Nicole, Mententon et BnimajneB de se synchroniser sur la branche majeure ?


#14

Bonjour à tous

DQh2YyvsGbfehrDmYta3XZXwqNpQXx7yeRMK7Ak59JMg c’est moi.
Je me suis amusé cette nuit pour tester un projet de boutique en ligne et j’ai remarqué a un moment que ca semblait partir en quenouille sur la blockchain…


#15

Merci de t’être dénoncé on va pouvoir te donner des fessés :wink:


#16

C’est super intéressant de lire ce forum au passage, continuez ce bon boulot :slight_smile:


#17

@nicole, @Mententon03 et @Junidev (BnimajneB), vous pouvez synchroniser vos nœuds sur la branche principale que vous pouvez retrouver sur g1.duniter.org.

Nos nœuds ont subi un bug.


#18

Merci, j’attendais le feu vert.


#19

Bonjour,
Je ne m’y connais pas trop en technique mais je viens remonter un problème qui me fait penser à ce fork.
J’ai tenté d’utiliser le système de paiment par sms (http://qo-op.com/fr/aide?q=%2Faide) ce matin. J’ai créé un portefeuille via sms dont la clef est AeejF5Byz4XChEmG1ipv6bixhnS4UyzUxanZL5Jd4H6f
J’y ai fait un virement de 20G1 ce matin qui est maintenant effectif.
Quand je vais sur cesium via (cesium.mlmtp.fr) j’y ai bien 21G1 mais quand je fais S via mon téléphone j’ai 1 G1 seulement dessus :confused:

Un rapport avec ce fork ?
Si ce n’est pas le cas, désolé pour le dérangement !


#20

Surement que le nœud que tu consulte est désynchronisé (sur un autre fork) et n’a pas encore cette transaction.

silkaj balance AeejF5Byz4XChEmG1ipv6bixhnS4UyzUxanZL5Jd4H6f
Total amount of: AeejF5Byz4XChEmG1ipv6bixhnS4UyzUxanZL5Jd4H6f
----------------------------------------------------------------
Total Relative     = 2.1 UD Ğ1
Total Quantitative = 21.04 Ğ1