百亿项目Alchemy Road to Web3 第三周NFT获取教程

2019年12月,Alchemy完成1500万美元A轮融资,方为Pantera Capital,斯坦福大学,Coinbase,三星等。

2021 年 4 月,Alchemy 以 5.05 亿参投组合、K 5 美元完成8000 万B 轮融资,并加入领英,DFJ 成长全球、Chainsmokers(家族鬼)、演员贾里德莱托和格雷泽。

2021 年 10 月,Alchemy 以 35 亿美元的估值完成2.5 美元的 C 轮融资,由 6z 领的。

2022年2月,Alchemy以102亿美元估值完成2亿美元,光速与银奖。

是一个强大的背景、炼金术、没有安排这样的事情、做的项目不刷,比去刷土狗吗?

并且,Alchemy 计划将新的资金推广网络采用,这方面的一些活动现在包括大学,在 3 月 3 日的网络活动中,每周 10 天在网上发布一个极少的信息。任务难度大,对方直接放弃,这样的项目有选择的小空投,绝对是大毛。

手数据制作链第三周教程开始:如何使用上元NFT - Hardhat 和 JavaScript

官方教程的教程有49分钟的教程,我给大家的教程教程有一个简单的操作教程。

没有今天第二周的记得照着这个先做一下。

step1 将 Polygon Mumbai 添加到您的 Metamask 钱包

1.Polygonscan.com到下面就可以看到滚动到底部页面。

step2 获取免费的 Matic 以部署您的 NFT 智能合约

获取简单,直接导航到以下非常简单的测试之一:

将钱包地址复制到文本骚扰,然后点击**“Send Me MATIC”**:

step3 如何使用链上元数据制作 NFT - 项目设置

1.Win+R,在跳出按键输入cmd。

2.进入游戏,输入mkdir 再输入一个新文件夹,输入cd ChainBd按回输入该文件夹。

3.输入npm install -g yarn 安装yarn。

4.再输入yarn add hardhat 安装hardhat。

5.输入px hardhat init,连按三下回车就知道了。

6.输入yarn add @openzeppelin/contracts 安装OpenZeppelin智能合约库。

7.输入yarn add @nomiclabs/hardhat-etherscan ,按回车。

step4 修改 hardhat.config.js 文件

1.打开Vscode,点击file,再点击open folder。(不要管右侧代码,那是上一个项目的哈哈)

2.找到刚才创建的文件夹,点击选择文件夹。

3.打开后是这个样子的。

4.右键点击,然后delete lock.sol和deploy.js这两个文件。

5.点击hardhat.config.js,将下面代码粘贴进去!如图所示!

require("dotenv").config();
require("@nomiclabs/hardhat-waffle");
require("@nomiclabs/hardhat-etherscan");

module.exports = {
  solidity: "0.8.10",
  networks: {
    mumbai: {
      url: process.env.TESTNET_RPC,
      accounts: [process.env.PRIVATE_KEY]
    },
  },
  etherscan: {
    apiKey: process.env.POLYGONSCAN_API_KEY
  }
};

step5 具有链上元数据的 NFT:开发智能合约

在 contracts 文件夹中,创建一个新文件并将其命名为“ChainBattles.sol” ,然后将以下代码粘贴进去(注意,这个粘贴我的,官方的有错误!!),如图所示,记得保存,记得保存!

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
import "@openzeppelin/contracts/utils/Counters.sol";
import "@openzeppelin/contracts/utils/Strings.sol";
import "@openzeppelin/contracts/utils/Base64.sol";

contract ChainBattles is ERC721URIStorage  {
    using Strings for uint256;
    using Counters for Counters.Counter;
    Counters.Counter private _tokenIds;

    mapping(uint256 => uint256) public tokenIdToLevels;

    constructor() ERC721 ("Chain Battles", "CBTLS"){
    }

function generateCharacter(uint256 tokenId) public returns(string memory){

    bytes memory svg = abi.encodePacked(
        '<svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMinYMin meet" viewBox="0 0 350 350">',
        '<style>.base { fill: white; font-family: serif; font-size: 14px; }</style>',
        '<rect width="100%" height="100%" fill="black" />',
        '<text x="50%" y="40%" class="base" dominant-baseline="middle" text-anchor="middle">',"Warrior",'</text>',
        '<text x="50%" y="50%" class="base" dominant-baseline="middle" text-anchor="middle">', "Levels: ",getLevels(tokenId),'</text>',
        '</svg>'
    );
    return string(
        abi.encodePacked(
            "data:image/svg+xml;base64,",
            Base64.encode(svg)
        )    
    );
}
function getLevels(uint256 tokenId) public view returns (string memory) {
    uint256 levels = tokenIdToLevels[tokenId];
    return levels.toString();
}
function getTokenURI(uint256 tokenId) public returns (string memory){
    bytes memory dataURI = abi.encodePacked(
        '{',
            '"name": "Chain Battles #', tokenId.toString(), '",',
            '"description": "Battles on chain",',
            '"image": "', generateCharacter(tokenId), '"',
        '}'
    );
    return string(
        abi.encodePacked(
            "data:application/json;base64,",
            Base64.encode(dataURI)
        )
    );
}
function mint() public {
    _tokenIds.increment();
    uint256 newItemId = _tokenIds.current();
    _safeMint(msg.sender, newItemId);
    tokenIdToLevels[newItemId] = 0;
    _setTokenURI(newItemId, getTokenURI(newItemId));
}
    function train(uint256 tokenId)public{
        require(_exists(tokenId));
        require(ownerOf(tokenId)==msg.sender,"You must own this token to train it");
        uint256 currentLevel=tokenIdToLevels[tokenId];
        tokenIdToLevels[tokenId]=currentLevel+1;
        _setTokenURI(tokenId,getTokenURI(tokenId));
        }
}

step6 使用链上元数据智能合约部署 NFT

1.在控制台输入echo test>.env 创建一个.env文件。

2.回到vscode,在env文件中粘贴以下代码,如图所示!

TESTNET_RPC=""
PRIVATE_KEY=""
POLYGONSCAN_API_KEY=""

3.进入 alchemy.com 并创建一个新的 Polygon Mumbai 应用程序。

点击create app。

如下图输入,再点击create app。

4.点击刚才创建的app的view key。复制HTTPS的链接,粘贴到vscode中env文件的第一行,如图所示。

5.打开 Metamask 钱包,点击三点菜单 > 账户详情 > 并将您的私钥复制粘贴为“ PRIVATE_KEY ”值,如图所示。

6.最后,进入polygonscan.com, 并点击右上角创建一个新帐户。

进入API-KEY,点击ADD,添加完毕后将红框内字符串复制,粘贴到env文件第三行,如图所示。保存!!!

step7 创建部署脚本

1.在script问价夹下创建deploy.js文件,并粘贴以下代码,如图所示,记得保存。

const main = async () => {
  try {
    const nftContractFactory = await hre.ethers.getContractFactory(
      "ChainBattles"
    );
    const nftContract = await nftContractFactory.deploy();
    await nftContract.deployed();

    console.log("Contract deployed to:", nftContract.address);
    process.exit(0);
  } catch (error) {
    console.log(error);
    process.exit(1);
  }
};
  
main();

step8 编译和部署智能合约

1.在车内输入npm install dotenv,点击回车安装。

2.在问题输入/npm install @nomiclab-waffle,点击回车安装。

3.在输入输出,按回车,如图所示。

4.在地址输入10.js脚本/dpx hardhat run-network mumbai,秒155秒,在终端中看到智能合约。

step9 在 Polygon Scan 上检查您的智能合约

1. 复制的智能合约地址,mumbai.poly.com,** 复制合约,会发现合约代码在点击部署的。

2.回到原因,输入验证网络妈妈+你的合同地址,如图所示。地址已经验证,所以出现以下错误)

step1 通过识别与您的智能标签0

1.现在智能合约通过验​​证,mumbai.polygonscan.com 将在其附近显示一个小勾。

2.点击连接web3,链接小狐狸。

3.点击写连接,然后点击一个辣椒下的写,在小狐狸第四中确认。

step11 在 OpenSea 上查看您的动态 NFT

1.智能合约地址,将其在网上,复制。

step12 更新动态 NFT 图像训练 NFT

1.回到mumbai.polygonscan.com,个个写连接,然后第8列火车,在其中输入1点击写,看到点击小狐狸确认。

2.再回到近期的并有发现,可以显示。

step13 项目提交。

提交链接

全部完成,坐方领取,领取等!

Subscribe to wuge
Receive the latest updates directly to your inbox.
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.