前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于币安链智能合约模式系统开发解析

关于币安链智能合约模式系统开发解析

原创
作者头像
l8l259l3365
发布2022-08-15 09:53:48
4370
发布2022-08-15 09:53:48
举报
文章被收录于专栏:用户9880750的专栏

  以太坊是一个全球性的、去中心化的金融和新型应用程序平台。在以太坊,我们可以通过智能合约代码来控制资产,并建立世界上任何地方皆可访问的应用程序。今天我们自己动手来写一段简单的智能合约代码,探索一下智能合约的奥秘。

  【智能合约】

  智能合约(英语:Smart contract)是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。

  合约代码如下,不做任何修改:

  pragma solidity^0.4.16;

  interface tokenRecipient{function receiveApproval(address _from,uint256 _value,address _token,bytes _extraData)public;}

  contract TokenERC20{

  string public name;

  string public symbol;

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

  uint256 public totalSupply;

  mapping(address=>uint256)public balanceOf;//

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

  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=initialSupply*10**uint256(decimals);

  balanceOf[msg.sender]=totalSupply;

  name=tokenName;

  symbol=tokenSymbol;

  }

  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);

  assert(balanceOf[_from]+balanceOf[_to]==previousBalances);

  }

  function transfer(address _to,uint256 _value)public returns(bool){

  _transfer(msg.sender,_to,_value);

  return true;

  }

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

  require(_value<=allowance[_from][msg.sender]);//Check allowance

  allowance[_from][msg.sender]-=_value;

  _transfer(_from,_to,_value);

  return true;

  }

  function approve(address _spender,uint256 _value)public

  returns(bool success){

  allowance[msg.sender][_spender]=_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;

  }

  }

  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;

  }

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

  require(balanceOf[_from]>=_value);

  require(_value<=allowance[_from][msg.sender]);

  balanceOf[_from]-=_value;

  allowance[_from][msg.sender]-=_value;

  totalSupply-=_value;

  Burn(_from,_value);

  return true;

  }

  }

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档