Blockchain, Cryptocurrency & Smart Contracts
+34 518 880131


Official SigloTech Blog

  • Welcome, Guest!

By browsing this website you are agreeing to our use of cookies.

How to Design a Winning ICO Landing Page

If you are reading this post, most likely you already know what an ICO is. Moreover, you are probably planning to do one. Designing a highly efficient one-pager for your ICO might be tricky. On the one hand, ICOs have not been around for long. So, there is no hard evidence on what works and what not. On the other hand, there is not one-size fits all solution.

When people invest as a part of an ICO, in majority of cases they invest in non-existing products and projects. So how do people decide which ICO can be good and which can have potential problems? Larger investors normally dig into the Whitepaper. However, we do not believe that majority of smaller investors and public, ever read the whitepaper. Often, the landing page is the only criteria for small investors to like or dislike an ICO. Of course if you do not have a great idea and a strong team, no web page will save you from failure but with a poor landing page your ICO is certainly doomed for failure.

Landing pages are nothing new. Online marketers have been creating them for over a decade now. Can a regular landing page make it a good ICO page? We do not think so. Keep on reading to learn why this is so.

At SigloTech we have read dozens of whitepapers and analyzed even more ICO landing pages and single-page websites. Our analysis shows that there is a certain structure that works better for ICO landing pages. There is a strong evidence that a good ICO landing page must have the following structure.

Project Mission

It is absolutely required that the ICO landing page contains the project mission. Normally it should be a part of the header. Placing the mission statement prominently is very important because it gives your visitors an immediate sense of their future investment. For many investors, especially for smaller ones, the mission statement is the only signal to buy your token or miss your ICO.



The counter serves two purposes. Before the ICO starts, it shows how much time is left before start. During the process, it shows how much time is left before the ICO is closed.

Source: EXMO

Social Media Links

All good ICOs maintain as many social media channels as possible. At a minimum you need to have a Twitter page and a Telegram channel. In the crypto space these are a must. We also recommend that you maintain a YouTube channel. Less important but nevertheless useful is to have LinkedIn and Facebook pages.

CTA Section

Never underestimate the power of a pre-sale. The CTA section is your attempt to get investors whitelist for the pre-sale.


Whitepaper, yellowpaper, deck – the more you have the better. But having a whitepaper is must. This section should link to whatever content is available for your ICO.

Project Details

If your visitor scrolls down to this section congratulations. It means that the most important first 20 seconds have been in your favor. Now as you have grabbed your visitor’s attention, it is time to further foster temptation by providing project details. This is especially important for those visitors who have not heard about your project before.

Token Sale Terms

This section includes pricing, details about total supply, how much will be retained by the project, etc. This section must provide a detailed instruction on how the tokens can be purchased. This is more important than you may think. You will not believe how much money is lost because users send funds to the wrong addresses or are not able to figure out how to pay for tokens.

Source: OneLedger


The timeline section displays events related to your ICO in chronological order. The timeline should cover important milestones of your ICO. Normally the timeline also contains the roadmap for the project and its future development.



We cannot overemphasize important of this section. The team is a key element in every ICO. The team includes both the founders the advisors of the project. It is very important that you use professional headshots and photos. Whenever possible include links to LinkedIn profiles. It is a good signal that your team members are professionals.

Source: EXMO


This section should cover all legal issues related to your project and business. You need to consult your legal advisor to prepare legal material.

Partners and Affiliates

No project can exist in an isolation. Successful projects and businesses require reliable partners. Include as many partners as possible. Show your investors who have been supporting your project. It does not matter how large or famous your partners are. What matters is that they are reliable and contribute to success of your project. This section also includes companies or individuals somehow affiliated with your project.


Success of your ICO will largely depend on the media coverage that you get. Include links to publications and articles on various websites. Make sure to include logos of relevant sources.

News Section

Communication is a key in every crowd-sourced project. Make sure to include links to news articles and posts.


Footers are standard. Normally a footer includes a copyright notice, disclaimers, and links to privacy policy section. Some jurisdictions require that you display a company registration number on your webpage. Footer is a good place to put such information.



We hope this post gives you a clear idea about structuring your ICO landing page. It is very important that you keep close to this structure and retain the order of sections as described above.
At the same time, you should follow recommendations that apply to every webpage – do not use too many colors, use professional fonts, use high quality photos and pictures, check spelling and use good copy. Make sure your webpage loads fast and works across desktop, tablets and mobile devices.

While creating a successful ICO landing page is no rocket science, often it is better to let professionals handle that task so that you can concentrate on the core of your business. Get in touch with us to create your ICO landing page without breaking the bank.

Tags: ico tokens

Difference between ERC20, ERC721, ERC23 and ERC223 Tokens

What is a Token?

In the previous post we mentioned that the primary difference between Ethereum and any other cryptocurrency is that Ethereum is not just a currency, it’s a global computing engine. Ethereum allows creation of distributed applications where smart contracts play a central role. Another important concept within the realms of distributed apps is a token. Tokens can be thought of as a currency within an application built on top of Ethereum. Normally when you hear about an ICO, it’s the tokens that are sold during an ICO.

Differences between Tokens

You have probably heard about ERC20. It is a token specification for Ethereum. ERC20 is the most popular token type. However, it’s not the only one. There is less known ERC721, ERC23 and ERC223 specifications. We will highlight some key differences between these specifications.

First thing that you should keep in mind is that there is a tight connection between a smart contract and the token. When we speak of different token specifications like ERC20 or ERC21, it means that the smart contract satisfies certain requirements, i.e. it follows the specification defined for each token type. It is also possible to create a token that partly implements the specification. A good example is The GNT Golem Network Token, which is only partially ERC20-compliant.

ERC20 Tokens

ERC20 is the most popular token specification. In order for a smart contract to satisfy ERC20 specification, it must define such functions as total supply, checking of account balance and transfer of token. A smart contract may provide much more functionality (and many do) however as long as it implements the basic functions required by ERC20 standard, it becomes ERC20 compatible.

ERC23 Tokens

ERC20 tokens sometimes have problems like lost Ethereum. ERC23 and ERC223 are supposed to address the issues found in ERC20 tokens. ERC23 and ERC223 are backwards compatible. It means that any wallet that supports ERC20 token can be used with ERC23 and ERC223 tokens.


If ERC23 and ERC223 try to improve ERC20 token, ERC721 token is a very different beast. ERC721 tokens non-fungible tokens. In economics, fungibility is the property of a good or a commodity whose individual units are essentially interchangeable. For example, bank notes (and thus money) are fungible. All $20 bank notes are equal and can be used for payment. Moreover, one $20 bank note is equal to two $10 bank notes. The same goes for precious metals. An ounce of gold is an ounce of gold.

How can a non-fungible token be useful? One usage is to create digital collectible items on the Blockchain. A notable use of ERC721 tokens is a Blockchain-based game CryptoKitties. In CryptoKitties players can buy, sell, trade, and breed digital cats. Without ERC721 tokens this game would not have been possible. ERC20 tokens are simply not suitable for this task. While ERC721 tokens are tradable, they are non-fungible. In other words, one ERC721 token cannot replace another.

ERC721 tokens are ERC20 compatible and thus define all functions defined by ERC20 token standard. Additionally, ERC721 tokens special ownership functions that make them so special. Other notable applications using the standard are CryptoCelebrities and EtherTulips. It is expected that more and more applications will be launched based on ERC721 tokens.

Tags: erc20 erc223 erc23 erc721 blockchain cryptocurrencies ethereum tokens

TickTick – The Best Cross-Platform ToDo App

Successful people come from all walks of life. Singers, athletes, writers, scientists, entrepreneurs – all successful people share one thing in common – they know how to get things done. Now take an average person. Life of an average person is chaos in comparison to those of successful people. Time is the most expensive resource and unless you know how to manage it well, you wont be able to manage anything else.

Successful people admit that they use some sort of a system to bring order into their lives. It’s not important how simple or complex the system is. It’s very individual. What works for one, may not for another. Though, the key is to implement some sort of time management system. It could be as simple as a notebook where you keep your task lists or it could be as complex as special computer software.

One of the most efficient systems for managing time and tasks is a so called Getting Things Done system or GTD for short. You can follow the GTD system with a simple notebook and pen. Or you can get more high-tech and use an app.

I we've been using various software-based systems for task management. We have tried literally dozens of different applications both for mobile and desktop. Practically always there was something missing and the paper and pen based system always outperformed the digital counterpart.

Recently we've discovered TickTick. TickTick is a cross-platform task management app. TickTick is available for Android, iOS and desktop. It’s a freemium app. In other words, the app is free and certain functions are limited to paid customers. After using the app for just one day we've upgraded to the premium account without hesitation.

TickTick is extremely easy to use. The UI is organized very well. But don’t get fooled by this simplicity. The app features numerous functions. Once you unearth those functions you understand what a great job the developers have done.

Organization of Tasks

In TickTick tasks are organized in lists. You can have up to 299 lists with 999 tasks in it. Each task can have subtasks (max 199). Thus, in TickTick a task can be a separate task as well as a mini-project. A quick example will show what we mean.

Suppose you want to write a blog post. Is this a task? Yes and no. To me (someone who writes blog posts frequently) it is more of a goal that is made of several subtasks (i.e. think about the topic, do research, write post, edit, publish). In other task management systems I would make several different tasks. In TickTick I just make one task and several subtasks. So it looks something like this

Task: Write a blog post
Subtask 1: Think about the topic
Subtask 2: Do research
Subtask 3: Write the post
Subtask 4: Edit and publish

See how TickTick removes clutter?


TickTick allows you to have reminders. Reminders are really versatile and can be time-based or location-based. Reminders work on mobile and desktop as well.


You can share tasks with up to 19 members. This is a fantastic feature that makes TickTick suitable not only for personal use but for business use as well. That's how we use it at SigloTech.


TickTick has a fantastic built-in calendar. You can also subscribe to third party calendars. The calendar supports different views.

TickTick Themes

Both the mobile version and the browser version supports themes. There are not many themes and you cannot customize colors but the themes are really clean and professional.

Other Functions

What else can you do in TickTick mobile app? Here is a list of additional functions

  • Classify your tasks and todos with list maker, folders and tags.
  • Make checklists and notes.
  • Prioritize goals and focus on the what really matters to do it tomorrow.
  • Sort goals by date, priority, and title.
  • Attach photos, records and other attachments.
  • Swipe a task to quickly edit, long press to batch edit.


I would say that TickTick is a real chaos killer. Start using TickTick and bring organization in your life.

Tags: android apps gtd task-management

Building Unstoppable Applications on Ethereum

For many people Ethereum is just another cryptocurrency like Bitcoin. In reality, Ethereum is much more than another cryptocurrency. It is often called a world computer and there is truth in this. In essense, Ethereum is a decentralized computing engine but with a very specific goal. Ethereum allows businesses and organizations to create decentralized, trustless applications. It should not come as a surprise that Ethereum is not a simple system and initially it may intimidate you. However, in this post we will demistify it.

Main source of confusion about Ethereum stems from the fact that Ethereum has it's own cryptocurrency and at the same time it allows creation of so called Ethereum tokens! These tokens is what makes Ethereum so special. The combination of Ethereum tokens with the Ethereum computing engine is what makes it possible to create a wide range of applications on top of Ethereum. Ethereum itself is application-agnostic. In other words, we can create any application on top of it requiring trustless environment.

We mentioned above that as a compyting system Ethereum has a very special goal. For example, Ethereum is not suitable for computing-intensive operations like 3D rendering or video encoding/decoding. Why? Because every operation in Ethereum has associated costs and because Ethereum runs on many different computers distributed around the globe, as a fast computing engine it is extremely inefficient. Where this architecuture shines, though, is robustness and reliability.

Like Bitcoin, Ethereum also uses blockchain. Blockchain has been getting so much hype that its probably the most popular word right now. However, blockchain is nothing but a kind of a database with some unique features. The most important feature is that blockchain is immutable. Immutable means that once something is written in blockchain, it's technically impossible to change that. Let's bring a quick example.

Imagine a database where real estate transactions are recorded. For example, when you buy a house from John Doe, that transaction is stored in the database. Then by looking up this information, you can prove that the house belongs to you. For this example let's assume that there is no other proof of ownership except this database. If a hacker or a malicious user changes the record in this database you cannot prove ownership and you lose your property. Now if the register of real estate had used a blockchain-based system, such a case would be impossible. Now it should be clear why organizations still keep paper documents. In case the database is compromised, the paper documents can prove the ownership. What if the paper storage catches a fire? To accomodate for this case, paper documents are copied and archived. As you can imagine this is associated with huge expenses. That's one of the reasons why governments are so inneficient. By adopting blockchain, organizations can dramatically decrease maintenance costs while achieving even better security.

Now you should be getting a feeling in what cases blockchain is a good fit. It does not fit every case but for certain cases blockchain is a life-saver.

One thing that should be noted is that blockchain is inherently public. In other words, every detail in blockchain is publicly visible. While there are blockchains that maintain encryption, the original blockchain suggested in the whitepaper by Satoshi Nakamoto does not address encrypted storage. This should not be confused with public blockchain. A blockchain that is used by Bitcoin for example is public. But even if you setup a private blockchain, data in it will be public within the users of the blockchain.

Main difference between Bitcoin and Ethereum is that Bitcoin's blockchain supports very simple computing. In essense, Bitcoin's blockchain is capable of supporting Bitcoin transfers only. It cannot register any other actions. On the contrary, in Ethereum we can create any type of smart contract. Let's see what a smart contract is.

Under the hood smart contract is a computer program. It contains certain commands that the Ethereum computing engine called Ethereum Virtual Machine (EVM for short) can carry out. Theoretically, EVM can do any computing because it is so called Turing-complete. But as we mentioned above this is only theoretically. Practically, EVM is not suitable for heavy computations because of associated costs and inneficiencies.

Conceptually, a smart contract models an agreement between two or more parties. While these parties can be individually anonymous, the contract itself is public. In other words, both parties can verify that the contract does what it claims to do. This is exactly the magic souce that makes smart contracts so powerful. The parties involved do not need an intermediary or a third trusworthy party to conduct business. The parties simply trust that the EVM will execute the smart contract exactly as the smart contract logic is programmed. However, prior to committing to a smart contract, you must be sure that the smart contract does exactly what it claims to be doing. One way to ensure this, is to have a reputably third party audit the smart contract. Smart contracts need a certain trigger to get activated. A triggering event can an experation date or certain price threshold for example.

As mentioned above, every computing operation in Ethereum costs money. The cost of operation is determined in a unit called "gas". Gas itself is bought by Ether, Ethereum's cryptocurrency. It's very important that you have clear understanding of these concepts, so let's recap them quickly.

Ethereum - is the whole system, a collection of computers running Ethereum software all around the globe.

Ether - is the cryptocurrency of the Ethereum system.

Gas - is bought with Ether and is used to pay for computing operations.

Smart Contract - is a program containing computing commands and having some trigger. Without smart contracts Ethereum is nothing more than another Bitcoin.

Finally, let's summarize some of the most popular use cases for Ethereum.

Crowdfund to pre-sell a product - your company can do this via a so called ICO.

An auction of a limited number of items - logic is enforced by the smart contracts.

A crowdsale to sell virtual shares in a blockchain organization.

A tradeable token with a fixed supply.

A central bank that can issue money.

A virtual organization where members vote on issues.

A transparent association based on shareholder voting.

Interested in adopting Ethereum for your organization? Get in touch with us to discuss this in detail.

Tags: bitcoin blockchain cryptocurrencies ethereum evm gas smart-contracts

String Functions in Go – Part 1

Go is a powerful programming language in the best tradition of C. However, Go tries to eliminate some of C’s shortcomings. If you programmed Go, you probably like the brevity and safety. Yes, safety and comfort come at a cost of performance but Go is still insanely fast language.

One of the areas where Go is dramatically better than C is working with strings. The strings package is Go’s powerhouse for working with strings. The package contains many string functions and makes string manipulation a breathe. Though, there are some caveats and it’s very important to know what the strings package delivers.

The first thing that you need to remember is that some of Go’s string functions are CaSe SeNsItIvE, while others are not. I will clearly indicate this along with each function below.

When working with strings, we face two group of tasks. The first group is querying and checking (e.g. if strings are equal, if one string contains another, etc). The second group is actual manipulation of strings (e.g. removing characters from a string, replacing something in a string, etc). In this part I will focus on the first group. The second group will be addressed in a separate post. Let’s get started.

How to Compare Strings

One of the most common tasks when working with strings is string comparison. In Go you can do this either by using the strings.Compare function or by using the built-in operators: ==, <, >. String comparison is CaSe SeNsItIvE!


func Compare(a, b string) int

Let’s have a look at an example:

package main

import (

func main() {

	fmt.Println(strings.Compare("MAGIC", "magic")) // MAGIC is less than magic - CaSe SeNsItIvE
	fmt.Println(strings.Compare("MAGIC", "MAGIC")) // MAGIC and MAGIC are equal

	fmt.Println(strings.Compare("", ""))  // empty strings are equal
	fmt.Println(strings.Compare("", " ")) // empty string is less than any other string

	fmt.Println("MAGIC" == "magic") // prints false as the strings are not equal
	fmt.Println("MAGIC" < "magic")  // prints true as MAGIC is less then magic


Do you want to test how well you grasped string comparison? Without using Go, guess what the following statement would print:

fmt.Println(("MAGIC" < "magic") == (strings.Compare("MAGIC", "magic") == -1))

How to Check if One String Contains Another

Another common task is checking if one string contains another string. For this task, we can use the strings.Contains function. You feed in two strings and get a boolean result. This function is also CaSe SeNsItIvE! Another thing to note is that empty string always contains empty string.


func Contains(s, substr string) bool

Let’s have a look at an example:

package main

import (

func main() {
	fmt.Println(strings.Contains("It's a kind of magic", "magic")) // prints true
	fmt.Println(strings.Contains("It's a kind of magic", "MAGIC")) // prints false - CaSe SeNsItIvE
	fmt.Println(strings.Contains("", ""))                          // prints true - empty string contains empty string

How to Check if Characters are Present in a String

Sometimes you need to check if certain characters are present in a given string. You could use several strings.Contains function calls when you have more than two characters but there’s a better way in Go – the strings.ContainsAny function.

Function syntax:

func ContainsAny(s, chars string) bool

Let’s have a look at the example:

package main

import (

func main() {
	fmt.Println(strings.ContainsAny("magic", "m"))   // prints true - m is in magic
	fmt.Println(strings.ContainsAny("magic", "M"))   // prints false - M is not in magic
	fmt.Println(strings.ContainsAny("magic", "m a")) // prints true - both m and a are in magic
	fmt.Println(strings.ContainsAny("magic", "m z")) // prints true - z is not in magic, but m is.
	fmt.Println(strings.ContainsAny("magic", "p z")) // prints false - neither p nor z are present in magic

How to Find a Position of a Sub-string in another String

Use strings.Index function to find a position of a sub-string in a string. The function returns -1 if the string does not contain sub-string or a value of zero or more. Zero means the beginning of the string. Like the previous functions, strings.Index function is also CaSe SeNsItIvE!

Function syntax:

func Index(s, substr string) int

Let’s look at the example:

package main

import (

func main() {
	fmt.Println(strings.Index("magic", "gi")) // prints 2 - gi occurs at index 2
	fmt.Println(strings.Index("magic", "GI")) // prints -1 - GI because Index function is CaSe SeNsItIvE
	fmt.Println(strings.Index("magic", "me")) // prints -1 - me does not occur in magic


How to Find Positions of Characters in a String

Like the strings.Contains function has a strings.ContainAny cousin, so does strings.Index has strings.IndexAny function. Though, it’s a little bit more subtle. The example below will show them. This function is also CaSe SeNsItIvE!

Function syntax:

func IndexAny(s, chars string) int

Let’s look at the example:

package main

import (

func main() {
	fmt.Println(strings.IndexAny("magic", "a c")) // prints 1 - a's position is returned
	fmt.Println(strings.IndexAny("magic", "j c")) // prints 4 - c's position is returned
	fmt.Println(strings.IndexAny("magic", "A C")) // prints -1 - as neither A nor C is present in magic


One thing to keep in mind is that strings.Index and strings.IndexAny functions return the index of the first occurrence of a sub-string or chars. It is also possible to find the last occurance of a sub-string or char by using the strings.LastIndex and strings.LastIndexAny functions.

Funtion syntax:

func LastIndex(s, substr string) int
func LastIndexAny(s, chars string) int

Let’s look at a combined example of Index, IndexAny, LastIndex and LastIndexAny functions.

age main

import (

func main() {
	fmt.Println(strings.Index("magic tricks", "ic"))     // prints 3 - ic's first position
	fmt.Println(strings.LastIndex("magic tricks", "ic")) // prints 8 - ic's last position

	fmt.Println(strings.IndexAny("magic tricks", "a c"))     // prints 1 - a's first position
	fmt.Println(strings.LastIndexAny("magic tricks", "a c")) // prints 9 - c's last position


How to Find Out if a String Begins or Ends with a Certain Sub-string

Go’s strings package contains two more useful functions, strings.HasPrefix and strings.HasSuffix. Use these functions to test if a string has certain beginning or ending. Like the other string functions, these two are also CaSe SeNsItIvE!

Function syntax:

func HasPrefix(s, prefix string) bool
func HasSuffix(s, suffix string) bool

Let’s look at the examples:

package main

import (

func main() {
	fmt.Println(strings.HasPrefix("magic", "ma")) // prints true - magic starts with ma
	fmt.Println(strings.HasPrefix("magic", "MA")) // prints false - magic does not starts with MA
	fmt.Println(strings.HasSuffix("magic", "ic")) // prints true - magic ends with ic
	fmt.Println(strings.HasSuffix("magic", "IC")) // prints false - magic does not ends with IC

I hope you found the above overview and examples useful. There are some other string functions in the strings package, but they are used less frequently. At least, I have described all high-frequency string functions. In the next post I will write how to do some interesting things with our strings. Stay tuned and happy programming!

Tags: go programming string-functions

About SigloTech

SigloTech is a software development and consulting company with a primary focus on Blockchain, Cryptocurrency and Smart Contracts.

Contact Details

Your privacy is our top priority!

©2018 SigloTech. All rights reserved.