Ethereum 来自以太坊网站的ERC20令牌代码

Ethereum 来自以太坊网站的ERC20令牌代码,ethereum,solidity,erc20,ether,Ethereum,Solidity,Erc20,Ether,我从官方网站上获取了ERC20代币的代码。 链接:(页面末尾) 我的问题是,为什么他们有两个契约,即TokenrC20和MyAdvancedToken,而不是在一个契约下统一所有功能?另外,我应该部署哪个契约以使所有功能正常工作?事先非常感谢 pragma-solidity^0.4.16; 合同所有{ 向公众所有人致辞; 函数owned()public{ 所有者=msg.sender; } 仅修改器所有者{ 要求(msg.sender==所有者); _; } 功能转移所有权(地址newOwne

我从官方网站上获取了ERC20代币的代码。 链接:(页面末尾) 我的问题是,为什么他们有两个契约,即TokenrC20和MyAdvancedToken,而不是在一个契约下统一所有功能?另外,我应该部署哪个契约以使所有功能正常工作?事先非常感谢

pragma-solidity^0.4.16;
合同所有{
向公众所有人致辞;
函数owned()public{
所有者=msg.sender;
}
仅修改器所有者{
要求(msg.sender==所有者);
_;
}
功能转移所有权(地址newOwner)仅所有者公共{
所有者=新所有者;
}
}
接口令牌接收者{函数receiveApproval(地址_from,uint256 _值,地址_令牌,字节_extraData)外部;}
合同标记ERC20{
//令牌的公共变量
字符串公共名称;
字符串公共符号;
uint8公共小数=18;
//18位小数是强烈建议的默认值,请避免更改
uint256公共总供给;
//这将创建一个包含所有余额的数组
映射(地址=>uint256)的公共余额;
映射(地址=>映射(地址=>uint256))公共津贴;
//这将在区块链上生成一个公共事件,通知客户
事件传输(地址索引自,地址索引至,uint256值);
//这将在区块链上生成一个公共事件,通知客户
事件批准(地址索引所有者、地址索引支出者、uint256值);
//这会通知客户燃烧的量
事件刻录(从uint256值索引的地址);
/**
*构造函数
*
*使用初始供应令牌向合同创建者初始化合同
*/
功能标记ERC20(
uint256初始电源,
字符串标记名,
字符串标记符号
)公开的{
totalSupply=initialSupply*10**uint256(小数);//使用小数金额更新总供给
balanceOf[msg.sender]=totalSupply;//给创建者所有初始令牌
name=tokenName;//为显示目的设置名称
symbol=tokenSymbol;//为显示目的设置符号
}
/**
*内部转让,仅可由本合同调用
*/
函数(地址(发件人),地址(收件人),uint(值)内部{
//阻止传输到0x0地址。请改用burn()
需要(_to!=0x0);
//检查发送者是否有足够的信息
要求(余额[\u from]>=\u值);
//检查溢出
要求(平衡[_至]+_值>平衡[_至]);
//将此保存为将来的断言
uint以前的余额=[_-from]的余额+[_-to]的余额;
//从发送者身上减去
[\u from]=\u值的平衡;
//将其添加到收件人
[\u至]+=\u值的平衡;
发射传输(_从,_到,_值);
//断言用于使用静态分析来发现代码中的错误。它们永远不会失败
断言(余额[\u-from]+余额[\u-to]==以前的余额);
}
/**
*转账代币
*
*从您的帐户向“%u to”发送“%u value”代币
*
*@param_发送至收件人的地址
*@param\u表示要发送的金额
*/
函数传输(地址到,uint256值)公共返回(布尔成功){
_传输(msg.sender,_-to,_-value);
返回true;
}
/**
*从其他地址转移令牌
*
*代表来自的“”向“”发送“”值“”令牌`
*
*@param_从发件人的地址发送
*@param_发送至收件人的地址
*@param\u表示要发送的金额
*/
函数transferFrom(地址_from,地址_to,uint256 _值)公共返回(布尔成功){
require(_value=_value);//检查发送方是否有足够的
余额[msg.sender]=\u值;//从发送方减去
totalSupply-=\u值;//更新totalSupply
发出烧录(msg.sender,_值);
返回true;
}
/**
*从其他帐户销毁代币
*
*以不可逆的方式从系统中删除“\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\。
*
*@param_从发件人的地址发送
*@param_估计要烧掉的钱的数量
*/
函数burnFrom(地址、uint256值)公共返回(布尔成功){
require(balanceOf[\u from]>=\u value);//检查目标余额是否足够

require(_value代币ERC20
是大多数人使用的标准ERC20代币。此合同允许您创建具有ERC20代币基本功能的代币,如
转账
转出
批准
,等等。这些都是符合该协议要求的功能

MyAdvancedToken
合同是
TokenERC20
合同的扩展(因此,
MyAdvancedToken为owned,TokenERC20
)。这意味着MyAdvancedToken能够使用TokenrC20的所有功能,而无需重写整个内容。此合同存在的原因是为token提供附加功能

在本例中,您可以看到所有者有能力创建额外的令牌并冻结特定用户的令牌。虽然这不是ERC20规范的一部分,但您可以添加类似的函数

您可能会看到一些函数,例如
\u transfer
,在两个合同中都有。当出现这种情况时,子合同函数将覆盖父合同。在这种情况下,调用时执行的
\u transfer
函数是检查冻结账户的函数。

非常感谢!非常感谢