Doc: new introduction howto{get,use,run}
This commit is contained in:
parent
8fb52eab6f
commit
f626e9d6ae
101
docs/index.rst
101
docs/index.rst
@ -7,31 +7,33 @@
|
|||||||
Welcome to the Tezos Developer Documentation!
|
Welcome to the Tezos Developer Documentation!
|
||||||
=============================================
|
=============================================
|
||||||
|
|
||||||
|
The Project
|
||||||
|
-----------
|
||||||
|
|
||||||
Tezos is a distributed consensus platform with meta-consensus
|
Tezos is a distributed consensus platform with meta-consensus
|
||||||
capability. Tezos not only comes to consensus about the state of its ledger,
|
capability. Tezos not only comes to consensus about the state of its ledger,
|
||||||
like Bitcoin or Ethereum. It also attempts to come to consensus about how the
|
like Bitcoin or Ethereum. It also attempts to come to consensus about how the
|
||||||
protocol and the nodes should adapt and upgrade.
|
protocol and the nodes should adapt and upgrade.
|
||||||
|
|
||||||
- Developer documentation is available online at http://tezos.gitlab.io/master
|
- Developer documentation is available online at https://tezos.gitlab.io/master
|
||||||
always in sync with the master branch (which may be desynchronized with
|
The documentation is automatically generated for the master branch and the
|
||||||
the code running on the live networks, replace ``master`` in the URL by the
|
three official network branches `betanet <https://tezos.gitlab.io/betanet>`_,
|
||||||
branch of your choice: betanet, alphanet, zeronet, to make sure you are
|
`alphanet <https://tezos.gitlab.io/alphanet>`_,
|
||||||
consulting the right API version)
|
`zeronet <https://tezos.gitlab.io/zeronet>`_. Make sure you are
|
||||||
- The official Tezos website https://tezos.com/ contains more information about the
|
consulting the right API version.
|
||||||
project.
|
- The website https://tezos.com/ contains more information about the project.
|
||||||
- All development now happens on GitLab at https://gitlab.com/tezos/tezos
|
- All development happens on GitLab at https://gitlab.com/tezos/tezos
|
||||||
|
|
||||||
The Tezos Alpha (test) network has been live and open since February 2017.
|
The source code of Tezos is placed under the MIT Open Source License.
|
||||||
|
|
||||||
The Tezos Beta (experimental) network has been live and open since June 2018.
|
The Community
|
||||||
|
-------------
|
||||||
|
|
||||||
|
|
||||||
- More information on joining the Alphanet at :ref:`here <alphanet>`.
|
|
||||||
- Several community built block explorers are available:
|
- Several community built block explorers are available:
|
||||||
|
|
||||||
- http://ostez.com
|
|
||||||
- http://tzscan.io
|
- http://tzscan.io
|
||||||
- https://tezos.id
|
- https://tezos.id
|
||||||
|
- https://tezex.info
|
||||||
|
|
||||||
- A few community run websites collect useful Tezos links:
|
- A few community run websites collect useful Tezos links:
|
||||||
|
|
||||||
@ -39,25 +41,77 @@ The Tezos Beta (experimental) network has been live and open since June 2018.
|
|||||||
- https://tezos.rocks
|
- https://tezos.rocks
|
||||||
|
|
||||||
- There is a matrix channel *Tezos* that you can join `here <https://riot.im/app/#/room/#tezos:matrix.org>`_.
|
- There is a matrix channel *Tezos* that you can join `here <https://riot.im/app/#/room/#tezos:matrix.org>`_.
|
||||||
- There is a *#tezos* channel on *freenode* that is reserved for technical discussions
|
- There is a sub-reddit at https://www.reddit.com/r/tezos/
|
||||||
- There is also a community FAQ at https://github.com/tezoscommunity/faq/wiki/Tezos-Technical-FAQ
|
- There is also a community FAQ at https://github.com/tezoscommunity/faq/wiki/Tezos-Technical-FAQ
|
||||||
|
- There is a *#tezos* IRC channel on *freenode* that is reserved for technical discussions
|
||||||
|
|
||||||
|
|
||||||
|
The Networks
|
||||||
|
------------
|
||||||
|
|
||||||
|
.. _alphanet:
|
||||||
|
|
||||||
|
Alphanet
|
||||||
|
~~~~~~~~
|
||||||
|
|
||||||
|
Tezos Alphanet is a test network for the Tezos blockchain with a
|
||||||
|
faucet to obtain free tezzies (see :ref:`faucet`).
|
||||||
|
It is updated and rebooted rarely and it is either running the same
|
||||||
|
code as beta or the next version that will become beta in a few weeks.
|
||||||
|
It is the reference network for developers wanting to test their
|
||||||
|
software before going to beta and for users who want to familiarize
|
||||||
|
themselves with Tezos before using their real tezzies.
|
||||||
|
|
||||||
|
We offer support for Alphanet on IRC.
|
||||||
|
|
||||||
|
The Tezos Alpha (test) network has been live and open since February 2017.
|
||||||
|
|
||||||
|
|
||||||
|
.. _zeronet:
|
||||||
|
|
||||||
|
Zeronet
|
||||||
|
~~~~~~~
|
||||||
|
|
||||||
|
Zeronet is the most cutting-edge development network of Tezos. It is
|
||||||
|
restarted without notice, possibly several times a day.
|
||||||
|
This network is mostly used internally by the Tezos developers and may
|
||||||
|
have *different constants* that Alphanet or Betanet.
|
||||||
|
We offer no support for the Zeronet.
|
||||||
|
|
||||||
|
|
||||||
|
.. _betanet:
|
||||||
|
|
||||||
|
Betanet
|
||||||
|
~~~~~~~
|
||||||
|
|
||||||
|
The Tezos Beta (experimental) network is the current incarnation of
|
||||||
|
the Tezos blockchain.
|
||||||
|
There is no faucet but real tezzies that have been allocated to the
|
||||||
|
donors of July 2017 ICO (see :ref:`activate_fundraiser_account`).
|
||||||
|
It is the step before the full Tezos mainnet, with a `few caveats
|
||||||
|
<https://tezosfoundation.ch/news/tezos-betanet-expectations>`_.
|
||||||
|
|
||||||
|
The Tezos Beta (experimental) network has been live and open since
|
||||||
|
`June 30th 2018 <https://tezosfoundation.ch/news/tezos-betanet-launch>`_.
|
||||||
|
|
||||||
|
|
||||||
|
Getting started
|
||||||
|
---------------
|
||||||
|
|
||||||
|
The best place to start exploring the project is following the How Tos
|
||||||
|
in the :ref:`introduction <howtoget>`.
|
||||||
|
|
||||||
The source code of Tezos is placed under the MIT Open Source License.
|
|
||||||
|
|
||||||
.. toctree::
|
.. toctree::
|
||||||
:maxdepth: 2
|
:maxdepth: 2
|
||||||
:caption: Introduction:
|
:caption: Introduction:
|
||||||
|
|
||||||
introduction/howto
|
introduction/howtoget
|
||||||
|
introduction/howtouse
|
||||||
|
introduction/howtorun
|
||||||
|
introduction/various
|
||||||
introduction/contributing
|
introduction/contributing
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:maxdepth: 2
|
|
||||||
:caption: Test Networks:
|
|
||||||
|
|
||||||
introduction/alphanet
|
|
||||||
introduction/zeronet
|
|
||||||
|
|
||||||
.. toctree::
|
.. toctree::
|
||||||
:maxdepth: 2
|
:maxdepth: 2
|
||||||
:caption: White doc:
|
:caption: White doc:
|
||||||
@ -72,6 +126,7 @@ The source code of Tezos is placed under the MIT Open Source License.
|
|||||||
:maxdepth: 2
|
:maxdepth: 2
|
||||||
:caption: Developer Tutorials:
|
:caption: Developer Tutorials:
|
||||||
|
|
||||||
|
tutorials/rpc
|
||||||
tutorials/data_encoding
|
tutorials/data_encoding
|
||||||
tutorials/error_monad
|
tutorials/error_monad
|
||||||
tutorials/michelson_anti_patterns
|
tutorials/michelson_anti_patterns
|
||||||
|
@ -1,321 +0,0 @@
|
|||||||
.. _alphanet:
|
|
||||||
|
|
||||||
Alphanet
|
|
||||||
========
|
|
||||||
|
|
||||||
Welcome to the Tezos alphanet, which is a pre-release network for the
|
|
||||||
Tezos blockchain. Currently, the chain is reset every few weeks.
|
|
||||||
|
|
||||||
For news and support about the alphanet, please join IRC (*#tezos* on
|
|
||||||
freenode). Please, report bugs related to the alphanet on the IRC
|
|
||||||
channel before filling `GitLab issues
|
|
||||||
<https://gitlab.com/tezos/tezos/issues>`__.
|
|
||||||
|
|
||||||
For more information about the project in general, see:
|
|
||||||
|
|
||||||
https://tezos.com/
|
|
||||||
|
|
||||||
How to join the alphanet
|
|
||||||
------------------------
|
|
||||||
|
|
||||||
We provide two ways of joining the alphanet :
|
|
||||||
|
|
||||||
- an installation script that uses ``docker`` and prebuilt binaries
|
|
||||||
(recommended way, tested on windows/mac/linux, works on **x86_64**
|
|
||||||
architecture only),
|
|
||||||
- manual compilation and installation (linux and mac only).
|
|
||||||
|
|
||||||
The ``alphanet.sh`` script (x86_64 only)
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
The recommended way for running an up-to-date Tezos node connected to
|
|
||||||
the alphanet is to use ``scripts/alphanet.sh``. Its only requirement is
|
|
||||||
a working installation of `Docker <https://www.docker.com/>`__.
|
|
||||||
|
|
||||||
First, you need to download the script:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
wget https://gitlab.com/tezos/tezos/raw/alphanet/scripts/alphanet.sh
|
|
||||||
chmod +x alphanet.sh
|
|
||||||
|
|
||||||
You are now one step away from a working node:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
./alphanet.sh start
|
|
||||||
|
|
||||||
This will launch a docker container running the various daemons that
|
|
||||||
form a working tezos node. The first launch might take a few minutes to
|
|
||||||
synchronize the chain.
|
|
||||||
|
|
||||||
See ``./alphanet.sh --help`` for more informations about the script. In
|
|
||||||
particular see ``./alphanet.sh client --help`` and
|
|
||||||
``scripts/README.master`` for more information about the client.
|
|
||||||
|
|
||||||
Every call to ``alphanet.sh`` will check for updates of the node and
|
|
||||||
will fail if your node is not up-to-date. For updating the node, simply
|
|
||||||
run:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
./alphanet.sh restart
|
|
||||||
|
|
||||||
If you prefer to temporarily disable automatic updates, you just have to
|
|
||||||
set an environment variable:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
export TEZOS_ALPHANET_DO_NOT_PULL=yes
|
|
||||||
|
|
||||||
Compilation from sources
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Please refer to the :ref:`instructions<howto>`.
|
|
||||||
|
|
||||||
For the rest of the document, to execute the example commands, you
|
|
||||||
will have to replace ``./alphanet.sh client`` by ``./tezos-client``.
|
|
||||||
|
|
||||||
How to observe the network
|
|
||||||
--------------------------
|
|
||||||
|
|
||||||
The alphanet script provides a basic command ``./alphanet.sh head`` that
|
|
||||||
allows you to see if your own node is synchronized.
|
|
||||||
|
|
||||||
The Tezos client also offers a lot of commands to introspect the state
|
|
||||||
of the node, and also to list and call the RPCs of the nodes.
|
|
||||||
|
|
||||||
Enthusiastic Tezos adopters have also developed some block
|
|
||||||
explorer for the alphanet. See for instance:
|
|
||||||
|
|
||||||
- https://ostez.com
|
|
||||||
- https://tzscan.io
|
|
||||||
- https://tezos.id
|
|
||||||
|
|
||||||
.. _faucet:
|
|
||||||
|
|
||||||
How to obtain free Tezzies
|
|
||||||
--------------------------
|
|
||||||
|
|
||||||
You must first grab a wallet from the `faucet
|
|
||||||
<https://faucet.tzalpha.net>`__.
|
|
||||||
|
|
||||||
This will provide you with a JSON file, named like
|
|
||||||
``tz1__xxxxxxxxx__.json``. Once your node is synchronized, you should
|
|
||||||
run the following command to activate your wallet, where ``my_account``
|
|
||||||
is a local name you choose, and ``tz1__xxxxxxxxx__.json`` is the name
|
|
||||||
of the file you grab:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ tezos-client activate account "my_account" with "tz1__xxxxxxxxx__.json"
|
|
||||||
Operation successfully injected in the node.
|
|
||||||
Operation hash is 'ooGoVS5cikbTHEimTzYhQWrYqY2LeJYmfkbzoiW8KQ59jtGQaXr'.
|
|
||||||
Waiting for the operation to be included...
|
|
||||||
Operation found in block: BKihN2QgSAu2etftNvs8FWWhwTvZiY8P3e7H3jgdj2MCpKZXXRs
|
|
||||||
Account my_account (tz1__xxxxxxxxx__) created with ꜩ23,454.
|
|
||||||
|
|
||||||
Or, if you use the ``alphanet.sh`` script, you should prefix the file
|
|
||||||
with ``container:`` in order to copy it into the docker image:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ ./alphanet.sh client activate account "my_account" with "container:tz1__xxxxxxxxx__.json"
|
|
||||||
|
|
||||||
You might check your balance with:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
./alphanet.sh client get balance for "my_account"
|
|
||||||
|
|
||||||
Please preserve the JSON file, after each reset of the Alphanet, you
|
|
||||||
will have to reactivate the wallet. The same file might be use ta activate
|
|
||||||
an account on the Zeronet.
|
|
||||||
|
|
||||||
Please drink carefully and don't abuse the faucet: it only contains
|
|
||||||
30.000 wallets for a total amount of ꜩ760.000.000.
|
|
||||||
|
|
||||||
How to play with smart-contracts
|
|
||||||
--------------------------------
|
|
||||||
|
|
||||||
An advanced documentation of the smart contract language is available :ref:`here<michelson>`.
|
|
||||||
|
|
||||||
Some test contracts can be found in directory :src:`src/bin_client/test/contracts/`.
|
|
||||||
|
|
||||||
For details and examples, see also https://www.michelson-lang.com/
|
|
||||||
|
|
||||||
How to bake on the alphanet
|
|
||||||
---------------------------
|
|
||||||
|
|
||||||
Baking 101
|
|
||||||
~~~~~~~~~~
|
|
||||||
|
|
||||||
In order to understand how baking works, please refer to :ref:`this
|
|
||||||
section <proof-of-stake>`. The following is a **TL;DR** to help you
|
|
||||||
get started.
|
|
||||||
|
|
||||||
In Tezos there are two kinds of contracts: *implicit* and *originated*
|
|
||||||
accounts. Originated accounts can have michelson code, in which case
|
|
||||||
they are also called *contracts*.
|
|
||||||
|
|
||||||
- An *implicit account* is identified by a public key hash and is
|
|
||||||
automatically created when a public key hash is the recipient of a
|
|
||||||
transfer. The genesis block will contain one account per
|
|
||||||
contributor.
|
|
||||||
|
|
||||||
- An *originated account* or *contract* is *originated* with an
|
|
||||||
operation sent to the blockchain. It has a *manager* and an optional
|
|
||||||
*delegate* account.
|
|
||||||
|
|
||||||
The baking itself is done by *implicit accounts*. By default, they
|
|
||||||
don't participate in baking unless they are *registred* as
|
|
||||||
delegates. In order to register an *implicit account* as a delegate,
|
|
||||||
use:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
./alphanet.sh client register key "my_account" as delegate
|
|
||||||
|
|
||||||
Once registered, an *implicit account* can participate in baking for
|
|
||||||
its own balance plus the balance of *originated accounts* and
|
|
||||||
*contracts* that are delegated to it.
|
|
||||||
|
|
||||||
Originated accounts and contracts thus participate in baking only via
|
|
||||||
their delegate. If they don't have a delegate set (the default, unless
|
|
||||||
you specify one), they don't participate in baking.
|
|
||||||
|
|
||||||
Implicit accounts cannot have a delegate. In order to delegate funds,
|
|
||||||
they need to be transfered to an *originated account* beforehand, and
|
|
||||||
a delegate must be set.
|
|
||||||
|
|
||||||
To summarize:
|
|
||||||
|
|
||||||
- *Implicit accounts* only can be registered as *delegates* and
|
|
||||||
actually bake.
|
|
||||||
|
|
||||||
- Funds in *implicit accounts* which are not registered as *delegates*
|
|
||||||
do not participate in baking.
|
|
||||||
|
|
||||||
- *Originated accounts* and *contracts* do not participate in baking
|
|
||||||
unless they have a delegate account set **and** this delegate is
|
|
||||||
actually baking.
|
|
||||||
|
|
||||||
In order to be entitled to bake, *delegates* need enough tezzies
|
|
||||||
(delegated or otherwise) to have a least one *roll*. Baking rights are
|
|
||||||
randomly chosen around rolls, which are blocks of 10K tezzies.
|
|
||||||
|
|
||||||
When you obtain Alphanet coins from :ref:`the faucet<faucet>`, if you
|
|
||||||
are lucky to obtain more than one roll, you can bake using this
|
|
||||||
identity (after it is registered as a delegate). Otherwise, you need
|
|
||||||
to ask the faucet for more coins. When you obtain more than 10K
|
|
||||||
tezzies into one or multiple identities, you are ready to start
|
|
||||||
baking!
|
|
||||||
|
|
||||||
Before we see how to bake with your delegate, you might want to know
|
|
||||||
how to delegate your tezzies. Although not necessary (you can just
|
|
||||||
bake with your delegate if it has enough tezzies), it is useful if you
|
|
||||||
want for example to avoid transfering all your coins in one
|
|
||||||
account.
|
|
||||||
|
|
||||||
Delegating your coins
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
As explained above, *implicit accounts* cannot have a delegate, so the
|
|
||||||
first step is to *originate* an *account* and transfer your tezzies
|
|
||||||
there. During the origination step, we will set the delegate.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
./alphanet.sh client originate account <new> for <implicit> transfering <qty> from <implicit> --delegate <implicit>
|
|
||||||
|
|
||||||
|
|
||||||
Where ``<new>`` must be a contract alias that you choose,
|
|
||||||
``<implicit>`` is the alias of one *implicit account* that you own, and
|
|
||||||
``<qty>`` is the amount in tezzies that you want to transfer.
|
|
||||||
|
|
||||||
This will originate an *account*, transfer ``<qty>`` tezzies from
|
|
||||||
``<implicit>`` in it, and set that ``<implicit>`` is the manager and
|
|
||||||
the delegate for this freshly minted account.
|
|
||||||
|
|
||||||
If you already own contracts that are delegatable and want to change
|
|
||||||
the delegate to ``<implicit>``, use the following command:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
./alphanet.sh client set delegate for <account> to <implicit>
|
|
||||||
|
|
||||||
|
|
||||||
You need to wait at most seven cycles which, on the Alphanet, is 7*128
|
|
||||||
blocks (something about 15 hours). On the mainnet, this will be around
|
|
||||||
3 weeks.
|
|
||||||
|
|
||||||
From now on, the funds in ``<new>`` will be delegated to
|
|
||||||
``<implicit>``. In the next section, we will learn how to bake with
|
|
||||||
your delegate.
|
|
||||||
|
|
||||||
Baking with your delegate
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
If you have read and followed the doc up until this point, you now
|
|
||||||
have a delegate, which have enough tezzies (delegated or otherwise) to
|
|
||||||
bake.
|
|
||||||
|
|
||||||
When baking or endorsing a block, a *security deposit* (or *bond*) is
|
|
||||||
taken out of the default account associated to the public key of the
|
|
||||||
delegate. Hence, in order to bake, your delegate must have enough
|
|
||||||
funds to be able to pay security deposits for baking and endorsing.
|
|
||||||
|
|
||||||
Check out the Alphanet *constants* for this:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
./alphanet.sh client rpc get /blocks/head/proto/constants
|
|
||||||
|
|
||||||
Check for the ``endorsement_security_deposit`` and
|
|
||||||
``block_security_deposit`` keys of the JSON record. The value is in
|
|
||||||
*µtez*, one millionth of a tezzie. In the alphanet, the current value
|
|
||||||
is set to *512tz* per block and *64tz* per endorsement. If you run out
|
|
||||||
of funds, you will not be able to bake.
|
|
||||||
|
|
||||||
Now, you are settled. The ``alphanet`` docker image runs a baker
|
|
||||||
daemon and a endorser daemon, by default for all your keys.
|
|
||||||
|
|
||||||
To know if you baked, just run:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
./alphanet.sh baker log
|
|
||||||
./alphanet.sh endorser log
|
|
||||||
|
|
||||||
You should see lines such as:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
Injected block BLxzbB7PBW1axq for bootstrap5 after BLSrg4dXzL2aqq (level 1381, slot 0, fitness 00::0000000000005441, operations 21)
|
|
||||||
|
|
||||||
Or:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
Injected endorsement for block 'BLSrg4dXzL2aqq' (level 1381, slot 3, contract bootstrap5) 'oo524wKiEWBoPD'
|
|
||||||
|
|
||||||
On the alphanet, rewards for staking are credited after 5 cycles (~10
|
|
||||||
hours). The reward for baking a block is ꜩ16 and ``ꜩ2 /
|
|
||||||
<block_priority>`` for endorsing a block. The safety bond is returned
|
|
||||||
together with the reward.
|
|
||||||
|
|
||||||
To know when you will be allowed to bake in the current cycle, you
|
|
||||||
might try the following RPCs, where you replaced ``tz1iFY8ads...`` by
|
|
||||||
the appropriate value:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ ./alphanet.sh client list known addresses
|
|
||||||
my_account: tz1iFY8aDskx9QGbgBy68SNAGgkc7AE2iG9H (public key known) (secret key known)
|
|
||||||
$ ./alphanet.sh client rpc post /chains/main/blocks/head/helpers/rights/baking/delegate/tz1iFY8aDskx9QGbgBy68SNAGgkc7AE2iG9H with {}
|
|
||||||
{ "ok":
|
|
||||||
[ { "level": 1400.000000, "priority": 2.000000,
|
|
||||||
"timestamp": "2017-05-19T03:21:52Z" },
|
|
||||||
... ] }
|
|
||||||
|
|
||||||
.. include:: alphanet_changes.rst
|
|
@ -1,254 +0,0 @@
|
|||||||
Changelog
|
|
||||||
---------
|
|
||||||
|
|
||||||
Reset 2018-05-03
|
|
||||||
~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
[Alpha]
|
|
||||||
|
|
||||||
- New faucet : https://faucet.tzalpha.net
|
|
||||||
|
|
||||||
- `secp256k1` as an alternative to `ed25519`
|
|
||||||
|
|
||||||
- 32 endorsers per blocks (was 15)
|
|
||||||
|
|
||||||
- Delegation rights are now frozen 5 cycles in advance (approx 15 days
|
|
||||||
in mainnet or 10 hours on zeronet);
|
|
||||||
|
|
||||||
- Security deposits are recovered after 5 cycles;
|
|
||||||
|
|
||||||
- Rewards and fees are earned after 5 cycles;
|
|
||||||
|
|
||||||
- Pending deposits and fees count in the staking balance of a delegate;
|
|
||||||
|
|
||||||
- Delegates will be tagged as "deactivated" after 5 cycles of
|
|
||||||
inactivity and they will lose their baking rights;
|
|
||||||
|
|
||||||
- Do not allow revealing the same endorsement twice.
|
|
||||||
|
|
||||||
- Tez values now have 6 decimals instead of two. The syntax used by
|
|
||||||
the client and Michelson use comma separators every three
|
|
||||||
digits, before and after the dot. For instance, 3 million tez and 10
|
|
||||||
µtez is written `3,000,000.000,01`. The syntax in JSON is the raw
|
|
||||||
amount in µtez, either as a number without decimals or as a decimal
|
|
||||||
string, for the same example we would get `"3000000000010"`.
|
|
||||||
|
|
||||||
[Node]
|
|
||||||
|
|
||||||
- Rewrite of the RPC library to handle content types, to enable binary
|
|
||||||
RPCs and proper HTTP verbs. The next version will probably break the
|
|
||||||
HTTP API.
|
|
||||||
|
|
||||||
- Now that we don't use the git backend anymore, we finally updated
|
|
||||||
the context hashing function from SHA1 to Blake2B.
|
|
||||||
|
|
||||||
[Michelson]
|
|
||||||
|
|
||||||
- Set a maximum type size, as a simple solution to avoid some type
|
|
||||||
checker abuses where types can grow exponentially.
|
|
||||||
|
|
||||||
- Annotations are now correctly handled by macros.
|
|
||||||
|
|
||||||
[Build]
|
|
||||||
|
|
||||||
- Split the code base into separate OPAM packages.
|
|
||||||
|
|
||||||
Patch 2018-01-15
|
|
||||||
~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
[Node]
|
|
||||||
|
|
||||||
- Fix a performance issue in block locator computation
|
|
||||||
|
|
||||||
|
|
||||||
Reset 2017-11-20
|
|
||||||
~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
[Alphanet]
|
|
||||||
|
|
||||||
- Limit the number of faucet operations at 5 per block.
|
|
||||||
|
|
||||||
[Client]
|
|
||||||
|
|
||||||
- Autocomplete scripts for bash.
|
|
||||||
|
|
||||||
- Smart contracts are now non spendable by default.
|
|
||||||
|
|
||||||
- Add a debug command to list invalid blocks.
|
|
||||||
|
|
||||||
[Node]
|
|
||||||
|
|
||||||
- Prevent potential stack overflow in validation.
|
|
||||||
|
|
||||||
- Fix concurrency issue where operations were cleared from
|
|
||||||
memory before being used.
|
|
||||||
|
|
||||||
- Continue background work on the multipass validator:
|
|
||||||
cleanup and document data structures, better logging
|
|
||||||
of resource requests, enhance requests for the same piece
|
|
||||||
of data to multiple peers, split the code in smaller
|
|
||||||
simpler components.
|
|
||||||
|
|
||||||
- P2p: fix issue with data greater than 2^16 bytes
|
|
||||||
|
|
||||||
- Irmin: use an experimental LMDB backend
|
|
||||||
|
|
||||||
[Build]
|
|
||||||
|
|
||||||
- Refactor the economic protocol amendment code. Protocols are
|
|
||||||
now compiled to functors, taking the type signature of their
|
|
||||||
runtime environment as parameter. This simplifies the
|
|
||||||
dependencies, and will allow third party developers to
|
|
||||||
instantiate economic protocols in other contexts than the node.
|
|
||||||
|
|
||||||
- Switch from Makefiles to jbuilder, yay!
|
|
||||||
|
|
||||||
- Rename (hopefully) all occurrences of "mining" into "baking".
|
|
||||||
|
|
||||||
[Michelson]
|
|
||||||
|
|
||||||
- Introduce Micheline, the (now independent) IR of Michelson.
|
|
||||||
The parser and printer should now be used on their own, outside
|
|
||||||
of the client or node.
|
|
||||||
|
|
||||||
- Implement a basic semantics of annotations.
|
|
||||||
The typechecker now propagates annotations on types throughout the
|
|
||||||
code, and tagging instructions with an annotation allows the
|
|
||||||
programmer to reannotate the element produced by the instruction.
|
|
||||||
The emacs mode displays propagated annotations.
|
|
||||||
|
|
||||||
- Add a version of `ITER` that takes a static code block and expects
|
|
||||||
a collection on the initial stack, and works like a `LOOP`, pushing
|
|
||||||
the element of the collection one at a time on the stack. This is
|
|
||||||
like `REDUCE` but using a static code block instead of a dynamic
|
|
||||||
lambda. In the same vein, `MAP` can take a code block.
|
|
||||||
|
|
||||||
- Add `LOOP_LEFT` that uses a different type for the accumulator and
|
|
||||||
the return value. Continues while the top of the stack is `Left 'a`
|
|
||||||
and stops on `Right 'b`.
|
|
||||||
|
|
||||||
- Change timestamps to be arbitrary precision relative integers.
|
|
||||||
|
|
||||||
- Add `SIZE` on lists.
|
|
||||||
|
|
||||||
Reset 2017-11-17
|
|
||||||
~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
[Node]
|
|
||||||
|
|
||||||
- P2p: fix issue with data greater then 2^16 bytes
|
|
||||||
- Irmin: restore usage `git-repack`... (mistakenly removed)
|
|
||||||
|
|
||||||
Reset 2017-10-13
|
|
||||||
~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
[Client]
|
|
||||||
|
|
||||||
- Fix missing nonce revelation at end of cycle.
|
|
||||||
- New command line analyzer and better help pages.
|
|
||||||
|
|
||||||
[Node]
|
|
||||||
|
|
||||||
- Various small fixes and error message enhancements.
|
|
||||||
|
|
||||||
[Alphanet]
|
|
||||||
|
|
||||||
- Use older leveldb-1.18 as upgrade to the newer version made the
|
|
||||||
node crash.
|
|
||||||
|
|
||||||
[Michelson]
|
|
||||||
|
|
||||||
- Split the `key` type into `key` and `key_hash` to
|
|
||||||
prevent an error raised when using an unrevealed key.
|
|
||||||
|
|
||||||
Reset 2017-09-21
|
|
||||||
~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
[Node]
|
|
||||||
|
|
||||||
- fix a performance issue in roll storage
|
|
||||||
|
|
||||||
[Doc]
|
|
||||||
|
|
||||||
- improve scripts and documentations on how to run sandboxed node
|
|
||||||
or a local private network
|
|
||||||
|
|
||||||
[Client]
|
|
||||||
|
|
||||||
- add an option `-log-requests`. All RPC requests and responses to the
|
|
||||||
node are logged on `stderr`.
|
|
||||||
|
|
||||||
[Michelson]
|
|
||||||
|
|
||||||
- Split the `key` type into `key` and `key_hash` to
|
|
||||||
prevent an error raised when using an unrevealed key.
|
|
||||||
|
|
||||||
Reset 2017-08-10
|
|
||||||
~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
This update includes changes in the on-disk state of the node and in
|
|
||||||
the format of blocks and operations. It thus requires a chain reset.
|
|
||||||
|
|
||||||
Main changes includes:
|
|
||||||
|
|
||||||
[Doc]
|
|
||||||
|
|
||||||
- The documentation previously available on the Slack channel is now
|
|
||||||
available at:
|
|
||||||
|
|
||||||
https://raw.githubusercontent.com/tezos/tezos/alphanet/README.md
|
|
||||||
|
|
||||||
- The `alphanet` branch of the github repository is now automatically
|
|
||||||
synchronized with `alphanet` docker image. And the latest version of
|
|
||||||
the `alphanet.sh` is available at:
|
|
||||||
|
|
||||||
https://raw.githubusercontent.com/tezos/tezos/alphanet/scripts/alphanet.sh
|
|
||||||
|
|
||||||
No need to update manually though, the script auto-update itself
|
|
||||||
when running:
|
|
||||||
|
|
||||||
./alphanet.sh restart
|
|
||||||
|
|
||||||
Or:
|
|
||||||
|
|
||||||
./alphanet.sh update_script
|
|
||||||
|
|
||||||
|
|
||||||
[Michelson]
|
|
||||||
|
|
||||||
- minor language enhancements, mostly resulting from the feedback of
|
|
||||||
Milo's daily challenge:
|
|
||||||
|
|
||||||
https://www.michelson-lang.com/
|
|
||||||
|
|
||||||
- the alphanet scripts now understands a container: prefix wherever a
|
|
||||||
file: prefix is accepted, temporarily copying the file into the
|
|
||||||
container, and the emacs-mode is aware of that
|
|
||||||
|
|
||||||
[Node]
|
|
||||||
|
|
||||||
- Operations now include a block hash in their header. Such an
|
|
||||||
operation could only be included in a successor of this block.
|
|
||||||
|
|
||||||
- The economics protocol now refuses blocks that includes an operation
|
|
||||||
forged more than 64 blocks in the past. As any constants set by the
|
|
||||||
economic protocol, it is amendable by a vote.
|
|
||||||
|
|
||||||
- Header of blocks now includes a hash of the "context" that result
|
|
||||||
from its validation. This is currently the SHA1 of the git commit,
|
|
||||||
but this will be changed in a near future for a safer cryptographic
|
|
||||||
hash.
|
|
||||||
|
|
||||||
- The node does not need anymore to maintain a full index of the
|
|
||||||
operation to operate. This greatly reduce the memory and disk usage.
|
|
||||||
|
|
||||||
- The node now builds against `irmin.1.3` where some of our code and
|
|
||||||
optimizations were upstreamed. We were previously stuck to
|
|
||||||
irmin.0.12.
|
|
||||||
|
|
||||||
|
|
||||||
[CI]
|
|
||||||
|
|
||||||
- This is not directly visible in the alphanet, but our CI
|
|
||||||
infrastructure is now ready for open development.
|
|
||||||
More about that soon (or later).
|
|
@ -7,6 +7,21 @@ Introduction
|
|||||||
The purpose of this document is to help contributors get started with
|
The purpose of this document is to help contributors get started with
|
||||||
the Tezos OCaml codebase.
|
the Tezos OCaml codebase.
|
||||||
|
|
||||||
|
|
||||||
|
Reporting issues
|
||||||
|
----------------
|
||||||
|
|
||||||
|
The simplest way to contribute to Tezos is to report issues that you may
|
||||||
|
find with the software on `gitlab <https://gitlab.com/tezos/tezos/issues>`__.
|
||||||
|
If you are unsure about an issue ask on IRC first and always make sure
|
||||||
|
to search the existing issues before reporting a new one.
|
||||||
|
Some info that are probably important to include in the description:
|
||||||
|
the architecture (e.g. *ARM64*), the operating system (e.g. *Debian
|
||||||
|
Stretch*), the network you are connected to (e.g. *Alphanet*), the
|
||||||
|
binary or component (e.g. *tezos-node crashes* or *rpc X returns Y
|
||||||
|
while Z was expected*).
|
||||||
|
|
||||||
|
|
||||||
First steps
|
First steps
|
||||||
-----------
|
-----------
|
||||||
|
|
||||||
|
@ -1,483 +0,0 @@
|
|||||||
.. _howto:
|
|
||||||
|
|
||||||
How to build and run
|
|
||||||
====================
|
|
||||||
|
|
||||||
Get the sources
|
|
||||||
---------------
|
|
||||||
|
|
||||||
Tezos *git* repository is hosted at `GitLab
|
|
||||||
<https://gitlab.com/tezos/tezos/>`_. All development happens here. Do
|
|
||||||
**not** use our `GitHub mirror <https://github.com/tezos/tezos>`_
|
|
||||||
which we don't use anymore and only mirrors what happens at GitLab.
|
|
||||||
|
|
||||||
You also need to **choose a branch**:
|
|
||||||
|
|
||||||
- The *master* branch is where code is merged, but there is no test
|
|
||||||
network using the *master* branch directly.
|
|
||||||
- The *alphanet* and *alphanet-lmdb* is what you want to use if you want
|
|
||||||
to connect to Tezos' test network, the *Alphanet*. The
|
|
||||||
*-lmdb* version uses LMDB instead of LevelDB.
|
|
||||||
|
|
||||||
**TL;DR**: Typically you want to do:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
git clone https://gitlab.com/tezos/tezos.git
|
|
||||||
git checkout alphanet
|
|
||||||
|
|
||||||
Install OPAM
|
|
||||||
------------
|
|
||||||
|
|
||||||
To compile Tezos, you need an OCaml compiler (version 4.06.1) and all
|
|
||||||
the libraries listed in the various ``tezos-*.opam`` files.
|
|
||||||
|
|
||||||
The simplest way to install all dependencies is by using `OPAM
|
|
||||||
<https://opam.ocaml.org/>`__, the OCaml package manager.
|
|
||||||
|
|
||||||
|
|
||||||
**IMPORTANT**: Please use `version 2
|
|
||||||
<https://opam.ocaml.org/blog/opam-2-0-0-rc3/>`_ of OPAM. That
|
|
||||||
is what the Tezos Core team uses. Most distribution probably ship
|
|
||||||
**version 1** of OPAM out of the box, but installing version 2 is
|
|
||||||
preferable for many reasons.
|
|
||||||
|
|
||||||
|
|
||||||
Install Tezos dependencies with OPAM
|
|
||||||
------------------------------------
|
|
||||||
|
|
||||||
Install the OCaml compiler and the libraries which Tezos depends on:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
make build-deps
|
|
||||||
|
|
||||||
While building the dependencies, ``opam`` is able to handle correctly
|
|
||||||
the OCaml libraries but it is not always able to handle all external C
|
|
||||||
libraries we depend on. On most system, it is able to suggest a call to
|
|
||||||
the system package manager but it currently does not handle version
|
|
||||||
check.
|
|
||||||
|
|
||||||
At last, compile the project:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
make
|
|
||||||
|
|
||||||
This should produce several binaries:
|
|
||||||
|
|
||||||
- ``tezos-node``: the tezos daemon itself;
|
|
||||||
- ``tezos-client``: a command-line client;
|
|
||||||
- ``tezos-admin-client``: a command-line administration tool for the node;
|
|
||||||
- ``tezos-baker-alpha``: a client and daemon to bake on the Tezos network;
|
|
||||||
- ``tezos-endorser-alpha``: a client and daemon to bake on the Tezos network;
|
|
||||||
- ``tezos-accuser-alpha``: a client and daemon to bake on the Tezos network;
|
|
||||||
- ``tezos-protocol-compiler``: a protocol compiler used for developing
|
|
||||||
new version of the economic protocol.
|
|
||||||
|
|
||||||
Currently Tezos is being developed for Linux only. It should work on
|
|
||||||
macOS, but it has not been tested recently. A Windows port is feasible
|
|
||||||
and might be developed in the future.
|
|
||||||
|
|
||||||
Note that, when executing ``make build-deps``, OPAM will detect if
|
|
||||||
required system dependencies are installed. However, it is not able to
|
|
||||||
detect which versions you actually have.
|
|
||||||
|
|
||||||
|
|
||||||
Join the Alphanet!
|
|
||||||
------------------
|
|
||||||
|
|
||||||
If you succesfully built Tezos on the *alphanet* or *alphanet-lmdb*
|
|
||||||
branch, then your node is elligible to join Tezos'
|
|
||||||
:ref:`Alphanet<alphanet>`.
|
|
||||||
|
|
||||||
Command-line basics
|
|
||||||
~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
The `tezos-node` executable uses subcommands. You can obtain help on a
|
|
||||||
subcommand by using `./tezos-node <subcommand> --help`. There are
|
|
||||||
three subcommands:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
./tezos-node identity --help
|
|
||||||
./tezos-node config --help
|
|
||||||
./tezos-node run --help
|
|
||||||
|
|
||||||
|
|
||||||
The `identity` and `config` serve the purpose of managing
|
|
||||||
configuration files for the node, we will describe them below. The
|
|
||||||
`run` command is for running the node.
|
|
||||||
|
|
||||||
Pretty much all configuration parameters can be overriden by a
|
|
||||||
command-line argument. Check out `./tezos-node run --help` to discover
|
|
||||||
them.
|
|
||||||
|
|
||||||
Configure your node
|
|
||||||
~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
The following steps are required to connect to Alphanet.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
./tezos-node identity generate
|
|
||||||
|
|
||||||
This will generate a new node identity and compute the associated
|
|
||||||
stamp of proof-of-work. The identity comprises a pair of cryptographic
|
|
||||||
keys that nodes use to encrypt messages sent to each other, and an
|
|
||||||
antispam-PoW stamp proving that enough computing power has been
|
|
||||||
dedicated to creating this identity.
|
|
||||||
|
|
||||||
The identity will be stored in `$HOME/.tezos-node/identity.json`.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
./tezos-node config init
|
|
||||||
|
|
||||||
This will initialize an configuration file for the node in
|
|
||||||
`$HOME/.tezos-node/config.json`, using default values. It only
|
|
||||||
specifies that the node will listen to incoming connections on socket
|
|
||||||
address ``[::]:9732``.
|
|
||||||
|
|
||||||
The easiest way to amend this default configuration is to use
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
# Update the config file
|
|
||||||
./tezos-node config update <…>
|
|
||||||
# Start from an empty cfg file
|
|
||||||
./tezos-node config reset <…>
|
|
||||||
|
|
||||||
|
|
||||||
All blockchain data is stored under ``$HOME/.tezos-node/``. You can
|
|
||||||
change this by doing `./tezos-node config update --data-dir
|
|
||||||
</somewhere/in/your/disk>`.
|
|
||||||
|
|
||||||
To run multiple nodes on the same machine, you can duplicate and edit
|
|
||||||
``$HOME/.tezos-node/config.json`` while making sure they don't share
|
|
||||||
the same ``data-dir``. Then run your node with `./tezos-node
|
|
||||||
run --config-file=</path/to/alternate_cfg>`.
|
|
||||||
|
|
||||||
Lastly, you want to enable RPC communication with clients. Use:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
./tezos-node config update --rpc-addr=127.0.0.1:8732
|
|
||||||
|
|
||||||
This is the default socket address that the client will try, so
|
|
||||||
`./tezos-client` will work out-of-the-box that way.
|
|
||||||
|
|
||||||
Run your node
|
|
||||||
~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
You are all set! Now you just need to do:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
./tezos-node run
|
|
||||||
|
|
||||||
To interact with your node, read the doc of clients:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
./tezos-client man
|
|
||||||
./tezos-admin-client man
|
|
||||||
./tezos-baker-alpha man
|
|
||||||
./tezos-signer man
|
|
||||||
|
|
||||||
And read :ref:`this section<faucet>` to learn how to get alphanet tezzies.
|
|
||||||
|
|
||||||
Use sandboxed mode
|
|
||||||
------------------
|
|
||||||
|
|
||||||
To run a ‘localhost-only’ instance of a Tezos network, we provide two
|
|
||||||
helper scripts:
|
|
||||||
|
|
||||||
- ``./src/bin_node/tezos-sandboxed-node.sh``
|
|
||||||
- ``./src/bin_client/tezos-init-sandboxed-client.sh``
|
|
||||||
|
|
||||||
Run a sandboxed node
|
|
||||||
~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
For instance, if you want to run local network with two nodes, in a
|
|
||||||
first terminal, the following command will initialize a node listening
|
|
||||||
for peers on port ``19731`` and listening for RPC on port ``18731``.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
./src/bin_node/tezos-sandboxed-node.sh 1
|
|
||||||
|
|
||||||
This node will store its data in a temporary directory which will be
|
|
||||||
removed when the node is killed.
|
|
||||||
|
|
||||||
To launch the second node, just run the following command, it will
|
|
||||||
listen on port ``19739`` and ``18739``:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
./src/bin_node/tezos-sandboxed-node.sh 9
|
|
||||||
|
|
||||||
You might replace ``1`` or ``9`` by any number in between if you want to
|
|
||||||
run more than two nodes. But, if you intend to run a single node
|
|
||||||
network, you might remove the spurious “Too few connections” warnings by
|
|
||||||
lowering the number of expected connection, by running the following
|
|
||||||
command instead:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
./src/bin_node/tezos-sandboxed-node.sh 1 --connections 0
|
|
||||||
|
|
||||||
Use the sandboxed client
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Once your node(s) is/are running, open a new terminal and initialize the
|
|
||||||
“sandboxed” client data:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
eval `./src/bin_client/tezos-init-sandboxed-client.sh 1`
|
|
||||||
|
|
||||||
It will initialize the client data in a temporary directory. It will
|
|
||||||
also defines in the current shell session an alias ``tezos-client``
|
|
||||||
preconfigured for communicating the same-numbered node. For instance:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ tezos-client rpc get /chains/main/blocks/head/hash
|
|
||||||
{ "hash": "BLockGenesisGenesisGenesisGenesisGenesisGeneskvg68z" }
|
|
||||||
|
|
||||||
When you bootstrap a new network, the network is initialized with a
|
|
||||||
dummy economic protocol, called “genesis”. If you want to run the same
|
|
||||||
protocol than the alphanet, ``init-sandboxed-client`` also defines an
|
|
||||||
alias ``tezos-activate-alpha``, that you need to execute once for
|
|
||||||
activating the whole network. For instance:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
$ tezos-client rpc get /chains/main/blocks/head/metadata/next_protocol_hash
|
|
||||||
{ "protocol": "ProtoGenesisGenesisGenesisGenesisGenesisGenesk612im" }
|
|
||||||
$ tezos-activate-alpha
|
|
||||||
Injected BMBcK869jaHQDc
|
|
||||||
$ tezos-client rpc get /chains/main/blocks/head/metadata/next_protocol_hash
|
|
||||||
{ "protocol": "ProtoALphaALphaALphaALphaALphaALphaALphaALphaDdp3zK" }
|
|
||||||
|
|
||||||
Tune protocol alpha parameters
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
The ``tezos-active-alpha`` alias use parameters from
|
|
||||||
``scripts/protocol_parameters.json`` to activate protocol alpha. It can
|
|
||||||
be useful to tune these parameters when you need to debug something,
|
|
||||||
for example, change the number of blocks per cycle, the time between
|
|
||||||
blocks, etc.
|
|
||||||
|
|
||||||
Configuration options
|
|
||||||
---------------------
|
|
||||||
|
|
||||||
Here is an example configuration file with all parameters specified.
|
|
||||||
Most of the time it uses default values, except for cases where the
|
|
||||||
default is not explanatory enough (i.e. “bootstrap-peers” is an empty
|
|
||||||
list by default). Comments are not allowed in JSON, so this
|
|
||||||
configuration file would not parse. They are just provided here to help
|
|
||||||
writing your own configuration file if needed.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
{
|
|
||||||
|
|
||||||
/* Location of the data dir on disk. */
|
|
||||||
|
|
||||||
"data-dir": "/home/tezos/my_data_dir"
|
|
||||||
|
|
||||||
/* Configuration of net parameters */
|
|
||||||
|
|
||||||
"net": {
|
|
||||||
|
|
||||||
/* Floating point number between 0 and 256 that represents a
|
|
||||||
difficulty, 24 signifies for example that at least 24 leading
|
|
||||||
zeroes are expected in the hash. */
|
|
||||||
|
|
||||||
"expected-proof-of-work": 24.5,
|
|
||||||
|
|
||||||
/* List of hosts. Tezos can connect to both IPv6 and IPv4
|
|
||||||
hosts. If the port is not specified, default port 9732 will be
|
|
||||||
assumed. */
|
|
||||||
|
|
||||||
"bootstrap-peers": ["::1:10732", "::ffff:192.168.1.3:9733", "mynode.tezos.com"],
|
|
||||||
|
|
||||||
/* Specify if the node is in private mode or not. A node in
|
|
||||||
private mode only opens outgoing connections to peers whose
|
|
||||||
addresses are in [trusted_peers] and only accepts incoming
|
|
||||||
connections from trusted peers. In addition, it informs these
|
|
||||||
peers that the identity of the node should not be revealed to
|
|
||||||
the rest of the network. */
|
|
||||||
|
|
||||||
"private-mode": false,
|
|
||||||
|
|
||||||
/* Network limits */
|
|
||||||
|
|
||||||
"limits": {
|
|
||||||
|
|
||||||
/* Delay granted to a peer to perform authentication, in
|
|
||||||
seconds. */
|
|
||||||
|
|
||||||
"authentication-timeout": 5,
|
|
||||||
|
|
||||||
/* Strict minimum number of connections (triggers an urgent
|
|
||||||
maintenance). */
|
|
||||||
|
|
||||||
"min-connections": 50,
|
|
||||||
|
|
||||||
/* Targeted number of connections to reach when bootstrapping /
|
|
||||||
maintaining. */
|
|
||||||
|
|
||||||
"expected-connections": 100,
|
|
||||||
|
|
||||||
/* Maximum number of connections (exceeding peers are
|
|
||||||
disconnected). */
|
|
||||||
|
|
||||||
"max-connections": 200,
|
|
||||||
|
|
||||||
/* Number above which pending incoming connections are
|
|
||||||
immediately rejected. */
|
|
||||||
|
|
||||||
"backlog": 20,
|
|
||||||
|
|
||||||
/* Maximum allowed number of incoming connections that are
|
|
||||||
pending authentication. */
|
|
||||||
|
|
||||||
"max-incoming-connections": 20,
|
|
||||||
|
|
||||||
/* Max download and upload speeds in KiB/s. */
|
|
||||||
|
|
||||||
"max-download-speed": 1024,
|
|
||||||
"max-upload-speed": 1024,
|
|
||||||
|
|
||||||
/* Size of the buffer passed to read(2). */
|
|
||||||
|
|
||||||
"read-buffer-size": 16384,
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
/* Configuration of rpc parameters */
|
|
||||||
|
|
||||||
"rpc": {
|
|
||||||
|
|
||||||
/* Host to listen to. If the port is not specified, the default
|
|
||||||
port 8732 will be assumed. */
|
|
||||||
|
|
||||||
"listen-addr": "localhost:8733",
|
|
||||||
|
|
||||||
/* Cross Origin Resource Sharing parameters, see
|
|
||||||
https://en.wikipedia.org/wiki/Cross-origin_resource_sharing. */
|
|
||||||
|
|
||||||
"cors-origin": [],
|
|
||||||
"cors-headers": [],
|
|
||||||
|
|
||||||
/* Certificate and key files (necessary when TLS is used). */
|
|
||||||
|
|
||||||
"crt": "tezos-node.crt",
|
|
||||||
"key": "tezos-node.key"
|
|
||||||
},
|
|
||||||
|
|
||||||
/* Configuration of log parameters */
|
|
||||||
|
|
||||||
"log": {
|
|
||||||
|
|
||||||
/* Output for the logging function. Either "stdout", "stderr" or
|
|
||||||
the name of a log file . */
|
|
||||||
|
|
||||||
"output": "tezos-node.log",
|
|
||||||
|
|
||||||
/* Verbosity level: one of 'fatal', 'error', 'warn', 'notice',
|
|
||||||
'info', 'debug'. */
|
|
||||||
|
|
||||||
"level": "info",
|
|
||||||
|
|
||||||
/* Fine-grained logging instructions. Same format as described in
|
|
||||||
`tezos-node run --help`, DEBUG section. In the example below,
|
|
||||||
sections "net" and all sections starting by "client" will have
|
|
||||||
their messages logged up to the debug level, whereas the rest of
|
|
||||||
log sections will be logged up to the notice level. */
|
|
||||||
|
|
||||||
"rules": "client* -> debug, net -> debug, * -> notice",
|
|
||||||
|
|
||||||
/* Format for the log file, see
|
|
||||||
http://ocsigen.org/lwt/dev/api/Lwt_log_core#2_Logtemplates. */
|
|
||||||
|
|
||||||
"template": "$(date) - $(section): $(message)"
|
|
||||||
},
|
|
||||||
|
|
||||||
/* Configuration for the validator and mempool parameters */
|
|
||||||
|
|
||||||
"shell": {
|
|
||||||
|
|
||||||
/* The number of peers to synchronize with
|
|
||||||
before declaring the node 'bootstrapped'. */
|
|
||||||
|
|
||||||
"bootstrap_threshold": 4
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Debugging
|
|
||||||
---------
|
|
||||||
|
|
||||||
It is possible to set independent log levels for different logging
|
|
||||||
sections in Tezos, as well as specifying an output file for logging. See
|
|
||||||
the description of log parameters above as well as documentation under
|
|
||||||
the DEBUG section displayed by `tezos-node run –-help`.
|
|
||||||
|
|
||||||
JSON/RPC interface
|
|
||||||
------------------
|
|
||||||
|
|
||||||
The Tezos node provides a JSON/RPC interface. Note that it is an RPC,
|
|
||||||
and it is JSON based, but it does not follow the “JSON-RPC” protocol. It
|
|
||||||
is not active by default and it must be explicitly activated with the
|
|
||||||
``--rpc-addr`` option. Typically, if you are not trying to run a local
|
|
||||||
network and just want to explore the RPC, you would run:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
./tezos-node run --rpc-addr localhost
|
|
||||||
|
|
||||||
The RPC interface is self-documented and the ``tezos-client`` executable
|
|
||||||
is able to pretty-print the RPC API. For instance, to see the API
|
|
||||||
provided by the Tezos Shell:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
./tezos-client rpc list
|
|
||||||
|
|
||||||
To get API attached to the “genesis” block, including the remote
|
|
||||||
procedures provided by the associated economic protocol version:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
./tezos-client rpc list /blocks/genesis/
|
|
||||||
|
|
||||||
You might also want the JSON schema describing the expected input and
|
|
||||||
output of a RPC. For instance:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
./tezos-client rpc schema /blocks/genesis/hash
|
|
||||||
|
|
||||||
Note: you can get the same information, but as a raw JSON object, with a
|
|
||||||
simple HTTP request:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
wget --post-data '{ "recursive": true }' -O - http://localhost:8732/describe
|
|
||||||
wget --post-data '{ "recursive": true }' -O - http://localhost:8732/describe/blocks/genesis
|
|
||||||
wget -O - http://localhost:8732/describe/blocks/genesis/hash
|
|
||||||
|
|
||||||
The minimal CLI client
|
|
||||||
----------------------
|
|
||||||
|
|
||||||
Tezos is distributed with two command line tools: a minimal command
|
|
||||||
line wallet ``tezos-client``, and an administration tool
|
|
||||||
``tezos-admin-client``.
|
|
||||||
|
|
||||||
Their command line interfaces are described
|
|
||||||
:ref:`here<tezos_client_commands>` and
|
|
||||||
:ref:`here<tezos_admin_client_commands>`.
|
|
182
docs/introduction/howtoget.rst
Normal file
182
docs/introduction/howtoget.rst
Normal file
@ -0,0 +1,182 @@
|
|||||||
|
.. _howtoget:
|
||||||
|
|
||||||
|
How to get Tezos
|
||||||
|
================
|
||||||
|
|
||||||
|
In this How To we explain how to get up-to-date binaries to run Tezos
|
||||||
|
for each network.
|
||||||
|
You can either use the docker images, which is easier, or build from
|
||||||
|
sources.
|
||||||
|
|
||||||
|
|
||||||
|
Docker images
|
||||||
|
-------------
|
||||||
|
|
||||||
|
The recommended way for running an up-to-date Tezos node is to use the
|
||||||
|
docker images that are automatically generated from the GitLab
|
||||||
|
repository and published on `DockerHub
|
||||||
|
<https://hub.docker.com/r/tezos/tezos/>`_.
|
||||||
|
The script ``alphanet.sh`` is provided to help download the right
|
||||||
|
image for each network and run a simple node.
|
||||||
|
Its only requirement is a working installation of `Docker
|
||||||
|
<https://www.docker.com/>`__ and docker compose on a machine with
|
||||||
|
architecture **x86_64**.
|
||||||
|
Although we only officially support Linux, the script has been tested
|
||||||
|
with success in the past on windows/mac/linux.
|
||||||
|
|
||||||
|
The same script can be used to run Alphanet or Zeronet, it suffices to
|
||||||
|
rename it, it downloads a different image based on its name.
|
||||||
|
For example, to run Alphanet:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
wget https://gitlab.com/tezos/tezos/raw/master/scripts/alphanet.sh
|
||||||
|
chmod +x alphanet.sh
|
||||||
|
|
||||||
|
Alternatively, to run Zeronet:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
wget -O zeronet.sh https://gitlab.com/tezos/tezos/raw/master/scripts/alphanet.sh
|
||||||
|
chmod +x zeronet.sh
|
||||||
|
|
||||||
|
In the following we assume you are running Alphanet.
|
||||||
|
|
||||||
|
You are now one step away from a working node:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
./alphanet.sh start
|
||||||
|
|
||||||
|
This will download the right docker image for your chosen network,
|
||||||
|
launch 3 docker containers running the node, the baker and the
|
||||||
|
endorser.
|
||||||
|
The first launch might take a few minutes to download the
|
||||||
|
docker images and synchronize the chain.
|
||||||
|
|
||||||
|
Every call to ``alphanet.sh`` will check for updates of the node and
|
||||||
|
will fail if your node is not up-to-date. For updating the node, simply
|
||||||
|
run:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
./alphanet.sh restart
|
||||||
|
|
||||||
|
If you prefer to temporarily disable automatic updates, you just have to
|
||||||
|
set an environment variable:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
export TEZOS_ALPHANET_DO_NOT_PULL=yes
|
||||||
|
|
||||||
|
See ``./alphanet.sh --help`` for more informations about the
|
||||||
|
script. In particular see ``./alphanet.sh client --help`` or the
|
||||||
|
:ref:`online manual<client_manual>` for more information about
|
||||||
|
the client. Every command to the ``tezos-client`` can be
|
||||||
|
equivalently executed using ``./alphanet.sh client``.
|
||||||
|
|
||||||
|
|
||||||
|
Build from sources
|
||||||
|
------------------
|
||||||
|
|
||||||
|
**TL;DR**: Typically you want to do:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
sudo apt install -y git m4 build-essential patch unzip bubblewrap wget
|
||||||
|
wget https://github.com/ocaml/opam/releases/download/2.0.0/opam-2.0.0-x86_64-linux
|
||||||
|
sudo cp opam-2.0.0-x86_64-linux /usr/local/bin/opam
|
||||||
|
sudo chmod a+x /usr/local/bin/opam
|
||||||
|
git clone https://gitlab.com/tezos/tezos.git
|
||||||
|
cd tezos
|
||||||
|
git checkout alphanet
|
||||||
|
opam init --bare
|
||||||
|
make build-deps
|
||||||
|
eval $(opam env)
|
||||||
|
make
|
||||||
|
export PATH=~/tezos:$PATH
|
||||||
|
source ./src/bin_client/bash-completion.sh
|
||||||
|
export TEZOS_CLIENT_UNSAFE_DISABLE_DISCLAIMER=Y
|
||||||
|
|
||||||
|
|
||||||
|
Environment
|
||||||
|
~~~~~~~~~~~
|
||||||
|
|
||||||
|
Currently Tezos is being developed for Linux x86_64, mostly for
|
||||||
|
Debian/Ubuntu and Archlinux.
|
||||||
|
|
||||||
|
The following OSes are reported to work:
|
||||||
|
|
||||||
|
- macOS/x86_64
|
||||||
|
- Linux/armv7h (32 bits) (Raspberry Pi3, etc.)
|
||||||
|
- Linux/aarch64 (64 bits) (Raspberry Pi3, etc.)
|
||||||
|
|
||||||
|
A Windows port is feasible and might be developed in the future.
|
||||||
|
|
||||||
|
|
||||||
|
Get the sources
|
||||||
|
~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Tezos *git* repository is hosted at `GitLab
|
||||||
|
<https://gitlab.com/tezos/tezos/>`_. All development happens here. Do
|
||||||
|
**not** use our `GitHub mirror <https://github.com/tezos/tezos>`_
|
||||||
|
which we don't use anymore and only mirrors what happens on GitLab.
|
||||||
|
|
||||||
|
You also need to **choose the branch** of the network you want to connect
|
||||||
|
to: *alphanet*, *zeronet* or *betanet*.
|
||||||
|
|
||||||
|
The *master* branch is where code is merged, but there is no test
|
||||||
|
network using the master branch directly.
|
||||||
|
|
||||||
|
|
||||||
|
Install OPAM
|
||||||
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
|
To compile Tezos, you need the `OPAM <https://opam.ocaml.org/>`__
|
||||||
|
package manager, version *2.0.0*. This is the current latest
|
||||||
|
version of OPAM and our build script will always use the latest
|
||||||
|
released version (or prerelease) of OPAM. The build script will take
|
||||||
|
care of setting-up OPAM, download the right version of the OCaml
|
||||||
|
compiler, and so on.
|
||||||
|
|
||||||
|
Use ``opam init --bare`` to avoid compiling the OCaml compiler now: it
|
||||||
|
will be done in the next step.
|
||||||
|
|
||||||
|
|
||||||
|
Install Tezos dependencies with OPAM
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Install the OCaml compiler and the libraries which Tezos depends on:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
make build-deps
|
||||||
|
|
||||||
|
This command creates a local opam switch ``_opam`` where the right
|
||||||
|
version of OCaml is compiled and installed (this takes a while but
|
||||||
|
it's only done once).
|
||||||
|
|
||||||
|
After OCaml it will start with Tezos dependencies, OPAM is able to
|
||||||
|
handle correctly the OCaml libraries but it is not always able to
|
||||||
|
handle all external C libraries we depend on. On most system, it is
|
||||||
|
able to suggest a call to the system package manager but it currently
|
||||||
|
does not handle version check.
|
||||||
|
|
||||||
|
Once the dependencies are done we can update opam's environment to
|
||||||
|
refer to the new switch and compile the project:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
eval $(opam env)
|
||||||
|
make
|
||||||
|
|
||||||
|
Lastly you can also add Tezos binaries to your ``PATH`` variable,
|
||||||
|
activate bash autocompletion and after reading the Disclaimer a few
|
||||||
|
hundred times you are allowed to disable it with
|
||||||
|
``TEZOS_CLIENT_UNSAFE_DISABLE_DISCLAIMER=Y``.
|
||||||
|
|
||||||
|
To add the default opam repository at a lower priority (for example to
|
||||||
|
install or test other opam packages), you can use the following command:
|
||||||
|
|
||||||
|
::
|
||||||
|
opam repo add default --rank=-1
|
196
docs/introduction/howtorun.rst
Normal file
196
docs/introduction/howtorun.rst
Normal file
@ -0,0 +1,196 @@
|
|||||||
|
.. _howtorun:
|
||||||
|
|
||||||
|
How to run Tezos
|
||||||
|
================
|
||||||
|
|
||||||
|
In this section we discuss how to take part in the protocol that runs
|
||||||
|
the network.
|
||||||
|
There are two main ways to participate in the consensus, delegating
|
||||||
|
your coins and running a delegate.
|
||||||
|
To learn more about the protocol refer to :ref:`this section <proof-of-stake>`.
|
||||||
|
|
||||||
|
|
||||||
|
Delegating your coins
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
If you don't want to deal with the complexity of running your own
|
||||||
|
delegate, you can always take part in the protocol by delegating your
|
||||||
|
coins to one.
|
||||||
|
|
||||||
|
Implicit accounts cannot have a delegate, so the first step is to
|
||||||
|
originate an account, transfer your tezzies there and set a delegate.
|
||||||
|
Notice that an originated account is a special case of a contract
|
||||||
|
without code, so it is still necessary to pay for its small storage
|
||||||
|
(see `originated_account`).
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
tezos-client originate account alice_del for alice \
|
||||||
|
transfering 1000 from alice \
|
||||||
|
--delegate bob
|
||||||
|
|
||||||
|
As done before, we originate a contract *alice_del* with manager
|
||||||
|
*alice* and we fund it with 1kꜩ.
|
||||||
|
The interesting part is setting the delegate to *bob*, when
|
||||||
|
originating a contract the delegate is not set by default.
|
||||||
|
If you already own contracts that are delegatable you can change
|
||||||
|
the delegate with the command ``set delegate``.
|
||||||
|
|
||||||
|
Notice that only implicit accounts can be delegates, so your delegate
|
||||||
|
must by a *tz1* address.
|
||||||
|
|
||||||
|
Funds in implicit accounts which are not registered as delegates
|
||||||
|
do not participate in baking.
|
||||||
|
|
||||||
|
|
||||||
|
Running a delegate
|
||||||
|
------------------
|
||||||
|
|
||||||
|
We now explain how to run a delegate, which means running the 3
|
||||||
|
daemons for baking, endorsing and accusing.
|
||||||
|
|
||||||
|
In order to run a delegate you first need to register as one using
|
||||||
|
your implicit account:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
tezos-client register key bob as delegate
|
||||||
|
|
||||||
|
Once registered, a delegate can participate in the network
|
||||||
|
proportionally to how many rolls it is delegated, that is
|
||||||
|
its own balance plus the balance of originated accounts and
|
||||||
|
contracts that are delegated to it.
|
||||||
|
|
||||||
|
Rolls
|
||||||
|
~~~~~
|
||||||
|
|
||||||
|
In the network, rights for baking and endorsing are randomly assigned
|
||||||
|
to delegates proportionally to the number of rolls they have been
|
||||||
|
delegated.
|
||||||
|
A roll is just a block of 10K tezzies.
|
||||||
|
|
||||||
|
To know when you will be allowed to bake in the current cycle, you
|
||||||
|
might try the following RPCs (use ``tezos-client list known
|
||||||
|
addresses`` to check the address of your account *bob*).
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
tezos-client rpc post /chains/main/blocks/head/helpers/rights/baking/delegate/tz1_xxxxxxxxxxx with {}
|
||||||
|
{ "ok":
|
||||||
|
[ { "level": 1400.000000, "priority": 2.000000,
|
||||||
|
"timestamp": "2017-05-19T03:21:52Z" },
|
||||||
|
... ] }
|
||||||
|
|
||||||
|
When you obtain Alphanet coins from :ref:`the faucet<faucet>`, if you
|
||||||
|
are lucky to obtain more than one roll, you can register a delegate
|
||||||
|
using this identity.
|
||||||
|
Otherwise, you need to ask the faucet for more accounts, orginate a
|
||||||
|
account for each one and delegate them to the first.
|
||||||
|
|
||||||
|
|
||||||
|
Deposits
|
||||||
|
~~~~~~~~
|
||||||
|
|
||||||
|
When baking or endorsing a block, a *security deposit* (or *bond*) is
|
||||||
|
frozen for ``preserved_cycles`` cycles from the account of the
|
||||||
|
delegate.
|
||||||
|
Hence a delegate must have enough funds to be able to pay security
|
||||||
|
deposits for all the blocks it can potentially bake/endorse during
|
||||||
|
``preserved_cycles``.
|
||||||
|
The current deposits are *512tz* for baked block and *64tz* for
|
||||||
|
endorsement.
|
||||||
|
|
||||||
|
Being delegated coins doesn't mean that a delegate can spend them,
|
||||||
|
they only add up to its rolls count.
|
||||||
|
All the deposits that are necessary to run the deamons can only be put
|
||||||
|
down from the delegate account.
|
||||||
|
|
||||||
|
|
||||||
|
Baker
|
||||||
|
~~~~~
|
||||||
|
|
||||||
|
The baker is a daemon that once connected to an account, computes the
|
||||||
|
baking rights for that account, collects transactions from the mempool
|
||||||
|
and bakes a block at priority zero.
|
||||||
|
Note that the baker is the only program that needs direct access to
|
||||||
|
the node data directory for performance reasons.
|
||||||
|
|
||||||
|
Let's launch the daemon pointing to the standard node directory and
|
||||||
|
baking for user *bob*:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
tezos-baker-alpha run with local node ~/.tezos-node bob
|
||||||
|
|
||||||
|
Endorser
|
||||||
|
~~~~~~~~
|
||||||
|
|
||||||
|
The endorser is a daemon that once connected to an account, computes
|
||||||
|
the endorsing rights for that account and, upon reception of a new
|
||||||
|
block, verifies the validity of the block and emits an endorsement
|
||||||
|
operation.
|
||||||
|
It can endorse for a specific account or if omitted it endorses for
|
||||||
|
all accounts.
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
tezos-endorser-alpha run
|
||||||
|
|
||||||
|
|
||||||
|
Accuser
|
||||||
|
~~~~~~~
|
||||||
|
|
||||||
|
The accuser is a daemon that monitors all blocks received on all
|
||||||
|
chains and looks for:
|
||||||
|
|
||||||
|
* bakers who signed two blocks at the same level
|
||||||
|
* endorsers who injected more than one endorsement operation for the
|
||||||
|
same baking slot (more details :ref:`here<proof-of-stake>`)
|
||||||
|
|
||||||
|
Upon finding such irregularity, it will emit respectively a
|
||||||
|
double-baking or double-endorsing denunciation operation, which will
|
||||||
|
cause the offender to loose its security deposit.
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
tezos-accuser-alpha run
|
||||||
|
|
||||||
|
Remember that having two bakers or endorsers running connected to the
|
||||||
|
same account could lead to double baking/endorsing and the loss of all
|
||||||
|
your bonds.
|
||||||
|
If you are worried about availability of your node when is its turn to
|
||||||
|
bake/endorse there are other ways than duplicating your credentials.
|
||||||
|
**Never** use the same account on two daemons.
|
||||||
|
|
||||||
|
|
||||||
|
Rewards
|
||||||
|
~~~~~~~
|
||||||
|
|
||||||
|
After ``preserved_cycles``, not only the delegate takes back control of
|
||||||
|
its frozen deposits but it also receives the rewards for its hard work
|
||||||
|
which amount to 16ꜩ to bake a block and ``ꜩ2 / <block_priority>`` for
|
||||||
|
endorsing a block.
|
||||||
|
|
||||||
|
|
||||||
|
Docker
|
||||||
|
~~~~~~
|
||||||
|
|
||||||
|
The docker image runs the daemons by default for all your keys.
|
||||||
|
To know if you baked, just run:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
./alphanet.sh baker log
|
||||||
|
./alphanet.sh endorser log
|
||||||
|
|
||||||
|
You should see lines such as:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
Injected block BLxzbB7PBW1axq for bootstrap5 after BLSrg4dXzL2aqq (level 1381, slot 0, fitness 00::0000000000005441, operations 21)
|
||||||
|
|
||||||
|
Or:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
Injected endorsement for block 'BLSrg4dXzL2aqq' (level 1381, slot 3, contract bootstrap5) 'oo524wKiEWBoPD'
|
467
docs/introduction/howtouse.rst
Normal file
467
docs/introduction/howtouse.rst
Normal file
@ -0,0 +1,467 @@
|
|||||||
|
.. _howtouse:
|
||||||
|
|
||||||
|
How to use Tezos
|
||||||
|
================
|
||||||
|
|
||||||
|
This How To illustrates the use of the various Tezos binaries as well
|
||||||
|
as some concepts about the network.
|
||||||
|
|
||||||
|
The binaries
|
||||||
|
------------
|
||||||
|
|
||||||
|
After a successful compilation, you should have the following binaries:
|
||||||
|
|
||||||
|
- ``tezos-node``: the tezos daemon itself;
|
||||||
|
- ``tezos-client``: a command-line client and basic wallet;
|
||||||
|
- ``tezos-admin-client``: administration tool for the node;
|
||||||
|
- ``tezos-{baker,endorser,accuser}-alpha``: daemons to bake, endorse
|
||||||
|
and accuse on the Tezos network (see :ref:`howtorun`);
|
||||||
|
- ``tezos-signer``: a client to remotely sign operations or blocks
|
||||||
|
(see :ref:`signer`);
|
||||||
|
- ``tezos-protocol-compiler``: a protocol compiler used for developing
|
||||||
|
new version of the economic protocol.
|
||||||
|
|
||||||
|
|
||||||
|
Read The Friendly Manual
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
The manual of each binary can be obtained with the command ``man`` and
|
||||||
|
the verbosity can be increased with ``-v``.
|
||||||
|
To use one specific command, type the command without arguments to see
|
||||||
|
possible completions and options.
|
||||||
|
It is also possible to search a keyword in the manual with ``man
|
||||||
|
keyword``.
|
||||||
|
The full documentation is also available online :ref:`client_manual`.
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
tezos-client man -v 3
|
||||||
|
tezos-client transfer
|
||||||
|
tezos-client man set
|
||||||
|
|
||||||
|
|
||||||
|
Node
|
||||||
|
----
|
||||||
|
|
||||||
|
The node is effectively the Tezos block-chain and it has two main
|
||||||
|
functions: running the gossip network and the updating the context.
|
||||||
|
The gossip network is where all Tezos nodes exchange blocks and
|
||||||
|
operations with each other (see :ref:`tezos-admin-client` to monitor
|
||||||
|
p2p connections).
|
||||||
|
Using this peer-to-peer network an operation originated by a user, can
|
||||||
|
hop several times through other nodes until it finds its way in a
|
||||||
|
block baked by a baker.
|
||||||
|
Using the blocks it receives on the gossip network the shell also
|
||||||
|
keeps up to date the current `context`, that is the full state of
|
||||||
|
the block-chain shared by all peers.
|
||||||
|
Approximately every minute a new block is created and, when the shell
|
||||||
|
receives it, it applies each operation in the block to its current
|
||||||
|
context and computes a new context.
|
||||||
|
The last block received on a chain is also called the `head` of that
|
||||||
|
chain.
|
||||||
|
Each new head is then advertised by the node to its peers,
|
||||||
|
disseminating this information to build a consensus across the
|
||||||
|
network.
|
||||||
|
|
||||||
|
Other than passively observing the network, your node can also inject
|
||||||
|
its own new operations when instructed by the ``tezos-client`` and even
|
||||||
|
send new blocks when guided by the ``tezos-baker-alpha``.
|
||||||
|
The node has also a view of the multiple chains that may exist
|
||||||
|
concurrently and selects the best one based on its fitness (see
|
||||||
|
:ref:`proof-of-stake`).
|
||||||
|
|
||||||
|
|
||||||
|
Node identity
|
||||||
|
~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
First we need to generate a new identity in order for the node to
|
||||||
|
connect to the network:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
tezos-node identity generate
|
||||||
|
|
||||||
|
The identity comprises a pair of cryptographic
|
||||||
|
keys that nodes use to encrypt messages sent to each other, and an
|
||||||
|
antispam-PoW stamp proving that enough computing power has been
|
||||||
|
dedicated to creating this identity.
|
||||||
|
Note that this is merely a network identity and it is not related in
|
||||||
|
any way to a Tezos address on the block-chain.
|
||||||
|
|
||||||
|
|
||||||
|
Storage
|
||||||
|
~~~~~~~
|
||||||
|
|
||||||
|
All block-chain data is stored under ``$HOME/.tezos-node/``.
|
||||||
|
If for some reason your node is misbehaving or there has been an
|
||||||
|
upgrade of the network, it is safe to remove this directory, it just
|
||||||
|
means that your node will take some time to resync the chain.
|
||||||
|
You can keep ``identity.json`` if it takes a long time for you to
|
||||||
|
compute it and only remove the ``store`` and ``context`` directories.
|
||||||
|
|
||||||
|
If you are also running a baker make sure that it has access to the
|
||||||
|
``.tezos-node`` directory of the node.
|
||||||
|
|
||||||
|
|
||||||
|
RPC interface
|
||||||
|
~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
The only interface to the node is through Json RPC calls and it is disabled by
|
||||||
|
default. A more detailed documentation can be found in the :ref:`RPC index.
|
||||||
|
<rpc>` The RPC interface must be enable in order for the clients
|
||||||
|
to communicate with the node, but is should not be publically accessible on the
|
||||||
|
internet. With the following command it is available uniquely on the
|
||||||
|
`localhost` address of your machine.
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
tezos-node run --rpc-addr [::]
|
||||||
|
|
||||||
|
You can read more about the :ref:`node configuration <node-conf>` and
|
||||||
|
its :ref:`private mode <private-mode>`.
|
||||||
|
|
||||||
|
|
||||||
|
Client
|
||||||
|
------
|
||||||
|
|
||||||
|
Tezos client can be used to interact with the node, it can query its
|
||||||
|
status or ask the node to perform some actions.
|
||||||
|
For example after starting your node you can check if it has finished
|
||||||
|
synchronizing using
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
tezos-client bootstrapped
|
||||||
|
|
||||||
|
This call will hang and return only when the node is synchronized.
|
||||||
|
We can now check what is the current timestamp of the head of the
|
||||||
|
chain (time is in UTC so it may differ from your local):
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
tezos-client get timestamp
|
||||||
|
|
||||||
|
|
||||||
|
A simple wallet
|
||||||
|
~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
The client is also a basic wallet and after the activation above you
|
||||||
|
will notice that the directory ``.tezos-client`` has been populated with
|
||||||
|
3 files ``public_key_hashs``, ``public_keys`` and ``secret_keys``.
|
||||||
|
The content of each file is in json and keeps the mapping between
|
||||||
|
aliases (``alice`` in our case) and what you would expect from the name
|
||||||
|
of the file.
|
||||||
|
Secret keys are stored on disk encrypted with a password except when
|
||||||
|
using a hardware wallet (see :ref:`ledger`).
|
||||||
|
An additional file ``contracts`` contains the addresses of `originated
|
||||||
|
contracts`, which have the form *KT1…*.
|
||||||
|
|
||||||
|
We can for example generate a new pair of keys, which can used locally
|
||||||
|
with the alias *bob*:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
$ tezos-client gen keys bob
|
||||||
|
|
||||||
|
Tezos support three different ECC schemes: *Ed25519*, *secp256k1* (the
|
||||||
|
one used in Bitcoin), and *P-256* (also called *secp256r1*). The two
|
||||||
|
latter curves have been added for interoperability with Bitcoin and
|
||||||
|
Hardware Security Modules (*HSMs*) mostly. Unless your use case
|
||||||
|
require those, you should probably use *Ed25519*. We use a verified
|
||||||
|
library for Ed25519, and it is generally recommended over other curves
|
||||||
|
by the crypto community, for performance and security reasons.
|
||||||
|
|
||||||
|
Make sure to make a back-up of this directory and that the password
|
||||||
|
protecting your secret keys is properly managed.
|
||||||
|
|
||||||
|
For more advanced key management we offer :ref:`ledger support
|
||||||
|
<ledger>` and a :ref:`remote signer<signer>`.
|
||||||
|
|
||||||
|
|
||||||
|
.. _faucet:
|
||||||
|
|
||||||
|
Get free Tezzies
|
||||||
|
~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
In order to test the networks and help users get familiar with the
|
||||||
|
system, on Zeronet and Alphanet you can obtain free Tezzies from a
|
||||||
|
`faucet <https://faucet.tzalpha.net>`__.
|
||||||
|
|
||||||
|
This will provide a wallet in the form of a JSON file
|
||||||
|
``tz1__xxxxxxxxx__.json``, that can be activated with the following
|
||||||
|
command:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
tezos-client activate account alice with "tz1__xxxxxxxxx__.json"
|
||||||
|
|
||||||
|
If you use the ``alphanet.sh`` script, you should prefix the file
|
||||||
|
with ``container:`` in order to copy it into the docker image:
|
||||||
|
``./alphanet.sh client activate account alice with "container:tz1__xxxxxxxxx__.json"``
|
||||||
|
|
||||||
|
Let's check the balance of the new account with:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
tezos-client get balance for alice
|
||||||
|
|
||||||
|
Please preserve the JSON file, after each reset of Zeronet or
|
||||||
|
Alphanet, you will have to reactivate the wallet.
|
||||||
|
|
||||||
|
Please drink carefully and don't abuse the faucet: it only contains
|
||||||
|
30.000 wallets for a total amount of ꜩ760.000.000.
|
||||||
|
|
||||||
|
|
||||||
|
Transactions
|
||||||
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Let's transfer some tezzies to the new account:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
tezos-client transfer 1 from alice to bob --fee 0.05
|
||||||
|
|
||||||
|
The ``transfer`` command returns a receipt with all the details of the
|
||||||
|
transaction, including its hash, and then waits for the operation to
|
||||||
|
be included in one block.
|
||||||
|
If you want to simulate a transaction without actually sending it to
|
||||||
|
the network you can use the ``--dry-run`` option.
|
||||||
|
As in any block-chain it is advisable to wait several blocks to
|
||||||
|
consider the transaction as final, we can do that with:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
tezos-client wait for <operation hash> to be included
|
||||||
|
|
||||||
|
|
||||||
|
Receipts for operations and blocks
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
After an operation the client prints a `receipt` that recapitulates
|
||||||
|
the effects of the operation on the block-chain.
|
||||||
|
It is possible to review the receipt of a transaction with:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
tezos-client rpc get /chains/main/blocks/head/operations
|
||||||
|
|
||||||
|
A manager operation, such as a transaction, has 3 important
|
||||||
|
parameters: counter, gas and storage limit.
|
||||||
|
The counter belongs to each account, it increases at each operation
|
||||||
|
signed by that account and enforces some good intuitive properties:
|
||||||
|
|
||||||
|
- each operation is unique: for example if we perform twice the same
|
||||||
|
transfer from *alice* to *bob*, even if all the data are the
|
||||||
|
same the counter will be different.
|
||||||
|
- each operation is applied once: for example if the transfer above
|
||||||
|
reaches two peers and they both send it to a third peer, it will not
|
||||||
|
apply the transaction twice.
|
||||||
|
- operations are applied in order: if we emit a transaction towards
|
||||||
|
*bob* and a transaction from *bob* to *test3*, we can be sure
|
||||||
|
that the second transaction will be applied only after *bob*
|
||||||
|
received its funds otherwise it may fail for insufficient balance.
|
||||||
|
- all previous operations have been applied: if we emit operation *n*
|
||||||
|
and *n+1*, and *n* gets lost then *n+1* cannot be applied.
|
||||||
|
|
||||||
|
Additionally each operation needs to declare a gas and storage limit,
|
||||||
|
if an operations consumes more than this limits it will fail.
|
||||||
|
Later we'll learn more about the gas and storage model.
|
||||||
|
|
||||||
|
Another interesting field of the receipts are the `balance updates`
|
||||||
|
showing which account was credited or debited.
|
||||||
|
For the transaction above the updates are symmetrical, *alice* is
|
||||||
|
debited 1ꜩ and *bob* is credited the same amount.
|
||||||
|
The same is true for the fees with the difference that the baker is
|
||||||
|
credited and, more importantly, it is not credited immediately on its
|
||||||
|
main account but on its frozen fees account, hence the category
|
||||||
|
`freezer`.
|
||||||
|
Each delegate has 3 frozen accounts: `deposits`, `fees` and `rewards`.
|
||||||
|
They are frozen because the delegate can't use them for now, but only
|
||||||
|
after a number cycles.
|
||||||
|
|
||||||
|
It is also possible to review the receipt of the whole block:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
tezos-client rpc get /chains/main/blocks/head/metadata
|
||||||
|
|
||||||
|
Here we always see the deposit that the baker had to put down to bake
|
||||||
|
the block, which is again a debit on its main account paired with a
|
||||||
|
credit on its `deposits` account, and the creation of a reward, which
|
||||||
|
is a single credit to its `rewards` account.
|
||||||
|
|
||||||
|
An interesting block receipt is the one produced at the end of a
|
||||||
|
cycle as many delegates receive back part of their unfrozen accounts.
|
||||||
|
|
||||||
|
|
||||||
|
.. _originated_accounts:
|
||||||
|
|
||||||
|
Originated accounts and Contracts
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
In Tezos there are two kinds of accounts: *implicit* and *originated*.
|
||||||
|
The implicit accounts are the *tz1* we have used up to now and to
|
||||||
|
create them if suffices to have a pair of keys and to transfer some
|
||||||
|
funds to the public key hash.
|
||||||
|
Originated accounts have addresses *KT1* and are created through an
|
||||||
|
origination operation.
|
||||||
|
One reason to originate an account is to delegate your tokens
|
||||||
|
(see more :ref:`here. <howtorun>`).
|
||||||
|
The other main reason is that an originated account can also have
|
||||||
|
Michelson code, in which case it is called a *contract*.
|
||||||
|
|
||||||
|
Let's originate our first contract and call it *id*:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
tezos-client originate contract id for alice \
|
||||||
|
transferring 1 from alice \
|
||||||
|
running ./src/bin_client/test/contracts/id.tz \
|
||||||
|
--init '"hello"'
|
||||||
|
|
||||||
|
We set *alice* as manager, a 1ꜩ starting balance generously provided
|
||||||
|
by *alice* and the code from the ``id.tz`` Michelson program which
|
||||||
|
is just the identity.
|
||||||
|
Every program declares in its first 2 lines the type of its parameter
|
||||||
|
and storage, for *id* they are both strings so we initialize the
|
||||||
|
contract with the string ``"hello"`` (the extra quotes are to avoid
|
||||||
|
the shell expansion).
|
||||||
|
|
||||||
|
Gas and storage cost model
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
A quick look at the balance updates on the receipt shows that on top of
|
||||||
|
funding the contract with 1ꜩ, *alice* was also charged an extra cost
|
||||||
|
that is burnt.
|
||||||
|
This cost comes from the *storage* and it's shown in the line
|
||||||
|
``Paid storage size diff: 46 bytes``, 41 for the contract and 5 for
|
||||||
|
the string ``"hello"``.
|
||||||
|
Given that a contract saves it's data on the public block-chain that
|
||||||
|
every node stores, it is necessary to charge a fee per byte to avoid
|
||||||
|
abuse and encourage lean programs.
|
||||||
|
|
||||||
|
Let's see what calling a program with a new argument would look like
|
||||||
|
with the ``--dry-run`` option:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
tezos-client transfer 0 from alice to id --arg '"world"' --dry-run
|
||||||
|
|
||||||
|
The transaction would successfully update the storage but this time it
|
||||||
|
wouldn't cost us anything more than the fee, the reason is that the
|
||||||
|
storage for ``"world"`` is the same as for ``"hello"``, which has
|
||||||
|
already been paid for.
|
||||||
|
To store more we'll need to pay more, you can try by passing a longer
|
||||||
|
string.
|
||||||
|
|
||||||
|
The other cost associated with running contracts is the *gas*, which
|
||||||
|
measures *how long* does a program take to compute.
|
||||||
|
Contrary to storage there is no cost per gas unit, a transfer can
|
||||||
|
require as much gas as it wants, however a baker that has to choose
|
||||||
|
among several transactions is much more likely to include a low gas
|
||||||
|
one because it's cheaper to run and validate.
|
||||||
|
At the same time bakers also give priority to high fee transactions.
|
||||||
|
This means that there is an implicit cost for gas that is related to
|
||||||
|
the fee offered versus the gas and fees of other transactions.
|
||||||
|
|
||||||
|
If you are happy with the gas and storage of your transaction you can
|
||||||
|
run it for real, however it is always a good idea to set explicit
|
||||||
|
limit for both. The transaction fails if the limits are passed.
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
tezos-client transfer 0 from alice to id --arg '"world"' \
|
||||||
|
--gas-limit 1475 \
|
||||||
|
--storage-limit 46
|
||||||
|
|
||||||
|
A baker is more likely to include an operation with lower gas and
|
||||||
|
storage limits because it takes less resources to execute so it is in
|
||||||
|
the best interest of the user to pick limits that are as close as
|
||||||
|
possible to the actual use.
|
||||||
|
|
||||||
|
More test contracts can be found in directory
|
||||||
|
:src:`src/bin_client/test/contracts/`.
|
||||||
|
An advanced documentation of the smart contract language is available
|
||||||
|
:ref:`here<michelson>`.
|
||||||
|
For details and examples, see also https://www.michelson-lang.com/
|
||||||
|
|
||||||
|
|
||||||
|
Validation
|
||||||
|
~~~~~~~~~~
|
||||||
|
|
||||||
|
The node allows to validate an operation before submitting it to the
|
||||||
|
network by simply simulating the application of the operation to the
|
||||||
|
current context.
|
||||||
|
In general if you just send an invalid operation e.g. sending more
|
||||||
|
tokens that what you own, the node will broadcast it and when it is
|
||||||
|
included in a block you'll have to pay the usual fee even if it won't
|
||||||
|
have an affect on the context.
|
||||||
|
To avoid this case the client first asks the node to validate the
|
||||||
|
transaction and then sends it.
|
||||||
|
|
||||||
|
The same validation is used when you pass the option ``--dry-run``,
|
||||||
|
the receipt that you see is actually a simulated one.
|
||||||
|
|
||||||
|
Another important use of validation is to determine gas and storage
|
||||||
|
limits.
|
||||||
|
The node first simulates the execution of a Michelson program and
|
||||||
|
takes trace of the amount of gas and storage.
|
||||||
|
Then the client sends the transaction with the right limits for gas
|
||||||
|
and storage based on that indicated by the node.
|
||||||
|
This is why we were able to submit transactions without specifying
|
||||||
|
this limits, they were computed for us.
|
||||||
|
|
||||||
|
More information on validation can be found :ref:`here. <validation>`
|
||||||
|
|
||||||
|
It's RPCs all the way down
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
The client communicates with the node uniquely through RPC calls so
|
||||||
|
make sure that the node is listening and that the ports are
|
||||||
|
correct.
|
||||||
|
For example the ``bootstrapped`` command above is a shortcut for:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
tezos-client rpc get /monitor/bootstrapped
|
||||||
|
|
||||||
|
The client tries to simplify common tasks as much as possible, however
|
||||||
|
if you want to query the node for more specific informations you'll
|
||||||
|
have to resort to RPCs.
|
||||||
|
For example to check the value of important constants in Tezos, which
|
||||||
|
may differ between Betanet, Alphanet and Zeronet, you can use:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
tezos-client rpc get /chains/main/blocks/head/context/constants | jq
|
||||||
|
{
|
||||||
|
"proof_of_work_nonce_size": 8,
|
||||||
|
"nonce_length": 32,
|
||||||
|
"max_revelations_per_block": 32,
|
||||||
|
"max_operation_data_length": 16384,
|
||||||
|
"preserved_cycles": 5,
|
||||||
|
"blocks_per_cycle": 4096,
|
||||||
|
"blocks_per_commitment": 32,
|
||||||
|
"blocks_per_roll_snapshot": 256,
|
||||||
|
"blocks_per_voting_period": 32768,
|
||||||
|
"time_between_blocks": [
|
||||||
|
"60",
|
||||||
|
"75"
|
||||||
|
],
|
||||||
|
"endorsers_per_block": 32,
|
||||||
|
"hard_gas_limit_per_operation": "400000",
|
||||||
|
"hard_gas_limit_per_block": "4000000",
|
||||||
|
"proof_of_work_threshold": "70368744177663",
|
||||||
|
"tokens_per_roll": "10000000000",
|
||||||
|
"michelson_maximum_type_size": 1000,
|
||||||
|
"seed_nonce_revelation_tip": "125000",
|
||||||
|
"origination_burn": "257000",
|
||||||
|
"block_security_deposit": "48000000",
|
||||||
|
"endorsement_security_deposit": "6000000",
|
||||||
|
"block_reward": "0",
|
||||||
|
"endorsement_reward": "0",
|
||||||
|
"cost_per_byte": "1000",
|
||||||
|
"hard_storage_limit_per_operation": "60000"
|
||||||
|
}
|
||||||
|
|
||||||
|
You can find more info in the :ref:`RPCs' page. <rpc>`
|
286
docs/introduction/various.rst
Normal file
286
docs/introduction/various.rst
Normal file
@ -0,0 +1,286 @@
|
|||||||
|
Various
|
||||||
|
=======
|
||||||
|
|
||||||
|
.. _tezos-admin-client:
|
||||||
|
|
||||||
|
Admin Client
|
||||||
|
------------
|
||||||
|
|
||||||
|
The admin client gives access to more commands to interact with the
|
||||||
|
peer-to-peer layer in order to:
|
||||||
|
|
||||||
|
- check the status of the connections
|
||||||
|
- force connections to known peers
|
||||||
|
- ban/unban peers
|
||||||
|
|
||||||
|
A useful command to debug a node that is not syncing is:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
tezos-admin-client p2p stat
|
||||||
|
|
||||||
|
|
||||||
|
Use sandboxed mode
|
||||||
|
------------------
|
||||||
|
|
||||||
|
To run a ‘localhost-only’ instance of a Tezos network, we provide two
|
||||||
|
helper scripts:
|
||||||
|
|
||||||
|
- ``./src/bin_node/tezos-sandboxed-node.sh``
|
||||||
|
- ``./src/bin_client/tezos-init-sandboxed-client.sh``
|
||||||
|
|
||||||
|
|
||||||
|
Run a sandboxed node
|
||||||
|
~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
For instance, if you want to run local network with two nodes, in a
|
||||||
|
first terminal, the following command will initialize a node listening
|
||||||
|
for peers on port ``19731`` and listening for RPC on port ``18731``.
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
./src/bin_node/tezos-sandboxed-node.sh 1 --connections 1
|
||||||
|
|
||||||
|
This node will store its data in a temporary directory
|
||||||
|
``/tmp/tezos-node.xxxxxxxx`` which will be removed when the node is
|
||||||
|
stopped.
|
||||||
|
The option ``--connections`` is just to remove the spurious “Too few
|
||||||
|
connections” warnings by lowering the number of expected connection.
|
||||||
|
|
||||||
|
To launch the second node, just run the following command, it will
|
||||||
|
listen on port ``19739`` and ``18739``:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
./src/bin_node/tezos-sandboxed-node.sh 9 --connections 1
|
||||||
|
|
||||||
|
You might replace ``1`` or ``9`` by any number in between if you want to
|
||||||
|
run more than two nodes.
|
||||||
|
|
||||||
|
|
||||||
|
Use the sandboxed client
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Once your node is running, open a new terminal and initialize the
|
||||||
|
“sandboxed” client data in a temporary directory:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
eval `./src/bin_client/tezos-init-sandboxed-client.sh 1`
|
||||||
|
|
||||||
|
It also define in the current shell session an alias ``tezos-client``
|
||||||
|
preconfigured for communicating with the same-numbered node.
|
||||||
|
|
||||||
|
When you bootstrap a new network, the network is initialized with a
|
||||||
|
dummy economic protocol, called `genesis`. If you want to run the same
|
||||||
|
protocol than the alphanet, ``init-sandboxed-client`` also defines an
|
||||||
|
alias ``tezos-activate-alpha``, that you need to execute once for
|
||||||
|
activating the whole network.
|
||||||
|
For instance:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
$ tezos-client rpc get /chains/main/blocks/head/metadata
|
||||||
|
"next_protocol": "Ps9mPmXaRzmzk35gbAYNCAw6UXdE2qoABTHbN2oEEc1qM7CwT9P"
|
||||||
|
$ tezos-activate-alpha
|
||||||
|
Injected BMV9KnSPE1yw
|
||||||
|
$ tezos-client rpc get /chains/main/blocks/head/metadata/next_protocol_hash
|
||||||
|
"protocol": "Ps9mPmXaRzmzk35gbAYNCAw6UXdE2qoABTHbN2oEEc1qM7CwT9P"
|
||||||
|
|
||||||
|
Tune protocol alpha parameters
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
The ``tezos-active-alpha`` alias use parameters from
|
||||||
|
``scripts/protocol_parameters.json`` to activate protocol alpha. It can
|
||||||
|
be useful to tune these parameters when you need to debug something,
|
||||||
|
for example, change the number of blocks per cycle, the time between
|
||||||
|
blocks, etc.
|
||||||
|
|
||||||
|
|
||||||
|
.. _node-conf:
|
||||||
|
|
||||||
|
Configuration options for the node
|
||||||
|
----------------------------------
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
./tezos-node config init
|
||||||
|
|
||||||
|
This will initialize a configuration file for the node in
|
||||||
|
`$HOME/.tezos-node/config.json`, using default values. It only
|
||||||
|
specifies that the node will listen to incoming connections on socket
|
||||||
|
address ``[::]:9732``.
|
||||||
|
|
||||||
|
The easiest way to amend this default configuration is to use
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
# Update the config file
|
||||||
|
./tezos-node config update <…>
|
||||||
|
# Start from an empty cfg file
|
||||||
|
./tezos-node config reset <…>
|
||||||
|
|
||||||
|
|
||||||
|
All blockchain data is stored under ``$HOME/.tezos-node/``. You can
|
||||||
|
change this by doing `./tezos-node config update --data-dir
|
||||||
|
</somewhere/in/your/disk>`.
|
||||||
|
|
||||||
|
To run multiple nodes on the same machine, you can duplicate and edit
|
||||||
|
``$HOME/.tezos-node/config.json`` while making sure they don't share
|
||||||
|
the same ``data-dir``. Then run your node with `./tezos-node
|
||||||
|
run --config-file=</path/to/alternate_cfg>`.
|
||||||
|
|
||||||
|
Here is an example configuration file with all parameters specified.
|
||||||
|
Most of the time it uses default values, except for cases where the
|
||||||
|
default is not explanatory enough (i.e. “bootstrap-peers” is an empty
|
||||||
|
list by default). Comments are not allowed in JSON, so this
|
||||||
|
configuration file would not parse. They are just provided here to help
|
||||||
|
writing your own configuration file if needed.
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
/* Location of the data dir on disk. */
|
||||||
|
|
||||||
|
"data-dir": "/home/tezos/my_data_dir"
|
||||||
|
|
||||||
|
/* Configuration of net parameters */
|
||||||
|
|
||||||
|
"net": {
|
||||||
|
|
||||||
|
/* Floating point number between 0 and 256 that represents a
|
||||||
|
difficulty, 24 signifies for example that at least 24 leading
|
||||||
|
zeroes are expected in the hash. */
|
||||||
|
|
||||||
|
"expected-proof-of-work": 24.5,
|
||||||
|
|
||||||
|
/* List of hosts. Tezos can connect to both IPv6 and IPv4
|
||||||
|
hosts. If the port is not specified, default port 9732 will be
|
||||||
|
assumed. */
|
||||||
|
|
||||||
|
"bootstrap-peers": ["::1:10732", "::ffff:192.168.1.3:9733", "mynode.tezos.com"],
|
||||||
|
|
||||||
|
/* Specify if the node is in private mode or not. A node in
|
||||||
|
private mode only opens outgoing connections to peers whose
|
||||||
|
addresses are in [trusted_peers] and only accepts incoming
|
||||||
|
connections from trusted peers. In addition, it informs these
|
||||||
|
peers that the identity of the node should not be revealed to
|
||||||
|
the rest of the network. */
|
||||||
|
|
||||||
|
"private-mode": false,
|
||||||
|
|
||||||
|
/* Network limits */
|
||||||
|
|
||||||
|
"limits": {
|
||||||
|
|
||||||
|
/* Delay granted to a peer to perform authentication, in
|
||||||
|
seconds. */
|
||||||
|
|
||||||
|
"authentication-timeout": 5,
|
||||||
|
|
||||||
|
/* Strict minimum number of connections (triggers an urgent
|
||||||
|
maintenance). */
|
||||||
|
|
||||||
|
"min-connections": 50,
|
||||||
|
|
||||||
|
/* Targeted number of connections to reach when bootstrapping /
|
||||||
|
maintaining. */
|
||||||
|
|
||||||
|
"expected-connections": 100,
|
||||||
|
|
||||||
|
/* Maximum number of connections (exceeding peers are
|
||||||
|
disconnected). */
|
||||||
|
|
||||||
|
"max-connections": 200,
|
||||||
|
|
||||||
|
/* Number above which pending incoming connections are
|
||||||
|
immediately rejected. */
|
||||||
|
|
||||||
|
"backlog": 20,
|
||||||
|
|
||||||
|
/* Maximum allowed number of incoming connections that are
|
||||||
|
pending authentication. */
|
||||||
|
|
||||||
|
"max-incoming-connections": 20,
|
||||||
|
|
||||||
|
/* Max download and upload speeds in KiB/s. */
|
||||||
|
|
||||||
|
"max-download-speed": 1024,
|
||||||
|
"max-upload-speed": 1024,
|
||||||
|
|
||||||
|
/* Size of the buffer passed to read(2). */
|
||||||
|
|
||||||
|
"read-buffer-size": 16384,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/* Configuration of rpc parameters */
|
||||||
|
|
||||||
|
"rpc": {
|
||||||
|
|
||||||
|
/* Host to listen to. If the port is not specified, the default
|
||||||
|
port 8732 will be assumed. */
|
||||||
|
|
||||||
|
"listen-addr": "localhost:8733",
|
||||||
|
|
||||||
|
/* Cross Origin Resource Sharing parameters, see
|
||||||
|
https://en.wikipedia.org/wiki/Cross-origin_resource_sharing. */
|
||||||
|
|
||||||
|
"cors-origin": [],
|
||||||
|
"cors-headers": [],
|
||||||
|
|
||||||
|
/* Certificate and key files (necessary when TLS is used). */
|
||||||
|
|
||||||
|
"crt": "tezos-node.crt",
|
||||||
|
"key": "tezos-node.key"
|
||||||
|
},
|
||||||
|
|
||||||
|
/* Configuration of log parameters */
|
||||||
|
|
||||||
|
"log": {
|
||||||
|
|
||||||
|
/* Output for the logging function. Either "stdout", "stderr" or
|
||||||
|
the name of a log file . */
|
||||||
|
|
||||||
|
"output": "tezos-node.log",
|
||||||
|
|
||||||
|
/* Verbosity level: one of 'fatal', 'error', 'warn', 'notice',
|
||||||
|
'info', 'debug'. */
|
||||||
|
|
||||||
|
"level": "info",
|
||||||
|
|
||||||
|
/* Fine-grained logging instructions. Same format as described in
|
||||||
|
`tezos-node run --help`, DEBUG section. In the example below,
|
||||||
|
sections "net" and all sections starting by "client" will have
|
||||||
|
their messages logged up to the debug level, whereas the rest of
|
||||||
|
log sections will be logged up to the notice level. */
|
||||||
|
|
||||||
|
"rules": "client* -> debug, net -> debug, * -> notice",
|
||||||
|
|
||||||
|
/* Format for the log file, see
|
||||||
|
http://ocsigen.org/lwt/dev/api/Lwt_log_core#2_Logtemplates. */
|
||||||
|
|
||||||
|
"template": "$(date) - $(section): $(message)"
|
||||||
|
},
|
||||||
|
|
||||||
|
/* Configuration for the validator and mempool parameters */
|
||||||
|
|
||||||
|
"shell": {
|
||||||
|
|
||||||
|
/* The number of peers to synchronize with
|
||||||
|
before declaring the node 'bootstrapped'. */
|
||||||
|
|
||||||
|
"bootstrap_threshold": 4
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Debugging
|
||||||
|
---------
|
||||||
|
|
||||||
|
It is possible to set independent log levels for different logging
|
||||||
|
sections in Tezos, as well as specifying an output file for logging. See
|
||||||
|
the description of log parameters above as well as documentation under
|
||||||
|
the DEBUG section displayed by `tezos-node run –-help`.
|
@ -1,18 +0,0 @@
|
|||||||
.. _zeronet:
|
|
||||||
|
|
||||||
Zeronet
|
|
||||||
=======
|
|
||||||
|
|
||||||
Zeronet is the most cutting-edge development network of Tezos. It is
|
|
||||||
restarted without notice, possibly several times a day.
|
|
||||||
|
|
||||||
If you wish to experiment with Tezos we recommend you to test
|
|
||||||
:ref:`Alphanet<alphanet>`, which is a more stable test network. We
|
|
||||||
offer no support about the zeronet.
|
|
||||||
|
|
||||||
Otherwise, the instructions to use Zeronet are the same as Alphanet,
|
|
||||||
except that ``alphanet.sh`` is replaced with ``zeronet.sh`` if you use
|
|
||||||
Docker.
|
|
||||||
|
|
||||||
You need to use the same faucet (see :ref:`faucet`) to get and
|
|
||||||
activate your wallet.
|
|
Loading…
Reference in New Issue
Block a user