• 将以太坊封装为 ERC20


    将以太坊封装为 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进行处理了.

  • 相关阅读:
    变更管理
    2020软件工程个人作业06——软件工程实践总结作业
    鸽子开发组---冲刺第七天
    冲刺第六天
    鸽子开发组---冲刺第五天
    鸽子开发组--冲刺第四天
    鸽子开发组--冲刺第三天
    鸽子开发组--冲刺第二天
    冲刺规划
    冲刺第一天
  • 原文地址:https://www.cnblogs.com/baizx/p/9174862.html
Copyright © 2020-2023  润新知