Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Vote
Compiler Version
v0.4.20+commit.3155dd80
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2018-02-28
*/
pragma solidity ^0.4.20;// blaze it
interface ERC20 {
function totalSupply() external constant returns (uint supply);
function balanceOf(address _owner) external constant returns (uint balance);
function transfer(address _to, uint _value) external returns (bool success);
function transferFrom(address _from, address _to, uint _value) external returns (bool success);
function approve(address _spender, uint _value) external returns (bool success);
function allowance(address _owner, address _spender) external constant returns (uint remaining);
event Transfer(address indexed _from, address indexed _to, uint _value);
event Approval(address indexed _owner, address indexed _spender, uint _value);
}
contract TokenRescue {
// use this method to rescue your tokens if you sent them by mistake but be quick or someone else will get them
function rescueToken(ERC20 _token)
external
{
_token.transfer(msg.sender, _token.balanceOf(this));
}
// require data for transactions
function() external payable {
revert();
}
}
interface AccountRegistryInterface {
function canVoteOnProposal(address _voter, address _proposal) external view returns (bool);
}
contract Vote is ERC20, TokenRescue {
uint256 supply = 0;
AccountRegistryInterface public accountRegistry = AccountRegistryInterface(0x000000002bb43c83eCe652d161ad0fa862129A2C);
address public owner = 0x4a6f6B9fF1fc974096f9063a45Fd12bD5B928AD1;
uint8 public constant decimals = 1;
string public symbol = "FV";
string public name = "FinneyVote";
mapping (address => uint256) balances;
mapping (address => mapping (address => uint256)) approved;
function totalSupply() external constant returns (uint256) {
return supply;
}
function balanceOf(address _owner) external constant returns (uint256) {
return balances[_owner];
}
function approve(address _spender, uint256 _value) external returns (bool) {
approved[msg.sender][_spender] = _value;
Approval(msg.sender, _spender, _value);
return true;
}
function allowance(address _owner, address _spender) external constant returns (uint256) {
return approved[_owner][_spender];
}
function transfer(address _to, uint256 _value) external returns (bool) {
if (balances[msg.sender] < _value) {
return false;
}
balances[msg.sender] -= _value;
balances[_to] += _value;
Transfer(msg.sender, _to, _value);
return true;
}
function transferFrom(address _from, address _to, uint256 _value) external returns (bool) {
if (balances[_from] < _value
|| approved[_from][msg.sender] < _value
|| _value == 0) {
return false;
}
approved[_from][msg.sender] -= _value;
balances[_from] -= _value;
balances[_to] += _value;
Transfer(_from, _to, _value);
return true;
}
function grant(address _to, uint256 _grant) external {
require(msg.sender == address(accountRegistry));
balances[_to] += _grant;
supply += _grant;
Transfer(address(0), _to, _grant);
}
// vote5 and vote1 are available for future use
function vote5(address _voter, address _votee) external {
require(balances[_voter] >= 10);
require(accountRegistry.canVoteOnProposal(_voter, msg.sender));
balances[_voter] -= 10;
balances[owner] += 5;
balances[_votee] += 5;
Transfer(_voter, owner, 5);
Transfer(_voter, _votee, 5);
}
function vote1(address _voter, address _votee) external {
require(balances[_voter] >= 10);
require(accountRegistry.canVoteOnProposal(_voter, msg.sender));
balances[_voter] -= 10;
balances[owner] += 9;
balances[_votee] += 1;
Transfer(_voter, owner, 9);
Transfer(_voter, _votee, 1);
}
function vote9(address _voter, address _votee) external {
require(balances[_voter] >= 10);
require(accountRegistry.canVoteOnProposal(_voter, msg.sender));
balances[_voter] -= 10;
balances[owner] += 1;
balances[_votee] += 9;
Transfer(_voter, owner, 1);
Transfer(_voter, _votee, 9);
}
modifier onlyOwner () {
require(msg.sender == owner);
_;
}
event Owner(address indexed owner);
event Registry(address indexed registry);
function transferOwnership(address _newOwner)
external onlyOwner {
uint256 balance = balances[owner];
balances[_newOwner] += balance;
balances[owner] = 0;
Transfer(owner, _newOwner, balance);
owner = _newOwner;
Owner(_newOwner);
}
function migrateAccountRegistry(AccountRegistryInterface _newAccountRegistry)
external onlyOwner {
accountRegistry = _newAccountRegistry;
Registry(_newAccountRegistry);
}
}
interface ProposalInterface {
/* uint8:
enum Position {
SKIP, // default
APPROVE,
REJECT,
AMEND, // == (APPROVE | REJECT)
LOL
// more to be determined by community
}
*/
function getPosition(address _user) external view returns (uint8);
function argumentCount() external view returns (uint256);
function vote(uint256 _argumentId) external;
// bytes could be:
// utf8 string
// swarm hash
// ipfs hash
// and others tbd
event Case(bytes content);
}
contract ProperProposal is ProposalInterface, TokenRescue {
struct Argument {
address source;
uint8 position;
uint256 count;
}
Argument[] public arguments;
mapping (address => uint256) public votes;
Vote public constant voteToken = Vote(0x000000002647e16d9BaB9e46604D75591D289277);
function getPosition(address _user)
external view
returns (uint8) {
return arguments[votes[_user]].position;
}
function argumentCount() external view returns (uint256) {
return arguments.length;
}
function argumentSource(uint256 _index)
external view
returns (address) {
return arguments[_index].source;
}
function argumentPosition(uint256 _index)
external view
returns (uint8) {
return arguments[_index].position;
}
function argumentVoteCount(uint256 _index)
external view
returns (uint256) {
return arguments[_index].count;
}
function source()
external view
returns (address) {
return arguments[0].source;
}
function voteCount()
external view
returns (uint256) {
return -arguments[0].count;
}
function vote(uint256 _argumentId)
external {
address destination = arguments[_argumentId].source;
voteToken.vote9(msg.sender, destination);
arguments[votes[msg.sender]].count--;
arguments[
votes[msg.sender] = _argumentId
].count++;
}
event Case(bytes content);
function argue(uint8 _position, bytes _text)
external
returns (uint256) {
address destination = arguments[0].source;
voteToken.vote9(msg.sender, destination);
uint256 argumentId = arguments.length;
arguments.push(Argument(msg.sender, _position, 1));
Case(_text);
arguments[votes[msg.sender]].count--;
votes[msg.sender] = argumentId;
return argumentId;
}
function init(address _source, bytes _resolution)
external {
assert(msg.sender == 0x000000002bb43c83eCe652d161ad0fa862129A2C);
arguments.push(Argument(_source, 0/*SKIP*/, 0));
Case(_resolution);
}
}
interface CabalInterface {
// TBD
function canonCount() external view returns (uint256);
}
contract AccountRegistry is AccountRegistryInterface, TokenRescue {
uint256 constant public registrationDeposit = 1 finney;
uint256 constant public proposalCensorshipFee = 50 finney;
// this is the first deterministic contract address for 0x24AE90765668938351075fB450892800d9A52E39
address constant public burn = 0x000000003Ffc15cd9eA076d7ec40B8f516367Ca1;
Vote public constant token = Vote(0x000000002647e16d9BaB9e46604D75591D289277);
/* uint8 membership bitmap:
* 0 - proposer
* 1 - registered to vote
* 2 - pending proposal
* 3 - proposal
* 4 - board member
* 5 - pending cabal
* 6 - cabal
* 7 - board
*/
uint8 constant UNCONTACTED = 0;
uint8 constant PROPOSER = 1;
uint8 constant VOTER = 2;
uint8 constant PENDING_PROPOSAL = 4;
uint8 constant PROPOSAL = 8;
uint8 constant PENDING_CABAL = 16;
uint8 constant CABAL = 32;
uint8 constant BOARD = 64;
struct Account {
uint256 lastAccess;
uint8 membership;
address appointer;//nominated this account for BOARD
address denouncer;//denounced this BOARD account
address voucher;//nominated this account for PROPOSER
address devoucher;//denounced this account for PROPOSER
}
mapping (address => Account) accounts;
function AccountRegistry()
public
{
accounts[0x4a6f6B9fF1fc974096f9063a45Fd12bD5B928AD1].membership = BOARD;
Board(0x4a6f6B9fF1fc974096f9063a45Fd12bD5B928AD1);
accounts[0x90Fa310397149A7a9058Ae2d56e66e707B12D3A7].membership = BOARD;
Board(0x90Fa310397149A7a9058Ae2d56e66e707B12D3A7);
accounts[0x424a6e871E8cea93791253B47291193637D6966a].membership = BOARD;
Board(0x424a6e871E8cea93791253B47291193637D6966a);
accounts[0xA4caDe6ecbed8f75F6fD50B8be92feb144400CC4].membership = BOARD;
Board(0xA4caDe6ecbed8f75F6fD50B8be92feb144400CC4);
}
event Voter(address indexed voter);
event Deregistered(address indexed voter);
event Nominated(address indexed board, string endorsement);
event Board(address indexed board);
event Denounced(address indexed board, string reason);
event Revoked(address indexed board);
event Proposal(ProposalInterface indexed proposal);
event Cabal(CabalInterface indexed cabal);
event BannedProposal(ProposalInterface indexed proposal, string reason);
event Vouch(address indexed proposer, string vouch);
event Proposer(address indexed proposer);
event Devouch(address indexed proposer, string vouch);
event Shutdown(address indexed proposer);
// To register a Cabal, you must
// - implement CabalInterface
// - open-source your Cabal on Etherscan or equivalent
function registerCabal(CabalInterface _cabal)
external {
Account storage account = accounts[_cabal];
require(account.membership & (PENDING_CABAL | CABAL) == 0);
account.membership |= PENDING_CABAL;
}
function confirmCabal(CabalInterface _cabal)
external {
require(accounts[msg.sender].membership & BOARD != 0);
Account storage account = accounts[_cabal];
require(account.membership & PENDING_CABAL != 0);
account.membership ^= (CABAL | PENDING_CABAL);
Cabal(_cabal);
}
function register()
external payable
{
require(msg.value == registrationDeposit);
Account storage account = accounts[msg.sender];
require(account.membership & VOTER == 0);
account.lastAccess = now;
account.membership |= VOTER;
token.grant(msg.sender, 40);
Voter(msg.sender);
}
// smart contracts must implement the fallback function in order to deregister
function deregister()
external
{
Account storage account = accounts[msg.sender];
require(account.membership & VOTER != 0);
require(account.lastAccess + 7 days <= now);
account.membership ^= VOTER;
account.lastAccess = 0;
// the MANDATORY transfer keeps population() meaningful
msg.sender.transfer(registrationDeposit);
Deregistered(msg.sender);
}
function population()
external view
returns (uint256)
{
return this.balance / 1 finney;
}
function deregistrationDate()
external view
returns (uint256)
{
return accounts[msg.sender].lastAccess + 7 days;
}
// always true for deregistered accounts
function canDeregister(address _voter)
external view
returns (bool)
{
return accounts[_voter].lastAccess + 7 days <= now;
}
function canVoteOnProposal(address _voter, address _proposal)
external view
returns (bool)
{
return accounts[_voter].membership & VOTER != 0
&& accounts[_proposal].membership & PROPOSAL != 0;
}
function canVote(address _voter)
external view
returns (bool)
{
return accounts[_voter].membership & VOTER != 0;
}
function isProposal(address _proposal)
external view
returns (bool)
{
return accounts[_proposal].membership & PROPOSAL != 0;
}
function isPendingProposal(address _proposal)
external view
returns (bool)
{
return accounts[_proposal].membership & PENDING_PROPOSAL != 0;
}
function isPendingCabal(address _account)
external view
returns (bool)
{
return accounts[_account].membership & PENDING_CABAL != 0;
}
function isCabal(address _account)
external view
returns (bool)
{
return accounts[_account].membership & CABAL != 0;
}
// under no condition should you let anyone control two BOARD accounts
function appoint(address _board, string _vouch)
external {
require(accounts[msg.sender].membership & BOARD != 0);
Account storage candidate = accounts[_board];
if (candidate.membership & BOARD != 0) {
return;
}
address appt = candidate.appointer;
if (accounts[appt].membership & BOARD == 0) {
candidate.appointer = msg.sender;
Nominated(_board, _vouch);
return;
}
if (appt == msg.sender) {
return;
}
Nominated(_board, _vouch);
candidate.membership |= BOARD;
Board(_board);
}
function denounce(address _board, string _reason)
external {
require(accounts[msg.sender].membership & BOARD != 0);
Account storage board = accounts[_board];
if (board.membership & BOARD == 0) {
return;
}
address dncr = board.denouncer;
if (accounts[dncr].membership & BOARD == 0) {
board.denouncer = msg.sender;
Denounced(_board, _reason);
return;
}
if (dncr == msg.sender) {
return;
}
Denounced(_board, _reason);
board.membership ^= BOARD;
Revoked(_board);
}
function vouchProposer(address _proposer, string _vouch)
external {
require(accounts[msg.sender].membership & BOARD != 0);
Account storage candidate = accounts[_proposer];
if (candidate.membership & PROPOSER != 0) {
return;
}
address appt = candidate.voucher;
if (accounts[appt].membership & BOARD == 0) {
candidate.voucher = msg.sender;
Vouch(_proposer, _vouch);
return;
}
if (appt == msg.sender) {
return;
}
Vouch(_proposer, _vouch);
candidate.membership |= PROPOSER;
Proposer(_proposer);
}
function devouchProposer(address _proposer, string _devouch)
external {
require(accounts[msg.sender].membership & BOARD != 0);
Account storage candidate = accounts[_proposer];
if (candidate.membership & PROPOSER == 0) {
return;
}
address appt = candidate.devoucher;
if (accounts[appt].membership & BOARD == 0) {
candidate.devoucher = msg.sender;
Devouch(_proposer, _devouch);
return;
}
if (appt == msg.sender) {
return;
}
Devouch(_proposer, _devouch);
candidate.membership &= ~PROPOSER;
Shutdown(_proposer);
}
function proposeProper(bytes _resolution)
external
returns (ProposalInterface)
{
ProperProposal proposal = new ProperProposal();
proposal.init(msg.sender, _resolution);
accounts[proposal].membership |= PROPOSAL;
Proposal(proposal);
return proposal;
}
function proposeProxy(bytes _resolution)
external
returns (ProposalInterface)
{
ProperProposal proposal;
bytes memory clone = hex"600034603b57602f80600f833981f3600036818037808036816f5fbe2cc9b1b684ec445caf176042348e5af415602c573d81803e3d81f35b80fd";
assembly {
let data := add(clone, 0x20)
proposal := create(0, data, 58)
}
proposal.init(msg.sender, _resolution);
accounts[proposal].membership |= PROPOSAL;
Proposal(proposal);
return proposal;
}
function sudoPropose(ProposalInterface _proposal)
external {
require(accounts[msg.sender].membership & PROPOSER != 0);
uint8 membership = accounts[_proposal].membership;
require(membership == 0);
accounts[_proposal].membership = PROPOSAL;
Proposal(_proposal);
}
// To submit an outside proposal contract, you must:
// - ensure it conforms to ProposalInterface
// - ensure it properly transfers the VOTE token, calling Vote.voteX
// - open-source it using Etherscan or equivalent
function proposeExternal(ProposalInterface _proposal)
external
{
Account storage account = accounts[_proposal];
require(account.membership & (PENDING_PROPOSAL | PROPOSAL) == 0);
account.membership |= PENDING_PROPOSAL;
}
function confirmProposal(ProposalInterface _proposal)
external
{
require(accounts[msg.sender].membership & BOARD != 0);
Account storage account = accounts[_proposal];
require(account.membership & PENDING_PROPOSAL != 0);
account.membership ^= (PROPOSAL | PENDING_PROPOSAL);
Proposal(_proposal);
}
// bans prevent accounts from voting through this proposal
// this should only be used to stop a proposal that is abusing the VOTE token
// the burn is to penalize bans, so that they cannot suppress ideas
function banProposal(ProposalInterface _proposal, string _reason)
external payable
{
require(msg.value == proposalCensorshipFee);
require(accounts[msg.sender].membership & BOARD != 0);
Account storage account = accounts[_proposal];
require(account.membership & PROPOSAL != 0);
account.membership &= ~PROPOSAL;
burn.transfer(proposalCensorshipFee);
BannedProposal(_proposal, _reason);
}
// board members reserve the right to reject outside proposals for any reason
function rejectProposal(ProposalInterface _proposal)
external
{
require(accounts[msg.sender].membership & BOARD != 0);
Account storage account = accounts[_proposal];
require(account.membership & PENDING_PROPOSAL != 0);
account.membership &= PENDING_PROPOSAL;
}
// this code lives here instead of in the token so that it can be upgraded with account registry migration
function faucet()
external {
Account storage account = accounts[msg.sender];
require(account.membership & VOTER != 0);
uint256 lastAccess = account.lastAccess;
uint256 grant = (now - lastAccess) / 72 minutes;
if (grant > 40) {
grant = 40;
account.lastAccess = now;
} else {
account.lastAccess = lastAccess + grant * 72 minutes;
}
token.grant(msg.sender, grant);
}
function availableFaucet(address _account)
external view
returns (uint256) {
uint256 grant = (now - accounts[_account].lastAccess) / 72 minutes;
if (grant > 40) {
grant = 40;
}
return grant;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"}],"name":"rescueToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_grant","type":"uint256"}],"name":"grant","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_voter","type":"address"},{"name":"_votee","type":"address"}],"name":"vote1","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_voter","type":"address"},{"name":"_votee","type":"address"}],"name":"vote9","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"accountRegistry","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_voter","type":"address"},{"name":"_votee","type":"address"}],"name":"vote5","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newAccountRegistry","type":"address"}],"name":"migrateAccountRegistry","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"}],"name":"Owner","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"registry","type":"address"}],"name":"Registry","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_spender","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Approval","type":"event"}]Contract Creation Code
606060409081526000805560018054600160a060020a03199081166f2bb43c83ece652d161ad0fa862129a2c1790915560028054909116734a6f6b9ff1fc974096f9063a45fd12bd5b928ad11790558051908101604052600281527f4656000000000000000000000000000000000000000000000000000000000000602082015260039080516100939291602001906100ec565b5060408051908101604052600a81527f46696e6e6579566f746500000000000000000000000000000000000000000000602082015260049080516100db9291602001906100ec565b5034156100e757600080fd5b610187565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061012d57805160ff191683800117855561015a565b8280016001018555821561015a579182015b8281111561015a57825182559160200191906001019061013f565b5061016692915061016a565b5090565b61018491905b808211156101665760008155600101610170565b90565b610df2806101966000396000f3006060604052600436106100e25763ffffffff60e060020a60003504166306fdde0381146100e7578063095ea7b31461017157806318160ddd146101a757806323b872dd146101cc578063313ce567146101f45780634460d3cf1461021d5780636370920e1461023e5780636b11b20d1461026057806370a08231146102855780638b236271146102a45780638da5cb5b146102c957806395d89b41146102f8578063a9059cbb1461030b578063d089e11a1461032d578063da7b482714610340578063dd62ed3e14610365578063dec32e931461038a578063f2fde38b146103a9575b600080fd5b34156100f257600080fd5b6100fa6103c8565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561013657808201518382015260200161011e565b50505050905090810190601f1680156101635780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561017c57600080fd5b610193600160a060020a0360043516602435610466565b604051901515815260200160405180910390f35b34156101b257600080fd5b6101ba6104d3565b60405190815260200160405180910390f35b34156101d757600080fd5b610193600160a060020a03600435811690602435166044356104d9565b34156101ff57600080fd5b6102076105b8565b60405160ff909116815260200160405180910390f35b341561022857600080fd5b61023c600160a060020a03600435166105bd565b005b341561024957600080fd5b61023c600160a060020a03600435166024356106a0565b341561026b57600080fd5b61023c600160a060020a0360043581169060243516610705565b341561029057600080fd5b6101ba600160a060020a0360043516610859565b34156102af57600080fd5b61023c600160a060020a0360043581169060243516610874565b34156102d457600080fd5b6102dc6109c8565b604051600160a060020a03909116815260200160405180910390f35b341561030357600080fd5b6100fa6109d7565b341561031657600080fd5b610193600160a060020a0360043516602435610a42565b341561033857600080fd5b6102dc610ac7565b341561034b57600080fd5b61023c600160a060020a0360043581169060243516610ad6565b341561037057600080fd5b6101ba600160a060020a0360043581169060243516610c27565b341561039557600080fd5b61023c600160a060020a0360043516610c52565b34156103b457600080fd5b61023c600160a060020a0360043516610cc7565b60048054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561045e5780601f106104335761010080835404028352916020019161045e565b820191906000526020600020905b81548152906001019060200180831161044157829003601f168201915b505050505081565b600160a060020a03338116600081815260066020908152604080832094871680845294909152808220859055909291907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a35060015b92915050565b60005490565b600160a060020a038316600090815260056020526040812054829010806105265750600160a060020a03808516600090815260066020908152604080832033909416835292905220548290105b8061052f575081155b1561053c575060006105b1565b600160a060020a03808516600081815260066020908152604080832033861684528252808320805488900390558383526005909152808220805487900390559286168082529083902080548601905591600080516020610da78339815191529085905190815260200160405180910390a35060015b9392505050565b600181565b600160a060020a03811663a9059cbb33826370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561061b57600080fd5b6102c65a03f1151561062c57600080fd5b5050506040518051905060006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561068257600080fd5b6102c65a03f1151561069357600080fd5b5050506040518051505050565b60015433600160a060020a039081169116146106bb57600080fd5b600160a060020a038216600081815260056020526040808220805485019055815484018255600080516020610da78339815191529084905190815260200160405180910390a35050565b600160a060020a038216600090815260056020526040902054600a90101561072c57600080fd5b600154600160a060020a03166395156c96833360006040516020015260405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b151561078d57600080fd5b6102c65a03f1151561079e57600080fd5b5050506040518051905015156107b357600080fd5b600160a060020a038083166000818152600560205260408082208054600919019055600280548516835281832080546009908101909155868616845292829020805460010190555490931692600080516020610da783398151915291905190815260200160405180910390a380600160a060020a031682600160a060020a0316600080516020610da7833981519152600160405190815260200160405180910390a35050565b600160a060020a031660009081526005602052604090205490565b600160a060020a038216600090815260056020526040902054600a90101561089b57600080fd5b600154600160a060020a03166395156c96833360006040516020015260405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b15156108fc57600080fd5b6102c65a03f1151561090d57600080fd5b50505060405180519050151561092257600080fd5b600160a060020a038083166000818152600560205260408082208054600919019055600280548516835281832080546001908101909155868616845292829020805460090190555490931692600080516020610da783398151915291905190815260200160405180910390a380600160a060020a031682600160a060020a0316600080516020610da7833981519152600960405190815260200160405180910390a35050565b600254600160a060020a031681565b60038054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561045e5780601f106104335761010080835404028352916020019161045e565b600160a060020a03331660009081526005602052604081205482901015610a6b575060006104cd565b600160a060020a03338116600081815260056020526040808220805487900390559286168082529083902080548601905591600080516020610da78339815191529085905190815260200160405180910390a350600192915050565b600154600160a060020a031681565b600160a060020a038216600090815260056020526040902054600a901015610afd57600080fd5b600154600160a060020a03166395156c96833360006040516020015260405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b1515610b5e57600080fd5b6102c65a03f11515610b6f57600080fd5b505050604051805190501515610b8457600080fd5b600160a060020a03808316600081815260056020819052604080832080546009190190556002805486168452818420805484019055868616845292819020805483019055915490931692600080516020610da7833981519152915190815260200160405180910390a380600160a060020a031682600160a060020a0316600080516020610da7833981519152600560405190815260200160405180910390a35050565b600160a060020a03918216600090815260066020908152604080832093909416825291909152205490565b60025433600160a060020a03908116911614610c6d57600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383169081179091557f77ef9581150690a5caca1de816c50c822d4ea88fb86fe334603379ec2d6f969760405160405180910390a250565b60025460009033600160a060020a03908116911614610ce557600080fd5b5060028054600160a060020a039081166000908152600560205260408082205485841680845282842080548301905585548516845282842093909355935491929190911690600080516020610da78339815191529084905190815260200160405180910390a36002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0384169081179091557fa5e220c2c27d986cc8efeafa8f34ba6ea6bf96a34e146b29b6bdd8587771b13060405160405180910390a250505600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a723058204db46905862241e5efc5adf6a266f4db261db49cec5d86d04bb87ef3ef408e2d0029
Deployed Bytecode
0x6060604052600436106100e25763ffffffff60e060020a60003504166306fdde0381146100e7578063095ea7b31461017157806318160ddd146101a757806323b872dd146101cc578063313ce567146101f45780634460d3cf1461021d5780636370920e1461023e5780636b11b20d1461026057806370a08231146102855780638b236271146102a45780638da5cb5b146102c957806395d89b41146102f8578063a9059cbb1461030b578063d089e11a1461032d578063da7b482714610340578063dd62ed3e14610365578063dec32e931461038a578063f2fde38b146103a9575b600080fd5b34156100f257600080fd5b6100fa6103c8565b60405160208082528190810183818151815260200191508051906020019080838360005b8381101561013657808201518382015260200161011e565b50505050905090810190601f1680156101635780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561017c57600080fd5b610193600160a060020a0360043516602435610466565b604051901515815260200160405180910390f35b34156101b257600080fd5b6101ba6104d3565b60405190815260200160405180910390f35b34156101d757600080fd5b610193600160a060020a03600435811690602435166044356104d9565b34156101ff57600080fd5b6102076105b8565b60405160ff909116815260200160405180910390f35b341561022857600080fd5b61023c600160a060020a03600435166105bd565b005b341561024957600080fd5b61023c600160a060020a03600435166024356106a0565b341561026b57600080fd5b61023c600160a060020a0360043581169060243516610705565b341561029057600080fd5b6101ba600160a060020a0360043516610859565b34156102af57600080fd5b61023c600160a060020a0360043581169060243516610874565b34156102d457600080fd5b6102dc6109c8565b604051600160a060020a03909116815260200160405180910390f35b341561030357600080fd5b6100fa6109d7565b341561031657600080fd5b610193600160a060020a0360043516602435610a42565b341561033857600080fd5b6102dc610ac7565b341561034b57600080fd5b61023c600160a060020a0360043581169060243516610ad6565b341561037057600080fd5b6101ba600160a060020a0360043581169060243516610c27565b341561039557600080fd5b61023c600160a060020a0360043516610c52565b34156103b457600080fd5b61023c600160a060020a0360043516610cc7565b60048054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561045e5780601f106104335761010080835404028352916020019161045e565b820191906000526020600020905b81548152906001019060200180831161044157829003601f168201915b505050505081565b600160a060020a03338116600081815260066020908152604080832094871680845294909152808220859055909291907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a35060015b92915050565b60005490565b600160a060020a038316600090815260056020526040812054829010806105265750600160a060020a03808516600090815260066020908152604080832033909416835292905220548290105b8061052f575081155b1561053c575060006105b1565b600160a060020a03808516600081815260066020908152604080832033861684528252808320805488900390558383526005909152808220805487900390559286168082529083902080548601905591600080516020610da78339815191529085905190815260200160405180910390a35060015b9392505050565b600181565b600160a060020a03811663a9059cbb33826370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561061b57600080fd5b6102c65a03f1151561062c57600080fd5b5050506040518051905060006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561068257600080fd5b6102c65a03f1151561069357600080fd5b5050506040518051505050565b60015433600160a060020a039081169116146106bb57600080fd5b600160a060020a038216600081815260056020526040808220805485019055815484018255600080516020610da78339815191529084905190815260200160405180910390a35050565b600160a060020a038216600090815260056020526040902054600a90101561072c57600080fd5b600154600160a060020a03166395156c96833360006040516020015260405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b151561078d57600080fd5b6102c65a03f1151561079e57600080fd5b5050506040518051905015156107b357600080fd5b600160a060020a038083166000818152600560205260408082208054600919019055600280548516835281832080546009908101909155868616845292829020805460010190555490931692600080516020610da783398151915291905190815260200160405180910390a380600160a060020a031682600160a060020a0316600080516020610da7833981519152600160405190815260200160405180910390a35050565b600160a060020a031660009081526005602052604090205490565b600160a060020a038216600090815260056020526040902054600a90101561089b57600080fd5b600154600160a060020a03166395156c96833360006040516020015260405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b15156108fc57600080fd5b6102c65a03f1151561090d57600080fd5b50505060405180519050151561092257600080fd5b600160a060020a038083166000818152600560205260408082208054600919019055600280548516835281832080546001908101909155868616845292829020805460090190555490931692600080516020610da783398151915291905190815260200160405180910390a380600160a060020a031682600160a060020a0316600080516020610da7833981519152600960405190815260200160405180910390a35050565b600254600160a060020a031681565b60038054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561045e5780601f106104335761010080835404028352916020019161045e565b600160a060020a03331660009081526005602052604081205482901015610a6b575060006104cd565b600160a060020a03338116600081815260056020526040808220805487900390559286168082529083902080548601905591600080516020610da78339815191529085905190815260200160405180910390a350600192915050565b600154600160a060020a031681565b600160a060020a038216600090815260056020526040902054600a901015610afd57600080fd5b600154600160a060020a03166395156c96833360006040516020015260405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b1515610b5e57600080fd5b6102c65a03f11515610b6f57600080fd5b505050604051805190501515610b8457600080fd5b600160a060020a03808316600081815260056020819052604080832080546009190190556002805486168452818420805484019055868616845292819020805483019055915490931692600080516020610da7833981519152915190815260200160405180910390a380600160a060020a031682600160a060020a0316600080516020610da7833981519152600560405190815260200160405180910390a35050565b600160a060020a03918216600090815260066020908152604080832093909416825291909152205490565b60025433600160a060020a03908116911614610c6d57600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383169081179091557f77ef9581150690a5caca1de816c50c822d4ea88fb86fe334603379ec2d6f969760405160405180910390a250565b60025460009033600160a060020a03908116911614610ce557600080fd5b5060028054600160a060020a039081166000908152600560205260408082205485841680845282842080548301905585548516845282842093909355935491929190911690600080516020610da78339815191529084905190815260200160405180910390a36002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0384169081179091557fa5e220c2c27d986cc8efeafa8f34ba6ea6bf96a34e146b29b6bdd8587771b13060405160405180910390a250505600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a723058204db46905862241e5efc5adf6a266f4db261db49cec5d86d04bb87ef3ef408e2d0029
Swarm Source
bzzr://4db46905862241e5efc5adf6a266f4db261db49cec5d86d04bb87ef3ef408e2d
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ 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.