EOShenzhen Test Report #1

in #eos6 years ago (edited)

1. Introduce our Fullnode server

As EOShenzhen, we will choose physical machine instead of cloud machine which located in Internet Data Center of China Mobile in Shenzhen.
As the first node from China from CommunityTestnet, we are committed to evolve ourselves to provide stable and robust service for EOS ecosystem,.

This report is aim to unveil info and perform simple test for our fullNode machine, we will cover aritecture and block producer server info in subsequent report.

1.1 Network & bandwidth

Network Speed Test

curl -s https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py | python -

测试报告01.jpeg
Our bandwidth upgradable to 1gps, you will see in the subsequent report.

How to check Internet Speed via Terminal?

1.2 Software Properties

  • Kernel Version
Ubuntu 18.04 LTS: Linux version 4.8.0-22-generic (buildd@lgw01-11) (gcc version 6.2.0 20161005 (Ubuntu 6.2.0-5ubuntu12) ) #24-Ubuntu SMP Sat Oct 8 09:15:00 UTC 2016

1.3 Hardware Properties

  • CPU
sudo lshw -class processor

  • number of processing units
$ sudo nproc
16
  • ram
sudo cat /proc/meminfo

2. Instructions

2.1. genesis.json and config.ini

genesis.json
We use default genesis that generate by nodeos version: 2565193790 with initial_key belong to eosio and initial_timestamp is 2018-03-02T12:00:00.000

config.ini
we include the wallet_plugin, hence we donnot need to run an separate keosd program and we set max-transaction-time = 3000 to provide ample time for transaction and enable access-control-allow-origin = * for web access.

plugin = eosio::wallet_plugin
plugin = eosio::wallet_api_plugin
http-server-address = 0.0.0.0:8888
p2p-listen-endpoint = 0.0.0.0:9876
p2p-server-address = http://baby.eoshenzhen.io:9876

2.2 Set Contracts

EOShenzhen use the command from official wiki
Tutorial Getting Started With Contracts and Tutorial eosio token Contract .

  • create key (use key pair from wiki)

    cless wallet import 5Jmsawgsp1tQ3GD6JyGCwy1dcvqKZgX6ugMVMdjirx85iv5VyPR
  • set ~/.profile or ~/.bash_profile
    vim ~/.profile
alias cless='cleos -u http://baby.eoshenzhen.io:8888 --wallet-url http://baby.eoshenzhen.io:8888'
alias ulk='cless wallet unlock --password [PASSPHRASE]'
alias kae='killall nodeos'

Explain
-u: the http/https URL where nodeos is running
--wallet-url: the http/https URL where keosd is running
alias cless='cleos -u [URL]:--wallet-url [URL]'

Additional alias can be added into ~/.profile, which will help accelerate the operating speed

alias vbp='vim ~/.profile'
alias sbp='source ~/.profile'
  • create eosio.token account
cless create account eosio eosio.token EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4 EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4
  • validate account


  • PUSH eosio.token using with account eosio.token
cless set contract eosio.token build/contracts/eosio.token -p eosio.token


  • Create account user and tester using the same key pair
cless create account eosio user EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4 EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4
cless create account eosio tester EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4 EOS7ijWCBmoXBi3CgtK7DJxentZZeTkeUnaSDvyro9dq7Sd1C3dC4

  • Create 100 billion tokens using permission of eosio.token
cless push action eosio.token create '[ "eosio", "100000000000.0000 EOS", 0, 0, 0]' -p eosio.token

  • Issue all 100 billion token to account `user
 cless push action eosio.token issue '[ "user", "100000000000.0000  EOS", "memo" ]' -p eosio


transfer 25 EOS from user to tester

cless push action eosio.token transfer '[ "user", "tester", "25.0000 EOS", "m" ]' -p user

3. Performance Test

3.1 Basic info

  1. To test the CPU, bandwidth and ram performance of the machines.
  2. Use the nodeos and contracts provided by DAWN-2018-05-16 to performance test
  3. producer: eosio
  4. 200M downlink and uplink bandwidth

After running nodeos single-instance, we can view the process in htop

测试报告10.jpeg

3.2 transfers.sh

transfers.sh will provide 1000 tx from Account user to tester
START_TIME=$SECONDS
CLEOS=/usr/local/bin/cleos
COUNTER=0
while [  $COUNTER -lt 1000 ]; do
   $CLEOS -u http://baby.eoshenzhen.io:8888 --wallet-url http://baby.eoshenzhen.io:8888 push action eosio.token transfer '[ "user", "tester", "1.0000 EOS", "$COUNTER" ]' -p user -f
   let COUNTER=COUNTER+1
done
ELAPSED_TIME=$(($SECONDS - $START_TIME))
echo "$(($ELAPSED_TIME/60)) min $(($ELAPSED_TIME%60)) sec"

run ./transfers.sh |& tee -a output.txt

Save Terminal Output to a File

Both the standard output and standard error streams will be copied to the file while still being visible in the terminal. If the file already exists, it gets overwritten.

We have test under three scenarios:

3.2.1. client use same server

3.2.2 Client use another full node(different public IP) as client

3.2.3 to 3.2.7 will performance test from remote client to simulate the situations

3.2.3. Remote Client Shenzhen, China
  • Mac Mini (late 2014)
    • 8GB Ram
  • Networking Speed:
    • Upload: 16.64 Mbit/s
    • Download: 7.46 Mbit/s
  • Result: 3 min 51 sec

测试深圳使用.jpeg

3.2.4. Remote Client from Singapore
  • Macbook Pro 2.5 GHz Intel Core i7
    • 16GB ram
  • Network Speed:
    • Upload 103.62Mbit/s
    • Download 127.35Mbit/s
  • Result: 15min 41 sec

3.2.5 Remote Client from Hong Kong SAR, China
  • Aliyun, Ubuntu 16.04
    • 4 GB Ram
    • 2 core CPU
  • Network Speed
    • Upload 6.41 Mbit/s
    • Download: 85.85 Mbit/s
  • Result: 5 min 32 sec

测试报告16.jpeg

3.2.6 Remote Client from Fremont, California, USA
  • Linode: Nanode 1G, Ubuntu 16.04

    • 1 GB Ram

    • 1 CPU Core CPU

  • Network Speed:

    • Upload 92 Mbit/s
    • Download 127.35 Mbit/s
  • Result: 57min 44 sec

测试报告19.jpeg

3.3 Conclusion

The fast and identical result for 3.2.1 and 3.2.2 highlights our capability to provide a stable internal network, that all full nodes are interconnected through a stable and robust (10Gps) switch, which will be unveil in subsequent report.

3.2.3 to 3.2.6 indicate that the speed for client to connect to the fullnode is probably highly correlated to the location of the client and server, which highlight our commitment to the community:

To provide solid and stable physical server for developers in region Shenzhen , Pearl River Delta and Greater China

4. Dawn-4.0.0 vs Dawn-2018-05-16

Message from Greg Lee from Community Testnet Telegram


The screenshot below are the errors while we are testing Dawn-4.0.0v,
Dawn-4.0.0 is released in May 12, the issue is fixed in May 16, which proves the block.one rapid iteration speed, stay awesome !

References:

The action contains issue: one issue and three transfers.
While the only action we signed was issue, the issue action performed an "inline transfer" and the "inline transfer" notified the sender and receiver accounts.
The output indicates all of the action handlers that were called, the order they were called in, and whether or not any output was generated by the action.

Technically, the eosio.token contract could have skipped the inline transfer and opted to just modify the balances directly. However, in this case, the eosio.token contract is following our token convention that requires that all account balances be derivable by the sum of the transfer actions that reference them. It also requires that the sender and receiver of funds be notified so they can automate handling deposits and withdrawals.

refer to structs create, issue, and transfer in eosio.token.abi file

{
     "name": "create",
     "base": "",
     "fields": [
        {"name":"issuer", "type":"account_name"},
        {"name":"maximum_supply", "type":"asset"},
        {"name":"can_freeze", "type":"uint8"},
        {"name":"can_recall", "type":"uint8"},
        {"name":"can_whitelist", "type":"uint8"}
     ]
  },{
      "name": "transfer",
      "base": "",
      "fields": [
        {"name":"from", "type":"account_name"},
        {"name":"to", "type":"account_name"},
        {"name":"quantity", "type":"asset"},
        {"name":"memo", "type":"string"}
      ]
    }, {
     "name": "issue",
     "base": "",
     "fields": [
        {"name":"to", "type":"account_name"},
        {"name":"quantity", "type":"asset"},
        {"name":"memo", "type":"string"}
     ]
  }
Sort:  

Great article EOShenzhen! A lot of useful Linux commands you demonstrated in this article.

One thing I'd like to mention, I would remove both the wallet_plugin & wallet_api_pluginfrom your configs since this exposes your private keys whenever your wallet is unlocked.

http://baby.eoshenzhen.io:8888/v1/wallet/list_keys

If the wallet is locked, you will only see:

[]

However, if the wallet is unlocked, an array of key pairs will be displayed publicly for anyone to see (which is very bad to have your private keys exposed).

Solution

Launch keosdseparately and include the wallet address to your alias.

Coin Marketplace

STEEM 0.19
TRX 0.14
JST 0.030
BTC 60035.79
ETH 3187.54
USDT 1.00
SBD 2.45