Как сделать умный контракт исполняемым только при вызове по конкретным проверенным адресам? - PullRequest
0 голосов
/ 24 апреля 2019

Я пытаюсь создать децентрализованное веб-приложение, в котором при выполнении условия контракт будет выполнен и может отправить eth по адресу. например, если на моем веб-сайте должен был быть список пользователей, которые зарегистрировали учетные записи, и у каждого пользователя есть адрес ethereum, связанный с его учетной записью, как я мог бы сделать так, чтобы мой умный контракт мог выполняться только по определенным адресам, которые были зарегистрированы аккаунт на моем сайте?

Когда пользователь нажимает кнопку на моем веб-сайте, например (получить eth), которая вызывает функцию интеллектуального контракта, как я могу сделать так, чтобы мой смарт-контракт могли использовать только зарегистрированные пользователи?

Я изучал подписание и восстановление сообщений, а также отключение белых списков. Мой мыслительный процесс для решения этой проблемы состоял в том, чтобы каким-то образом использовать их, чтобы проверить, действителен ли адрес для выполнения контракта. Я бы подумал об этой проблеме как о существенном создании базового умного контракта, но ограничении адресов, которые могут его использовать, несколькими избранными.

1 Ответ

1 голос
/ 25 апреля 2019

Я думаю, что мы просто добавляем пользователей в наш smartcontract.Затем мы проверяем это так:

contract MyContract {
    mapping(address=>bool) public registerUsers;
    address owner;

    modifier onlyOwner(){
        require(msg.sender==owner);
        _;
    }
    modifier onlyUser(){
        require(registerUsers[msg.sender] == true);
        _;
    }

    function() external payable { }
    constructor() public{
        owner = msg.sender;
    }

    function  addUser(address userAddr) onlyOwner() public{
        registerUsers[userAddr] = true;
    }
    // User calls this function to claim some eth
    function claimEth(uint amount) onlyUser() public{
        msg.sender.transfer(amount);
    }
}
...