Categories
Community

Hire Web3 Developers: Salary, Skills and More

The blockchain ecosystem has seen unprecedented growth with many companies now looking to hire Web3 developers with experience in cryptocurrency.

The web is undergoing dramatic changes. Of the latest changes is Web3, a new version of the internet, which is quickly expanding in size and popularity.

As it’s still a new idea, finding Web3 engineers is a tedious task. It’s mostly cryptocurrency and blockchain enthusiast developers who are mastering this new form of the web, which is destined to change the internet in ways we have yet to understand.

Before we talk about how to hire Web3 developers, let’s talk about Web3 itself.

What is Web3?

Web3, unlike its predecessors, Web 1.0 and Web 2.0, is based on peer-to-peer (P2P) decentralized networks, such as blockchain.

Blockchain is a hallmark building block of cryptocurrency, and Web3 is a product of both. Web3 developers create apps that aren’t limited to a single cloud server but are instead distributed on a blockchain or decentralized P2P network that isn’t controlled by a central authority.

In simpler words, Web3 is similar to how most cryptocurrencies work based on the blueprint of Bitcoin.

How does this differ from the existing Web 2.0? While Web 2.0 is user-centric (most of the content is user-generated), Web3 has taken this approach to the next level by introducing more autonomy and keeping things more transparent and relatable. In Web3, computers are heavily involved in interpreting information on a human level.

Web3 has many additional attributes that distinguish it from Web 2.0 — it’s verifiable, self-governing, permissionless, distributed, stateless, and has built-in payment systems (cryptocurrency).

This lack of transparency and verification led to Web 2.0 containing too much content and information, most of which isn’t helpful for general users. Its security is also sub-par, which is why there are too many hackers today and a marked increase in identity theft and other cybercrimes.

Any application built on Web3 would be developed and owned by the users as they help create and maintain the app, earning their stake along the way. This is just how Bitcoin operates, as miners of the currency earn Bitcoins when they facilitate transactions through computing operations.

The apps on Web3 are called “dApps,” which is short for “decentralized applications.” You can expect to hear this term more often in the near future.

An effective Web3 developer is one who is familiar with the concept of Web3, is proficient in the relevant programming languages, and has the right tech stack to back their development work.

What Tech Stack Do Web3 Developers Use: Skills and Tools

The tech stack, or developer stack, refers to the technology or tools the developer uses and excels at. A good example is the MEAN stack, which is comprised of MongoDB, Express.js, AngularJS/Angular, and Node.js.

For Web3, there’s a specific tech stack that the developer you’re hiring must use.

Web3 SDKs/dApps

The Web3 SDKs, or libraries, are essential for building any dApp. These libraries support the interaction with a blockchain, such as Ethereum, and conduct transactions.

The most important of these SDKs are web3.jsweb3.py, and ethers.js. These are also linked with smart contracts, which are explained further below.

Cryptocurrency Wallets

If you’ve ever dabbled with cryptocurrency, you probably already know what a crypto wallet is. It holds your cryptocurrency and can be either a digital or hardware wallet. For Web3 applications, a wallet is required to facilitate transactions.

There’s a fee for the writing operations on the blockchain, which must be drawn from the wallet. For Web3, the developer can create an ETH (ethers) wallet using any of the common languages, such as Python, JavaScript, or Ruby. Alternatively, developers can use an existing wallet platform like MetaMask.

Nodes

Nodes make up the blockchain and retain a copy of it. These are also called Web3 providers for this reason, as the application’s connectivity with the blockchain hinges on these nodes. Without these nodes, dApp cannot communicate with the smart contracts.

The most commonly used provider is QuickNode, which provides a global network of nodes powered by speedy operations.

Smart Contracts

In the crypto world, smart contracts are pieces of code that live on the blockchain. Written in Solidity, these cannot be altered or mutated. This code runs when the conditions for it to run are met.

This automates the workflow when the participants of the blockchain confirm an outcome. These smart contracts (pioneered by Ethereum) also helped give Ethereum the edge over Bitcoin in terms of transaction speed.

Web3 Developer Salaries

The average yearly salaries for Web3 developers can vary greatly depending on what you’re hiring them for. Here’s an overview of the most popular Web3 expert roles and their salaries.

Blockchain Developer

According to ZipRecruiter, the average yearly salary for a blockchain developer is $154,550 or $74 per hour. Note that this average is mostly drawn from larger companies. If you add smaller companies and startups into the mix, the average yearly salary drops to $80,000 per year.

Since the term “blockchain developer” is a broad descriptor, the associated salaries tend to vary. In general, there are two types of blockchain developers: blockchain software developers and core blockchain developers.

  1. Blockchain software developers: Blockchain software developers are responsible for creating applications based on blockchain protocol and architecture. One of their main duties is to create smart contracts, which are programs stored on a blockchain that automatically run when conditions are met. Small contracts are usually used to automate workflows and agreement execution so every participant will immediately know the outcome.

    They also create decentralized applications (dApps) that run on the blockchain, making them comparable with web developers, who use web architects’ design and protocol to create web applications. Additionally, these software developers are responsible for the front-end and back-end development of dApps and supervising the stack that runs them.
  2. Core blockchain developers: These blockchain developers are responsible for creating the architecture, design, and security of the blockchain system. They also:
  • Design the blockchain protocols
  • Design security patterns and consensus protocols for the network
  • Supervise the entire blockchain network

Despite their differences, both types of blockchain developers require a similar skill set. Here are the main blockchain developer hard skills you should look for when hiring a blockchain developer for your team:

  1. Cryptography: Cryptography is the study of blockchain protocols that prevent unauthorised and unwanted parties from accessing your data. A popular concept in cryptography is public-key cryptography, which forms the backbone of cryptocurrency transactions. Another hot topic is cryptographic hashing, which transforms cleartext passwords into enciphered text for storage. This slows down threat actors since they’ll have to decipher these hash values if they want to exploit the passwords.
  2. Data structures: Every blockchain developer needs to have extensive knowledge of data structures. This is because blockchain networks consist of data structures.
  3. Blockchain architecture: Blockchain developers need to know what ledgers are, how smart contracts work, and what consensus is. They should also be familiar with all four types of blockchain architecture: consortium, private, public, and hybrid.
  4. Web development: Blockchain developers should also know how to develop and create web apps, particularly if they’re blockchain software developers.
  5. A variety of programming languages: Finally, your blockchain developer should have experience with at three or more of the following programming languages:
  • Java
  • Python
  • C++
  • C#
  • PHP
  • JavaScript
  • Go
  • Simplicity
  • SQL

Like the rest of the roles on this list, blockchain developers need the following soft skills:

  • Commitment to and passion for the Web3 landscape
  • Interest in learning more about blockchain technologies
  • Client and project management skills
  • The ability to meet deadlines ahead of time
  • The ability to work in multi-disciplinary teams

Solidity Developer

The average base salary for a Solidity developer is $127,500 per year. Remote Solidity developers can earn up to an average of $145,000 per year, depending on which company they’re working for.

Solidity developers use the Solidity language to create and deploy smart contracts on Ethereum-based apps. The syntax of Solidity is similar to C and Javascript, so developers who already know those languages can quickly learn Solidity. Compared to other languages, Solidity offers multiple benefits, such as:

  • Statically typed programming
  • Accessibility to JavaScript debuggers, infrastructures, and other tools
  • Preciseness

With Solidity, developers can craft applications with self-enforcing business logic in smart contracts, creating a non-repeatable record of transactions. Solidity also supports libraries, a complex user-defined type, and inheritance. Thus, it’s a good choice for creating contracts for crowdfunding, voting, multi-signature wallets, and blind auctions.

Solidity developers are usually responsible for:

  • Integrating Solidity code across various platforms
  • Managing the full lifecycle of blockchain development
  • Ensuring blockchain integration with existing applications
  • Building smart contracts and ensuring that all timelines and expectations are met for finished smart contracts
  • Reviewing smart contracts for security and functionality
  • Supervising web services that use blockchain technology
  • Collaborating with multidisciplinary teams and product managers to discover new ideas for smart contract development
  • Assessing technical reviews of proposed solutions
  • Analyzing usage and transaction statistics to pinpoint and prioritize areas for improvement

Besides having a deep knowledge of Solidity and blockchains, Solidity developers should also have the following hard skills:

  • Blockchain technology, especially Ethereum blockchain
  • Strong background in Javascript, C, C++
  • Knowledge of AngularJS, React JS, and Ember JS
  • Portfolio experience with Ethereum testnet and mainnet
  • CSS/HTML/JS/React for application binary interface (ABI) integration
  • Experience with RESTful APIs
  • Experience with staking protocol implementation for liquidity pair and single-token staking
  • Familiar with different ways to deploy smart contracts, such as Remix, Truffle suite, and Hardhat
  • Experienced in staking implementing and test-driven development (TDD)
  • Knowledge of libraries, data structures, blockchain architecture, web development, and smart contracts

Smart Contract Developer

According to Glassdoor, the average annual salary of a smart contract developer in San Francisco, CA, is $94,674 with an average additional cash compensation of $20,950.

As their name suggests, smart contract developers are responsible for developing smart contracts for blockchain platforms. They use various programming languages, such as Solidity and Vyper, to create smart contracts, which, as we covered above, are blockchain programs that automatically run when conditions are met.

Image Source – Revelo

Unlike blockchain software developers who create dApps as well as smart contracts, smart contract developers are only responsible for designing and building smart contracts architecture and related tasks. As such, they have fewer responsibilities and lower salaries.

Here’s what they’re typically responsible for:

  • Designing, building, and deploying smart contracts architecture, yield pools, incentive structures, and strategies
  • Working with smart contract auditors and the rest of your IT team to implement fixes
  • Create, implement, and test smart contract additions and upgrades
  • Explore and research smart contract design implications

Most companies require smart contract developers to have the following hard skills:

  • Over four years of full-stack web development (client-facing apps and APIs)
  • Programming languages such as Solidity, NodeJS, and JavaScript
  • Cryptography
  • Experience in creating, developing, deploying, and testing smart contracts for all four blockchain architectural types
  • Experience with patterns that will make their Solidity code more readable and improve performance, such as:
  1. Oracles
  2. Pull over Push
  3. Eternal Storage
  4. Tight Variable Packing
  5. Guard Check
  6. Emergency Stop
  • The ability to write secure code that prevents threat actors from taking over contracts
  • Optimization of smart contracts
  • User experience (UX)

Rust Developer

There’s a lot of variation in the salaries of Rust developers.

According to ZipRecruiter, the average Rust developer earns $91,709 per year or $44 per hour. However, in certain major cities, the average salary of Rust developers is higher. For instance, the annual average salary of a rust developer in San Francisco, CA, is $106,131 with an average additional cash compensation of $11,867.

Rust developers are responsible for coding and developing web browsers, blockchain platforms and projects, servers and systems software, and operating systems in the Rust programming language. They may also be responsible for testing, debugging, and ensuring the security and safety of the systems, software, and platforms they develop.

Additional duties may include:

  • Collaborating with customers, management, and relevant departments to pinpoint end-user specifications and requirements
  • Analyzing user feedback to boost software performance
  • Creating technical documentation

Like Solidity, Rust is a popular language that has a wide range of Web3 applications. It’s particularly popular due to its use in the Solana blockchain, a potential competitor to Ethereum as the leading platform for dApps. As of March 2022, Solana is currently ranked ninth in market value on CoinMarketCap, making it the highest-ranked blockchain platform that uses Rust.

Most companies require Rust developers to have the following skills:

  • C++, since the Rust language is similar to it
  • Other programming languages such as Golang, Python, Java, Node.js, and React.js
  • Knowledge and experience with secure coding practices
  • Experience with network programming skills and multi-threaded programming
  • Familiarity with solana-web3.js, Solana’s official SDK (Rust developers use this SDK to develop Solana dApps)
  • The ability to create and launch Programs, which are the Solana equivalent of smart contracts
  • Experience with specific operating systems such as Android or Linux
  • Experience with certain databases, such as MongoDB and Apache CouchDB

Many organisations also prefer to hire Rust programmers who have at least three to five years of Rust coding experience since it’s a difficult language to master.

According to the Rust Survey of 2019, most Rust programmers rated their expertise as 7 out of 10 or below, even though over 68% of them wrote Rust code weekly. Additionally, 22% of Rust users indicated that they didn’t feel productive while coding Rust and the steep learning curve was the second most common reason for not using Rust on some projects.

As such, it’s important to get a good idea of how familiar and comfortable your potential hire is at Rust. Give them a few test assignments and make sure that they know how to create, test, and debug the programs and apps you want them to create.

Where to Find Web3 Developers

Whether you’re looking to hire Web3 developers for a long-term project or a small gig, knowing where you can find the best talent for this specific set of skills can substantially cut down your search time.

Web3, like cryptocurrency in its early days, is driving impressive innovation. It’s an excellent opportunity to be a part of the blockchain ecosystem and help formulate the future of the web.

Unless you live in a tech hub where you can find talent locally, it’s probably easiest to hire remote developers. Here are the best places to find these developers and Web3 engineers:

Crypto Job Boards

Even while talking about something as cutting edge as Web3, you may find the age-old approach of searching job boards to be quite convenient. However, you’ll want to choose a job board that’s known for harboring blockchain and crypto developers.

There are several recruitment websites that focus solely on crypto-related jobs. You can increase your chances of finding the right person by posting the position on more than one of these platforms.

Some of the most popular online crypto job boards include Crypto Jobs ListCryptoJobs, and Angel. Other more general job sites include Indeed and Remote.co.

LinkedIn

LinkedIn is another online job board, but it’s also a social media platform. Many startups begin their talent scouting here.

Not only do you have the opportunity to post Web3 development jobs on LinkedIn, but you can also search for professionals with experience by viewing the profiles of prospective employees. Profiles present workers’ skills, experience, and education, and if you like someone, you can communicate with them directly on the website or app.

While LinkedIn is an excellent place to find a developer, it also provides a great platform for promoting your business, especially if you’re looking for financing. It offers opportunities to show off the talent you hire as well, to make your venture appear even more valuable.

Talent Marketplaces

Online talent marketplaces are another viable option when searching for Web3 developers. These usually have both remote workers and freelancers, so you’ll first need to figure out exactly the kind of worker you need.

Do you want a permanent member of the team? Do you want a contractual freelancer? These are serious considerations. For example, for long-haul collaboration, you’d likely want the developer to be an employee of the company.

There’s nothing wrong with going with a freelance developer, provided this kind of relationship meets your needs and you can find someone suitable. But if you’re looking to embed developers in your team and hire them permanently, Revelo is an excellent place to start. You’ll be connected with top-notch remote talent specializing in Web3 engineering or development, or whatever technology you need to grow your business.

One of the most significant benefits of using Revelo is that the developers are pre-screened, so the skills and experience they list on their profile are what you’ll get. Therefore, there’s no need to confirm their experience — you can just move along with the interviewing process.

How to Hire Web3 Developers

You probably don’t want to spend endless hours reviewing resume after resume and conducting dozens of interviews. At the same time, you also don’t want to miss out on good talent by overlooking their applications.

To help you pick out the best from the rest, here are some examples of job postings and some guidelines for the interviews themselves.

If you find hiring daunting, don’t worry — hiring developers doesn’t require the formal interviews, group discussions, or IQ tests that many big corporations use. If you’re all for decentralization anyway, you might as well do things a little differently than more centralized corporations.  

Web3 Developer Job Post Example

The first thing you need to nail is the job post itself. Whether you choose to go with a job board, LinkedIn, or a talent marketplace, you’ll need to define the position you’re offering.

This is important because, believe it or not, many recruiters and contractors end up using the wrong terms in their posts or adding too much detail. This can cause candidates to overlook the most important requirements of the position. In these cases, you’ll end up with irrelevant resumes and often too many of them to sift through.

When you’re looking to hire Web3 developers, the post should be direct. It should address that you’re looking for a blockchain developer who specialises in Web3 development and has the right tech stack to support it.

Ideally, you would want people with experience working with blockchain to apply. So, make a list of the relevant keywords to put in your post. Those keywords will also help the post rank better on search engines, so anyone who types those keywords will see your job posting.

To help you write an immaculate job post to hire Web3 programmer, here is an example:

“We are looking for a passionate and experienced Web3 developer to help us build our project XYZ.

Our ideal candidate is someone with experience developing blockchain-based applications, especially those for Web3 (dApps). They should be aware of and use the latest technologies in crypto, blockchain, and Web3 development. With collaborative energy and willingness to learn, the right candidate will readily communicate with and assist other team members on the project.

Necessary Qualifications:

  • Experience with blockchain development
  • Experience with Solidity and dApp development
  • Basic knowledge of front-end development of dApps to bridge the gap between the complex blockchain and usable Web 2.0–based interface
  • Ability to work remotely and collaborate with the team when necessary

Responsibilities

  • Help create scalable applications with Ethereum blockchain
  • Analyse and solve problems in the development phase
  • Communicate and collaborate with back-end and front-end teams
  • Develop and optimise smart contracts
  • Help document the development process of the blockchain and dApps
  • Optimise development and implementation
  • Adopt best practices for Web3 and blockchain development”

You can follow this layout or create your own based on this sample structure:

Begin by briefly introducing your company or the idea of the project without giving too much away, especially if you’ve come up with a new idea.

Then, talk about what the ideal candidate should have, including the desired skills and qualifications. Don’t be too general with these but try to be straightforward. Keep in mind that Web3 is relatively new, so asking for 5 or 10 years of specific experience may be unreasonable and limit who applies. This could cause you to miss out on exceptionally qualified candidates.

Consider adding a pay rate or range in the job posting. This transparency will ensure that neither you nor the candidates waste time with interviews or application materials if your expectations are drastically different.

Lastly, list the responsibilities that the developer will have. Include both technical and non-technical responsibilities that you’ll expect of a new hire.

Remember that a clearer job description will attract more relevant applicants.

Web3 Developer Interviews

Once you have shortlisted the candidates, you can begin setting up interviews. You already established during your initial review that they meet the requirements you defined in the job post. Now, it’s time to get to know them a bit better.

You’ll most likely be conducting the interview remotely via a web meeting tool, like Zoom.

It’s always a good idea to formulate your interview questions beforehand. You should write down your most significant concerns with hiring Web3 engineers and keep each candidate’s resume handy either in paper format or on your computer screen.

Ask them how they plan on working remotely, especially if they are located in a different region with a significant time zone difference. Discuss the communication tools and methods of your team and whether they have any experience with those.

Make sure to formulate these discussions and concerns into a set of questions and create a smooth flow. For example, consider dividing the interview into technical and non-technical sections. However, it’s not necessary to stick to your script. If you think of something during the interview, you can go ahead and ask and come back to your pre-written questions after.

Lastly, discuss their salary or pay expectations. Do they prefer to be paid hourly, annually, or by the project?

Here are some sample questions you can use in your interviews:

  • How do you think Web3 is different from the previous versions of the web?
  • What blockchain projects have you been part of? What was your role?
  • What Web3 development tools and technology have you used before?
  • What coding languages are you experienced in?
  • How do you respond to feedback from other team members?
  • What testing methods do you use for your code?
  • What is your preferred mode of communication?

Don’t forget to keep the mood light and friendly!

Web3 Coding Challenges

No matter how well the interview went and how experienced the candidate claims to be, it all comes down to their skill.

To measure and confirm their level of knowledge and experience in Web3 development, you should conduct several small coding challenges. These can be presented to the candidates in written form or as video presentations to explain the purpose of the assignment. The task shouldn’t be longer than an hour unless you plan to pay them for their time.

If you’re hiring a developer to carry out different coding tasks, you should create different coding challenges, each dealing with a specific need of your project — for example, creating nodes, writing smart contracts, or developing the front end of a Web3 application.

Another popular approach to coding challenges is pair programming. In these tests, two developers work together on a problem, either in person or remotely. This is a great way to test their technical skills and their team and communication skills. The code wouldn’t be written by both of the developers, however. One would formulate the code or define the approach, while the other would actually write it. You can reverse the roles for a second test.

Here are some tips for developing coding challenges:

  • Utilise problems related to your project. You want to see the developers working in the context of your application. You should take a problem related to your project and present it as a challenge to see how the candidate might benefit your team.
  • Focus on the process, not the result. When examining the coding challenge results, don’t just look at whether they solved the problem. Even if they didn’t quite find the solution, their results can help you get to know how they work and whether they have the potential to learn more.
  • Use the same challenge. For a single job posting, use the same coding challenge to see how different candidates compare. However, don’t reuse the test once you’ve hired someone successfully.
  • Create from scratch. It’s best to create the challenge yourself, using a real problem related to your project. Pre-designed coding tests may not provide the best outcome, and many times the solutions have been published online, which defeats the purpose of testing. If you’re not a developer yourself, consider asking your current developers, especially those responsible for testing, to create these tests for you.

Conclusion

Hiring Web3 developers is not difficult if you search in the right places, conduct the interviews effectively, and design a solid coding test. Even if you believe a candidate is not seasoned, you can always train them. However, they should have the drive to learn more.

Revelo can solve your talent hunting issues by presenting some of the best developers from Latin America to become an integral part of your team and take your Web3 project to the next level. Contact Revelo and get matched with vetted developers within 3 days.

Categories
Tips

The Importance and Benefits of using Multi-Factor Authentication (MFA)

The Internet allows everyone to explore the web and create personal accounts on various platforms, hence, it’s safe to say that email addresses and passwords are the identity of netizens. And because of rampant cyberattacks, users aim to protect themselves from cyberattacks by frequently changing and choosing strong alpha-numeric-special-characters passwords. However, passwords alone aren’t enough to provide adequate data security nowadays.

The volume of data breaches continues to rise without fail as cybercriminals discover new and sophisticated ways to compromise unsuspecting individuals’ accounts. But thanks to recent technological advances, individuals and organisations have the opportunity to utilise multi-factor authentication systems to safeguard their identities and sensitive data.

This highly effective method reduces the consequences of poor password hygiene and prevents identity thefts. In this article, we’ll discuss everything you need to know about the importance of implementing MFA into your day-to-day online activity.

Let’s get started!

All About Multi-Factor Authentication

MFA refers to methods that authenticate whether a user’s identity is genuine. It typically requires a user to provide two or more pieces of factors for authentication purposes along with their usual account password. One of its fundamental objectives is to add several layers of authentication factors to increase security. Software based Two-factor authentication:

Along with passwords one of the most common methods used for 2fa are Time-Based-One-Time Passwords or TOTP. Most common TOTP applications are Google Authenticator and Authy.

These apps provide a unique combination of numeric keys generated by a standardized algorithm to users who sign in to platforms where 2fa is needed along with password. Quite a lot of services including GMail, Github allow adding TOTP 2fa.

Hardware based Two-factor authentication:

On the other hand, users who prefer a stronger MFA method could invest in hardware authenticators like YubiKey. This device, when plugged into your workstation generates a unique code that the service can use to authenticate your identity.

In addition, it’s a more secure system because it’s a hardware device which needs to be connected to a computer while authenticating the user account and it produces more extended codes, making it harder for hackers to guess, without physical access to the device.

3 Types of Authentication Factors

Something you know – knowledge

Of course, the most common knowledge factor is a password. However, there are other types of knowledge factors, such as passphrases, PINs, and security questions. Although these have provided excellent security in the past, they aren’t as effective now that new generations of cybercriminals have surfaced.

Something you have – possession

Possession factors encompass smartphones, hard tokens, soft tokens, smartcards, and key fobs. For example, users typically need to insert smartcards into devices, receive a One-Tip Passcode (OTP) on their smartphones, or receive unique codes from physical tokens.

Something you are – inheritance

Inheritance factors are the unique physical traits that users possess. These are verified through voice or facial recognition, retinal scans, and other striking methods.

The Benefits of Using Multi-Factor Authentication

Effective cybersecurity solution

With an MFA system in place, hackers will have a tough time entering your network because it implements strict security measures. Moreover, you can make hackers’ tasks even more difficult by using strong and complicated passwords, mainly if the MFA is used together with an SSO solution.

Verifies user identity

MFA is a valuable tool for protecting sensitive data against identity breaches and theft. By using this strategy, the security of the traditional username and password login is reinforced by another layer of protection. In addition, cybercriminals will find it difficult to crack the given TOTP because it’s a complex combination that only works for a specific period – typically within seconds or minutes.

Hassle-free implementation

By its nature, a multi-factor authentication system is non-invasive. It wouldn’t affect anything within your device’s virtual space, making way for a hassle-free implementation. In addition, it boasts an intuitive user experience, helping you quickly acclimate to the system.

Meets regulatory compliance

Organisations that use multi-factor authentication are hitting two birds with one stone – data security and compliance risk management. For example, PCI-DSS requires MFA implementation in certain situations to stop unauthorised users from accessing systems. So despite application updates with unattended consequences, MFA compliance ensures that the system remains virtually non-intrusive.

The Takeaway

Now that the world is in the digital age, Internet users continue to face cybercriminals’ deceptive tactics to gain their login credentials. And in this day and age where identity is considered the new perimeter, individuals who don’t utilise multi-factor authentication are playing with fire.

The use of multi-factor authentication is a smart and proactive choice, both for individuals and corporations. So if you’re looking for a convenient, innovative, and efficient way to add another layer of protection to your online accounts, MFA would be your best choice. Do you use any MFA technique ? If yes do tell us about it in the comment section below.

Categories
Tips

A Beginners Guide To Crypto Wallets

Blockchain technology has made digital currency transactions increasingly useful, practical and accessible. However, as the number of crypto users has gone up, so has the rate of cyber theft related to cryptocurrencies. That’s why it’s important to understand how to safekeep your crypto by learning about crypto wallets, how they work and what to look for in one, whether it’s digital or physical.

What is a crypto wallet?

Cryptocurrency wallets, or simply crypto wallets, are places where traders store the secure digital codes needed to interact with a blockchain. They don’t actively store your cryptocurrencies, despite what their name may lead you to believe.

Crypto wallets need to locate the crypto associated with your address in the blockchain, which is why they must interact with it. In fact, crypto wallets are not as much a wallet as they are ledgers: They function as an owner’s identity and account on a blockchain network and provide access to transaction history.

How do crypto wallets work?

When someone sends bitcoin, ether, dogecoin or any other type of digital currency to your crypto wallet, you aren’t actually transferring any coins. What they’re doing is signing off ownership thereof to your wallet’s address. That is to say, they are confirming that the crypto on the blockchain no longer belongs to their address, but yours. Two digital codes are necessary for this process: a public key and a private key.

A public key is a string of letters and numbers automatically generated by the crypto wallet provider. For example, a public key could look like this: B1fpARq39i7L822ywJ55xgV614.

A private key is another string of numbers and letters, but one that only the owner of the wallet should know.

Think of a crypto wallet as an email account. To receive an email, you need to give people your email address. This would be your public key in the case of crypto wallets, and you need to share it with others to be a part of any blockchain transaction. However, you would never give someone the password to access your email account. For crypto wallets, that password is the equivalent of your private key, which under no circumstances should be shared with another person.

Using these two keys, crypto wallet users can participate in transactions without compromising the integrity of the currency being traded or of the transaction itself. The public key assigned to your digital wallet must match your private key to authenticate any funds sent or received. Once both keys are verified, the balance in your crypto wallet will increase or decrease accordingly.

Types of crypto wallet

Crypto wallets can be broadly classified into two groups: hot wallets and cold wallets. The main difference is that hot wallets are always connected to the internet while cold wallets are kept offline.

Hot Wallets

Hot wallets are digital tools whose connection to the internet cannot be severed. Users can access these pieces of software from a phone or desktop computer to monitor their currencies and trade them. Some hot wallets are also accessible through the web or as browser extensions, meaning you can use them on a wide variety of devices.

The greatest advantage of hot wallets is their convenience. Your public and private keys are stored and encrypted on your wallet’s respective app or website, so unless they’re limited to a specific device, you can access them anywhere with an online connection. This ease of access makes them ideal for those who trade more often and are considering spending bitcoins.

Because hot wallets are always accessible online, they also face a greater risk of cyberattacks. Hackers can exploit hidden vulnerabilities in the software that supports your wallet or use malware to break into the system. This is particularly dangerous for web wallets hosted by crypto exchanges, which are bigger targets overall for crypto thieves.

PROS
– Highly convenient, can be accessed from anywhere with an internet connection
– Easier to recover access if you lose the private key than cold wallets

CONS
– Less secure than cold wallets, vulnerable to a wider variety of attacks
– For custodial wallets, your keys are kept on the exchange’s servers

Cold Wallets

Cold wallets store your digital keys offline on a piece of hardware or sheet of paper. Hardware wallets usually come in the form of a USB drive which lets you buy, sell and trade crypto while it’s connected to a computer. With “paper” wallets, your keys may be accessible via print-out QR codes, written on a piece of paper, or engraved on some other material, such as metal.

Cold storage wallets are deliberately designed to be hard to hack. Unless the wallet owner falls for some sort of phishing attack, hackers have no way of obtaining the owner’s keys remotely. For something like a hardware wallet, a thief would first have to obtain the USB drive used to access your crypto and then somehow crack its password.

This high level of security may lend itself to mistakes on the part of wallet owners. If you lose your USB drive or sheet of paper and don’t have your private key backed up somewhere, you’ve effectively lost access to your crypto. Compared to hot wallets, which make it possible to regain access through a seed phrase, recovering access on a cold wallet is impossible in most cases due to the two-key security system.

PROS
– More secure than hot storage wallets due to offline storage
– Many hardware wallets are supported by hot storage wallets

CONS
– Transactions take longer on average
– Nearly impossible to recover currencies without a backup of your digital keys

How to set up a crypto wallet

Setting up a cryptocurrency wallet is a generally straightforward process that takes no more than a couple of minutes. The first step is to determine the kind of wallet you want to use since hot wallets and cold wallets have different set up processes. Then, you’ll need to do the following:

For hot wallets…

Download the wallet. Make sure the wallet is legitimate before downloading any software. Crypto scams are becoming increasingly common and it’s important to know if the company behind a wallet actually exists. For web wallets, verify that you are on the correct website and not on a fake version of it built to steal your information.

Set up your account and security features. If you are using a non-custodial wallet, this is when you’ll be given your private key, a random 12 to 24-word string of words. If you lose or forget these, you will not be able to access your crypto. You can enable added security tools, like two-factor authentication and biometrics, during or after the set up process. The process for custodial wallets is a bit more involved, and you’ll have to undergo a verification process called Know-Your-Customer (KYC) to validate your identity.

Add funds to your wallet. For non-custodial wallets, you may have to transfer crypto from elsewhere, as not all wallets allow you to buy crypto with fiat currency directly. As for custodial wallets, you’ll need to fund them using a credit or debit card before you can purchase crypto, in some cases.

For cold wallets…

Purchase the wallet online. When buying a cold wallet, avoid third-party resellers. Buy the product directly from the developer to avoid issues, such as the device being tampered with beforehand.

Install the device’s software. Each brand has its own software that must be installed onto the hardware device before it can be used. Make sure to download the software from the company’s official website. Then, follow its instructions to create your wallet.

Deposit your cryptocurrency. You’ll need to transfer crypto into your hardware wallet from elsewhere, such as from a crypto exchange. Some wallets may have an incorporated exchange that allows you to trade crypto while the device is connected to your desktop computer or mobile device.

What to look for in a crypto wallet

When looking for a crypto wallet, it’s very important to first ask yourself:

How often do I trade? Will you be trading cryptocurrency daily or just occasionally? Hot wallets are better for active traders due to their speed and practicality. However, active traders may also benefit from a cold wallet by using it as a kind of savings account, keeping the bulk of their currencies there.

What do I want to trade? Are you looking to buy and store Bitcoin or are you interested in different types of cryptocurrency, like altcoins and stablecoins? The crypto wallet you pick should support the currencies you wish to trade and will ideally accommodate any other coins you may want to trade in the future.

How much am I willing to spend? Are you planning on accumulating large amounts of crypto? Hardware wallets are ideal for this sort of activity, but unlike hot wallets (which are mostly free), they require an upfront payment to own the wallet itself. Some hot wallets have higher crypto trading fees but offer faster transactions or greater functionality.

What functionality do I need in a wallet? Do you plan on doing anything specific with crypto beyond simply trading it? For example, traders who want to make money with their crypto passively should look for wallets that allow for crypto lending, staking and deposits.

After exploring the above questions, we put together some general suggestions for what to look for in a crypto wallet:

  1. Supported currencies – The rule of thumb for supported currencies is “the more, the better.” Unless you’re interested in solely trading Bitcoin, we suggest you opt for a wallet that supports at least a few of the more popular altcoins.
  2. Accessible interface – An accessible, intuitive user interface is always welcome, regardless of whether you’re a crypto veteran or a newbie. Look for wallets that don’t make you jump through hoops to start basic trading.
  3. 24/7 customer support – Although more useful for newer traders, having customer support available throughout the day is always a plus. This is especially true for wallets that undergo frequent updates and may suffer from bugs or visual glitches.
  4. Hardware wallet compatibility – Anyone who is seriously thinking about getting into crypto should consider getting a hardware wallet. Even people who don’t trade frequently should consider a hardware wallet to safeguard their most important assets. Investors with a hot wallet that’s compatible with at least one brand of hardware wallet have an advantage, since they can default to the model(s) supported by their wallet and transfer their crypto back and forth as needed.

Investing in crypto prudently

Cryptocurrencies are a new and exciting financial asset. The idea of a decentralized currency independent of the banking industry is enticing for many. The wild price swings can be a thrill, and some coins are simply amusing.

Consider the story of Dogecoin. A portmanteau of Bitcoin and Doge, the currency was a hit on Reddit, a popular social network forums site, and quickly generated a market value of $8 million. DOGE hit an all-time high on May 8, 2021, reaching a market capitalization of more than $90 billion after Elon Musk and Reddit users involved in the GameStop short squeeze turned their attention to it.

For a more sobering example, take a look at Bitcoin — the grandparent of all cryptocurrencies. Bitcoin has experienced multiple crashes throughout its lifespan, but its most recent one has left a lasting impression in mainstream culture. Reaching an all-time high of more than $65,000 in November 2021, its market value has declined as part of a general crypto price drop, briefly dipping under $20,000 in June 2022.

While entertaining, the fact remains that cryptocurrencies are unpredictable assets and should be traded with caution. It’s important to consider the following dangers when asking yourself, “should I invest in cryptocurrencies?:”

Crypto is volatile. A cursory glance at the historical price of Bitcoin is enough to see massive peaks and depressions throughout its lifespan. Just recently, Bitcoin fell under $20,000 in June after having surpassed a value of $69,000 for a single coin in November 2021. The same goes for any other major cryptocurrency. These dramatic changes are not normal compared to the pace at which mainstream assets move.

Crypto isn’t backed by anything. Most coins do not have a natural resource, such as gold, silver or other metals, that is used to track their value. They’re not backed by the government and don’t track the growth potential of enterprises the way stocks and bonds do. This increases crypto’s volatility as a whole.

Cryptocurrencies are also speculative assets, which are riskier due to large fluctuations in price. Many active traders invest in them with the hope of making a big profit after their value dramatically increases in the near future — hopefully before a crash.

Crypto is unregulated. Governments and institutions worldwide are still grappling with how to regulate cryptocurrencies, asking: Do we need specific legislation to regulate crypto assets? Who should regulate crypto? Should it be regulated at all?

While this lack of regulation responds to the nature of crypto and its ethos of freedom, a lack of adequate regulation means consumers are not protected against many crypto crimes and scams. Ultimately, crypto must be studied and handled carefully, as its future remains uncertain.

Personal finance experts and advisors recommend investing no more than 5% of your portfolio in risky assets like crypto. Beginners should also refrain from riskier crypto trading practices, such as lending and staking currencies to generate revenue.

Crypto Wallet Glossary

  • Blockchain: A blockchain is a type of ledger that records digital transactions and is duplicated across its entire network of systems. The shared nature of blockchain creates an immutable registry that protects users against fraud. Cryptocurrencies are traded on the blockchain.
  • BTC: BTC is the currency code used to represent Bitcoin, which was created by Satoshi Nakamoto as the first decentralized cryptocurrency. Read our article on what is Bitcoin to find out more.
  • Foundation for Wallet Interoperability (FIO) Network: The FIO was established in the “pursuit of blockchain usability through the FIO Protocol.” The FIO protocol is meant to improve the scalability of the blockchain and develop a standard for interaction between various crypto-related entities.
  • Hierarchical Deterministic (HD) account: HD accounts may be restored on other devices by using a backup phrase of 12 random words that’s created when you generate the wallet.
  • Light client: Also called light nodes, light clients implement SPV, a technology that does not require downloading an entire blockchain to verify transactions. Depending on the currency, a full blockchain could be anywhere from 5Gb to over 200Gb. Thus, light clients tend to be faster than regular clients and require ​​less computing power, disk space and bandwidth. Mobile wallets almost always use light clients.
  • mBTC: A common exchange value, mBTC is short for millibitcoin, which is one-thousandth of a bitcoin (0.001 BTC or 1/1000 BTC)
  • Multi-signature: Multisig for short, wallets with this feature require more than one private key to sign and send a transaction.
  • Open-source: Software that is considered “open-source” has a source code that may be studied, modified or redistributed by anyone. The source code is what programmers use to adjust how a piece of software works.
  • Seed phrase: Newly opened crypto wallets randomly generate a string of 12 to 24 words known as a seed phrase. Users with non-custodial wallets must keep this phrase and are recommended to write it down in a safe location, since it stores all the information needed to recover access to their wallet and funds.

With all the information in this post, I believe you’re on your way to becoming an expert on crypto wallets and the measures you can take to avoid cyber theft. Until next time!

Categories
Tips

Managing software project dependencies with git submodules

Rarely any software project today is built from the ground up. Frameworks and libraries have made developers’ lives so easy that there’s no need to reinvent the wheel anymore when it comes to software development. But these frameworks and libraries become dependencies of our projects, and as the software grows in complexity over time, it can become pretty challenging to efficiently manage these dependencies. 

Sooner than later developers can find their code depending on software projects of other developers which are either open source, hosted online or being developed in-house, in maybe another department of the organisation. These dependencies are also evolving, and need  to be updated and in sync with your main source tree. This ensures that a small change breaks nothing and your project is not outdated and does not have  any known security vulnerability or bugs.

A good recent example of this is log4j, a popular framework for logging, initially released in 1999, which became a huge headache for many businesses at the end of 2021, including Apple, Microsoft and VMware. log4jt was a dependency in a variety of software and the vulnerabilities discovered affected all of them. This is a classic example of how dependencies play a huge role in software lifecycle and why managing them efficiently becomes important. 

While there are a variety of ways and frameworks to manage software dependencies, depending on software complexity, today I’ll cover one of the most common and easy to use methods called “git submodule”:. As the name suggests it is built right into git itself, which is the de facto version control system for the majority of software projects.

Hands-on with git submodules:

Let us assume your project name “hello-world” depends on an open source library called “print”.

A not-so-great way to manage the project is to clone the “print” library code and push it alongside the “Hello World” code tree to GitHub (or any version control server). This works and everything runs as expected. But what happens when the author of “print” makes some changes to its code or fixes a bug?Since you’ve used your own local copy of print and there is no tracking to the upstream project, you won’t be able to get these new changes in, therefore you need to manually patch it yourself or re-fetch and push the code once again. Is this the best way of doing it, one may ask?

git has this feature baked in which allows you to add other git repos (dependencies projects) as submodules. This means your project will follow a modular approach and you can update the submodules, independent of your main project. You can add as many submodules in your project as you want and assign rules such as “where to fetch it from” and “where to store the code once it is fetched”. This obviously works if you use git for your software project version control.

Let’s see this in action:

So I’ve created a new git project namely “hello-world” on my GitHub account, which has two directories:

src – where my main source code is stored

lib – where all the libraries a.k.a dependencies are stored which my source code is using.

These libraries are hosted on GitHub by their maintainers as independent projects. For this example, I’m using two libraries.

  1. hello – which is also created by me as a separate github repo 
  2. resources –  which is another git repository in Developer Nation account

To add these two above-mentioned libraries as submodules to my project, let’s open the terminal, change to the main project directory where I want them to be located. In this case, I want them in my lib directory, so I’ll execute the following commands:

cd hello-world/lib

Add submodule with command : git submodule add <link to repo>

git submodule add git@github.com:iayanpahwa/print.gitgit submodule add git@github.com:devnationworld/resources.git

This will fetch the source code of these libraries and save them in your lib folder. Also, now you’ll find a new hidden file created in root of your main project directory with name .gitmodules which has the following meta-data:

```
[submodule "lib/print"]
path = lib/print
url = git@github.com:iayanpahwa/print.git
[submodule "lib/resources"]
path = lib/resources
url = git@github.com:devnationworld/resources.git
```

This tells git about :

  • submodules use in this project 
  • where to fetch them from
  • where to store them

Now every time someone clones the project, they can separately clone the submodule using following commands:

git clone < Your project URL >
cd <Your project URL>
git submodule init 
git submodule update 

OR:

This can also be done in one command as:

git clone <Your Project URL> —recursive, in this case

git clone git@github.com:iayanpahwa/hello-world.git —recursive

One more thing you’ll notice on GitHub project repo is in lib directory, folders are named as :

print @ fa3f …

resources @ c22

The hash after @ denotes the last commit from where print and resources libraries were fetched. This is a very powerful feature as by default, the submodule will be fetched from the latest commit available upstream i.e HEAD of master branch, but you can fetch from different branches as well. More details and options can be found on the official doc here.

Now you can track and update dependency projects independent of your main source tree. One thing to note is all your dependencies need not to be on the same hosting site as long as they’re using git. For example: If hello-world was hosted on Github and printed on Gitlab, the git submodule will still work the same.

I hope this was a useful tutorial and you can now leverage git submodules to better manage your project dependencies. If you have any questions and ideas for more blogs, I’d love to hear from you in the comments below. 

Categories
Tips

A Definitive guide to Game UI for enhanced Gaming experience

If you ever wondered how game designers come up with placement and immersability of assets such as health meter and mission progress without them hindering game play, this article is for you. Like websites or mobile apps, video games have common UI components that help players navigate and accomplish goals. In this article you’ll discover the four classes of game UI and how as a game designer you can utilise them to provide for the best possible gaming experience.

Sixty years ago the Brookhaven National Laboratory in Upton, NY held an open house. Visitors who toured the lab were treated to an interactive exhibit, a game titled Tennis for Two. The setup was simple—a 5-inch analog display and two controllers, each with one knob and one button. The world’s first video game was born, but after two years, the exhibit was closed.

Twelve years passed, and an eerily similar arcade game showed up in a bar called Andy Capp’s Tavern. The name of the game? Pong. Its maker? Atari. Seemingly overnight, the burgeoning world of video games was transformed. Novelty became an industry.

Since Pong, the complexity of video game graphics has evolved exponentially. We’ve encountered alien insects, elven adventures, and soldiers from every army imaginable. We’ve braved mushroom kingdoms, boxing rings, and an expanding universe of hostile landscapes. While it’s fun to reminisce about the kooky characters and impossible plot lines, it’s also worth discussing the design elements that make video games worth playing—the UI components.

Like websites or mobile apps, video games have common UI components that help players navigate, find information, and accomplish goals. From start screens to coin counters, video game UI components are a crucial aspect of playability (a player’s experience of enjoyment and entertainment). To understand how these components impact the gaming experience, we must quickly address two concepts that are vital to video game design: Narrative and The Fourth Wall.

Narrative

Narrative is the story that a video game tells. Consider this as your video game character storyline.

The Fourth Wall

The Fourth Wall is an imaginary barrier between the game player and the space in which the game takes place.

Narrative and The Fourth Wall provide two questions that must be asked of every UI component incorporated into a game:

  1. Does the component exist in the game story?
  2. Does the component exist in the game space?

From these two questions, four classes of video game UI components emerge: Non-diegetic; Diegetic; Spatial; and Meta.

Non-Diegetic

  • Does the component exist in the game story? No
  • Does the component exist in the game space? No

Non-diegetic UI components reside outside of a game’s story and space. None of the characters in the game, including a player’s avatar, are aware that the components exist. The design, placement, and context of non-diegetic components are paramount.

In fast-paced games, non-diegetic components may interrupt a player’s sense of immersion. But in strategy-heavy games, they can provide players with a more nuanced assessment of resources and actions.

Non-Diegetic components commonly appear in video games as stat meters. They keep track of points, time, damage, and various resources that players amass and expend during gameplay.

In Super Mario Bros. 3, the stat meter is non-diegetic because it exists outside of the game world and story (characters within the game don’t know it’s there).

Diegetic

  • Does the component exist in the game story? Yes
  • Does the component exist in the game space? Yes

Diegetic UI components inhabit both a game’s story and space, and characters within the game are aware of the components. Even though they exist within the game story and space, poorly considered diegetic components are still capable of distracting or frustrating players.

Scale makes diegetic components tricky. For instance, an in-game speedometer that resides on a vehicle’s dashboard will likely be too small for players to see clearly. In some games, handheld diegetic components (like maps) can be toggled to a 2-D, full-screen view, making them non-diegetic.

In the demolition racing game Wreckfest, cars are diegetic UI components. Over the course of a race, they take on visible damage that indicates how near a player is to being knocked out of competition.

Spatial

  • Does the component exist in the game story? No
  • Does the component exist in the game space? Yes

Spatial UI components are found in a game’s space, but characters within the game don’t see them. Spatial components often work as visual aids, helping players select objects or pointing out important landmarks.

Text labels are a classic example of spatial UI components. In fantasy and adventure games, players may encounter important objects that are unfamiliar in appearance. Text labels quickly remove ambiguity and keep players immersed in the gaming experience.

The American football franchise Madden has spatial UI components that help players select avatars and understand game scenarios.

Meta

  • Does the component exist in the game story? Yes
  • Does the component exist in the game space? No

Meta UI components exist in a game’s story, but they don’t reside in the game’s space. A player’s avatar may or may not be aware of meta components. Traditionally, meta components have been used to signify damage to a player’s avatar.

Meta components can be quite subtle—like a slowly accumulating layer of dirt on the game’s 2D plane, but they can also feature prominently in the gaming experience. In action and adventure games, the entire field of view is sometimes shaken, blurred, or discolored to show that a player has taken on damage.

The Legend of Zelda utilizes scrolling text (a meta component) to advance the narrative and provide players with helpful tips.

A very illustrative infographic summing up all 4 classes of video game UI components can be found below.

Classifying video game UI components isn’t always cut and dry. A life meter may be diegetic in one game but non-diegetic in another. Depending on a game’s narrative and its players’ relationship to the fourth wall, components may blur the line between classes. Likewise, an infinite range of visual styles and configurations can be applied to components according to a game’s art direction.

Categories
Tips

Git Internals Part 3: Understanding the staging area in Git

Software development is a messy and intensive process, which in theory, should be a linear, cumulative construction of functionalities and improvements in code, but is rather more complex. More often than not it is a series of intertwined, non-linear threads of complex code, partly finished features, old legacy methods, collections of TODO comments, and other things common to any human-driven and a largely hand-crafted process known to mankind.

Git was built to make our lives easier when dealing with this messy and complex approach to software development. Git made it possible to work effortlessly on many features at once and decide what you want to stage and commit to the repository. The staging area in Git is the main working area, but most of the developers know only a little about it.

In this article, we will be discussing the staging area in Git and how it is a fundamental part of version control and can be used effectively to make version control easier and uncomplicated.

What is Staging area?

To understand what is staging area is, let’s take a real-world example – suppose that you are moving to another place, and you have to pack your stuff into boxes and you wouldn’t want to mix the items meant for the bathroom, kitchen, bedroom, and the living room in the same box. So, you will take a box and start putting stuff into it, and if doesn’t make sense, you can also remove it before finally packing the box and labeling it.

Here, in this example, the box serves as the staging area, where you are doing the work (crafting your commit), whereas when you are done, then you are packing it and labeling it (committing the code).

In technical terms, the staging area is the middle ground between what you have done to your files (also known as the working directory) and what you had last committed (the HEAD commit). As the name implies, the staging area gives you space to prepare (stage) the changes that will be reflected on the next commit. This surely adds up some complexity to the process, but it also adds more flexibility to selectively prepare the commits as they can be modified several times in the staging area before committing.

Assume you’re working on two files, but only one is ready to commit. You don’t want to be forced to commit both files, but only the one that is ready. This is where Git’s staging area comes in handy. We place files in a staging area before committing what has been staged. Even the deletion of a file must be recorded in Git’s history, therefore deleted files must be staged before being committed.

What are git commands for the staging area?

git add

The command used to stage any change in Git is git add. The git add command adds a modification to the staging area from the working directory. It informs Git that you wish to include changes to a specific file in the next commit. However, git add has little effect on the repository—changes are not truly recorded until you execute git commit.

The common options available along with this command are as follows:

You can specify a <file> from which all changes will be staged. The syntax would be as follows:

git add <file>

Similarly, you can specify a <directory> for the next commit:

git add <directory>

You can also use a . to add all the changes from the present directory, such as the following:

git add .

git status

git status command is used to check the status of the files (untracked, modified, or deleted) in the present branch. It can be simply used as follows:

git status

git reset

In case, you have accidentally staged a file or directory and want to undo it or unstage it, then you can use git reset command. It can be used as follows:

git reset HEAD example.html

git rm

If you remove files, they will appear as deleted in git status, and you must use git add to stage them. Another option is to use the git rm command, which deletes and stages files in a single command:

To remove a file (and stage it)

git rm example.html

To remove a folder (and stage it)

git rm -r myfolder 

git commit

The git commit command saves a snapshot of the current staged changes in the project. Committed snapshots are “secure” versions of a project that Git will never alter unless you specifically ask it to.

Git may be considered a timeline management utility at a high level. Commits are the fundamental building blocks of a Git project timeline. Commits may be thought of as snapshots or milestones along a Git project’s history. Commits are produced with the git commit command to record the current status of a project.

Git Snapshots are never committed to the remote repository. As the staging area serves as a wall between the working directory and the project history, each developer’s local repository serves as a wall between their contributions and the central repository.

The most common syntax followed to create a commit in git is as follows:

git commit -m "commit message"

The above commands and their functionalities can be summed up simply in the following image:

git commit -m commit message

Conclusion

To summarize, git add is the first command in a series of commands that instructs Git to “store” a snapshot of the current project state into the commit history. When used alone, git add moves pending changes from the working directory to the staging area. The git status command examines the repository’s current state and can be used to confirm a git add promotion. To undo a git add, use the git reset command. The git commit command is then used to add a snapshot of the staging directory to the commit history of the repository.

This is all for this article, we will discuss more Git Internals in the next article. Do let me know if you have any feedback or suggestions for this series. 

If you want to read what we discussed in the earlier instalments of the series, you can find them below.

Git Internals Part 1- List of basic Concepts That Power your .git Directory here

Git Internals Part 2: How does Git store your data? here

Keep reading!

Categories
Platforms

Getting Started with EVM (Ethereum Virtual Machine)

Ethereum has been a game-changer since its launch in 2015. It revolutionized the way people think about blockchain technology and decentralization. For a quick refresher,  Ethereum is a public, open-source, decentralized blockchain which can run smart-contracts and enable developers to build and deploy decentralized applications (DApps).

Many used to believe that blockchain was all about cryptocurrencies. And Ether is just another cryptocurrency like the well-known Bitcoin. However, Ethereum took the blockchain technology to new heights by shifting its concept from being just another digital currency to a new decentralized platform with endless applications and possibilities. 

It gave birth to the ICO (Initial Coin Offering) wave, introduced a completely new programming language, supported the creation of DApps (decentralized applications), and, foremost, polarized the term “smart-contracts.” What makes all these possible is the heart of Ethereum’s success: the Ethereum Virtual Machine (EVM)

In this article, we’ll take a closer look at the EVM, what it is and how it works. We’ll also give hints and tips on how to develop on EVM using Solidity. So, without further ado, let’s get started!

Basics of Ethereum Virtual Machine 

We’ve already mentioned that EVM makes Ethereum what it is today. But we should establish a stronger foundation for understanding EVM. 

What is an Ethereum Virtual Machine (EVM)?

Ethereum Virtual Machine or EVM is a “world computer” that executes programs called “smart-contracts.” Smart-contracts are immutable computer programs intended to digitally facilitate, verify or enforce the negotiation or performance of a contract. These are applications that run precisely as programmed without the possibility of fraud or third-party interference.

Additionally, EVM is responsible for processing and executing all other transactions on the Ethereum network, such as handling DApps, and token transfers. It runs on every node in the Ethereum network and processes every transaction that goes through it. It is Turing-complete, meaning it can run any type of program as long as there are enough resources or “gas” to process it.

How does EVM work?

EVM works by executing a program called bytecode. This bytecode is generated from the high-level programming language Solidity (we will discuss this later in this article). The bytecode is then fed into the EVM, which processes and executes it.

To better understand this process, let’s compare it to how a traditional computer works. A desktop computer runs programs written in high-level coding languages like C++, Java, or Python. These programs are then converted into machine code, a low-level language the computer can understand. And the machine code is fed into the CPU (central processing unit), which processes and executes it.

Similarly, the bytecode generated from Solidity is fed into the EVM, which processes and executes it. The main difference here is that a traditional computer can only run one program at a time, while the EVM can run multiple programs simultaneously. This is because each program that runs on the EVM has its own isolated environment, which is called an “Ethereum Virtual Machine.” 

Developing on EVM with Solidity

Solidity as Programming Language

As we’ve mentioned before, the EVM executes a program called bytecode. This bytecode is generated from the high-level programming language called Solidity. So, to develop on EVM, you will need to understand the use of Solidity. 

Solidity is a contract-oriented, high-level programming language for implementing smart contracts. It was created specifically for the EVM and had syntax inspired by existing languages such as C++, Python, and JavaScript. However, there are a few things that you should know about Solidity. 

First of all, Solidity is a statically typed language, which means you will need to declare the type of each variable before using it. For example, before using it, you must declare whether a variable is an integer or a string. Secondly, Solidity is case-sensitive, so you will need to be careful about the casing of your variables. For instance, the variable “MyVariable” differs from “myvariable.” Third, Solidity does not have a concept of “null,” meaning you will need to use the keyword “require” to check if a variable is null or not.

Tools to Get Started

You can use the following few tools to get started on EVM. The first tool that you will need is the Remix IDE. A Remix is a browser-based IDE that allows you to write, compile, and debug Solidity contracts. It also comes with a built-in debugger and an integrated testing environment.

The next tool you can use is Hardhat. Hardhat is a toolkit for Ethereum development that allows you to automate many of the tasks involved in smart contract development, such as compiling, testing, deploying, and upgrading contracts.

The last tool that you can check is Truffle. Truffle is a development environment, testing framework, and asset pipeline for Ethereum. It makes it easy to develop smart contracts and provides a suite of tools for testing, debugging, and deploying contracts.

After choosing the tools, you must decide which Ethereum network you want to deploy your contract to.  You can choose from two main networks: the testnet and the mainnet. Testnet is a global testing environment in which developers can obtain and spend ether with no real-world value.” In other words, it is a test network where you can experiment with your contracts without worrying about losing any real money.

On the other hand, the mainnet is the “live” Ethereum network, where all transactions have real-world value. Contracts deployed on the mainnet are live and irreversible. Also, it is accessible to anyone in the world. Hence, ensure that your contracts are thoroughly tested before deploying them on the mainnet.

Lastly, once you have deployed your contract on either the testnet or the mainnet, you can view it on Etherscan. Etherscan is a block explorer and analytics platform for Ethereum that allows you to view all of the transactions you have made on the Ethereum network and information about individual addresses and contracts.

Tips on Developing on EVM

Here are some tips that you can use in developing on EVM: 

  1. Make sure to test your contracts thoroughly before deploying them on the mainnet because once a contract is deployed on the mainnet, it cannot be changed or deleted.
  2. Secure your private keys and keep them safe. If someone gets ahold of your private keys, they can access all of your Ether.
  3. Consider using tools to automate the tasks involved in smart contract development to save you a lot of time and effort in the long run. 
  4. Be aware of the gas costs associated with each transaction. Every transaction on the Ethereum network costs a certain amount of Ether to execute.
  5. Keep your contract code simple and easy to understand. Complex contracts are more difficult to debug and likely to contain errors.

Conclusion 

It’s safe to say that Ethereum is a disruptive innovation with the potential to change how we interact with the digital world. That’s why it’s no wonder Ethereum’s price today continuously rises. With its powerful smart contract functionality, Ethereum provides a whole new level of flexibility and control.

While it is still in its early stages, Ethereum Virtual Machine (EVM) has already established impactful changes, and its further development is definitely worth keeping an eye on.

Sophia Young recently quit a non-writing job to finally be able to tell stories and paint the world through her words. She loves talking about fashion and weddings and travel, but she can also easily kick ass with a thousand-word article about the latest marketing and business trends, blockchain, cryptocurrency, finance-related topics, and can probably even whip up a nice heart-warming article about family life. She can totally go from fashion guru to your friendly neighbourhood cat lady with mean budgeting skills and home tips real quick.