Разрешения на данные Hyperledger Sawtooth

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


person Adamos2468    schedule 11.01.2020    source источник


Ответы (1)


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

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

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

Ниже объясняется, как это сделать в Go:

В случае Go SDK - это то, как контекст передается apply() методу обработчика транзакций. Обратите внимание на параметр заголовка в запросе /github.com/hyperledger/sawtooth-sdk-go/blob/8422a911dbc13e735f3acbcc593914521468697d/protos/processor.proto#L82. Обратите внимание на информацию об открытом ключе подписывающей стороны 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. Если да, то прочтите ключ настроек, который вы сохранили ранее. Проверьте, совпадает ли открытый ключ с ключом в заголовке запроса транзакции.

person Arun    schedule 13.01.2020