介绍
在本节中,我们将利用Atomicassets智能合约来在WAX TestNet上创建一个集合。
让我们创建我们的示例集合。在这套教程和示例中,我们将创建一套新的NFT,称为“ babychicks” - 可爱的小鸡,您可以孵化,收集和交易。
原子ASSASES动作
要开始,我们需要使用AtomicAssets为我们的NFT创建一个集合。
让我们看一下createcol
架构。
编写脚本时,我们将需要填写所有这些信息。让我们看一下每个领域:
-
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_ACCOUNT
,WAX_PRIVATE_KEY
和WAX_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的存储库中,您会发现我们所传达的这些功能被分为可重复使用的功能。我们将在未来的部分中重复使用transact
和createApiRpc
实用程序。
我们跳过的最后一件事是一个叫做name
的实用程序。这是不需要的,但是在编写脚本时,您会发现不同的API为name
s提供了不同的行为。
当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
示例输出如果一切顺利:
您可以在Wax testnet atomichub市场上看到该集合:https://wax-test.atomichub.io/explorer/collection/wax-testnet/babychicknft。
结论
在本节中,我们使用nodejs脚本介绍以创建AtomicAssets集合。我们通常会使用脱链脚本来创建,编辑和更新AtomicAssets信息,例如我们的集合以及未来部分,我们的模式和模板。使用脚本可以通过直接运行动作来节省区块链上的时间和RAM成本。
即将发布的部分将涵盖模式和模板。一旦创建了这些内容,我们就可以使用我们将写的智能合约与我们的集合进行交互,
其他链接
- github:abhabioqian12
- https://github.com/CapsuleCat/wax-nft-tutorial/blob/main/babychicks/scripts/src/005-add-auth-collection.js
- 文档:https://github.com/pinknetworkx/atomicassets-contract/wiki/Actions#createcol
- 进一步阅读:https://developer.wax.io/build/tutorials/howto_atomicassets/collection_struct.html
- Andras Vas上的Unsplash摄影