@steph89

Как создать Dapps (децентрализованное приложение) для определённой группы лиц?

Допустим у нас есть компания, которой нужно ДП, чтобы оно было доступно только для них, те не было публичным. Как это реализовать?
  • Вопрос задан
  • 50 просмотров
Решения вопроса 1
EvgenyMamonov
@EvgenyMamonov
Senior software developer, system architect
Можно заложить такой функционал в смарт-контракт.
Например можно сделать пару функций типа grantAccess, revokeAccess, которые будут разрешать какому то кошельку (адресу) доступ к смарт контракту или отзывать разрешенный доступ.
В этих функциях сделать проверку, чтобы их мог вызывать только владелец кошелька или как вы решите.
А во всех остальных функциях смарт-контракта делать проверку выдавался ли ранее доступ или нет.
Примерная реализация:
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;

contract ACL {
    // тут храним кошельки, которые могут выдавать/отзывать полномочия админа.
    mapping (address => bool) public admins;

    // тут те, кому разрешен доступ
    mapping (address => bool) public accessGranted;

    constructor() {
        // наделяем полномочиями админа того, кто деплоил контракт чтобы он потом мог выдать полномочия кому-то еще.
        admins[msg.sender] = true;
    }
    
    function grantAdmin(address to) public {
        require(admins[msg.sender] == true, "Forbidden");
        admins[to] = true;
    }

    function revokeAdmin(address to) public {
        require(admins[msg.sender] == true, "Forbidden");
        delete admins[to];
    }

    function grantAccess(address to) public {
        require(admins[msg.sender] == true, "Forbidden");
        accessGranted[to] = true;
    }

    function revokeAccess(address to) public {
        require(admins[msg.sender] == true, "Forbidden");
        delete accessGranted[to];
    }
    
    // эта функция доступна всем
    function publicOK() public pure returns (string memory) {
        return "public OK";
    }

    // эта доступна только тем, кому был предоставлен доступ
    function protectedOK() public view returns (string memory) {
        require(accessGranted[msg.sender] == true, "Forbidden");
        return "protected OK";
    }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы