defi质押挖矿dapp系统智能合约编写模式定制方案详情

简介: defi质押挖矿系统智能合约编写定制方案详情

区块链 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);

}
相关文章
|
网络协议 网络安全 数据中心
|
存储 Windows
(13) Qt事件系统(two)
文章详细介绍了Qt事件系统,包括事件分发、自定义事件、事件传播机制、事件过滤以及事件与信号的区别。
551 3
(13) Qt事件系统(two)
|
传感器 人工智能 自动驾驶
人工智能在自动驾驶汽车中的应用
【10月更文挑战第31天】人工智能在自动驾驶汽车中的应用是科技进步与汽车产业转型的产物。通过计算机视觉、雷达、LiDAR和超声波传感器等技术,自动驾驶汽车实现了精准感知;借助复杂AI算法,实现决策与控制、路径规划与导航。尽管面临技术成熟度、法规与伦理、公众接受度等挑战,但未来自动驾驶汽车有望在全球范围内实现商业化普及,彻底改变出行方式,提高道路安全,减少交通拥堵,促进绿色出行。
|
IDE Linux 开发工具
在Linux中,如何查看当前工作目录?
在Linux中,如何查看当前工作目录?
|
数据可视化 Ubuntu Linux
8-14|如何查看linux目录下文件大小
8-14|如何查看linux目录下文件大小
|
缓存 NoSQL 关系型数据库
实现高并发,高可用,分布式支付系统
实现高并发,高可用,分布式支付系统
1115 1
实现高并发,高可用,分布式支付系统
|
JavaScript 前端开发 开发者
通用feeds组件封装技巧
前端交互中,无限滚动feeds流是最常见的交互形式,常见的feeds功能上基本都包括兜底、接口请求、报错提示、刷新、feeds卡片排列规则等。用户滑动页面不断加载feeds数据, DOM节点不断累加创建,因为DOM节点过多,导致页面数据更新时卡顿问题, 一般会通过虚拟滚动减少页面DOM数量来解决。这些必要基础能力在每个feeds流需求中都存在,所以我们决定将feeds这一场景抽离成公共组件,提高开发效率。
486 0
通用feeds组件封装技巧
|
算法 数据挖掘 Python
一文速学-最小二乘法曲线拟合算法详解+项目代码
一文速学-最小二乘法曲线拟合算法详解+项目代码
1478 0
一文速学-最小二乘法曲线拟合算法详解+项目代码
|
网络协议
如何简单、快速的计算IP子网
如何简单、快速的计算IP子网
766 0
如何简单、快速的计算IP子网