ABI validation misses parameterized types and selector collisions
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 42/100
Direzione di ricerca
Start with src/Solcore/Desugarer/ContractDispatch.hs:457 and the abiTypeOf behavior described in the report. Use the two Solidity reproductions to inspect parameterized ADT ABI generation and selector collision handling before dispatch generation. Done means both cases produce the specified structured rejection or supported output, with no compiler exception, partial ABI, or colliding selectors accepted.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
ABI validation misses both unsupported type shapes and selector collisions. These independent cases occur in the frontend with legacy typeclass resolution with ABI output enabled and specialization disabled.
Parameterized ADT metadata
Generating ABI metadata for Box<uint256> reaches an internal exception instead of producing a structured diagnostic.
import * from std;
import * from std.dispatch;
import * from std.Generic;
import * from std.ABIGeneric;
enum Box<t> { Box(t) }
contract Repro {
function echo(value: Box<uint256>) public returns (Box<uint256>) {
return value;
}
}
Actual: The process terminates with an unstructured exception:
sol-core: contractAbiJson: cannot represent type in ABI: ... Box [... uint256 ...]
CallStack (from HasCallStack):
error, called at src/Solcore/Desugarer/ContractDispatch.hs:457:15
Repro.abi is left empty in this reproduction. abiTypeOf handles nullary source names but falls through to error for the parameterized ADT.
Expected: Either emit a deliberately supported representation or reject the type with a structured diagnostic, without a compiler exception or partial ABI output.
Distinct methods with the same selector
These distinct method signatures share the same four-byte selector, but the frontend accepts both methods.
import * from std;
import * from std.dispatch;
contract Repro {
function collision_8764(x: uint256) public returns (uint256) {
return x;
}
function collision_99992(x: uint256) public returns (uint256) {
return x;
}
}
Actual: The frontend exits successfully and emits both methods in Repro.abi, although both signatures have selector 0xd443241f.
Expected: Reject distinct external signatures that share a selector before generating dispatch. This report concerns distinct method names; duplicate method names are already rejected by name resolution.
- Lingua principale
- Haskell
- Stelle
- 115
- Fork
- 11
- Merge medio
- 20h 29m
- PR unite (30g)
- 2
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
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 argotorg/solcore
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
-
user feedback: Rename `lam` to `lambda` and give the unit type a nameForse già presa @rodrigogribeiro l’ha presa 50 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 92/100
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 57/100
Tutte le issue di argotorg/solcore
Issue simili
-
Allow QuickCheck 2.17Aperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 75/100
-
15-minutes 5-minutes algorithm any-language beginner-friendly c cpp csharp easy go good first issue hacktoberfest help wanted java javascript kotlin python rust swift typescript
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 68/100
Huerte/algo-solutions-python#260 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
IntersectMBO/cardano-ledger#6276 ·
I maintainer di solito rispondono entro 1 giorno