├── .gitignore ├── media ├── 1.jpg ├── 10.jpg ├── 11.jpg ├── 12.jpg ├── 13.jpg ├── 2.jpg ├── 3.jpg ├── 4.jpg ├── 5.jpg ├── 6.jpg ├── 7.jpg ├── 8.jpg └── 9.jpg ├── ERC20Basic.sol ├── ERC20.sol ├── SafeMath.sol ├── Ownable.sol ├── BasicToken.sol ├── README.md ├── StandardToken.sol ├── VevueToken.sol ├── interface-abi.txt ├── README.CN.md └── README.EN.md /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | -------------------------------------------------------------------------------- /media/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vevue/ICOcontracts/HEAD/media/1.jpg -------------------------------------------------------------------------------- /media/10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vevue/ICOcontracts/HEAD/media/10.jpg -------------------------------------------------------------------------------- /media/11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vevue/ICOcontracts/HEAD/media/11.jpg -------------------------------------------------------------------------------- /media/12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vevue/ICOcontracts/HEAD/media/12.jpg -------------------------------------------------------------------------------- /media/13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vevue/ICOcontracts/HEAD/media/13.jpg -------------------------------------------------------------------------------- /media/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vevue/ICOcontracts/HEAD/media/2.jpg -------------------------------------------------------------------------------- /media/3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vevue/ICOcontracts/HEAD/media/3.jpg -------------------------------------------------------------------------------- /media/4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vevue/ICOcontracts/HEAD/media/4.jpg -------------------------------------------------------------------------------- /media/5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vevue/ICOcontracts/HEAD/media/5.jpg -------------------------------------------------------------------------------- /media/6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vevue/ICOcontracts/HEAD/media/6.jpg -------------------------------------------------------------------------------- /media/7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vevue/ICOcontracts/HEAD/media/7.jpg -------------------------------------------------------------------------------- /media/8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vevue/ICOcontracts/HEAD/media/8.jpg -------------------------------------------------------------------------------- /media/9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vevue/ICOcontracts/HEAD/media/9.jpg -------------------------------------------------------------------------------- /ERC20Basic.sol: -------------------------------------------------------------------------------- 1 | pragma solidity ^0.4.11; 2 | 3 | /** 4 | * @title ERC20Basic 5 | * @dev Simpler version of ERC20 interface 6 | * @dev see https://github.com/ethereum/EIPs/issues/179 7 | */ 8 | contract ERC20Basic { 9 | uint256 public totalSupply; 10 | function balanceOf(address _owner) constant returns (uint256 balance); 11 | function transfer(address _to, uint256 _value) returns (bool success); 12 | event Transfer(address indexed _from, address indexed _to, uint256 _value); 13 | } 14 | -------------------------------------------------------------------------------- /ERC20.sol: -------------------------------------------------------------------------------- 1 | pragma solidity ^0.4.11; 2 | 3 | import './ERC20Basic.sol'; 4 | 5 | /** 6 | * @title ERC20 interface 7 | * @dev Implements ERC20 Token Standard: https://github.com/ethereum/EIPs/issues/20 8 | */ 9 | contract ERC20 is ERC20Basic { 10 | function transferFrom(address _from, address _to, uint256 _value) returns (bool success); 11 | function approve(address _spender, uint256 _value) returns (bool success); 12 | function allowance(address _owner, address _spender) constant returns (uint256 remaining); 13 | event Approval(address indexed _owner, address indexed _spender, uint256 _value); 14 | } 15 | -------------------------------------------------------------------------------- /SafeMath.sol: -------------------------------------------------------------------------------- 1 | pragma solidity ^0.4.11; 2 | 3 | /** 4 | * @title SafeMath 5 | * @dev Math operations with safety checks that throw on error 6 | */ 7 | library SafeMath { 8 | function mul(uint256 a, uint256 b) internal constant returns (uint256) { 9 | uint256 c = a * b; 10 | assert(a == 0 || c / a == b); 11 | return c; 12 | } 13 | 14 | function div(uint256 a, uint256 b) internal constant returns (uint256) { 15 | // assert(b > 0); // Solidity automatically throws when dividing by 0 16 | uint256 c = a / b; 17 | // assert(a == b * c + a % b); // There is no case in which this doesn't hold 18 | return c; 19 | } 20 | 21 | function sub(uint256 a, uint256 b) internal constant returns (uint256) { 22 | assert(b <= a); 23 | return a - b; 24 | } 25 | 26 | function add(uint256 a, uint256 b) internal constant returns (uint256) { 27 | uint256 c = a + b; 28 | assert(c >= a); 29 | return c; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /Ownable.sol: -------------------------------------------------------------------------------- 1 | pragma solidity ^0.4.11; 2 | 3 | /** 4 | * @title Ownable 5 | * @dev The Ownable contract has an owner address, and provides basic authorization control 6 | * functions, this simplifies the implementation of "user permissions". 7 | */ 8 | contract Ownable { 9 | address public owner; 10 | 11 | /** 12 | * @dev The Ownable constructor sets the original `owner` of the contract to the sender 13 | * account. 14 | */ 15 | function Ownable() { 16 | owner = msg.sender; 17 | } 18 | 19 | /** 20 | * @dev Throws if called by any account other than the owner. 21 | */ 22 | modifier onlyOwner() { 23 | require(msg.sender == owner); 24 | _; 25 | } 26 | 27 | /** 28 | * @dev Allows the current owner to transfer control of the contract to a newOwner. 29 | * @param newOwner The address to transfer ownership to. 30 | */ 31 | function transferOwnership(address newOwner) onlyOwner { 32 | require(newOwner != address(0)); 33 | owner = newOwner; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /BasicToken.sol: -------------------------------------------------------------------------------- 1 | pragma solidity ^0.4.11; 2 | 3 | import './ERC20Basic.sol'; 4 | import './SafeMath.sol'; 5 | 6 | /** 7 | * @title Basic token 8 | * @dev Basic version of StandardToken, with no allowances. 9 | */ 10 | contract BasicToken is ERC20Basic { 11 | using SafeMath for uint256; 12 | 13 | mapping(address => uint256) balances; 14 | 15 | /** 16 | * @dev transfer token for a specified address 17 | * @param _to The address to transfer to. 18 | * @param _value The amount to be transferred. 19 | */ 20 | function transfer(address _to, uint256 _value) returns (bool) { 21 | require(_to != address(0)); 22 | 23 | // SafeMath.sub will throw if there is not enough balance. 24 | balances[msg.sender] = balances[msg.sender].sub(_value); 25 | balances[_to] = balances[_to].add(_value); 26 | Transfer(msg.sender, _to, _value); 27 | return true; 28 | } 29 | 30 | /** 31 | * @dev Gets the balance of the specified address. 32 | * @param _owner The address to query the the balance of. 33 | * @return An uint256 representing the amount owned by the passed address. 34 | */ 35 | function balanceOf(address _owner) constant returns (uint256 balance) { 36 | return balances[_owner]; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # About 2 | 3 | Vevue is developing a future for protecting and monetizing the value of video experiences. Today’s video market, live or recorded, is distributed in multiple forms across various desktop and mobile platforms. 4 | Cross platform virality and rampant copyright infringement impose on the ability for content creators to retain control and benefit from their intellectual property. 5 | 6 | The blockchain and smart contracts are new means to organize this chaotic market. Vevue DAPP is a decentralized copyright tracking and video exchange based on Blockchain. Users exchange incentive based Vevue Requests thru the mobile app to earn Vevue Token. 7 | Pin any amount of Vevue Token to any location and attach a short message. Receive video content in return. 8 | 9 | Users can also use Vevue Token as utility token for decentralized video copyright exchange. 10 | Copyright information is stored on the Qtum blockchain. 11 | Content creators can retain or transfer their copyright using Vevue Copyright Wallet. 12 | 13 | >Official Website in English https://vevue.com 14 | 15 | # 关于 16 | 17 | Vevue是一款视频分享类社交APP。 18 | 19 | 和当前大多数视频APP以人为主的定位不同,我们是基于需求的一款应用。 20 | 21 | 使用者可以通过Vevue在任何位置发起视频拍摄悬赏,可以是国内的某个景点,可以是国外某个向往已久的海滩 22 | 也可以是极地极光、海上日出日落或者是一段街头艺术,用你喜欢的方式去定义拍摄类型,或者航拍,或者延时摄影,只要你喜欢。 23 | 你的这些请求会被Vevue统统打包好发送到Vevue地图上并推送给符合条件的拍摄爱好者,完成任务即可领取奖赏。 24 | 一切都是那么简单,视觉旅游如果只有眼睛参与那太遗憾了,全身心的参与才叫体验。 25 | 26 | Vevue采用区块链技术完整记录所有原创内容的版权以及版权流向,这一切繁重的后台工作,都由我们来完成,你们尽情享受科技带来的改变。 27 | 28 | 在保障原创者利益的同时,普通群众作为最大的消费者,在饱览优秀摄影作品的同时,我们为你们增加了一个新的纬度来观察这个世界。 29 | 30 | >中文版官网 https://cn.vevue.com 31 | 32 | # Buy Token 融资说明 33 | 34 | >English Entrance 35 | 36 | >中文版入口 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /StandardToken.sol: -------------------------------------------------------------------------------- 1 | pragma solidity ^0.4.11; 2 | 3 | import './BasicToken.sol'; 4 | import './ERC20.sol'; 5 | 6 | /** 7 | * @title Standard ERC20 token 8 | * 9 | * @dev Implementation of the basic standard token. 10 | * @dev https://github.com/ethereum/EIPs/issues/20 11 | * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol 12 | */ 13 | contract StandardToken is ERC20, BasicToken { 14 | mapping (address => mapping (address => uint256)) allowed; 15 | 16 | /** 17 | * @dev Transfer tokens from one address to another 18 | * @param _from address The address which you want to send tokens from 19 | * @param _to address The address which you want to transfer to 20 | * @param _value uint256 the amount of tokens to be transferred 21 | */ 22 | function transferFrom(address _from, address _to, uint256 _value) returns (bool) { 23 | require(_to != address(0)); 24 | 25 | var _allowance = allowed[_from][msg.sender]; 26 | 27 | // Check is not needed because sub(_allowance, _value) will already throw if this condition is not met 28 | // require (_value <= _allowance); 29 | 30 | balances[_from] = balances[_from].sub(_value); 31 | balances[_to] = balances[_to].add(_value); 32 | allowed[_from][msg.sender] = _allowance.sub(_value); 33 | Transfer(_from, _to, _value); 34 | return true; 35 | } 36 | 37 | /** 38 | * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. 39 | * @param _spender The address which will spend the funds. 40 | * @param _value The amount of tokens to be spent. 41 | */ 42 | function approve(address _spender, uint256 _value) returns (bool) { 43 | // To change the approve amount you first have to reduce the addresses` 44 | // allowance to zero by calling `approve(_spender, 0)` if it is not 45 | // already 0 to mitigate the race condition described here: 46 | // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 47 | require((_value == 0) || (allowed[msg.sender][_spender] == 0)); 48 | 49 | allowed[msg.sender][_spender] = _value; 50 | Approval(msg.sender, _spender, _value); 51 | return true; 52 | } 53 | 54 | /** 55 | * @dev Function to check the amount of tokens that an owner allowed to a spender. 56 | * @param _owner address The address which owns the funds. 57 | * @param _spender address The address which will spend the funds. 58 | * @return A uint256 specifying the amount of tokens still available for the spender. 59 | */ 60 | function allowance(address _owner, address _spender) constant returns (uint256 remaining) { 61 | return allowed[_owner][_spender]; 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /VevueToken.sol: -------------------------------------------------------------------------------- 1 | pragma solidity ^0.4.11; 2 | 3 | import './StandardToken.sol'; 4 | import './Ownable.sol'; 5 | 6 | contract VevueToken is StandardToken, Ownable { 7 | // Token configurations 8 | string public constant name = "Vevue Token"; 9 | string public constant symbol = "Vevue"; 10 | uint256 public constant nativeDecimals = 8; 11 | uint256 public constant decimals = 8; 12 | 13 | uint256 public constant _fundingStartBlock = 35000; 14 | uint256 public constant _fundingEndBlock = 90000; 15 | uint256 public constant _initialExchangeRate = 100; 16 | 17 | /// the founder address can set this to true to halt the crowdsale due to emergency 18 | bool public halted = false; 19 | 20 | /// @notice 40 million Vevue tokens for sale 21 | uint256 public constant saleAmount = 40 * (10**6) * (10**decimals); 22 | 23 | /// @notice 100 million Vevue tokens will ever be created 24 | uint256 public constant tokenTotalSupply = 100 * (10**6) * (10**decimals); 25 | 26 | // Crowdsale parameters 27 | uint256 public fundingStartBlock; 28 | uint256 public fundingEndBlock; 29 | uint256 public initialExchangeRate; 30 | 31 | // Events 32 | event Mint(uint256 supply, address indexed to, uint256 amount); 33 | event TokenPurchase(address indexed purchaser, address indexed beneficiary, uint256 value, uint256 amount); 34 | 35 | // Modifiers 36 | modifier validAddress(address _address) { 37 | require(_address != 0x0); 38 | _; 39 | } 40 | 41 | modifier validPurchase() { 42 | require(block.number >= fundingStartBlock); 43 | require(block.number <= fundingEndBlock); 44 | require(msg.value > 0); 45 | _; 46 | } 47 | 48 | modifier validUnHalt(){ 49 | require(halted == false); 50 | _; 51 | } 52 | 53 | /// @notice Creates new Vevue Token contract 54 | function VevueToken() { 55 | require(_fundingStartBlock >= block.number); 56 | require(_fundingEndBlock >= _fundingStartBlock); 57 | require(_initialExchangeRate > 0); 58 | assert(nativeDecimals >= decimals); 59 | 60 | fundingStartBlock = _fundingStartBlock; 61 | fundingEndBlock = _fundingEndBlock; 62 | initialExchangeRate = _initialExchangeRate; 63 | } 64 | 65 | /// @notice Fallback function to purchase tokens 66 | function() external payable { 67 | buyTokens(msg.sender); 68 | } 69 | 70 | /// @notice Allows buying tokens from different address than msg.sender 71 | /// @param _beneficiary Address that will contain the purchased tokens 72 | function buyTokens(address _beneficiary) 73 | payable 74 | validAddress(_beneficiary) 75 | validPurchase 76 | validUnHalt 77 | { 78 | uint256 tokenAmount = getTokenExchangeAmount(msg.value, initialExchangeRate, nativeDecimals, decimals); 79 | uint256 checkedSupply = totalSupply.add(tokenAmount); 80 | 81 | // Ensure new token increment does not exceed the sale amount 82 | assert(checkedSupply <= saleAmount); 83 | 84 | mint(_beneficiary, tokenAmount); 85 | TokenPurchase(msg.sender, _beneficiary, msg.value, tokenAmount); 86 | 87 | forwardFunds(); 88 | } 89 | 90 | /// @notice Allows contract owner to mint tokens at any time 91 | /// @param _amount Amount of tokens to mint in lowest denomination of VEVUE 92 | function mintReservedTokens(uint256 _amount) onlyOwner { 93 | uint256 checkedSupply = totalSupply.add(_amount); 94 | require(checkedSupply <= tokenTotalSupply); 95 | 96 | mint(owner, _amount); 97 | } 98 | 99 | /// @notice Shows the amount of Vevue the user will receive for amount of exchanged chong 100 | /// @param _Amount Exchanged chong amount to convert 101 | /// @param _exchangeRate Number of Vevue per exchange token 102 | /// @param _nativeDecimals Number of decimals of the token being exchange for Vevue 103 | /// @param _decimals Number of decimals of Vevue token 104 | /// @return The amount of Vevue that will be received 105 | function getTokenExchangeAmount( 106 | uint256 _Amount, 107 | uint256 _exchangeRate, 108 | uint256 _nativeDecimals, 109 | uint256 _decimals) 110 | constant 111 | returns(uint256) 112 | { 113 | require(_Amount > 0); 114 | 115 | uint256 differenceFactor = (10**_nativeDecimals) / (10**_decimals); 116 | return _Amount.mul(_exchangeRate).div(differenceFactor); 117 | } 118 | 119 | /// @dev Sends Qtum to the contract owner 120 | function forwardFunds() internal { 121 | owner.transfer(msg.value); 122 | } 123 | 124 | /// @dev Mints new tokens 125 | /// @param _to Address to mint the tokens to 126 | /// @param _amount Amount of tokens that will be minted 127 | /// @return Boolean to signify successful minting 128 | function mint(address _to, uint256 _amount) internal returns (bool) { 129 | totalSupply += _amount; 130 | balances[_to] = balances[_to].add(_amount); 131 | Mint(totalSupply, _to, _amount); 132 | return true; 133 | } 134 | 135 | /// Emergency Stop ICO 136 | function halt() onlyOwner { 137 | halted = true; 138 | } 139 | 140 | function unhalt() onlyOwner { 141 | halted = false; 142 | } 143 | } 144 | -------------------------------------------------------------------------------- /interface-abi.txt: -------------------------------------------------------------------------------- 1 | [{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function","stateMutability":"nonpayable"},{"constant":true,"inputs":[],"name":"_fundingStartBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function","stateMutability":"nonpayable"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":true,"inputs":[],"name":"_initialExchangeRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":false,"inputs":[],"name":"halt","outputs":[],"payable":false,"type":"function","stateMutability":"nonpayable"},{"constant":true,"inputs":[],"name":"initialExchangeRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":true,"inputs":[],"name":"nativeDecimals","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"}],"name":"mintReservedTokens","outputs":[],"payable":false,"type":"function","stateMutability":"nonpayable"},{"constant":true,"inputs":[],"name":"saleAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":true,"inputs":[],"name":"_fundingEndBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":true,"inputs":[],"name":"fundingEndBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":true,"inputs":[{"name":"_Amount","type":"uint256"},{"name":"_exchangeRate","type":"uint256"},{"name":"_nativeDecimals","type":"uint256"},{"name":"_decimals","type":"uint256"}],"name":"getTokenExchangeAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function","stateMutability":"nonpayable"},{"constant":true,"inputs":[],"name":"halted","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":false,"inputs":[],"name":"unhalt","outputs":[],"payable":false,"type":"function","stateMutability":"nonpayable"},{"constant":true,"inputs":[],"name":"fundingStartBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":false,"inputs":[{"name":"_beneficiary","type":"address"}],"name":"buyTokens","outputs":[],"payable":true,"type":"function","stateMutability":"payable"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"type":"function","stateMutability":"nonpayable"},{"constant":true,"inputs":[],"name":"tokenTotalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function","stateMutability":"view"},{"inputs":[],"payable":false,"type":"constructor","stateMutability":"nonpayable"},{"payable":true,"type":"fallback","stateMutability":"payable"},{"anonymous":false,"inputs":[{"indexed":false,"name":"supply","type":"uint256"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"purchaser","type":"address"},{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"TokenPurchase","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"},{"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"}] 2 | -------------------------------------------------------------------------------- /README.CN.md: -------------------------------------------------------------------------------- 1 | # ICO 计划 2 | 3 | **合约地址
9d3d4cc1986d81f9109f2b091b7732e7d9bcf63b** 4 | 5 | **接口ABI
https://github.com/vevue/ICOcontracts/blob/master/interface-abi.txt** 6 | 7 | Vevue于2017年10月基于Qtum量子链网络发布用于众筹的合约。 8 | 总发行代币1亿枚,其中6000万代币用于众筹。 9 | 由于我们在预发行阶段完成了2000万代币的发放,本次众筹总额 4000万 代币。 10 | >Vevue代币分发方案 https://www.vevue.com/coins-distribution/ 11 | 12 | ##### 兑换比例: 13 | 1 Qtum = 100 Vevue Token 14 | 15 | ##### 众筹时间: 16 | 起始于:区块高度 **35000** 17 | 结束于:区块高度 **90000** 18 | >约2.2分钟产生1个区块 19 | 20 | # 代币购买说明 21 | ### 1. 准备Qtum钱包 22 | >本下载仅针对Windows及OSX用户 23 | >Linux及其他官方发行版详见 https://github.com/qtumproject/qtum/releases 24 | 25 | ##### Windows 26 |
  • qtum-0.14.3-win64.zip 27 | 28 |
  • qtum-0.14.3-win32.zip 29 | 30 | >解压后进入bin目录,其中qtum-qt即为钱包。 31 | ![](media/12.jpg) 32 | 33 | ##### OSX 34 |
  • qtum-0.14.3-osx-unsigned.dmg 35 | 36 | ### 2. 启动钱包并等待区块数据同步完成 37 | ![](media/13.jpg) 38 | 39 | ### 3. ICO合约地址验证 40 | 在左侧边栏依次选择:Smart Contract -> Call 41 | 合约地址填写: 42 | 43 | ``` 44 | 9d3d4cc1986d81f9109f2b091b7732e7d9bcf63b 45 | ``` 46 | 47 | Interface(ABI)填写: 48 | 49 | ``` 50 | [{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function","stateMutability":"nonpayable"},{"constant":true,"inputs":[],"name":"_fundingStartBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function","stateMutability":"nonpayable"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":true,"inputs":[],"name":"_initialExchangeRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":false,"inputs":[],"name":"halt","outputs":[],"payable":false,"type":"function","stateMutability":"nonpayable"},{"constant":true,"inputs":[],"name":"initialExchangeRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":true,"inputs":[],"name":"nativeDecimals","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"}],"name":"mintReservedTokens","outputs":[],"payable":false,"type":"function","stateMutability":"nonpayable"},{"constant":true,"inputs":[],"name":"saleAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":true,"inputs":[],"name":"_fundingEndBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":true,"inputs":[],"name":"fundingEndBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":true,"inputs":[{"name":"_Amount","type":"uint256"},{"name":"_exchangeRate","type":"uint256"},{"name":"_nativeDecimals","type":"uint256"},{"name":"_decimals","type":"uint256"}],"name":"getTokenExchangeAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function","stateMutability":"nonpayable"},{"constant":true,"inputs":[],"name":"halted","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":false,"inputs":[],"name":"unhalt","outputs":[],"payable":false,"type":"function","stateMutability":"nonpayable"},{"constant":true,"inputs":[],"name":"fundingStartBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":false,"inputs":[{"name":"_beneficiary","type":"address"}],"name":"buyTokens","outputs":[],"payable":true,"type":"function","stateMutability":"payable"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"type":"function","stateMutability":"nonpayable"},{"constant":true,"inputs":[],"name":"tokenTotalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function","stateMutability":"view"},{"inputs":[],"payable":false,"type":"constructor","stateMutability":"nonpayable"},{"payable":true,"type":"fallback","stateMutability":"payable"},{"anonymous":false,"inputs":[{"indexed":false,"name":"supply","type":"uint256"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"purchaser","type":"address"},{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"TokenPurchase","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"},{"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"}] 51 | 52 | ``` 53 | 填写完成即可看到Function中出现的函数列表,下拉并选择name(06fdde03),之后点击最下面的调用智能合约按钮。 54 | 55 | ![](media/1.jpg) 56 | 57 | 在进入的新页面看到Result结果中返回的值为**Vevue Token**即为操作正确。 58 | 如果显示为空说明调用的填写有问题,请重复并检查以上步骤或联系我们。 59 | 60 | ![](media/2.jpg) 61 | 62 | 63 | ### 4. 获取你的钱包地址 64 | 65 | 在左侧边栏选择Receive,之后点击页面中的**请求付款**,即可得到你的钱包地址,复制它。 66 | >地址格式样例:QWYMhtPhwDbV3L8cjrBvLHkjkf9mNnEfcU 67 | 68 | ![](media/3.jpg) 69 | 70 | 点击菜单栏的**Help**并选择**Debug windows**。 71 | 72 | ![](media/4.jpg) 73 | 74 | 选择**控制台**并在下方输入以下代码: 75 | 76 | ``` 77 | gethexaddress 刚刚得到的钱包地址 78 | ``` 79 | >输入格式样例: 80 | > 81 | >``` 82 | >gethexaddress QWYMhtPhwDbV3L8cjrBvLHkjkf9mNnEfcU 83 | >``` 84 | 85 | ![](media/5.jpg) 86 | 87 | 输入回车即可得到你的16进制钱包地址(一会购买代币时用得上) 88 | >16进制钱包地址格式样例:6d019f28780a3eeca51a150c6b461aa1c01b4ae5 89 | 90 | ![](media/6.jpg) 91 | 92 | ### 5. 购买代币 93 | 94 | 1. 在左侧边栏依次选择:Smart Contract -> SendTo。 95 | 2. 填写和步骤3中一样的**合约地址**和**Interface(ABI)**。 96 | 3. 之后在Function中选择**buyTokens(ec8ac4d8)**。 97 | 4. 在**address _···**中填写步骤4中得到的**16进制钱包地址**。
    98 | ***(如:6d019f28780a3eeca51a150c6b461aa1c01b4ae5)*** 99 | 5. 在**可选项**中的**数量**中填写要支出的Qtum代币数量。
    100 | ***(如:50)*** 101 | 102 | #####请**再次检查**所填数据,之后点击**Send To Contract**发送代币。 103 | 104 | ![](media/7.jpg) 105 | 106 | 交易细节为 107 | 108 | ![](media/8.jpg) 109 | 110 | ### 6. 查看代币购买情况 111 | 112 | 点击左侧边栏**Transactions**即可看到刚刚的提交请求的状态为**等待确认**的问号。 113 | 114 | ![](media/9.jpg) 115 | 116 | 等待2~10分钟不等,待请求状态变成**确认中**说明代币发送成功。 117 | 118 | ![10](media/10.jpg) 119 | 120 | 因为本文编辑时当前区块高度尚未达到交易启动高度(35000)故提交的代币被合约退回。 121 | 122 | ##### 查看充值情况 123 | 1. 点击左侧边栏的**Smart Contract**,选择**Call**,合约地址和Interface(ABI)和步骤3中填写一致。 124 | 2. Function选择balanceOf(70a08231) 125 | 3. address_ ···中填写步骤4中得到的**16进制钱包地址** 126 |
    (***如:6d019f28780a3eeca51a150c6b461aa1c01b4ae5***) 127 | 128 | ##### 在Result返回结果中即可看到你的余额。 129 | 130 | ![](media/11.jpg) 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | -------------------------------------------------------------------------------- /README.EN.md: -------------------------------------------------------------------------------- 1 | # ICO PLAN 2 | 3 | **Smart Contract Address
    9d3d4cc1986d81f9109f2b091b7732e7d9bcf63b** 4 | 5 | **Interface ABI
    https://github.com/vevue/ICOcontracts/blob/master/interface-abi.txt** 6 | 7 | Vevue create smart contract through Qtum main network on October 2017. 8 | We released 100 millions totally and 40 millions of all for ICO. 9 | 10 | >VEVUE TOKEN DISTRIBUTION https://www.vevue.com/coins-distribution/ 11 | 12 | ##### Exchange Rate: 13 | 1 Qtum = 100 Vevue Token 14 | 15 | ##### ICO Duration: 16 | Start Block: **35000** 17 | End Block **90000** 18 | >About 2.2 minutes birth 1 Block 19 | 20 | # Buy Token 21 | ### 1. Prepare Qtum Wallet 22 | >Linux and more release https://github.com/qtumproject/qtum/releases 23 | 24 | ##### Windows 25 |
  • qtum-0.14.3-win64.zip 26 | 27 |
  • qtum-0.14.3-win32.zip 28 | 29 | > Unzip and enter "bin" folder, launch qtum-qt to run the wallet。 30 | ![](media/12.jpg) 31 | 32 | ##### OSX 33 |
  • qtum-0.14.3-osx-unsigned.dmg 34 | 35 | ### 2. Launch Wallet and start Blockchain Synchronization 36 | ![](media/13.jpg) 37 | 38 | ### 3. Check ICO Smart Contract 39 | Select **Smart Contract -> Call** on the left side 40 | Input in Contract Address: 41 | 42 | ``` 43 | 9d3d4cc1986d81f9109f2b091b7732e7d9bcf63b 44 | ``` 45 | 46 | Input in Interface(ABI): 47 | 48 | ``` 49 | [{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function","stateMutability":"nonpayable"},{"constant":true,"inputs":[],"name":"_fundingStartBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function","stateMutability":"nonpayable"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":true,"inputs":[],"name":"_initialExchangeRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":false,"inputs":[],"name":"halt","outputs":[],"payable":false,"type":"function","stateMutability":"nonpayable"},{"constant":true,"inputs":[],"name":"initialExchangeRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":true,"inputs":[],"name":"nativeDecimals","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"}],"name":"mintReservedTokens","outputs":[],"payable":false,"type":"function","stateMutability":"nonpayable"},{"constant":true,"inputs":[],"name":"saleAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":true,"inputs":[],"name":"_fundingEndBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":true,"inputs":[],"name":"fundingEndBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":true,"inputs":[{"name":"_Amount","type":"uint256"},{"name":"_exchangeRate","type":"uint256"},{"name":"_nativeDecimals","type":"uint256"},{"name":"_decimals","type":"uint256"}],"name":"getTokenExchangeAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function","stateMutability":"nonpayable"},{"constant":true,"inputs":[],"name":"halted","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":false,"inputs":[],"name":"unhalt","outputs":[],"payable":false,"type":"function","stateMutability":"nonpayable"},{"constant":true,"inputs":[],"name":"fundingStartBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"type":"function","stateMutability":"view"},{"constant":false,"inputs":[{"name":"_beneficiary","type":"address"}],"name":"buyTokens","outputs":[],"payable":true,"type":"function","stateMutability":"payable"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"type":"function","stateMutability":"nonpayable"},{"constant":true,"inputs":[],"name":"tokenTotalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function","stateMutability":"view"},{"inputs":[],"payable":false,"type":"constructor","stateMutability":"nonpayable"},{"payable":true,"type":"fallback","stateMutability":"payable"},{"anonymous":false,"inputs":[{"indexed":false,"name":"supply","type":"uint256"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"purchaser","type":"address"},{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"TokenPurchase","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"},{"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"}] 50 | 51 | ``` 52 | You could see the functions list in Function part, choose name(06fdde03),and click Call Contract button。 53 | 54 | ![](media/1.jpg) 55 | 56 | If you see the world **Vevue Token** display in the Result part, Congratulations! You success! 57 | If it says nothing,please check step and repeat or Contact us。 58 | 59 | ![](media/2.jpg) 60 | 61 | 62 | ### 4. Get your Wallet Address 63 | 64 | Select **Receive** on the left side,and click the **Request payment** and then you could get your wallet address, copy it。 65 | >e.g. QWYMhtPhwDbV3L8cjrBvLHkjkf9mNnEfcU 66 | 67 | ![](media/3.jpg) 68 | 69 | Click **Help** on Menu and click **Debug windows** next。 70 | 71 | ![](media/4.jpg) 72 | 73 | Select **Console** and run the code under it: 74 | 75 | ``` 76 | gethexaddress the address you just get 77 | ``` 78 | >e.g. 79 | > 80 | >``` 81 | >gethexaddress QWYMhtPhwDbV3L8cjrBvLHkjkf9mNnEfcU 82 | >``` 83 | 84 | ![](media/5.jpg) 85 | 86 | Press Enter and then you could get your Hex Wallet Address 87 | >Hex Wallet Address e.g. 6d019f28780a3eeca51a150c6b461aa1c01b4ae5 88 | 89 | ![](media/6.jpg) 90 | 91 | ### 5. Buy Token 92 | 93 | 1. Select **Smart Contract -> SendTo** on the left side. 94 | 2. Input the **Contract Address** and **Interface(ABI)** just the same as Step 3。 95 | 3. Select **buyTokens(ec8ac4d8)** in Function。 96 | 4. Input the Hex Wallet Address from Step 4 in **address _···** 97 | ***(e.g. 6d019f28780a3eeca51a150c6b461aa1c01b4ae5)*** 98 | 5. Input the number you want to buy through Qtum in **Optional** **Amount**
    99 | ***(e.g. 50)*** 100 | 101 | ##### Please Double Check about your input,and then click **Send To Contract** for sending。 102 | 103 | ![](media/7.jpg) 104 | 105 | Details 106 | 107 | ![](media/8.jpg) 108 | 109 | ### 6. Check Token Status 110 | 111 | Choose **Transactions** on the left side and then you could see the unconfirm's item. 112 | 113 | ![](media/9.jpg) 114 | 115 | Waiting 2~10 minutes still the status turns to **Confirmed**means sending success. 116 | 117 | ![10](media/10.jpg) 118 | 119 | ##### Check Recharge Status 120 | 1. Choose **Smart Contract** on the left side and choose **Call**, Input in Contract Address and Interface(ABI) just the same as Step 3. 121 | 2. Choose balanceOf(70a08231) in Functions 122 | 3. Input the Hex Wallet Address in **address_ ···** 123 |
    (***e.g.6d019f28780a3eeca51a150c6b461aa1c01b4ae5*** 124 | 125 | ##### You could see the Vevue Token in Result。 126 | 127 | ![](media/11.jpg) 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | --------------------------------------------------------------------------------