In IPv4, link-local addresses are checked to be unique using an ARP request. But in IPv6, as it is generated by a EUI-64 or hash. It is assumed to be unique (I suppose). But does it require a DAD (Neighbor Solicitation and Advertisement) to do an extra confirmation. I have looked through the RFCs and didn't see an exact specification on it.
Yes, of course IPv6 requires DAD for stateless addressing. See IPv6 Stateless Address Autoconfiguration, Section 5.4. Duplicate Address Detection:
5.4. Duplicate Address Detection
Duplicate Address Detection MUST be performed on all unicast addresses prior to assigning them to an interface, regardless of whether they are obtained through stateless autoconfiguration, DHCPv6, or manual configuration, with the following exceptions:
An interface whose DupAddrDetectTransmits variable is set to zero does not perform Duplicate Address Detection.
Duplicate Address Detection MUST NOT be performed on anycast addresses (note that anycast addresses cannot syntactically be distinguished from unicast addresses).
Each individual unicast address SHOULD be tested for uniqueness. Note that there are implementations deployed that only perform Duplicate Address Detection for the link-local address and skip the test for the global address that uses the same interface identifier as that of the link-local address. Whereas this document does not invalidate such implementations, this kind of "optimization" is NOT RECOMMENDED, and new implementations MUST NOT do that optimization. This optimization came from the assumption that all of an interface's addresses are generated from the same identifier. However, the assumption does actually not stand; new types of addresses have been introduced where the interface identifiers are not necessarily the same for all unicast addresses on a single interface [RFC4941] [RFC3972]. Requiring that Duplicate Address Detection be performed for all unicast addresses will make the algorithm robust for the current and future special interface identifiers.