avatarEllen Clardy, PhD

Free AI web copilot to create summaries, insights and extended knowledge, download it at here

3786

Abstract

arison operators, and bitwise operators on this type too.</p><p id="c4da">It’s important to note that there is another type, called <code>bytes</code> which is different from the above in that it is a dynamically sized array, and not a value type but a reference type. It is basically shorthand for <code>byte[]</code>.</p><p id="ad39">When you can limit the length of your data to a predefined amount of bytes, it is always good practice to use some of <code>bytes1</code> to <code>bytes32</code> because it is much cheaper.</p><h2 id="0118">Enums</h2><p id="aea7"><b>Enums</b> in Solidity are a way to create user-defined types. Enums are explicitly convertible to integer types, but not implicitly. Enum values are numbered in the order they are defined, starting from 0.</p><p id="ed00">Enums are not part of the ABI (Application Binary Interface — more on this in a later lesson, but it’s basically how you encode Solidity code for the Ethereum Virtual Machine, and how you get data back). This means that if your function returns an <code>enum</code> for example, it will be automatically converted to a <code>uint8</code> behind the scenes. The integer returned is just large enough to hold all enum values. With more values, the size gets increased too (<code>uint16</code> and up).</p><p id="cdb6">The below code, taken from the <a href="https://docs.soliditylang.org/en/v0.4.24/index.html">Solidity docs</a>, defines an enum with four possible values, creates a variable of that enum named <code>choice</code> and a constant called <code>defaultChoice</code>that will hold a default value.</p><div id="cf29"><pre><span class="hljs-keyword">enum</span> <span class="hljs-title class_">ActionChoices</span> { GoLeft, GoRight, GoStraight, SitStill } ActionChoices choice; ActionChoices <span class="hljs-type">constant</span> <span class="hljs-variable">defaultChoice</span> <span class="hljs-operator">=</span> ActionChoices.GoStraight;</pre></div><p id="66a9">Now we can define some functions to interact with our <code>enum</code>.</p><div id="c0bb"><pre><span class="hljs-title function_"><span class="hljs-keyword">function</span> <span class="hljs-title">setGoStraight</span></span>() <span class="hljs-keyword">public</span> { choice = ActionChoices.GoStraight; }

<span class="hljs-title function_"><span class="hljs-keyword">function</span> <span class="hljs-title">setChoice</span></span>(ActionChoices <span class="hljs-keyword">new</span><span class="hljs-type">Choice</span>) <span class="hljs-keyword">public</span> { choice = <span class="hljs-keyword">new</span><span class="hljs-type">Choice</span>; }</pre></div><p id="6bc2">The first one simply sets the <code>choice</code> to <code>GoStraight</code> while the second one sets it to the choice that the caller passes into the function. As we can see after deployment, the <code>setChoice</code> function expects a <code>uint8</code> value, which corresponds to the <code>enum</code> value declared at that number.</p><figure id="e997"><img src="https://cdn-images-1.readmedium.com/v2/resize:fit:800/1*1pKNPVy4UUBCSLi2-SIckg.png"><figcaption>Testing enums in Remix</figcaption></figure><p id="7917">If we want to get the value of <code>choice</code> and <code>defaultChoice</code>, we can define the following functions:</p><div id="1f02"><pre><span class="hljs-keyword">function</span> <span class="hljs-title">getChoice</span>() public view returns (ActionChoices) { <span class="hljs-keyword">return</span> <span class="hljs-type">choice</span>; }</pre></div><div id="43e7"><pre><span class="hljs-function">function <span class="hljs-title">getDefaultChoice</span>() <span class="hljs-keyword">public</span> pure <span class="hljs-title">returns</span> (<span class="hljs-params"><span class=

Options

"hljs-built_in">uint</span></span>)</span> { <span class="hljs-keyword">return</span> <span class="hljs-built_in">uint</span>(defaultChoice); }</pre></div><p id="c2f2">As we can see if we try this out in Remix, the first function returns a <code>uint8</code> while the second returns a <code>uint256</code>.</p><figure id="e514"><img src="https://cdn-images-1.readmedium.com/v2/resize:fit:800/1*jmaOFb9GhXz7FWC4ONMa_A.png"><figcaption>Testing enums in Remix</figcaption></figure><h2 id="3c7c">Fixed point numbers</h2><p id="2ecc"><b>Fixed point numbers </b>represent fractional numbers by storing a fixed number of digits of their fractional part. No matter how large or small the fractional part is, it will always use the same number of bits.</p><p id="cdcd" type="7">Fixed point numbers are not fully supported by Solidity yet. They can be declared, but cannot be assigned to or from.</p><p id="f872">We can differentiate between signed fixed point numbers, declared with the <code>fixed</code> keyword, and unsigned fixed point numbers, declared with the <code>ufixed</code> keyword.</p><p id="3c1c">It can also be declared as <code>fixedMxN</code> or <code>ufixedMxN</code> where <code>M</code> represents the number of bits the type takes, and <code>N</code> represents the number of decimal points. <code>M</code> has to be divisible by 8 and a number between 8 and 256. <code>N</code> has to be a number between 0 and 80.</p><p id="96e1">They function with the following operators:</p><ul><li>Comparisons: <code><=</code>, <code><</code>, <code>==</code>, <code>!=</code>, <code>>=</code>, <code>></code> (evaluate to <code>bool</code>)</li><li>Arithmetic operators: <code>+</code>, <code>-</code>, unary <code>-</code>, unary <code>+</code>, <code>*</code>, <code>/</code>, <code>%</code> (remainder)</li></ul><h2 id="09b7">Conclusion</h2><p id="bd3a">In this lesson, we looked at what value types are available in Solidity and how each one works.</p><p id="28de">Thank you for staying with us till the end. If you enjoyed reading this piece please keep in touch and follow Solidify to keep up with our lessons on Solidity. In the upcoming articles, we will deep dive into the intricacies of the language, progressing from beginner to advanced level.</p><p id="067c">If you are new to Solidity, check out the previous lessons about setting up a local development environment and writing your first smart contract.</p><div id="6b76" class="link-block"> <a href="https://readmedium.com/how-to-setup-your-local-solidity-development-environment-c4c8195810f3"> <div> <div> <h2>How to Setup Your Local Solidity Development Environment</h2> <div><h3>Get started with smart contract development</h3></div> <div><p>medium.com</p></div> </div> <div> <div style="background-image: url(https://miro.readmedium.com/v2/resize:fit:320/1*HHko-o9m1sVngmTeRVYgKA.jpeg)"></div> </div> </div> </a> </div><div id="3ad1" class="link-block"> <a href="https://readmedium.com/lesson-1-your-first-solidity-smart-contract-1ba7e641f9a3"> <div> <div> <h2>Lesson 1: Your First Solidity Smart Contract</h2> <div><h3>In the previous lesson, we looked at how to set up your local Solidity development environment. Here we will continue…</h3></div> <div><p>medium.com</p></div> </div> <div> <div style="background-image: url(https://miro.readmedium.com/v2/resize:fit:320/1*7r7HSYkbn73NrmR_skvh5w.jpeg)"></div> </div> </div> </a> </div></article></body>

Are You a Malthusian?

A Discussion of Bourgeois Equality Chapter 2 “For Malthusian and Other Reasons, Very Poor”

Photo by Ali Arif Soydaş on Unsplash

We established in the previous chapter that historically, people lived on a subsistence level averaging $3 a day for most of human history.

Now McCloskey wants to explore why and is starting with an argument that is often made but is wrong: overpopulation.

Actually, it is not completely wrong when applied to the past before 1800, but this thinking fails to understand the significance of the massive wealth the Industrial Revolution unleashed that makes it an outdated explanation.

What does a Malthusian think?

Thomas Malthus was an Anglican priest who wrote “An Essay on the Principle of Population” in 1798, specifically in answer to why the French Revolution had not obtained the godless, heaven-on-earth they had promised. (p. 14)

In particular, why had they not solved poverty?

McCloskey notes that Malthus adopted his zero-sum argument from Joseph Townsend, who was explaining animal population swings. Later, Darwin would pick up on this thinking through reading Malthus. (p. 15)

Essentially, the argument is: the quantity of available food limits the population.

The food supply is limited, and that keeps a lid on the population through famine and malnutrition if population grows out of control. McCloskey says this was called “the principle of population,” a belief also held by Classical economists of the 1800s. (p. 15)

You can certainly observe have booms and busts in animal populations. Favorable weather or other environmental conditions encourage the population to grow. However, the population grows faster than any increase in the food supply. Without enough food to support the high numbers, many die off.

As I said above, when Malthus wrote his essay in 1798, this had long been the truth for human populations as well. Why?

Technological change was too slow for most of human history.

Technological change means the ability to increase output from a given set of inputs. In human history, if there were any improvements in the food supply, it led to an increase in births. Ultimately, this meant more mouths to feed. This growth in population outstripped any increase in output leading to famine and death.

And so it stood for centuries. Population growth would exceed any technological improvements. Maybe for a time the population could enjoy a rising standard of living, but the eventual rise in population would return us to our $3 a day subsistence level, if not lower for a time, like some sort of dismal homeostatic equilibrium humans could not escape. (p. 15)

With this reality and history in mind, when Malthus wrote his essay, he made the argument that one reason France had failed at eradicating poverty was the Poor Laws that subsidized those in poverty.

Yes, Malthusian logic means giving money to the poor will lead to an increase in the population of the poor, which just creates more poor people and more suffering. (p. 17)

The only hope, said Malthus, and that a faint one, was to keep population down by restraining reproduction, the preventive checks, an exercise of reason in the right institutional context… A grim form of state-enforced preventive checks, far from Malthus’ preferences in the matter, became in the 1960s the policy of India and China… inspired by eugenic ideas hatched in Germany, Britain and the United States in the late nineteenth century and implemented wholesale in Scandinavia and Germany and some U. S. states by fascists and progressives in the 1930s.

And that is where the Malthusian logic always ends up, population control by force.

How It Is Wrong

Aside from the questionable ethics of not giving money to the poor or forcing sterilization, the theory itself is wrong today.

Industrialization set us free.

Remember, the problem Malthus (and Townsend) observed is population growth outstrips any growth from technological change.

With industrialization, we see that reversed. Finally, output per person grows and grows so we are set free from the historical homeostatic $3 a day equilibrium.

And while that was beginning in Malthus’ time, it would have been hard to recognize. Or to believe it could be sustained if it had been noticed.

As McCloskey concludes, “Until 1750 or 1850, and even later in the poorest places, the Reverend Malthus of the first essay looks sadly wise.” (p. 20)

However, I think anyone ascribing to this Malthusian thinking today is far from wise since it means denying sustained technological change set us free from the homeostatic, subsistence level we had been trapped in for most of human history and has led to a rising standard of living.

We need to recognize we do not need to constrain population to solve the problem Malthus observed. We need to encourage technological change with policies that support innovation and growth.

Continuing with Malthusian thinking today is not only unnecessary given the economic growth of the past 200 years, but downright dangerous since history has shown how it leads to authoritarian policies of population control and even eugenics.

Reference: McCloskey, Deirdre Nansen, 2016. “For Malthusian and Other Reasons, Very Poor,” Chapter 2 of Bourgeois Equality, The University of Chicago Press.

Economy
Economics
Business
History
Spirituality Or Religion
Recommended from ReadMedium