ico smart contracts

ICO Tokens & Smart Contracts

ICO Knowledge Base

Smart Contracts Explained

Smart Contacts: What Are They And How Do They Work

Smart contacts are an encrypted program stored on a blockchain, that automatically operate if the terms and conditions are met. The advantages of smart contacts are mostly visible in business collaborations, in which they are enforcing some type of correspondence, which ensures that all participants get the outcome they were looking for.


So, for an example, if you ever bought a car from a dealership, you know there are several steps to be taken. Like, if you can’t pay for the car right away, you’ll have to obtain financing. And if you are obtaining your financing, you’ll need to fill out a few forms, just so that the dealership can verify your identity. And during this process, you’ll have to go through a few people, such as the salesperson, finance broker, and lender. And for their services, there are several commissions and fees added to the price of the car.


So what the smart contacts do is making the process more efficient and smooth-running. The way this is possible is because, your identity is already on the blockchain, and lenders make a much quicker decision regarding the credit. This creates a smart contact between your bank, the dealer and the lender. The transfer of the ownership is automatic, and the transaction is recorded on a blockchain and is shared so that all the participants can check it anytime.


Smart contacts work when a network of computers enforce actions like registering a vehicle, issuing a ticket, etc… once the terms and conditions have been met. And once the transaction is completed, the blockchain gets updated.

But this is usually a process that involves both stakeholders and developers.

The Benefits Of Smart Contracts

The benefits that smart contacts bring to the table are speed and accuracy, trust, security, and savings. When it comes to speed and accuracy, the smart contacts are digitalized and automated, which means you won’t have to spend time like processing paperwork, and computers are more accurate than the legal personnel. Since, there are a lot of rules, terms, and conditions that have to be met, this brings a certain level of trust and security to smart contacts. And as for savings, well, smart contacts eliminate the need for intermediaries, since the users can trust the technology to execute the transaction accurately.


The Downsides Of Smart Contracts

Smart contact’s security depends on the code in which it is written and the infrastructure in which it runs and works.

For instance, in 2016, DAO, a smart contract-based investment fund, collected over $150 million in cryptocurrency in the 27 day period. Within this period, it was published that a number of security vulnerabilities in the infrastructure was identified. And a month later, hackers drained $50 million and exploited a lot of vulnerabilities, even the ones that were published. Because smart contracts are made for a binary system, but the world itself is not binary.

Another use for smart contacts was created by Slock.it, in Germany, consisting of smart contacts automating the rental of Airbnb accommodation. The way that it works is that when the payment is mad, the smart contact unlocks the door. So what if the accommodation is not as advertised?

See, the smart contacts’ foundation is in interfaces, business rules and data. Since the technology is evolving, the smart contacts need to evolve as well, just so they can sustain compatibility with the operating platforms in order to work correctly.

Smart contracts represent a revolution in automating a lot of everyday transactions, but they also create an open window for hackers to exploit what they have to offer.



Introduction to Smart Contracts

A Simple Smart Contract

Let us begin with the most basic example. It is fine if you do not understand everything right now, we will go into more detail later.


pragma solidity ^0.4.0;

contract SimpleStorage {
    uint storedData;

    function set(uint x) public {
        storedData = x;

    function get() public view returns (uint) {
        return storedData;

The first line simply tells that the source code is written for Solidity version 0.4.0 or anything newer that does not break functionality (up to, but not including, version 0.5.0). This is to ensure that the contract does not suddenly behave differently with a new compiler version. The keyword pragma is called that way because, in general, pragmas are instructions for the compiler about how to treat the source code (e.g. pragma once).

A contract in the sense of Solidity is a collection of code (its functions) and data (its state) that resides at a specific address on the Ethereum blockchain. The line uint storedData; declares a state variable called storedData of type uint (unsigned integer of 256 bits). You can think of it as a single slot in a database that can be queried and altered by calling functions of the code that manages the database. In the case of Ethereum, this is always the owning contract. And in this case, the functions set and get can be used to modify or retrieve the value of the variable.

To access a state variable, you do not need the prefix this. as is common in other languages.

This contract does not do much yet (due to the infrastructure built by Ethereum) apart from allowing anyone to store a single number that is accessible by anyone in the world without a (feasible) way to prevent you from publishing this number. Of course, anyone could just call setagain with a different value and overwrite your number, but the number will still be stored in the history of the blockchain. Later, we will see how you can impose access restrictions so that only you can alter the number.


All identifiers (contract names, function names and variable names) are restricted to the ASCII character set. It is possible to store UTF-8 encoded data in string variables.


Be careful with using Unicode text as similarly looking (or even identical) characters can have different code points and as such will be encoded as a different byte array.


Subcurrency Example

The following contract will implement the simplest form of a cryptocurrency. It is possible to generate coins out of thin air, but only the person that created the contract will be able to do that (it is trivial to implement a different issuance scheme). Furthermore, anyone can send coins to each other without any need for registering with username and password – all you need is an Ethereum keypair.

pragma solidity ^0.4.21;

contract Coin {
    // The keyword "public" makes those variables
    // readable from outside.
    address public minter;
    mapping (address => uint) public balances;

    // Events allow light clients to react on
    // changes efficiently.
    event Sent(address from, address to, uint amount);

    // This is the constructor whose code is
    // run only when the contract is created.
    function Coin() public {
        minter = msg.sender;

    function mint(address receiver, uint amount) public {
        if (msg.sender != minter) return;
        balances[receiver] += amount;

    function send(address receiver, uint amount) public {
        if (balances[msg.sender] < amount) return;
        balances[msg.sender] -= amount;
        balances[receiver] += amount;
        emit Sent(msg.sender, receiver, amount);

This contract introduces some new concepts, let us go through them one by one.

The line address public minter; declares a state variable of type address that is publicly accessible. The address type is a 160-bit value that does not allow any arithmetic operations. It is suitable for storing addresses of contracts or keypairs belonging to external persons. The keyword public automatically generates a function that allows you to access the current value of the state variable from outside of the contract. Without this keyword, other contracts have no way to access the variable. The code of the function generated by the compiler is roughly equivalent to the following:

function minter() returns (address) { return minter; }

Of course, adding a function exactly like that will not work because we would have a function and a state variable with the same name, but hopefully, you get the idea – the compiler figures that out for you.

The next line, mapping (address => uint) public balances; also creates a public state variable, but it is a more complex datatype. The type maps addresses to unsigned integers. Mappings can be seen as hash tables which are virtually initialized such that every possible key exists and is mapped to a value whose byte-representation is all zeros. This analogy does not go too far, though, as it is neither possible to obtain a list of all keys of a mapping, nor a list of all values. So either keep in mind (or better, keep a list or use a more advanced data type) what you added to the mapping or use it in a context where this is not needed, like this one. The getter function created by the public keyword is a bit more complex in this case. It roughly looks like the following:

function balances(address _account) public view returns (uint) {
    return balances[_account];

As you see, you can use this function to easily query the balance of a single account.

The line event Sent(address from, address to, uint amount); declares a so-called “event” which is emitted in the last line of the function send. User interfaces (as well as server applications of course) can listen for those events being emitted on the blockchain without much cost. As soon as it is emitted, the listener will also receive the arguments fromto and amount, which makes it easy to track transactions. In order to listen for this event, you would use

Coin.Sent().watch({}, '', function(error, result) {
    if (!error) {
        console.log("Coin transfer: " + result.args.amount +
            " coins were sent from " + result.args.from +
            " to " + result.args.to + ".");
        console.log("Balances now:\n" +
            "Sender: " + Coin.balances.call(result.args.from) +
            "Receiver: " + Coin.balances.call(result.args.to));

Note how the automatically generated function balances is called from the user interface.

The special function Coin is the constructor which is run during creation of the contract and cannot be called afterwards. It permanently stores the address of the person creating the contract: msg (together with tx and block) is a magic global variable that contains some properties which allow access to the blockchain. msg.sender is always the address where the current (external) function call came from.

Finally, the functions that will actually end up with the contract and can be called by users and contracts alike are mint and send. If mint is called by anyone except the account that created the contract, nothing will happen. On the other hand, send can be used by anyone (who already has some of these coins) to send coins to anyone else. Note that if you use this contract to send coins to an address, you will not see anything when you look at that address on a blockchain explorer, because the fact that you sent coins and the changed balances are only stored in the data storage of this particular coin contract. By the use of events it is relatively easy to create a “blockchain explorer” that tracks transactions and balances of your new coin.


Blockchain Basics

Blockchains as a concept are not too hard to understand for programmers. The reason is that most of the complications (mining, hashingelliptic-curve cryptographypeer-to-peer networks, etc.) are just there to provide a certain set of features and promises. Once you accept these features as given, you do not have to worry about the underlying technology – or do you have to know how Amazon’s AWS works internally in order to use it?



A blockchain is a globally shared, transactional database. This means that everyone can read entries in the database just by participating in the network. If you want to change something in the database, you have to create a so-called transaction which has to be accepted by all others. The word transaction implies that the change you want to make (assume you want to change two values at the same time) is either not done at all or completely applied. Furthermore, while your transaction is applied to the database, no other transaction can alter it.

As an example, imagine a table that lists the balances of all accounts in an electronic currency. If a transfer from one account to another is requested, the transactional nature of the database ensures that if the amount is subtracted from one account, it is always added to the other account. If due to whatever reason, adding the amount to the target account is not possible, the source account is also not modified.

Furthermore, a transaction is always cryptographically signed by the sender (creator). This makes it straightforward to guard access to specific modifications of the database. In the example of the electronic currency, a simple check ensures that only the person holding the keys to the account can transfer money from it.



One major obstacle to overcome is what, in Bitcoin terms, is called a “double-spend attack”: What happens if two transactions exist in the network that both want to empty an account, a so-called conflict?

The abstract answer to this is that you do not have to care. An order of the transactions will be selected for you, the transactions will be bundled into what is called a “block” and then they will be executed and distributed among all participating nodes. If two transactions contradict each other, the one that ends up being second will be rejected and not become part of the block.

These blocks form a linear sequence in time and that is where the word “blockchain” derives from. Blocks are added to the chain in rather regular intervals – for Ethereum this is roughly every 17 seconds.

As part of the “order selection mechanism” (which is called “mining”) it may happen that blocks are reverted from time to time, but only at the “tip” of the chain. The more blocks that are added on top, the less likely it is. So it might be that your transactions are reverted and even removed from the blockchain, but the longer you wait, the less likely it will be.



The Ethereum Virtual Machine


The Ethereum Virtual Machine or EVM is the runtime environment for smart contracts in Ethereum. It is not only sandboxed but actually completely isolated, which means that code running inside the EVM has no access to network, filesystem or other processes. Smart contracts even have limited access to other smart contracts.



There are two kinds of accounts in Ethereum which share the same address space: External accounts that are controlled by public-private key pairs (i.e. humans) and contract accounts which are controlled by the code stored together with the account.

The address of an external account is determined from the public key while the address of a contract is determined at the time the contract is created (it is derived from the creator address and the number of transactions sent from that address, the so-called “nonce”).

Regardless of whether or not the account stores code, the two types are treated equally by the EVM.

Every account has a persistent key-value store mapping 256-bit words to 256-bit words called storage.

Furthermore, every account has a balance in Ether (in “Wei” to be exact) which can be modified by sending transactions that include Ether.



A transaction is a message that is sent from one account to another account (which might be the same or the special zero-account, see below). It can include binary data (its payload) and Ether.

If the target account contains code, that code is executed and the payload is provided as input data.

If the target account is the zero-account (the account with the address 0), the transaction creates a new contract. As already mentioned, the address of that contract is not the zero address but an address derived from the sender and its number of transactions sent (the “nonce”). The payload of such a contract creation transaction is taken to be EVM bytecode and executed. The output of this execution is permanently stored as the code of the contract. This means that in order to create a contract, you do not send the actual code of the contract, but in fact code that returns that code when executed.


While a contract is being created, its code is still empty. Because of that, you should not call back into the contract under construction until its constructor has finished executing.



Upon creation, each transaction is charged with a certain amount of gas, whose purpose is to limit the amount of work that is needed to execute the transaction and to pay for this execution. While the EVM executes the transaction, the gas is gradually depleted according to specific rules.

The gas price is a value set by the creator of the transaction, who has to pay gas_price * gas up front from the sending account. If some gas is left after the execution, it is refunded in the same way.

If the gas is used up at any point (i.e. it is negative), an out-of-gas exception is triggered, which reverts all modifications made to the state in the current call frame.


Storage, Memory and the Stack

Each account has a persistent memory area which is called storage. Storage is a key-value store that maps 256-bit words to 256-bit words. It is not possible to enumerate storage from within a contract and it is comparatively costly to read and even more so, to modify storage. A contract can neither read nor write to any storage apart from its own.

The second memory area is called memory, of which a contract obtains a freshly cleared instance for each message call. Memory is linear and can be addressed at byte level, but reads are limited to a width of 256 bits, while writes can be either 8 bits or 256 bits wide. Memory is expanded by a word (256-bit), when accessing (either reading or writing) a previously untouched memory word (ie. any offset within a word). At the time of expansion, the cost in gas must be paid. Memory is more costly the larger it grows (it scales quadratically).

The EVM is not a register machine but a stack machine, so all computations are performed on an area called the stack. It has a maximum size of 1024 elements and contains words of 256 bits. Access to the stack is limited to the top end in the following way: It is possible to copy one of the topmost 16 elements to the top of the stack or swap the topmost element with one of the 16 elements below it. All other operations take the topmost two (or one, or more, depending on the operation) elements from the stack and push the result onto the stack. Of course it is possible to move stack elements to storage or memory, but it is not possible to just access arbitrary elements deeper in the stack without first removing the top of the stack.


Instruction Set

The instruction set of the EVM is kept minimal in order to avoid incorrect implementations which could cause consensus problems. All instructions operate on the basic data type, 256-bit words. The usual arithmetic, bit, logical and comparison operations are present. Conditional and unconditional jumps are possible. Furthermore, contracts can access relevant properties of the current block like its number and timestamp.


Message Calls

Contracts can call other contracts or send Ether to non-contract accounts by the means of message calls. Message calls are similar to transactions, in that they have a source, a target, data payload, Ether, gas and return data. In fact, every transaction consists of a top-level message call which in turn can create further message calls.

A contract can decide how much of its remaining gas should be sent with the inner message call and how much it wants to retain. If an out-of-gas exception happens in the inner call (or any other exception), this will be signalled by an error value put onto the stack. In this case, only the gas sent together with the call is used up. In Solidity, the calling contract causes a manual exception by default in such situations, so that exceptions “bubble up” the call stack.

As already said, the called contract (which can be the same as the caller) will receive a freshly cleared instance of memory and has access to the call payload – which will be provided in a separate area called the calldata. After it has finished execution, it can return data which will be stored at a location in the caller’s memory preallocated by the caller.

Calls are limited to a depth of 1024, which means that for more complex operations, loops should be preferred over recursive calls.


Delegatecall / Callcode and Libraries

There exists a special variant of a message call, named delegatecall which is identical to a message call apart from the fact that the code at the target address is executed in the context of the calling contract and msg.sender and msg.value do not change their values.

This means that a contract can dynamically load code from a different address at runtime. Storage, current address and balance still refer to the calling contract, only the code is taken from the called address.

This makes it possible to implement the “library” feature in Solidity: Reusable library code that can be applied to a contract’s storage, e.g. in order to implement a complex data structure.



It is possible to store data in a specially indexed data structure that maps all the way up to the block level. This feature called logs is used by Solidity in order to implement events. Contracts cannot access log data after it has been created, but they can be efficiently accessed from outside the blockchain. Since some part of the log data is stored in bloom filters, it is possible to search for this data in an efficient and cryptographically secure way, so network peers that do not download the whole blockchain (“light clients”) can still find these logs.



Contracts can even create other contracts using a special opcode (i.e. they do not simply call the zero address). The only difference between these create calls and normal message calls is that the payload data is executed and the result stored as code and the caller / creator receives the address of the new contract on the stack.



The only possibility that code is removed from the blockchain is when a contract at that address performs the selfdestruct operation. The remaining Ether stored at that address is sent to a designated target and then the storage and code is removed from the state.


Related: Introduction to Ethereum and Smart Contracts

Creating your own Tokens / Deploying your own Smart Contract

Creating your own smart contract is easier than you may think.  If you’re already trending down this path or are researching deploying your own token or smart contract, here are some great resources for you to check out:



FreeCodeCamp: How to write and deploy your first smart contract

Basic info

Before we delve further into the guide, it is important to understand two important concepts.

The first thing that we need to understand is what the Ethereum Virtual Machine (EVM) is. Its sole purpose is to act as a runtime environment for smart contracts based on Ethereum. Think of it as a global super computer that runs all the smart contracts. As the name suggests, the EVM is virtual and not a physical machine. You can read more about the EVM here.

The second concept we need to understand is what is gasIn the EVM, gas is a unit of measurement used to assign a fee to each transaction with a smart contract. Each computation that happens in the EVM requires gas. The more complex and tedious it is, the more gas is needed to execute the smart contract.

Every transaction specifies the gas price it is willing to pay in ether for each unit of gas, allowing the market to decide the relationship between the price of ether and the cost of computing operations (as measured in gas). It’s the combination of the two, total gas used multiplied by gas price paid, that results in the total fee paid by a transaction.

Fee for transaction = Total gas used * gas price;

Read more about gas here.

Now that you have basic knowledge about what a smart contract is and how the smart contract runs, we can go straight into how we are going to make our very own smart contract!

Setting up

We’re going to use a tool for this: Pragma. It’s an easy-to-use platform for creating and deploying smart contracts. Sign up here and go the editor:

Read more…



Policy Review: Standard form contracts and a smart contract future

With a budding market of widespread smart contract implementation on the horizon, there is much conversation about how to regulate this new technology. Discourse on standard form contracts (SFCs) and how they have been adopted in a digital environment is useful toward predicting how smart contracts might be interpreted. This essay provides a critical review of the discourse surrounding digitised SFCs and applies it to issues in smart contract regulation. An exploration of the literature surrounding specific instances SFCs finds that it lacks a close examination of the textual and documentary aspects of SFCs, which are particularly important in a digital environment as a shift in medium prompts a different procedural process. Instead, common perspectives are either based on outdated notions of paper versions of these contracts or on ideologies of industry and business that do not sufficiently address the needs of consumers/users in the digital age. Most importantly, noting the failure of contract law to address the inequities of SFCs in this environment can help prevent them from being codified further with smart contracts.

Examples of Smart Contracts for Token Sales (ICOs)

Smart Contacts: A Glimpse Into Our Financial Future?

Smart contacts are an encrypted program stored on a blockchain, that automatically operate if the terms and conditions are met. They are simply software programs, meaning that they execute whatever it is that their programmer demands of them too.

Bottom line is, that through a binary system, smart contacts can negotiate the terms of the agreement and, once verified, execute them. All this happens without an intermediatory or a use of central organisation’s approval.

Nick Szabo, a computer scientist, first had the idea to create smart contacts back in 1993. Nick wrote:


“The general objectives of smart contract design are to satisfy common contractual conditions (such as payment terms, liens, confidentiality, and even enforcement), minimize exceptions both malicious and accidental, and minimize the need for trusted intermediaries. Related economic goals include lowering fraud loss, arbitration and enforcement costs, and other transaction costs. Some technologies that exist today can be considered as crude smart contracts, for example, POS terminals and (credit) cards, EDI, and agoric allocation of public network bandwidth.”


And even though smart contacts became possible with the formation of Bitcoin back in 2009, it was Ethereum that made possible to execute and store smart contacts within its distributed ledger. As a matter of fact, Ethereum’s platform was specially designed for executing smart contacts. In a lot of ways, smart contacts are fundamental to all blockchain technology, and they almost totally eliminated the need for lawyers in this field of business.

But, what should be noted is that the all the data is stored, in a decentralized distributive manner, therefore no one is in control of the money until the terms are completed.


How to use Smart Contracts

In a lot of ways, smart contracts are similar to the ones you need to sign in order to buy a car, for example. Except these contracts are now automated.

In the words of Nick Szabo :


“We can extend the concept of smart contracts to property. A smart property might be created by embedding smart contracts in physical objects. These embedded protocols would automatically give control of the keys for operating the property to the agent who rightfully owns that property, based on the terms of the contract. For example, a car might be rendered inoperable unless the proper challenge-response protocol is completed with its rightful owner, preventing theft. If a loan was taken out to buy that car, and the owner failed to make payments, the smart contract could automatically invoke alien, which returns control of the car keys to the bank. This smart lien might be much cheaper and more effective than a repo man. Also needed is a protocol to probably remove the lien when the loan has been paid off, as well as hardship and operational exceptions. For example, it would be rude to revoke operation of the car while it’s doing 75 down the freeway.”


Where smart contacts can be used

Since the last presidential elections, the voting system raised a lot of suspicion. Was it rigged or not? With smart contacts, the integrity would never be questioned, as it would be impossible to fix the elections.

If the votes were kept on a blockchain, the automatization of the smart contacts would make the voting a much simpler process, and it would be fully conducted online.



The purchase of cars would be completely automated, and there would be no need for an intermediatory. And since their services cost extra, with smart contacts, this would be completely avoided.


Real Estate

If you were to rent out an apartment for a few days, for example, via Airbnb, this version of it would be on a blockchain and you would, of course, pay in a certain cryptocurrency. After you pay, you would get a digital receipt, which can be traced by smart contacts whether you actually received it or not, and if you haven’t, the smart contacts automatically give you a refund.



In healthcare, smart contacts can make the process of authentication and authorization way easier. It can also make getting healthcare supplies way faster and efficient, as well as provide a better protection for patient data, etc…



This is where the smart contacts can come ’’most in handy’’, as their purpose is to basically eliminate banks, in a way. As there would be no more lines, no more waiting, plus there would be almost no room for error since everything would be automated, and even more secure. But the biggest advantage would definitely be the money, as you could save a lot this way since there would be no fees.


Legal Issues

As we already mentioned, the need for intermediatory would be almost unnecessary, since smart contacts would automate any steps necessary, and ensure they’re being met. This would also save a lot of money since there would be no need for lawyers, notaries, and contract lawyers…



As there are upsides, there are some downsides as well. Smart contacts can get very complicated, as they usually take multiple smart contacts in order to get a certain job done. This could prove challenging, especially as this technology is still in its early stages.

Then, this technology is best compatible with IoT (the “Internet of Things” is the network of physical devices like home appliances that are embedded with software and sensors that enable them to connect and exchange data over the Internet). Without it, the smart contacts can’t communicate with the actual world. They need a certain real object that tells them when a job is done.

But the biggest problem is that smart contacts are, after all, just programs. And programs can malfunction.

And its exactly this kind of issues, that makes everyone in the business world unsure of accepting smart contacts. But there are smart contacts’ advocates that certainly believe that these issues can and will be resolved and that we are most definitely glimpsing into our financing future.


Why smart contacts represent our future:

  1. Better customer service. Without the need for intermediaries to create trust, businesses can engage directly with customers.
  2. Employee departures don’t affect its functionality. Decentralization means there is no need to worry about the loss of data. The blockchain and its smart contracts will continue to function regardless.
  3. Cost reduction. Eliminating the middleman means fewer fees. How much does your lawyer charge again?
  4. Record keeping. Since smart contracts are implemented through blockchains, it means all data is efficiently chronologically stored and can be easily accessed. Your documents are duplicated many times over in every node within the network.
  5. Faster speed. Without the extra steps needed when incorporating middlemen in traditional contracts, tasks automated by smart contracts happen much faster.

Creating a Token? Factors to Consider

In the times when all the internet is crazed with the cryptocurrency investing, mining and trading, you may find it a bit hard to break through and start your own ICO project. We compiled an easy to grasp step-by-step guide to creating your first ICO project. Follow this detailed beginners guide to ICO in order to discover how to plan your project, create an optimal website, write your whitepaper and create an Ethereum based token.


An ICO is very similar to the IPO or initial public offering. ICO or an initial coin offering is a way to crowdfund and seed fund the issuance of a new cryptocurrency token. These tokens are issued mainly through Ethereum’s blockchain, serve for raising a startup capital or funding a project. The project then uses these coins to sell and buy Bitcoin in return.

ICOs are a burning trend in the financial industries but finding its purpose among other industries as well. Many traditional economists and financial analysts regard the  ICOs as a form of unregulated fundraising,  but some others consider them as disruptive models for venture funding. The raising question of whether or not an ICO token should be considered a security is the subject of international debates among legislators worldwide.


At this time, there are more than 1,500 coins available for trading on different cryptocurrency exchanges. This does not mean that all of them have new blockchains. In fact, the majority is established by using other already functional blockchains, like Ethereum’s blockchain. Most of the ICO crowd sales today create ERC-20 compliant tokens that run on Ethereum’s blockchain.

This beginners guide to ICO will walk you through the process of creating and offering a new crypto token.

Which startups are suitable for an ICO?

Many believe that ICO can serve as an alternative way of raising capital than IPO. In that sense, ICO could work for any project, as it enables the founders to skip long, exhausting process of crowdfunding through traditional ways.


To boost the coin’s popularity among investors, it needs to be an integral part of your project’s architecture. Interested investors need to have a clear and transparent insight into your plan and vision on how your ICO coin will raise its value. Investors are puzzled with several questions regarding your project, that ask for simple answers and solutions:


– How your ICO token will affect your project?
– How will your project benefit from the distributed ledger technology?
– What are your startup’s business vision and goals?
– What would attract investors to buy your ICO token?
– Who are your competitors?


In order to brand your startup as a legitimate and safe investment, the message you send needs to be clear and authentic. The growing number of new ICOs coming out daily has brought a healthy dose of skepticism to the experienced investors, and in order to distinguish your startup from the dozen, your ICO token should have easily identifiable goals and offering a solution to a specific problem.

In order for your ICO crowdsale to be successful, you need a capable team of creative people: blockchain developers, marketing specialists, translators, graphic designers, content creators, social media managers, etc. These means that the team will be working hard to promote the ICO crowdsale, even before its actual start, so consequently, there will be at least 6 months of the billing cycles.

These are the necessary steps to follow before jumping on the second phase of tasks.


Official website of your ICO

Just like every business nowadays, an ICO project needs a proper website presentation as an important way of global promotion. In other words, a well designed, professional website is a key ingredient that makes most of the potential investors buy the ICOss tokens. It’s crucial to establish an attractive website with all the keys information easily presented for the potential investors to see. Following seven components are pivotal for a successful ICO project website.


1- Website in several Languages

An ICO website is your global presence, therefore it should be translated into several languages. Most investors come from Russian, Chinese, French, and Spanish speaking countries, so that would be a good start.


2- The attractive and informative homepage

One of the best practices for an ICO project website is to have a winning landing page. On most ICO crowdfunding platforms, ICO websites tend to show most of the relevant information about the project on their landing page. Before the start of a crowdsale, there is usually a countdown timer on the landing page that emphasize the beginning. Most of the time, the landing page also suggests an email subscription system in order to keep potential investors up-to-date with the news and important updates. Some companies decide to go a step further and after the launch of a crowdsale, display the total raised amount of money to the present date.


3- General info about the project

The website needs to include detailed and easily comprehensible information about business goals, tech innovations, roadmap, and other relevant data. This is a necessary section as it tells the investor all the important points on why they should invest in this particular project. To make this section more attractive, use graphics, statistics, figures, etc. as it presents dry information in an appealing way.


4- Introduce your ICO token

Then we come to the section where you introduce your ICO token. This part is very important and must include the following:

The token’s name and ticker symbol.
The use cases of the token.
The token’s price and potentially offered bonuses
The number of tokens offered for sale during the ICO, as well as the total amount of tokens.
The start and end dates of the ICO sale.
The percentage of tokens held by the project owners.
The hard cap of the startup.
Bounty campaigns.


5- Documents

The ICO’s website needs to include a section with all the important documents regarding the project can be easily seen, like a whitepaper, roadmap, legal paperwork, etc. The access to these documents should be easy and promoted on the landing page. Security ICO tokens are treated as forms of securities that abide by the US Federal Securities’ laws, as per Section 21(a) of the SEC’s 1934 Securities Exchange Act. If you are aiming for American investors, your ICO’s website should also present the ICO’s SEC registration paperwork.


6- Social Media business profile

There should a section of a website that contains and promote your project’s social media business profiles. A must-have for an  ICO platform is a Telegram group to be able to easily communicate with investors globally and timely respond to their queries. Leading ICO projects also use Discord and Slack. Links to all of the ICO’s social media profiles and groups should be easy to spot on the project’s website.


7- The team behind the ICO

The project’s team members should be properly introduced and presented on the ICO’s website. You should include the name, photo, and role of every team member, along with their expertise and LinkedIn profile.


The ICO’s whitepaper

Whitepapers are essential parts of ICO landscape. An ICO whitepaper details out the relevant technical details and goals of the project. Whitepapers are used to target cryptocurrency experts, blockchain developers, and other professionals that thoroughly understand the technical background of your ICO project. A whitepaper is not a marketing tool, it’s more of an educational manifest that targets highly expertized people. It’s fairly important to first map out the project and then write a thorough whitepaper. A good and informative whitepaper should consist of:

The project’s features, goals, and roadmap.
The solution to a problem that project offers.

Project’s target audience, and target market.
The project’s team members and advisors.
The project’s basic financials and the economics of the ICO token.

Follow these general guidelines when writing a whitepaper:

  • Clearly, state the problem that your ICO’s project directly solves. Illustrate the problem and its solution with necessary charts, infographics, and other details.
  • Structure the whitepaper in a nicely organized and neat table of content, that will make any desired information easy to find within seconds. While it should be approachable, it should be kept professional, without too many technical words, jargon, and catchy marketing phrases. As an educational document, whitepapers sole purpose is to inform and not to promote and sell, so restrain from using marketing and sales writing style.
  • Research your competitors thoroughly, and read the whitepapers of the projects similar to yours. While you should avoid copying at all costs, you can use them as examples and maybe take a model outline from them.
  • Typically, a professional ICO whitepaper is between 15-20 pages. Make sure that when a potential investor reads entirely your whitepaper, he can understand every segment of your project. Furthermore, focus on how the token will work, how users are supposed to benefit from the offered service and what the prospects of the project are.

Using Ethereum’s blockchain to issue your ICO

Next steps illustrate how to issue an ERC20 token to use for your ICO project.

What you need:

An Ethereum address – Let’s say it’s MyEtherWallet.
Ether – You will need this to pay for the execution of smart contracts. As your token will be issued first on a test network called “Ropsten network”, you won’t need real ether.
A code editor, such as Notepad++ or Atom.
A solidity smart contract.


Ethereum address

This time, we will issue an ERC20 token via a test network, so that you don’t have to spend real ether. We will use the Ropsten Test Network.

1- Go to MyEtherWallet’s website. From the drop-down list on the top right corner of the homepage, select Network Ropsten (myetherapi.com) as shown in the picture below.

2- Login to your wallet via your private key, mnemonic phrase, etc. If you don’t have a wallet yet, please create one at MyEtherWallet, and choose “private key” as a preferred login method. Save your private key in a safe place. If you lose your private key, you won’t be able to access your wallet anymore.

3- Click “view wallet info” on the top menu to see your wallet’s address. You will be asked to enter your private key again in order to confirm your identity and unlock your wallet.


Acquiring Ropsten Ether

Anyone can get a Ropsten ether, which is not a real ether, from this source: https://faucet.bitfwd.xyz/

Enter your Ropsten address at the above URL and the smart contract of the faucet will send you a Ropsten ether.


Smart Contract

You can use the smart contract created by BokkyPooBah. Then, edit this smart contract to create a token.


Editing the smart contract:

1- Open the smart contract in your code editor, e.g. Notepad++.

2- Line 4 includes the title of your smart contract. Change (0Fucks) to the title you will use for your smart contract.

3- Change Line 6 and add your Ropsten address which you created in MyEtherWallet.

4- Change Line 7 to add your token’s symbol, instead of (0FUCKS).

5- Change Line 8 to add the name of your token, instead of (0 Fucks Token).

6- Change Line 9 to the required total supply of tokens (100,000,000 by default).

7- Modify Line 102 from “FucksToken” to (YourTokenName) and do the same thing in Line 115.

8- Modify Line 116 and add the symbol name you chose earlier in the comments and make the same changes on Line 117.

9- Change Line 120 to add the address you used earlier. This address is the one you created via MyEtherWallet. Repeat this for Line 121.

10- For Lines 118 and 119, do not modify. It is crucial to understand that the standard and maximum option is for tokens to have 18 decimals. This means that a token is split into 18 parts. For instance, if you want to create 100 tokens, within the total supply section, you have to enter 100 followed by the number of decimals you will choose. If you want to produce 100 tokens, you will set the total supply as 100,000,000,000,000,000,000.

11- Go to http://remix.ethereum.org/ and in the browser/ballot.sol paste the code that we have just edited. Make sure that no red color appears. Any red color shows that there is something wrong with the code, and you need to recheck step by step.

12- Now press the “start to compile” button and select the name of the token you are creating from the drop-down menu below the button. The name of your token should automatically be one of the choices appearing in the drop-down menu.

13- A special window will appear after you press the “start to compile” button, as shown on the below screenshot. Under “Bytecode”, click the “copy to clipboard” button. Copy the “object” ByteCode and add Ox in the beginning, so you would have “OxByteCode”.

14- Now, we will deploy the contract that we’ve just created on MyEtherWallet. Go to the “Contracts” tab and click the “Deploy Contract” button.

15- Paste the “ByteCode” you compiled into the ByteCode box. The gas limit will change automatically.

16- After accessing your wallet again via your private key, press “Sign transaction”, then “Deploy Transaction”. Check the Ropsten test blockchain via https://ropsten.etherscan.io/, in order to confirm that the transaction has been executed.

17- Register the smart contract you created for your token. From MyEtherWallet’s window, go to the “Contract Code” tab and click “Verify and Publish”. You will be prompted by a window such as the one in the below screenshot. Fill in all the fields using the parameters you used in creating your token. Copy the whole code from the code editor, not the Bytecode, and paste it in the marked field. Add the code of the compiler you used via Remix’s page.

If you are greeted with a “Success” page, that means that the process was successful. However, if you get a red message, you have to recheck the whole process. Firstly, make sure to check that you have copy/pasted the entire code correctly, then check if you’ve set all the parameters correctly, before starting all over again.

18- You can check if the token works by going back to https://ropsten.etherscan.io/ and checking your MyEtherWallet address, not the address of the smart contract. If you can find all of your tokens there, then you have done it. Congratulations on successfully creating your Ethereum token!

Note: In order to start your ICO, you will need to create a crowdsale contract.

To sum up:

We created this brief guide hoping to help you understand the first steps towards creating an ICO crowdsale. In this beginner’s guide to ICO, we walked you through the crucial process of planning the ICO project, creating an optimal website and landing page, creating a winning whitepaper, and creating your Ethereum-based token. An ICO’s main purpose is to simply help anyone with limited resources to raise capital and fund a particular project by issuing cryptocurrency tokens. These tokens enable international investors to fund your project if they find it appealing by simply purchasing the tokens.

Hopefully, this simple guide will help you get your feet in the new ICO craze, and get the most out of it, to help your projects and ideas.


But, if you are looking for an easier way we have a very simple solution HERE.

Best Wallets for ICO Tokens

If you were not hit by the cryptocurrency craze of the 21st century, and don’t want to break in the crypto business, you are the minority. If you are like the most, you are intrigued by the hype. If you belong to the latter, please keep reading. We will show you how to avoid making beginners’ mistakes and how to store your coins in a safes crypto wallets available.

Hackers mostly target new users, as they tend to make insecure decisions, and often wrong choices. Before you join in on the hype, wanting your own piece of the crypto cake, make sure to read our list of the safest crypto wallets for your ICO tokens. Otherwise, you may be quick to find out your funds draining from the wallet, even before they slipped in as you’ve planned.

Let’s see what’s this all about.


How you’d define a crypto wallet?

In short, it’s a special software that’s used to store you cryptocurrency coins online. A more detailed answer would be that it’s a software that accumulates public and private keys, coming in pairs, and enabling the owner to manage and monitor his cryptocurrency balance through the blockchain technology. Crypto wallet is an essential tool in order to be in possession of any crypto coin.


How does a crypto wallet work?

The crypto wallet doesn’t really store your coins, so it’s hardly comparable to the actual “physical” wallet. In fact, the coins are not stored anywhere. The crypto wallet works on a principle that it records the transactions on the blockchain. Its main purpose is to store your private key — a code that should only be known to you and your wallet — which verifies the ownership of a public key — a code tied to a certain amount of coins that you own “in your wallet”. A good analogy would be that a private key is compared with a PIN code to access your bank account and the public key is your public bank account number.

So what exactly happens when you transfer cryptocurrency? You’re transferring a value in the form of a transaction, not the exact number of coins. In this process, the recipient receives the ownership of this value, displayed in a number of tokens. In order to receive and access the coins that you’ve sent, recipient’s private key must match the public address that you sent the crypto coins too. The coins don’t really get exchanged, but only the owner of the certain code that stands for a certain transaction.

It’s essential to keep your private key secured so that only you know what it is. The private keys give you a total control over the funds related to the matching public keys. If someone else gets in possession of your private keys, they can move your cryptocurrency coins as they wish. The main struggle if that happens? The transactions are irreversible, and the loss is permanent. In order to further minimize the possibility for such situations, it is recommended to make a backup of your private keys. The worst case scenario is to just lose or forget your private keys and therefore lose all the funds associated with your wallet, without any chance for a return.


Should you use exchange wallets when participating in a cryptocurrency ICO?

It’s an utterly bad idea, as you don’t get to control an exchange wallet. The rule number one for the cryptocurrency beginners: crypto wallets are not the same as the bank accounts. While they do keep the money as real banks do, you don’t get to move your funds whenever you like. To have more control over the funds and transfer them, you need to get an exchange wallet’s permission, which is both risky and inconvenient.

On the contrary, if you own a private crypto wallet, you are the one and the only person holding the private key, and having the access to the funds, as well as full control over them. The exchange wallet never belongs to you, it is only generated on your behalf through a platform, meaning that you do not own the private key to it, nor the available funds. If you’re serious about participating in the ICO craze, get yourself a real private crypto wallet. It’s an investment. 

Let’s put it simply: if you use an exchange wallet when participating in an ICO, you won’t get the coins. In most cases, a cryptocurrency ICO smart contract deliver all tokens back to the address that the investment came from within minutes. Furthermore, when you transfer coins from an exchange wallet, the tokens that are sent back, don’t really belong to you. The full control belongs to the owner of the exchange. There are, of course, cases when the exchanges eventually returned the tokens to the customer, but it is important to know that they are not legally obligated to do so. It’s an unacceptable risk to take for a serious investor!


How to choose a private crypto wallet?

Bitcoin is without competition in terms of popularity, but the chances are that you are going to buy more cryptocurrency coins, once you keep your toes in. Everything considered it’s better to set up a multi-currency crypto wallet that will allow you to manage several currencies from a single place, offering more convenient experience. Make sure which currencies are accepted by multiple wallets in order to ensure a positive experience, and save yourself a lot of time later on.


It’s important to know how to use the wallet, in order to choose the right one. Wonder about these points, when choosing:


  • Are you looking for a wallet to hold and keep your digital assets or to buy and spend them accordingly?
  • How often will you need the access to the wallet and do you prefer using it only from home or also on the move?
  • Which specific features do you consider important for a wallet (privacy, cold storage, etc.)?
  • Do you want to use a single currency or you plan on acquiring more currencies in the future?

Answering these questions and thinking about the answers will help you choose the private crypto wallet that suits your needs.


The different types of cryptocurrency wallets

There are many different wallets serving a different purpose (that’s why there’s need for an entire guide to crypto wallets). Moreover, there are five different types of crypto wallets: online, desktop, mobile, hardware and paper.


Online Wallet. These wallets are perfect for users who need to have constant access to the wallet, regardless of the location. As they operate on the cloud, online wallets are easily accessible from anywhere. However, the accessibility makes them more prone to be hacked and requires additional layers of security.


Mobile Wallet. Mobile wallet operates like a simple app that you download on your cell phone. It’s very convenient for the people who’d use it regularly, to pay in stores, etc. They are considered much safer than the online wallets.


Desktop Wallet. A desktop wallet is a program that you download and install on your computer, and the access is limited to that one specific device. It’s safer than online wallets, but if your computer is infected with malware, you can lose your funds just like that.


Hardware Wallet. It’s one of the safest options for storing cryptocurrency tokens, as it’s kept offline most of the time. Hardware wallets are different in terms that they save user’s private keys on a device, typically a USB drive. The use is simple as well, plug it in an internet-enabled device, authorize it personally and you are all set to send or receive coins immediately.


Paper Wallet. The safest option from the above. A paper wallet is a physical copy of your public and private keys, and could even refer to a printed sheet of paper.


Top 8 safest crypto wallets for storing your ICO tokens

We compiled a list of 8 most popular and safest wallets to use for keeping your ICO tokens.



Trezor is a hardware wallet, offering a safe alternative to storing your crypto tokens. Its notable features include OLED display and cross-platform support. It can store several currencies, including BTC, DASH, LTC, etc.


Ledger Nano S

Ledger Nano S is another hardware wallet, available for storing the leading cryptocurrencies, including BTC, ETH, LTC, etc. Its most prominent features include backups and advanced passphrase.



KeepKey is a hardware wallet that secures bitcoin, litecoin, ethereum, dogecoin, namecoin, and dash.  It includes a USB connection as part of its security features.



Exodus is a multi-asset wallet, very practical for the rapid conversion between various cryptocurrencies and altcoins due to its built-in ShapeShift. It allows you to save your private keys in one application with a customizable user interface.


Fast Invest Wallet

Fast Invest is a quickly growing consumer loans investment platform founded in 2015. In 2018, the company is starting the P2P crypto loans and crypto trading markets and will launch a secure multi-currency crypto wallet for Bitcoin, Ethereum, Ripple, and Fast Invest token (FIT) holdings.



Mycelium is a mobile-based multi-asset cryptocurrency wallet for Android. It’s been tested by hundreds of thousands of users, with mainly positive reviews and recommendations. Additionally, Mycelium offers hardware wallets and integrations with various third-party service providers.



Jaxx is a digital asset wallet that can be used to keep, transfer, and trade Bitcoin, Ethereum, Dash, Augur, Civic, Bancor, Litecoin, Zcash, Salt, Qtum, Blockchain Capital, and a dozen of other digital assets. It consists of simple yet powerful features that give users complete control over their private keys.



MyEtherWallet is very popular among ICO investors as it can be used to sell, store and buy ERC20 tokens gained through the token sales. It is a popular solution because it is an online wallet, but in addition, provides offline hardware wallet support.

Distributing your ICO Tokens to Token Buyers

icodashboard knowledge base
ico knowledge base - token knowledge base

The Ultimate ICO Knowledge Base

ico knowledge base - token knowledge base

Latest News