├── .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 |