adf860ea40
- Provides a toplevel documentation structure using Sphinx - Adds a `doc-html` target to the main Makefile - Converts existing documentation to RST format - Add some new documentation / tutorials - Links the developer manual and OCaml documentation - Synchronized documentation on Gitlab pages This patch is co-authored by: - Benjamin Canou <benjamin@canou.fr> - Bruno Bernardo <bernardobruno@gmail.com> - Pietro Abate <pietro.abate@inria.fr>
310 lines
9.2 KiB
ReStructuredText
310 lines
9.2 KiB
ReStructuredText
Participating in the 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 Github issues.
|
||
|
||
For more information about the project in general, see:
|
||
|
||
https://www.tezos.com/
|
||
|
||
How to join the alphanet ?
|
||
--------------------------
|
||
|
||
We provide two ways of joining the alphanet :
|
||
|
||
- use ``docker`` and prebuilt binaries (recommended way, tested on
|
||
windows/mac/linux)
|
||
- manual compilation and installation (linux and mac only)
|
||
|
||
The ``alphanet.sh`` script
|
||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
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/community-edition
|
||
|
||
First, you need to download the script:
|
||
|
||
::
|
||
|
||
wget https://raw.githubusercontent.com/tezos/tezos/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.
|
||
|
||
On first launch the script will also create a cryptographic identity
|
||
(nicknamed ``my_identity``) and provide you with free tezzies on a fresh
|
||
account (nicknamed ``my_account``). You might check your balance with:
|
||
|
||
::
|
||
|
||
./alphanet.sh client get balance for my_account
|
||
|
||
On some circumstances the account creation might fail. If so, see
|
||
section “Known issues” below on how to force the account creation.
|
||
|
||
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
|
||
~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
The ``alphanet`` branch in the tezos git repository will always contain
|
||
the up-to-date sources of the tezos-node required for running the
|
||
alphanet. See ``docs/README.master`` on how to compile it.
|
||
|
||
Once built, you might launch the a node by running:
|
||
|
||
::
|
||
|
||
./tezos-node identity generate 24.
|
||
./tezos-node run --rpc-addr localhost
|
||
|
||
By default this instance will store its data in ``$HOME/.tezos-node``
|
||
and will listen to incoming peers on port 9732. It will also listen to
|
||
RPC requests on port 8732 (only from ``localhost``). You might find more
|
||
options by running ``./tezos-node config --help``.
|
||
|
||
If you want to stake (see below for more details), you will also have to
|
||
run:
|
||
|
||
::
|
||
|
||
./tezos-client launch daemon
|
||
|
||
That’s all. 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 adopter fredcy has also developed a nice block
|
||
explorer for the alphanet. See https://github.com/fredcy/tezos-client.
|
||
|
||
In an upcoming version, we will also provide an opt-in tool for node
|
||
runners that will allow us to provide a global monitoring panel of the
|
||
alphanet.
|
||
|
||
How to obtain free Tez from the faucet contract ?
|
||
-------------------------------------------------
|
||
|
||
The alphanet contains an ad-hoc faucet contract, that will generate new
|
||
tezzies for you to test. Obviously, this contract will not be available
|
||
outside of the test network.
|
||
|
||
First, if you don’t have any cryptographic identity yet, you need to
|
||
generate one (replace ``my_identity`` with any name that suits you
|
||
best):
|
||
|
||
::
|
||
|
||
./alphanet.sh client gen keys "my_identity"
|
||
|
||
Then, you have to generate a new “free” account (replace ``my_account``
|
||
with any name that suits you best and ``my_identity`` by the name used
|
||
in the previous command):
|
||
|
||
::
|
||
|
||
./alphanet.sh client originate free account "my_account" for "my_identity"
|
||
|
||
That’s all. You might check your balance:
|
||
|
||
::
|
||
|
||
./alphanet.sh client get balance for "my_account"
|
||
|
||
If you want MORE tezzies, you need to generate as many free accounts as
|
||
you need (you should receive ꜩ100.000 per account) and then transfer the
|
||
tezzies into a single account. For instance:
|
||
|
||
::
|
||
|
||
./alphanet.sh client originate free account "my_alt_account" for "my_identity"
|
||
./alphanet.sh client transfer 100,000.00 from "my_alt_account" to "my_account" -fee 0.00
|
||
./alphanet.sh client forget contract "my_alt_account"
|
||
|
||
Note that the test network is kind enough to accept transactions without
|
||
fees…
|
||
|
||
How to play with smart-contracts ?
|
||
----------------------------------
|
||
|
||
An advanced documentation of the smart contract language is in
|
||
|
||
``/docs/language.md``
|
||
|
||
Some test contracts are in
|
||
|
||
``/tests/contracts/``
|
||
|
||
For details and examples, see:
|
||
|
||
http://www.michelson-lang.com/
|
||
|
||
How to stake on the alphanet ?
|
||
------------------------------
|
||
|
||
By default, the faucet of the alphanet (the one behind
|
||
``./alphanet.sh originate free account "my_account" for "my_identity"``)
|
||
creates contracts which are managed by ``my_identity`` but whose staking
|
||
rights are delegated to the baker of the block including the
|
||
origination. That way we are sure that staking rights are attributed to
|
||
an active baker.
|
||
|
||
But, nonetheless, you might claim your staking rights!
|
||
|
||
The following command returns the current delegate of a contract:
|
||
|
||
::
|
||
|
||
./alphanet.sh client get delegate for "my_account"
|
||
|
||
If it is one the following, it is indeed one of our “bootstrap”
|
||
contracts!
|
||
|
||
- ``tz1YLtLqD1fWHthSVHPD116oYvsd4PTAHUoc``
|
||
- ``tz1irovm9SKduvL3npv8kDM54PSWY5VJXoyz``
|
||
- ``tz1UsgSSdRwwhYrqq7iVp2jMbYvNsGbWTozp``
|
||
- ``tz1TwYbKYYJxw7AyubY4A9BUm2BMCPq7moaC``
|
||
- ``tz1QWft73Zhj5VSA1sCuEi9HhDDJqywE6BtC``
|
||
|
||
You might change the delegate of a contract with a single command:
|
||
|
||
::
|
||
|
||
./alphanet.sh client set delegate for "my_account" to "my_identity"
|
||
|
||
You now have staking rights!
|
||
|
||
Well, almost.
|
||
|
||
You should wait.
|
||
|
||
A little bit.
|
||
|
||
At most two cycles. Which, on the alphanet is 128 blocks (something
|
||
around 2 hours). On the mainnet, this will be between 2 weeks and a
|
||
month.
|
||
|
||
But, to enforce your right a last step is required. When baking or
|
||
endorsing a block, a bond is taken out of the default account associated
|
||
to the public key of the delegate. Hence, in order to stake, you must be
|
||
provisioning for bond deposit.
|
||
|
||
::
|
||
|
||
./alphanet.sh client transfer 50,000.00 from "my_account" to "my_identity"
|
||
|
||
On the alphanet, a bond is ꜩ1000. Hence, with the previous command you
|
||
provisioned 50 bonds. If you want more, see section “How to obtain free
|
||
Tez from the faucet contract ?”.
|
||
|
||
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 staked, 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 24 hours. The
|
||
reward for baking or endorsing a block is ꜩ150. The safety bond is
|
||
returned together with the reward.
|
||
|
||
To know when you will be allowed to stake in the current cycle, you
|
||
might try the following RPCs, where you replaced ``tz1iFY8ads...`` by
|
||
the appropriate value:
|
||
|
||
::
|
||
|
||
$ ./alphanet.sh client list known identities
|
||
my_identity: tz1iFY8aDskx9QGbgBy68SNAGgkc7AE2iG9H (public key known) (secret key known)
|
||
$ ./alphanet.sh client rpc call /blocks/head/proto/helpers/rights/baking/delegate/tz1iFY8aDskx9QGbgBy68SNAGgkc7AE2iG9H with '{}'
|
||
{ "ok":
|
||
[ { "level": 1400.000000, "priority": 2.000000,
|
||
"timestamp": "2017-05-19T03:21:52Z" },
|
||
... ] }
|
||
|
||
Known issues
|
||
------------
|
||
|
||
Missing account ``my_account``
|
||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
The chain synchronization has not been optimized yet and the
|
||
``alphanet.sh`` script might mis-detect the end of the synchronization
|
||
step. If so, it will try to create your free account in an outdated
|
||
context and your new account will never be included in the chain.
|
||
|
||
To fix this, just wait for your node to be synchronized: for that run
|
||
the following command, in the middle of a (raw) json object, it should
|
||
display the date of the last block (which should not be too far in the
|
||
past):
|
||
|
||
::
|
||
|
||
./alphanet.sh head
|
||
|
||
Please note that the printed date is GMT, don’t forget the time shift.
|
||
|
||
Then, you need to remove from the client state the non-existent contract
|
||
and regenerate a new one:
|
||
|
||
::
|
||
|
||
./alphanet.sh client forget contract "my_account"
|
||
./alphanet.sh client originate free account "my_account" for "my_identity"
|