区块链 1.0
即是基于区块链技术初始应用的以比特币为代表的数字货币,其主要特点包括全网共享账本、源代码开源、以区块为单位的链状数据结构等。
区块链 2.0
以区块链技术为基础的智能合约。
区块链 3.0
代表是EOS。
智能合约,Smart Contract,是一种旨在以信息化方式传播、验证或执行合同的计算机协议。
智能合约是一套以数字形式定义的承诺,承诺控制着数字资产并包含了合约参与者约定的权利和义务,由计算机系统自动执行。
智能合约程序不只是一个可以自动执行的计算机程序,它本身就是一个系统参与者,对接收到的信息进行回应,可以接收和储存价值,也可以向外发送信息和价值。
这个程序就像一个可以被信任的人,可以临时保管资产,总是按照事先的规则执行操作。
简单的来说就是,你可以提前规定好合约的内容,当在满足触发合约条件的时候,程序就会自动执行合约内容。
通过编写智能合约,执行过程中涉及的实体不再需要依赖第三方去监管和兑现各方的承诺,而是依赖于合约代码的自动执行,只要保证合约执行环境可信,就可以实现各方承诺的正确履行。
1.2 质押函数pledgeToken
function pledgeToken() public payable{
require(address(msg.sender) == address(tx.origin), "no contract");
require(_isDIS, "is disable");
require(_leftMiningAmount>0, "less token");
require(msg.value>=_minAmount, "less token");
require(_totalPledegAmount.add(msg.value)<=_maxPledgeAmount, "more token");
require(block.timestamp>=_startTime&&block.timestamp<=_endTime, "is disable");
if(_orders[msg.sender].isExist==false){
keys.push(KeyFlag(msg.sender,true));
size++;
createOrder(msg.value,keys.length.sub(1));
}else{
PledgeOrder storage order=_orders[msg.sender];
order.token=order.token.add(msg.value);
keys[order.index].isExist=true;
}
_totalPledegAmount=_totalPledegAmount.add(msg.value);
}
功能说明:
明显的,该函数具有接收底层币功能(payable);
质押地址必须是账号地址,不能是合约地址;
需要合约质押功能已经开始,且在活动限定时间内;
剩余额度大于0;
进行质押的底层币额度不能少于最小值,质押后也不能超过限定的最大质押额度;
如果该用户之前没有质押过,则建立档案(createOrder),否则仅修改档案;
1.3 收益分配函数profit
function profit() public onlyProfitor{
require(_leftMiningAmount>0, "less token");
require(_totalPledegAmount>0, "no pledge");
uint256 preToken=_maxPreMiningAmount;
if(_leftMiningAmount<_maxPreMiningAmount){
preToken=_leftMiningAmount;
}
for(uint i = 0; i < keys.length; i++) {
if(keys[i].isExist==true){
PledgeOrder storage order=_orders[keys[i].key];
order.profitToken=order.profitToken.add(order.token.mul(preToken).div(_totalPledegAmount));
}
}
_leftMiningAmount=_leftMiningAmount.sub(preToken);
}