ETH Price: $2,070.63 (+6.13%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Deploy122508702021-04-16 11:35:021757 days ago1618572902IN
AdEx: Deployer 1
0 ETH0.0140124120
Deploy105873802020-08-03 14:37:482013 days ago1596465468IN
AdEx: Deployer 1
0 ETH0.102939100
Deploy And Fund92790332020-01-14 11:51:362215 days ago1579002696IN
AdEx: Deployer 1
0 ETH0.000256461.43
Deploy And Fund92542232020-01-10 16:46:052219 days ago1578674765IN
AdEx: Deployer 1
0 ETH0.000406212.26512
Deploy And Fund92534432020-01-10 13:54:272219 days ago1578664467IN
AdEx: Deployer 1
0 ETH0.000466272.6
Deploy And Fund92494362020-01-09 23:12:502219 days ago1578611570IN
AdEx: Deployer 1
0 ETH0.000466332.6
Deploy And Fund92455092020-01-09 8:56:462220 days ago1578560206IN
AdEx: Deployer 1
0 ETH0.000233161.3
Deploy And Fund92446702020-01-09 5:41:112220 days ago1578548471IN
AdEx: Deployer 1
0 ETH0.000233161.3
Deploy And Fund92439062020-01-09 2:53:332220 days ago1578538413IN
AdEx: Deployer 1
0 ETH0.001119126.24
Deploy And Fund92413092020-01-08 17:30:202221 days ago1578504620IN
AdEx: Deployer 1
0 ETH0.000932665.2
Deploy And Fund92412122020-01-08 17:09:442221 days ago1578503384IN
AdEx: Deployer 1
0 ETH0.000466332.6
Deploy And Fund92410842020-01-08 16:40:192221 days ago1578501619IN
AdEx: Deployer 1
0 ETH0.001282417.15
Deploy And Fund92410082020-01-08 16:18:502221 days ago1578500330IN
AdEx: Deployer 1
0 ETH0.001165676.5
Deploy And Fund92404582020-01-08 14:17:242221 days ago1578493044IN
AdEx: Deployer 1
0 ETH0.000396352.21
Deploy And Fund92337292020-01-07 13:20:312222 days ago1578403231IN
AdEx: Deployer 1
0 ETH0.00046632.6
Deploy And Fund92327482020-01-07 9:46:572222 days ago1578390417IN
AdEx: Deployer 1
0 ETH0.000233161.3
Deploy And Fund92307602020-01-07 2:24:312222 days ago1578363871IN
AdEx: Deployer 1
0 ETH0.000233161.3
Deploy And Fund92274282020-01-06 14:20:442223 days ago1578320444IN
AdEx: Deployer 1
0 ETH0.00046632.6
Deploy And Fund92273892020-01-06 14:11:352223 days ago1578319895IN
AdEx: Deployer 1
0 ETH0.000233161.3
Deploy And Fund92264082020-01-06 10:34:022223 days ago1578306842IN
AdEx: Deployer 1
0 ETH0.000489612.73
Withdraw91318982019-12-19 18:38:022240 days ago1576780682IN
AdEx: Deployer 1
0 ETH0.000291067
Withdraw91318942019-12-19 18:37:222240 days ago1576780642IN
AdEx: Deployer 1
0 ETH0.000095574
Withdraw91318632019-12-19 18:27:452240 days ago1576780065IN
AdEx: Deployer 1
0 ETH0.000166324
Deploy And Fund91214202019-12-17 16:24:042243 days ago1576599844IN
AdEx: Deployer 1
0 ETH0.0030309616.9
Deploy And Fund91164092019-12-16 16:33:242244 days ago1576514004IN
AdEx: Deployer 1
0 ETH0.001165916.5
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
-122508702021-04-16 11:35:021757 days ago1618572902
AdEx: Deployer 1
 Contract Creation0 ETH
-105873802020-08-03 14:37:482013 days ago1596465468
AdEx: Deployer 1
 Contract Creation0 ETH
-92790332020-01-14 11:51:362215 days ago1579002696
AdEx: Deployer 1
 Contract Creation0 ETH
-92542232020-01-10 16:46:052219 days ago1578674765
AdEx: Deployer 1
 Contract Creation0 ETH
-92534432020-01-10 13:54:272219 days ago1578664467
AdEx: Deployer 1
 Contract Creation0 ETH
-92494362020-01-09 23:12:502219 days ago1578611570
AdEx: Deployer 1
 Contract Creation0 ETH
-92455092020-01-09 8:56:462220 days ago1578560206
AdEx: Deployer 1
 Contract Creation0 ETH
-92446702020-01-09 5:41:112220 days ago1578548471
AdEx: Deployer 1
 Contract Creation0 ETH
-92439062020-01-09 2:53:332220 days ago1578538413
AdEx: Deployer 1
 Contract Creation0 ETH
-92413092020-01-08 17:30:202221 days ago1578504620
AdEx: Deployer 1
 Contract Creation0 ETH
-92412122020-01-08 17:09:442221 days ago1578503384
AdEx: Deployer 1
 Contract Creation0 ETH
-92410842020-01-08 16:40:192221 days ago1578501619
AdEx: Deployer 1
 Contract Creation0 ETH
-92410082020-01-08 16:18:502221 days ago1578500330
AdEx: Deployer 1
 Contract Creation0 ETH
-92404582020-01-08 14:17:242221 days ago1578493044
AdEx: Deployer 1
 Contract Creation0 ETH
-92337292020-01-07 13:20:312222 days ago1578403231
AdEx: Deployer 1
 Contract Creation0 ETH
-92327482020-01-07 9:46:572222 days ago1578390417
AdEx: Deployer 1
 Contract Creation0 ETH
-92307602020-01-07 2:24:312222 days ago1578363871
AdEx: Deployer 1
 Contract Creation0 ETH
-92274282020-01-06 14:20:442223 days ago1578320444
AdEx: Deployer 1
 Contract Creation0 ETH
-92273892020-01-06 14:11:352223 days ago1578319895
AdEx: Deployer 1
 Contract Creation0 ETH
-92264082020-01-06 10:34:022223 days ago1578306842
AdEx: Deployer 1
 Contract Creation0 ETH
-91214202019-12-17 16:24:042243 days ago1576599844
AdEx: Deployer 1
 Contract Creation0 ETH
-91164092019-12-16 16:33:242244 days ago1576514004
AdEx: Deployer 1
 Contract Creation0 ETH
-91102482019-12-15 11:48:092245 days ago1576410489
AdEx: Deployer 1
 Contract Creation0 ETH
-91008712019-12-13 16:13:062247 days ago1576253586
AdEx: Deployer 1
 Contract Creation0 ETH
-90850102019-12-10 20:27:462249 days ago1576009666
AdEx: Deployer 1
 Contract Creation0 ETH
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
IdentityFactory

Compiler Version
v0.5.6+commit.b259423e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2019-05-09
*/

pragma solidity ^0.5.6;
pragma experimental ABIEncoderV2;

interface GeneralERC20 {
	function transfer(address to, uint256 value) external;
	function transferFrom(address from, address to, uint256 value) external;
	function approve(address spender, uint256 value) external;
	function balanceOf(address spender) external view returns (uint);
}

library SafeERC20 {
	function checkSuccess()
		private
		pure
		returns (bool)
	{
		uint256 returnValue = 0;

		assembly {
			// check number of bytes returned from last function call
			switch returndatasize

			// no bytes returned: assume success
			case 0x0 {
				returnValue := 1
			}

			// 32 bytes returned: check if non-zero
			case 0x20 {
				// copy 32 bytes into scratch space
				returndatacopy(0x0, 0x0, 0x20)

				// load those bytes into returnValue
				returnValue := mload(0x0)
			}

			// not sure what was returned: don't mark as success
			default { }
		}

		return returnValue != 0;
	}

	function transfer(address token, address to, uint256 amount) internal {
		GeneralERC20(token).transfer(to, amount);
		require(checkSuccess());
	}

	function transferFrom(address token, address from, address to, uint256 amount) internal {
		GeneralERC20(token).transferFrom(from, to, amount);
		require(checkSuccess());
	}

	function approve(address token, address spender, uint256 amount) internal {
		GeneralERC20(token).approve(spender, amount);
		require(checkSuccess());
	}
}

library SafeMath {

    function mul(uint a, uint b) internal pure returns (uint) {
        uint c = a * b;
        require(a == 0 || c / a == b);
        return c;
    }

    function div(uint a, uint b) internal pure returns (uint) {
        require(b > 0);
        uint c = a / b;
        require(a == b * c + a % b);
        return c;
    }

    function sub(uint a, uint b) internal pure returns (uint) {
        require(b <= a);
        return a - b;
    }

    function add(uint a, uint b) internal pure returns (uint) {
        uint c = a + b;
        require(c >= a);
        return c;
    }

    function max64(uint64 a, uint64 b) internal pure returns (uint64) {
        return a >= b ? a : b;
    }

    function min64(uint64 a, uint64 b) internal pure returns (uint64) {
        return a < b ? a : b;
    }

    function max256(uint a, uint b) internal pure returns (uint) {
        return a >= b ? a : b;
    }

    function min256(uint a, uint b) internal pure returns (uint) {
        return a < b ? a : b;
    }
}

library SignatureValidator {
	enum SignatureMode {
		NO_SIG,
		EIP712,
		GETH,
		TREZOR,
		ADEX
	}

	function recoverAddr(bytes32 hash, bytes32[3] memory signature) internal pure returns (address) {
		SignatureMode mode = SignatureMode(uint8(signature[0][0]));

		if (mode == SignatureMode.NO_SIG) {
			return address(0x0);
		}

		uint8 v = uint8(signature[0][1]);

		if (mode == SignatureMode.GETH) {
			hash = keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));
		} else if (mode == SignatureMode.TREZOR) {
			hash = keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n\x20", hash));
		} else if (mode == SignatureMode.ADEX) {
			hash = keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n108By signing this message, you acknowledge signing an AdEx bid with the hash:\n", hash));
		}

		return ecrecover(hash, v, signature[1], signature[2]);
	}

	/// @dev Validates that a hash was signed by a specified signer.
	/// @param hash Hash which was signed.
	/// @param signer Address of the signer.
	/// @param signature ECDSA signature along with the mode [{mode}{v}, {r}, {s}]
	/// @return Returns whether signature is from a specified user.
	function isValidSignature(bytes32 hash, address signer, bytes32[3] memory signature) internal pure returns (bool) {
		return recoverAddr(hash, signature) == signer;
	}
}


library ChannelLibrary {
	uint constant MAX_VALIDITY = 365 days;

	// Both numbers are inclusive
	uint constant MIN_VALIDATOR_COUNT = 2;
	// This is an arbitrary number, but we impose this limit to restrict on-chain load; also to ensure the *3 operation is safe
	uint constant MAX_VALIDATOR_COUNT = 25;

	enum State {
		Unknown,
		Active,
		Expired
	}

	struct Channel {
		address creator;

		address tokenAddr;
		uint tokenAmount;

		uint validUntil;

		address[] validators;

		// finally, arbitrary bytes32 that allows to... @TODO document that this acts as a nonce
		bytes32 spec;
	}

	function hash(Channel memory channel)
		internal
		view
		returns (bytes32)
	{
		// In this version of solidity, we can no longer keccak256() directly
		return keccak256(abi.encode(
			address(this),
			channel.creator,
			channel.tokenAddr,
			channel.tokenAmount,
			channel.validUntil,
			channel.validators,
			channel.spec
		));
	}

	function isValid(Channel memory channel, uint currentTime)
		internal
		pure
		returns (bool)
	{
		// NOTE: validators[] can be sybil'd by passing the same addr a few times
		// this does not matter since you can sybil validators[] anyway, and that is mitigated off-chain
		if (channel.validators.length < MIN_VALIDATOR_COUNT) {
			return false;
		}
		if (channel.validators.length > MAX_VALIDATOR_COUNT) {
			return false;
		}
		if (channel.validUntil < currentTime) {
			return false;
		}
		if (channel.validUntil > (currentTime + MAX_VALIDITY)) {
			return false;
		}

		return true;
	}

	function isSignedBySupermajority(Channel memory channel, bytes32 toSign, bytes32[3][] memory signatures) 
		internal
		pure
		returns (bool)
	{
		// NOTE: each element of signatures[] must signed by the elem with the same index in validators[]
		// In case someone didn't sign, pass SignatureMode.NO_SIG
		if (signatures.length != channel.validators.length) {
			return false;
		}

		uint signs = 0;
		uint sigLen = signatures.length;
		for (uint i=0; i<sigLen; i++) {
			// NOTE: if a validator has not signed, you can just use SignatureMode.NO_SIG
			if (SignatureValidator.isValidSignature(toSign, channel.validators[i], signatures[i])) {
				signs++;
			}
		}
		return signs*3 >= channel.validators.length*2;
	}
}

contract ValidatorRegistry {
	// The contract will probably just use a mapping, but this is a generic interface
	function whitelisted(address) view external returns (bool);
}

contract Identity {
	using SafeMath for uint;

	// Storage
	// WARNING: be careful when modifying this
	// privileges and routineAuthorizations must always be 0th and 1th thing in storage
	mapping (address => uint8) public privileges;
	// Routine authorizations
	mapping (bytes32 => bool) public routineAuthorizations;
	// The next allowed nonce
	uint public nonce = 0;
	// Routine operations are authorized at once for a period, fee is paid once
	mapping (bytes32 => uint256) public routinePaidFees;

	// Constants
	bytes4 private constant CHANNEL_WITHDRAW_SELECTOR = bytes4(keccak256('channelWithdraw((address,address,uint256,uint256,address[],bytes32),bytes32,bytes32[3][],bytes32[],uint256)'));
	bytes4 private constant CHANNEL_WITHDRAW_EXPIRED_SELECTOR = bytes4(keccak256('channelWithdrawExpired((address,address,uint256,uint256,address[],bytes32))'));
	bytes4 private constant CHANNEL_OPEN_SELECTOR = bytes4(keccak256('channelOpen((address,address,uint256,uint256,address[],bytes32))'));
	uint256 private constant CHANNEL_MAX_VALIDITY = 90 days;

	enum PrivilegeLevel {
		None,
		Routines,
		Transactions,
		WithdrawTo
	}
	enum RoutineOp {
		ChannelWithdraw,
		ChannelWithdrawExpired,
		ChannelOpen,
		Withdraw
	}

	// Events
	event LogPrivilegeChanged(address indexed addr, uint8 privLevel);
	event LogRoutineAuth(bytes32 hash, bool authorized);

	// Transaction structure
	// Those can be executed by keys with >= PrivilegeLevel.Transactions
	// Even though the contract cannot receive ETH, we are able to send ETH (.value), cause ETH might've been sent to the contract address before it's deployed
	struct Transaction {
		// replay protection
		address identityContract;
		uint nonce;
		// tx fee, in tokens
		address feeTokenAddr;
		uint feeAmount;
		// all the regular txn data
		address to;
		uint value;
		bytes data;
	}

	// RoutineAuthorizations allow the user to authorize (via keys >= PrivilegeLevel.Routines) a particular relayer to do any number of routines
	// those routines are safe: e.g. withdrawing channels to the identity, or from the identity to the pre-approved withdraw (>= PrivilegeLevel.Withdraw) address
	// while the fee will be paid only ONCE per auth, the authorization can be used until validUntil
	// while the routines are safe, there is some level of implied trust as the relayer may run executeRoutines without any routines to claim the fee
	struct RoutineAuthorization {
		address relayer;
		address outpace;
		address registry;
		uint validUntil;
		address feeTokenAddr;
		uint weeklyFeeAmount;
	}
	struct RoutineOperation {
		RoutineOp mode;
		bytes data;
	}

	constructor(address[] memory addrs, uint8[] memory privLevels)
		public
	{
		uint len = privLevels.length;
		for (uint i=0; i<len; i++) {
			privileges[addrs[i]] = privLevels[i];
			emit LogPrivilegeChanged(addrs[i], privLevels[i]);
		}
	}

	function setAddrPrivilege(address addr, uint8 privLevel)
		external
	{
		require(msg.sender == address(this), 'ONLY_IDENTITY_CAN_CALL');
		privileges[addr] = privLevel;
		emit LogPrivilegeChanged(addr, privLevel);
	}

	function setRoutineAuth(bytes32 hash, bool authorized)
		external
	{
		require(msg.sender == address(this), 'ONLY_IDENTITY_CAN_CALL');
		routineAuthorizations[hash] = authorized;
		emit LogRoutineAuth(hash, authorized);
	}

	function execute(Transaction[] memory txns, bytes32[3][] memory signatures)
		public
	{
		address feeTokenAddr = txns[0].feeTokenAddr;
		uint feeAmount = 0;
		uint len = txns.length;
		for (uint i=0; i<len; i++) {
			Transaction memory txn = txns[i];
			require(txn.identityContract == address(this), 'TRANSACTION_NOT_FOR_CONTRACT');
			require(txn.feeTokenAddr == feeTokenAddr, 'EXECUTE_NEEDS_SINGLE_TOKEN');
			require(txn.nonce == nonce, 'WRONG_NONCE');

			// If we use the naive abi.encode(txn) and have a field of type `bytes`,
			// there is a discrepancy between ethereumjs-abi and solidity
			// if we enter every field individually, in order, there is no discrepancy
			//bytes32 hash = keccak256(abi.encode(txn));
			bytes32 hash = keccak256(abi.encode(txn.identityContract, txn.nonce, txn.feeTokenAddr, txn.feeAmount, txn.to, txn.value, txn.data));
			address signer = SignatureValidator.recoverAddr(hash, signatures[i]);

			require(privileges[signer] >= uint8(PrivilegeLevel.Transactions), 'INSUFFICIENT_PRIVILEGE_TRANSACTION');

			nonce = nonce.add(1);
			feeAmount = feeAmount.add(txn.feeAmount);

			executeCall(txn.to, txn.value, txn.data);
			// The actual anti-bricking mechanism - do not allow a signer to drop his own priviledges
			require(privileges[signer] >= uint8(PrivilegeLevel.Transactions), 'PRIVILEGE_NOT_DOWNGRADED');
		}
		if (feeAmount > 0) {
			SafeERC20.transfer(feeTokenAddr, msg.sender, feeAmount);
		}
	}

	function executeBySender(Transaction[] memory txns)
		public
	{
		require(privileges[msg.sender] >= uint8(PrivilegeLevel.Transactions), 'INSUFFICIENT_PRIVILEGE_SENDER');
		uint len = txns.length;
		for (uint i=0; i<len; i++) {
			Transaction memory txn = txns[i];
			require(txn.nonce == nonce, 'WRONG_NONCE');

			nonce = nonce.add(1);

			executeCall(txn.to, txn.value, txn.data);
		}
		// The actual anti-bricking mechanism - do not allow the sender to drop his own priviledges
		require(privileges[msg.sender] >= uint8(PrivilegeLevel.Transactions), 'PRIVILEGE_NOT_DOWNGRADED');
	}

	function executeRoutines(RoutineAuthorization memory auth, RoutineOperation[] memory operations)
		public
	{
		require(auth.relayer == msg.sender, 'ONLY_RELAYER_CAN_CALL');
		require(auth.validUntil >= now, 'AUTHORIZATION_EXPIRED');
		bytes32 hash = keccak256(abi.encode(auth));
		require(routineAuthorizations[hash], 'NOT_AUTHORIZED');
		uint len = operations.length;
		for (uint i=0; i<len; i++) {
			RoutineOperation memory op = operations[i];
			if (op.mode == RoutineOp.ChannelWithdraw) {
				// Channel: Withdraw
				executeCall(auth.outpace, 0, abi.encodePacked(CHANNEL_WITHDRAW_SELECTOR, op.data));
			} else if (op.mode == RoutineOp.ChannelWithdrawExpired) {
				// Channel: Withdraw Expired
				executeCall(auth.outpace, 0, abi.encodePacked(CHANNEL_WITHDRAW_EXPIRED_SELECTOR, op.data));
			} else if (op.mode == RoutineOp.ChannelOpen) {
				// Channel: open
				(ChannelLibrary.Channel memory channel) = abi.decode(op.data, (ChannelLibrary.Channel));
				// Ensure validity is sane
				require(channel.validUntil <= (now + CHANNEL_MAX_VALIDITY), 'CHANNEL_EXCEEDED_MAX_VALID');
				// Ensure all validators are whitelisted
				uint validatorsLen = channel.validators.length;
				for (uint j=0; j<validatorsLen; j++) {
					require(
						ValidatorRegistry(auth.registry).whitelisted(channel.validators[j]),
						"VALIDATOR_NOT_WHITELISTED"
					);
				}
				SafeERC20.approve(channel.tokenAddr, auth.outpace, 0);
				SafeERC20.approve(channel.tokenAddr, auth.outpace, channel.tokenAmount);
				executeCall(auth.outpace, 0, abi.encodePacked(CHANNEL_OPEN_SELECTOR, op.data));
			} else if (op.mode == RoutineOp.Withdraw) {
				// Withdraw from identity
				(address tokenAddr, address to, uint amount) = abi.decode(op.data, (address, address, uint));
				require(privileges[to] >= uint8(PrivilegeLevel.WithdrawTo), 'INSUFFICIENT_PRIVILEGE_WITHDRAW');
				SafeERC20.transfer(tokenAddr, to, amount);
			} else {
				revert('INVALID_MODE');
			}
		}
		if (auth.weeklyFeeAmount > 0 && (now - routinePaidFees[hash]) >= 7 days) {
			routinePaidFees[hash] = now;
			SafeERC20.transfer(auth.feeTokenAddr, msg.sender, auth.weeklyFeeAmount);
		}
	}

	// we shouldn't use address.call(), cause: https://github.com/ethereum/solidity/issues/2884
	// copied from https://github.com/uport-project/uport-identity/blob/develop/contracts/Proxy.sol
	// there's also
	// https://github.com/gnosis/MultiSigWallet/commit/e1b25e8632ca28e9e9e09c81bd20bf33fdb405ce
	// https://github.com/austintgriffith/bouncer-proxy/blob/master/BouncerProxy/BouncerProxy.sol
	// https://github.com/gnosis/safe-contracts/blob/7e2eeb3328bb2ae85c36bc11ea6afc14baeb663c/contracts/base/Executor.sol
	function executeCall(address to, uint256 value, bytes memory data)
		internal
	{
		assembly {
			let result := call(gas, to, value, add(data, 0x20), mload(data), 0, 0)

			switch result case 0 {
				let size := returndatasize
				let ptr := mload(0x40)
				returndatacopy(ptr, 0, size)
				revert(ptr, size)
			}
			default {}
		}
	}
}

contract IdentityFactory {
	event LogDeployed(address addr, uint256 salt);

	address public relayer;
	constructor(address relayerAddr) public {
		relayer = relayerAddr;
	}

	function deploy(bytes memory code, uint256 salt) public {
		address addr;
		assembly { addr := create2(0, add(code, 0x20), mload(code), salt) }
		require(addr != address(0), "FAILED_DEPLOYING");
		emit LogDeployed(addr, salt);
	}

	function deployAndFund(bytes memory code, uint256 salt, address tokenAddr, uint256 tokenAmount) public {
		require(msg.sender == relayer, "ONLY_RELAYER");
		address addr;
		assembly { addr := create2(0, add(code, 0x20), mload(code), salt) }
		require(addr != address(0), "FAILED_DEPLOYING");
		SafeERC20.transfer(tokenAddr, addr, tokenAmount);
		emit LogDeployed(addr, salt);
	}

	function deployAndExecute(bytes memory code, uint256 salt, Identity.Transaction[] memory txns, bytes32[3][] memory signatures) public {
		address addr;
		assembly { addr := create2(0, add(code, 0x20), mload(code), salt) }
		require(addr != address(0), "FAILED_DEPLOYING");
		Identity(addr).execute(txns, signatures);
		emit LogDeployed(addr, salt);
	}

	function withdraw(address tokenAddr, address to, uint256 tokenAmount) public {
		require(msg.sender == relayer, "ONLY_RELAYER");
		SafeERC20.transfer(tokenAddr, to, tokenAmount);
	}
}

Contract Security Audit

Contract ABI

API
[{"constant":false,"inputs":[{"name":"code","type":"bytes"},{"name":"salt","type":"uint256"},{"components":[{"name":"identityContract","type":"address"},{"name":"nonce","type":"uint256"},{"name":"feeTokenAddr","type":"address"},{"name":"feeAmount","type":"uint256"},{"name":"to","type":"address"},{"name":"value","type":"uint256"},{"name":"data","type":"bytes"}],"name":"txns","type":"tuple[]"},{"name":"signatures","type":"bytes32[3][]"}],"name":"deployAndExecute","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"relayer","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"code","type":"bytes"},{"name":"salt","type":"uint256"},{"name":"tokenAddr","type":"address"},{"name":"tokenAmount","type":"uint256"}],"name":"deployAndFund","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"code","type":"bytes"},{"name":"salt","type":"uint256"}],"name":"deploy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"tokenAddr","type":"address"},{"name":"to","type":"address"},{"name":"tokenAmount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"relayerAddr","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"addr","type":"address"},{"indexed":false,"name":"salt","type":"uint256"}],"name":"LogDeployed","type":"event"}]

608060405234801561001057600080fd5b50604051602080611214833981018060405261002f9190810190610089565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506100e4565b600061008182516100b2565b905092915050565b60006020828403121561009b57600080fd5b60006100a984828501610075565b91505092915050565b60006100bd826100c4565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b611121806100f36000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80634b7028f91461005c5780638406c079146100785780638a976282146100965780639c4ae2d0146100b2578063d9caed12146100ce575b600080fd5b610076600480360361007191908101906109e3565b6100ea565b005b610080610215565b60405161008d9190610d90565b60405180910390f35b6100b060048036036100ab9190810190610968565b61023a565b005b6100cc60048036036100c79190810190610914565b610392565b005b6100e860048036036100e391908101906108c5565b61044e565b005b6000838551602087016000f59050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161015f90610e2b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663951a02af84846040518363ffffffff1660e01b81526004016101a3929190610dd4565b600060405180830381600087803b1580156101bd57600080fd5b505af11580156101d1573d6000803e3d6000fd5b505050507fecef66cbb4d4c8dd18157def75d46290ddc298395ea46f7ff64321c1a912cbad8185604051610206929190610dab565b60405180910390a15050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146102c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102c090610e0b565b60405180910390fd5b6000838551602087016000f59050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610347576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033e90610e2b565b60405180910390fd5b6103528382846104ed565b7fecef66cbb4d4c8dd18157def75d46290ddc298395ea46f7ff64321c1a912cbad8185604051610383929190610dab565b60405180910390a15050505050565b6000818351602085016000f59050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610410576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040790610e2b565b60405180910390fd5b7fecef66cbb4d4c8dd18157def75d46290ddc298395ea46f7ff64321c1a912cbad8183604051610441929190610dab565b60405180910390a1505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d490610e0b565b60405180910390fd5b6104e88383836104ed565b505050565b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401610528929190610dab565b600060405180830381600087803b15801561054257600080fd5b505af1158015610556573d6000803e3d6000fd5b50505050610562610570565b61056b57600080fd5b505050565b600080600090503d6000811461058d5760208114610596576105a2565b600191506105a2565b60206000803e60005191505b50600081141591505090565b60006105ba823561104e565b905092915050565b600082601f8301126105d357600080fd5b81356105e66105e182610e78565b610e4b565b9150818183526020840193506020810190508385606084028201111561060b57600080fd5b60005b8381101561063b57816106218882610645565b84526020840193506060830192505060018101905061060e565b5050505092915050565b600082601f83011261065657600080fd5b600361066961066482610ea0565b610e4b565b9150818385602084028201111561067f57600080fd5b60005b838110156106af5781610695888261072d565b845260208401935060208301925050600181019050610682565b5050505092915050565b600082601f8301126106ca57600080fd5b81356106dd6106d882610ec2565b610e4b565b9150818183526020840193506020810190508360005b83811015610723578135860161070988826107e9565b8452602084019350602083019250506001810190506106f3565b5050505092915050565b60006107398235611060565b905092915050565b600082601f83011261075257600080fd5b813561076561076082610eea565b610e4b565b9150808252602083016020830185838301111561078157600080fd5b61078c838284611094565b50505092915050565b600082601f8301126107a657600080fd5b81356107b96107b482610f16565b610e4b565b915080825260208301602083018583830111156107d557600080fd5b6107e0838284611094565b50505092915050565b600060e082840312156107fb57600080fd5b61080560e0610e4b565b90506000610815848285016105ae565b6000830152506020610829848285016108b1565b602083015250604061083d848285016105ae565b6040830152506060610851848285016108b1565b6060830152506080610865848285016105ae565b60808301525060a0610879848285016108b1565b60a08301525060c082013567ffffffffffffffff81111561089957600080fd5b6108a584828501610741565b60c08301525092915050565b60006108bd823561108a565b905092915050565b6000806000606084860312156108da57600080fd5b60006108e8868287016105ae565b93505060206108f9868287016105ae565b925050604061090a868287016108b1565b9150509250925092565b6000806040838503121561092757600080fd5b600083013567ffffffffffffffff81111561094157600080fd5b61094d85828601610795565b925050602061095e858286016108b1565b9150509250929050565b6000806000806080858703121561097e57600080fd5b600085013567ffffffffffffffff81111561099857600080fd5b6109a487828801610795565b94505060206109b5878288016108b1565b93505060406109c6878288016105ae565b92505060606109d7878288016108b1565b91505092959194509250565b600080600080608085870312156109f957600080fd5b600085013567ffffffffffffffff811115610a1357600080fd5b610a1f87828801610795565b9450506020610a30878288016108b1565b935050604085013567ffffffffffffffff811115610a4d57600080fd5b610a59878288016106b9565b925050606085013567ffffffffffffffff811115610a7657600080fd5b610a82878288016105c2565b91505092959194509250565b6000610a9a8383610b4a565b60608301905092915050565b6000610ab28383610c0e565b60208301905092915050565b6000610aca8383610cd6565b905092915050565b610adb81611008565b82525050565b610aea81611008565b82525050565b6000610afb82610f66565b610b058185610fb9565b9350610b1083610f42565b60005b82811015610b3e57610b26868351610a8e565b9550610b3182610f92565b9150600181019050610b13565b50849250505092915050565b610b5381610f71565b610b5d8184610fca565b9250610b6882610f4f565b60005b82811015610b9657610b7e858351610aa6565b9450610b8982610f9f565b9150600181019050610b6b565b5050505050565b6000610ba882610f7c565b610bb28185610fd5565b935083602082028501610bc485610f59565b60005b84811015610bfd578383038852610bdf838351610abe565b9250610bea82610fac565b9150602088019750600181019050610bc7565b508196508694505050505092915050565b610c178161101a565b82525050565b6000610c2882610f87565b610c328185610fe6565b9350610c428185602086016110a3565b610c4b816110d6565b840191505092915050565b6000610c63600c83610ff7565b91507f4f4e4c595f52454c4159455200000000000000000000000000000000000000006000830152602082019050919050565b6000610ca3601083610ff7565b91507f4641494c45445f4445504c4f59494e47000000000000000000000000000000006000830152602082019050919050565b600060e083016000830151610cee6000860182610ad2565b506020830151610d016020860182610d72565b506040830151610d146040860182610ad2565b506060830151610d276060860182610d72565b506080830151610d3a6080860182610ad2565b5060a0830151610d4d60a0860182610d72565b5060c083015184820360c0860152610d658282610c1d565b9150508091505092915050565b610d7b81611044565b82525050565b610d8a81611044565b82525050565b6000602082019050610da56000830184610ae1565b92915050565b6000604082019050610dc06000830185610ae1565b610dcd6020830184610d81565b9392505050565b60006040820190508181036000830152610dee8185610b9d565b90508181036020830152610e028184610af0565b90509392505050565b60006020820190508181036000830152610e2481610c56565b9050919050565b60006020820190508181036000830152610e4481610c96565b9050919050565b6000604051905081810181811067ffffffffffffffff82111715610e6e57600080fd5b8060405250919050565b600067ffffffffffffffff821115610e8f57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610eb757600080fd5b602082029050919050565b600067ffffffffffffffff821115610ed957600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610f0157600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115610f2d57600080fd5b601f19601f8301169050602081019050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b600081519050919050565b600060039050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600061101382611024565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006110598261106a565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156110c15780820151818401526020810190506110a6565b838111156110d0576000848401525b50505050565b6000601f19601f830116905091905056fea265627a7a72305820bf80654414cf95f454c4a8a32a197b9da79abe4a33293e351ddf669c3c270a106c6578706572696d656e74616cf50037000000000000000000000000942f9ce5d9a33a82f88d233aeb3292e680230348

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100575760003560e01c80634b7028f91461005c5780638406c079146100785780638a976282146100965780639c4ae2d0146100b2578063d9caed12146100ce575b600080fd5b610076600480360361007191908101906109e3565b6100ea565b005b610080610215565b60405161008d9190610d90565b60405180910390f35b6100b060048036036100ab9190810190610968565b61023a565b005b6100cc60048036036100c79190810190610914565b610392565b005b6100e860048036036100e391908101906108c5565b61044e565b005b6000838551602087016000f59050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161015f90610e2b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663951a02af84846040518363ffffffff1660e01b81526004016101a3929190610dd4565b600060405180830381600087803b1580156101bd57600080fd5b505af11580156101d1573d6000803e3d6000fd5b505050507fecef66cbb4d4c8dd18157def75d46290ddc298395ea46f7ff64321c1a912cbad8185604051610206929190610dab565b60405180910390a15050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146102c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102c090610e0b565b60405180910390fd5b6000838551602087016000f59050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610347576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033e90610e2b565b60405180910390fd5b6103528382846104ed565b7fecef66cbb4d4c8dd18157def75d46290ddc298395ea46f7ff64321c1a912cbad8185604051610383929190610dab565b60405180910390a15050505050565b6000818351602085016000f59050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610410576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161040790610e2b565b60405180910390fd5b7fecef66cbb4d4c8dd18157def75d46290ddc298395ea46f7ff64321c1a912cbad8183604051610441929190610dab565b60405180910390a1505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d490610e0b565b60405180910390fd5b6104e88383836104ed565b505050565b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401610528929190610dab565b600060405180830381600087803b15801561054257600080fd5b505af1158015610556573d6000803e3d6000fd5b50505050610562610570565b61056b57600080fd5b505050565b600080600090503d6000811461058d5760208114610596576105a2565b600191506105a2565b60206000803e60005191505b50600081141591505090565b60006105ba823561104e565b905092915050565b600082601f8301126105d357600080fd5b81356105e66105e182610e78565b610e4b565b9150818183526020840193506020810190508385606084028201111561060b57600080fd5b60005b8381101561063b57816106218882610645565b84526020840193506060830192505060018101905061060e565b5050505092915050565b600082601f83011261065657600080fd5b600361066961066482610ea0565b610e4b565b9150818385602084028201111561067f57600080fd5b60005b838110156106af5781610695888261072d565b845260208401935060208301925050600181019050610682565b5050505092915050565b600082601f8301126106ca57600080fd5b81356106dd6106d882610ec2565b610e4b565b9150818183526020840193506020810190508360005b83811015610723578135860161070988826107e9565b8452602084019350602083019250506001810190506106f3565b5050505092915050565b60006107398235611060565b905092915050565b600082601f83011261075257600080fd5b813561076561076082610eea565b610e4b565b9150808252602083016020830185838301111561078157600080fd5b61078c838284611094565b50505092915050565b600082601f8301126107a657600080fd5b81356107b96107b482610f16565b610e4b565b915080825260208301602083018583830111156107d557600080fd5b6107e0838284611094565b50505092915050565b600060e082840312156107fb57600080fd5b61080560e0610e4b565b90506000610815848285016105ae565b6000830152506020610829848285016108b1565b602083015250604061083d848285016105ae565b6040830152506060610851848285016108b1565b6060830152506080610865848285016105ae565b60808301525060a0610879848285016108b1565b60a08301525060c082013567ffffffffffffffff81111561089957600080fd5b6108a584828501610741565b60c08301525092915050565b60006108bd823561108a565b905092915050565b6000806000606084860312156108da57600080fd5b60006108e8868287016105ae565b93505060206108f9868287016105ae565b925050604061090a868287016108b1565b9150509250925092565b6000806040838503121561092757600080fd5b600083013567ffffffffffffffff81111561094157600080fd5b61094d85828601610795565b925050602061095e858286016108b1565b9150509250929050565b6000806000806080858703121561097e57600080fd5b600085013567ffffffffffffffff81111561099857600080fd5b6109a487828801610795565b94505060206109b5878288016108b1565b93505060406109c6878288016105ae565b92505060606109d7878288016108b1565b91505092959194509250565b600080600080608085870312156109f957600080fd5b600085013567ffffffffffffffff811115610a1357600080fd5b610a1f87828801610795565b9450506020610a30878288016108b1565b935050604085013567ffffffffffffffff811115610a4d57600080fd5b610a59878288016106b9565b925050606085013567ffffffffffffffff811115610a7657600080fd5b610a82878288016105c2565b91505092959194509250565b6000610a9a8383610b4a565b60608301905092915050565b6000610ab28383610c0e565b60208301905092915050565b6000610aca8383610cd6565b905092915050565b610adb81611008565b82525050565b610aea81611008565b82525050565b6000610afb82610f66565b610b058185610fb9565b9350610b1083610f42565b60005b82811015610b3e57610b26868351610a8e565b9550610b3182610f92565b9150600181019050610b13565b50849250505092915050565b610b5381610f71565b610b5d8184610fca565b9250610b6882610f4f565b60005b82811015610b9657610b7e858351610aa6565b9450610b8982610f9f565b9150600181019050610b6b565b5050505050565b6000610ba882610f7c565b610bb28185610fd5565b935083602082028501610bc485610f59565b60005b84811015610bfd578383038852610bdf838351610abe565b9250610bea82610fac565b9150602088019750600181019050610bc7565b508196508694505050505092915050565b610c178161101a565b82525050565b6000610c2882610f87565b610c328185610fe6565b9350610c428185602086016110a3565b610c4b816110d6565b840191505092915050565b6000610c63600c83610ff7565b91507f4f4e4c595f52454c4159455200000000000000000000000000000000000000006000830152602082019050919050565b6000610ca3601083610ff7565b91507f4641494c45445f4445504c4f59494e47000000000000000000000000000000006000830152602082019050919050565b600060e083016000830151610cee6000860182610ad2565b506020830151610d016020860182610d72565b506040830151610d146040860182610ad2565b506060830151610d276060860182610d72565b506080830151610d3a6080860182610ad2565b5060a0830151610d4d60a0860182610d72565b5060c083015184820360c0860152610d658282610c1d565b9150508091505092915050565b610d7b81611044565b82525050565b610d8a81611044565b82525050565b6000602082019050610da56000830184610ae1565b92915050565b6000604082019050610dc06000830185610ae1565b610dcd6020830184610d81565b9392505050565b60006040820190508181036000830152610dee8185610b9d565b90508181036020830152610e028184610af0565b90509392505050565b60006020820190508181036000830152610e2481610c56565b9050919050565b60006020820190508181036000830152610e4481610c96565b9050919050565b6000604051905081810181811067ffffffffffffffff82111715610e6e57600080fd5b8060405250919050565b600067ffffffffffffffff821115610e8f57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610eb757600080fd5b602082029050919050565b600067ffffffffffffffff821115610ed957600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115610f0157600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115610f2d57600080fd5b601f19601f8301169050602081019050919050565b6000602082019050919050565b6000819050919050565b6000602082019050919050565b600081519050919050565b600060039050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600061101382611024565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006110598261106a565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156110c15780820151818401526020810190506110a6565b838111156110d0576000848401525b50505050565b6000601f19601f830116905091905056fea265627a7a72305820bf80654414cf95f454c4a8a32a197b9da79abe4a33293e351ddf669c3c270a106c6578706572696d656e74616cf50037

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000942f9ce5d9a33a82f88d233aeb3292e680230348

-----Decoded View---------------
Arg [0] : relayerAddr (address): 0x942f9CE5D9a33a82F88D233AEb3292E680230348

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000942f9ce5d9a33a82f88d233aeb3292e680230348


Deployed Bytecode Sourcemap

15006:1360:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15006:1360:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15817:357;;;;;;;;;;;;;;;;:::i;:::-;;15086:22;;;:::i;:::-;;;;;;;;;;;;;;;;15427:385;;;;;;;;;;;;;;;;:::i;:::-;;15188:234;;;;;;;;;;;;;;;;:::i;:::-;;16179:184;;;;;;;;;;;;;;;;:::i;:::-;;15817:357;15956:12;16033:4;16026;16020:11;16013:4;16007;16003:15;16000:1;15992:46;15984:54;;16068:1;16052:18;;:4;:18;;;;16044:47;;;;;;;;;;;;;;;;;;;;;;16105:4;16096:22;;;16119:4;16125:10;16096:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16096:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16096:40:0;;;;16146:23;16158:4;16164;16146:23;;;;;;;;;;;;;;;;15817:357;;;;;:::o;15086:22::-;;;;;;;;;;;;;:::o;15427:385::-;15557:7;;;;;;;;;;;15543:21;;:10;:21;;;15535:46;;;;;;;;;;;;;;;;;;;;;;15586:12;15663:4;15656;15650:11;15643:4;15637;15633:15;15630:1;15622:46;15614:54;;15698:1;15682:18;;:4;:18;;;;15674:47;;;;;;;;;;;;;;;;;;;;;;15726:48;15745:9;15756:4;15762:11;15726:18;:48::i;:::-;15784:23;15796:4;15802;15784:23;;;;;;;;;;;;;;;;15427:385;;;;;:::o;15188:234::-;15249:12;15326:4;15319;15313:11;15306:4;15300;15296:15;15293:1;15285:46;15277:54;;15361:1;15345:18;;:4;:18;;;;15337:47;;;;;;;;;;;;;;;;;;;;;;15394:23;15406:4;15412;15394:23;;;;;;;;;;;;;;;;15188:234;;;:::o;16179:184::-;16283:7;;;;;;;;;;;16269:21;;:10;:21;;;16261:46;;;;;;;;;;;;;;;;;;;;;;16312;16331:9;16342:2;16346:11;16312:18;:46::i;:::-;16179:184;;;:::o;997:148::-;1085:5;1072:28;;;1101:2;1105:6;1072:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1072:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1072:40:0;;;;1125:14;:12;:14::i;:::-;1117:23;;;;;;997:148;;;:::o;376:616::-;431:4;444:19;466:1;444:23;;558:14;625:3;620:38;;;;714:4;709:169;;;;551:402;;620:38;651:1;636:16;;620:38;;709:169;792:4;787:3;782;767:30;868:3;862:10;847:25;;551:402;;986:1;971:11;:16;;964:23;;;376:616;:::o;5:118:-1:-;;72:46;110:6;97:20;72:46;;;63:55;;57:66;;;;;151:764;;287:3;280:4;272:6;268:17;264:27;254:2;;305:1;302;295:12;254:2;342:6;329:20;364:99;379:83;455:6;379:83;;;364:99;;;355:108;;480:5;505:6;498:5;491:21;535:4;527:6;523:17;513:27;;557:4;552:3;548:14;541:21;;610:6;657:3;649:4;641:6;637:17;632:3;628:27;625:36;622:2;;;674:1;671;664:12;622:2;699:1;684:225;709:6;706:1;703:13;684:225;;;767:3;789:56;841:3;829:10;789:56;;;784:3;777:69;869:4;864:3;860:14;853:21;;897:4;892:3;888:14;881:21;;741:168;731:1;728;724:9;719:14;;684:225;;;688:14;247:668;;;;;;;;942:607;;1053:3;1046:4;1038:6;1034:17;1030:27;1020:2;;1071:1;1068;1061:12;1020:2;1095:3;1113:74;1128:58;1179:6;1128:58;;;1113:74;;;1104:83;;1204:5;1263:6;1310:3;1302:4;1294:6;1290:17;1285:3;1281:27;1278:36;1275:2;;;1327:1;1324;1317:12;1275:2;1352:1;1337:206;1362:6;1359:1;1356:13;1337:206;;;1420:3;1442:37;1475:3;1463:10;1442:37;;;1437:3;1430:50;1503:4;1498:3;1494:14;1487:21;;1531:4;1526:3;1522:14;1515:21;;1394:149;1384:1;1381;1377:9;1372:14;;1337:206;;;1341:14;1013:536;;;;;;;;1595:750;;1736:3;1729:4;1721:6;1717:17;1713:27;1703:2;;1754:1;1751;1744:12;1703:2;1791:6;1778:20;1813:104;1828:88;1909:6;1828:88;;;1813:104;;;1804:113;;1934:5;1959:6;1952:5;1945:21;1989:4;1981:6;1977:17;1967:27;;2011:4;2006:3;2002:14;1995:21;;2064:6;2097:1;2082:257;2107:6;2104:1;2101:13;2082:257;;;2190:3;2177:17;2169:6;2165:30;2214:61;2271:3;2259:10;2214:61;;;2209:3;2202:74;2299:4;2294:3;2290:14;2283:21;;2327:4;2322:3;2318:14;2311:21;;2139:200;2129:1;2126;2122:9;2117:14;;2082:257;;;2086:14;1696:649;;;;;;;;2353:118;;2420:46;2458:6;2445:20;2420:46;;;2411:55;;2405:66;;;;;2479:432;;2576:3;2569:4;2561:6;2557:17;2553:27;2543:2;;2594:1;2591;2584:12;2543:2;2631:6;2618:20;2653:60;2668:44;2705:6;2668:44;;;2653:60;;;2644:69;;2733:6;2726:5;2719:21;2769:4;2761:6;2757:17;2802:4;2795:5;2791:16;2837:3;2828:6;2823:3;2819:16;2816:25;2813:2;;;2854:1;2851;2844:12;2813:2;2864:41;2898:6;2893:3;2888;2864:41;;;2536:375;;;;;;;;2920:440;;3021:3;3014:4;3006:6;3002:17;2998:27;2988:2;;3039:1;3036;3029:12;2988:2;3076:6;3063:20;3098:64;3113:48;3154:6;3113:48;;;3098:64;;;3089:73;;3182:6;3175:5;3168:21;3218:4;3210:6;3206:17;3251:4;3244:5;3240:16;3286:3;3277:6;3272:3;3268:16;3265:25;3262:2;;;3303:1;3300;3293:12;3262:2;3313:41;3347:6;3342:3;3337;3313:41;;;2981:379;;;;;;;;3402:1304;;3515:4;3503:9;3498:3;3494:19;3490:30;3487:2;;;3533:1;3530;3523:12;3487:2;3551:20;3566:4;3551:20;;;3542:29;;3633:1;3664:49;3709:3;3700:6;3689:9;3685:22;3664:49;;;3658:3;3651:5;3647:15;3640:74;3581:144;3776:2;3809:49;3854:3;3845:6;3834:9;3830:22;3809:49;;;3802:4;3795:5;3791:16;3784:75;3735:135;3928:2;3961:49;4006:3;3997:6;3986:9;3982:22;3961:49;;;3954:4;3947:5;3943:16;3936:75;3880:142;4077:2;4110:49;4155:3;4146:6;4135:9;4131:22;4110:49;;;4103:4;4096:5;4092:16;4085:75;4032:139;4219:3;4253:49;4298:3;4289:6;4278:9;4274:22;4253:49;;;4246:4;4239:5;4235:16;4228:75;4181:133;4365:3;4399:49;4444:3;4435:6;4424:9;4420:22;4399:49;;;4392:4;4385:5;4381:16;4374:75;4324:136;4538:3;4527:9;4523:19;4510:33;4563:18;4555:6;4552:30;4549:2;;;4595:1;4592;4585:12;4549:2;4630:54;4680:3;4671:6;4660:9;4656:22;4630:54;;;4623:4;4616:5;4612:16;4605:80;4470:226;3481:1225;;;;;4713:118;;4780:46;4818:6;4805:20;4780:46;;;4771:55;;4765:66;;;;;4838:491;;;;4976:2;4964:9;4955:7;4951:23;4947:32;4944:2;;;4992:1;4989;4982:12;4944:2;5027:1;5044:53;5089:7;5080:6;5069:9;5065:22;5044:53;;;5034:63;;5006:97;5134:2;5152:53;5197:7;5188:6;5177:9;5173:22;5152:53;;;5142:63;;5113:98;5242:2;5260:53;5305:7;5296:6;5285:9;5281:22;5260:53;;;5250:63;;5221:98;4938:391;;;;;;5336:470;;;5466:2;5454:9;5445:7;5441:23;5437:32;5434:2;;;5482:1;5479;5472:12;5434:2;5545:1;5534:9;5530:17;5517:31;5568:18;5560:6;5557:30;5554:2;;;5600:1;5597;5590:12;5554:2;5620:62;5674:7;5665:6;5654:9;5650:22;5620:62;;;5610:72;;5496:192;5719:2;5737:53;5782:7;5773:6;5762:9;5758:22;5737:53;;;5727:63;;5698:98;5428:378;;;;;;5813:721;;;;;5977:3;5965:9;5956:7;5952:23;5948:33;5945:2;;;5994:1;5991;5984:12;5945:2;6057:1;6046:9;6042:17;6029:31;6080:18;6072:6;6069:30;6066:2;;;6112:1;6109;6102:12;6066:2;6132:62;6186:7;6177:6;6166:9;6162:22;6132:62;;;6122:72;;6008:192;6231:2;6249:53;6294:7;6285:6;6274:9;6270:22;6249:53;;;6239:63;;6210:98;6339:2;6357:53;6402:7;6393:6;6382:9;6378:22;6357:53;;;6347:63;;6318:98;6447:2;6465:53;6510:7;6501:6;6490:9;6486:22;6465:53;;;6455:63;;6426:98;5939:595;;;;;;;;6541:1079;;;;;6798:3;6786:9;6777:7;6773:23;6769:33;6766:2;;;6815:1;6812;6805:12;6766:2;6878:1;6867:9;6863:17;6850:31;6901:18;6893:6;6890:30;6887:2;;;6933:1;6930;6923:12;6887:2;6953:62;7007:7;6998:6;6987:9;6983:22;6953:62;;;6943:72;;6829:192;7052:2;7070:53;7115:7;7106:6;7095:9;7091:22;7070:53;;;7060:63;;7031:98;7188:2;7177:9;7173:18;7160:32;7212:18;7204:6;7201:30;7198:2;;;7244:1;7241;7234:12;7198:2;7264:102;7358:7;7349:6;7338:9;7334:22;7264:102;;;7254:112;;7139:233;7431:2;7420:9;7416:18;7403:32;7455:18;7447:6;7444:30;7441:2;;;7487:1;7484;7477:12;7441:2;7507:97;7596:7;7587:6;7576:9;7572:22;7507:97;;;7497:107;;7382:228;6760:860;;;;;;;;7628:251;;7752:87;7835:3;7828:5;7752:87;;;7868:4;7863:3;7859:14;7845:28;;7745:134;;;;;7888:171;;7974:45;8015:3;8008:5;7974:45;;;8048:4;8043:3;8039:14;8025:28;;7967:92;;;;;8068:251;;8216:97;8309:3;8302:5;8216:97;;;8202:111;;8195:124;;;;;8327:110;8400:31;8425:5;8400:31;;;8395:3;8388:44;8382:55;;;8444:120;8527:31;8552:5;8527:31;;;8522:3;8515:44;8509:55;;;8608:773;;8791:73;8858:5;8791:73;;;8877:105;8975:6;8970:3;8877:105;;;8870:112;;9002:75;9071:5;9002:75;;;9098:1;9083:276;9108:6;9105:1;9102:13;9083:276;;;9155:101;9252:3;9243:6;9237:13;9155:101;;;9148:108;;9273:79;9345:6;9273:79;;;9263:89;;9130:1;9127;9123:9;9118:14;;9083:276;;;9087:14;9372:3;9365:10;;8770:611;;;;;;;9422:555;9541:48;9583:5;9541:48;;;9602:74;9669:6;9664:3;9602:74;;;9595:81;;9696:50;9740:5;9696:50;;;9767:1;9752:213;9777:6;9774:1;9771:13;9752:213;;;9824:63;9883:3;9874:6;9868:13;9824:63;;;9817:70;;9904:54;9951:6;9904:54;;;9894:64;;9799:1;9796;9792:9;9787:14;;9752:213;;;9756:14;9520:457;;;;;10056:971;;10249:78;10321:5;10249:78;;;10340:110;10443:6;10438:3;10340:110;;;10333:117;;10473:3;10515:4;10507:6;10503:17;10498:3;10494:27;10541:80;10615:5;10541:80;;;10642:1;10627:361;10652:6;10649:1;10646:13;10627:361;;;10714:9;10708:4;10704:20;10699:3;10692:33;10740:112;10847:4;10838:6;10832:13;10740:112;;;10732:120;;10869:84;10946:6;10869:84;;;10859:94;;10976:4;10971:3;10967:14;10960:21;;10674:1;10671;10667:9;10662:14;;10627:361;;;10631:14;11001:4;10994:11;;11018:3;11011:10;;10228:799;;;;;;;;;11035:110;11108:31;11133:5;11108:31;;;11103:3;11096:44;11090:55;;;11152:315;;11248:34;11276:5;11248:34;;;11294:60;11347:6;11342:3;11294:60;;;11287:67;;11359:52;11404:6;11399:3;11392:4;11385:5;11381:16;11359:52;;;11432:29;11454:6;11432:29;;;11427:3;11423:39;11416:46;;11228:239;;;;;;11475:364;;11635:67;11699:2;11694:3;11635:67;;;11628:74;;11735:66;11731:1;11726:3;11722:11;11715:87;11830:2;11825:3;11821:12;11814:19;;11621:218;;;;11848:364;;12008:67;12072:2;12067:3;12008:67;;;12001:74;;12108:66;12104:1;12099:3;12095:11;12088:87;12203:2;12198:3;12194:12;12187:19;;11994:218;;;;12285:1336;;12428:4;12423:3;12419:14;12522:3;12515:5;12511:15;12505:22;12533:61;12589:3;12584;12580:13;12567:11;12533:61;;;12448:152;12673:4;12666:5;12662:16;12656:23;12685:62;12741:4;12736:3;12732:14;12719:11;12685:62;;;12610:143;12833:4;12826:5;12822:16;12816:23;12845:62;12901:4;12896:3;12892:14;12879:11;12845:62;;;12763:150;12990:4;12983:5;12979:16;12973:23;13002:62;13058:4;13053:3;13049:14;13036:11;13002:62;;;12923:147;13140:4;13133:5;13129:16;13123:23;13152:62;13208:4;13203:3;13199:14;13186:11;13152:62;;;13080:140;13293:4;13286:5;13282:16;13276:23;13305:62;13361:4;13356:3;13352:14;13339:11;13305:62;;;13230:143;13445:4;13438:5;13434:16;13428:23;13497:3;13491:4;13487:14;13480:4;13475:3;13471:14;13464:38;13517:66;13578:4;13565:11;13517:66;;;13509:74;;13383:212;13612:4;13605:11;;12401:1220;;;;;;13628:110;13701:31;13726:5;13701:31;;;13696:3;13689:44;13683:55;;;13745:120;13828:31;13853:5;13828:31;;;13823:3;13816:44;13810:55;;;13872:213;;13990:2;13979:9;13975:18;13967:26;;14004:71;14072:1;14061:9;14057:17;14048:6;14004:71;;;13961:124;;;;;14092:324;;14238:2;14227:9;14223:18;14215:26;;14252:71;14320:1;14309:9;14305:17;14296:6;14252:71;;;14334:72;14402:2;14391:9;14387:18;14378:6;14334:72;;;14209:207;;;;;;14423:792;;14755:2;14744:9;14740:18;14732:26;;14805:9;14799:4;14795:20;14791:1;14780:9;14776:17;14769:47;14830:156;14981:4;14972:6;14830:156;;;14822:164;;15034:9;15028:4;15024:20;15019:2;15008:9;15004:18;14997:48;15059:146;15200:4;15191:6;15059:146;;;15051:154;;14726:489;;;;;;15222:407;;15413:2;15402:9;15398:18;15390:26;;15463:9;15457:4;15453:20;15449:1;15438:9;15434:17;15427:47;15488:131;15614:4;15488:131;;;15480:139;;15384:245;;;;15636:407;;15827:2;15816:9;15812:18;15804:26;;15877:9;15871:4;15867:20;15863:1;15852:9;15848:17;15841:47;15902:131;16028:4;15902:131;;;15894:139;;15798:245;;;;16050:256;;16112:2;16106:9;16096:19;;16150:4;16142:6;16138:17;16249:6;16237:10;16234:22;16213:18;16201:10;16198:34;16195:62;16192:2;;;16270:1;16267;16260:12;16192:2;16290:10;16286:2;16279:22;16090:216;;;;;16313:277;;16491:18;16483:6;16480:30;16477:2;;;16523:1;16520;16513:12;16477:2;16552:4;16544:6;16540:17;16532:25;;16580:4;16574;16570:15;16562:23;;16414:176;;;;16597:229;;16750:18;16742:6;16739:30;16736:2;;;16782:1;16779;16772:12;16736:2;16811:4;16803:6;16799:17;16791:25;;16673:153;;;;16833:282;;17016:18;17008:6;17005:30;17002:2;;;17048:1;17045;17038:12;17002:2;17077:4;17069:6;17065:17;17057:25;;17105:4;17099;17095:15;17087:23;;16939:176;;;;17122:254;;17261:18;17253:6;17250:30;17247:2;;;17293:1;17290;17283:12;17247:2;17337:4;17333:9;17326:4;17318:6;17314:17;17310:33;17302:41;;17366:4;17360;17356:15;17348:23;;17184:192;;;;17383:258;;17526:18;17518:6;17515:30;17512:2;;;17558:1;17555;17548:12;17512:2;17602:4;17598:9;17591:4;17583:6;17579:17;17575:33;17567:41;;17631:4;17625;17621:15;17613:23;;17449:192;;;;17650:140;;17778:4;17770:6;17766:17;17755:28;;17747:43;;;;17801:104;;17892:6;17881:17;;17873:32;;;;17916:145;;18049:4;18041:6;18037:17;18026:28;;18018:43;;;;18070:126;;18185:5;18179:12;18169:22;;18163:33;;;;18203:92;;18287:3;18277:13;;18271:24;;;;18302:131;;18422:5;18416:12;18406:22;;18400:33;;;;18440:87;;18516:5;18510:12;18500:22;;18494:33;;;;18535:141;;18665:4;18657:6;18653:17;18642:28;;18635:41;;;;18685:116;;18790:4;18782:6;18778:17;18767:28;;18760:41;;;;18810:146;;18945:4;18937:6;18933:17;18922:28;;18915:41;;;;18965:197;;19114:6;19109:3;19102:19;19151:4;19146:3;19142:14;19127:29;;19095:67;;;;;19171:130;;19292:3;19277:18;;19270:31;;;;;19310:202;;19464:6;19459:3;19452:19;19501:4;19496:3;19492:14;19477:29;;19445:67;;;;;19521:152;;19625:6;19620:3;19613:19;19662:4;19657:3;19653:14;19638:29;;19606:67;;;;;19682:163;;19797:6;19792:3;19785:19;19834:4;19829:3;19825:14;19810:29;;19778:67;;;;;19853:105;;19922:31;19947:5;19922:31;;;19911:42;;19905:53;;;;19965:79;;20034:5;20023:16;;20017:27;;;;20051:128;;20131:42;20124:5;20120:54;20109:65;;20103:76;;;;20186:79;;20255:5;20244:16;;20238:27;;;;20272:105;;20341:31;20366:5;20341:31;;;20330:42;;20324:53;;;;20384:79;;20453:5;20442:16;;20436:27;;;;20470:128;;20550:42;20543:5;20539:54;20528:65;;20522:76;;;;20605:79;;20674:5;20663:16;;20657:27;;;;20692:145;20773:6;20768:3;20763;20750:30;20829:1;20820:6;20815:3;20811:16;20804:27;20743:94;;;;20846:268;20911:1;20918:101;20932:6;20929:1;20926:13;20918:101;;;21008:1;21003:3;20999:11;20993:18;20989:1;20984:3;20980:11;20973:39;20954:2;20951:1;20947:10;20942:15;;20918:101;;;21034:6;21031:1;21028:13;21025:2;;;21099:1;21090:6;21085:3;21081:16;21074:27;21025:2;20895:219;;;;;21122:97;;21210:2;21206:7;21201:2;21194:5;21190:14;21186:28;21176:38;;21170:49;;;

Swarm Source

bzzr://bf80654414cf95f454c4a8a32a197b9da79abe4a33293e351ddf669c3c270a10

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

OVERVIEW

The deployer address for AdEx's contract.

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.