<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>xin</title>
        <link>https://paragraph.com/@xinchain</link>
        <description>这里作为个人思考的记录</description>
        <lastBuildDate>Wed, 13 May 2026 07:41:58 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <image>
            <title>xin</title>
            <url>https://storage.googleapis.com/papyrus_images/e51bc9132313bead4ce41364fa11e3fe4b756febb4338afcf86fdc510ee29cfe.jpg</url>
            <link>https://paragraph.com/@xinchain</link>
        </image>
        <copyright>All rights reserved</copyright>
        <item>
            <title><![CDATA[理想区块链-DEX代码]]></title>
            <link>https://paragraph.com/@xinchain/dex</link>
            <guid>3zBbbp3fyhPLq1pBoY2o</guid>
            <pubDate>Tue, 05 Jul 2022 03:09:03 GMT</pubDate>
            <description><![CDATA[// SPDX-License-Identifier: GPL-3.0 pragma solidity 0.8.10; library safeMath { function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b &#x3C;= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } interface IERC20 { // 获取合约地址 function getAddress() external view returns (address); // 获取代币发行总量 function totalSupply() external view returns (uint256); // 根据地址获取代币的余额 function balanceOf(address ...]]></description>
            <content:encoded><![CDATA[<pre data-type="codeBlock" text="// SPDX-License-Identifier: GPL-3.0

pragma solidity 0.8.10;

library safeMath {
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        assert(b &lt;= a);
        return a - b;
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        assert(c &gt;= a);
        return c;
    }
}

interface IERC20 {
    // 获取合约地址
    function getAddress() external view returns (address);
    // 获取代币发行总量
    function totalSupply() external view returns (uint256);
    // 根据地址获取代币的余额
    function balanceOf(address account) external view returns (uint256);
    // 代理可转移的代币数量
    function allowance(address owner, address supender) external view returns (uint256);

    // 转账
    function transfer(address recipient, uint256 amount) external returns (bool);
    // 设置代理能转账的金额
    function approve(address owner, address spender, uint256 amount) external returns (bool);
    // 转账
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

// 代币实现
contract ERC20Basic is IERC20 {
    string public constant name = &quot;ERC-xinChain&quot;; // 代币名称
    string public constant symbol = &quot;ERC-xin&quot;; // 代币简称
    uint8 public constant decimals = 18;

    mapping(address =&gt; uint256) balances; // 地址对应的余额数量
    mapping(address =&gt; mapping(address =&gt; uint256)) allowedBalence; // 代理商能处理的代币数量

    uint256 totalSupply_ = 10 ether; // 发行数量，ether指的是单位，类似吨，也可以使用8个0

    using safeMath for uint256;

    constructor () {
        balances[msg.sender] = totalSupply_; // 将代币分发给创建者
    } 

     // 获取合约地址
    function getAddress() external view returns (address){
        return address(this); // 当前合约的地址
    }
    // 获取代币发行总量
    function totalSupply() external view returns (uint256){
        return totalSupply_;
    }

    // 根据地址获取代币的余额
    function balanceOf(address tokenOwner) public override view returns (uint256){
        return balances[tokenOwner]; // 根据地址获取余额
    }

    // 转账
    function transfer(address receiver, uint256 amount) public override returns (bool){
        require(amount &lt;= balances[msg.sender]);
        balances[msg.sender] = balances[msg.sender].sub(amount);
        balances[receiver] = balances[receiver].add(amount);
        emit Transfer(msg.sender, receiver, amount);
        return true;
    }

    // 设置代理能转账的金额
    function approve(address owner, address delegate, uint256 amount) external returns (bool){
        allowedBalence[owner][delegate] = amount;
        emit Approval(owner, delegate, amount);
        return true;
    }

    // 代理可转移的代币数量
    function allowance(address owner, address delegate) external view returns (uint256){
        return allowedBalence[owner][delegate];
    }

    // 转账
    function transferFrom(address owner, address buyer, uint256 amount) external returns (bool){
        require(amount &lt;= balances[owner]);
        require(amount &lt;= allowedBalence[owner][msg.sender]);

        balances[owner] = balances[owner].sub(amount);
        allowedBalence[owner][buyer] = allowedBalence[owner][buyer].sub(amount);
        balances[buyer] = balances[buyer].add(amount);
        emit Transfer(owner, buyer, amount);
        return true;
    }
}


contract DEX {
    event Bought(uint256 amount);
    event Sold(uint256 amount);
     
    IERC20 public token;

    constructor () {
        token = new ERC20Basic();
    }

    // 买入
    function buy() payable public {
        uint256 amountTobuy = msg.value; //传入以太坊
        uint256 dexBalance = token.balanceOf(address(this)); //此合约中自己创建代币的数量
        require(amountTobuy &gt; 0 , &quot;You need to send some Ethoer&quot;); // amountTobuy 必须传入以太，使用以太购买此代币
        require(amountTobuy &lt;= dexBalance, &quot;Not enough tokens in the reserve&quot;); // 合约中代币的数量要大于要购买的量
        token.transfer(msg.sender, amountTobuy);
        emit Bought(amountTobuy);
    }

    function sell(uint256 amount) public {
        require(amount &gt; 0, &quot;You need to sell at least some tokens.&quot;); // 卖出数量要大于0
        uint256 allowance = token.allowance(msg.sender, address(this));
        require(allowance &gt;= amount, &quot;check the token allowance&quot;);
        token.transferFrom(msg.sender, address(this), amount);

        emit Sold(amount);
    }

    function getDexBalance() public view returns(uint256) {
        return token.balanceOf(address(this));
    }

    function getOwnerBalance() public view returns(uint256) {
        return token.balanceOf(msg.sender);
    }

    function getAddress() public view returns (address) {
        return address(this);
    }

    function getTokenAddress() public view returns (address) {
        return token.getAddress();
    }

    function getTotalSupply() public view returns (uint256) {
        return token.totalSupply();
    }

    function getSenderAddress() public view returns (address) {
        return address(msg.sender);
    }

    function getAllowance() public view returns (uint256) {
        uint256 allowance = token.allowance(msg.sender, address(this));
        return allowance;
    }

    // 授权当前合约转移代币数量
    function approve(uint256 amount) public returns(bool) {
        bool isApprove = token.approve(msg.sender, address(this), amount);
        return isApprove;
    }
}
"><code><span class="hljs-comment">// SPDX-License-Identifier: GPL-3.0</span>

<span class="hljs-meta"><span class="hljs-keyword">pragma</span> <span class="hljs-keyword">solidity</span> 0.8.10;</span>

<span class="hljs-class"><span class="hljs-keyword">library</span> <span class="hljs-title">safeMath</span> </span>{
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">sub</span>(<span class="hljs-params"><span class="hljs-keyword">uint256</span> a, <span class="hljs-keyword">uint256</span> b</span>) <span class="hljs-title"><span class="hljs-keyword">internal</span></span> <span class="hljs-title"><span class="hljs-keyword">pure</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">uint256</span></span>) </span>{
        <span class="hljs-built_in">assert</span>(b <span class="hljs-operator">&#x3C;</span><span class="hljs-operator">=</span> a);
        <span class="hljs-keyword">return</span> a <span class="hljs-operator">-</span> b;
    }

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">add</span>(<span class="hljs-params"><span class="hljs-keyword">uint256</span> a, <span class="hljs-keyword">uint256</span> b</span>) <span class="hljs-title"><span class="hljs-keyword">internal</span></span> <span class="hljs-title"><span class="hljs-keyword">pure</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">uint256</span></span>) </span>{
        <span class="hljs-keyword">uint256</span> c <span class="hljs-operator">=</span> a <span class="hljs-operator">+</span> b;
        <span class="hljs-built_in">assert</span>(c <span class="hljs-operator">></span><span class="hljs-operator">=</span> a);
        <span class="hljs-keyword">return</span> c;
    }
}

<span class="hljs-class"><span class="hljs-keyword">interface</span> <span class="hljs-title">IERC20</span> </span>{
    <span class="hljs-comment">// 获取合约地址</span>
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getAddress</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title"><span class="hljs-keyword">view</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">address</span></span>)</span>;
    <span class="hljs-comment">// 获取代币发行总量</span>
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">totalSupply</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title"><span class="hljs-keyword">view</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">uint256</span></span>)</span>;
    <span class="hljs-comment">// 根据地址获取代币的余额</span>
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">balanceOf</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> account</span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title"><span class="hljs-keyword">view</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">uint256</span></span>)</span>;
    <span class="hljs-comment">// 代理可转移的代币数量</span>
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">allowance</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> owner, <span class="hljs-keyword">address</span> supender</span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title"><span class="hljs-keyword">view</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">uint256</span></span>)</span>;

    <span class="hljs-comment">// 转账</span>
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">transfer</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> recipient, <span class="hljs-keyword">uint256</span> amount</span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">bool</span></span>)</span>;
    <span class="hljs-comment">// 设置代理能转账的金额</span>
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">approve</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> owner, <span class="hljs-keyword">address</span> spender, <span class="hljs-keyword">uint256</span> amount</span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">bool</span></span>)</span>;
    <span class="hljs-comment">// 转账</span>
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">transferFrom</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> sender, <span class="hljs-keyword">address</span> recipient, <span class="hljs-keyword">uint256</span> amount</span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">bool</span></span>)</span>;

    <span class="hljs-function"><span class="hljs-keyword">event</span> <span class="hljs-title">Transfer</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> <span class="hljs-keyword">indexed</span> <span class="hljs-keyword">from</span>, <span class="hljs-keyword">address</span> <span class="hljs-keyword">indexed</span> to, <span class="hljs-keyword">uint256</span> value</span>)</span>;
    <span class="hljs-function"><span class="hljs-keyword">event</span> <span class="hljs-title">Approval</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> <span class="hljs-keyword">indexed</span> owner, <span class="hljs-keyword">address</span> <span class="hljs-keyword">indexed</span> spender, <span class="hljs-keyword">uint256</span> value</span>)</span>;
}

<span class="hljs-comment">// 代币实现</span>
<span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">ERC20Basic</span> <span class="hljs-keyword">is</span> <span class="hljs-title">IERC20</span> </span>{
    <span class="hljs-keyword">string</span> <span class="hljs-keyword">public</span> <span class="hljs-keyword">constant</span> name <span class="hljs-operator">=</span> <span class="hljs-string">"ERC-xinChain"</span>; <span class="hljs-comment">// 代币名称</span>
    <span class="hljs-keyword">string</span> <span class="hljs-keyword">public</span> <span class="hljs-keyword">constant</span> symbol <span class="hljs-operator">=</span> <span class="hljs-string">"ERC-xin"</span>; <span class="hljs-comment">// 代币简称</span>
    <span class="hljs-keyword">uint8</span> <span class="hljs-keyword">public</span> <span class="hljs-keyword">constant</span> decimals <span class="hljs-operator">=</span> <span class="hljs-number">18</span>;

    <span class="hljs-keyword">mapping</span>(<span class="hljs-keyword">address</span> <span class="hljs-operator">=</span><span class="hljs-operator">></span> <span class="hljs-keyword">uint256</span>) balances; <span class="hljs-comment">// 地址对应的余额数量</span>
    <span class="hljs-keyword">mapping</span>(<span class="hljs-keyword">address</span> <span class="hljs-operator">=</span><span class="hljs-operator">></span> <span class="hljs-keyword">mapping</span>(<span class="hljs-keyword">address</span> <span class="hljs-operator">=</span><span class="hljs-operator">></span> <span class="hljs-keyword">uint256</span>)) allowedBalence; <span class="hljs-comment">// 代理商能处理的代币数量</span>

    <span class="hljs-keyword">uint256</span> totalSupply_ <span class="hljs-operator">=</span> <span class="hljs-number">10</span> <span class="hljs-literal">ether</span>; <span class="hljs-comment">// 发行数量，ether指的是单位，类似吨，也可以使用8个0</span>

    <span class="hljs-keyword">using</span> <span class="hljs-title">safeMath</span> <span class="hljs-title"><span class="hljs-keyword">for</span></span> <span class="hljs-title"><span class="hljs-keyword">uint256</span></span>;

    <span class="hljs-function"><span class="hljs-keyword">constructor</span> (<span class="hljs-params"></span>) </span>{
        balances[<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>] <span class="hljs-operator">=</span> totalSupply_; <span class="hljs-comment">// 将代币分发给创建者</span>
    } 

     <span class="hljs-comment">// 获取合约地址</span>
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getAddress</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title"><span class="hljs-keyword">view</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">address</span></span>)</span>{
        <span class="hljs-keyword">return</span> <span class="hljs-keyword">address</span>(<span class="hljs-built_in">this</span>); <span class="hljs-comment">// 当前合约的地址</span>
    }
    <span class="hljs-comment">// 获取代币发行总量</span>
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">totalSupply</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title"><span class="hljs-keyword">view</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">uint256</span></span>)</span>{
        <span class="hljs-keyword">return</span> totalSupply_;
    }

    <span class="hljs-comment">// 根据地址获取代币的余额</span>
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">balanceOf</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> tokenOwner</span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> <span class="hljs-title"><span class="hljs-keyword">override</span></span> <span class="hljs-title"><span class="hljs-keyword">view</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">uint256</span></span>)</span>{
        <span class="hljs-keyword">return</span> balances[tokenOwner]; <span class="hljs-comment">// 根据地址获取余额</span>
    }

    <span class="hljs-comment">// 转账</span>
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">transfer</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> receiver, <span class="hljs-keyword">uint256</span> amount</span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> <span class="hljs-title"><span class="hljs-keyword">override</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">bool</span></span>)</span>{
        <span class="hljs-built_in">require</span>(amount <span class="hljs-operator">&#x3C;</span><span class="hljs-operator">=</span> balances[<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>]);
        balances[<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>] <span class="hljs-operator">=</span> balances[<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>].sub(amount);
        balances[receiver] <span class="hljs-operator">=</span> balances[receiver].add(amount);
        <span class="hljs-keyword">emit</span> Transfer(<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>, receiver, amount);
        <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>;
    }

    <span class="hljs-comment">// 设置代理能转账的金额</span>
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">approve</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> owner, <span class="hljs-keyword">address</span> delegate, <span class="hljs-keyword">uint256</span> amount</span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">bool</span></span>)</span>{
        allowedBalence[owner][delegate] <span class="hljs-operator">=</span> amount;
        <span class="hljs-keyword">emit</span> Approval(owner, delegate, amount);
        <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>;
    }

    <span class="hljs-comment">// 代理可转移的代币数量</span>
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">allowance</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> owner, <span class="hljs-keyword">address</span> delegate</span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title"><span class="hljs-keyword">view</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">uint256</span></span>)</span>{
        <span class="hljs-keyword">return</span> allowedBalence[owner][delegate];
    }

    <span class="hljs-comment">// 转账</span>
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">transferFrom</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> owner, <span class="hljs-keyword">address</span> buyer, <span class="hljs-keyword">uint256</span> amount</span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">bool</span></span>)</span>{
        <span class="hljs-built_in">require</span>(amount <span class="hljs-operator">&#x3C;</span><span class="hljs-operator">=</span> balances[owner]);
        <span class="hljs-built_in">require</span>(amount <span class="hljs-operator">&#x3C;</span><span class="hljs-operator">=</span> allowedBalence[owner][<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>]);

        balances[owner] <span class="hljs-operator">=</span> balances[owner].sub(amount);
        allowedBalence[owner][buyer] <span class="hljs-operator">=</span> allowedBalence[owner][buyer].sub(amount);
        balances[buyer] <span class="hljs-operator">=</span> balances[buyer].add(amount);
        <span class="hljs-keyword">emit</span> Transfer(owner, buyer, amount);
        <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>;
    }
}


<span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">DEX</span> </span>{
    <span class="hljs-function"><span class="hljs-keyword">event</span> <span class="hljs-title">Bought</span>(<span class="hljs-params"><span class="hljs-keyword">uint256</span> amount</span>)</span>;
    <span class="hljs-function"><span class="hljs-keyword">event</span> <span class="hljs-title">Sold</span>(<span class="hljs-params"><span class="hljs-keyword">uint256</span> amount</span>)</span>;
     
    IERC20 <span class="hljs-keyword">public</span> token;

    <span class="hljs-function"><span class="hljs-keyword">constructor</span> (<span class="hljs-params"></span>) </span>{
        token <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> ERC20Basic();
    }

    <span class="hljs-comment">// 买入</span>
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">buy</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">payable</span></span> <span class="hljs-title"><span class="hljs-keyword">public</span></span> </span>{
        <span class="hljs-keyword">uint256</span> amountTobuy <span class="hljs-operator">=</span> <span class="hljs-built_in">msg</span>.<span class="hljs-built_in">value</span>; <span class="hljs-comment">//传入以太坊</span>
        <span class="hljs-keyword">uint256</span> dexBalance <span class="hljs-operator">=</span> token.balanceOf(<span class="hljs-keyword">address</span>(<span class="hljs-built_in">this</span>)); <span class="hljs-comment">//此合约中自己创建代币的数量</span>
        <span class="hljs-built_in">require</span>(amountTobuy <span class="hljs-operator">></span> <span class="hljs-number">0</span> , <span class="hljs-string">"You need to send some Ethoer"</span>); <span class="hljs-comment">// amountTobuy 必须传入以太，使用以太购买此代币</span>
        <span class="hljs-built_in">require</span>(amountTobuy <span class="hljs-operator">&#x3C;</span><span class="hljs-operator">=</span> dexBalance, <span class="hljs-string">"Not enough tokens in the reserve"</span>); <span class="hljs-comment">// 合约中代币的数量要大于要购买的量</span>
        token.<span class="hljs-built_in">transfer</span>(<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>, amountTobuy);
        <span class="hljs-keyword">emit</span> Bought(amountTobuy);
    }

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">sell</span>(<span class="hljs-params"><span class="hljs-keyword">uint256</span> amount</span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> </span>{
        <span class="hljs-built_in">require</span>(amount <span class="hljs-operator">></span> <span class="hljs-number">0</span>, <span class="hljs-string">"You need to sell at least some tokens."</span>); <span class="hljs-comment">// 卖出数量要大于0</span>
        <span class="hljs-keyword">uint256</span> allowance <span class="hljs-operator">=</span> token.allowance(<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>, <span class="hljs-keyword">address</span>(<span class="hljs-built_in">this</span>));
        <span class="hljs-built_in">require</span>(allowance <span class="hljs-operator">></span><span class="hljs-operator">=</span> amount, <span class="hljs-string">"check the token allowance"</span>);
        token.transferFrom(<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>, <span class="hljs-keyword">address</span>(<span class="hljs-built_in">this</span>), amount);

        <span class="hljs-keyword">emit</span> Sold(amount);
    }

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getDexBalance</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> <span class="hljs-title"><span class="hljs-keyword">view</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span>(<span class="hljs-params"><span class="hljs-keyword">uint256</span></span>) </span>{
        <span class="hljs-keyword">return</span> token.balanceOf(<span class="hljs-keyword">address</span>(<span class="hljs-built_in">this</span>));
    }

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getOwnerBalance</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> <span class="hljs-title"><span class="hljs-keyword">view</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span>(<span class="hljs-params"><span class="hljs-keyword">uint256</span></span>) </span>{
        <span class="hljs-keyword">return</span> token.balanceOf(<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>);
    }

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getAddress</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> <span class="hljs-title"><span class="hljs-keyword">view</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">address</span></span>) </span>{
        <span class="hljs-keyword">return</span> <span class="hljs-keyword">address</span>(<span class="hljs-built_in">this</span>);
    }

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getTokenAddress</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> <span class="hljs-title"><span class="hljs-keyword">view</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">address</span></span>) </span>{
        <span class="hljs-keyword">return</span> token.getAddress();
    }

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getTotalSupply</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> <span class="hljs-title"><span class="hljs-keyword">view</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">uint256</span></span>) </span>{
        <span class="hljs-keyword">return</span> token.totalSupply();
    }

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getSenderAddress</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> <span class="hljs-title"><span class="hljs-keyword">view</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">address</span></span>) </span>{
        <span class="hljs-keyword">return</span> <span class="hljs-keyword">address</span>(<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>);
    }

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getAllowance</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> <span class="hljs-title"><span class="hljs-keyword">view</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">uint256</span></span>) </span>{
        <span class="hljs-keyword">uint256</span> allowance <span class="hljs-operator">=</span> token.allowance(<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>, <span class="hljs-keyword">address</span>(<span class="hljs-built_in">this</span>));
        <span class="hljs-keyword">return</span> allowance;
    }

    <span class="hljs-comment">// 授权当前合约转移代币数量</span>
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">approve</span>(<span class="hljs-params"><span class="hljs-keyword">uint256</span> amount</span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span>(<span class="hljs-params"><span class="hljs-keyword">bool</span></span>) </span>{
        <span class="hljs-keyword">bool</span> isApprove <span class="hljs-operator">=</span> token.approve(<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>, <span class="hljs-keyword">address</span>(<span class="hljs-built_in">this</span>), amount);
        <span class="hljs-keyword">return</span> isApprove;
    }
}
</code></pre>]]></content:encoded>
            <author>xinchain@newsletter.paragraph.com (xin)</author>
        </item>
    </channel>
</rss>