Возможно. Смарт-контракт 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 ключу заголовка запроса транзакции.