#node.js #ethereum #web3 #web3js #metamask
Вопрос:
я создаю простое приложение dapp , в котором я хочу что-то проверить, а затем только взаимодействовать по контракту, но сейчас я изо всех сил пытаюсь создать промежуточное программное обеспечение, которое будет действовать так, как будто пользователь сделает txn через метамаску, а затем этот txn или что-то еще отправится на сервер на любом языке, возможно, на узле js, и я сделаю некоторую проверку, и если все хорошо, затем отправлю его в блокчейн.
Есть какие-нибудь предложения?
Прямо сейчас все это в интерфейсе react и расширении браузера metamask.. и я не могу ограничить код на стороне клиента И даже не могу запросить закрытый ключ.
Ответ №1:
Это невозможно по замыслу. Транзакция должна быть подписана закрытым ключом отправителя. Поэтому, если пользователи не захотят предоставить вам свой закрытый ключ (чтобы вы могли подписать транзакцию за них на бэкэнде), вам нужно будет изменить свой подход.
Если вам нужно разрешить взаимодействие с контрактом только пользователям, авторизованным вашим приложением, в контракте должен содержаться список авторизованных адресов. И список может быть обновлен вашим приложением (которое содержит закрытый ключ к owner
адресу). Пример:
pragma solidity ^0.8; contract MyContract { address public owner = address(0x123); mapping(address =gt; bool) public isAuthorized; function setAuthorized(address _address, bool _isAuthorized) external { require(msg.sender == owner, 'Only the contract owner can set authorized addresses'); isAuthorized[_address] = _isAuthorized; } function foo() external { require(isAuthorized[msg.sender], 'Only authorized addresses can execute this function'); // ... } }