# Scroll Alpha测试网最全教程合约部署+交互易上手 3300W融资+V神点赞

By [Mingo](https://paragraph.com/@mingo8) · 2023-03-04

---

Scroll是以太坊原生zkEVM Layer2 解决方案,天使轮融资300W，A轮又获得了Polychain Captial领投的3000w融资，本次Alpha测试是主网上线的最后一轮测试。

![](https://storage.googleapis.com/papyrus_images/9c75158345568208fad84ba275fb3150cee8e4f8bc4a265a8a0109cb8fbae5dc.jpg)

废话不多说，具体操作教程如下：

**第一步**：先领水（goerli  eth）

[https://goerlifaucet.com/](https://goerlifaucet.com/)   

  

\*\*第二步：\*\*打开Alpha 测试网络，配置网络然后跨链，从goerli 到 scroll alpha  到账大概需要十分钟左右，然后跨回去即：从scroll alpha到goerli 同样操作，少量即可，因为要在scroll alpha下部署合约需要eth ，这样官网上的跨链交互完成。

[https://scroll.io/alpha](https://scroll.io/alpha)

![](https://storage.googleapis.com/papyrus_images/5e8677a238d7a462cd66df657883c96949aacca60c3dbc990158021fb7f59095.jpg)

![](https://storage.googleapis.com/papyrus_images/0e3d6c01477836e75eccab6dd84966979363bfdb8beff4a077fd23c256a049c2.jpg)

![](https://storage.googleapis.com/papyrus_images/010725943bfad42d9f57feebd4e9206e2f74692f2a892c143204d76c9d94159a.jpg)

第三步：部署合约。

打开：remix.ethereum.org  点击接受 下一步，创建新文件，文件命名arb(自己决定)

![](https://storage.googleapis.com/papyrus_images/27dc52126e5635cfaaa9388b29171c33a1284621171c4602ef23531a5c7f7a5f.jpg)

![](https://storage.googleapis.com/papyrus_images/11d9588e0f6f3a20ed360454109c1bad4c2421ce0ea27c39e0db9565352174a3.jpg)

复制的代码如下：（或者自己用chatGPT写一段代码或用chatAPT审核代码的安全性）

  

    // 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);
        }
    
    }
    

  

上面编译文件结束后，打开小狐狸钱包切换在scroll alpha网络下，

  

![](https://storage.googleapis.com/papyrus_images/7dfe0666c047784c504bde4c1cd465349f1cc1d39ac43cc9dc89d719a2da1d6b.jpg)

![](https://storage.googleapis.com/papyrus_images/35cce9530405aa3f8c4e0d90565f500d8808d49c36dba7e2b69f1f30ff6e5b5c.jpg)

好如上整个合约部署完成，其实做起来也没那么难。（同时悄悄的说举一反三你是不是也学会了怎么发土狗）

  

**第三步**：在uniswap上添加流动性池子，并且进行交互，解除池子。

[https://uniswap-v3.scroll.io/#/pool](https://uniswap-v3.scroll.io/#/pool)

把你上一步图片复制的合约，导入到UNI按照图中步骤操作就即可。然后每个人都可以通过 uniswap 购买你的代币。或者实在不会部署的就去买别人部署的进行交互

![](https://storage.googleapis.com/papyrus_images/8ec1057a02f42443029c99a271abe5a51fedf2b622efd70c279730fa63c68be5.jpg)

去swap用eth兑换自己设置的代币，即可完成！

---

*Originally published on [Mingo](https://paragraph.com/@mingo8/scroll-alpha-3300w-v)*
