# Scroll：如何在融资3000W主网部署合约

By [Untitled](https://paragraph.com/@0xb8e91df9cdad68e1f55c03fc5cfbba3c73a6f333) · 2023-10-27

---

对于普通用户来说，部署合约这件事无异于攀登珠穆朗玛峰——太难了。

话不多说，直接上教程：

打开部署网站：

[https://remix.ethereum.org/#lang=en&optimize=false&runs=200&evmVersion=null](https://remix.ethereum.org/#lang=en&optimize=false&runs=200&evmVersion=null)

页面如下：

![](https://storage.googleapis.com/papyrus_images/93de8f3071920469509a2967b22b1c45390915ee3fdf96d18bcfaa0ea854011e.png)

![](https://storage.googleapis.com/papyrus_images/aadd361e5ed68b1d9b792b43d3bf3df47347dd46ac9109fb034ef321533a9227.png)

下一步，生成项目平台，可以输入代码：

![](https://storage.googleapis.com/papyrus_images/5c968fab8c8aae0c6f438ecbf2f7f008f5e7f88e55647d7ed44871e88096281e.png)

代码示例：

    // SPDX-License-Identifier: MIT
    // WTF Solidity by 0xAA
    
    pragma solidity ^0.8.4;
    
    interface IERC20 {
        /**
         * @dev 释放条件：当 `value` 单位的货币从账户 (`from`) 转账到另一账户 (`to`)时.
         */
        event Transfer(address indexed from, address indexed to, uint256 value);
    
        /**
         * @dev 释放条件：当 `value` 单位的货币从账户 (`owner`) 授权给另一账户 (`spender`)时.
         */
        event Approval(address indexed owner, address indexed spender, uint256 value);
    
        /**
         * @dev 返回代币总供给.
         */
        function totalSupply() external view returns (uint256);
    
        /**
         * @dev 返回账户`account`所持有的代币数.
         */
        function balanceOf(address account) external view returns (uint256);
    
        /**
         * @dev 转账 `amount` 单位代币，从调用者账户到另一账户 `to`.
         *
         * 如果成功，返回 `true`.
         *
         * 释放 {Transfer} 事件.
         */
        function transfer(address to, uint256 amount) external returns (bool);
    
        /**
         * @dev 返回`owner`账户授权给`spender`账户的额度，默认为0。
         *
         * 当{approve} 或 {transferFrom} 被调用时，`allowance`会改变.
         */
        function allowance(address owner, address spender) external view returns (uint256);
    
        /**
         * @dev 调用者账户给`spender`账户授权 `amount`数量代币。
         *
         * 如果成功，返回 `true`.
         *
         * 释放 {Approval} 事件.
         */
        function approve(address spender, uint256 amount) external returns (bool);
    
        /**
         * @dev 通过授权机制，从`from`账户向`to`账户转账`amount`数量代币。转账的部分会从调用者的`allowance`中扣除。
         *
         * 如果成功，返回 `true`.
         *
         * 释放 {Transfer} 事件.
         */
        function transferFrom(
            address from,
            address to,
            uint256 amount
        ) external returns (bool);
    }
    
    contract ERC20 is IERC20 {
    
        mapping(address => uint256) public override balanceOf;
    
        mapping(address => mapping(address => uint256)) public override allowance;
    
        uint256 public override totalSupply;   // 代币总供给
    
        string public name;   // 名称
        string public symbol;  // 符号
        
        uint8 public decimals = 18; // 小数位数
        address public owner;
    
        // @dev 在合约部署的时候实现合约名称和符号
        constructor(string memory name_, string memory symbol_){
            name = name_;
            symbol = symbol_;
            owner = msg.sender;
        }
    
        // @dev 实现`transfer`函数，代币转账逻辑
        function transfer(address recipient, uint amount) external override returns (bool) {
            balanceOf[msg.sender] -= amount;
            balanceOf[recipient] += amount;
            emit Transfer(msg.sender, recipient, amount);
            return true;
        }
    
        // @dev 实现 `approve` 函数, 代币授权逻辑
        function approve(address spender, uint amount) external override returns (bool) {
            allowance[msg.sender][spender] = amount;
            emit Approval(msg.sender, spender, amount);
            return true;
        }
    
        // @dev 实现`transferFrom`函数，代币授权转账逻辑
        function transferFrom(
            address sender,
            address recipient,
            uint amount
        ) external override returns (bool) {
            allowance[sender][msg.sender] -= amount;
            balanceOf[sender] -= amount;
            balanceOf[recipient] += amount;
            emit Transfer(sender, recipient, amount);
            return true;
        }
    
        // @dev 铸造代币，从 `0` 地址转账给 调用者地址
        function mint(uint amount) external {
            require(owner == msg.sender);
            balanceOf[msg.sender] += amount;
            totalSupply += amount;
            emit Transfer(address(0), msg.sender, amount);
        }
    
        // @dev 销毁代币，从 调用者地址 转账给  `0` 地址
        function burn(uint amount) external {
            balanceOf[msg.sender] -= amount;
            totalSupply -= amount;
            emit Transfer(msg.sender, address(0), amount);
        }
    
    }
    

输入代码之后，下一步：

![](https://storage.googleapis.com/papyrus_images/273977012c28d336b5906d0ef337b685efd1daae234ad122cbf1f93dced52b6d.png)

下一步就是部署合约：

![](https://storage.googleapis.com/papyrus_images/8c823a6510d608507f73ff8092310c4c036eab03a643fa36a247b64c2c3c691c.png)

至此，所有的准备工作全部完成，下一步就是点击：\*\*transact 。\*\*会跳出小狐狸钱包，支付GAS就算完成。（注意：小狐狸钱包网切换成：Scorll 主网）

![](https://storage.googleapis.com/papyrus_images/ecdf831dd3141adbe9cb5a65f23bbd943b78d832fb0f926d60f3f36787df7b99.png)

至此，合约部署完成。

部署成功后就可以检查你的NFT资格了

[https://scroll.io/developer-nft/check-eligibility](https://scroll.io/developer-nft/check-eligibility)

---

*Originally published on [Untitled](https://paragraph.com/@0xb8e91df9cdad68e1f55c03fc5cfbba3c73a6f333/scroll-3000w)*
