Learning Solidity and Cryptocurrency

What am I Doing?

I'm learning a new tech. I figure my stated goal is:

"Ken will learn how to program with cryptocurrency."

Getting Started

To be honest, I have no idea what any of that means. Crypto is an opaque "black box" that I can't look into and see the moving parts. As a life-long computer programmer I know stuff must exist.

There's some lines of code executing on machines for blockchains to run, Ethereum exchanges work, wallet transfers happen, and global resource validations.

Question is, "How does it work?" What's the programming language, toolchain to compile and debug. I want to find out how is code deployed into production for users. I've gotten very curious about it all, and I want to know more.

I want to know how to program with cryptocurrency.

My first aim is traveling to a destination made up of a path through these points:

  • Reading a few notable articles written by today's thoughtful luminaries
  • Running through the Crypto Zombies online tutorial
  • Writing updates to this article sharing everything that I learn
  • Installing tooling, reading programming syntax, and writing more R&D code
  • Connecting with people smarter than me so that I can watch, listen, and understand.

Why Now?

Why should I start looking at this now? On the one hand I feel too late to the party. We've seen news about so many fundamentals having been created that we wonder what to-dos remain un-done.

But we all know that work was built by the early adopters suffering through the fundamental research of building infrastructure. We (they) still need fast-followers to come onboard before the industry can reliably convince the mass-market to join.

As much as what's done, as famous as Bitcoin is, as rich as some people have gotten, I fully expect most of the most exciting cryptocurrency industry and tech and cultural moments are still in the future. I'm assuming it's not yet dialed-in product-market fit.

That's fine. It's not a problem and not a judgement. In some ways I need to believe there's work remaining to be done or else I'd never generate the optimistic courage to jump into all of this.

I'm about to become an utter beginner. I fully expect to look incredibly silly making mistakes for all to see. I must become a fool before I can become an expert.

Even if it's relatively early-days for cryptocurrency I can see much fundamental work is done. I'll need to rapidly catch up and figure out my place in the world. I'll need to gain competency and show that I can add value.

How People See Crypto

Crypto is a resource, a tool. Tools are either useful to human beings or they are not. Tools amplify our natural, "God-given" talents, and hard-earned experience. From what I read, hear, and see, people consider Crypto as a tool in these ways:

  • A store of value
  • A value exchange
  • A mark of ownership

All three of these are already being put into action by people all across the globe. As of the writing of this article I don't yet own or use cryptocurrency. Well, I understand how people use BitCoin to buy and sell things, but it's not attractive enough to me yet, so I haven't chosen to engage.

It's fascinating to me when I consider some of the ideas I've read as people combine value, ownership, and exchange in terms of people making things on the Internet. What do people make on the Internet? It's digital stuff: text, images, audio, video. More concretely articles, pictures, podcasts, video streams.

Combine those elements together and it can become very complex, interesting, and valuable.

To what extent can people claim ownership of their data that we can all reasonable agree to? We want people to say "I made that!" and we can all be certain of that fact.

What if their digital content creates value? Can the owner casually claim some reasonable amount of that value? It might very well mean they can continue living and creating.

Can people transfer their content from one publishing system to another? Is data portable?

All of these thoughtful questions gets me excited about the future. Proponents of cryptocurrency point to the foundational technology underlying their proven system to be applicable to solutions answering the opportunities formed in the questions above.

It's good stuff! Difficult topics to understand, but worth goals for us to pursue. I suspect this is where the long-term growth of all this tech scales up to deliver true solutions to real-world problems people have. It'll also open up new opportunities to evolve culture.

Crypto is So Hot Right Now

We've all seen some fantastic news around cryptocurrency. You could quickly rattle off a dozen remarkable events if we were chatting in real life. Here are a few motivational items that pop into my brain:

There's plenty more happening to spark interest.

What's in it for You?

Why should you follow along with me? Well, I expect you're generally curious like I am. You love learning, get excited about new technology, and are energized by a worthy challenge. You don't mind some suffering, or ambiguity and confusion. You might feel a little bit discontent with how things are. You may have the feeling that something significant is happening that deserves your attention.

Ultimately, you want to get involved.

More than likely you're a part of a software development team serving a role like: programming, Q&A, UX, PM. You probably ask questions like, "How might we use cryptocurrency technology to solve real problems for people while making the world a better place?"

Getting Started

This is a work in progress. Expect that I'll add to it as I learn things and discover valuable stuff worth your attention.

Use my notes as a jumping-off point for your own learning. I want to be as transparent as I can by sharing what I've learned. Send me information that you find - I'm open to collaboration.

Let's do something awesome together!

Appendix A: Cryptocurrency Glossary

There's a vocabulary spoken by people immersed in this industry, technology, and culture. I need to pick up some of it to understand what's going on. Words are incredibly important. They're virtual tools enabling us to communicate with one another. Ultimately words effect what ideas we're able to think. That shapes the outcomes that we're able to make real.

.sol - is a file format holding program code written in the Solidity language that runs on Ethereum. This is how people make so-called "smart contracts" to program cryptocurrency.

Account - Where a user stores their data on the blockchain. Data could by currency like Ether, or Bitcoin. In the case of your dApp it's some valuable resource as defined by your system. Note: the user's blockchain account is different than your app's account as part of onboarding. It's important to link the user's blockchain account to your apps's accounting system to establish the relationship. The crucial part is when a user leaves your app their blockchain account goes with them, and the data in it. I imagine data ownership and portability is a breakthrough in crypto-backed Web3 dApps.

Block - I see this as the basic unit of storage held on the blockchain. These link to one another to form a permanent audit trail that's operated on by nodes at the request of logic held in smart contracts triggered by dApps. So far, I don't know how much data is reasonably stored in a block, or what the implicit data type is. Will be good finding out best-practices around this for building Web3 solutions.

Blockchain - Interconnected transactions form the backbone of the system. Blockchain seems like an analogy. Blocks of transactions are chained together offering a historical record in a public ledger (database) that everyone operating around it is satisfied serves as a verifiable source of truth.

Coins - popular cryptocurrency includes Bitcoin (BTC), Ether (Eth) on Ethereum, Solana (SOL), ADA on Cardano, XRP on Ripple.

dApp - You and I can build a traditional application. Like a webapp - any SaaS. Then we decide some portion of its user data must be stored on the public blockchain. Because the information is remarkably valuable. We some part of our application to the blockchain via smart contracts. Probably written in Solidity. Now, part of our app business logic is distributed. I'd say this sounds like the work of what we've come to call "backend developers."

Ethereum Virtual Machine(EVM) - The EVM can run our smart contract so that we can make a dAPP storing some amount of important data in the public ledger. Smart contracts are written in a human friendly, high level, programming language like Solidity. The EVM doesn't actually run Solidity. It runs opcodes that a compiler outputs as part of reading in Solidity source code. The opcodes remind me of Assembly language. Given the EVM running opcodes we might not write Solidity in the future.It could be replaced by visual design tools that don't require programming skills.

Gas - Executing your smart contract on the public blockchain costs real world resources. Nodes, physical computers in the real world, run that logic. Node operators want to be reimbursed for their trouble. "Gas" appears to be a poor analogy - as if evoking an engine in a running vehicle. At any rate, depending on the complexity of your smart contract, and the overall demand on the Evm at run-time, it will cost more "gas" (Eth/Btc) to execute your code. This is a fee enticing node operators to participate in the system.

L1 vs L2 - After reading multiple sources about this subject my takeaway is that a "Layer 1" network is like the hardware of your development laptop providing foundational processing abilities. "Layer 2" is like the operating system that sits on top of the L1 layer managing its limited resources in a more optimized way providing better throughput. L1 has low TPS while L2 offers higher TPS. Famous examples of L1: Bitcoin, Ethereum, Cardano, and Solana. It seems to me that most Solidity and dApps are still running directly on L1 chains. As for examples of L2, I only found the so-called "Lightening Network" mentioned in literary.

Node - A computer in real life that's doing the computation as part of confirming the EVM blockchain. Because this takes real-work resources, that have a cost, they get paid in the virtual currency like Ether or Bitcoins as payment for their effort.

Smart Contract - a section of code that executes on the EVM in response to a request. The most significant reason to develop this is storing some resource on the blockchain associated with an account. Feels like an RPC API to me. Another important point, it takes real world resources - nodes- to execute your contract code on the EVM. The operators must be reimbursed and the price comes in cryptocurrency like Eth or BTC. An incredibly important note - contracts cannot be updated or modified. This is a security choice.

Appendix B: See Also

Organizations

Tutorials

  • Crypto Zombies is my initial driver to learn this subject. I've been told it's a simple, but valuable, introduction full of solid, practical, stuff.
  • a16z Crypto School

Development Tools

  • Alchemy - a crypto development toolkit and service provider that appears a lot in the online literature.
  • Hardhard is an opinionated framework that I've read about as part of my research. It appears to be well-known for accelerating developers as part of their software development lifecycle: build, test, deploy smart contracts.
  • Infura - a crypto development toolkit and service provider that appears a lot in the online literature.
  • JetBrains IDE programming language support for Solidity
  • IPFS is something that came up a lot. Critical data can be stored on the global blockchain so that it's publicly accessible and shows ownership to an account - like the user's unique wallet. How much data should be stored? It costs money (Eth, Btc) to process a smart contract's code logic. Apparently this IPFS is something used to offload that data processing. What's stored in the blockchain is a pointer to a server resource off-chain as an optimization.
  • MetaMask is a browser-based cryptocurrency wallet for connecting to blockchain networks, buying, transferring storing tokens, and a key enabler for software development.
  • I found plenty of references to Open Zepplin contract development tools while learning Solidity. I gather they have reliable blueprints, app scaffolds, and contract examples to leverage.
  • Remix is a programmer's editor and IDE for Solidity development. Use its interactive playground to learn how to write code, create production-ready contracts, debug, and deploy into production.
  • Truffle is a popular collection of developer tools for building smart contracts and dApps, deploying to the Ethereum blockchain, and integrating with a React-based frontend.
  • web3.js is a JavaScript library enabling web frontend programmers to integrate with a Solidity smart contract.

Share on Twitter ➚

Ending logo Mark for this article