SuperAPI AI 工具集

nft-blockchain

安全与审计

查看项目

更新于 10-15 20:34

技能介绍

用途:在 Decentraland 场景中展示 NFT 艺术品并与区块链交互。

主要能力:

  1. NFT 展示:在 main-entities.ts 中声明 NftShape 组件,可直接摆放由用户拖动的画框 NFT。URN 格式为 urn:decentraland:ethereum:erc721:合约地址:tokenId,仅支持以太坊主网 ERC-721,图像自动从元数据加载。style 字段在字面量中必须写整数(如 0 表示 NFT_CLASSIC),因为 AST 遍历器只接受 JSON 兼容表达式;在 src/index.ts 中可直接使用 NftFrameType 枚举名。共 23 种画框样式(0–22)。

  2. 钱包检查:用 getPlayer() 获取玩家,检查 isGuest 判断是否为访客,userId 即以太坊钱包地址。任何区块链交互前必须先检查 isGuest,访客没有连接钱包。

  3. 签名请求:用 signedFetch(来自 ~system/SignedFetch)向后端发送带玩家钱包签名的认证请求,后端可验证签名完成身份认证,比原始 fetch 更安全。

  4. 智能合约交互:需先安装 eth-connect(npm install eth-connect)。用 createEthereumProvider 创建 provider,配合 RequestManager 与 ContractFactory,通过 factory.at(地址) 得到合约实例。ABI 建议存放在 contracts/ 独立文件,不要内联大型 ABI。读操作(view/pure)不需 gas;写操作需用户签名并指定 from、gas、gasPrice,gasPrice 可用 requestManager.eth_gasPrice() 获取。也可用 eth_getBalance 查余额。

  5. 自定义 RPC:用 sendAsync(来自 ~system/EthereumController)调用 eth-connect 未封装的底层 RPC,如 eth_blockNumber。

  6. 打开链接与对话框:用 openExternalUrl 打开外部链接,用 openNftDialog 打开 NFT 详情视图(来自 ~system/RestrictedActions)。

使用方式与限制:所有异步区块链调用应放入 executeTask(async () => { ... })。开发时建议先在 Sepolia 测试网测试(在 MetaMask 切换到 Sepolia、从水龙头领取测试 ETH、部署合约),主网与测试网合约地址不同,需用环境判断。区块链操作可能因用户拒绝、gas 不足或网络问题失败,需做好错误处理。产品收费、价格与具体平台支持范围资料暂未提供。