This repository contains the code of the full node client of zeniqsmart, an EVM&Web3 compatible sidechain for Zeniq.
zeniqsmartd
needs a zeniqd
.
~/.zeniq/zeniq.conf
server=1
rpcbind=127.0.0.1
rpcallowip=127.0.0.1/0
rpcport=57319
rpcuser=zeniq
rpcpassword=zeniq123
rpcuser, rpcpassword
must be the same as for ~/.zeniqsmartd/config/app.toml
further down.
Start zeniqd
with
./src/zeniqd -printtoconsole
and let it sync.
zeniqsmartd init my_moniker_here
This creates:
~/.zeniqsmartd/config
~/.zeniqsmartd/data
For the first node, edit
~/.zeniqsmartd/config/app.toml
~/.zeniqsmartd/config/config.toml
~/.zeniqsmartd/config/genesis.json
For subsequent nodes copy and override above 3 files in, then edit.
-
~/.zeniqsmartd/config/config.toml
is read by the Tendermint library.One should change this line in each copy of
config.toml
:moniker = "my_moniker_here"
There needs to be at least one seed in
config.toml
. In the following example the node ID is viazeniqsmartd show-node-id
in192.168.0.40
, generated from~/.zeniqsmartd/config/node_key.json
(which was created withzeniqsmartd init my_moniker_here
).seeds = "ae00280df2729f655f35016bf95162c6cf71ab50@192.168.0.40:28888" persistent_peers = "ae00280df2729f655f35016bf95162c6cf71ab50@192.168.0.40:28888"
-
~/.zeniqsmartd/config/app.toml
configures the Tendermind application, i.e. thezeniqsmartd
proper.cc-rpc-epochs
andcc-rpc-fork-block
are consensus-relevant and must be the same in all nodeswatcher-speedup
will fetch epoch history from other smart nodes
get_logs_max_results = 10000 retain-blocks = -1 retain_interval_blocks = 100 use_litedb = false with-syncdb = false blocks_kept_ads = 10000 blocks_kept_db = -1 sig_cache_size = 20000 trunk_cache_size = 200 prune_every_n = 10 recheck_threshold = 1000 # there must be a zeniqd running (on the same machine) mainnet-rpc-url = "http://127.0.0.1:57319" mainnet-genesis-height = 121900 mainnet-rpc-username = "zeniq" mainnet-rpc-password = "zeniq123" watcher-speedup = true zeniqsmart-rpc-url = "https://smart3.zeniq.network:9545" # consensus-relevant: [[mainnetHeight>=184464,n>=6,>=n*1200],...] cc-rpc-epochs = [ [184464, 6, 7200], [185184, 144, 172800], [185472, 1008, 1209600] ] cc-rpc-fork-block = 11000011
New app.toml settings:
cc-rpc-epochs
see belowcc-rpc-fork-block
see belowblocks-behind = 0
, 0 being default, can be set other than 0 to keep a running backup. The sync alway keeps the given number of blocks behind the current head of validators.- 'update-of-ads-log = false', can be set true temporarily to create text files
updateOfADS<height>.txt
in the ~/.zeniqsmartd/data/app folder showing which 'key=value/old' changes (keys that got a new value over an old one) happened at that height. This overlaps withwith-syncdb
, which stores in a db but without the old value.
Start via
zeniqsmartd start
~/.zeniqsmartd/data
contains the network data.
The sync takes 3-9 days.
zeniqsmartd
implements crosschain in one direction
from Zeniq mainchain to the smart chain
by calling the Zeniq RPC function "crosschain"
regularly per epoch:
cc-rpc-epochs
defines at what mainchain height which epoch length in blocks starts getting valid. n=1008 blocks would be about 1 week corresponding to one epoch length.cc-rpc-fork-block
is the smart height when this feature is activated inzeniqsmartd
Make this a nn earlier than the first main height incc-rpc-epochs
.
In Zeniq mainchain a transaction with a special output's scriptPubKey
OP_FALSE OP_VERIFY OP_RETURN <agentdata>
that makes the input unusable in mainchain, i.e. burns it there,
is called a crosschain transaction further down.
The steps taken by zeniqsmartd
are these:
::
n=1008 # epoch 2n # 2016 fetch nn_n = 1060/3 # every 3 seconds smart, every 10 min main nnmin = 2nnn_n # search back to find cc tx, a failure would be very probably with the min value nn = 3nnmin # a safer value nn/n == 1200 # in cc-rpc-epochs=[[main,n,nn]] make nn = 1200n