我正在尝试读取已抵押或锁定的给定令牌的值。
我可以使用 EthersJS 包来实现 DuckStarter 在 NodeJS 中的质押合约,如下所示:
// THIS WORKS
async function readStakedDuck() {
const provider = new ethers.providers.Web3Provider((window as any).ethereum, "any");
const signer = provider.getSigner();
const duckabi = [{}] // I have removed this to make it easier to read
const duckStakingContract = new ethers.Contract("0x3A9280F3a7aC4ddA31161d6df2f8139AE303d0aB", duckabi, signer);
const duckUserInfo = await duckStakingContract.userInfo("0xMYADDRESS")
console.log(ethers.utils.formatEther(duckUserInfo.staked));
};
我知道一般来说 userInfo 或 balanceOf 函数是我需要的。
但是,我似乎无法获得 ETH 或 BSC 上其他质押合约的价值。
示例 1:
遵循 PolkaFoundry 的相同代码模式(使用“0x35E5203FeEF397346048DD36D0Ee4D611103544e”合约地址)返回错误 - TypeError: pkfStakingContract.balanceOf is not a function。证明 balanceOf 函数未显示在该合约地址的 Etherscan 的合约选项卡中的事实。
这是因为我使用了错误的质押合约,还是因为 PolkaFoundry 没有为他们的质押合约公开这些功能?
示例 2:
遵循 CyberFi 的 BSC 质押合约的相同代码模式(“0x6a545f9c64d8f7B957D8D2e6410B52095A9E6c29”)返回一个值,但它是错误的。它返回 0.0。我在那份合同中肯定有超过 0 个。bscscan 上的合约选项卡清楚地显示了 balanceOf 合约,我在控制台中没有收到任何错误 - 只有 0.0.
async function getCfiBscStaked() {
const provider = bscProvider("bsc-mainnet")
const cfiabi = [{}] // Removed to make tidier but I got the abi from the same contract on bscscan
const cfiStakingContract = new ethers.Contract("0x6a545f9c64d8f7B957D8D2e6410B52095A9E6c29", cfiabi, provider);
const cfibalance = await cfiStakingContract.balanceOf("0x90340C9c8A1D28e076732364cDCEAc14fb552130")
console.log(ethers.utils.formatEther(cfibalance));
};
这是因为我使用了错误的质押合约还是我使用不正确或连接到 BSC 网络错误?
示例 3:
CyberFi 的 ETH 质押合约也暴露了 balanceOf 函数,但出于某种原因,我的钱包地址返回 0.0001。我也 100% 确定我有更多的东西。
async function getCfiEthStaked() {
const provider = new ethers.providers.Web3Provider((window as any).ethereum, "any");
const signer = provider.getSigner();
const cfiabi = [{}] // Removed to make tidier but I got the abi from the same contract on etherscan
const cfiStakingContract = new ethers.Contract("0x63b4f3e3fa4e438698CE330e365E831F7cCD1eF4", cfiabi, signer);
const cfibalance = await cfiStakingContract.functions.balanceOf("0x90340C9c8A1D28e076732364cDCEAc14fb552130")
console.log(ethers.utils.formatEther(cfibalance[0]));
};
同样,我很困惑为什么我得到错误的值?
大概 PolkaFoundry 和 CyberFi 网站正确地读取了我钱包的质押合约价值,因为它总是正确显示。我只是不确定他们是否有特殊的访问权限,因为合同是他们的?
我真的很感激这方面的任何帮助。我已经卡了好几天了。甚至其他关于如何阅读我的给定质押合约余额的建议也将不胜感激。谢谢。
我也在 StackOverflow 上发布了这个,以防这不是解决此类问题的正确 StackExchange。