Hyperledger Sawtooth Data Permisions - PullRequest
       67

Hyperledger Sawtooth Data Permisions

1 голос
/ 12 января 2020

Итак, я изучал Hyperledger Sawtooth для моего следующего проекта и хотел спросить, возможно ли создавать разрешения на основе состояния блокчейна. Например, для семейства транзакций IntegerKey я хочу, чтобы только один указанный c пользователь изменил значение переменной X .

1 Ответ

2 голосов
/ 13 января 2020

Возможно. Смарт-контракт logi c в вашем обработчике транзакций для IntegerKey должен проверять, что указанный c пользователь (вы намереваетесь) обновляет значение переменной X.

Из коробки identity-tp поможет вам ограничить доступ к клиенту, который может выполнять транзакции IntegerKey. Также это поможет вам ограничить запуск только разрешенным семейством транзакций в сети. Но когда дело доходит до указанной переменной c, это зависит от того, как вы решили сохранить значение в глобальном состоянии. После того, как вы решите, как сохранить переменную в глобальном состоянии, вы можете при желании иметь логи проверки c, чтобы проверить, действительно ли транзакция отправлена ​​нужным человеком.

Вы можете использовать Заголовок транзакции отправляется в TpProcessRequest. Это то, что вы видите в методе apply() вашего обработчика транзакций. Из заголовка транзакции вы можете получить информацию о ключе как для дозатора, так и для подписавшего транзакцию c.

Ниже описан способ сделать это в Go:

В случае Go SDK https://github.com/hyperledger/sawtooth-sdk-go/blob/727bba445a90dbcc5eb730fb20bf85084874d090/processor/handler.go#L65 это то, как контекст передается методу apply() обработчика транзакций. Обратите внимание на параметр заголовка в запросе https://github.com/hyperledger/sawtooth-sdk-go/blob/8422a911dbc13e735f3acbcc593914521468697d/protos/processor.proto#L82. Обратите внимание, что подписавшая c информация ключа https://github.com/hyperledger/sawtooth-sdk-go/blob/8422a911dbc13e735f3acbcc593914521468697d/protos/transaction.proto#L54.

Допустим, вы используете settings-tp и сохраняете свой собственный ключ настроек, чтобы знать разрешенных пользователей для каждого значения. В случае переменной X это будет что-то вроде settings.variable.X=[List of <PUBLIC_KEY_OF_USER_INTENDED_FOR_X>]. В вашем обработчике транзакций вы могли видеть, обновляется ли эта переменная X. Если это так, то прочитайте ключ настроек, который вы сохранили ранее. Проверьте, соответствует ли ключ publi c ключу заголовка запроса транзакции.

...