POW Givers
Эта страница переведена сообществом на русский язык, но нуждается в улучшениях. Если вы хотите принять участие в переводе свяжитесь с @alexgton.
Эта информация может быть устаревшей и больше не актуальной. Вы можете пропустить ее.
Цель этого текста - описать, как взаимодействовать со смарт-контрактами Proof-of-Work Giver для получения Toncoin. Мы предполагаем знакомство с TON Blockchain Lite Client, как объясняется в разделе Начать работу
, и с процедурой, необходимой для компиляции Lite Client и другого программного обеспечения. Для получения большего количества Toncoin, не обходимого для запуска валидатора, мы также предполагаем знакомство со страницами Full Node
и Валидатор
. Вам также понадобится выделенный сервер, достаточно мощный для запуска Full Node, чтобы получить большую сумму Toncoin. Получение небольших сумм Тонкоинов не требует выделенного сервера и может быть выполнено за несколько минут на домашнем компьютере.
Обратите внимание, что на данный момент для любой добычи требуются большие ресурсы из-за большого количества майнеров.
1. Смарт-контракты Proof-of-Work Giver
Чтобы предотвратить сбор всех Toncoin небольшим количеством злоумышленников, в мастерчейн сети был внедрен специальный вид смарт-контракта "Proof-of-Work Giver". Адреса этих смарт-контрактов следующие:
Небольшие giver-ы (доставляют от 10 до 100 Toncoin каждые несколько минут):
- kf-kkdY_B7p-77TLn2hUhM6QidWrrsl8FYWCIvBMpZKprBtN
- kf8SYc83pm5JkGt0p3TQRkuiM58O9Cr3waUtR9OoFq716lN-
- kf-FV4QTxLl-7Ct3E6MqOtMt-RGXMxi27g4I645lw6MTWraV
- kf_NSzfDJI1A3rOM0GQm7xsoUXHTgmdhN5-OrGD8uwL2JMvQ
- kf8gf1PQy4u2kURl-Gz4LbS29eaN4sVdrVQkPO-JL80VhOe6
- kf8kO6K6Qh6YM4ddjRYYlvVAK7IgyW8Zet-4ZvNrVsmQ4EOF
- kf-P_TOdwcCh0AXHhBpICDMxStxHenWdLCDLNH5QcNpwMHJ8
- kf91o4NNTryJ-Cw3sDGt9OTiafmETdVFUMvylQdFPoOxIsLm
- kf9iWhwk9GwAXjtwKG-vN7rmXT3hLIT23RBY6KhVaynRrIK7
- kf8JfFUEJhhpRW80_jqD7zzQteH6EBHOzxiOhygRhBdt4z2N
Крупные giver-ы (доставляют 10,000 Toncoin минимум раз в день):
- kf8guqdIbY6kpMykR8WFeVGbZcP2iuBagXfnQuq0rGrxgE04
- kf9CxReRyaGj0vpSH0gRZkOAitm_yDHvgiMGtmvG-ZTirrMC
- kf-WXA4CX4lqyVlN4qItlQSWPFIy00NvO2BAydgC4CTeIUme
- kf8yF4oXfIj7BZgkqXM6VsmDEgCqWVSKECO1pC0LXWl399Vx
- kf9nNY69S3_heBBSUtpHRhIzjjqY0ChugeqbWcQGtGj-gQxO
- kf_wUXx-l1Ehw0kfQRgFtWKO07B6WhSqcUQZNyh4Jmj8R4zL
- kf_6keW5RniwNQYeq3DNWGcohKOwI85p-V2MsPk4v23tyO3I
- kf_NSPpF4ZQ7mrPylwk-8XQQ1qFD5evLnx5_oZVNywzOjSfh
- kf-uNWj4JmTJefr7IfjBSYQhFbd3JqtQ6cxuNIsJqDQ8SiEA
- kf8mO4l6ZB_eaMn1OqjLRrrkiBcSt7kYTvJC_dzJLdpEDKxn
Обратите внимание, что в данный момент все крупные giver-ы исчерпаны.
Первые десять смарт-контрактов позволяют пользователю, желающему получить небольшое количество Toncoin, получить его, не затрачивая много вычислительной мощности (обычно достаточно нескольких минут работы на домашнем компьютере). Остальные смарт-контракты предназначены для получения более крупных сумм Toncoin, необходимых для работы валидатора в сети; как правило, для получения необходимой суммы достаточно дня работы на выделенном сервере, достаточно мощном для работы валидатора.
Обратите внимание, что, из-за большого количества майнеров, в настоящее время требуются много ресурсов для добычи мелких giver-ов.
Вы должны случайным образом выбрать один из таких смарт-контрактов "proof-of-work giver" (из одного из этих двух списков, в зависимости от Вашей цели) и получить Toncoin из этого смарт-контракта с помощью процедуры, похожей на майнинг. По сути, Вам необходимо отправить внешнее сообщение, содержащее доказательство работы и адрес Вашего кошелька, выбранному смарт-контракту "proof-of-work giver", после чего Вам будет отправлена необходимая сумма.
2. Процесс добычи
Чтобы создать внешнее сообщение, содержащее "proof-of-work", Вам необходимо запустить специальную утилиту для майнинга, скомпилированную из исходников TON, расположенных в репозитории GitHub. Утилита находится в файле ./crypto/pow-miner
относительно каталога сборки и может быть скомпилирована путем ввода команды make pow-miner
в каталоге сборки.
Однако, прежде чем запускать pow-miner
, Вам необходимо узнать фактические значения параметров seed
и complexity
выбранного смарт-контракта "proof-of-work giver". Это можно сделать, вызвав get-метод get_pow_params
этого смарт-контракта. Например, если Вы используете смарт-контракт giver, kf-kkdY_B7p-77TLn2hUhM6QidWrrsl8FYWCIvBMpZKprBtN
, Вы можете просто ввести:
> runmethod kf-kkdY_B7p-77TLn2hUhM6QidWrrsl8FYWCIvBMpZKprBtN get_pow_params
в консоли Lite Client и получить результат, подобный этому:
arguments: [ 101616 ]
result: [ 229760179690128740373110445116482216837 53919893334301279589334030174039261347274288845081144962207220498432 100000000000 256 ]
remote result (not to be trusted): [ 229760179690128740373110445116482216837 53919893334301279589334030174039261347274288845081144962207220498432 100000000000 256 ]
Два первых больших числа в строке "result:" - это seed
и complexity
этого смарт-контракта. В этом примере семя - 229760179690128740373110445116482216837
, а сложность - 53919893334301279589334030174039261347274288845081144962207220498432
.
Затем вызовите утилиту pow-miner
следующим образом:
$ crypto/pow-miner -vv -w<num-threads> -t<timeout-in-sec> <your-wallet-address> <seed> <complexity> <iterations> <pow-giver-address> <boc-filename>
Здесь:
<num-threads>
- это количество ядер процессора, которые Вы хотите использовать для майнинга.<timeout-in-sec>
- это максимальное количество секунд, которое майнер будет работать, прежде чем признать неудачу.<your-wallet-address>
- это адрес Вашего кошелька (возможно, еще не инициализированного). Он находится либо на мастерчейне, либо на воркчейне (обратите внимание, что для управления валидатором Вам нужен кошелек на мастерчейне).<seed>
и<complexity>
- это самые последние значения, полученные при выполнении метода get-methodget-pow-params
.<pow-giver-address>
- это адрес выбранного смарт-контракта proof-of-work giver.<boc-filename>
- это имя выходного файла, в котором в случае успеха будет сохранено внешнее сообщение с доказательством работы.
Например, если адрес Вашего кошелька - kQBWkNKqzCAwA9vjMwRmg7aY75Rf8lByPA9zKXoqGkHi8SM7
, Вы можете выполнить следующее:
$ crypto/pow-miner -vv -w7 -t100 kQBWkNKqzCAwA9vjMwRmg7aY75Rf8lByPA9zKXoqGkHi8SM7 229760179690128740373110445116482216837 53919893334301279589334030174039261347274288845081144962207220498432 100000000000 kf-kkdY_B7p-77TLn2hUhM6QidWrrsl8FYWCIvBMpZKprBtN mined.boc
Программа будет работать некоторое время (в данном случае не более 100 секунд) и либо завершится успешно (с нулевым кодом выхода) и сохранит требуемое доказательство работы в файл mined.boc
, либо завершится с ненулевым кодом выхода, если доказательство работы не было найдено.
В случае неудачи Вы увидите нечто подобное:
[ expected required hashes for success: 2147483648 ]
[ hashes computed: 1192230912 ]
и программа завершится с ненулевым кодом выхода. Затем Вам нужно снова получить значения seed
и complexity
(поскольку они могли измениться за это время в результате обработки запросов от более успешных майнеров) и снова запустить pow-miner
с новыми параметрами, повторяя процесс снова и снова до достижения успеха.
В случае успеха Вы увидите что-то вроде:
[ expected required hashes for success: 2147483648 ]
4D696E65005EFE49705690D2AACC203003DBE333046683B698EF945FF250723C0F73297A2A1A41E2F1A1F533B3BC4F5664D6C743C1C5C74BB3342F3A7314364B3D0DA698E6C80C1EA4ACDA33755876665780BAE9BE8A4D6385A1F533B3BC4F5664D6C743C1C5C74BB3342F3A7314364B3D0DA698E6C80C1EA4
Saving 176 bytes of serialized external message into file `mined.boc`
[ hashes computed: 1122036095 ]
Затем Вы можете использовать Lite Client, чтобы отправить внешнее сообщение из файла mined.boc
смарт-контракту proof-of-work giver (и Вы должны сделать это как можно скорее):
> sendfile mined.boc
... external message status is 1
Вы можете подождать несколько секунд и проверить состояние своего кошелька:
Пожалуйста, обратите внимание здесь и далее, что код, комментарии и/или документация могут содержать параметры, методы и определения, такие как "gtam", "nanogram" и т.д. Это наследие оригинального кода TON, разработанного в Telegram. Криптовалюта Gram никогда не выпускалась. Валютой TON является Toncoin, а валютой тестовой сети TON - Test Toncoin.
> last
> getaccount kQBWkNKqzCAwA9vjMwRmg7aY75Rf8lByPA9zKXoqGkHi8SM7
...
account state is (account
addr:(addr_std
anycast:nothing workchain_id:0 address:x5690D2AACC203003DBE333046683B698EF945FF250723C0F73297A2A1A41E2F1)
storage_stat:(storage_info
used:(storage_used
cells:(var_uint len:1 value:1)
bits:(var_uint len:1 value:111)
public_cells:(var_uint len:0 value:0)) last_paid:1593722498
due_payment:nothing)
storage:(account_storage last_trans_lt:7720869000002
balance:(currencies
grams:(nanograms
amount:(var_uint len:5 value:100000000000))
other:(extra_currencies
dict:hme_empty))
state:account_uninit))
x{C005690D2AACC203003DBE333046683B698EF945FF250723C0F73297A2A1A41E2F12025BC2F7F2341000001C169E9DCD0945D21DBA0004_}
last transaction lt = 7720869000001 hash = 83C15CDED025970FEF7521206E82D2396B462AADB962C7E1F4283D88A0FAB7D4
account balance is 100000000000ng
Если до Вас никто не прислал действительное доказательство работы с такими seed
и complexity
, proof-of-work giver примет Ваше доказательство работы, и это будет отражено в балансе Вашего кошелька (после отправки внешнего сообщения может пройти 10 или 20 секунд, прежде чем это произойдет; обязательно сделайте несколько попыток и каждый раз набирайте last
, прежде чем проверять баланс Вашего кошелька, чтобы обновить состояние Lite Client). В случае успеха Вы увидите, что баланс был увеличен (и даже то, что Ваш кошелек был создан в неинициализированном состоянии, если он не существовал ранее). В случае неудачи Вам придется получить новые значения seed
и complexity
и повторить процесс добычи с самого начала.
Если Вам повезло, и баланс Вашего кошелька увеличился, возможно, Вы захотите инициализировать кошелек, если он не был инициализирован ранее (более подробную информацию о создании кошелька Вы найдете в разделе Пошаговая инструкция
):
> sendfile new-wallet-query.boc
... external message status is 1
> last
> getaccount kQBWkNKqzCAwA9vjMwRmg7aY75Rf8lByPA9zKXoqGkHi8SM7
...
account state is (account
addr:(addr_std
anycast:nothing workchain_id:0 address:x5690D2AACC203003DBE333046683B698EF945FF250723C0F73297A2A1A41E2F1)
storage_stat:(storage_info
used:(storage_used
cells:(var_uint len:1 value:3)
bits:(var_uint len:2 value:1147)
public_cells:(var_uint len:0 value:0)) last_paid:1593722691
due_payment:nothing)
storage:(account_storage last_trans_lt:7720945000002
balance:(currencies
grams:(nanograms
amount:(var_uint len:5 value:99995640998))
other:(extra_currencies
dict:hme_empty))
state:(account_active
(
split_depth:nothing
special:nothing
code:(just
value:(raw@^Cell
x{}
x{FF0020DD2082014C97BA218201339CBAB19C71B0ED44D0D31FD70BFFE304E0A4F260810200D71820D70B1FED44D0D31FD3FFD15112BAF2A122F901541044F910F2A2F80001D31F3120D74A96D307D402FB00DED1A4C8CB1FCBFFC9ED54}
))
data:(just
value:(raw@^Cell
x{}
x{00000001CE6A50A6E9467C32671667F8C00C5086FC8D62E5645652BED7A80DF634487715}
))
library:hme_empty))))
x{C005690D2AACC203003DBE333046683B698EF945FF250723C0F73297A2A1A41E2F1206811EC2F7F23A1800001C16B0BC790945D20D1929934_}
x{FF0020DD2082014C97BA218201339CBAB19C71B0ED44D0D31FD70BFFE304E0A4F260810200D71820D70B1FED44D0D31FD3FFD15112BAF2A122F901541044F910F2A2F80001D31F3120D74A96D307D402FB00DED1A4C8CB1FCBFFC9ED54}
x{00000001CE6A50A6E9467C32671667F8C00C5086FC8D62E5645652BED7A80DF634487715}
last transaction lt = 7720945000001 hash = 73353151859661AB0202EA5D92FF409747F201D10F1E52BD0CBB93E1201676BF
account balance is 99995640998ng
Теперь Вы счастливый обладатель 100 Toncoin. Поздравляем!
3. Автоматизация процесса добычи в случае неудачи
Если Вам долгое время не удается получить Toncoin, это может произойти потому, что слишком много других пользователей одновременно занимаются добычей на одном и том же смарт-контракте proof-of-work giver. Возможно, Вам следует выбрать другой смарт-контракт proof-of-work giver из списка, приведенного выше. В качестве альтернативы Вы можете написать простой скрипт, который будет автоматически запускать pow-miner
с правильными параметрами снова и снова до достижения успеха (определяется проверкой кода завершения работы pow-miner
) и вызывать Lite Client с параметром -c 'sendfile mined.boc'
для отправки внешнего сообщения сразу после его обнаружения.