How to Get Started with Smart Contracts on EOS

Arpit Khandelwal
Coinmonks
Published in
6 min readJan 6, 2023

--

Smart contracts are a powerful way to automate complex processes and transactions on the blockchain. If you’re new to EOS and want to learn how to create and deploy your own smart contracts, this guide is for you!

In this guide, we’ll cover the following topics in detail:

  • Setting up your development environment
  • Writing and testing your contract code
  • Deploying your contract on the EOS mainnet

By the end of this guide, you’ll have the skills and knowledge to build your own smart contracts on EOS. Let’s get started!

Setting up Your Development Environment

Before you can start building your own smart contracts, you’ll need to set up your development environment. This includes installing the necessary software and libraries, as well as setting up your EOS account and wallet.

Install the EOSIO Software

The first step in setting up your development environment is to install the EOSIO software on your computer. This includes the EOSIO node, which is responsible for running the EOS blockchain, and the EOSIO.CDT (Contract Development Toolkit), which is a set of tools and libraries for building smart contracts on EOS.

You can download the latest version of the EOSIO software from the EOSIO GitHub page. The installation process will vary depending on your operating system, but generally you’ll need to follow these steps:

  1. Download the EOSIO software package for your platform (e.g., macOS, Linux, Windows).
  2. Extract the downloaded package to a directory on your computer.
  3. Add the eosio and eosio.cdt directories to your PATH environment variable. This will allow you to access the eosio and eosio-cpp command-line tools from any directory.

Once you’ve installed the EOSIO software, you should be able to run the eosio and eosio-cpp command-line tools from your terminal.

Set Up an EOS Account and Wallet

To deploy your smart contracts on the EOS mainnet, you will need an EOS account and wallet. An EOS account is a unique identifier on the EOS blockchain that represents your identity, and a wallet is a secure storage location for your EOS tokens.

You can create an EOS account and wallet using the cleos command-line tool that comes with the EOSIO software. Here's an example of how to create an account and wallet using cleos:

# Create a new EOS account
cleos create account eosio <your-account-name> <your-public-key> <your-public-key>

# Create a new wallet and import your private key
cleos wallet create
cleos wallet import <your-private-key>

Replace <your-account-name>, <your-public-key>, and <your-private-key> with your own account name, public key, and private key. You can generate a new public and private key pair using a tool like EOSKey.

Install a Text Editor or IDE

Next, you’ll need a text editor or IDE (Integrated Development Environment) for writing your contract code. There are many options to choose from, such as Sublime Text, Visual Studio Code, or CLion. Choose a text editor or IDE that you feel comfortable with and that has good support for C++, the programming language used for EOS smart contracts.

Familiarize Yourself with the EOSIO.CDT Library and C++

Finally, you’ll need to familiarize yourself with the EOSIO.CDT library and the C++ programming language. The EOSIO.CDT library provides a set of functions and macros thatyou can use to interact with the EOS blockchain, and C++ is the programming language used to write EOS smart contracts.

There are many resources available online for learning C++ and the EOSIO.CDT library. Some good places to start are the EOSIO Developer Portal and the EOSIO.CDT documentation.

By following these steps, you’ll have a development environment that’s ready for building your first smart contract on EOS.

Writing and Testing Your Contract Code

Now that we have set up our development environment, it’s time to start writing our contract code. This involves designing the logic and functionality of our contract and implementing it in C++ using the EOSIO.CDT library.

Designing Our Contract

Before we start writing code, it’s a good idea to think about what our contract should do and how it should work. This can help us identify any potential issues or edge cases that we’ll need to account for.

For example, let’s say we want to create a contract that allows people to bid on items in an auction. Some things we might consider when designing our contract include:

  • What information do we need to store for each auction item?
  • How will people submit bids?
  • How will we determine the winning bid?
  • How will we handle cases where someone withdraws their bid?

By thinking through these and other questions, we’ll be better prepared to write code that meets the needs of our contract.

Writing and Debugging Our Code

Once we have a design for our contract, we can start writing the code. We will use the EOSIO.CDT library and C++ to implement the logic and functionality of our contract.

Here’s an example of how to write a simple “Hello, World!” smart contract:

#include <eosio/eosio.hpp>
#include <eosio/print.hpp>

using namespace eosio;

class [[eosio::contract("hello")]] hello : public contract {
public:
using contract::contract;

[[eosio::action]] void hi(name user) {
print("Hello, ", user);
}
};

EOSIO_DISPATCH(hello, (hi))

This contract has a single action, hi, which takes a name parameter and prints a greeting to the user.

To test and debug our contract code, we will use the eosiocpp tool to compile and deploy our contract on a local testnet. This allows us to test and debug our contract without risking any real EOS tokens.

# Compile our contract code
eosiocpp -o hello.wasm hello.cpp

# Deploy our contract on a local testnet
cleos set contract hello . -p hello@active

Once our contract is deployed on the testnet, we can use the cleos tool to call the hi action and see the output:

# Call the 'hi' action of our contract
cleos push action hello hi '["alice"]' -p alice@active

# Output: "Hello, alice"

Writing Unit Tests

It’s also a good idea to write unit tests for our contract code. This can help us catch any bugs or issues before we deploy our contract on the mainnet. We can use the EOSIO.CDT library’s testing framework to write and run our unit tests.

Unit tests are small pieces of code that test specific parts of our contract to make sure they are working correctly

#include <eosio/eosio.hpp>
#include <eosio/testing.hpp>

using namespace eosio;
using namespace eosio::testing;

// Test fixture for the 'hello' contract
struct hello_tester {
hello_tester() {
// Create a new instance of the 'hello' contract
hello = deploy_contract<hello>();
}

// Instance of the 'hello' contract
contract_tester<hello> hello;
};

// Test for the 'hi' action of the 'hello' contract
EOSIO_TEST_BEGIN(hello_test)
// Declare a test fixture
hello_tester tester;

// Call the 'hi' action and check the output
tester.hello.hi(N(alice));
tester.hello.produce_block();
REQUIRE_MATCHING_OUTPUT("Hello, alice", tester.hello.console());
EOSIO_TEST_END

To run our unit tests, we can use the eosio-cpp tool:

# Compile and run our unit tests
eosio-cpp -o hello_test.wasm hello_test.cpp --abigen
cleos set contract hello_test . -p hello_test@active

By following these best practices, we’ll have a better chance of creating a high-quality smart contract that’s ready for deployment.

Deploying Your Contract on the EOS Mainnet

Now that we have written and tested our contract code, it’s time to deploy it on the EOS mainnet. This involves preparing our contract for deployment, obtaining the necessary resources, and finally deploying our contract to the mainnet.

Preparing Your Contract for Deployment

Before we deploy our contract on the mainnet, we will need to make sure it is ready for production. This includes ensuring that our contract is fully tested and free of bugs, and that it follows the best practices for EOS smart contract development.

Obtaining the Necessary Resources

To deploy our contract on the EOS mainnet, we will need to have a sufficient amount of EOS tokens staked for CPU and network bandwidth. This is necessary to ensure that our contract has the resources it needs to function properly.

We will also need to have a EOS account with a sufficient amount of RAM available to store our contract data. If we don’t have enough RAM, we will need to purchase more before we can deploy our contract.

Deploying Your Contract

Once we have prepared our contract for deployment and obtained the necessary resources, we are ready to deploy it on the EOS mainnet. We will use the cleos tool to set and deploy our contract:

# Set our contract on the EOS mainnet
cleos set contract myaccount /path/to/contract -p myaccount@active

# Test our contract on the EOS mainnet
cleos push action myaccount hi '["alice"]' -p alice@active

By following these steps, we can deploy our contract on the EOS mainnet and start using it to automate complex processes and transactions.

Congratulations! You’ve just deployed your first smart contract on the EOS mainnet. With the skills and knowledge you’ve gained from this guide, you’re well on your way to building more complex and powerful smart contracts on EOS.

New to trading? Try crypto trading bots or copy trading on best crypto exchanges

--

--