Overview
ETH Balance
0.095204863369883581 ETH
Eth Value
$295.69 (@ $3,105.87/ETH)Token Holdings
More Info
Private Name Tags
ContractCreator
Latest 10 from a total of 10 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Proxy Assert | 5729321 | 2358 days ago | IN | 0 ETH | 0.00070177 | ||||
Proxy Assert | 5721954 | 2360 days ago | IN | 0 ETH | 0.00056235 | ||||
Proxy | 5721944 | 2360 days ago | IN | 0 ETH | 0.00041017 | ||||
Proxy | 5721931 | 2360 days ago | IN | 0 ETH | 0.00041158 | ||||
Transfer | 5721926 | 2360 days ago | IN | 0.01 ETH | 0.00022545 | ||||
Proxy Assert | 5233472 | 2444 days ago | IN | 0 ETH | 0.00011921 | ||||
Proxy Assert | 5233471 | 2444 days ago | IN | 0 ETH | 0.00005108 | ||||
Proxy Assert | 5221499 | 2446 days ago | IN | 0 ETH | 0.00014774 | ||||
Proxy Assert | 5176014 | 2453 days ago | IN | 0 ETH | 0.00022161 | ||||
Proxy Assert | 5167211 | 2455 days ago | IN | 0 ETH | 0.000166 |
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
AuthenticatedProxy
Compiler Version
v0.4.18+commit.9cf6e910
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-02-21 */ pragma solidity ^0.4.13; contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } contract TokenRecipient { event ReceivedEther(address indexed sender, uint amount); event ReceivedTokens(address indexed from, uint256 value, address indexed token, bytes extraData); /** * @dev Receive tokens and generate a log event * @param from Address from which to transfer tokens * @param value Amount of tokens to transfer * @param token Address of token * @param extraData Additional data to log */ function receiveApproval(address from, uint256 value, address token, bytes extraData) public { ERC20 t = ERC20(token); require(t.transferFrom(from, this, value)); ReceivedTokens(from, value, token, extraData); } /** * @dev Receive Ether and generate a log event */ function () payable public { ReceivedEther(msg.sender, msg.value); } } contract AuthenticatedProxy is TokenRecipient { /* Address which owns this proxy. */ address public user; /* Associated registry with contract authentication information. */ ProxyRegistry public registry; /* Whether access has been revoked. */ bool public revoked; /* Delegate call could be used to atomically transfer multiple assets owned by the proxy contract with one order. */ enum HowToCall { Call, DelegateCall } /* Event fired when the proxy access is revoked or unrevoked. */ event Revoked(bool revoked); /** * Create an AuthenticatedProxy * * @param addrUser Address of user on whose behalf this proxy will act * @param addrRegistry Address of ProxyRegistry contract which will manage this proxy */ function AuthenticatedProxy(address addrUser, ProxyRegistry addrRegistry) public { user = addrUser; registry = addrRegistry; } /** * Set the revoked flag (allows a user to revoke ProxyRegistry access) * * @dev Can be called by the user only * @param revoke Whether or not to revoke access */ function setRevoke(bool revoke) public { require(msg.sender == user); revoked = revoke; Revoked(revoke); } /** * Execute a message call from the proxy contract * * @dev Can be called by the user, or by a contract authorized by the registry as long as the user has not revoked access * @param dest Address to which the call will be sent * @param howToCall Which kind of call to make * @param calldata Calldata to send * @return Result of the call (success or failure) */ function proxy(address dest, HowToCall howToCall, bytes calldata) public returns (bool result) { require(msg.sender == user || (!revoked && registry.contracts(msg.sender))); if (howToCall == HowToCall.Call) { result = dest.call(calldata); } else if (howToCall == HowToCall.DelegateCall) { result = dest.delegatecall(calldata); } return result; } /** * Execute a message call and assert success * * @dev Same functionality as `proxy`, just asserts the return value * @param dest Address to which the call will be sent * @param howToCall What kind of call to make * @param calldata Calldata to send */ function proxyAssert(address dest, HowToCall howToCall, bytes calldata) public { require(proxy(dest, howToCall, calldata)); } } contract ProxyRegistry is Ownable { /* Authenticated proxies by user. */ mapping(address => AuthenticatedProxy) public proxies; /* Contracts pending access. */ mapping(address => uint) public pending; /* Contracts allowed to call those proxies. */ mapping(address => bool) public contracts; /* Delay period for adding an authenticated contract. This mitigates a particular class of potential attack on the Wyvern DAO (which owns this registry) - if at any point the value of assets held by proxy contracts exceeded the value of half the WYV supply (votes in the DAO), a malicious but rational attacker could buy half the Wyvern and grant themselves access to all the proxy contracts. A delay period renders this attack nonthreatening - given two weeks, if that happened, users would have plenty of time to notice and transfer their assets. */ uint public DELAY_PERIOD = 2 weeks; /** * Start the process to enable access for specified contract. Subject to delay period. * * @dev ProxyRegistry owner only * @param addr Address to which to grant permissions */ function startGrantAuthentication (address addr) public onlyOwner { require(!contracts[addr] && pending[addr] == 0); pending[addr] = now; } /** * End the process to nable access for specified contract after delay period has passed. * * @dev ProxyRegistry owner only * @param addr Address to which to grant permissions */ function endGrantAuthentication (address addr) public onlyOwner { require(!contracts[addr] && pending[addr] != 0 && ((pending[addr] + DELAY_PERIOD) < now)); pending[addr] = 0; contracts[addr] = true; } /** * Revoke access for specified contract. Can be done instantly. * * @dev ProxyRegistry owner only * @param addr Address of which to revoke permissions */ function revokeAuthentication (address addr) public onlyOwner { contracts[addr] = false; } /** * Register a proxy contract with this registry * * @dev Must be called by the user which the proxy is for, creates a new AuthenticatedProxy * @return New AuthenticatedProxy contract */ function registerProxy() public returns (AuthenticatedProxy proxy) { require(proxies[msg.sender] == address(0)); proxy = new AuthenticatedProxy(msg.sender, this); proxies[msg.sender] = proxy; return proxy; } } contract WyvernProxyRegistry is ProxyRegistry { string public constant name = "Project Wyvern Proxy Registry"; /* Whether the initial auth address has been set. */ bool public initialAddressSet = false; /** * Grant authentication to the initial Exchange protocol contract * * @dev No delay, can only be called once - after that the standard registry process with a delay must be used * @param authAddress Address of the contract to grant authentication */ function grantInitialAuthentication (address authAddress) onlyOwner public { require(!initialAddressSet); initialAddressSet = true; contracts[authAddress] = true; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":false,"inputs":[{"name":"dest","type":"address"},{"name":"howToCall","type":"uint8"},{"name":"calldata","type":"bytes"}],"name":"proxy","outputs":[{"name":"result","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"dest","type":"address"},{"name":"howToCall","type":"uint8"},{"name":"calldata","type":"bytes"}],"name":"proxyAssert","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"revoke","type":"bool"}],"name":"setRevoke","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"user","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"revoked","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"registry","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"value","type":"uint256"},{"name":"token","type":"address"},{"name":"extraData","type":"bytes"}],"name":"receiveApproval","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"addrUser","type":"address"},{"name":"addrRegistry","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"revoked","type":"bool"}],"name":"Revoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"sender","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"ReceivedEther","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":true,"name":"token","type":"address"},{"indexed":false,"name":"extraData","type":"bytes"}],"name":"ReceivedTokens","type":"event"}]
Contract Creation Code
6060604052341561000f57600080fd5b60405160408061071a833981016040528080519190602001805160008054600160a060020a03958616600160a060020a031991821617909155600180549590921694169390931790925550506106b08061006a6000396000f3006060604052600436106100695763ffffffff60e060020a6000350416631b0f7ba981146100a85780633f801f91146101245780634c93505f1461018e5780634f8632ba146101a657806363d256ce146101d55780637b103999146101e85780638f4ffcb1146101fb575b33600160a060020a03167fa419615bc8fda4c87663805ee2a3597a6d71c1d476911d9892f340d965bc7bf13460405190815260200160405180910390a2005b34156100b357600080fd5b61011060048035600160a060020a0316906024803560ff16919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965061026795505050505050565b604051901515815260200160405180910390f35b341561012f57600080fd5b61018c60048035600160a060020a0316906024803560ff16919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965061045295505050505050565b005b341561019957600080fd5b61018c600435151561046d565b34156101b157600080fd5b6101b96104f9565b604051600160a060020a03909116815260200160405180910390f35b34156101e057600080fd5b610110610508565b34156101f357600080fd5b6101b9610529565b341561020657600080fd5b61018c60048035600160a060020a0390811691602480359260443516919060849060643590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965061053895505050505050565b6000805433600160a060020a039081169116148061031b575060015474010000000000000000000000000000000000000000900460ff1615801561031b5750600154600160a060020a03166369dc9ff33360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156102ff57600080fd5b6102c65a03f1151561031057600080fd5b505050604051805190505b151561032657600080fd5b600083600181111561033457fe5b14156103bc5783600160a060020a03168260405180828051906020019080838360005b8381101561036f578082015183820152602001610357565b50505050905090810190601f16801561039c5780820380516001836020036101000a031916815260200191505b5091505060006040518083038160008661646e5a03f1915050905061044b565b60018360018111156103ca57fe5b141561044b5783600160a060020a03168260405180828051906020019080838360005b838110156104055780820151838201526020016103ed565b50505050905090810190601f1680156104325780820380516001836020036101000a031916815260200191505b509150506000604051808303818561646e5a03f4925050505b9392505050565b61045d838383610267565b151561046857600080fd5b505050565b60005433600160a060020a0390811691161461048857600080fd5b6001805474ff0000000000000000000000000000000000000000191674010000000000000000000000000000000000000000831515021790557f2165014523a6f4135deffed62d70149aad59b64de5aac51e3abbcbe2a83e2f7e81604051901515815260200160405180910390a150565b600054600160a060020a031681565b60015474010000000000000000000000000000000000000000900460ff1681565b600154600160a060020a031681565b81600160a060020a0381166323b872dd86308760006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b15156105a357600080fd5b6102c65a03f115156105b457600080fd5b5050506040518051905015156105c957600080fd5b82600160a060020a031685600160a060020a03167fd65b48fd35864b3528d38e44760be5553248f89bf3ff6b06cca57817cc2650bf868560405182815260406020820181815290820183818151815260200191508051906020019080838360005b8381101561064257808201518382015260200161062a565b50505050905090810190601f16801561066f5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a350505050505600a165627a7a72305820f03453619e690e4369306b62975f07ada1749fb20451bf692ceafeede289aefd00290000000000000000000000000084a81668b9a978416abeb88bc1572816cc7cac000000000000000000000000a4306692b00795f97010ec7237980141d08c6d56
Deployed Bytecode
0x6060604052600436106100695763ffffffff60e060020a6000350416631b0f7ba981146100a85780633f801f91146101245780634c93505f1461018e5780634f8632ba146101a657806363d256ce146101d55780637b103999146101e85780638f4ffcb1146101fb575b33600160a060020a03167fa419615bc8fda4c87663805ee2a3597a6d71c1d476911d9892f340d965bc7bf13460405190815260200160405180910390a2005b34156100b357600080fd5b61011060048035600160a060020a0316906024803560ff16919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965061026795505050505050565b604051901515815260200160405180910390f35b341561012f57600080fd5b61018c60048035600160a060020a0316906024803560ff16919060649060443590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965061045295505050505050565b005b341561019957600080fd5b61018c600435151561046d565b34156101b157600080fd5b6101b96104f9565b604051600160a060020a03909116815260200160405180910390f35b34156101e057600080fd5b610110610508565b34156101f357600080fd5b6101b9610529565b341561020657600080fd5b61018c60048035600160a060020a0390811691602480359260443516919060849060643590810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284375094965061053895505050505050565b6000805433600160a060020a039081169116148061031b575060015474010000000000000000000000000000000000000000900460ff1615801561031b5750600154600160a060020a03166369dc9ff33360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156102ff57600080fd5b6102c65a03f1151561031057600080fd5b505050604051805190505b151561032657600080fd5b600083600181111561033457fe5b14156103bc5783600160a060020a03168260405180828051906020019080838360005b8381101561036f578082015183820152602001610357565b50505050905090810190601f16801561039c5780820380516001836020036101000a031916815260200191505b5091505060006040518083038160008661646e5a03f1915050905061044b565b60018360018111156103ca57fe5b141561044b5783600160a060020a03168260405180828051906020019080838360005b838110156104055780820151838201526020016103ed565b50505050905090810190601f1680156104325780820380516001836020036101000a031916815260200191505b509150506000604051808303818561646e5a03f4925050505b9392505050565b61045d838383610267565b151561046857600080fd5b505050565b60005433600160a060020a0390811691161461048857600080fd5b6001805474ff0000000000000000000000000000000000000000191674010000000000000000000000000000000000000000831515021790557f2165014523a6f4135deffed62d70149aad59b64de5aac51e3abbcbe2a83e2f7e81604051901515815260200160405180910390a150565b600054600160a060020a031681565b60015474010000000000000000000000000000000000000000900460ff1681565b600154600160a060020a031681565b81600160a060020a0381166323b872dd86308760006040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b15156105a357600080fd5b6102c65a03f115156105b457600080fd5b5050506040518051905015156105c957600080fd5b82600160a060020a031685600160a060020a03167fd65b48fd35864b3528d38e44760be5553248f89bf3ff6b06cca57817cc2650bf868560405182815260406020820181815290820183818151815260200191508051906020019080838360005b8381101561064257808201518382015260200161062a565b50505050905090810190601f16801561066f5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a350505050505600a165627a7a72305820f03453619e690e4369306b62975f07ada1749fb20451bf692ceafeede289aefd0029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000084a81668b9a978416abeb88bc1572816cc7cac000000000000000000000000a4306692b00795f97010ec7237980141d08c6d56
-----Decoded View---------------
Arg [0] : addrUser (address): 0x0084a81668B9A978416aBEB88bC1572816cc7cAC
Arg [1] : addrRegistry (address): 0xa4306692b00795f97010ec7237980141d08c6D56
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000084a81668b9a978416abeb88bc1572816cc7cac
Arg [1] : 000000000000000000000000a4306692b00795f97010ec7237980141d08c6d56
Swarm Source
bzzr://f03453619e690e4369306b62975f07ada1749fb20451bf692ceafeede289aefd
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $3,107.32 | 0.0952 | $295.83 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.