Syllabus - andyceo/documentation GitHub Wiki

Введение

Запись скринкаста: byzanz-record -a -c -d 3600 superstar.webm

Знакомство. Рассказ о формате, в котором будет происходить лекция (letsplay -> letshack). Можно повторять действия, прерывать, задавать вопросы.

Первое взгляд на geth.

google -> geth download, распаковка, запуск.

Наблюдение за нодой через htop, sudo iotop -a, netstat -tulpn

Анализ первых сообщений:

  • нет etherbase

  • размер кеша и папка для хранения blockchain

  • генезис-блок

  • конфигурация цепочки: ChainID=1

  • Сетевое взаимодействие: UDP, RLPx и адрес ноды

      self=enode://cef254f261fb4566e764add3942eb1f54092ee863a643ecb6dd33c073473c8ab9e69efde2cb59cd00a5dc173de956bc4ccc0beab1228ed013d3701a266dfb5b9@[::]:30303
    
  • IPC-endpoint

Анализ созданных папок и файлов

  • chainstate
  • keystore
  • nodekey и его связь с enode-адресом

Взаимодействие с нодой

geth attach [сокет]

Создать аккаунт: personal.newAccount("passphrase")

Список аккаунтов: eth.accounts, eth.coinbase

Разлочим аккаунт: personal.unlockAccount(address, "password")

Узнаем баланс etherbase: balance = web3.fromWei(eth.getBalance(eth.coinbase), "ether")

Читаем справку: geth -h. Обращаем внимание на:

  • Возможность указать разные папки для данных и ключей и ethash: --datadir, --ethash.dagdir
  • Идентификатор сети: --networkid
  • Возможность указать сокет: --ipcpath
  • Синхронизация: --syncmode=[full|fast|light]
  • Взаимодействие с нодой: geth attach
  • Преднастроенная private-сеть: --dev

Постановка целей для Etherium Private Net

3 ноды: 1 майнит, 1 для rpc, еще 1 для консенсуса

Genesis-block

Скачайте genesis.json и поправьте его под свои нужды (идентификатор сети, адреса кошельков и т.п.)

Обращаем внимание на:

  • "chainId": 4242
  • секция "alloc".

Окончательная конфигурация

Создадим папки для нод:

for i in {1..3}; do echo "Node $i mkdir"; mkdir -p /tmp/datadir/node$i /tmp/ethash/node$i; done;

Инициализируем все ноды нашим генезисом:

for i in {1..3}; do echo "Node $i init"; /tmp/geth init /tmp/genesis.json --datadir="/tmp/datadir/node$i"; done;

Запустим первую ноду:

/tmp/geth --networkid 4242 --nodiscover --maxpeers 3 --verbosity 6 --datadir="/tmp/datadir/node1" --port=30301

Скачайте static-nodes.json и поправьте его под свои нужды (адреса нод, порты) для каждой из нод (2, 3).

Файл NODE2_DATADIR/static-nodes.json для ноды 2:

[
  "enode://hex(nodekey1)@[::]:30301?discport=0"
]

Файл NODE3_DATADIR/static-nodes.json для ноды 3:

[
  "enode://hex(nodekey1)@[::]:30301?discport=0",
  "enode://hex(nodekey2)@[::]:30302?discport=0"
]

Запустим вторую ноду:

/tmp/geth --networkid 4242 --nodiscover --maxpeers 3 --verbosity 6 --datadir="/tmp/datadir/node2" --port=30302

Запустим третью ноду:

/tmp/geth --networkid 4242 --nodiscover --maxpeers 3 --verbosity 6 --mine --minerthreads=1 --datadir="/tmp/datadir/node3" --port=30303

Опросы

  1. По шкале от 1 до 10, где 1 - тривиально, а 10 - ничего не понял, насколько сложна тема?
  2. По шкале от 1 до 10, где 1 - неинтересно, а 10 - мегахайп, насколько интересна тема?
  3. По степени интерактива - куда идти, больше показывать и рассказывать по готовому плану или ориентироваться на вопросы из зала? -1 - план, 0 - баланс уже найден, +1 - интерактив
  4. Во сколько вы оцениваете данную информацию, поданную в таком виде и этим лектором? Платят спонсоры. Число рублей.
  5. Сколько рублей из суммы в пункте 4 вы готовы заплатить, если знаете, что оставшееся вам покроют спонсоры? Число рублей.
  6. Какие темы еще интересны? (идея - MythBuster для программистов, голосуем за тему, через 2 недели - ее разбор так же как сейчас)

Ссылки

Контакты

⚠️ **GitHub.com Fallback** ⚠️