首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法用tokenURI设置NFT tokenURI

无法用tokenURI设置NFT tokenURI
EN

Ethereum用户
提问于 2021-07-11 01:59:45
回答 1查看 510关注 0票数 0

我有以下合同方法:

代码语言:javascript
复制
    function setTokenURI(uint256 tokenid, string memory uri) public {
        require(bytes(uri).length != 0, "Cannot set an empty URI");
        _setTokenURI(tokenid, uri);
    }

当我从我的web3py脚本调用它时:

代码语言:javascript
复制
contract.functions.setTokenURI(token, "https://gateway.pinata.cloud/ipfs/2jh2kl3j4h23jk4h2").call()

我没有收到任何错误,但是URI没有设置。我根据与web3py接口的约定运行其他函数,它们都按预期工作。

为什么这个调用不更新NFT tokenURI?

EN

回答 1

Ethereum用户

发布于 2021-07-11 08:42:56

tl;dr:而不是使用contract.functions.setURI(...).call(),而是使用contract.functions.setURI.transact()

web3库调用只读函数的方式与调用状态变化函数的方式有很大不同。对于前者,不需要发送值,也不需要用私钥签名。但是,当状态被更改时,就会进行事务处理。改变状态需要通过网络发送以太来支付天然气,这需要形成一个由私钥签名的交易。

这两种与链交互的方式反映在与web3.py:call()transact()可以使用的两个不同后缀上。call()用于从链中读取数据(viewpure函数),而transact()用于状态更改函数。

根据您的web3.py设置,您可能需要向您的transact()调用添加详细信息。transact()可以将一个对象作为参数,在该参数中您可以指定tx应该来自什么地址、发送的以太数量等等。transact()的文档是这里,而您可以在对象arg中放置的文档是这里 (对象遵循transaction对象的格式,这里概述了这个格式)。

希望这能帮上忙!

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

https://ethereum.stackexchange.com/questions/103298

复制
相关文章

相似问题

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