IoTeX Testnet Beta (Epik) Release

Hello, IoTeX community! Since our Testnet Alpha code release in June, the IoTeX team has been working around the clock on technical development, strategic partnerships, and community. In August, we officially launched the IoTeX Partnerships Program and website and unveiled seven amazing strategic partners to date. We also brought on new top tier engineers to join our team and had the pleasure of sharing IoTeX’s vision at conferences and meetups around the world. Most importantly, we made great progress in our technical development. Today, we are excited to launch our third code release: Testnet Beta — “Epik”!

You can see the open-source code on our Github now:

Detailed instructions for running the Epik code are provided in this README file , and a detailed demo video can also be found here

Why “Epik”? — Rob Pike

Epik is named after Rob C. Pike, a Canadian programmer and author who contributed to the creation of the programming languages Go (Golang), Limbo, and Sawzall. As you may have already noticed, Epik is a permutation of “Pike”, following the trend of naming each IoTeX code release after one of our technology idols.

Pike is best known for his contribution to programming languages, graphical terminals, patents, many text editors, and more. The IoTeX blockchain is coded in Golang, which Pike co-created, due to its ease of deployment, concurrency features, focus on scalability, and more. Codenaming this release “Epik” is a tribute to Pike’s innovations, which provide the building blocks for IoTeX and developers all around the world to innovate today.

Epik Overview & Features

In our second code release, Testnet Alpha (codename “Strive”), we introduced several in-house innovations that showcased IoTeX’s upfront design decisions coming together. Strive laid the initial blueprint of IoTeX’s vision to create a private, scalable, and interoperable blockchain, without sacrificing security or performance. Along with the code release, we also demonstrated the code being run on a variety of lightweight IoT devices. For more details on our previous release, please see our Strive blog post and demo video .

Over the past two months, we greatly enhanced the existing code base and also developed several new, exciting features for Epik, focused on bringing usability and tangibility to the IoTeX Testnet. Some of the key features of Epik include:

  • Support of Ethereum Virtual Machine (EVM) and smart contracts
  • IoTeX Wallet implementation
  • Roll-DPoS consensus and simulation enhancements
  • BLS signature and DKG (Dual Key Generation) implementation
  • Work-preserving upgrades
  • Support of 100+ physically distributed nodes

In addition to adding new features, we also executed multiple code reviews (i.e., “quality weeks”) focused on enhancing the performance and stability of the existing codebase. Among other benefits, these code reviews led to improved database performance by ~10x and allowed us to consistently support 100+ instant-finalized transactions per second (IFTPS) on our Testnet. The table below provides an overview of the performance enhancements and new features of Epik:

Epik: A Tangible and Usable Testnet

In today’s blockchain industry, many projects release Testnets that do not offer a chance for users, especially non-technical users, to interact directly with the Testnet environment. Project supporters are often confined to viewing “black box” demos and cannot interact with the Testnet in a tangible way — with our release of Epik, we are changing the status quo by bringing usability and tangibility to the IoTeX Testnet.

IoTeX is a platform that provides infrastructure and tools for IoT companies and developers to build revolutionary new IoT DApps. To achieve this, our in-house innovations focus on bringing security , scalability , interoperability , and privacy to IoTeX. However, for IoTeX to reach its full potential, we must also ensure that usability is prioritized, as it serves as the bridge between users, developers, and IoTeX. This is why we prioritized the implementation of smart contracts and the IoTeX Wallet in Epik. For both technical and non-technical users, Epik offers the chance to send transactions and execute smart contracts in our Testnet, allowing IoTeX to begin gathering feedback on usability features that are crucial to the developer experience.

EIOTX test tokens, IoTeX Wallet, & Smart Contracts

Starting today, we invite and encourage everyone to create their own IoTeX Wallet, make test transactions (token transfers and voting for delegates), and deploy smart contracts on the IoTeX Testnet. In this section, we introduce the EIOTX test token and provide an overview of the features and user interface of the IoTeX Wallet and smart contract functionality.

EIOTX test tokens

Along with the Epik launch, we introduce the EIOTX token, which is a test token that can be sent and received by anyone in the IoTeX Testnet. Although these EIOTX tokens are only test tokens, all Testnet transactions are real and will be added to the IoTeX blockchain and Explorer. Please note that the EIOTX test token is NOT the same as the current tradeable IOTX token or the future IoTeX Mainnet token — it is a new token that is usable only in the IoTeX Testnet. The three types of IoTeX tokens are summarized below:

  • EIOTX Token (Testnet): Test token usable only in the Epik Testnet. It does not have any monetary value and will not be tradeable on any exchanges.
  • IOTX Token (Pre-Mainnet): ERC-20 token currently trading on exchanges, which will be converted to the native IoTeX token after the IoTeX Mainnet launch in Q1 2019.
  • IoTeX Mainnet Token (Mainnet): This will be the native utility token of the IoTeX network, which will be tradeable and mineable upon launch of the Mainnet in Q1 2019.

IoTeX Wallet

The IoTeX Wallet is a new built-in feature of Testnet Beta, and any user can create a wallet and perform various actions in the Testnet. Similar to other cryptocurrency wallets, the public and private keys should be recorded to re-use/unlock a specific wallet. As shown in the figure below, a wallet dashboard is provided, which contains the public key (account address), amount of EIOTX test tokens held, and the transaction history of a specific wallet.

IoTeX Wallet Dashboard

In the future, the IoTeX Wallet will be responsible for holding all native Mainnet tokens. In addition, any tokens launched on the IoTeX network will also be natively supported by the IoTeX Wallet, similar to how any ERC-20 tokens can be stored in an Ethereum wallet.

There are three main functions in Epik that users can explore using the EIOTX token and IoTeX Wallet: sending tokens, voting for delegates, and deploying smart contracts, which we review in the following sub-sections. For a full walkthrough demo of these three functions, please see our Testnet Beta demo video

Sending EIOTX Tokens and Voting for Candidates

The ability to exchange data and value in a decentralized fashion is one of the key benefits of blockchain technology. To make this concept tangible, we developed a token transfer and delegate voting user interface that is integrated with the IoTeX Wallet and Testnet blockchain. After creating a wallet, which will be pre-filled with EIOTX tokens, users can send EIOTX tokens (with optional appended data) to other wallets and cast votes for a delegate over the IoTeX Testnet. Each transaction (token transfers and votes) will be recorded on the blockchain, and the unique transaction hash ID will be viewable and searchable in the IoTeX Explorer once confirmed. An overview of the user interface and input fields are shown below.

Send EIOTX tokens interface

Vote for delegates interface

Smart Contracts

Nick Szabo, who proposed the concept of smart contracts in 1994, describes them as “a set of promises, specified in digital form, including protocols within which the parties perform on these promises.” In other words, smart contracts define business logic (in code) for a specific agreement, and conditionally enforce the agreement’s terms based on defined inputs. If you are new to smart contracts, please see this link for a deeper introduction, as well as the smart contract walkthrough in our Epik video .

In Testnet Beta, we add support of Solidity-based smart contracts and the Ethereum Virtual Machine (EVM). The EVM is a decentralized environment that executes “bytecode”, which is compiled from higher-level programming languages, such as Solidity. In the future, we plan to support additional virtual machines (e.g., WASM) and will develop our own virtual machine that fits into IoT scenarios. Smart contracts have the ability to automate complex, multi-party workflows (e.g., supply chain) without a middleman, while transparently recording transaction history on the blockchain. This is a huge opportunity for IoT — decentralized autonomous organizations (DAOs), which are blockchain ecosystems that operate autonomously under a set of smart contracts, can be created to orchestrate heterogeneous devices and create precise, humanless workflows.

In the IoTeX Testnet, users can explore two actions related to smart contracts: “deploy smart contract” and “interact with smart contract”, which are provided on the smart contract tab page.

Smart contracts overview

To execute a smart contract on the IoTeX Testnet, you must first register the contract to the EVM by deploying the contract. As shown below, users can enter a Solidity-based smart contract code and generate an Application Binary Interface (ABI) / JSON interface and byte code, which should be recorded to execute the smart contract later. The smart contract can then be deployed to the EVM, and a contract address will be created, which is unique to a specific wallet and smart contract pair.

Here is a sample Solidity-based smart contract code for you to test:

Deploy Smart Contracts:

Deploy smart contracts interface

Once the smart contract is deployed and registered to the EVM, users can interact with the smart contract and call functions that are built-in to the smart contract. Various smart contracts differ across the number, purpose, and complexity of functions. There are two types of functions:

  • Write functions: triggers a state change on the blockchain (e.g., value transfer, computations, calls to other contracts). Requires gas, as operations executed in the EVM are simultaneously executed by every node in the network, and one or more user inputs define how the contract will be executed.
  • Read functions: fetches a data point from the blockchain, without triggering a state change. Does not require gas, as no computation is required to read data. No user inputs are required for reading functions.

Interact with Smart Contracts:

Interact with smart contracts interface

Please note that it is still the very first version of our wallet and we will keep improving it. If you encountered any programs, feel free to report here

Epik is Amazing — What’s Next?

IoTeX’s next code release, Testnet Stable / Mainnet Preview, is planned to be released in Q4 2018. The next phase of IoTeX development will focus on improved security and reliability of our code. In addition, we will focus on subchain management, cross-chain communication, and software development kits (SDKs). By the end of the year, we also plan to showcase several demos of the IoTeX blockchain running on a variety of lightweight IoT devices, as we previewed during our Testnet Alpha demo video.

Besides working on Testnet Stable/Mainnet Preview, we are also excited to collaborate with our strategic partners to build proofs of concept, launch pilot subchains, and develop new capabilities for the IoTeX ecosystem. Before the public launch of our Mainnet in Q1 2019, we will also release several research papers on our in-house innovations and share details regarding staking requirements, governance, and more. Be sure to follow our official channels to stay in the loop! We look forward to sharing more of our growth and achieving bigger and better milestones very soon.

Code Contributions — We Want Your Help!

The iotex-core project is open source and licensed under the Apache License 2.0 . Contributions to help IoTeX reach its full potential, including style/bug fixes, feature recommendations, proposals for schemes/algorithms, and help with documentation, are all welcomed and greatly appreciated. For code contributions, please refer to our Contribution Guidelines for more information. To report issues, please file an issue on our Github page.