SAD PANDA: TypeError: не удалось получить
=== САД ПАНДА ===
TypeError: не удалось получить
=== САД ПАНДА ===
При выполнении транзакции каденции потока в react.js возникла указанная выше ошибка. Моя цель - когда я нажимаю кнопку 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);
}
1 ответ
эта бесполезная ошибка - это моя вина, но я могу объяснить, что здесь происходит, потому что это также происходит только в действительно конкретной ситуации.
Ошибка Sad Panda - это ошибка перехвата всех, которая возникает, когда происходит катастрофический сбой, когда fcl пытается разрешить сигнатуры, и он терпит неудачу совершенно неожиданным образом. Во время написания это обычно проявляется, когда люди пишут свои собственные функции авторизации, поэтому это было первое, на что я обратил внимание в вашем примере кода. Поскольку вы используете
fcl.authz
а также
fcl.currentUser().authorization
(кстати, оба они одинаковы) ваша ситуация здесь не из-за настраиваемой функции авторизации, что наводит меня на мысль, что это либо проблема конфигурации (fcl.authz с трудом выполняет свою работу правильно), либо то, что fcl возврат из кошелька не соответствует внутренним ожиданиям (скорее всего, из-за устаревшей версии fcl).
Я также видел это, когда версия sdk, которую использует fcl, не совпадает с версией sdk, которая там есть (потому что некоторые люди добавили
@onflow/sdk
а также
@onflow/fcl
), поэтому, возможно, также можно проверить, чтобы убедиться, что у вас есть только fcl в вашем package.json, а не sdk (все, что вам нужно от sdk, должно быть открыто из fcl, что означает, что вам не нужен sdk как прямая зависимость от ваше приложение)
Сначала я бы порекомендовал убедиться, что вы используете последнюю версию fcl (ваш код все еще должен работать), затем я бы убедился, что вы используете только fcl, а не случайно используете старую версию sdk. Если после этого вы все еще получаете ту же ошибку, не могли бы вы создать проблему в github, чтобы мы могли выделить некоторые ресурсы, чтобы помочь разобраться в этом (и сделать так, чтобы вы и другие не видели эту загадочную ошибку в будущих версиях fcl)