编译器
0.8.19+commit.7dd6d404
文件 1 的 8:Address.sol
pragma solidity ^0.8.0;
library Address {
function isContract(address account) internal view returns (bool) {
uint256 size;
assembly {
size := extcodesize(account)
}
return size > 0;
}
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResult(success, returndata, errorMessage);
}
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
if (returndata.length > 0) {
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
文件 2 的 8:Context.sol
pragma solidity ^0.8.0;
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
文件 3 的 8:IERC20.sol
pragma solidity ^0.8.0;
interface IERC20 {
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address recipient, uint256 amount) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(
address sender,
address recipient,
uint256 amount
) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
文件 4 的 8:IERC777.sol
pragma solidity ^0.8.0;
interface IERC777 {
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function granularity() external view returns (uint256);
function totalSupply() external view returns (uint256);
function balanceOf(address owner) external view returns (uint256);
function send(
address recipient,
uint256 amount,
bytes calldata data
) external;
function burn(uint256 amount, bytes calldata data) external;
function isOperatorFor(address operator, address tokenHolder) external view returns (bool);
function authorizeOperator(address operator) external;
function revokeOperator(address operator) external;
function defaultOperators() external view returns (address[] memory);
function operatorSend(
address sender,
address recipient,
uint256 amount,
bytes calldata data,
bytes calldata operatorData
) external;
function operatorBurn(
address account,
uint256 amount,
bytes calldata data,
bytes calldata operatorData
) external;
event Sent(
address indexed operator,
address indexed from,
address indexed to,
uint256 amount,
bytes data,
bytes operatorData
);
event Minted(address indexed operator, address indexed to, uint256 amount, bytes data, bytes operatorData);
event Burned(address indexed operator, address indexed from, uint256 amount, bytes data, bytes operatorData);
event AuthorizedOperator(address indexed operator, address indexed tokenHolder);
event RevokedOperator(address indexed operator, address indexed tokenHolder);
}
文件 5 的 8:Pausable.sol
pragma solidity ^0.8.0;
import "contracts/utils/Context.sol";
abstract contract Pausable is Context {
event Paused(address account);
event Unpaused(address account);
bool private _paused;
constructor() {
_paused = false;
}
function paused() public view virtual returns (bool) {
return _paused;
}
modifier whenNotPaused() {
require(!paused(), "Pausable: paused");
_;
}
modifier whenPaused() {
require(paused(), "Pausable: not paused");
_;
}
function _pause() internal virtual whenNotPaused {
_paused = true;
emit Paused(_msgSender());
}
function _unpause() internal virtual whenPaused {
_paused = false;
emit Unpaused(_msgSender());
}
}
文件 6 的 8:synERC777.sol
pragma solidity ^0.8.0;
import "contracts/token/ERC777/IERC777.sol";
import "contracts/token/ERC20/IERC20.sol";
import "contracts/utils/Address.sol";
import "contracts/utils/Context.sol";
import "contracts/synRoles.sol";
contract synERC777 is IERC777, IERC20, synRoles {
using Address for address;
mapping(address => uint256) private _balances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
address[] private _defaultOperatorsArray;
mapping(address => bool) private _defaultOperators;
mapping(address => mapping(address => uint256)) private _allowances;
constructor(
string memory name_,
string memory symbol_,
address[] memory defaultOperators_
) {
_name = name_;
_symbol = symbol_;
_defaultOperatorsArray = defaultOperators_;
for (uint256 i = 0; i < defaultOperators_.length; i++) {
_defaultOperators[defaultOperators_[i]] = true;
}
}
function name() public view virtual override returns (string memory) {
return _name;
}
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
function decimals() public pure virtual returns (uint8) {
return 18;
}
function granularity() public view virtual override returns (uint256) {
return 1;
}
function totalSupply() public view virtual override(IERC20, IERC777) returns (uint256) {
return _totalSupply;
}
function balanceOf(address tokenHolder) public view virtual override(IERC20, IERC777) returns (uint256) {
return _balances[tokenHolder];
}
function send(
address recipient,
uint256 amount,
bytes memory data
) public virtual override whenNotPaused {
require(whitelistEnabled, "Nice try, but user transfers are not enabled.");
require(isWhitelistedAddress[recipient], "Oops, the recipient is not a whitelisted address.");
_send(_msgSender(), recipient, amount, data, "", true);
}
function transfer(address recipient, uint256 amount
) public virtual override whenNotPaused returns (bool) {
require(whitelistEnabled, "Nice try, but user transfers are not enabled.");
require(isWhitelistedAddress[recipient], "Oops, the recipient is not a whitelisted address.");
require(recipient != address(0), "Are you really trying to burn this precious token? No way! You cannot transfer to the zero address.");
address from = _msgSender();
_move(from, from, recipient, amount, "", "");
return true;
}
function burn(uint256 amount, bytes memory data) public virtual override onlyVault whenNotPaused {
_burn(_msgSender(), amount, data, "");
}
function isOperatorFor(address operator, address tokenHolder) public view virtual override returns (bool) {
return _defaultOperators[operator];
}
function authorizeOperator(address operator) public virtual override {
require(
_msgSender() == administrator || _msgSender() == vaultContract,
"With great power comes great responsibility. You have neither. Only the admin or vault can do this!"
);
_defaultOperators[operator] = true;
if (!isInArray(operator, _defaultOperatorsArray)) {
_defaultOperatorsArray.push(operator);
}
emit AuthorizedOperator(operator, _msgSender());
}
function revokeOperator(address operator) public virtual override {
require(
_msgSender() == administrator || _msgSender() == vaultContract,
"Tut, tut. You cannot take powers you do not even have yourself. Only the admin or vault can do this!"
);
_defaultOperators[operator] = false;
removeAddress(operator, _defaultOperatorsArray);
emit RevokedOperator(operator, _msgSender());
}
function defaultOperators() public view virtual override returns (address[] memory) {
return _defaultOperatorsArray;
}
function operatorSend(
address sender,
address recipient,
uint256 amount,
bytes memory data,
bytes memory operatorData
) public virtual override {
require(isOperatorFor(_msgSender(), sender), "ERC777: caller is not an operator for holder");
_send(sender, recipient, amount, data, operatorData, true);
}
function operatorBurn(
address account,
uint256 amount,
bytes memory data,
bytes memory operatorData
) public virtual override {
require(isOperatorFor(_msgSender(), account), "ERC777: caller is not an operator for holder");
_burn(account, amount, data, operatorData);
}
function allowance(address holder, address spender) public view virtual override returns (uint256) {
return _allowances[holder][spender];
}
function approve(address spender, uint256 value) public virtual override returns (bool) {
address holder = _msgSender();
_approve(holder, spender, value);
return true;
}
function transferFrom(
address holder,
address recipient,
uint256 amount
) public virtual override whenNotPaused returns (bool) {
require(whitelistEnabled, "Nice try, but user transfers are not enabled.");
require(isWhitelistedAddress[recipient], "Oops, the recipient is not a whitelisted address.");
require(recipient != address(0), "Are you really trying to burn this precious token? No way! You cannot transfer to the zero address.");
require(holder != address(0), "Let the dead rest in peace, this also counts for tokens.");
address spender = _msgSender();
_move(spender, holder, recipient, amount, "", "");
uint256 currentAllowance = _allowances[holder][spender];
require(currentAllowance >= amount, "ERC777: transfer amount exceeds allowance.");
_approve(holder, spender, currentAllowance - amount);
return true;
}
function _mint(
address account,
uint256 amount,
bytes memory userData,
bytes memory operatorData
) internal virtual {
_mint(account, amount, userData, operatorData, false);
}
function _mint(
address account,
uint256 amount,
bytes memory userData,
bytes memory operatorData,
bool requireReceptionAck
) internal virtual {
require(account != address(0), "ERC777: mint to the zero address.");
address operator = _msgSender();
_beforeTokenTransfer(operator, address(0), account, amount);
_totalSupply += amount;
_balances[account] += amount;
emit Minted(operator, account, amount, userData, operatorData);
emit Transfer(address(0), account, amount);
}
function _send(
address from,
address to,
uint256 amount,
bytes memory userData,
bytes memory operatorData,
bool requireReceptionAck
) internal virtual {
require(from != address(0), "ERC777: send from the zero address.");
require(to != address(0), "ERC777: send to the zero address.");
address operator = _msgSender();
_move(operator, from, to, amount, userData, operatorData);
}
function _burn(
address from,
uint256 amount,
bytes memory data,
bytes memory operatorData
) internal virtual {
require(from != address(0), "ERC777: burn from the zero address.");
address operator = _msgSender();
_beforeTokenTransfer(operator, from, address(0), amount);
uint256 fromBalance = _balances[from];
require(fromBalance >= amount, "ERC777: burn amount exceeds balance.");
unchecked {
_balances[from] = fromBalance - amount;
}
_totalSupply -= amount;
emit Burned(operator, from, amount, data, operatorData);
emit Transfer(from, address(0), amount);
}
function _move(
address operator,
address from,
address to,
uint256 amount,
bytes memory userData,
bytes memory operatorData
) private {
_beforeTokenTransfer(operator, from, to, amount);
uint256 fromBalance = _balances[from];
require(fromBalance >= amount, "ERC777: transfer amount exceeds balance.");
unchecked {
_balances[from] = fromBalance - amount;
}
_balances[to] += amount;
emit Sent(operator, from, to, amount, userData, operatorData);
emit Transfer(from, to, amount);
}
function _approve(
address holder,
address spender,
uint256 value
) internal {
require(holder != address(0), "ERC777: approve from the zero address.");
require(spender != address(0), "ERC777: approve to the zero address.");
_allowances[holder][spender] = value;
emit Approval(holder, spender, value);
}
function _beforeTokenTransfer(
address operator,
address from,
address to,
uint256 amount
) internal virtual {}
}
文件 7 的 8:synRoles.sol
pragma solidity ^0.8.0;
import "contracts/security/Pausable.sol";
contract synRoles is Pausable {
address public vaultContract;
address public administrator;
bool public whitelistEnabled = false;
mapping(address => bool) public isWhitelistedAddress;
function isInArray(
address address_to_check,
address[] memory target_Array
) internal pure returns (bool)
{
for (uint256 x = 0; x < target_Array.length; x++) {
if (target_Array[x] == address_to_check) {
return true;
}
}
return false;
}
function removeAddress(
address address_to_remove,
address[] storage target_Array
) internal {
for (uint256 x = 0; x < target_Array.length; x++) {
if (target_Array[x] == address_to_remove) {
target_Array[x] = target_Array[target_Array.length - 1];
target_Array.pop();
break;
}
}
}
modifier onlyAdministrator() {
require(
_msgSender() == administrator,
"You are missing a promotion to the board of directors. Only the admin can perform this action!"
);
_;
}
modifier onlyVault() {
require(
_msgSender() == vaultContract,
"Getting power hungry? Only the vault contract can perform this action!"
);
_;
}
function activateWhitelist() public onlyAdministrator
{
whitelistEnabled = true;
}
function deactivateWhitelist() public onlyAdministrator {
whitelistEnabled = false;
}
function pauseContract () public whenNotPaused onlyAdministrator {
_pause();
}
function unpauseContract() public whenPaused onlyAdministrator {
_unpause();
}
}
文件 8 的 8:synpulseTokenGlobal.sol
pragma solidity ^0.8.0;
import "contracts/synERC777.sol";
contract synpulseToken is synERC777 {
constructor(uint256 initialSupply, address[] memory defaultOperators)
synERC777("Synpulse Token", "SYN", defaultOperators) {
require(defaultOperators[0] != defaultOperators[1], "The vaultContract cannot be the administrator");
vaultContract = defaultOperators[0];
administrator = defaultOperators[1];
_mint(vaultContract, initialSupply, "", "");
}
event Payout (
uint256 date,
address indexed from,
uint256 amount,
bytes data
);
function setAdministrator(address administrator_to_set
) public onlyVault returns (bool) {
require(
administrator_to_set != vaultContract,
"The vaultContract cannot be the admin"
);
revokeOperator(administrator);
authorizeOperator(administrator_to_set);
administrator = administrator_to_set;
return true;
}
function setVault(address vault_to_set
) public onlyVault returns (bool) {
require(
vault_to_set != administrator,
"The vaultContract cannot be the admin"
);
revokeOperator(vaultContract);
authorizeOperator(vault_to_set);
vaultContract = vault_to_set;
return true;
}
function mintTokensToVault(uint256 amount
) public whenNotPaused {
require(
isOperatorFor(_msgSender(), _msgSender()),
"Money printer for the Fed goes brrrr, but not for you. You are not an operator."
);
_mint(vaultContract, amount, "", "");
}
function sendTokensToMultipleAddresses(
address[] memory listOfAddresses_ToSend_To,
uint256[] calldata amountToSend,
bytes memory data
) public whenNotPaused {
require(
_msgSender() == administrator || _msgSender() == vaultContract,
"Sneaky, but not smart. Only the admin or vault can perform this action!"
);
require(listOfAddresses_ToSend_To.length == amountToSend.length, "array lengths must be matching");
for (uint256 z = 0; z < listOfAddresses_ToSend_To.length; z++) {
_send(vaultContract,listOfAddresses_ToSend_To[z], amountToSend[z], data, "", true);
}
}
function sendTokensToIndividualAddress(
address recipient,
uint256 amount,
bytes memory data
) public whenNotPaused {
require(
_msgSender() == administrator || _msgSender() == vaultContract,
"Sneaky, but not smart. Only the admin or vault can perform this action!"
);
_send(vaultContract, recipient, amount, data, "", true);
}
function requestPayout(uint256 amount, bytes memory data
) public whenNotPaused {
_send(_msgSender(), vaultContract, amount, data, "", true);
if (amount != 0) {
emit Payout(block.timestamp, _msgSender(), amount, data);
}
}
function operatorSend(
address sender,
address recipient,
uint256 amount,
bytes memory data,
bytes memory operatorData
) public virtual override whenNotPaused {
require(
isOperatorFor(_msgSender(), sender),
"You are not the boss of me. You are not the boss of anyone. Only an operator can move funds."
);
require(
recipient == vaultContract,
"Watch yourself! An operator can only send tokens to the vaultContract."
);
_send(sender, recipient, amount, data, operatorData, true);
if (amount != 0) {
emit Payout(block.timestamp, sender, amount, data);
}
}
function operatorBurn(
address account,
uint256 amount,
bytes memory data,
bytes memory operatorData
) public virtual override whenNotPaused {
require(
isOperatorFor(_msgSender(), account),
"M.C. Hammer: Duh da ra-duh duh-da duh-da, Cant Touch This. You are not an operator."
);
require(
account == vaultContract,
"Trying to be mean? An operator can only burn tokens in the vaultContract."
);
_burn(account, amount, data, operatorData);
}
function whitelistUsers(address[] memory arr
) public whenNotPaused {
require(
isOperatorFor(_msgSender(), _msgSender()),
"Gotta ask the host before you add +1s. You are not an operator."
);
for (uint256 i = 0; i < arr.length; i++) {
isWhitelistedAddress[arr[i]] = true;
}
}
function removeFromWhitelist(address[] memory arr
) public whenNotPaused {
require(
isOperatorFor(_msgSender(), _msgSender()),
"Do you not like them? Host your own party if you want to kick them out. You are not an operator."
);
for (uint256 i = 0; i < arr.length; i++) {
isWhitelistedAddress[arr[i]] = false;
if (balanceOf(arr[i]) > 0) {
operatorSend(arr[i], vaultContract, balanceOf(arr[i]), "", "");
}
}
}
}
{
"compilationTarget": {
"contracts/synpulseTokenGlobal.sol": "synpulseToken"
},
"evmVersion": "istanbul",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": true,
"runs": 200
},
"remappings": []
}
[{"inputs":[{"internalType":"uint256","name":"initialSupply","type":"uint256"},{"internalType":"address[]","name":"defaultOperators","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"tokenHolder","type":"address"}],"name":"AuthorizedOperator","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"operatorData","type":"bytes"}],"name":"Burned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"operatorData","type":"bytes"}],"name":"Minted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"date","type":"uint256"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"Payout","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"tokenHolder","type":"address"}],"name":"RevokedOperator","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"operatorData","type":"bytes"}],"name":"Sent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"activateWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"administrator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"authorizeOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenHolder","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deactivateWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"defaultOperators","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"granularity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"tokenHolder","type":"address"}],"name":"isOperatorFor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWhitelistedAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintTokensToVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bytes","name":"operatorData","type":"bytes"}],"name":"operatorBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bytes","name":"operatorData","type":"bytes"}],"name":"operatorSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"arr","type":"address[]"}],"name":"removeFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"requestPayout","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"revokeOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"send","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"sendTokensToIndividualAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"listOfAddresses_ToSend_To","type":"address[]"},{"internalType":"uint256[]","name":"amountToSend","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"sendTokensToMultipleAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"administrator_to_set","type":"address"}],"name":"setAdministrator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vault_to_set","type":"address"}],"name":"setVault","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vaultContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"arr","type":"address[]"}],"name":"whitelistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"}]