免责声明:一圈作为开放的资讯分享平台,所提供的所有资讯仅代表作者个人观点,与一圈平台立场无关,且不构成任何投资理财建议。
logo

学堂

在Algorand上创建NFT

Algorand
本文介绍在Algorand上创建NFT的几种方式。

原文作者:

Jason Weathersby

翻译作者:

花木匠

Algorand 支持对任何资产进行代币化,无论它是可替代的还是不可替代的。这通常可以在不编写任何智能合约代码的情况下完成,并且在协议中得到支持。这使得与代币相关的交易可以非常快速地完成。Algorand还支持在同级别执行的第1层智能合约。这些合约可用于创建各种类型的应用程序,并且可以与可替代或不可替代的代币整合或扩张。本文着重绍 NFT 创建者在 Algorand 区块链发行时可采用的不同选择。

Algorand能提供许多第1层的功能,包括Algorand 标准资产 (ASA)原子转移智能合约。这些功能非常强大,还可以设置以独特的方式相互协作,具有很大的灵活性。本文会从发行NFT最简单的方法开始,然后进一步详细说明可以用来创建更复杂代币的其他第1层的功能组合。

使用Algorand 标准资产(ASA)来创建NFT

开发者或Algorand用户可以用来创建和发行NFT的主要方法是使用ASA功能。此功能是第1层原始层,允许在几秒钟内创建NFT或FT. 这些资产不需要智能合约代码,只需在Algorand区块链上进行一次交易,该交易将描述了代币可变和不可变的属性。

不可变属性只设置一次,一旦NFT创建,将无法更改。所需参数有:Creator,是由初始创建交易的发送者自动生成;Total代表 NFT单位计数的资产总数,应设置为 1;Decimals表示隐含的小数,允许FT的每个单位被细分;DefaultFrozen 说明指定代币是否可以默认交易。对于NFT,小数点应设置为0. 如果将 NFT 设置为默认冻结,则必须先解冻代币,然后才能与其他代币进行交易。

不可变属性的包括一些可选属性:AssetName, 最多32字节字符串,用于命名资产类别;UnitName, 8字节字符串,用于指定资产单位名称(即USDC);URL,32字节的字符串,允许将URL附加到资产,该URL可用于指定资产的链下位置,以提供有关资产的其他详细信息;MetaDataHash,32字节,用以存储一些链下数据的哈希值,例如所有权证书。

可变属性由一组四个地址组成,这些地址允许将NFT设置为以某种方式运行,例如受限代币。其中包括ManagerAddress,可用于更改其他三个地址;ReserveAddress,可用于保存逻辑上未铸造的代币;FreezeAddress,可用于冻结或解冻任何帐户中的NFT;ClawbackAddress允许NFT从一个帐户中取出并提供给另一个帐户。这些地址中的任何一个都可以通过清除来锁定,从而有效地将代币的设置终身锁定。只要地址未被清除,管理地址就可以随时更改。这些地址可以是任何类型:单密钥、多个签名或逻辑签名。本文后面将描述使用无状态智能合约来指定控制这些可变地址的程序逻辑。

URL和MetaData Hash可用于存储有关NFT的数据,这些数据可能存储在链下,诸如 IPFS之类的系统。这也是在Algorand上创建NFT最简单的方法,只需几秒钟即可完成。可以使用命令行工具(“目标”),任何SDK发出此交易,或出于演示目的请查看 algodesk.io 网络应用程序。浏览下面的视频,了解如何使用 Web 应用程序创建代币。有关使用 SDK 或“目标”创建代币的信息,请查看开发者文档

目前,一个账户只能选择添加(交易)不超过1000 个代币。这个限制可以通过使用多个帐户来规避,并且为了更加简单化,可以将这些帐户重新设置为相同的私钥。此外,请注意,对于每个代币账户的最低余额增加到0.1Algo.

有关 ASA 的更多信息,请参阅开发者文档

有状态的智能合约和NFT

Algorand 提供两种类型的第1层智能合约 – 有状态合约和无状态合约。

有状态合约是存在于链上的第1层智能合约,可以访问很多链上数值,例如余额、拥有的代币和最后出块时间。此外,这些合约可以存储全局值和本地值。全局值与合约相关联,本地值与与合约交互的用户相关联。使用本地值存储时,有状态智能合约的表现与Algorand标准资产非常相似。事实上,测试有状态智能合约完成的同时,ASA标准也已经重新建立。本地值存储在账户的分类账空间中,类似于账户拥有的Algo和ASA的数量。

在有状态的智能合约中实现NFT,可以创建一个独特的资产,包含一组特定的具有逻辑的属性,该资产将被存储在全局或本地状态。然后,这个NFT可以被转移到个人账户,存储在用户的本地值。如果这个NFT被转移到另一个账户,这个值将会通过有状态的智能合约从发送者的本地值转移到接收者的本地值。举一个例子,全局值可以用来显示一个NFT正在出售。一旦它被售出,将会从全局状态转移到接收者的本地状态。Algorand的索引器可以在此处快速列出所有的与这个有状态智能合约相关的NFT. 如果需要自定义逻辑来控制NFT的创建或转移,此代码将在有状态智能合约中实现。要查看在用 PyTeal 编写的有状态合约中创建自定义资产的示例,请参阅此示例

这种方法的缺点是钱包目前不支持列出这类型的NFT. 此外,账户目前只能选择(参与)总共10个使用本地存储的有状态智能合约。而且需注意,每个选择了加入最低账户余额的有状态智能合约,都会如开发者文档中所述的有所增加。与ASA的方法一样,可以通过使用多个帐户来规避此限制,并可以为它们重新设置相同的私钥。

有关有状态智能合约的更多信息,请参阅开发者文档

NFT的无状态合约

无状态智能合约不存储任何链上数据或访问链上值,而是在提交交易时评估交易或交易组。无状态合约可用来生成Algorand地址,其功能与其他任何地址一样,可持有NFT、FT 或Algo. 事实上,它可以自由地从任何其他账户上接收任何这些资产,而无需评估合约的逻辑。当从无状态合约发出交易时,逻辑会被评估,一旦成功,将允许交易通过。如果逻辑失败,交易也会失败。这些类型的合约通常用于建立托管式账户,其中提款可以通过逻辑进行控制。

如前所述,无状态合约可以用作控制NFT的任何可变地址。例如,可以将预定地址设置为无状态合约。如果此地址用于铸造代币,则只要代币离开预定账户,逻辑就会被评估。如果逻辑失败,则铸造代币失败。如果逻辑成功,则将铸造代币。同样的,无状态合约也可以用来冻结和解冻NFT. 通过在这里使用无状态合约,除非逻辑被认可,否则操作不会被批准。召回地址也可以设置为无状态合约,逻辑将会在任何发生召回操作时启动。

这种方法需要编写无状态合约,但将继续与Algorand钱包很好地整合。每份合约都需要最低的Algo量来解决交易费用。但是,一旦 ASA 投入使用,任何两个用户都可以交换代币,并且不会执行任何逻辑。

有关无状态智能合约的更多信息,请参阅开发者文档

使用多种功能组合操纵NFT

使用Algorand原子传输也可以进一步增强上述任何情形。原子传输最多允许同时提交16个交易,如果任何一个交易失败,它们全部都会失败。组中的所有交易都可以通过有状态或无状态合约进行查询,以批准逻辑。唯一的要求是其中一项交易必须是对有状态合约的调用或从无状态合约进行交易。例如,在众筹示例中,当对有状态智能合约进行捐款调用时,代码会检查它是否与向持有捐赠款代管账户的支付交易在同一组。在同一个示例中,当将捐款设置为向个人进行捐赠时,支付发生时将会评估代管逻辑。该无状态智能合约将不会支付,除非来自它的交易也与对执行该逻辑的有状态智能合约的调用在同一组。

结合使用资产和智能合约的原子传输允许开发者创建独特的应用程序。例如,在任意两个用户之间,使用ASA、原子传输、无状态合约和有状态合约执行自定义转移逻辑的稍微复杂的方法可参见此示例

结论

使用 Algorand创建复杂而快速的NFT存在很多独特的方法。本文讨论了一些可以使用的方法。这些方法依赖于Algorand的第1层功能,这些功能将以非常高效和快速的速度执行,允许开发者不仅可以创建功能丰富的应用程序,还可以为其Dapp用户提供出色的性能。

原文标题:

Building NFTs on Algorand

原文出处:

发表时间:

2021/03/25
火速分享
Share on facebook
Share on twitter
Share on linkedin

Leave a Reply

相关课程

热门标签

好久不见,甚是想念。快登录吧