The difference is between exchanging tether and redeeming tether. Exchanging tether is easy as long as there’s a counterparty willing to buy your tether in exchange for USD.
But in principle you should be able to go to the “tether mint”, give them your tethers, and they redeem them 1:1 to USD. Apparently this is not very straightforward to do.
> the functions that actually need to be aware of secrets can check for the subclass
I feel like this is an antipattern in OOP. Shouldn’t the functions just be defined to take in parameters of type SecureString instead?
I think this violates the liskov substitution principle (https://en.m.wikipedia.org/wiki/Liskov_substitution_principl...). For example, how is the “length” function or “startsWith” defined on SecureString? It seems like either data would be leaked via side channels, or the behavior doesn’t really conform to the String specification.
> Certain sections of this content were grammatically refined/updated using AI assistance
> I don't know how to write an emdash
Same here, and at this point I don’t think I will ever learn