ETH Price: $2,305.77 (+1.03%)

Token

TrueHKD (THKD)
 

Overview

Max Total Supply

2,482,418.54 THKD

Holders

103 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
36.497676497049091972 THKD

Value
$0.00
0xdd9f24efc84d93deef3c8745c837ab63e80abd27
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

The leading stablecoin backed by the Hong Kong dollar.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
TrueHKD

Compiler Version
v0.4.23+commit.124ca40d

Optimization Enabled:
Yes with 20000 runs

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

pragma solidity ^0.4.23;

// File: contracts/Proxy/OwnedUpgradeabilityProxy.sol

/**
 * @title OwnedUpgradeabilityProxy
 * @dev This contract combines an upgradeability proxy with basic authorization control functionalities
 */
contract TrueHKD {
    /**
    * @dev Event to show ownership has been transferred
    * @param previousOwner representing the address of the previous owner
    * @param newOwner representing the address of the new owner
    */
    event ProxyOwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
    * @dev Event to show ownership transfer is pending
    * @param currentOwner representing the address of the current owner
    * @param pendingOwner representing the address of the pending owner
    */
    event NewPendingOwner(address currentOwner, address pendingOwner);
    
    // Storage position of the owner and pendingOwner of the contract
    bytes32 private constant proxyOwnerPosition = 0x694c83c02d0f62c26352cb2d947e2f3d43c28959df09aa728c1937be0db4f629;//keccak256("trueHKD.proxy.owner");
    bytes32 private constant pendingProxyOwnerPosition = 0x6dd3140f324ae1c14ee501ef56b899935ef394e2a1b2a0e41ec6b40fd725799c;//keccak256("trueHKD.pending.proxy.owner");

    /**
    * @dev the constructor sets the original owner of the contract to the sender account.
    */
    constructor() public {
        _setUpgradeabilityOwner(msg.sender);
    }

    /**
    * @dev Throws if called by any account other than the owner.
    */
    modifier onlyProxyOwner() {
        require(msg.sender == proxyOwner(), "only Proxy Owner");
        _;
    }

    /**
    * @dev Throws if called by any account other than the pending owner.
    */
    modifier onlyPendingProxyOwner() {
        require(msg.sender == pendingProxyOwner(), "only pending Proxy Owner");
        _;
    }

    /**
    * @dev Tells the address of the owner
    * @return the address of the owner
    */
    function proxyOwner() public view returns (address owner) {
        bytes32 position = proxyOwnerPosition;
        assembly {
            owner := sload(position)
        }
    }

    /**
    * @dev Tells the address of the owner
    * @return the address of the owner
    */
    function pendingProxyOwner() public view returns (address pendingOwner) {
        bytes32 position = pendingProxyOwnerPosition;
        assembly {
            pendingOwner := sload(position)
        }
    }

    /**
    * @dev Sets the address of the owner
    */
    function _setUpgradeabilityOwner(address newProxyOwner) internal {
        bytes32 position = proxyOwnerPosition;
        assembly {
            sstore(position, newProxyOwner)
        }
    }

    /**
    * @dev Sets the address of the owner
    */
    function _setPendingUpgradeabilityOwner(address newPendingProxyOwner) internal {
        bytes32 position = pendingProxyOwnerPosition;
        assembly {
            sstore(position, newPendingProxyOwner)
        }
    }

    /**
    * @dev Allows the current owner to transfer control of the contract to a newOwner.
    *changes the pending owner to newOwner. But doesn't actually transfer
    * @param newOwner The address to transfer ownership to.
    */
    function transferProxyOwnership(address newOwner) external onlyProxyOwner {
        require(newOwner != address(0));
        _setPendingUpgradeabilityOwner(newOwner);
        emit NewPendingOwner(proxyOwner(), newOwner);
    }

    /**
    * @dev Allows the pendingOwner to claim ownership of the proxy
    */
    function claimProxyOwnership() external onlyPendingProxyOwner {
        emit ProxyOwnershipTransferred(proxyOwner(), pendingProxyOwner());
        _setUpgradeabilityOwner(pendingProxyOwner());
        _setPendingUpgradeabilityOwner(address(0));
    }

    /**
    * @dev Allows the proxy owner to upgrade the current version of the proxy.
    * @param implementation representing the address of the new implementation to be set.
    */
    function upgradeTo(address implementation) external onlyProxyOwner {
        address currentImplementation;
        bytes32 position = implementationPosition;
        assembly {
            currentImplementation := sload(position)
        }
        require(currentImplementation != implementation);
        assembly {
          sstore(position, implementation)
        }
        emit Upgraded(implementation);
    }
    /**
    * @dev This event will be emitted every time the implementation gets upgraded
    * @param implementation representing the address of the upgraded implementation
    */
    event Upgraded(address indexed implementation);

    // Storage position of the address of the current implementation
    bytes32 private constant implementationPosition = 0x3e9d19baa8ecfb799f8603bb69f8a220a1c51ff5c34c24b0d981ca8973276561; //keccak256("trueHKD.proxy.implementation");

    function implementation() public view returns (address impl) {
        bytes32 position = implementationPosition;
        assembly {
            impl := sload(position)
        }
    }

    /**
    * @dev Fallback function allowing to perform a delegatecall to the given implementation.
    * This function will return whatever the implementation call returns
    */
    function() external payable {
        bytes32 position = implementationPosition;
        
        assembly {
            let ptr := mload(0x40)
            calldatacopy(ptr, returndatasize, calldatasize)
            let result := delegatecall(gas, sload(position), ptr, calldatasize, returndatasize, returndatasize)
            returndatacopy(ptr, 0, returndatasize)

            switch result
            case 0 { revert(ptr, returndatasize) }
            default { return(ptr, returndatasize) }
        }
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"proxyOwner","outputs":[{"name":"owner","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pendingProxyOwner","outputs":[{"name":"pendingOwner","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"implementation","type":"address"}],"name":"upgradeTo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"implementation","outputs":[{"name":"impl","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"claimProxyOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferProxyOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"ProxyOwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"currentOwner","type":"address"},{"indexed":false,"name":"pendingOwner","type":"address"}],"name":"NewPendingOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"implementation","type":"address"}],"name":"Upgraded","type":"event"}]

608060405234801561001057600080fd5b5061002333640100000000610028810204565b61004c565b7f694c83c02d0f62c26352cb2d947e2f3d43c28959df09aa728c1937be0db4f62955565b6106058061005b6000396000f3006080604052600436106100775763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663025313a281146100bc5780630add8140146100fa5780633659cfe61461010f5780635c60da1b1461013f5780639965b3d614610154578063f1739cae14610169575b6040517f3e9d19baa8ecfb799f8603bb69f8a220a1c51ff5c34c24b0d981ca897327656190363d82373d3d368385545af43d6000833e8080156100b8573d83f35b3d83fd5b3480156100c857600080fd5b506100d1610197565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561010657600080fd5b506100d16101bc565b34801561011b57600080fd5b5061013d73ffffffffffffffffffffffffffffffffffffffff600435166101e1565b005b34801561014b57600080fd5b506100d161031c565b34801561016057600080fd5b5061013d610341565b34801561017557600080fd5b5061013d73ffffffffffffffffffffffffffffffffffffffff60043516610468565b7f694c83c02d0f62c26352cb2d947e2f3d43c28959df09aa728c1937be0db4f6295490565b7f6dd3140f324ae1c14ee501ef56b899935ef394e2a1b2a0e41ec6b40fd725799c5490565b6000806101ec610197565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561028757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f6f6e6c792050726f7879204f776e657200000000000000000000000000000000604482015290519081900360640190fd5b50507f3e9d19baa8ecfb799f8603bb69f8a220a1c51ff5c34c24b0d981ca897327656180549073ffffffffffffffffffffffffffffffffffffffff80831690841614156102d357600080fd5b82815560405173ffffffffffffffffffffffffffffffffffffffff8416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2505050565b7f3e9d19baa8ecfb799f8603bb69f8a220a1c51ff5c34c24b0d981ca89732765615490565b6103496101bc565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156103e457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6f6e6c792070656e64696e672050726f7879204f776e65720000000000000000604482015290519081900360640190fd5b6103ec6101bc565b73ffffffffffffffffffffffffffffffffffffffff1661040a610197565b73ffffffffffffffffffffffffffffffffffffffff167f5a3e66efaa1e445ebd894728a69d6959842ea1e97bd79b892797106e270efcd960405160405180910390a361045c6104576101bc565b610591565b61046660006105b5565b565b610470610197565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561050b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f6f6e6c792050726f7879204f776e657200000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116151561052d57600080fd5b610536816105b5565b7fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b61055f610197565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301528051918290030190a150565b7f694c83c02d0f62c26352cb2d947e2f3d43c28959df09aa728c1937be0db4f62955565b7f6dd3140f324ae1c14ee501ef56b899935ef394e2a1b2a0e41ec6b40fd725799c555600a165627a7a723058202813dfd4180261018b82e300f28e8c9abc40f281956732c4d9923aaa66d2326d0029

Deployed Bytecode

0x6080604052600436106100775763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663025313a281146100bc5780630add8140146100fa5780633659cfe61461010f5780635c60da1b1461013f5780639965b3d614610154578063f1739cae14610169575b6040517f3e9d19baa8ecfb799f8603bb69f8a220a1c51ff5c34c24b0d981ca897327656190363d82373d3d368385545af43d6000833e8080156100b8573d83f35b3d83fd5b3480156100c857600080fd5b506100d1610197565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561010657600080fd5b506100d16101bc565b34801561011b57600080fd5b5061013d73ffffffffffffffffffffffffffffffffffffffff600435166101e1565b005b34801561014b57600080fd5b506100d161031c565b34801561016057600080fd5b5061013d610341565b34801561017557600080fd5b5061013d73ffffffffffffffffffffffffffffffffffffffff60043516610468565b7f694c83c02d0f62c26352cb2d947e2f3d43c28959df09aa728c1937be0db4f6295490565b7f6dd3140f324ae1c14ee501ef56b899935ef394e2a1b2a0e41ec6b40fd725799c5490565b6000806101ec610197565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561028757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f6f6e6c792050726f7879204f776e657200000000000000000000000000000000604482015290519081900360640190fd5b50507f3e9d19baa8ecfb799f8603bb69f8a220a1c51ff5c34c24b0d981ca897327656180549073ffffffffffffffffffffffffffffffffffffffff80831690841614156102d357600080fd5b82815560405173ffffffffffffffffffffffffffffffffffffffff8416907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2505050565b7f3e9d19baa8ecfb799f8603bb69f8a220a1c51ff5c34c24b0d981ca89732765615490565b6103496101bc565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156103e457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6f6e6c792070656e64696e672050726f7879204f776e65720000000000000000604482015290519081900360640190fd5b6103ec6101bc565b73ffffffffffffffffffffffffffffffffffffffff1661040a610197565b73ffffffffffffffffffffffffffffffffffffffff167f5a3e66efaa1e445ebd894728a69d6959842ea1e97bd79b892797106e270efcd960405160405180910390a361045c6104576101bc565b610591565b61046660006105b5565b565b610470610197565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561050b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f6f6e6c792050726f7879204f776e657200000000000000000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116151561052d57600080fd5b610536816105b5565b7fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b61055f610197565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301528051918290030190a150565b7f694c83c02d0f62c26352cb2d947e2f3d43c28959df09aa728c1937be0db4f62955565b7f6dd3140f324ae1c14ee501ef56b899935ef394e2a1b2a0e41ec6b40fd725799c555600a165627a7a723058202813dfd4180261018b82e300f28e8c9abc40f281956732c4d9923aaa66d2326d0029

Deployed Bytecode Sourcemap

236:5657:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5507:4;5501:11;4863:66;;5560:12;5544:14;5501:11;5526:47;5671:14;5655;5641:12;5636:3;5625:8;5619:15;5614:3;5601:85;5723:14;5720:1;5715:3;5700:38;5761:6;5781:38;;;;5855:14;5850:3;5843:27;5781:38;5802:14;5797:3;5790:27;1991:183;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1991:183:0;;;;;;;;;;;;;;;;;;;;;;;2282:211;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2282:211:0;;;;4071:426;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;4071:426:0;;;;;;;;;4983:189;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4983:189:0;;;;3621:254;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3621:254:0;;;;3298:230;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3298:230:0;;;;;;;1991:183;985:66;2141:15;;2117:50::o;2282:211::-;1146:66;2460:15;;2429:57::o;4071:426::-;4149:29;4189:16;1597:12;:10;:12::i;:::-;1583:26;;:10;:26;;;1575:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4863:66:0;4290:15;;;4334:39;;;;;;;;;4326:48;;;;;;4407:32;;;4465:24;;;;;;;;;;;4071:426;;;:::o;4983:189::-;4863:66;5139:15;;5116:49::o;3621:254::-;1815:19;:17;:19::i;:::-;1801:33;;:10;:33;;;1793:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3739:19;:17;:19::i;:::-;3699:60;;3725:12;:10;:12::i;:::-;3699:60;;;;;;;;;;;;3770:44;3794:19;:17;:19::i;:::-;3770:23;:44::i;:::-;3825:42;3864:1;3825:30;:42::i;:::-;3621:254::o;3298:230::-;1597:12;:10;:12::i;:::-;1583:26;;:10;:26;;;1575:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3391:22;;;;;3383:31;;;;;;3425:40;3456:8;3425:30;:40::i;:::-;3481:39;3497:12;:10;:12::i;:::-;3481:39;;;;;;;;;;;;;;;;;;;;;;;;;3298:230;:::o;2560:197::-;985:66;2708:31;2693:57::o;2824:225::-;1146:66;2993:38;2978:64::o

Swarm Source

bzzr://2813dfd4180261018b82e300f28e8c9abc40f281956732c4d9923aaa66d2326d
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.