创建AtomicAssets集合
#教程 #node #区块链 #wax

介绍

在本节中,我们将利用Atomicassets智能合约来在WAX TestNet上创建一个集合。

让我们创建我们的示例集合。在这套教程和示例中,我们将创建一套新的NFT,称为“ babychicks” - 可爱的小鸡,您可以孵化,收集和交易。

原子ASSASES动作

要开始,我们需要使用AtomicAssets为我们的NFT创建一个集合。

让我们看一下createcol架构。

createcol documentation

编写脚本时,我们将需要填写所有这些信息。让我们看一下每个领域:

  • author-在我们的示例中,作者将与我们上次示例的付款人相同:waxcourse123。这应该是您的帐户名称。
  • collection_name-在这种情况下,我们将其称为babychicknft 请注意,这是类型为name,而不是string。一个名称有一些严格的规则,我们将在以后介绍。
  • allow_notify-我们现在将其设置为true。
  • authorized_accounts-我们将保持空为空。
  • notify_accounts-我们将保持空为空。
  • market_fee-通常为5%(0.05),但随着项目而异。
  • data-总是让我感到不安,这是一张自由形式的属性地图,但是如果您希望您的项目在Atomichub上起飞,则需要一组特殊的属性来开始。这是创建您的收藏时大部分工作的地方。

让我们深入研究data部分。这是我们将用来创建收集数据的模板:

const data = [
    { "key": "name", "value": ["string", "Baby Chicks"] },
    { "key": "img", "value": ["string", "QmRTg2dhvSR7Lbmwvfv4z5c7Eisj7Lb199wsc5ijXHGEBZ"] },
    { "key": "description", "value": ["string", "This is a collection created for tutorials"] },
    { "key": "url", "value": ["string", "https://capsulecat.com"] },
    {
        "key": "socials", "value": ["string", JSON.stringify({
            "twitter": "thecapsulecat",
            "github": "capsulecat",
        })]
    },
    {
        "key": "creator_info", "value": ["string", JSON.stringify({
            "address": "",
            "company": "",
            "name": "",
            "registration_number": ""
        })]
    },
    {
        "key": "images", "value": ["string", JSON.stringify({
            "banner_1920x500": "",
            "logo_512x512": ""
        })]
    }
]

您希望用网站的字符串以及Twitter,GitHub,Facebook,Medium,Telegram,Telegram,YouTube和Discord的Socials替换URL部分。 Atomichub验证需要的是creator_info部分,该部分需要您的业务地址和注册号。

对于图像,我们将来会更深入地研究它,但是您可以将它们设置为HTTPS URL或IFPS URL。

要在TestNet上实际创建此集合,我们将编写一个脚本,将上述所有数据封装在蜡链上的单个事务中。

设置nodejs

我们将使用nodejs编写脚本,因为已经存在与蜡链和基于eosio的区块链通信的软件包。

开始使用VM中的节点:

cd babychicks/scripts
curl https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash
nvm install
nvm use

如果您是从头开始的,则您希望使用:
创建一个工作区

npm init

然后安装一些将使实现更容易的软件包:

npm i --save node-fetch eosjs 

如果您在GitHub上与代码一起关注,则可以在此处使用节点设置。

创建脚本

让我们创建一个JSON RPC API:

import fetch from 'node-fetch';
import { Api, JsonRpc } from "eosjs";
import { JsSignatureProvider } from "eosjs/dist/eosjs-jssig";

export function createApiRpc() {
    const privateKey = process.env.WAX_PRIVATE_KEY;
    const endpoint = process.env.WAX_ENDPOINT;

    assert(privateKey, "Missing WAX_PRIVATE_KEY");
    assert(endpoint, "Missing WAX_ENDPOINT");

    const signatureProvider = new JsSignatureProvider([privateKey]);

    const rpc = new JsonRpc(endpoint, {
        fetch,
    });

    const apiRpc = new Api({
        rpc,
        signatureProvider,
        textDecoder: new TextDecoder(),
        textEncoder: new TextEncoder(),
    });

    return apiRpc;
}

我们希望我们的脚本被某些环境变量设置为:WAX_ACCOUNTWAX_PRIVATE_KEYWAX_ENDPOINT。当我们调用脚本时,我们可以在命令中设置环境变量。

让S创建一个包装函数,用于将操作作为单个交易发送在区块链上:

const TAPOS = {
    blocksBehind: 3,
    expireSeconds: 30,
};

export function transact(actions) {
    const apiRpc = createApiRpc();

    return apiRpc.transact({ actions }, TAPOS);
}

Tapos代表交易作为股份证明。您通常不需要调整这些设置,但是您可以read more on Github

最后,让我们通过创建用于创建与数据的集合的交易来解决此问题:

async function createCollection() {
    const author = process.env.WAX_ACCOUNT;

    if (!author) {
        throw new Error("Missing WAX_ACCOUNT");
    }

    try {
        await transact([
            {
                account: "atomicassets",
                name: "createcol",
                authorization: [
                    {
                        actor: author,
                        permission: "active",
                    },
                ],
                data: {
                    author,
                    collection_name: collectionName('babychicknft'),
                    allow_notify: true,
                    authorized_accounts: [
                        name(author),
                    ],
                    notify_accounts: [],
                    market_fee: 0.05,
                    data: data,
                },
            },
        ])
    } catch (error) {
        console.error(error);
        return false;
    }
}

(async () => {
    const result = await createCollection();
    console.log(result);
})()

在Github的存储库中,您会发现我们所传达的这些功能被分为可重复使用的功能。我们将在未来的部分中重复使用transactcreateApiRpc实用程序。

我们跳过的最后一件事是一个叫做name的实用程序。这是不需要的,但是在编写脚本时,您会发现不同的API为names提供了不同的行为。

当API期望name时,它想要一个符合某些规则的字符串 - 字符串必须为12个字符或更小,只能包含字母,点和数字1至5,并且必须关注其他一些规则。以上代码中的name实用程序执行这些检查并在将交易发送到区块链之前引发错误。有些API会抛出和错误,并让您知道提供的name无效。一些API带中的API带有无效的字符,不要告诉您,直到您去验证区块链上的交易并发现您发送的名称没有保存的名称。

运行脚本

将其全部拉动,我们可以运行脚本以在testnet上创建集合:

WAX_ACCOUNT=waxcourse123 \
WAX_PRIVATE_KEY="<YOUR WAX ACCOUNT ACTIVE PRIVATE KEY>" \
WAX_ENDPOINT=https://testnet.wax.pink.gg \
  node ./src/000-create-collection.js

示例输出如果一切顺利:

Example output

您可以在Wax testnet atomichub市场上看到该集合:https://wax-test.atomichub.io/explorer/collection/wax-testnet/babychicknft

结论

在本节中,我们使用nodejs脚本介绍以创建AtomicAssets集合。我们通常会使用脱链脚本来创建,编辑和更新AtomicAssets信息,例如我们的集合以及未来部分,我们的模式和模板。使用脚本可以通过直接运行动作来节省区块链上的时间和RAM成本。

即将发布的部分将涵盖模式和模板。一旦创建了这些内容,我们就可以使用我们将写的智能合约与我们的集合进行交互,

其他链接