使用 Infura 和 Avalanche C-Chain 部署 ERC721 智能合约和铸造会计 NFT
本教程展示了开发者如何使用Avalanche部署一个ERC721智能合约,然后铸造一系列NFT,并与代表复式会计交易的元数据链接。
本教程展示了开发者如何使用Avalanche[部署一个ERC721智能合约,然后铸造一系列NFT](https://learnblockchain.cn/article/2304),并与代表复式会计交易的元数据链接。
在一个用例中,一家公司希望为其某一年的财务业绩创建一个去中心化的财务记录。在年初,以及每个季度末,该公司铸造了一系列的NFT,其元数据显示其资产负债表的变化。这些变化是一个永久的记录,可以被银行用来支持贷款方案。
## 先决条件
MetaMask 钱包
Infura 帐户
Node.js(版本 16 或更高版本),并安装了 npm 或 yarnIDE,例如 Microsoft Visual Studio Code
![1.png](https://img.learnblockchain.cn/attachments/2022/10/b5ovPyED6340d25c9a7c0.png)
### 准备你的 MetaMask 钱包我们将使用 Avalanche FUJI C-Chain 测试网,因此我们需要使用测试 AVAX 代币为我们的钱包提供资金。我们的第一步是通过定义自定义网络将 FUJI C-Chain 添加到 MetaMask:
登录 MetaMask,单击网络下拉菜单,然后选择“添加网络”并填写以下信息:
网络名称:Avalanche FUJI C-Chain
新的 RPC URL:https://api.avax-test.network/ext/bc/C/rpc
链号:43113
符号:AVAX资源管理器:https://testnet.snowtrace.io/
### 2. 将钱包地址添加到配置文件
![2.png](https://img.learnblockchain.cn/attachments/2022/10/n9u57WB46340d2a915a06.png)
将钱包地址复制到剪贴板。
如下所述,将钱包地址粘贴到 src/config.tsx 的 WALLET_ADDRESS 字段中,替换占位符字符串 ( “xxxxxxx”)。
### 3. 将私钥添加到配置文件
![3.png](https://img.learnblockchain.cn/attachments/2022/10/qf7YUpnr6340d2b00e248.png)
单击“Export private key”,然后输入浏览器密码以启用复制。
如下所述,将私钥粘贴到 src/config.tsx 的 PRIVATE_KEY 字段中,替换占位符字符串(“xxxxxxx”)。
### 4. 从 Avalanche Fuji Faucet 获取 AVAX 代币接下来,我们访问 https://faucet.avax.network/
请求 2 个 AVAX, 单击连接按钮将您的 MetaMask 钱包地址复制到表单中,然后按 REQUEST 2 AVAX。鉴于 Avalanche 链的速度,余额应该很快出现在您的钱包中。
![4.png](https://img.learnblockchain.cn/attachments/2022/10/mo6Z6Rp26340d2b72d542.png)
### 5. 使用 Open Zeppelin 向导创建 ERC721 合约
我们使用 Open Zeppelin 向导来创建我们的 ECR721 合约。
访问 https://wizard.openzeppelin.com/ 并选择 ERC721 选项卡。
创建名称和符号。对于此示例,我们将 Base URI 字段留空。
选择 Mintable 和 Auto increment ids、Burable 和 URI Storage。
![5.png](https://img.learnblockchain.cn/attachments/2022/10/D48vbABX6340d2bd7433d.png)
完成此操作后,单击“在 Remix 中打开”按钮。您的浏览器将打开一个带有此代码视图的选项卡。
![6.png](https://img.learnblockchain.cn/attachments/2022/10/u5ZzAQLP6340d2c3dce79.png)
点击“Compile Contract”按钮,在 Remix 中编译合约,应该会显示正确的编译器版本。
![7.png](https://img.learnblockchain.cn/attachments/2022/10/wibNWEV56340d2caa5068.png)
单击“ABI”图标以从 Remix 复制 ABI。如下所述,将其粘贴到下面引用的 GitHub 存储库中的空文件 src/abi.json 中。
![8.png](https://img.learnblockchain.cn/attachments/2022/10/xmwhtpKN6340d2d21fe8f.png)
将合约部署到 Avalanche Fuji C-Chain。在 Remix 面板的左侧,转到第一个下拉菜单“Environment”,并确保 Injected Provider 设置为 Metamask,它应该已经设置为 Fuji C-Chain。
![9.png](https://img.learnblockchain.cn/attachments/2022/10/KeUsmtcm6340d2db0ab30.png)
从 Remix 复制合约地址。在 https://testnet.snowtrace.io/ 访问 Fuji Snowtrace 区块浏览器。将合约地址粘贴到搜索栏中,您将看到已部署的合约。
![10.png](https://img.learnblockchain.cn/attachments/2022/10/ZwMTY9Vf6340d2e496e89.png)
如下所述,将合约地址粘贴到 src/config.tsx 的 CONTRACT_ADDRESS 字段中,替换占位符字符串(“xxxxxxx”)。
### 6. 在 Infura 中创建 Avalanche 项目转到您的 Infura 仪表板,然后单击“创建新密钥”按钮。
选择“Web3 API”以查看 Avalanche 端点。
![11.png](https://img.learnblockchain.cn/attachments/2022/10/cOIHqbia6340d2ee15fdd.png)
选择 Avalanche C-Chain Fuji 测试网端点。
![12.png](https://img.learnblockchain.cn/attachments/2022/10/uONXhthB6340d2f42f0ab.png)
复制端点。这是您项目的 URL,将以这种格式显示:https://avalanche-fuji.infura.io/v3/xxxxxxxxxxxxxxxxxxxxxxx如下所述,将其粘贴到 src/config.tsx 中的 INFURA_FUJI_PROVIDER 字段中,替换占位符字符串(“xxxxxxx”)。
### 7. 在 Infura 中创建一个 IPFS 项目NFT 包含描述存储在链下的图像和其他相关资源的元数据,通常在 IPFS 去中心化文件存储网络上。为了铸造 Avalanche NFT,我们需要在您的 Infura 帐户中创建一个 IPFS 项目。
在“创建 IPFS 项目”下,单击“开始”
![13.png](https://img.learnblockchain.cn/attachments/2022/10/hVdNaeQD6340d2ffc761b.png)
命名您的 IPFS 项目。
![14.png](https://img.learnblockchain.cn/attachments/2022/10/CuJJK68V6340d3072e844.png)
启用专用网关。
![15.png](https://img.learnblockchain.cn/attachments/2022/10/wBtXDKqb6340d30d39c7a.png)
如下所述,将 PROJECT ID 和 API KEY SECRET 粘贴到 src/config.tsx 中的 INFURA_IPFS_PROJECT_ID 和 INFURA_IPFS_API_KEY_SECRET 字段中,替换占位符字符串(“xxxxxxx”)。
创建一个对您的项目唯一的子域名。
![16.png](https://img.learnblockchain.cn/attachments/2022/10/kbPIsYsz6340d315ad39c.png)
将字符串“/ipfs/”添加到您创建的子域名中,然后将整个名称 (https://your-name.infura-ipfs.io/ipfs/) 粘贴到 src/config.tsx 中的 INFURA_IPFS_GATEWAY 字段中 ,替换占位符字符串(“xxxxxxx”)。
### 8. 访问 GitHub 仓库来克隆这个项目https://github.com/ConsenSys/avalanche-tutorial-accounting
在构建和运行应用程序之前,您需要完成以下两个步骤:
如上所述,将 ABI 的内容从 Remix intp 复制到 src/abi.json 文件中。
填写 src/config.tsx 中包含的值,替换占位符字符串(“xxxxx”)”
常量配置 = {INFURA_FUJI_PROVIDER: "xxxxxxxxxxxx",
INFURA_IPFS_PROJECT_ID: "xxxxxxxxxx",
INFURA_IPFS_API_KEY_SECRET: "xxxxxxxxxx",I
NFURA_IPFS_GATEWAY: "xxxxxxxxxxxx",
合同地址:“xxxxxxxxx”,
WALLET_ADDRESS: "xxxxxxxxxx",PRIVATE_KEY:"xxxxxxxxxx",};
注意:如果您正在执行其他提交,而不是将这些值直接写入 config.tsx,而是在 src 目录中创建一个名为“config_local.tsx”的文件。您可以将这些值存储在那里,然后在运行应用程序之前将整个配置结构复制到 config.tsx 中。由于 .gitignore 文件有一个 config_local.tsx 条目,因此您应避免意外提交实际值以供所有人查看。在任何其他提交之前,删除对 config.tsx 的更改,以便文件恢复为占位符字符串。
要构建应用程序,请运行 npm install 或 yarn install。
要运行应用程序,请运行 npm start 或 yarn start。
## 概括
该应用程序使用户能够铸造一组包含元数据的 NFT,这些元数据代表会计系统中的一系列双重条目。从一张空的资产负债表开始,我们按照三个步骤记录每个复式分录:
Entry - 显示受双重条目影响的每个帐户的更改。
IPFS - 将表示这些更改的 JSON 对象上传到 IPFS。
Mint - 使用包含 IPFS 文件标识符的 URI 铸造 NFT
下面的应用程序路线图显示了连接您的 MetaMask 钱包的步骤,以及生成条目的四个交易:
初始股权投资
购买制造设备
从供应商处采购库存
把产品卖给客户对于每一步,我们都会根据应用程序中包含的模拟数据显示账户的变化。随着每个 NFT 的铸造,我们 MetaMask 钱包中的 AVAX 测试代币的余额会减少交易费用的金额。您从 Avalanche C-Chain Fuji 测试水龙头获得的 2 个令牌应该足以多次运行此应用程序。
在铸造第四个 NFT 后,Entry、IPFS 和 Mint 按钮将被禁用。
用户可以通过重新加载页面来重置应用程序以启动另一个系列的四个条目。
### 启动应用程序后
单击”Entry”按钮以过帐第一个会计条目。
![17.png](https://img.learnblockchain.cn/attachments/2022/10/15FDvVdl6340d32808bbd.png)
### Entry 1之后
单击“IPFS”按钮上传代表条目的 JSON 对象。
![18.png](https://img.learnblockchain.cn/attachments/2022/10/ipRBvMwn6340d339ce14f.png)
### IPFS 1 之后
单击“Mint”按钮开始铸造NFT。
![19.png](https://img.learnblockchain.cn/attachments/2022/10/lxdrfUqw6340d34183276.png)
### 铸造 1 之后
等待进度指示器指示铸造已完成。
![20.png](https://img.learnblockchain.cn/attachments/2022/10/mppnn3oi6340d349868fc.png)
### Entry 2 之后
再次启用时单击“Entry”按钮以重复第二个条目的过程。
![21.png](https://img.learnblockchain.cn/attachments/2022/10/RuGKRpyD6340d3509ecdb.png)
### Entry 3 之后
再次启用时单击“Entry”按钮以重复第三个条目的过程。
![22.png](https://img.learnblockchain.cn/attachments/2022/10/dot6z7666340d3588e44f.png)
### Entry 4 之后
再次启用时单击“Entry”按钮以重复第四个条目的过程。
![23.png](https://img.learnblockchain.cn/attachments/2022/10/quzsGb446340d3600cbb5.png)
### 铸造 4 之后
铸造第四个 NFT 后,“Entry”、“IPFS”和“Mint”按钮将被禁用。
![24.png](https://img.learnblockchain.cn/attachments/2022/10/HtfXFbg56340d36879150.png)
### Snowtrace 区块浏览器 - 合约
在每一系列条目之后,交易将出现在 Snowtrace Block Explorer 中显示的合约中。https://testnet.snowtrace.io/
![25.png](https://img.learnblockchain.cn/attachments/2022/10/RNTuvPib6340d37100512.png)
### Snowtrace 区块浏览器 - 交易
在这个 Transaction Details 视图中,我们看到最近铸造的 NFT 的 TokenID 为 74。这个 NFT 的元数据应该显示第四个条目之后的帐户状态。
![26.png](https://img.learnblockchain.cn/attachments/2022/10/ZF1G7mvm6340d3783f6b4.png)
Remix- 调用 tokenURI
在 Remix 中,我们可以在 tokenURI 调用字段中输入该 TokenID。单击“调用”按钮将显示存储元数据的 IPFS URL。
![27.png](https://img.learnblockchain.cn/attachments/2022/10/C7HWG4tB6340d37f2ea53.png)
### 浏览器中的 tokenURI 输出
将该 URL 粘贴到浏览器中会显示代表第四个条目的 JSON 对象。
![28.png](https://img.learnblockchain.cn/attachments/2022/10/ge4Wuxq56340d387367e5.png)
### 使用外部数据馈送
在本教程中,我们使用占位符数据铸造了一系列代表公司财务状况变化的 NFT。来自公司会计系统的实时数据可以输入到像 Chainlink 这样的去中心化预言机网络中,以提供其绩效的确定性视图。这可以提供端到端的审计解决方案,公司可以与金融机构和其他相关方共享。
> 本文首发于:https://mp.weixin.qq.com/s/pOO8v2z-yARNLWbKu5jUdA
Avalanche 是一个权益证明 (PoS) 的第 1 层链,支持在以太坊虚拟机 (EVM) 上运行的与 Solidity 兼容的 dapp。Infura 现在支持合约链 (C-Chain),它是 EVM 的一个实例。它支持使用 C-Chain 的 API 创建智能合约。开发人员可以编写使用 Infura 通过 JSON-RPC 端点调用 Avalanche C-Chain 的去中心化应用程序 (dapps)。
本教程展示了开发者如何使用Avalanche部署一个ERC721智能合约,然后铸造一系列NFT,并与代表复式会计交易的元数据链接。
在一个用例中,一家公司希望为其某一年的财务业绩创建一个去中心化的财务记录。在年初,以及每个季度末,该公司铸造了一系列的NFT,其元数据显示其资产负债表的变化。这些变化是一个永久的记录,可以被银行用来支持贷款方案。
先决条件
MetaMask 钱包 Infura 帐户 Node.js(版本 16 或更高版本),并安装了 npm 或 yarnIDE,例如 Microsoft Visual Studio Code
准备你的 MetaMask 钱包我们将使用 Avalanche FUJI C-Chain 测试网,因此我们需要使用测试 AVAX 代币为我们的钱包提供资金。我们的第一步是通过定义自定义网络将 FUJI C-Chain 添加到 MetaMask:
登录 MetaMask,单击网络下拉菜单,然后选择“添加网络”并填写以下信息: 网络名称:Avalanche FUJI C-Chain 新的 RPC URL:https://api.avax-test.network/ext/bc/C/rpc 链号:43113 符号:AVAX资源管理器:https://testnet.snowtrace.io/
2. 将钱包地址添加到配置文件
将钱包地址复制到剪贴板。 如下所述,将钱包地址粘贴到 src/config.tsx 的 WALLET_ADDRESS 字段中,替换占位符字符串 ( “xxxxxxx”)。
3. 将私钥添加到配置文件
单击“Export private key”,然后输入浏览器密码以启用复制。 如下所述,将私钥粘贴到 src/config.tsx 的 PRIVATE_KEY 字段中,替换占位符字符串(“xxxxxxx”)。
4. 从 Avalanche Fuji Faucet 获取 AVAX 代币接下来,我们访问 https://faucet.avax.network/
请求 2 个 AVAX, 单击连接按钮将您的 MetaMask 钱包地址复制到表单中,然后按 REQUEST 2 AVAX。鉴于 Avalanche 链的速度,余额应该很快出现在您的钱包中。
5. 使用 Open Zeppelin 向导创建 ERC721 合约
我们使用 Open Zeppelin 向导来创建我们的 ECR721 合约。 访问 https://wizard.openzeppelin.com/ 并选择 ERC721 选项卡。 创建名称和符号。对于此示例,我们将 Base URI 字段留空。 选择 Mintable 和 Auto increment ids、Burable 和 URI Storage。
完成此操作后,单击“在 Remix 中打开”按钮。您的浏览器将打开一个带有此代码视图的选项卡。
点击“Compile Contract”按钮,在 Remix 中编译合约,应该会显示正确的编译器版本。
单击“ABI”图标以从 Remix 复制 ABI。如下所述,将其粘贴到下面引用的 GitHub 存储库中的空文件 src/abi.json 中。
将合约部署到 Avalanche Fuji C-Chain。在 Remix 面板的左侧,转到第一个下拉菜单“Environment”,并确保 Injected Provider 设置为 Metamask,它应该已经设置为 Fuji C-Chain。
从 Remix 复制合约地址。在 https://testnet.snowtrace.io/ 访问 Fuji Snowtrace 区块浏览器。将合约地址粘贴到搜索栏中,您将看到已部署的合约。
如下所述,将合约地址粘贴到 src/config.tsx 的 CONTRACT_ADDRESS 字段中,替换占位符字符串(“xxxxxxx”)。
6. 在 Infura 中创建 Avalanche 项目转到您的 Infura 仪表板,然后单击“创建新密钥”按钮。
选择“Web3 API”以查看 Avalanche 端点。
选择 Avalanche C-Chain Fuji 测试网端点。
复制端点。这是您项目的 URL,将以这种格式显示:https://avalanche-fuji.infura.io/v3/xxxxxxxxxxxxxxxxxxxxxxx如下所述,将其粘贴到 src/config.tsx 中的 INFURA_FUJI_PROVIDER 字段中,替换占位符字符串(“xxxxxxx”)。
7. 在 Infura 中创建一个 IPFS 项目NFT 包含描述存储在链下的图像和其他相关资源的元数据,通常在 IPFS 去中心化文件存储网络上。为了铸造 Avalanche NFT,我们需要在您的 Infura 帐户中创建一个 IPFS 项目。
在“创建 IPFS 项目”下,单击“开始”
命名您的 IPFS 项目。
启用专用网关。
如下所述,将 PROJECT ID 和 API KEY SECRET 粘贴到 src/config.tsx 中的 INFURA_IPFS_PROJECT_ID 和 INFURA_IPFS_API_KEY_SECRET 字段中,替换占位符字符串(“xxxxxxx”)。
创建一个对您的项目唯一的子域名。
将字符串“/ipfs/”添加到您创建的子域名中,然后将整个名称 (https://your-name.infura-ipfs.io/ipfs/) 粘贴到 src/config.tsx 中的 INFURA_IPFS_GATEWAY 字段中 ,替换占位符字符串(“xxxxxxx”)。
8. 访问 GitHub 仓库来克隆这个项目https://github.com/ConsenSys/avalanche-tutorial-accounting
在构建和运行应用程序之前,您需要完成以下两个步骤: 如上所述,将 ABI 的内容从 Remix intp 复制到 src/abi.json 文件中。 填写 src/config.tsx 中包含的值,替换占位符字符串(“xxxxx”)” 常量配置 = {INFURA_FUJI_PROVIDER: "xxxxxxxxxxxx", INFURA_IPFS_PROJECT_ID: "xxxxxxxxxx", INFURA_IPFS_API_KEY_SECRET: "xxxxxxxxxx",I NFURA_IPFS_GATEWAY: "xxxxxxxxxxxx", 合同地址:“xxxxxxxxx”, WALLET_ADDRESS: "xxxxxxxxxx",PRIVATE_KEY:"xxxxxxxxxx",};
注意:如果您正在执行其他提交,而不是将这些值直接写入 config.tsx,而是在 src 目录中创建一个名为“config_local.tsx”的文件。您可以将这些值存储在那里,然后在运行应用程序之前将整个配置结构复制到 config.tsx 中。由于 .gitignore 文件有一个 config_local.tsx 条目,因此您应避免意外提交实际值以供所有人查看。在任何其他提交之前,删除对 config.tsx 的更改,以便文件恢复为占位符字符串。 要构建应用程序,请运行 npm install 或 yarn install。 要运行应用程序,请运行 npm start 或 yarn start。
概括
该应用程序使用户能够铸造一组包含元数据的 NFT,这些元数据代表会计系统中的一系列双重条目。从一张空的资产负债表开始,我们按照三个步骤记录每个复式分录: Entry - 显示受双重条目影响的每个帐户的更改。 IPFS - 将表示这些更改的 JSON 对象上传到 IPFS。 Mint - 使用包含 IPFS 文件标识符的 URI 铸造 NFT
下面的应用程序路线图显示了连接您的 MetaMask 钱包的步骤,以及生成条目的四个交易:
初始股权投资 购买制造设备 从供应商处采购库存 把产品卖给客户对于每一步,我们都会根据应用程序中包含的模拟数据显示账户的变化。随着每个 NFT 的铸造,我们 MetaMask 钱包中的 AVAX 测试代币的余额会减少交易费用的金额。您从 Avalanche C-Chain Fuji 测试水龙头获得的 2 个令牌应该足以多次运行此应用程序。 在铸造第四个 NFT 后,Entry、IPFS 和 Mint 按钮将被禁用。 用户可以通过重新加载页面来重置应用程序以启动另一个系列的四个条目。
启动应用程序后
单击”Entry”按钮以过帐第一个会计条目。
Entry 1之后
单击“IPFS”按钮上传代表条目的 JSON 对象。
IPFS 1 之后
单击“Mint”按钮开始铸造NFT。
铸造 1 之后
等待进度指示器指示铸造已完成。
Entry 2 之后
再次启用时单击“Entry”按钮以重复第二个条目的过程。
Entry 3 之后
再次启用时单击“Entry”按钮以重复第三个条目的过程。
Entry 4 之后
再次启用时单击“Entry”按钮以重复第四个条目的过程。
铸造 4 之后
铸造第四个 NFT 后,“Entry”、“IPFS”和“Mint”按钮将被禁用。
Snowtrace 区块浏览器 - 合约
在每一系列条目之后,交易将出现在 Snowtrace Block Explorer 中显示的合约中。https://testnet.snowtrace.io/
Snowtrace 区块浏览器 - 交易
在这个 Transaction Details 视图中,我们看到最近铸造的 NFT 的 TokenID 为 74。这个 NFT 的元数据应该显示第四个条目之后的帐户状态。
Remix- 调用 tokenURI 在 Remix 中,我们可以在 tokenURI 调用字段中输入该 TokenID。单击“调用”按钮将显示存储元数据的 IPFS URL。
浏览器中的 tokenURI 输出
将该 URL 粘贴到浏览器中会显示代表第四个条目的 JSON 对象。
使用外部数据馈送
在本教程中,我们使用占位符数据铸造了一系列代表公司财务状况变化的 NFT。来自公司会计系统的实时数据可以输入到像 Chainlink 这样的去中心化预言机网络中,以提供其绩效的确定性视图。这可以提供端到端的审计解决方案,公司可以与金融机构和其他相关方共享。
本文首发于:https://mp.weixin.qq.com/s/pOO8v2z-yARNLWbKu5jUdA
- 发表于 2022-10-06 11:38
- 阅读 ( 174 )
- 学分 ( 0 )
- 分类:以太坊
评论