将以太坊封装为 ERC20

简介: 将以太坊封装为 ERC20 TOKEN很多 DAPP 都是在处理 ERC20接口的 token, 其实很容易将以太坊封装为 ERC20,这样就可以统一处理,至少我目前在做的雷电网络就是这么处理的.主要内容复制在网络https://programtheblockchain.

将以太坊封装为 ERC20 TOKEN

很多 DAPP 都是在处理 ERC20接口的 token, 其实很容易将以太坊封装为 ERC20,这样就可以统一处理,
至少我目前在做的雷电网络就是这么处理的.

主要内容复制在网络
https://programtheblockchain.com/posts/2018/05/26/wrapping-ether-in-an-erc20-token/

直接上代码,核心部分是

pragma solidity ^0.4.24;

import "baseerc20token.sol";

contract EtherToken is BaseERC20Token {
    constructor(string _name, string _symbol)
        BaseERC20Token(0, 18, _name, _symbol) public
    {
    }

    function buy() public payable {
        balanceOf[msg.sender] += msg.value;
        totalSupply += msg.value;

        emit Transfer(address(0), msg.sender, msg.value);
    }

    function sell(uint256 amount) public {
        require(balanceOf[msg.sender] >= amount, "Insufficient balance.");

        balanceOf[msg.sender] -= amount;
        totalSupply -= amount;
        msg.sender.transfer(amount);

        emit Transfer(msg.sender, address(0), amount);
    }
}

它提供了以太坊和 ERC20互换的接口,换成 ERC20以后就很简单了.
实际上baseerc20token.sol只是一个非常标准的 ERC20实现

pragma solidity ^0.4.23;

contract BaseERC20Token {
    mapping (address => uint256) public balanceOf;

    string public name;
    string public symbol;
    uint8 public decimals;
    uint256 public totalSupply;

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

    constructor (
        uint256 _totalSupply,
        uint8 _decimals,
        string _name,
        string _symbol
    )
        public
    {
        name = _name;
        symbol = _symbol;
        decimals = _decimals;

        totalSupply = _totalSupply;
        balanceOf[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    function transfer(address to, uint256 value) public returns (bool success) {
        require(balanceOf[msg.sender] >= value);

        balanceOf[msg.sender] -= value;
        balanceOf[to] += value;
        emit Transfer(msg.sender, to, value);
        return true;
    }

    event Approval(address indexed owner, address indexed spender, uint256 value);

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

    function approve(address spender, uint256 value)
        public
        returns (bool success)
    {
        allowance[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);
        return true;
    }

    function transferFrom(address from, address to, uint256 value)
        public
        returns (bool success)
    {
        require(value <= balanceOf[from]);
        require(value <= allowance[from][msg.sender]);

        balanceOf[from] -= value;
        balanceOf[to] += value;
        allowance[from][msg.sender] -= value;
        emit Transfer(from, to, value);
        return true;
    }
}

这样简单部署,就可以在雷电网络中将以太坊当做普通的 ERC20 TOKEN进行处理了.

目录
相关文章
|
11月前
|
存储 区块链 数据安全/隐私保护
BSC链DAPP合约技术系统开发指南与需求
最重要的事情是为团队提供充分的理由说明去中心化是有意义的
|
前端开发 安全 JavaScript
  ERC20 Token智能合约DApp开发
ERC20 Token智能合约DApp开发是指基于以太坊区块链平台和ERC20 Token标准开发的去中心化应用程序,用于数字货币、代币、积分等的发行、交易和管理。
|
测试技术 API 区块链
【Web3探索】NFT 标准的演变:ERC-721 与 ERC-1155
要了解NFT的当前情况,我们必须深入了解它们的发展历史。ERC-20标准在代币领域占据主导地位,为各种项目提供了可替代代币的创建。ERC-1155结合了可替代和不可替代代币,为开发者在代币管理方面提供了更多的灵活性和效率。
133 0
|
区块链
Jvav 调用 Conflux 智能合约
Jvav 调用 Conflux 智能合约
101 0
|
区块链
ERC20代币合约开发规则详解(源码示例)
ERC20代币合约是一个遵循ERC20标准的代币合约,它实现了代币转移、代币冻结、代币解锁等功能。作为一个通用的标准,ERC20代币合约可以被广泛应用于各种去中心化交易所、钱包、ICO等场景。
|
Go 数据安全/隐私保护
Solidity笔记-合约间的互相调用
Solidity笔记-合约间的互相调用
220 0
如何创建以太坊ERC20代币
看这篇文章需要对以太坊,智能合约,代币等概念有基本的了解。 什么是ERC20 可以把ERC20简单理解成以太坊上的一个代币协议,所有基于以太坊开发的代币合约都遵守这个协议。
2081 0
|
区块链
solidity 智能合约之间的调用
solidity 智能合约之间的调用
602 0
|
存储 区块链 编译器
以太坊智能合约简介(Solidity)
本文略过了冗杂介绍,直接下沉到代码示例。本文中包含一个存储实例和生成极简单 subcurrency 的实例