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