Blockchain 基建大师 Alchemy 会魔法吧

Posted Footprint_Analytics

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Blockchain 基建大师 Alchemy 会魔法吧相关的知识,希望对你有一定的参考价值。

Feb. 2022, Grace

2 月 8 日,区块链独角兽平台名单再一次更新,Alchemy 成为新晋之秀。 凭借最新轮 2 亿美元的融资,估值达到 102 亿美元。 

Alchemy 凭什么可以得到 Lightspeed、Silver Lake 和 a16z 等风投机构的支持?本文将从功能应用来解密 Alchemy 的魔法配方。

Alchemy 的背景

2017 年,Nikil Viswanatha 和 Joe Lau 联合创立了 Alchemy。定位为区块链基础设施平台,目标成为区块链世界的 AWS。目前为 Web3 开发者提供区块链开发平台服务。

根据官网介绍,当前 Alchemy 为全球 99% 的领先的区块链公司的产品提供动力。当前 Alchemy 已经支持将创建的应用直接部署到 6 条链中,包括 Ethereum、Flow、Arbitrum、Crypto.org、Optimism 和 Polygon。

且截至 2 月 16 日,链上交易已达到 300 亿美元。AAVE、0x、OpenSea、Dapper 等应用都由 Alchemy 支持。

Alchemy 的四大功能

1. Alchemy Supernod 

Web2 中应用的基础架构是多个服务器托管在负载平衡器上,这一方式在 Web3 并不适用。区块链每个块、每个节点都包含大量的信息,容易导致应用崩溃。Alchemy Supernod 应运而生。

Alchemy Supernod 针对装载大体量信息的节点做了扩展,使用分布式系统可以提供比较强的可扩展性。数据错乱也因 Alchemy Suoernod 的专有协调服务器维护得到了解决,可以基本确保数据的正确性和试试同步。

区块链、节点和应用之间如何更好地进行部署交互,是现在区块链 developers 需要考虑的问题。Alchemy Supernod 则提供了开箱即用的解决方案。 


Alchemy Supernode Infrastructure Diagram 

 

2、Alchemy Bulid

推出一个新的区块链产品,需要将精力集中在重要的、正确的、关键的部分。而非一些简单重复的内容,才能节省时间快速推出应用。而 Alchemy Build 为此提供了解决方案。developers 可以使用 Alchemy Build 来替代重复搭建 Web3 基础框架的麻烦。

每个应用都不可能非常完美,必然是需要不断调整不断迭代的。Alchemy Build 对此也有招可出。Explorer 和 Mempool 功能可以帮助快速找到出错需要调整的地方,Composer 功能则以简洁的面板快速进行调整。


Alchemy Build Composer- Configuration Request Board


Alchemy Build 功能应用,在 CryptoKitties 的创建团队 Dapper Labs 以及 0x 等顶级应用上都得到了体现与验证。

3、Alchemy Monitor

应用发布后进行调整,需要及时的报错反馈。可以选择专门成监控小组,监控项目及时发现错误进行调整。可行性虽有,但经济性不高。

为了释放开发资源,Alchemy Monitor 提供对应用程序运行状况、使用情况、用户行为进行监控分析。以一个 dashboard 的方式呈现并出具简单的报告。

4、Alchemy Notify

Alchemy Notify 的作用在于在开发者和用户之间架起了联络的桥梁。允许开发者向用户推送与用户收益相关的关键信息。包括钱包地址变动、Gas 费变动、Mined Transactions 以及交易情况等信息。

这与某股票 APP 向用户实时推送股价相关的信息类似。可以称之为 Web3 的信息提醒小助手。

 

除却这四个强大功能之外,还有一些功能帮助构建 Web3:

  • Alchemy Amplify 帮助应用进行营销;

  • Enhanced Web3 APIs 在 Alchemy Supernod 的基础上更进一步增强了 API,以更少的请求指令获得更多的数据信息;

  • NFT API 则可以使得开发者快速构建自己的 NFT 应用。

Alchemy 的融资

以上所述功能的强大之处,在融资上得到了验证。或者说,这些功能至少在现阶段得到了市场的认可。从 Footprint Analytics 收录的融资数据来看, Alchemy 公司已经完成了 6 次融资。

  • 2018 年 1 月,完成由 Velocity Canada 投资的种子轮。

  • 2019 年 4 月,完成 1,890 万美元的股权融资。

  • 2019 年 12 月,完成 1,500 万美元的 A 轮融资,Pantera Capital 和 Samsung Ventures 都参与投资。

  • 2021 年 4 月,完成 8,000 万美元 B 轮融资。

  • 2021 年 10 月,完成 2.5 亿美元 C 轮融资,估值达到 35 亿美元,a16z 领投。

  • 2022 年 2 月,完成 2 亿美元的 C-1 轮融资,估值达到 102 亿美元,Lightspeed 和 Silver Lake 领投。

写在最后

Web1 的时代,微软的 Windows 成为 PC(Personal Computer)的动力引擎,Web2 iOS、Android 和 Google 制霸市场。而 Web3 建立在链上的世界,对基建的要求非常高。推出的应用不仅要好,更要速度快。

目前,Alchemy 可以满足 Web3 的快速、可靠地推出应用的基本要求,但依托区块链技术的 Web3 的变化必然是飞速的。Alchemy 需要不断精进,比如除却为 B 端用户提供定制服务外,增加更多的服务的可能。

 

除了 Alchemy 之外,希望可以出现更多的 Web3 的基础设施平台,加速 Web3 的成熟。




 

本文来自 Footprint Analytics 社区贡献。

关于 Footprint Analytics:

Footprint Analytics 是一个一站式可视化区块链数据分析平台。Footprint 协助解决了链上数据清理整合的问题,让用户免费享受 0 门槛的区块链数据分析体验。提供千余种制表模板和拖拽式的作图体验,任何人都可以在 10 秒内建立自己的个性化数据图表,轻松洞察链上数据,了解数据背后的故事。

Footprint Analytics 官网:https://www.footprint.network

Discord 社群:https://discord.gg/3HYaR6USM7

Telegram: https://t.me/joinchat/4-ocuURAr2thODFh

以上内容仅为个人观点,仅供参考、交流,不构成投资建议。如存在明显的理解或数据错误,欢迎反馈。

版权声明:

本作品为作者原创,转载请注明出处。商用转载需联系作者授权,擅自商用转载、摘编或利用其它方式使用的,将追究相关法律责任。

如何创建NFT并OpenSea上展示《alchemy How to Develop an NFT Smart Contract》译

翻译:1_bit
原文:https://docs.alchemy.com/docs/how-to-develop-an-nft-smart-contract-erc721-with-alchemy

注:英文不好各位多多担待

1.如何使用 Alchemy 开发一个 NFT 智能合约

在你第一次使用 solidity 时开发一个智能合约部署在区块链上,你可能会觉得有点难。有关更多的合约安全、节省 gas 这些你都会在开发时经历。

幸运的是,在过去的几个月中,开发人员构建了许多智能合约开发的工具使得开发更加简单。

这些工具例如 OpenZeppelin Wizard (智能合约向导),可以通过鼠标点击后生成一个安全、可靠的智能合约,通过智能合约向导与 Alchemy 和一些 web3 的开发者工具将会使合约开发变得前所未有的简单、快速和可靠。

在本教程中,你将会学习如何使用 Alchemy 、OpenZeppelin Wizard (智能合约向导)、Remix 、goerli网络开发和部署 ERC721 的智能合约。

准确的说,你将会学习以下内容:

  • 如何使用 OpenZeppelin 和 Remix 编写和修改智能合约
  • 获取免费的 Goerli ETH
    https://goerlifaucet.com/
  • 在 Goerli 测试网络上部署便宜的 gas 合约
  • 在 FileBase 上对 NFT token 的元数据进行托管
  • 铸造 NFT 以及在 OpenSea 进行查看

在 youtube 上有对应的视频教程:https://youtu.be/veBu03A6ptw

首先我们从创建智能合约开始。

注:下面标题序号为了读者看的更清楚所以是自己所标注的

1.2 使用 OpenZeppelin 开发 ERC721 标准的智能合约

在之前说过,本教程中,你将会使用 OpenZeppelin 去此案一个只能合约,这么做有两个重要的原因:

  • 将会使你的合约安全
  • 他将会使你的合约符合标准(遵循标准意思是自动化了不需要自己写)

当你编写一个智能合约时,安全是很关键的,有很多智能合约由于安全性太差,导致数亿美元被恶意盗窃的例子。

你也不想在你合约部署在区块链网络上后就会被窃取吧?

OpenZeppelin 就是由此而生,是最大的智能合约标准维护者之一,允许开发人员使用已经被 OpenZeppelin 进行代码审计后的可靠合约代码。

接下来你需要做的第一件事就是打开这个链接 https://docs.openzeppelin.com/contracts/4.x/wizard 去创建安全的合约代码。

当你进入页面后,你将会看到以下的编辑器:


点击在左上角(往右边数第二个)的 ERC721 按钮,选择你要使用的 ERC 标准:


现在,你已经选择你合约的标准,在左侧的菜单中,你可以看到一些选项。

让我们从选择 token 的名称和符号开始。点击在文本框中的 “MyToken” 并且给他一个名称,对应的 Symbol 类型的文本框也可以改成你想要的名字,不过在 Base URI 文本框中我们可以留空,这个可以给用户进行传递,因为 IPFS 的元数据我们将会存储在 OpenSea 中。

1.3 选择 NFT token 的功能

现在需要你去选择一些你想要添加到合约中的功能(剩下的一句没翻译,感觉啰嗦了):


在本节中,你需要集成以下所列出的功能:

  • Mintable (铸币)你将会创建一个 mint 方法并且只有特殊账户可使用(一般是 owner)
  • Autoincrement IDs( tokenid 自动加1)这个功能将会自动的为你的 NFT 的 ID 自动分配增量 ID
  • Enumerable(枚举)能够访问链上的 token 枚举 以及 totalSupply 之类的功能,像 ERC721 的 URI 默认情况下是不存在的,需要将元数据和对应的图片进行关联。(其实这里我不是很清楚啥意思)
  • URI Storage 存储一个 URI 与 NFT 关联(这个需要我们传入的)

在当前教程中,你应该不想创建一个 NFT 还有一些增发、销毁、暂停、投票之类需要“经济学”支持的NFT,那么就不要勾选 BurnablePausableVotes

  • Burnable - 销毁 token
  • Pausable - token 转移、销售等
  • Votes -投票类

如果你想去学习更多看这里:https://docs.openzeppelin.com/contracts/4.x/api/token/erc721

现在你已经有了需要的功能,OpenZeppelin 将会填充剩下的合约代码,此时你应该在合约向导中看到跟下面差不多的代码:

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

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

contract Alchemy is ERC721, ERC721Enumerable, ERC721URIStorage, Ownable 
    constructor() ERC721("Alchemy", "ALC") 

    function safeMint(address to, uint256 tokenId, string memory uri)
        public
        onlyOwner
    
        _safeMint(to, tokenId);
        _setTokenURI(tokenId, uri);
    

    // The following functions are overrides required by Solidity.

    function _beforeTokenTransfer(address from, address to, uint256 tokenId)
        internal
        override(ERC721, ERC721Enumerable)
    
        super._beforeTokenTransfer(from, to, tokenId);
    

    function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) 
        super._burn(tokenId);
    

    function tokenURI(uint256 tokenId)
        public
        view
        override(ERC721, ERC721URIStorage)
        returns (string memory)
    
        return super.tokenURI(tokenId);
    

    function supportsInterface(bytes4 interfaceId)
        public
        view
        override(ERC721, ERC721Enumerable)
        returns (bool)
    
        return super.supportsInterface(interfaceId);
    

是时候复制我们的代码去 Remix 上修改和部署了。

1.4 在 REMIX 上修改和部署你的 ERC721 合约

现在你已经有了一个 ERC721 的智能合约,现在开始让我们去修改和部署它到 Goerli 测试网络上。你将会使用 Remix IDE,它是一个为 solidity 设计的免费的智能合约 web 端的开发环境。

首先,你可能注意到了,在 OpenZeppelin Wizard 编辑器的顶部,有一个 “Open in Remix” 的按钮:


点击按钮后将会在浏览器中打开一个新的页面。

1.5 使用 Remix 修改你的NFT 智能合约

从合约代码的头部开始, “SPDX-License-Identifier” 是你的开源标准协议,在 web3 应用中开源是可以保持项目的可信度的,是需要去做的。

// SPDX-License-Identifier: MIT

接着是 pragma,这是用于指定当前智能合约的编译版本,如果你使用 ^ 符号就表示当前合约代码使用在 0.8.0 到 0.8.9 之间适用。

pragma solidity ^0.8.4;

然后我们导入库并且初始化(还没到)我们的智能合约:

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/Counters.sol";

接着开始初始化合约,继承这些导入的库标准:

 contract Alchemy is ERC721, ERC721Enumerable, ERC721URIStorage, Ownable ...

你可以注意到,这个 safemint 方法有一个 “only owner” 的修饰,这个修饰只允许当前合约的所有者调用这个方法去铸造 NFT,如果你想所有人都可以使用 mint 方法,那么
你可以删除 Mint 方法的 onlyOwner 修饰:

function safeMint(address to, string memory uri) public 
    uint256 tokenId = _tokenIdCounter.current();
    _tokenIdCounter.increment();
    _safeMint(to, tokenId);
    _setTokenURI(tokenId, uri);

你也可以去删除在合约引入说明中的 Ownable:

import "@openzeppelin/contracts/access/Ownable.sol";

现在每个人都可以去使用 mint 创建 NFT 了,但你需要避免用户 mint 过多的 NFT,那么就需要制定一个 mint NFT 的最大上限。

比如说你想要用户创造上限为 10000 的 NFT,那么新建一个 uint256 的变量,这个变量名叫做 MAX_SUPPLY,给与值为 10000:

Counters.Counter private _tokenIdCounter;
    uint256 MAX_SUPPLY = 100000;

    constructor() ERC721("Alchemy", "ALCH") 

接着,让我们进入 safeMint 方法中增加 require 判断当前对应的 NFT 数量:

require(_tokenIdCounter.current() <= MAX_SUPPLY, "I'm sorry we reached the cap");

现在,你一讲限制了所提供最大的 NFT 数,那么此时就编译智能合约在 Goerli 测试网上部署吧。你需要创建一个免费的 Alchemy 账户(主要是提供了RPC)。

1.6 创建免费 Alchemy 账户

首先,让我们去 alchemy.com 导航上点击 Login 创建一个新的账户:

选择 ethereum :


给你的应用和你的团队命名,选择 goerli 网络,最后点击“create app”创建项目:


当你完成上面的流程后,我们将会跳转到控制面板,点击你刚刚命名的应用进入,此时,点击在右上角的 “VIEW KEY” 按钮可以查看 APIKEY 和 HTTPURL 等信息:

下一步,你需要去添加 Alchemy 的 Goerli 的 RPC Provider 到 Metamask ,如果你没有安装 metamask,请确保安装,若没有 wallet 请先按照以下教程添加一个 wallet 到你的浏览器中,点击“add network”:

你将会跳转到以下页面,你需要填写 goerli 网络和 RPC URL 信息:


添加以下信息到表单中:

  • Network name: Alchemy Goerli 网络名
  • New RPC URL: the HTTP URL of the Goerli Alchemy Application 你刚刚在 alchemy 上的 http 的 rpc url
  • Chain ID: 5
  • Currency Symbol: GoerliETH 网络标识
  • Block Explorer: https://goerli.etherscan.io

非常棒,你刚刚已经把 alchemy 的 goerli 网络添加到了 metamask 。

现在就准备开始在 goerli 中部署我们的智能合约吧,但是我们需要 get some goerli test eth(文字限定所以就不翻译了,此处获取 goerli test eth 可以查找对应的 faucet,such as goerlifaucet.com)。

1.7 编译和部署 NFT 智能合约在 goerli 测试网络上

返回 remix,让我们点击网页左侧菜单中的蓝色 compiler 按钮进行编译:


此时点击 部署按钮进入到 “Deploy and Run Transactions" 菜单中,点击 环境 Environment 在下拉菜单中选择 “injected Web3”。

确保 metamask wallet 已经连接了 goerli network,在 Contract 的下拉菜单中 选择 NFT 智能合约(你要编译的)没然后点击 Deploy部署(一定要先编译):

此时 metamask 将会弹出一个窗口,点击 sign,并且继续支付 gas 费用。

如果一切工作都很顺利,那么在 10秒之后,你可以看到这个合约列表下将会出现已经部署的合约:

1.8 什么是 NFT 元数据


为了让合约返回一个 OpenSea 的元数据,我们需要设置一个 URI,ERC721 的 tokenUri 方法会返回一个 HTTP 或 IPFS 的URL,例如 ipfs://bafkreig4rdq3nvyg2yra5x363gdo4xtbcfjlhshw63we7vtlldyyvwagbq ,查询时,这个 URL 将会返回一个 JSON 数据,其中包括了你的 token 的元数据。

你可以查看更多官方所提供的元数据标准 https://docs.opensea.io/docs/metadata-standards

1.8 怎么样去格式化你的 NFT 元数据

根据 OpenSea 的文档,一个 NFT 的元数据应该是存储在 json 文件中,这个文件接口如下:

 
  "description": "YOUR DESCRIPTION",
  "external_url": "YOUR URL",
  "image": "IMAGE URL",
  "name": "TITLE", 
  "attributes": [
    
      "trait_type": "Base", 
      "value": "Starfish"
    , 
    
      "trait_type": "Eyes", 
      "value": "Big"
    , 
    
      "trait_type": "Mouth", 
      "value": "Surprised"
    , 
    
      "trait_type": "Level", 
      "value": 5
    , 
    
      "trait_type": "Stamina", 
      "value": 1.4
    , 
    
      "trait_type": "Personality", 
      "value": "Sad"
    , 
    
      "display_type": "boost_number", 
      "trait_type": "Aqua Power", 
      "value": 40
    , 
    
      "display_type": "boost_percentage", 
      "trait_type": "Stamina Increase", 
      "value": 10
    , 
    
      "display_type": "number", 
      "trait_type": "Generation", 
      "value": 2
    ]
  

一下是一个有关这些属性的简短说明:

属性说明
image这是图片的 URL, 可以是任何的图像,可以是 IPFS 上存储的 URL 路径,建议使用 350+350 的大小
image_dataSVG图像,如果你想使用动态图像(不建议),只有在你数据中不包括 image 时可以使用
external_url这个 URL 是显示在 OpenSea 资源下凡的图片URL,你可以在 OpenSea 之外的站点上查看
description这个NFT 的描述
name这个NFT 的名称
attributes属性,将会显示在 OpenSea 页面上
background_colorOpenSea 上项目的背景色,必须是十六进制不需要添加“#”之类的前置
animation_url多媒体 url

了解了一些元数据内容后,学习如何存储元数据在 IPFS上。

1.9 在 IPFS 存储元数据

首先,导航去 fillebase 创建一个账户。

登录后,点击左侧菜单的 bucket 按钮 创建一个新的 bucket:


进入 bucket,点击上传按钮,上传你想要作为 NFT 使用的图片。

上传你完毕后,复制 IPFS GateWay 网关的 URL:


使用一个文本编辑器,复制下面的 json code:

 
  "description": "This NFT proves I've created and deployed my first ERC20 smart contract on Goerli with Alchemy Road to Web3",
  "external_url": "Alchemy.com/?a=roadtoweb3weekone",
  "image": "https://ipfs.filebase.io/ipfs/bafybeihyvhgbcov2nmvbnveunoodokme5eb42uekrqowxdennt2qyeculm",
  "name": "A cool NFT", 
  "attributes": [
    
      "trait_type": "Base", 
      "value": "Starfish"
    , 
    
      "trait_type": "Eyes", 
      "value": "Big"
    , 
    
      "trait_type": "Mouth", 
      "value": "Surprised"
    , 
    
      "trait_type": "Level", 
      "value": 5
    , 
    
      "trait_type": "Stamina", 
      "value": 1.4
    , 
    
      "trait_type": "Personality", 
      "value": "Sad"
    , 
    
      "display_type": "boost_number", 
      "trait_type": "Aqua Power", 
      "value": 40
    , 
    
      "display_type": "boost_percentage", 
      "trait_type": "Stamina Increase", 
      "value": 10
    , 
    
      "display_type": "number", 
      "trait_type": "Generation", 
      "value": 2
    ]
  

随后保存文件为 “metadata.json”,返回到 bucket 中上传 metadata.json 文件:


最后,点击 CID 并且进行赋值,你将需要这个在铸造 NFT 时 使用到:

1.10 铸造你的 NFT

返回到 remix 中,在你部署的合约之下,找到对应的方法列表:

橙色方法时写入区块链的方法,蓝色方法时读取区块链内容的方法。

点击 safeMint 方法的下拉选项,复制你的地址,并且添加对应的 URI字段,这个字段格式如下:

ipfs://\\<your\\_metadata\\_cid>

单击交易后弹出一个 metamask 的窗口,支付 gas。

点击 sign 后将会铸造你的第一个 nft。

接着转移到 OpenSea 检查你的元数据是否被正确读取到。

1.11 在 OpenSea 上展现你的 NFT

进入 OpenSEA 的测试网络 https://testnets.opensea.io/zh-CN 并使用钱包登录,此时点击你的头像,你可以看到一个新铸造的 NFT,如果你的图片没有显示,点击 refresh metadata 按钮进行刷新:

有时候 OpenSea 需要一段时间 6h 后显示这个 NFT:

以上是关于Blockchain 基建大师 Alchemy 会魔法吧的主要内容,如果未能解决你的问题,请参考以下文章

如何创建NFT并OpenSea上展示《alchemy How to Develop an NFT Smart Contract》译

如何创建NFT并OpenSea上展示《alchemy How to Develop an NFT Smart Contract》译

安装了sql-alchemy但导入sql_alchemy时失败

如何使用 Alchemy 将 C++ 移植到 swf?

python Sql Alchemy样板

ORM查询多对多一,Flask sql-alchemy