A Developer’s Guide to Metadium Testnet — Kalmia

Welcome to Metadium Testnet ‘Kalmia’

Overview

The purpose of the testnet is to check the platform’s stability and scalability. The test runs from Sep 30, 2018, and in this phase the governing accounts or mining nodes will not be open to the public at this point. Participants may test sending transactions, creating contracts and more, but accounts may have nonce limit to keep the incoming traffic under control. There will be four test authority accounts, three nodes on AWS and two billion total coins available.

Testnet roadmap

From September 30 until the end of 2018, there will be three fixed/closed mining nodes and four governing accounts with account nonce limits.

In the first half of 2019, the open beta for MetaID service will be launched. Open governance will be available for friendly partners for Q1 2019 and to the public with no account nonce limit for Q2 2019.

How to Participate

A simple key-value store contract to test Metadium blockchain platform. The code is as follows.

// kv-store.sol

pragma solidity ^0.4.0;

contract KVStore {
int256 public count;
mapping (bytes => bytes) data;

event Log(string which, bytes key, bytes value);

function put(bytes key, bytes value, bool log) public returns (int inc) {
if (data[key].length == 0) {
inc = 1;
count++;
}
data[key] = value;
if (log) {
emit Log("put", key, value);
}
}

// _data is tightly packed.
// if not use: ix += 0x20 + (k.length+31)/32*32, instead of
// ix += 0x20 + k.length
function mput(bytes _data, bool log) public returns (int cnt) {
bytes memory k;
bytes memory v;
uint ix;
uint eix;

assembly {
ix := add(_data, 0x20)
}
eix = ix + _data.length;

while (ix < eix) {
assembly {
k := ix
}
ix += 0x20 + k.length;
require(ix < eix);
assembly {
v := ix
}
ix += 0x20 + v.length;
require(ix <= eix);

if (data[k].length == 0) {
cnt++;
}
data[k] = v;
}
count += cnt;
if (log) {
emit Log("mput", "", "");
}
}

function del(bytes key) public {
if (data[key].length != 0) {
count--;
delete data[key];
}
}

function get(bytes key) public view returns (bytes value) {
value = data[key];
}
}
// EOF
  • Download go-metadium from our github account.
  • Run a testnet node
  • Generate your own address
  • Request tokens via the Faucet
  • Install and run a demo code
  • Deploy your own smart contract and test
  • Use Metadium Blockchain Explorer

Requesting tokens via the Faucet

The Metadium testnet faucet can be found here.

The Metadium faucet provides Test meta to users. Test meta allows users to run smart contracts on the Metadium testnet. Users can utilize the faucet to refill on test meta without requiring assistance from the developers.

Current version of Metadium faucet has the following strategically applied with limit to Meta request interval per requested address, limit to Meta request interval per requested IP address and limit to Meta balance of requested address (if the limit is 0, then there will be no limit).

https://testnetfaucet.metadium.com/

Blockchain Explorer

The Metadium testnet blockchain explorer can be found here. It displays information about activities on the blockchain and shows transaction history and block details.

https://testnetexplorer.metadium.com/

How to install gmet:

Get metadium code.

$ git clone https://github.com/metadium/go-metadium

Build it.

$ cd go-metadium
$ make

Set up a directory, and download genesis.json from Metadium testnet.

$ cd <dir>
$ bin/gmet --datadir <dir> --bootnodes "enode://a6d0067ef52e41e30e6417ba3fa15fdfcc820c47f0932eac6a659cdf930644
3bbcd900e74710fbedd3c1cb50b4ef940fc944130345e7786816c1a8a14cda5aba@54.250.11.170:8589" --rpc --rpcaddr 0.0.0.0

Join the metadium testnet. The testnet’s bootnode id is “enode://a6d0067ef52e41e30e6417ba3fa15fdfcc820c47f0932eac6a659cdf930644

3bbcd900e74710fbedd3c1cb50b4ef940fc944130345e7786816c1a8a14cda5aba@54.250.11.170:8589".

$ cd <dir>
$ bin/gmet — datadir <dir> — bootnodes “enode://a6d0067ef52e41e30e6417ba3fa15fdfcc820c47f0932eac6a659cdf930644
3bbcd900e74710fbedd3c1cb50b4ef940fc944130345e7786816c1a8a14cda5aba@54.250.11.170:8589" — rpc — rpcaddr 0.0.0.0

How to start performance test:

Get metadium-demo code.

$ git clone https://github.com/metadium/metadium-demo

Build it.

$ cd metadium-demo
$ make

Compile kv-store.sol. You’ll need `solc’ or docker.

$ build/bin/solc.sh contracts/kv-store.sol ./kv-store.js

Prepare or get a new ethereum wallet file. For example,

To create a new wallet file
$ <go-metadium-dir>/build/bin/gmet metadium new-account — password <password> — out account-1

Get the account funded, perhaps via the metadium faucet.

Create a Key-Value Store contract.

$ build/bin/cmet -a <password> <ethereum-wallet-file> -s <http-rpc-url> -g <gas> deploy <contract-in-js-or-json>
E.g.
$ build/bin/cmet -a password account-1 -s http://localhost:8858 -g 10000000 deploy ./kv-store.js
Contract mined! address: 0x26d38f0cdc805ae4feb84f5f419813c1ba462149 transactionHash: 0x9a5131ebea29b79e398dcb954c67e7785e55e55389339af829bba5a090a08486

Run the stress test.

$ build/bin/cmet -a <password> <ethereum-wallet-file> -s <http-rpc-url> -g <gas> -i <contract-in-js-or-json> -c <contract-address> bulk-kv-put <prefix> <start> <end> <batch-count>
E.g.
$ build/bin/cmet -a password account-1 -s http://localhost:8858 -g 10000000 -i ./kv-store.js -c 0x26d38f0cdc805ae4feb84f5f419813c1ba462149 bulk-kv-put a1 1 1000000 100
1–100: 0x6c723932436ac6e538f92cc63ef0cebe276134c73fb8aa5887c7cd5c47b6117
8

999901–1000000: 0xea006c8c5a3fbe5dcdedfe9f0749fa9a5591f4547af48c45698fcfd2316d64
90
Checking last tx 0xea006c8c5a3fbe5dcdedfe9f0749fa9a5591f4547af48c45698fcfd2316d6
490…………..done.
Took 1000000 / 151.519 = 6599.832 tps

Genesis file information

The genesis block is created using the genesis state file or genesis.json in Gmet. This file contains all the data that will be needed to generate block 0, including who starts testnet with how much meta. Here’s an actual Metadium genesis state file that initializes genesis block.

{
"alloc": {
"0x0A181237Dc34Dd0806E37381F4Cf211148b63E07": {
"balance": "0x19d971e4fe8401e74000000"
},
"0x378360d4f25E6377f3da53F8cF09e9a258118528": {
"balance": "0x19d971e4fe8401e74000000"
},
"0x57C88A783406FcA315257Ea7bEE021bc96225394": {
"balance": "0x19d971e4fe8401e74000000"
},
"0xa07eC413aB0A6B15FDAE71eC5F73Eeb0A0Fd94D6": {
"balance": "0x19d971e4fe8401e74000000"
}
},
"coinbase": "0x378360d4f25E6377f3da53F8cF09e9a258118528",
"config": {
"byzantiumBlock": 0,
"chainId": 101,
"eip155Block": 0,
"eip158Block": 0,
"homesteadBlock": 0
},
"difficulty": "0x1",
"extraData": "0xa6d0067ef52e41e30e6417ba3fa15fdfcc820c47f0932eac6a659cdf9306443bbcd900e74710fbedd3c1cb50b4ef940fc944130345e7786816c1a8a14cda5aba",
"gasLimit": "0x10000000",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"nonce": "0x0000000000000042",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"rewards": "0x",
"timestamp": "0x00"
}

How to give feedback and report bugs

As the Metadium blockchain is still in its early stages, our team would love to see developers test our network. In order to provide feedback and report any bugs for the Kalmia testnet, please email us at tech@metadium.com or join our community channels on Facebook, Telegram and Medium.

We encourage you to get involved and play with our testnet. As always, let us know your thoughts and we look forward to continuing to improve the Metadium blockchain.

Thanks for your interest. We are looking forward to hearing your feedback!

Cheers,

Team Metadium.