Both `Bytes[N]` and `String[N]` carry a maximum length in their type — the actual stored value can be shorter, but never longer. This bound is what lets the compiler statically reason about memory and calldata costs.
name: public(String[64])
data: public(Bytes[256])
@external
def set_name(_name: String[64]):
self.name = _nameConcatenation and slicing are supported via builtins like `concat()` and `slice()`, but every result must still fit within a declared maximum length.