Skip to content
Snippets Groups Projects

Draft: Resolve "Error: Base 58 requirement is violated"

Open Nicolas80 requested to merge 48-error-base-58-requirement-is-violated into master
1 unresolved thread

Adding extra information when the DB parsing of DbAccountId fails, so we know for which string it failed.

Then we will need to investigate if we can reproduce the issue when re-importing the linked key.

Closes #48

Edited by Nicolas80

Merge request reports

Loading
Loading

Activity

Filter activity
  • Approvals
  • Assignees & reviewers
  • Comments (from bots)
  • Comments (from users)
  • Commits & branches
  • Edits
  • Labels
  • Lock status
  • Mentions
  • Merge request status
  • Tracking
  • assigned to @Nicolas80

  • Nicolas80 added 1 commit

    added 1 commit

    • e8da3aa9 - Added extra message when the DB parsing of DbAccountId fails, so we know for...

    Compare with previous version

  • Author Maintainer

    @HugoTrentesaux could you take this branch locally and try to perform the gcli vault list all with your problematic database ?

    It should display the address string for which it failed the parsing:

    gcli vault list all                    
    DatabaseError(Custom("Cannot parse DbAccountId for string '5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY,' - error: Base 58 requirement is violated"))
  • Nicolas80 changed the description

    changed the description

    • $ git status
      Sur la branche 48-error-base-58-requirement-is-violated
      Votre branche est à jour avec 'origin/48-error-base-58-requirement-is-violated'.
      
      rien à valider, la copie de travail est propre
      $ cargo build -j 4 
      [...]
          Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.84s
      $ ./target/debug/gcli vault list all 
      DatabaseError(Custom("Cannot parse DbAccountId for string '\"5CiGCfbk4X9wtJHguwUCFBmZaywZYo1e9ewtTzhExGL5P5gK\"' - error: Base 58 requirement is violated"))

      ah je vois ! il y a les guillemets dedans ><

    • Author Maintainer

      o_O mais comment les guillemets sont arrivés jusque dans la DB ??

      Edited by Nicolas80
    • Author Maintainer

      Ok, j'ai un "fix" qui fonctionne; mais c'est un peu moche; surtout le dernier commit ou on doit matcher de 2 manières dans la recherche des children.

      Est-ce que tu peux tester la branche mise à jour dans cette MR ?

      Et faire un review si ça te semble acceptable ou si on préfère ne pas faire le changement et tenter de trouver la cause initiale et voir si on pourrait arriver à l'empêcher ?

    • Author Maintainer

      J'ai ajouté un commit en plus qui ajoute un debug! log pour permettre de vérifier la valeur string que l'on fournit à sea-orm pour la persistence.

      Exemple d'import en activant les logs debug (en format g1v1, pour id:"test1" secret:"test1"):

      RUST_LOG=debug gcli vault import -S g1v1
      [2025-03-26T12:20:43Z INFO  sqlx::query] summary="PRAGMA foreign_keys = ON; …" db.statement="\n\nPRAGMA foreign_keys = ON;\n" rows_affected=0 rows_returned=0 elapsed=47.3µs elapsed_secs=4.73e-5
      [2025-03-26T12:20:43Z INFO  sqlx::query] summary="CREATE TABLE IF NOT …" db.statement="\n\nCREATE TABLE IF NOT EXISTS \"vault_account\" (\n  \"address\" varchar NOT NULL PRIMARY KEY,\n  \"name\" varchar UNIQUE,\n  \"path\" varchar,\n  \"crypto_scheme\" varchar,\n  \"encrypted_suri\" varbinary_blob,\n  \"parent\" varchar,\n  FOREIGN KEY (\"parent\") REFERENCES \"vault_account\" (\"address\")\n)\n" rows_affected=0 rows_returned=0 elapsed=187.67µs elapsed_secs=0.00018767
      > G1v1 id:  ********
      > G1v1 password:  ********
      The G1v1 public key for the provided secret is: '8KJjnraAVyGpdioeL5NDjgMXQ72UF58LKhaudjpKhPnt'
      > Is it the correct one (if not, you should try again to input G1v1 id/password) ? Yes
      
      Trying to import for SS58 address :'5EXDzzCMmvXHupvcyE14bxqTvXqP6v78M6DWFX7n5vyA4yBp'
      
      [2025-03-26T12:20:54Z DEBUG gcli::entities::vault_account] DB converting DbAccountId to string:'5EXDzzCMmvXHupvcyE14bxqTvXqP6v78M6DWFX7n5vyA4yBp'
      [2025-03-26T12:20:54Z INFO  sqlx::query] summary="SELECT \"vault_account\".\"address\", \"vault_account\".\"name\", \"vault_account\".\"path\", …" db.statement="\n\nSELECT\n  \"vault_account\".\"address\",\n  \"vault_account\".\"name\",\n  \"vault_account\".\"path\",\n  \"vault_account\".\"crypto_scheme\",\n  \"vault_account\".\"encrypted_suri\",\n  \"vault_account\".\"parent\"\nFROM\n  \"vault_account\"\nWHERE\n  \"vault_account\".\"address\" = ?\nLIMIT\n  ?\n" rows_affected=0 rows_returned=0 elapsed=137.96µs elapsed_secs=0.00013796
      Enter password to protect the key
      > Password ********
      (Optional) Enter a name for the vault entry
      > Name: test-db-serialization
      [2025-03-26T12:21:15Z INFO  sqlx::query] summary="SELECT COUNT(*) AS num_items …" db.statement="\n\nSELECT\n  COUNT(*) AS num_items\nFROM\n  (\n    SELECT\n      \"vault_account\".\"address\",\n      \"vault_account\".\"name\",\n      \"vault_account\".\"path\",\n      \"vault_account\".\"crypto_scheme\",\n      \"vault_account\".\"encrypted_suri\",\n      \"vault_account\".\"parent\"\n    FROM\n      \"vault_account\"\n    WHERE\n      \"vault_account\".\"name\" = ?\n  ) AS \"sub_query\"\n" rows_affected=0 rows_returned=1 elapsed=111.22µs elapsed_secs=0.00011122
      [2025-03-26T12:21:15Z DEBUG gcli::entities::vault_account] DB converting DbAccountId to string:'5EXDzzCMmvXHupvcyE14bxqTvXqP6v78M6DWFX7n5vyA4yBp'
      [2025-03-26T12:21:15Z INFO  sqlx::query] summary="SELECT \"vault_account\".\"address\", \"vault_account\".\"name\", \"vault_account\".\"path\", …" db.statement="\n\nSELECT\n  \"vault_account\".\"address\",\n  \"vault_account\".\"name\",\n  \"vault_account\".\"path\",\n  \"vault_account\".\"crypto_scheme\",\n  \"vault_account\".\"encrypted_suri\",\n  \"vault_account\".\"parent\"\nFROM\n  \"vault_account\"\nWHERE\n  \"vault_account\".\"address\" = ?\nLIMIT\n  ?\n" rows_affected=0 rows_returned=0 elapsed=12.29µs elapsed_secs=1.229e-5
      [2025-03-26T12:21:15Z DEBUG gcli::entities::vault_account] DB converting DbAccountId to string:'5EXDzzCMmvXHupvcyE14bxqTvXqP6v78M6DWFX7n5vyA4yBp'
      [2025-03-26T12:21:15Z DEBUG gcli::entities::vault_account] DB converting DbAccountId to string:'5EXDzzCMmvXHupvcyE14bxqTvXqP6v78M6DWFX7n5vyA4yBp'
      [2025-03-26T12:21:15Z INFO  sqlx::query] summary="INSERT INTO \"vault_account\" (\"address\", …" db.statement="\n\nINSERT INTO\n  \"vault_account\" (\n    \"address\",\n    \"name\",\n    \"path\",\n    \"crypto_scheme\",\n    \"encrypted_suri\"\n  )\nVALUES\n  (?, ?, ?, ?, ?)\n" rows_affected=1 rows_returned=0 elapsed=174.18µs elapsed_secs=0.00017418
      [2025-03-26T12:21:15Z DEBUG gcli::entities::vault_account] DB converting DbAccountId to string:'5EXDzzCMmvXHupvcyE14bxqTvXqP6v78M6DWFX7n5vyA4yBp'
      [2025-03-26T12:21:15Z INFO  sqlx::query] summary="SELECT \"vault_account\".\"address\", \"vault_account\".\"name\", \"vault_account\".\"path\", …" db.statement="\n\nSELECT\n  \"vault_account\".\"address\",\n  \"vault_account\".\"name\",\n  \"vault_account\".\"path\",\n  \"vault_account\".\"crypto_scheme\",\n  \"vault_account\".\"encrypted_suri\",\n  \"vault_account\".\"parent\"\nFROM\n  \"vault_account\"\nWHERE\n  \"vault_account\".\"address\" = ?\nLIMIT\n  ?\n" rows_affected=0 rows_returned=1 elapsed=12.28µs elapsed_secs=1.228e-5
      Creating <Base> account Base[address:5EXDzzCMmvXHupvcyE14bxqTvXqP6v78M6DWFX7n5vyA4yBp, g1v1_pub_key:8KJjnraAVyGpdioeL5NDjgMXQ72UF58LKhaudjpKhPnt, name:Some("test-db-serialization"), crypto_scheme:Some(Ed25519)]
      Change done

      On voit mes lignes de log DEBUG gcli::entities::vault_account] DB converting DbAccountId to string:'5EXDzzCMmvXHupvcyE14bxqTvXqP6v78M6DWFX7n5vyA4yBp' en plus des infos & debug de sea-orm.

      Ce serait intéressant que tu tente d'ajouter un compte avec cette branche buildée en local et voir si on remarque qu'il ajoute des guillemets à cet endroit là.

      Edited by Nicolas80
    • Please register or sign in to reply
  • Nicolas80 added 2 commits

    added 2 commits

    • 54e82c1b - * Adapted `impl FromStr for DbAccountId` so that it is the only one that does...
    • 2cd0a861 - * Kind of ugly; but needed to adapt fn find_direct_children_accounts to also...

    Compare with previous version

  • Nicolas80 mentioned in issue #48

    mentioned in issue #48

  • Nicolas80 added 1 commit

    added 1 commit

    • 5924a73e - * Added `debug!` log inside `impl From<DbAccountId> for Value` used to...

    Compare with previous version

Please register or sign in to reply
Loading