Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
- Contract name:
- DumperShieldToken
- Optimization enabled
- true
- Compiler version
- v0.8.19+commit.7dd6d404
- Optimization runs
- 200
- EVM Version
- default
- Verified at
- 2024-09-26T15:31:24.972649Z
Contract source code
// Copyright (c) [2023], [Qwantum Finance Labs]
// All rights reserved.
// SPDX-License-Identifier: No License (None)
pragma solidity ^0.8.0;
interface IERC20 {
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
function transfer(address recipient, uint256 amount) external returns (bool);
function approve(address spender, uint256 amount) external returns (bool);
function balanceOf(address account) external view returns (uint256);
}
interface IDSFactory {
function totalSupply(address token) external view returns (uint256);
function getLock(address token, address user) external view returns(uint256);
function setLock(address token, address user, uint256 time) external returns(bool);
}
contract DumperShieldUser {
address public factory; // dumper shield factory
address public user;
error OnlyFactory();
/*
address public dumperShield;
modifier onlyDumperShield() {
require(dumperShield == msg.sender, "Only dumperShield allowed");
_;
}
*/
modifier onlyFactory() {
if (factory != msg.sender) revert OnlyFactory();
_;
}
constructor (address _user, address _factory) {
require(_user != address(0) && _factory != address(0));
user = _user;
factory = _factory;
}
function safeTransfer(address token, address to, uint value) external onlyFactory {
// bytes4(keccak256(bytes('transfer(address,uint256)')));
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
require(success && (data.length == 0 || abi.decode(data, (bool))), 'DSU1'); //DumperShieldUser: TRANSFER_FAILED
}
}
contract DumperShieldToken {
IERC20 public shieldedToken; // address of shielded token
address public factory; // dumper shield factory
//address public router;
mapping(address => address) public dumperShieldUsers; // user address => DumperShieldUser contract
address public DAO; // address of global voting contract
event CreateDumperShieldUser(address user, address dsUserContract);
modifier onlyFactory() {
require(factory == msg.sender, "onlyFactory");
_;
}
function initialize(address _token, address _dao) external {
require(address(shieldedToken) == address(0) && _token != address(0));
shieldedToken = IERC20(_token);
DAO = _dao;
//router = _router;
factory = msg.sender;
}
/**
* @dev Gets the balance of the specified address.
* @param user The address to query the the balance of.
* @return balance an uint256 representing the amount owned by the passed address.
*/
function balanceOf(address user) external view returns (uint256 balance) {
return shieldedToken.balanceOf(dumperShieldUsers[user]);
}
// returns DumperShieldUser contract address. If user has not contract - create it.
function createDumperShieldUser(address user, address dsUser) external onlyFactory returns(address) {
if (dsUser == address(0)) {
dsUser = address(new DumperShieldUser(user, factory));
emit CreateDumperShieldUser(user, dsUser);
} else if (dumperShieldUsers[user] == dsUser) {
return dsUser;
}
dumperShieldUsers[user] = dsUser;
return dsUser;
}
function totalSupply() external view returns (uint256) {
return IDSFactory(factory).totalSupply(address(shieldedToken));
}
function setLock(address user, uint256 time) external returns(bool) {
require(msg.sender == DAO, "Only DAO");
return IDSFactory(factory).setLock(address(shieldedToken), user, time);
}
function getLock(address user) external view returns(uint256) {
return IDSFactory(factory).getLock(address(shieldedToken),user);
}
function setDAO(address _dao) external returns (bool) {
require(msg.sender == factory, "Only factory");
DAO = _dao;
return true;
}
// allow to rescue tokens that were transferet to this contract by mistake
function safeTransfer(address token, address to, uint value) external onlyFactory {
// bytes4(keccak256(bytes('transfer(address,uint256)')));
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
require(success && (data.length == 0 || abi.decode(data, (bool))), 'TRANSFER_FAILED');
}
function tokenReceived(address _from, uint _value, bytes calldata _data) external returns(bytes4) {
return this.tokenReceived.selector;
}
}
Contract ABI
[{"type":"event","name":"CreateDumperShieldUser","inputs":[{"type":"address","name":"user","internalType":"address","indexed":false},{"type":"address","name":"dsUserContract","internalType":"address","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"DAO","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"balance","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"user","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"createDumperShieldUser","inputs":[{"type":"address","name":"user","internalType":"address"},{"type":"address","name":"dsUser","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"dumperShieldUsers","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"factory","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getLock","inputs":[{"type":"address","name":"user","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"initialize","inputs":[{"type":"address","name":"_token","internalType":"address"},{"type":"address","name":"_dao","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"safeTransfer","inputs":[{"type":"address","name":"token","internalType":"address"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"setDAO","inputs":[{"type":"address","name":"_dao","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"setLock","inputs":[{"type":"address","name":"user","internalType":"address"},{"type":"uint256","name":"time","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IERC20"}],"name":"shieldedToken","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bytes4","name":"","internalType":"bytes4"}],"name":"tokenReceived","inputs":[{"type":"address","name":"_from","internalType":"address"},{"type":"uint256","name":"_value","internalType":"uint256"},{"type":"bytes","name":"_data","internalType":"bytes"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]}]
Contract Creation Code
0x608060405234801561001057600080fd5b50610d69806100206000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c80638943ec021161008c578063c45a015511610066578063c45a0155146101eb578063cc9ae595146101fe578063d1660f9914610211578063e73a914c1461022457600080fd5b80638943ec021461017e57806398fabd3a146101b5578063b0fc29e6146101c857600080fd5b806318160ddd146100d457806345ba8489146100ef578063485cc9551461013057806351bb50e6146101455780636b9db4e61461015857806370a082311461016b575b600080fd5b6100dc610237565b6040519081526020015b60405180910390f35b6101186100fd3660046107ec565b6002602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016100e6565b61014361013e366004610807565b6102ae565b005b610118610153366004610807565b610316565b6100dc6101663660046107ec565b610470565b6100dc6101793660046107ec565b6104eb565b61019c61018c36600461083a565b6344a1f60160e11b949350505050565b6040516001600160e01b031990911681526020016100e6565b600354610118906001600160a01b031681565b6101db6101d63660046108c1565b61052c565b60405190151581526020016100e6565b600154610118906001600160a01b031681565b600054610118906001600160a01b031681565b61014361021f3660046108eb565b6105fc565b6101db6102323660046107ec565b610751565b600154600080546040516339370aa960e21b81526001600160a01b0391821660048201529192169063e4dc2aa490602401602060405180830381865afa158015610285573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102a99190610927565b905090565b6000546001600160a01b03161580156102cf57506001600160a01b03821615155b6102d857600080fd5b600080546001600160a01b039384166001600160a01b0319918216179091556003805492909316918116919091179091556001805490911633179055565b6001546000906001600160a01b031633146103665760405162461bcd60e51b815260206004820152600b60248201526a6f6e6c79466163746f727960a81b60448201526064015b60405180910390fd5b6001600160a01b03821661040e5760015460405184916001600160a01b03169061038f906107c3565b6001600160a01b03928316815291166020820152604001604051809103906000f0801580156103c2573d6000803e3d6000fd5b50604080516001600160a01b038087168252831660208201529193507f326b0c8847d196b508808bef01c8cadb0b718f12f4cdf79f702100ad0e77d6e2910160405180910390a1610439565b6001600160a01b0383811660009081526002602052604090205481841691160361043957508061046a565b506001600160a01b03828116600090815260026020526040902080546001600160a01b031916918316919091179055805b92915050565b600154600080546040516310cfa87b60e21b81526001600160a01b03918216600482015284821660248201529192169063433ea1ec906044015b602060405180830381865afa1580156104c7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061046a9190610927565b600080546001600160a01b038381168352600260205260408084205490516370a0823160e01b815290821660048201529116906370a08231906024016104aa565b6003546000906001600160a01b031633146105745760405162461bcd60e51b81526020600482015260086024820152674f6e6c792044414f60c01b604482015260640161035d565b600154600054604051631ac8874560e21b81526001600160a01b039182166004820152858216602482015260448101859052911690636b221d14906064016020604051808303816000875af11580156105d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f59190610940565b9392505050565b6001546001600160a01b031633146106445760405162461bcd60e51b815260206004820152600b60248201526a6f6e6c79466163746f727960a81b604482015260640161035d565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916106a09190610962565b6000604051808303816000865af19150503d80600081146106dd576040519150601f19603f3d011682016040523d82523d6000602084013e6106e2565b606091505b509150915081801561070c57508051158061070c57508080602001905181019061070c9190610940565b61074a5760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b604482015260640161035d565b5050505050565b6001546000906001600160a01b0316331461079d5760405162461bcd60e51b815260206004820152600c60248201526b4f6e6c7920666163746f727960a01b604482015260640161035d565b50600380546001600160a01b0319166001600160a01b0392909216919091179055600190565b6103a28061099283390190565b80356001600160a01b03811681146107e757600080fd5b919050565b6000602082840312156107fe57600080fd5b6105f5826107d0565b6000806040838503121561081a57600080fd5b610823836107d0565b9150610831602084016107d0565b90509250929050565b6000806000806060858703121561085057600080fd5b610859856107d0565b935060208501359250604085013567ffffffffffffffff8082111561087d57600080fd5b818701915087601f83011261089157600080fd5b8135818111156108a057600080fd5b8860208285010111156108b257600080fd5b95989497505060200194505050565b600080604083850312156108d457600080fd5b6108dd836107d0565b946020939093013593505050565b60008060006060848603121561090057600080fd5b610909846107d0565b9250610917602085016107d0565b9150604084013590509250925092565b60006020828403121561093957600080fd5b5051919050565b60006020828403121561095257600080fd5b815180151581146105f557600080fd5b6000825160005b818110156109835760208186018101518583015201610969565b50600092019182525091905056fe608060405234801561001057600080fd5b506040516103a23803806103a283398101604081905261002f916100a5565b6001600160a01b0382161580159061004f57506001600160a01b03811615155b61005857600080fd5b600180546001600160a01b039384166001600160a01b031991821617909155600080549290931691161790556100d8565b80516001600160a01b03811681146100a057600080fd5b919050565b600080604083850312156100b857600080fd5b6100c183610089565b91506100cf60208401610089565b90509250929050565b6102bb806100e76000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80634f8632ba14610046578063c45a015514610075578063d1660f9914610088575b600080fd5b600154610059906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b600054610059906001600160a01b031681565b61009b6100963660046101f1565b61009d565b005b6000546001600160a01b031633146100c857604051630636a15760e11b815260040160405180910390fd5b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1790529151600092839290871691610124919061022d565b6000604051808303816000865af19150503d8060008114610161576040519150601f19603f3d011682016040523d82523d6000602084013e610166565b606091505b5091509150818015610190575080511580610190575080806020019051810190610190919061025c565b6101ce5760405162461bcd60e51b81526004016101c5906020808252600490820152634453553160e01b604082015260600190565b60405180910390fd5b5050505050565b80356001600160a01b03811681146101ec57600080fd5b919050565b60008060006060848603121561020657600080fd5b61020f846101d5565b925061021d602085016101d5565b9150604084013590509250925092565b6000825160005b8181101561024e5760208186018101518583015201610234565b506000920191825250919050565b60006020828403121561026e57600080fd5b8151801515811461027e57600080fd5b939250505056fea26469706673582212203a501ea5b13c8b7575c93e9a2214e2526523a151e60445f0926a5b7014c72bfd64736f6c63430008130033a2646970667358221220e162ed0882f99979e5f0ec4beed0987fbb6b2b5744c196edf6a0e27ccddd2dad64736f6c63430008130033
Deployed ByteCode
0x608060405234801561001057600080fd5b50600436106100cf5760003560e01c80638943ec021161008c578063c45a015511610066578063c45a0155146101eb578063cc9ae595146101fe578063d1660f9914610211578063e73a914c1461022457600080fd5b80638943ec021461017e57806398fabd3a146101b5578063b0fc29e6146101c857600080fd5b806318160ddd146100d457806345ba8489146100ef578063485cc9551461013057806351bb50e6146101455780636b9db4e61461015857806370a082311461016b575b600080fd5b6100dc610237565b6040519081526020015b60405180910390f35b6101186100fd3660046107ec565b6002602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016100e6565b61014361013e366004610807565b6102ae565b005b610118610153366004610807565b610316565b6100dc6101663660046107ec565b610470565b6100dc6101793660046107ec565b6104eb565b61019c61018c36600461083a565b6344a1f60160e11b949350505050565b6040516001600160e01b031990911681526020016100e6565b600354610118906001600160a01b031681565b6101db6101d63660046108c1565b61052c565b60405190151581526020016100e6565b600154610118906001600160a01b031681565b600054610118906001600160a01b031681565b61014361021f3660046108eb565b6105fc565b6101db6102323660046107ec565b610751565b600154600080546040516339370aa960e21b81526001600160a01b0391821660048201529192169063e4dc2aa490602401602060405180830381865afa158015610285573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102a99190610927565b905090565b6000546001600160a01b03161580156102cf57506001600160a01b03821615155b6102d857600080fd5b600080546001600160a01b039384166001600160a01b0319918216179091556003805492909316918116919091179091556001805490911633179055565b6001546000906001600160a01b031633146103665760405162461bcd60e51b815260206004820152600b60248201526a6f6e6c79466163746f727960a81b60448201526064015b60405180910390fd5b6001600160a01b03821661040e5760015460405184916001600160a01b03169061038f906107c3565b6001600160a01b03928316815291166020820152604001604051809103906000f0801580156103c2573d6000803e3d6000fd5b50604080516001600160a01b038087168252831660208201529193507f326b0c8847d196b508808bef01c8cadb0b718f12f4cdf79f702100ad0e77d6e2910160405180910390a1610439565b6001600160a01b0383811660009081526002602052604090205481841691160361043957508061046a565b506001600160a01b03828116600090815260026020526040902080546001600160a01b031916918316919091179055805b92915050565b600154600080546040516310cfa87b60e21b81526001600160a01b03918216600482015284821660248201529192169063433ea1ec906044015b602060405180830381865afa1580156104c7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061046a9190610927565b600080546001600160a01b038381168352600260205260408084205490516370a0823160e01b815290821660048201529116906370a08231906024016104aa565b6003546000906001600160a01b031633146105745760405162461bcd60e51b81526020600482015260086024820152674f6e6c792044414f60c01b604482015260640161035d565b600154600054604051631ac8874560e21b81526001600160a01b039182166004820152858216602482015260448101859052911690636b221d14906064016020604051808303816000875af11580156105d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f59190610940565b9392505050565b6001546001600160a01b031633146106445760405162461bcd60e51b815260206004820152600b60248201526a6f6e6c79466163746f727960a81b604482015260640161035d565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916106a09190610962565b6000604051808303816000865af19150503d80600081146106dd576040519150601f19603f3d011682016040523d82523d6000602084013e6106e2565b606091505b509150915081801561070c57508051158061070c57508080602001905181019061070c9190610940565b61074a5760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b604482015260640161035d565b5050505050565b6001546000906001600160a01b0316331461079d5760405162461bcd60e51b815260206004820152600c60248201526b4f6e6c7920666163746f727960a01b604482015260640161035d565b50600380546001600160a01b0319166001600160a01b0392909216919091179055600190565b6103a28061099283390190565b80356001600160a01b03811681146107e757600080fd5b919050565b6000602082840312156107fe57600080fd5b6105f5826107d0565b6000806040838503121561081a57600080fd5b610823836107d0565b9150610831602084016107d0565b90509250929050565b6000806000806060858703121561085057600080fd5b610859856107d0565b935060208501359250604085013567ffffffffffffffff8082111561087d57600080fd5b818701915087601f83011261089157600080fd5b8135818111156108a057600080fd5b8860208285010111156108b257600080fd5b95989497505060200194505050565b600080604083850312156108d457600080fd5b6108dd836107d0565b946020939093013593505050565b60008060006060848603121561090057600080fd5b610909846107d0565b9250610917602085016107d0565b9150604084013590509250925092565b60006020828403121561093957600080fd5b5051919050565b60006020828403121561095257600080fd5b815180151581146105f557600080fd5b6000825160005b818110156109835760208186018101518583015201610969565b50600092019182525091905056fe608060405234801561001057600080fd5b506040516103a23803806103a283398101604081905261002f916100a5565b6001600160a01b0382161580159061004f57506001600160a01b03811615155b61005857600080fd5b600180546001600160a01b039384166001600160a01b031991821617909155600080549290931691161790556100d8565b80516001600160a01b03811681146100a057600080fd5b919050565b600080604083850312156100b857600080fd5b6100c183610089565b91506100cf60208401610089565b90509250929050565b6102bb806100e76000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80634f8632ba14610046578063c45a015514610075578063d1660f9914610088575b600080fd5b600154610059906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b600054610059906001600160a01b031681565b61009b6100963660046101f1565b61009d565b005b6000546001600160a01b031633146100c857604051630636a15760e11b815260040160405180910390fd5b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1790529151600092839290871691610124919061022d565b6000604051808303816000865af19150503d8060008114610161576040519150601f19603f3d011682016040523d82523d6000602084013e610166565b606091505b5091509150818015610190575080511580610190575080806020019051810190610190919061025c565b6101ce5760405162461bcd60e51b81526004016101c5906020808252600490820152634453553160e01b604082015260600190565b60405180910390fd5b5050505050565b80356001600160a01b03811681146101ec57600080fd5b919050565b60008060006060848603121561020657600080fd5b61020f846101d5565b925061021d602085016101d5565b9150604084013590509250925092565b6000825160005b8181101561024e5760208186018101518583015201610234565b506000920191825250919050565b60006020828403121561026e57600080fd5b8151801515811461027e57600080fd5b939250505056fea26469706673582212203a501ea5b13c8b7575c93e9a2214e2526523a151e60445f0926a5b7014c72bfd64736f6c63430008130033a2646970667358221220e162ed0882f99979e5f0ec4beed0987fbb6b2b5744c196edf6a0e27ccddd2dad64736f6c63430008130033