cardano-wasm: gRPC-Web UTxO glue incompatible with shipped v1beta protobuf bundle
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 48/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- grpc, haskell, javascript
- Ambito
- api, backend, blockchain
Direzione di ricerca
Inizia da GRPC.hs:51-54 e confronta il suo JS generato con i campi v1beta ReadUtxosRequest in query.proto:101-104 e con il bundle distribuito. Poi leggi Query.hs:95 e cardano.proto:36,256-262 per seguire le richieste senza chiave e le rappresentazioni di coin. Il lavoro è completato quando getUtxosForAddress e getAllUtxos funzionano con il server v1beta e i valori di coin non vuoti non causano più un errore di tipo.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Summary
The cardano-wasm JS glue is written against the obsolete utxorpc.v1alpha API, while the shipped browser bundle is generated from this repo's v1beta protos (nix/proto-to-js.nix:17 uses cardano-rpc-src = ../cardano-rpc).
As a result the core UTxO-reading API of the browser SDK does not work against the in-repo proto and server.
Wallets depending on it cannot read balances.
It fails closed (exception or empty list), so there is no on-chain fund loss.
Concrete breaks
1. getUtxosForAddress throws an unconditional TypeError
GRPC.hs:51-54 references proto.utxorpc.v1alpha.cardano.AddressArray and calls req.setCardanoAddresses().
Neither exists in v1beta: ReadUtxosRequest only has keys + field_mask (query.proto:101-104).
Every call throws before any network request is made.
2. getAllUtxos always returns empty
js_readAllUtxos sends a keyless ReadUtxosRequest.
The v1beta server deliberately returns an empty response for that (Query.hs:95: "Returns an empty response when no keys are provided").
This means a silent zero balance for every wallet built on the SDK.
3. BigInt(utxo.cardano.coin) type mismatch
The glue assumes a scalar coin, but the v1beta TxOutput.coin is a BigInt message {int|bigUInt|bigNInt} (cardano.proto:36,256-262).
It would throw a BigInt(object) TypeError if the UTxO list were ever non-empty.
Note: js-test/basic-test.golden never exercises the gRPC paths, so the breakage is untested in-repo.
Reproduction
- Inspect the JS emitted by
GRPC.hs:51-54:let addresses = new proto.utxorpc.v1alpha.cardano.AddressArray(); addresses.addItems(btoa($2)); req.setCardanoAddresses(addresses); - Inspect the shipped bundle's schema (generated from v1beta):
ReadUtxosRequestfields are onlykeys+field_mask.utxorpc.v1alpha.cardano.AddressArraydoes not exist in the bundle. - Server side:
Query.hs:95- a keylessReadUtxosRequestreturnsdefMessage(empty).
Any wallet calling getUtxosForAddress(addr) throws TypeError: proto.utxorpc.v1alpha.cardano.AddressArray is not a constructor.
getAllUtxos() always resolves to [].
Suggested fix
Regenerate the JS glue against the v1beta protos.
Use ReadUtxosRequest.keys for address lookups.
Parse coin from the v1beta BigInt message fields (int as Number, bigUInt as base64 big-endian bytes converted to BigInt).
Originally reported by @Ranchhand87 as security advisory GHSA-6f73-hf45-g35g.
Converted to a public issue since it fails closed and has no security impact.
- Lingua principale
- Haskell
- Stelle
- 41
- Fork
- 32
- Merge medio
- 1g 9h
- PR unite (30g)
- 22
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di IntersectMBO/cardano-api
-
Dijkstra era type: enhancement
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
IntersectMBO/cardano-api#1386 ·
I maintainer di solito rispondono entro 1 giorno
-
Dijkstra era type: enhancement
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
IntersectMBO/cardano-api#1382 ·
I maintainer di solito rispondono entro 1 giorno
-
cardano-rpc: split a lightweight client package out of the serverForse di nuovo libera @carbolymer l’ha presa 60 giorni fa e non c’è nessuna pull request aperta. Apertarefactor
IntersectMBO/cardano-api#1339 · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
Transaction builders accept duplicate TxIns with differing witnesses, producing transactions rejected with ExtraRedeemersForse di nuovo libera @carbolymer l’ha presa 70 giorni fa e non c’è nessuna pull request aperta. Apertabug
IntersectMBO/cardano-api#1324 · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
gRPC: [Meta] cardano-rpc: Ogmios feature parityForse di nuovo libera @carbolymer l’ha presa 83 giorni fa e non c’è nessuna pull request aperta. Apertatype: enhancement
IntersectMBO/cardano-api#1302 · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di IntersectMBO/cardano-api
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
I maintainer di solito rispondono entro 1 giorno
-
30-minutes algorithm any-language codewars dart easy elixir hackerrank hacktoberfest haskell help wanted interview-prep julia leetcode lua open-source r scala students zig
Difficoltà 2/5 1-3 ore Idoneità per principianti 77/100
Huerte/algo-solutions-python#226 ·
I maintainer di solito rispondono entro 1 giorno
-
[BUG]: Cloning a compiler from a tree results in a single-file compilerForse già presa Una pull request collegata a questa issue è aperta o già unita. Apertabug
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
compiler-explorer/compiler-explorer#9561 ·
I maintainer di solito rispondono entro 1 giorno
-
documentation
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
bittide/bittide-hardware#1357 ·
-
tricorder
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
I maintainer di solito rispondono entro 1 giorno