ligo/docs/README.alphanet
2017-12-04 19:15:26 +01:00

322 lines
9.1 KiB
Plaintext

Tezos (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 `./alhpanet.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 misdetect 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-existant
contract and regenerate a new one:
```
./alphanet.sh client forget contract "my_account"
./alphanet.sh client originate free account "my_account" for "my_identity"
```