【问题标题】:Is there a way to store addresses in the solidity contract to authorize only those addresses to do transactions?有没有办法在solidity合约中存储地址以仅授权这些地址进行交易?
【发布时间】:2021-11-07 08:13:59
【问题描述】:

我从可靠的合约开始,出现了一个问题,有什么方法可以将地址存储在钱包中,以便只有这些存储的地址才能提取我提供的代币?让我更好地解释一下,例如我想空投 1 个月,在此期间获得我的硬币的人可以退出我的合同,但只有遵守空投规则的人。我想这样做,以便他们支付交易费用。但我只希望合约所有者授权的地址能够提取货币

【问题讨论】:

  • 只有部分授权地址做空投代币之类的功能?!
  • 这就是我要创建的,合约所有者授权进行交易的地址列表

标签: solidity erc20 binance-smart-chain


【解决方案1】:

代码:

contract test{
   address owner;
   mapping(address=>bool) authorizedAddresses;
   mapping(address=>bool) isRegistered;
   mapping(uint256=>address) users;
   uint256 userCounter;

   constructor(){
      owner = msg.sender;
   }

   modifier isOwner(){
      require(msg.sender == owner, "Access denied!");
      _;
   }

   function changeOwner(address _to) public isOwner{
      owner = _to;
   }
   
   function authorizeAddress(address _address) public isOwner{
      if(isRegistered[_address]){
         authorizedAddresses[_address] = true;
      }else{
         users[userCounter] = _address;
         isRegistered[_address] = true;
         authorizedAddresses[_address] = true;
         userCounter ++;
      }
   }
   
   function unauthorizeAddress(address _address) public isOwner{
      require(authorizedAddresses[_address], "User is not authorized already");
      authorizedAddresses[_address] = false;
   }

   modifier isAuthorizedAddress(){
      require(authorizedAddresses[_address], "You are not authorized to call this function");
      _;
   }

我应该注意我没有测试这个代码并且可能会抛出错误,所以如果它抛出任何错误让我知道并修改它,或者你可以这样做让我知道如何修复它并为其他人编辑代码。

如果您有任何不明白的部分,只需要求描述:)

最好的问候

【讨论】:

  • 嗨 Ahmad Gorji,嗨,感谢您的回复,但这并不是我的想法,因为我授权的每个地址都必须支付汽油费。我想要的是这样的,合约会和外部数据库通信,如果钱包地址在那里,这个人可以进行交易,如果没有,那是不可能的。
  • 如果你想将它存储在外部数据库中并稍后在合同中使用它,你必须创建一个oracle,对不起,我对它们了解不够
  • 好的,我去搜索一下,谢谢!艾哈迈德·戈尔吉
猜你喜欢
  • 2021-08-10
  • 1970-01-01
  • 2021-01-15
  • 2021-06-12
  • 2021-09-07
  • 2021-11-20
  • 2019-11-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多