"Memory-Hard" vs. "Memory-Bound" Functions? One of the approaches in order to prevent Sybil or DoS attacks is CPU-bound PoW. However, because of the influence of Moore’s law, the memory-based approaches are suggested.
As actually there are two different terms: (1) memory-hard functions and (2) memory-bound functions;
Does it mean that we have two different memory-based techniques?
And if yes, What is the difference between these two terms?
The Wikipedia definitions are clear;

memory-bound functions;

Memory bound refers to a situation in which the time to complete a given computational problem is decided primarily by the amount of memory required to hold data.

This is proposed for using against spams, first CPU-bound then memory bound. This algorithms requires to access memory in an unpredictable way so that caches are ineffective. This discourage the spammers.

memory-hard functions

In cryptography, a memory hard function (MHF) is a function that costs significant amount of memory to evaluate. It is different from memory bound functions, the latter incurs cost by slowing down computation through memory latency. MHFs find their use as a form of proof-of-work.

This is against the massive parallelization of hashing etc. For example the bitcoin miners create farms for SHA2d calculations since SHA2 is not memory hard.
There are two variants

Data Dependent
Data independent

For example Argon2 has both mode and even combined. Argon2i for data independent and Argon2d for data dependent. In the combined mode Argon2id.