proposals
proposals copied to clipboard
Draft NEP 25: Extended types for NEP-14
This is a proposal for a new ABI standard replacing NEP-14. It solves the problem of opaque Array, Map and InteropInterface types allowing to provide more specific details about them. A somewhat similar thing is also provided in #151, but it's detached from the ABI and introduces some new notations that should be parsed by clients. This NEP is based on NeoGo ExtendedType data that is used for contract-specific RPC SDK generation, but that implementation is also detached from the ABI (an additional YAML file is used).
While this problem can be solved with additional (non-ABI) data, it might add some additional barriers affecting contract interoperability (starting with the basics, where to store this data). The intention here was to create a 100% backwards-compatible extension (if new fields are ignored) that can be easily provided by compilers and can be easily consumed by any other tools, irrespective of the implementation language. Having this data in ABI means every contract will have it and it'll be easily accessible. In fact this data is a part of the ABI in its essence, that's what contracts accept/return.
Things intentionally omitted for now (I'd like to get more feedback on this before doing any of those):
- JSON schemas would be more appropriate for specifications
- "length" parameter for integers (8/16/32/64/128), byte arrays and strings (1-1M) can be useful for more precision if it's known exactly
- "unsigned" for integers
- maybe even "min" and "max" for integers
- "nullable" to resolve "Null" handling ambiguity, can it be provided in a parameter, can it be returned from the method?
- the problem of
Any
parameter in the specification (likedata
fortransfer
in NEP-17 or NEP-11) with the contract using some specific type (if it usesdata
, it expects some particular type ofdata
)