Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 5 from a total of 5 transactions
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
11141257 | 1468 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Minimal Proxy Contract for 0x081d1ae20e83d955d1b2e517238f32b8e8deadd2
Contract Name:
DataTokenTemplate
Compiler Version
v0.5.7+commit.6da8b019
Optimization Enabled:
Yes with 200 runs
Other Settings:
byzantium EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
pragma solidity 0.5.7; // Copyright BigchainDB GmbH and Ocean Protocol contributors // SPDX-License-Identifier: (Apache-2.0 AND CC-BY-4.0) // Code is Apache-2.0 and docs are CC-BY-4.0 import '../interfaces/IERC20Template.sol'; import 'openzeppelin-solidity/contracts/token/ERC20/ERC20.sol'; /** * @title DataTokenTemplate * * @dev DataTokenTemplate is an ERC20 compliant token template * Used by the factory contract as a bytecode reference to * deploy new DataTokens. */ contract DataTokenTemplate is IERC20Template, ERC20 { using SafeMath for uint256; string private _name; string private _symbol; string private _blob; uint256 private _cap; uint8 private constant _decimals = 18; address private _communityFeeCollector; bool private initialized = false; address private _minter; address private _proposedMinter; uint256 public constant BASE = 10**18; uint256 public constant BASE_COMMUNITY_FEE_PERCENTAGE = BASE / 1000; uint256 public constant BASE_MARKET_FEE_PERCENTAGE = BASE / 1000; event OrderStarted( address indexed consumer, address indexed payer, uint256 amount, uint256 serviceId, uint256 timestamp, address indexed mrktFeeCollector, uint256 marketFee ); event OrderFinished( bytes32 orderTxId, address indexed consumer, uint256 amount, uint256 serviceId, address indexed provider, uint256 timestamp ); event MinterProposed( address currentMinter, address newMinter ); event MinterApproved( address currentMinter, address newMinter ); modifier onlyNotInitialized() { require( !initialized, 'DataTokenTemplate: token instance already initialized' ); _; } modifier onlyMinter() { require( msg.sender == _minter, 'DataTokenTemplate: invalid minter' ); _; } /** * @dev constructor * Called prior contract deployment * @param name refers to a template DataToken name * @param symbol refers to a template DataToken symbol * @param minterAddress refers to an address that has minter role * @param cap the total ERC20 cap * @param blob data string refering to the resolver for the metadata * @param feeCollector it is the community fee collector address */ constructor( string memory name, string memory symbol, address minterAddress, uint256 cap, string memory blob, address feeCollector ) public { _initialize( name, symbol, minterAddress, cap, blob, feeCollector ); } /** * @dev initialize * Called prior contract initialization (e.g creating new DataToken instance) * Calls private _initialize function. Only if contract is not initialized. * @param name refers to a new DataToken name * @param symbol refers to a nea DataToken symbol * @param minterAddress refers to an address that has minter rights * @param cap the total ERC20 cap * @param blob data string refering to the resolver for the metadata * @param feeCollector it is the community fee collector address */ function initialize( string calldata name, string calldata symbol, address minterAddress, uint256 cap, string calldata blob, address feeCollector ) external onlyNotInitialized returns(bool) { return _initialize( name, symbol, minterAddress, cap, blob, feeCollector ); } /** * @dev _initialize * Private function called on contract initialization. * @param name refers to a new DataToken name * @param symbol refers to a nea DataToken symbol * @param minterAddress refers to an address that has minter rights * @param cap the total ERC20 cap * @param blob data string refering to the resolver for the metadata * @param feeCollector it is the community fee collector address */ function _initialize( string memory name, string memory symbol, address minterAddress, uint256 cap, string memory blob, address feeCollector ) private returns(bool) { require( minterAddress != address(0), 'DataTokenTemplate: Invalid minter, zero address' ); require( _minter == address(0), 'DataTokenTemplate: Invalid minter, zero address' ); require( feeCollector != address(0), 'DataTokenTemplate: Invalid community fee collector, zero address' ); require( cap != 0, 'DataTokenTemplate: Invalid cap value' ); _cap = cap; _name = name; _blob = blob; _symbol = symbol; _minter = minterAddress; _communityFeeCollector = feeCollector; initialized = true; return initialized; } /** * @dev mint * Only the minter address can call it. * msg.value should be higher than zero and gt or eq minting fee * @param account refers to an address that token is going to be minted to. * @param value refers to amount of tokens that is going to be minted. */ function mint( address account, uint256 value ) external onlyMinter { require( totalSupply().add(value) <= _cap, 'DataTokenTemplate: cap exceeded' ); _mint(account, value); } /** * @dev startOrder * called by payer or consumer prior ordering a service consume on a marketplace. * @param consumer is the consumer address (payer could be different address) * @param amount refers to amount of tokens that is going to be transfered. * @param serviceId service index in the metadata * @param mrktFeeCollector marketplace fee collector */ function startOrder( address consumer, uint256 amount, uint256 serviceId, address mrktFeeCollector ) external { uint256 marketFee = 0; uint256 communityFee = calculateFee( amount, BASE_COMMUNITY_FEE_PERCENTAGE ); transfer(_communityFeeCollector, communityFee); if(mrktFeeCollector != address(0)){ marketFee = calculateFee( amount, BASE_MARKET_FEE_PERCENTAGE ); transfer(mrktFeeCollector, marketFee); } uint256 totalFee = communityFee.add(marketFee); transfer(_minter, amount.sub(totalFee)); emit OrderStarted( consumer, msg.sender, amount, serviceId, block.timestamp, mrktFeeCollector, marketFee ); } /** * @dev finishOrder * called by provider prior completing service delivery only * if there is a partial or full refund. * @param orderTxId refers to the transaction Id of startOrder acts * as a payment reference. * @param consumer refers to an address that has consumed that service. * @param amount refers to amount of tokens that is going to be transfered. * @param serviceId service index in the metadata. */ function finishOrder( bytes32 orderTxId, address consumer, uint256 amount, uint256 serviceId ) external { if ( amount != 0 ) require( transfer(consumer, amount), 'DataTokenTemplate: failed to finish order' ); emit OrderFinished( orderTxId, consumer, amount, serviceId, msg.sender, block.timestamp ); } /** * @dev proposeMinter * It proposes a new token minter address. * Only the current minter can call it. * @param newMinter refers to a new token minter address. */ function proposeMinter(address newMinter) external onlyMinter { _proposedMinter = newMinter; emit MinterProposed( msg.sender, _proposedMinter ); } /** * @dev approveMinter * It approves a new token minter address. * Only the current minter can call it. */ function approveMinter() external { require( msg.sender == _proposedMinter, 'DataTokenTemplate: invalid proposed minter address' ); emit MinterApproved( _minter, _proposedMinter ); _minter = _proposedMinter; _proposedMinter = address(0); } /** * @dev name * It returns the token name. * @return DataToken name. */ function name() external view returns(string memory) { return _name; } /** * @dev symbol * It returns the token symbol. * @return DataToken symbol. */ function symbol() external view returns(string memory) { return _symbol; } /** * @dev blob * It returns the blob (e.g https://123.com). * @return DataToken blob. */ function blob() external view returns(string memory) { return _blob; } /** * @dev decimals * It returns the token decimals. * how many supported decimal points * @return DataToken decimals. */ function decimals() external view returns(uint8) { return _decimals; } /** * @dev cap * it returns the capital. * @return DataToken cap. */ function cap() external view returns (uint256) { return _cap; } /** * @dev isMinter * It takes the address and checks whether it has a minter role. * @param account refers to the address. * @return true if account has a minter role. */ function isMinter(address account) external view returns(bool) { return (_minter == account); } /** * @dev minter * @return minter's address. */ function minter() external view returns(address) { return _minter; } /** * @dev isInitialized * It checks whether the contract is initialized. * @return true if the contract is initialized. */ function isInitialized() external view returns(bool) { return initialized; } /** * @dev calculateFee * giving a fee percentage, and amount it calculates the actual fee * @param amount the amount of token * @param feePercentage the fee percentage * @return the token fee. */ function calculateFee( uint256 amount, uint256 feePercentage ) public pure returns(uint256) { if(amount == 0) return 0; if(feePercentage == 0) return 0; return amount.mul(feePercentage).div(BASE); } }
pragma solidity >=0.5.0; interface IERC20Template { function initialize( string calldata name, string calldata symbol, address minter, uint256 cap, string calldata blob, address collector ) external returns (bool); function mint(address account, uint256 value) external; function minter() external view returns(address); function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); function cap() external view returns (uint256); function isMinter(address account) external view returns (bool); function isInitialized() external view returns (bool); function allowance(address owner, address spender) external view returns (uint256); function transferFrom( address from, address to, uint256 value ) external returns (bool); function balanceOf(address account) external view returns (uint256); function transfer(address to, uint256 value) external returns (bool); function proposeMinter(address newMinter) external; function approveMinter() external; }
pragma solidity ^0.5.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ contract Context { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. constructor () internal { } // solhint-disable-previous-line no-empty-blocks function _msgSender() internal view returns (address payable) { return msg.sender; } function _msgData() internal view returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } }
pragma solidity ^0.5.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. * * _Available since v2.4.0._ */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * * _Available since v2.4.0._ */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. * * _Available since v2.4.0._ */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } }
pragma solidity ^0.5.0; import "../../GSN/Context.sol"; import "./IERC20.sol"; import "../../math/SafeMath.sol"; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20Mintable}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20 { using SafeMath for uint256; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}; * * Requirements: * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for `sender`'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements * * - `to` cannot be the zero address. */ function _mint(address account, uint256 amount) internal { require(account != address(0), "ERC20: mint to the zero address"); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal { require(account != address(0), "ERC20: burn from the zero address"); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens. * * This is internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve(address owner, address spender, uint256 amount) internal { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Destroys `amount` tokens from `account`.`amount` is then deducted * from the caller's allowance. * * See {_burn} and {_approve}. */ function _burnFrom(address account, uint256 amount) internal { _burn(account, amount); _approve(account, _msgSender(), _allowances[account][_msgSender()].sub(amount, "ERC20: burn amount exceeds allowance")); } }
pragma solidity ^0.5.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. Does not include * the optional functions; to access them see {ERC20Detailed}. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
{ "remappings": [], "optimizer": { "enabled": true, "runs": 200 }, "evmVersion": "byzantium", "libraries": { "": {} }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"minter","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"amount","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":"sender","type":"address"},{"name":"recipient","type":"address"},{"name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"BASE_MARKET_FEE_PERCENTAGE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"amount","type":"uint256"},{"name":"feePercentage","type":"uint256"}],"name":"calculateFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"cap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isInitialized","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"},{"name":"value","type":"uint256"}],"name":"mint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newMinter","type":"address"}],"name":"proposeMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"orderTxId","type":"bytes32"},{"name":"consumer","type":"address"},{"name":"amount","type":"uint256"},{"name":"serviceId","type":"uint256"}],"name":"finishOrder","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"},{"name":"symbol","type":"string"},{"name":"minterAddress","type":"address"},{"name":"cap","type":"uint256"},{"name":"blob","type":"string"},{"name":"feeCollector","type":"address"}],"name":"initialize","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"recipient","type":"address"},{"name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isMinter","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"consumer","type":"address"},{"name":"amount","type":"uint256"},{"name":"serviceId","type":"uint256"},{"name":"mrktFeeCollector","type":"address"}],"name":"startOrder","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"BASE_COMMUNITY_FEE_PERCENTAGE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","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":"approveMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"BASE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"blob","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"name","type":"string"},{"name":"symbol","type":"string"},{"name":"minterAddress","type":"address"},{"name":"cap","type":"uint256"},{"name":"blob","type":"string"},{"name":"feeCollector","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"consumer","type":"address"},{"indexed":true,"name":"payer","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"serviceId","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"},{"indexed":true,"name":"mrktFeeCollector","type":"address"},{"indexed":false,"name":"marketFee","type":"uint256"}],"name":"OrderStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"orderTxId","type":"bytes32"},{"indexed":true,"name":"consumer","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"serviceId","type":"uint256"},{"indexed":true,"name":"provider","type":"address"},{"indexed":false,"name":"timestamp","type":"uint256"}],"name":"OrderFinished","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"currentMinter","type":"address"},{"indexed":false,"name":"newMinter","type":"address"}],"name":"MinterProposed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"currentMinter","type":"address"},{"indexed":false,"name":"newMinter","type":"address"}],"name":"MinterApproved","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"}]
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.