Discover more of Etherscan's tools and services in one place.
Sponsored
Contract Source Code:
File 1 of 1 : ChannelWallet
pragma solidity ^0.5.0; contract Ownable { bool private stopped; address private _owner; address private _master; event Stopped(); event Started(); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); event MasterRoleTransferred(address indexed previousMaster, address indexed newMaster); constructor () internal { stopped = false; _owner = msg.sender; _master = msg.sender; emit OwnershipTransferred(address(0), _owner); emit MasterRoleTransferred(address(0), _master); } function owner() public view returns (address) { return _owner; } function master() public view returns (address) { return _master; } modifier onlyOwner() { require(isOwner()); _; } modifier onlyMaster() { require(isMaster() || isOwner()); _; } modifier onlyWhenNotStopped() { require(!isStopped()); _; } function isOwner() public view returns (bool) { return msg.sender == _owner; } function isMaster() public view returns (bool) { return msg.sender == _master; } function transferOwnership(address newOwner) external onlyOwner { _transferOwnership(newOwner); } function transferMasterRole(address newMaster) external onlyOwner { _transferMasterRole(newMaster); } function isStopped() public view returns (bool) { return stopped; } function stop() public onlyOwner { _stop(); } function start() public onlyOwner { _start(); } function _transferOwnership(address newOwner) internal { require(newOwner != address(0)); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } function _transferMasterRole(address newMaster) internal { require(newMaster != address(0)); emit MasterRoleTransferred(_master, newMaster); _master = newMaster; } function _stop() internal { emit Stopped(); stopped = true; } function _start() internal { emit Started(); stopped = false; } } contract ChannelWallet is Ownable { mapping(string => address) private addressMap; event SetAddress(string channelId, address _address); event UpdateAddress(string from, string to); event DeleteAddress(string account); constructor (address newMaster) public { _transferMasterRole(newMaster); } function version() external pure returns(string memory) { return '0.0.1'; } function getAddress(string calldata channelId) external view returns (address) { return addressMap[channelId]; } function setAddress(string calldata channelId, address _address) external onlyMaster onlyWhenNotStopped { require(bytes(channelId).length > 0); addressMap[channelId] = _address; emit SetAddress(channelId, _address); } function updateChannel(string calldata from, string calldata to, address _address) external onlyMaster onlyWhenNotStopped { require(bytes(from).length > 0); require(bytes(to).length > 0); require(addressMap[to] == address(0)); addressMap[to] = _address; addressMap[from] = address(0); emit UpdateAddress(from, to); } function deleteChannel(string calldata channelId) external onlyMaster onlyWhenNotStopped { require(bytes(channelId).length > 0); addressMap[channelId] = address(0); emit DeleteAddress(channelId); } }
Please enter a contract address above to load the contract details and source code.
Please DO NOT store any passwords or private keys here. A private note (up to 100 characters) can be saved and is useful for transaction tracking.
My Name Tag:
Private Note:
This website uses cookies to improve your experience. By continuing to use this website, you agree to its Terms and Privacy Policy.