首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过连接硬件中的合同地址来调用智能契约功能(以太)

通过连接硬件中的合同地址来调用智能契约功能(以太)
EN

Stack Overflow用户
提问于 2022-08-04 14:24:19
回答 2查看 401关注 0票数 -1

问题的背景:

我正在开发一个NFT市场。在其工作流程中,管理员(智能契约的部署者)将NFT添加到市场中,当时这些NFT属于 marketplace 智能契约。

现在,当用户购买特定的NFT时,我们必须将所有权从智能契约地址转移到签名者/钱包地址

实际问题:

在编写chai测试时,我需要调用在市场契约中编写的函数buyFromMarketplace,它将nft的所有权转移到那里。我正在尝试连接市场智能合同地址(但我找不到任何方法),我尝试过这样做(但我知道这是行不通的)

代码语言:javascript
运行
复制
await nft.connect(marketplace).approve(addr1.address, 0);

还试图在调用approve之前通过调用marketplace.address连接到NFT智能协议时发送原始地址。

this thread中,正在做类似的事情,但在测试中却没有这样做。

而类似的事情是用ERC20令牌完成的,here

编辑:,我找到了解决方案,并发布在答案中,也许它对未来的人有帮助!

EN

回答 2

Stack Overflow用户

发布于 2022-08-04 17:48:24

我觉得这不可能。然而,有一个简单的解决办法。在调用approve函数的契约中添加一个函数。如果它只能由合同的管理员(所有者)调用,这将是有意义的。

代码语言:javascript
运行
复制
function approveNFT(address approveFor, uint256 tokenID) external onlyOwner{
   nftContract.approve(approveFor, tokenID) //assume "nftContract" is the ERC721 contract address
}

现在您可以像这样调整代码:

代码语言:javascript
运行
复制
await nft.connect(owner).approveNFT(addr1.address, 0);
票数 1
EN

Stack Overflow用户

发布于 2022-08-05 05:47:03

回答我自己的问题,所以在将来,它可能会帮助到别人。

经过一番挣扎和@Tahlil的回答,我找到了解决这个问题的方法。

实际的问题是buyFromMarketplace函数将nft的所有权从合同转移到钱包/签名者。所以我们打电话给nft.transfer。需要的所有者/批准将其称为nft,但正如所提到的,nft属于Marketplace合同。

实际上,在调用approve之前,我们不需要通过调用buyFromMarketplace市场契约地址来批准调用者的帐户。

意见:

connect函数的以太硬帽不应该允许连接合同地址,因为我们是处理帐户那里。

事实:

它的工作原理完全一样。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73237625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档