zoukankan      html  css  js  c++  java
  • [Contract] Solidity 多种访问控制 (Access Control) 实现方式

    在 solidity 中控制访问,一般是通过 modifier 修饰符方法来直接做。

    那么对于稍复杂的多种访问控制,通常需要一个统一操作的模块化类库。

    现在已经有了这样的类库存在,我们通过一个实现功能上增删改查的 library,然后在具体的合约中声明变量、按需使用。

    建议参考 openzeppelin-contracts 的 Access Control 部分。

    下面是演示片段:

    pragma solidity ^0.5.0;
    
    import "@openzeppelin/contracts/access/Roles.sol";
    import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
    import "@openzeppelin/contracts/token/ERC20/ERC20Detailed.sol";
    
    contract MyToken is ERC20, ERC20Detailed {
        using Roles for Roles.Role;
    
        Roles.Role private _minters;
        Roles.Role private _burners;
    
        constructor(address[] memory minters, address[] memory burners)
            ERC20Detailed("MyToken", "MTKN", 18)
            public
        {
            for (uint256 i = 0; i < minters.length; ++i) {
                _minters.add(minters[i]);
            }
    
            for (uint256 i = 0; i < burners.length; ++i) {
                _burners.add(burners[i]);
            }
        }
    
        function mint(address to, uint256 amount) public {
            // Only minters can mint
            require(_minters.has(msg.sender), "DOES_NOT_HAVE_MINTER_ROLE");
    
            _mint(to, amount);
        }
    
        function burn(address from, uint256 amount) public {
            // Only burners can burn
            require(_burners.has(msg.sender), "DOES_NOT_HAVE_BURNER_ROLE");
    
           _burn(from, amount);
        }
    }

    Link:https://www.cnblogs.com/farwish/p/12563619.html

  • 相关阅读:
    归并排序
    快速排序
    冒泡排序
    排序算法复杂度
    [LeetCode] 20. Valid Parentheses ☆(括号匹配问题)
    makefile编写helloworld
    shell的通俗理解
    PID三种参数的理解
    PID的原理
    PID控制温度
  • 原文地址:https://www.cnblogs.com/farwish/p/12563619.html
Copyright © 2011-2022 走看看