0

​ === 悲伤的熊猫 ===

类型错误:获取失败

=== 悲伤的熊猫 ===

在 react.js 中执行 flow cadence 事务时,出现上述错误。我的意图是当我单击 minttoken 按钮时,必须执行此交易才能铸造 NFT。

const mintToken = async() => {
        console.log(form.name)
        const encoded = await fcl.send([
             fcl.proposer(fcl.currentUser().authorization),
            fcl.payer(fcl.authz),
             fcl.authorizations([fcl.authz]),
            fcl.limit(50),
            fcl.args([
                fcl.arg(form.name,t.String),
                fcl.arg(form.velocity,t.String),
                fcl.arg(form.angle,t.String),
                fcl.arg(form.rating,t.String),
                fcl.arg(form.uri,t.String)    
              ]),
            fcl.transaction`
        import commitContract from 0xf8d6e0586b0a20c7
                
                transaction {
                let receiverRef: &{commitContract.NFTReceiver}
                let minterRef: &commitContract.NFTMinter

                prepare(acct: AuthAccount) {
                    self.receiverRef = acct.getCapability<&{commitContract.NFTReceiver}>(/public/NFTReceiver)
                        .borrow()
                        ?? panic("Could not borrow receiver reference")        
                    
                    self.minterRef = acct.borrow<&commitContract.NFTMinter>(from: /storage/NFTMinter)
                        ?? panic("could not borrow minter reference")
                }

                execute {
                    let metadata : {String : String} = {
                        "name": name,
                        "swing_velocity": velocity, 
                        "swing_angle": angle, 
                        "rating": rating,
                        "uri": uri
                    }
                    let newNFT <- self.minterRef.mintNFT()
                
                    self.receiverRef.deposit(token: <-newNFT, metadata: metadata)

                    log("NFT Minted and deposited to Account 2's Collection")
                }
                }
            
        
                `
                
      ]);
      await fcl.decode(encoded);
    }
4

1 回答 1

0

这个错误如此无用是我的错,但我可以解释这里发生的事情,因为它也只发生在非常特定的情况下。

Sad Panda 错误是当 fcl 尝试解析签名并以完全意外的方式失败时发生灾难性故障时发生的所有错误。在撰写本文时,它通常会在人们编写自己的授权函数时出现,所以这是我在您的代码示例中看到的第一件事。由于您正在使用fcl.authzand fcl.currentUser().authorization(顺便说一句,两者都是相同的)您的情况不是因为自定义授权功能,这让我相信这要么是配置问题(fcl.authz 很难完成它的工作)正确)或 fcl 从钱包中返回的内容与内部预期的内容不一致(很可能是因为 fcl 的版本过时)。

当 fcl 使用的 sdk 版本与那里的 sdk 版本不一致时,我也看到了这种情况(因为有些人也添加@onflow/sdk@onflow/fcl)所以也可能会检查以确保您只有 fcl在你的 package.json 而不是 sdk 中(你应该从 sdk 中需要的一切都应该直接从 fcl 公开,这意味着你不应该需要 sdk 作为应用程序的直接依赖项)

我首先建议确保您使用的是最新版本的 fcl(您的代码应该仍然可以正常工作),然后我会确保您只使用 fcl 而不会无意中使用旧版本的 sdk。如果在那之后您仍然遇到相同的错误,您可以在 github 上创建一个问题,以便我们可以投入一些资源来帮助解决这个问题(并让您和其他人在未来版本的 fcl 中不会看到这个神秘的错误)

于 2021-10-25T20:12:37.467 回答