如何在智能合约中从 url 获取 json?

How do I get json from url in smart contracts?

我的 NFT 代币元数据在 URL 中。我想获取 json 格式的 url 的内容,然后转换为可用于制作 NFT 代币的对象。

下面是我的智能联系人的一部分,显示了生成元数据的功能URL Daynamicly。我在另一个函数中调用它并获取当前令牌 URI。之后,我将此 url 传递给 get_token_metadata 以获取 URL json 数据。我测试了不同的库,比如 http、reqwest、curl。但是我无法成功,因为这些库需要一个“异步”功能,我不知道如何在智能合约上开发它。

pub fn get_token_url(&mut self) -> String {
    let s1 = "url".to_string();
    let s2 = self.counter.to_string();
    let s3 = format!("{}{}.json", s1, s2);
    println!("{}", s3.to_string());
    return s3.to_string();
}


pub fn get_token_metadata(url: String) {
   // how do I develop this functions?
}

显然,如何获取 URL json 数据,以及如何转换为 json 和对象?

不幸的是,答案是“你不能”。链上程序无法访问外部世界,因此您不能在程序中使用 HttpReqwest 之类的东西。这允许链就分类帐的状态达成共识——如果每个节点都必须查询外部世界,实际上不可能达成共识。

要解决您的问题,您必须重新考虑您的解决方案,可能会从链下获取数据并将其传递给您的程序。