Про ключи на Cyberway
Осторожно, многа букав
Как это было на голосе
Многие знают, что на голосе было три ключа (MEMO ключ для заметок я не рассматриваю, он стоит особняком и практически никем не использовался)
- OWNER или ключ владельца, с самым высоким уровнем. Этим ключем можно менять все остальные ключи и подписывать любую операцию. Но это не точно
- ACTIVE - активный ключ, по уровню доступа идет после OWNER, им можно было например переводить монеты, запускать понижение СГ и прочие телодвижения с монетами. Этим ключом нельзя было сменить OWNER ключ, но все другие.
- POSTING - этим ключом можно было создавать посты, писать комментарии, апвоутить и вести прочую социальную деятельность. Нельзя было делать переводы и прочие операции.
Была жесткая система. У каждой операции в блокчейне было жестко записано, какого одного из трех уровней доступа требовался ключ, чтобы записать операцию в блокчейн. Можно было к примеру передать POSTING ключ боту или другому пользователю, чтобы он от вашего имени голосовал или постил и не боятся, что ваши монеты будут украдены. Потому я предпочитал логиниться на сайте golos.io постинг ключем, да и сайт не давал залогиниться активным ключом, предупреждая, что это не очень хорошая практика.
Как это устроено в cyberway
После переезда многие обратили внимание, что стало возможно залогиниться активным ключом, а новые пользователи вообще при регистрации получают только OWNER и ACTIVE ключи. Что изменилось?
В EOS и соотвественно в Cyberway-Блокчейнах гибкая система разрешений (permission). Это уже не жестко заданные три уровня доступа, теперь пользователь может сам создавать любые уровни доступа и любые разрешения и назначать их под определенные действия.
При создании аккаунта в cyberway надо обязательно указать минимум два уровня разрешений OWNER и ACTIVE. Причем ACTIVE получается подчиненным иерархически ключу владельца. То есть ключом владельца вы можете поменять активный ключ, но не наоборот. ACTIVЕ ключем по умолчанию вы можете совершать любые действия. Это регулируется на уровне блокчейна.
Пока все так же, как и на Голосе, но где же POSTING ключ? Спросит мой маленький читатель. А все оказывается очень просто.
Пользователь может сам создавать другие разрешения (permissions) и назначать им действия.
Практически все аспекты работы cyberway регулируются смарт-контрактами. К примеру переводом токенов занимается смарт-контракт cyber.token, для этого у него есть специальный экшен (ang. action) "transfer". За постинг и голосование отвечает другой смарт-контракт - gls.publish у которого есть экшены createmssg и upvote для создания поста или комментария и для голосования соответственно.
Так вот вы можете создать разрешение, назвать его как хотите и назначить его на выполнение определенной операции. К примеру создать разрешение VOTEKEY и назначить его только для голосования (смарт-контракт gls.publish, экшен upvote).
При транзите со старого Голоса на Cyberway, чтобы сильно не путать людей, были портированы все три ключа. OWNER и ACTIVE понятно, плюс создали разрешение (permission) POSTING и привязали его ко всем экшенам смарт-контракта gls.publish.
Соотвественно портированные пользователи могут залогиниться постинг ключем, голосвать и создавать посты. А для перевода им уже требуется активный ключ.
Создание и назначение ключей
Далее покажу как создавать permission и назначать им действия. Это уже скорее техническая часть поста. Пока нету интерфейса для назначения ключей. Можно только через консольный кошелек все это сделать, потому это не для каждого. Но главное принцип.
Будем экспериментировать на моем аккаунте. Посмотрим, какие у меня сейчас установлены разрешения.
cleos get account ropox@@gls
Как видно, у меня есть помимо OWNER и ACTIVE разрешений еще и POSTING. Я же хочу создать еще одно разрешение исключительно для голосования. Я потом смогу передать этот ключ боту и он сможет только голосовать этим ключем. Бот не сможет этим ключем сделать ничего другого, ни написать текст этим ключем, ни перевести монеты.
Для начала я генерирую новый ключ.
cleos create key --to-console
И вновь сгенерированным ключом создаем новое разрешение botvote. Название можно выбрать любое, лишь бы подчинялось правилам имен (состояло исключительно из латинских знаков).
cleos set account permission \
zhm555xmzkd3 \
botvote \
GLS8emx25sc9eH9SuCY2BPttd2yzRbP3PmpRSKJWw9ZzmrT4v8v9D \
active
Создается новое разрешение командой cleos set account permission
. Первым параметром идет имя моего аккаунта, для которого я создаю новое разрешение. Далее я указываю имя нового разрешения - botvote. Затем идет новый ключ и последним параметром указывается вышестоящее разрешение, которому будет подчиняться новое разрешение. То-есть удалить его или поменять я смогу только своим активным ключом.
Смотрим, что получилось.
Как видно теперь у меня в ауторити новое разрешение, которое я могу использовать при выполнении экшенов. В кошельке я могу задать, каким ключем воспользоваться, указав параметр -p zhm555xmzkd3@botvote
Попробуем проголосовать за пост пользуясь новым разрешением botvote
cleos push action gls.publish upvote \
'["zhm555xmzkd3",{"author":"jyrnxqhjzjmb","permlink":"probnyi-post-1569708474792"}, 10000]' \
-p zhm555xmzkd3@botvote
Как видно, блокчейн ругается, что указанное разрешение botvote не подходит для подписи транзакции с экшеном голосования. Чтобы это стало возможным, мне надо ассоциировать экшен с этим ключем.
cleos set action permission zhm555xmzkd3 gls.publish upvote botvote
cleos set action permission
мы выставляем ассоциацию ключа с экшеном.
Указываем zhm555xmzkd3, это мой аккаунт. Далее идет смартконтракт (на самом деле это аккаунт) gls.publish и экшен upvote. Ну и последним параметром указываем новое разрешение botvote.
И пробуем снова проголосовать.
Получилось.
Разрешение убрать можно следующей командой
cleos set account permission zhm555xmzkd3 botvote NULL
Заключение
Система разрешений в сайбервее мне нравится больше конечно. Можно точечно разрешать разным приложениям, которым слабо доверяешь выполнять только определенную функцию. Система гибкая очень и к сожелению golos.io пока не в полной мере поддерживает все возможности cyberway блокчейна. Как надеюсь стало ясно из всего выше написанного, POSTING ключ является опциональным. Я думаю поэтому golosio отказалась от создания постинг ключей для новых пользователей. Возможно смена ключей через сайт в данный момент приведет к тому, что у вас останется только OWNER и ACTIVE ключи.
Надеюсь современем все утрясется. Хотелось бы отдельную страницу под управление разрешениями, либо в explorer.cyberway.io либо на golos.io. Думаю первое было бы правильнее.
Голосуйте за меня и все будет хорошо в тридесятом государстве