Skip to content

Commit

Permalink
refactor template4
Browse files Browse the repository at this point in the history
  • Loading branch information
alexcos20 committed Sep 3, 2024
1 parent cdc73a2 commit 861b563
Show file tree
Hide file tree
Showing 2 changed files with 152 additions and 81 deletions.
94 changes: 61 additions & 33 deletions contracts/templates/ERC20Template4.sol
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,15 @@ import "@openzeppelin/contracts/utils/math/SafeMath.sol";
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
import "../utils/ERC20Roles.sol";

interface AccessListContract {
// import "hardhat/console.sol";
interface IAccessListContract {
function balanceOf(address owner) external view returns (uint256 balance);

}
interface IAccessListFactory {
function isDeployed(address) external view returns (bool);
function isSoulBound(address) external view returns (bool);
}

/**
* @title DatatokenTemplate to be used on Sapphire network
*
Expand Down Expand Up @@ -50,6 +54,7 @@ contract ERC20Template4 is
address private publishMarketFeeToken;
uint256 private publishMarketFeeAmount;
bytes private _filesObject;
address private _accessListFactory;
address private _allowListContract;
address private _denyListContract;
uint256 private constant BASE = 1e18;
Expand Down Expand Up @@ -160,22 +165,22 @@ contract ERC20Template4 is
modifier onlyNotInitialized() {
require(
!initialized,
"ERC20Template: token instance already initialized"
"already initialized"
);
_;
}
modifier onlyNFTOwner() {
require(
msg.sender == IERC721Template(_erc721Address).ownerOf(1),
"ERC20Template: not NFTOwner"
"not NFTOwner"
);
_;
}

modifier onlyPublishingMarketFeeAddress() {
require(
msg.sender == publishMarketFeeAddress,
"ERC20Template: not publishMarketFeeAddress"
"not publishMarketFeeAddress"
);
_;
}
Expand All @@ -185,11 +190,19 @@ contract ERC20Template4 is
IERC721Template(_erc721Address)
.getPermissions(msg.sender)
.deployERC20 || IERC721Template(_erc721Address).ownerOf(1) == msg.sender,
"ERC20Template: NOT DEPLOYER ROLE"
"NOT DEPLOYER"
);
_;
}

function checkAccessList(address contractAddress) view private returns(bool){
if(contractAddress==address(0)) {
return true;
}
bool ret=IAccessListFactory(_accessListFactory).isDeployed(contractAddress);
if(ret == false) return false;
return(IAccessListFactory(_accessListFactory).isSoulBound(contractAddress));
}

Check warning

Code scanning / Slither

Boolean equality Warning

ERC20Template4.checkAccessList(address) compares to a boolean constant:
-ret == false
/**
* @dev initialize
* Called prior contract initialization (e.g creating new Datatoken instance)
Expand All @@ -202,8 +215,9 @@ contract ERC20Template4 is
* [1] = paymentCollector initial paymentCollector for this DT
* [2] = publishing Market Address
* [3] = publishing Market Fee Token
* [4] = Allow List Contract (if any)
* [5] = Deny List Contract (if any)
* [4] = access list factory address
* [5] = Allow List Contract (if any)
* [6] = Deny List Contract (if any)
* @param factoryAddresses_ refers to an array of addresses passed by the factory
* [0] = erc721Address
* [1] = router address
Expand Down Expand Up @@ -242,12 +256,13 @@ contract ERC20Template4 is
* [1] = paymentCollector initial paymentCollector for this DT
* [2] = publishing Market Address
* [3] = publishing Market Fee Token
* [4] = Allow List Contract (if any)
* [5] = Deny List Contract (if any)
* [4] = access list factory address
* [5] = Allow List Contract (if any)
* [6] = Deny List Contract (if any)
* @param factoryAddresses_ refers to an array of addresses passed by the factory
* [0] = erc721Address
* [1] = router address
*
* [2] = access list factory address
* @param uints_ refers to an array of uints
* [0] = cap_ the total ERC20 cap
* [1] = publishing Market Fee Amount
Expand All @@ -265,28 +280,37 @@ contract ERC20Template4 is
router = factoryAddresses_[1];
require(
erc721Address != address(0),
"ERC20Template: Invalid minter, zero address"
"minter"
);

require(
router != address(0),
"ERC20Template: Invalid router, zero address"
"router"
);

require(uints_[0] != 0, "DatatokenTemplate: Invalid cap value");
require(uints_[0] != 0, "cap");
_cap = uints_[0];
_name = strings_[0];
_symbol = strings_[1];
if(bytes_.length>0)
_filesObject = bytes_[0];
if(addresses_.length>4){
_allowListContract = addresses_[4];
if(addresses_.length>4)
_accessListFactory=addresses_[4];
require(
_accessListFactory != address(0),
"accessListFactory"
);

if(addresses_.length>5){
require(checkAccessList(addresses_[5])==true,"IAL");
_allowListContract = addresses_[5];
}
else{
_allowListContract = address(0);
}
if(addresses_.length>5){
_denyListContract = addresses_[5];
if(addresses_.length>6){
require(checkAccessList(addresses_[6])==true,"IAL");
_denyListContract = addresses_[6];
}
else{
_denyListContract = address(0);
Expand Down Expand Up @@ -383,10 +407,10 @@ contract ERC20Template4 is
* @param value refers to amount of tokens that is going to be minted.
*/
function mint(address account, uint256 value) external {
require(permissions[msg.sender].minter, "ERC20Template: NOT MINTER");
require(permissions[msg.sender].minter, "NOT MINTER");
require(
totalSupply().add(value) <= _cap,
"DatatokenTemplate: cap exceeded"
"cap exceeded"
);
_mint(account, value);
}
Expand Down Expand Up @@ -470,7 +494,7 @@ contract ERC20Template4 is
uint256 amount = 1e18; // we always pay 1 DT. No more, no less
require(
balanceOf(msg.sender) >= amount,
"Not enough datatokens to start Order"
"Not enough DT"
);
addConsumer(serviceIndex,msg.sender);
addConsumer(serviceIndex,consumer);
Expand Down Expand Up @@ -618,7 +642,7 @@ contract ERC20Template4 is
function cleanFrom721() external {
require(
msg.sender == _erc721Address,
"ERC20Template: NOT 721 Contract"
"NOT 721 Contract"
);
_internalCleanPermissions();

Expand Down Expand Up @@ -688,7 +712,7 @@ contract ERC20Template4 is
permissions[msg.sender].paymentManager ||
IERC721Template(_erc721Address).getPermissions(msg.sender).deployERC20 ||
IERC721Template(_erc721Address).ownerOf(1)==msg.sender,
"ERC20Template: NOT PAYMENT MANAGER or OWNER"
"NOT PAYMENT MANAGER or OWNER"
);
_setPaymentCollector(_newPaymentCollector);
emit NewPaymentCollector(
Expand Down Expand Up @@ -744,11 +768,11 @@ contract ERC20Template4 is
) external onlyPublishingMarketFeeAddress {
require(
_publishMarketFeeAddress != address(0),
"Invalid _publishMarketFeeAddress address"
"_publishMarketFeeAddress "
);
require(
_publishMarketFeeToken != address(0),
"Invalid _publishMarketFeeToken address"
"_publishMarketFeeToken"
);
publishMarketFeeAddress = _publishMarketFeeAddress;
publishMarketFeeToken = _publishMarketFeeToken;
Expand Down Expand Up @@ -1111,6 +1135,8 @@ contract ERC20Template4 is
* @param contractAddress new contract to be used as list
*/
function setAllowListContract(address contractAddress) external onlyERC20Deployer{
if(contractAddress!=address(0))
require(checkAccessList(contractAddress)==true,"IAL");
_allowListContract = contractAddress;
}
/**
Expand All @@ -1119,6 +1145,8 @@ contract ERC20Template4 is
* @param contractAddress new contract to be used as list
*/
function setDenyListContract(address contractAddress) external onlyERC20Deployer{
if(contractAddress!=address(0))
require(checkAccessList(contractAddress)==true,"IAL");
_denyListContract = contractAddress;
}
/**
Expand Down Expand Up @@ -1174,7 +1202,7 @@ contract ERC20Template4 is
)
)
)
), consumerSignature) == consumerAddress, "Consumer signature check failed");
), consumerSignature) == consumerAddress, "Consumer signature");

/* Provider should sign(serviceId+consumerSignature) */
require(_ecrecovery(keccak256(
Expand All @@ -1186,18 +1214,18 @@ contract ERC20Template4 is
)
)
)
), providerSignature) == providerAddress, "Provider signature check failed");
), providerSignature) == providerAddress, "Provider signature");

// now that we know provider address , let's check it in allow/deny lists
if(_allowListContract!=address(0)){
uint256 onTheList=AccessListContract(_allowListContract).balanceOf(providerAddress);
require(onTheList>0, "Provider not in allow list");
uint256 onTheList=IAccessListContract(_allowListContract).balanceOf(providerAddress);
require(onTheList>0, "Provider not allowed");
}
if(_denyListContract!=address(0)){
uint256 onTheList=AccessListContract(_denyListContract).balanceOf(providerAddress);
require(onTheList<1, "Provider in deny list");
uint256 onTheList=IAccessListContract(_denyListContract).balanceOf(providerAddress);
require(onTheList<1, "Provider denied");
}
require(checkConsumer(serviceId,consumerAddress)==true,'Consumer does not have a valid order');
require(checkConsumer(serviceId,consumerAddress)==true,'no consumer order');
return(_filesObject);
}
}
Loading

0 comments on commit 861b563

Please sign in to comment.