DAPP质押挖矿系统丨DAPP质押挖矿系统开发(成熟案例)丨DAPP质押挖矿开发源码逻辑

简介:   DAPP被称为分散式应用程序,DAPP是基于区块链技术的应用程序。dApp在不同计算机的P2P网络上运行,而不是在一台计算机上运行。dApps自P2P网络开始以来就已经存在。它实际上是一种软件程序,旨在以不受任何单个实体控制的方式在Internet上运行。分散式应用程序上的所有数据都存储在分布式分类帐中。

  DAPP被称为分散式应用程序,DAPP是基于区块链技术的应用程序。dApp在不同计算机的P2P网络上运行,而不是在一台计算机上运行。dApps自P2P网络开始以来就已经存在。它实际上是一种软件程序,旨在以不受任何单个实体控制的方式在Internet上运行。分散式应用程序上的所有数据都存储在分布式分类帐中。

  基于区块链的智能合约不仅能发挥智能合约低成本高效率的优势,而且可以避免恶意行为对合约的正常执行的干扰。将智能合约以代码化的形式写入区块链中,利用区块链技术实现数据存储、读取及执行过程可追踪透明化且不可篡改。此外利用区块链的共识算法构造的状态机系统能使智能合约高效的运行。

  ERC20约定了一个代币合约需要实现的接口:

  //接口标准

  contract ERC20{

  function totalSupply()constant returns(uint totalSupply);//总发行量

  function balanceOf(address _owner)constant returns(uint balance);

  //代币分发(注意,这个只有合约的Creator可以调用)

  function transfer(address _to,uint _value)returns(bool success);

  //这里是拥有者和拥有者之间的代币转移

  function transferFrom(address _from,address _to,uint _value)returns(bool success);

  function approve(address _spender,uint _value)returns(bool success);

  function allowance(address _owner,address _spender)constant returns(uint remaining);

  event Transfer(address indexed _from,address indexed _to,uint _value);

  event Approval(address indexed _owner,address indexed _spender,uint _value);

  //Token信息

  string public constant name="4FunCoin";

  string public constant symbol="4FC";

  uint8 public constant decimals=18;//token的精度,大部分都是18

  }

  上面的代码是一个标准的ERC20标准的代码,规范给出了框架,我们只需要实现相应的函数就好了,这里给出函数说明。

  接口函数说明

  函数的形参是局部有效,所以前面使用下划线,与其他的变量区别开来.如_owner.

  totalSupply()函数返回这个Token的总发行量;

  balanceOf()查询某个地址的Token数量,结合mapping实现

  transfer()owner使用这个进行发送代币

  transferFrom()token的所有者用来发送token

  allowance()控制代币的交易,如可交易账号及资产,控制Token的流通

  approve()允许用户可花费的代币数;

  事件函数说明

  这里两个Event是重点,事件,可以被前端js代码捕获到并进行相应的处理:

  event Transfer()Token的转账事件

  event Approval()允许事件

  ERC20代币合约实现

  理解了上面的函数,下面的代码,就实现了Token合约的函数填充

  pragma solidity^0.4.16;

  interface tokenRecipient{function receiveApproval(address _from,uint256 _value,address _token,bytes _extraData)public;}//token的接受者这里声明接口,将会在我们的ABI里

  contract TokenERC20{

  /Token的属性说明*/

  string public name=4FunCoin;

  string public symbol=4FC;

  uint8 public decimals=18;//18是建议的默认值

  uint256 public totalSupply;//发行量

  //建立映射地址对应了uint'便是他的余额

  mapping(address=>uint256)public balanceOf;

  //地址对应余额

  mapping(address=>mapping(address=>uint256))public allowance;

  //事件,用来通知客户端Token交易发生

  event Transfer(address indexed from,address indexed to,uint256 value);

  //事件,用来通知客户端代币被消耗

  event Burn(address indexed from,uint256 value);

  //这里是构造函数,实例创建时候执行

  function TokenERC20(uint256 initialSupply,string tokenName,string tokenSymbol)public{

  totalSupply=initialSupply10*uint256(decimals);//这里确定了总发行量

  balanceOf[msg.sender]=totalSupply;//这里就比较重要,这里相当于实现了,把token全部给合约的Creator

  name=tokenName;

  symbol=tokenSymbol;

  }

  //token的发送函数

  function _transfer(address _from,address _to,uint _value)internal{

  require(_to!=0x0);//不是零地址

  require(balanceOf[_from]>=_value);//有足够的余额来发送

  require(balanceOf[_to]+_value>balanceOf[_to]);

  uint previousBalances=balanceOf[_from]+balanceOf[_to];

  balanceOf[_from]-=_value;//

  balanceOf[_to]+=_value;

  Transfer(_from,_to,_value);//这里触发了转账的事件,见上event

  assert(balanceOf[_from]+balanceOf[_to]==previousBalances);//判断总额是否一致,避免过程出错

  }

  function transfer(address _to,uint256 _value)public{

  _transfer(msg.sender,_to,_value);//这里已经储存了合约创建者的信息,这个函数是只能被合约创建者使用

  }

  function transferFrom(address _from,address _to,uint256 _value)public returns(bool success){

  require(_value<=allowance_from);//这句很重要,地址对应的合约地址(也就是token余额)

  allowance_from-=_value;

  _transfer(_from,_to,_value);

  return true;

  }

  function approve(address _spender,uint256 _value)public

  returns(bool success){

  allowancemsg.sender=_value;//这里是可花费总量

  return true;

  }

  function approveAndCall(address _spender,uint256 _value,bytes _extraData)public returns(bool success){

  tokenRecipient spender=tokenRecipient(_spender);

  if(approve(_spender,_value)){

  spender.receiveApproval(msg.sender,_value,this,_extraData);

  return true;

  }

  }

  //正如其名,这个是烧币(SB)的..,用于把创建者的token烧掉

  function burn(uint256 _value)public returns(bool success){

  require(balanceOf[msg.sender]>=_value);//必须要有这么多

  balanceOf[msg.sender]-=_value;

  totalSupply-=_value;

  Burn(msg.sender,_value);

  return true;

  }

  //这个是用户销毁token.....

  function burnFrom(address _from,uint256 _value)public returns(bool success){

  require(balanceOf[_from]>=_value);//一样要有这么多

  require(_value<=allowance_from);//

  balanceOf[_from]-=_value;

  allowance_from-=_value;

  totalSupply-=_value;

  Burn(_from,_value);

  return true;

  }

  }

  上面的代码阅读难度不大,也写了大多处的注释,这里简单介绍几个要点:

  构造函数

  //这里是构造函数,实例创建时候执行

  function TokenERC20(uint256 initialSupply,string tokenName,string tokenSymbol)public{

  totalSupply=initialSupply10*uint256(decimals);//这里确定了总发行量

  balanceOf[msg.sender]=totalSupply;//这里就比较重要,这里相当于实现了,把token全部给合约的Creator

  name=tokenName;

  symbol=tokenSymbol;

  }

  在Solidity里面,Contract我们可以直接理解成一个Class吧,如C++一样,这里面也存在一个构造函数而且他们的功能也是近乎相同,在合约创建的时候执行一次.(没错,合约整个生命周期里只能执行这样一次),所以他的作用就是实现合约信息的初始化,一旦数据写入区块数据,将是无法更改的了(永固性).

  构造函数的是不能有返回值的(有也无法接受),但是可以带参数,像是此处代码,把发行量,token的名称和token的符号作为参数留出.在合约初始化时候我们便可以自行定义.

  函数体中可见,我们对货币总量,名称和符号进行赋值,这样,这些值就永远的记录在了我们的合约的区块数据中了

  映射(mapping)

  //建立映射地址对应了uint'便是他的余额

  mapping(address=>uint256)public balanceOf;

  //地址对应余额

  mapping(address=>mapping(address=>uint256))public allowance;

相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
相关文章
|
安全 区块链 数据安全/隐私保护
DeFi流行性挖矿系统开发 | 质押模式挖矿软件平台源码案例
DeFi流行性挖矿系统开发 | 质押模式挖矿软件平台源码案例
|
安全 区块链 数据安全/隐私保护
LP流动性质押挖矿开发模式丨dapp流动性挖矿系统开发源码现成
什么是流动性mining?流动性mining主要是通过提供通证资产进而获取收益。简单来说就是,存入某些通证资产便可对其进行mining。存入某些通证资产便可对其进行mining。之所以会被称为mining也是因为保留了BTCmining的行业说法。流动性mining是一种有助于去中心化通证流通的途径,LP(流动性提供者)通过向流动capital池提供流动性/注入capital,
|
算法 区块链
Defi质押挖矿系统开发源码二开示例
开发一个DeFi质押挖矿系统需要一定的技术知识和经验,如果您有一定的技术基础和开发经验,可以考虑对开源代码进行二次开发。以下是一些可用于DeFi质押挖矿系统二次开发的开源代码:
|
存储 区块链
DAPP/LP/DEFI智能合约流动性质押挖矿系统开发(详细及方案)丨源码案例
智能合约事实上是由计算机代码构成的一段程序,其缔结过程是:第一步,参与缔约的双方或多方用户商定后将共同合意制定成一份智能合约;
|
区块链
dapp质押挖矿系统开发设计概述
DApp(去中心化应用)质押挖矿系统是基于区块链技术构建的一种去中心化应用,它结合了质押和挖矿的概念,让用户可以通过质押代币来参与挖矿活动并获得相应的奖励。
|
存储 前端开发 JavaScript
dapp/defi智能合约流动性LP质押挖矿系统开发(开发源码案例)丨成熟技术
Dapp:代表去中心化应用程序。它们是在去中心化网络或区块链上运行后端代码(主要用Solidity编写的智能合约)的应用程序。可以使用React、Vue或Angular等前端框架构建Dapp。
|
存储 算法 安全
dapp/lp/nft/defi质押挖矿开发运营版丨lp/nft/defi/dapp质押挖矿系统开发(逻辑及详情)丨质押挖矿成熟源码案例部署
SYSTEM_CONTRACT_DPOS_STAKE: 由于stake合约地址是由合约名通过sha256计算后base58编码得到的,为固定值;但base58的值可读、可写不便,容易配置出错,因此,对于stake合约的地址配置为合约名;链启动后可以通过该命令查询stake合约地址
|
5G 区块链 vr&ar
DAPP智能合约流动性质押挖矿分红开发案例版丨DAPP智能合约流动性质押挖矿分红系统开发(开发案例及源码)
The metauniverse is an immersive digital world created by the combination of virtual reality,augmented reality and the Internet.The connotation and key technologies of the metauniverse require further breaking the space-time limit(5G and the Internet of Things),real immersion(VR),and value transmi
|
JSON 区块链 数据格式
dapp互助公排质押挖矿开发详情版丨dapp互助公排质押挖矿系统开发(方案及功能)丨dapp互助公排质押挖矿源码平台
 智能合约是运行在区块链公链上的一种代码,该代码由Solidity编写,并通过区块链的智能合约虚拟机来执行,以达到对区块链编程的目标。可以将区块链公联理解为操作系统,Solidity是编写该操作系统应用程序的编程语言,智能合约虚拟机则是编程语言编译之后的代码运行环境。