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 -
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
andtester
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
- To test the CPU, bandwidth and ram performance of the machines.
- Use the nodeos and contracts provided by DAWN-2018-05-16 to performance test
- producer:
eosio
- 200M downlink and uplink bandwidth
After running nodeos single-instance, we can view the process in htop
[图片上传失败...(image-2e768a-1526945689416)]
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
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
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
[图片上传失败...(image-e08b10-1526945689416)]
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
, andtransfer
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"}
]
}