HN user

jonreem

550 karma

`reem` on github and pretty much everywhere else

Rust enthusiast, author of iron (github.com/iron/iron) and co-author of hyper (github.com/hyperium/hyper).

I've programmed professionally in rust, python, javascript, go, and ruby; dabbled in haskell, C++, nim and clojure.

Currently engineering at gauntlet.network

[ my public key: https://keybase.io/jonreem; my proof: https://keybase.io/jonreem/sigs/DKEUlaqxlTdJSroYLZLU2OxEGdofDvfDpIF-RzwBcB8 ]

Posts7
Comments79
View on HN

outside of trivial transfer transactions there are much more complicated things you can do with smart contracts such as decentralized lending and decentralized exchange of assets

these are more like arbitrary atomic changes to on chain state that can affect many wallets and different contracts (and depend on the existing state) rather than just a transfer from my wallet to another address, which can be reordered freely

see protocols such as uniswap, compound, aave, synthetix, sushiswap, liquity, etc.

these are transactions with extremely high value and often extremely urgent and not possible to merge together - e.g. the both liquidate the same unhealthy loan position (could be worth ~$10m+)

the whole point is it's not remotely easy to just "reconcile separately" when you have two mutually exclusive financial operations - these are not code changes made by mutually cooperating developers happy to change their code to resolve merge conflicts, they are actively fighting against each other

edit: this also point out how having a centralized entity decide the ordering of transactions is a horrible idea - sequencing is worth enormous amounts of money and you could not be trusted to resolve transactions in a way that is sometimes against your interests but in the interest of other participants in the network

Settle positions between two mutually non cooperating parties. Your github solution doesn't consider that many non cooperating parties may want to do conflicting things on chain and you need a trustless way to resolve those conflicts. First writer wins to a centralized database at github is not an acceptable settlement method for billion dollar transactions.

EDIT: A blockchain is not just about keeping a history, it's also about maintaining liveness of the chain and preventing censorship even when many non cooperating parties are involved with conflicting incentives.

The time-value still comes into play in the form of eth transaction fee. If you're flash loaning to take advantage of an open arbitrage opportunity there will be other parties trying to take advantage of it, so you will pay more to get your transaction in before theirs.

For a lot of transactions like this its actually miners who can detect and rewrite these transactions to take advantage of the arbitrage opportunities first, for this reason this cost is called "miner extractable value" or MEV.

However, note this fee doesn't accrue to the lender!

Personally, I've developed a strong preference for putting this type of information as close to the affected code as possible. Immediately next to the affected code is the only place these types of comments have a prayer of being kept up to date. Keeping them in another document, a commit message, or anything similar just results in the content of the message instantly going out of date.

People who bother to complain are those who actually care about your thing. People who do not care simply leave without ever telling you why. Your complainers are often your most dedicated and invested users.

Thunk is not a proper solution to the problem - it's a totally open escape hatch! You lose ALL the nice guarantees and behavior of redux when "action" no longer means "immutable, serializable event" and starts meaning "completely arbitrary function call with unbounded async effects."

There's no functional difference between using redux-thunk and just calling a "global" `dispatch` in random callbacks; both are equally unmaintainable in the face of interacting effects.

EDIT: Having a bunch of complex async logic all modifying your store in overlapping ways without careful coordination is like having concurrent operations on your database without any transactions or locking.

It wasn't my example, but it's just disproving the notion that FP somehow means you need to write big if statements to dispatch your functions.

Traits are not functional-language specific except in that they are often used in FP to solve problems similar to those one might use inheritance to solve in OOP.

One of the many difference is that there is no inheritance, and implementations of traits can be added for types long after they are defined. Traits in rust are not like java interfaces.

Rust 1.32 released 8 years ago

Hey, that’s my library! I’m glad to see a similar macro getting added upstream, so you no longer need to install libraries like this one for easy print debugging.

Not signing in and curating your subreddit subscriptions all but guarantees you will only be exposed to the most populist content on the site and will never see any of the deep, niche, and interesting stuff on it.

Trucks often drive mostly or only on major thoroughfares and often on extremely long and tedious routes. A self driving truck that could drive 50 hour stretches without getting tired or making mistakes would be a huge improvement in efficiency.

In your analysis you shouldn’t forget that advertisers don’t consider all eyeballs equal either, and are willing to pay far more for ads shown to high income users. The difference in effect might not be as large as you’re making it out to be.

Join a discord server for a relatively niche interest that you have and not only will you meet many others with similarly deep interest in a water cooler format but you will be able to work on your hobby much more effectively with a close community of like minded people. Discord is a place that still has conversations and communities, not broadcasts and celebrities.

If you simply follow the basic compassionate principle that you should lock up as few people as necessary for as short a time as necessary to maintain the law then the answers are obvious for both cases:

If someone committed an act which was illegal at the time and is now legal, they should be freed.

If someone committed an act which was legal at the time and it is now illegal, they should not be prosecuted.

They're not two sides of the same coin at all.

EDIT: This compassionate principle is known as "lex mitior", which simply means that you should apply the mildest version of the law (from the perspective of the accused) in these cases. This is also in line with the widely accepted innocent-until-proven-guilty principle.

Who in the world thought this was a good idea!? I can hardly think of a less secure way to ask security questions. You should name and shame; there’s a minimum bar everyone should uphold and this is far below it.