avatarAldric Chen

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>

An INNOVATION POST-IT — How to Raise Funds without Going I.P.O.

Getting listed via Initial Public Offering (I.P.O.) is a conventional way to raise funds for the matured company.

What if our company doesn’t qualify for listing?

Photo by Austin Distel on Unsplash

Start-ups and growth companies have an insatiable appetite for funding. It was reported that every start-up in its initial stages require at least $3,000.00 from Day 1. The purpose of the initial funding could vary. Some are for working tools subscription such as Zoom communications, Calendly, Linked Premium; other purposes could be labour related such as maintaining a team of Virtual Assistants overseas.

All Start-ups face the same issue.

They have to find their way towards financial viability before a complete depletion of their cash reserves.

From my experience, there are 3 other notable ways to raise funds for the growing business apart from selling equity stake by going through the I.P.O. route.

The Sales Revenue Route

Just One Man’s Opinion — This is the best route for any business.

In a way this is organic, it also demonstrates the viability of the business model. When I first started my coaching business, I made a point not inject any personal funds into the business. I wanted to prove this model works as a side-gig before taking that Leap of Faith.

I was still holding my full-time job as a Business Analyst then.

When I had to leave my job due to office politics, my coaching side-line is grown from $100 per hour to $200+ per hour. It has given me a strong jab of confidence knowing that I will be able to survive (by minimalist standards!) without a full-time job and I can grow this business in the midst of the Global Pandemic.

The business pressure to hit higher revenue targets has nothing to do with external parties.

I do not lose any money through equity injection or incur further debt due to borrowings.

The best part?

Done correctly, the entire business could be organically self-financing.

The Borrowing Path

It has to do with that 4-letter word — Debt.

Or 10 letters — Borrowings.

The choice is yours.

The key thing to note here — Debt is like an aphrodisiac. The nature of debt is it allows us to consume today while paying for it in the future. If you understand what credit cards is about, you will know what I mean.

Used correctly, debt can be a great tool.

How?

It has to be deployed for productive means.

Borrowings are typically incurred for recurring expenses such and General and Administration costs, rental and utilities. That is because the upfront capital outlay is larger upfront compared to the subsequent variable expenses incurred.

Most entrepreneurs I know who utilises debt as a working capital tool has a strong Sales revenue model.

They work to ensure that their Revenue is sufficient to cover their debt service.

You should consider that too.

The Sell-Your-Stake Track

Yup, we can still sell our stake in the company.

While a mature companies might be eligible to go public listing, they can seek out Angel investors or Venture Capitalists for that financial boost as required.

Most notable examples are Entrepreneurs who appear on Shark Tank or Dragon’s Den to seek funding. Entrepreneurs who has worked hard to get their businesses to become cash-flow positive coupled with strong Sales revenue year-on-year gets their deal done.

Tough luck for the others.

However, we have to note the practicality of having a financial business partner. They will have a say in the way the businesses are run from now on. That means having to apportion some control over to the funding partner.

And they, could have a wildly different idea in terms of the strategic direction ahead.

As mentioned, there are many more avenues to raise funds for our ever-growing business.

While the best way is the organic route via Sales Revenue as we do not cede our control to others — It is also dependent on the stage that our businesses are in.

If our businesses are at maximum capacity and scalability is the next logical step to take our business to the next level, then why not?

Related Stories from the Author.

About the Author:

As a Consultant by training, I believe in making the complex simple.

Because simplicity adds value.

Simplicity helps us gain clarity, and clarity helps us to grow.

And if we are not growing, then what’s the point of anything else?

What do you think about the article? Comment Below!

This is more about me as a Content Contributor on Medium.

Do reach out and say hi on Linkedin!

Business
Fundraising
Entrepreneurship
Debt
Equity
Recommended from ReadMedium