0

我正在尝试读取已抵押或锁定的给定令牌的值。

我可以使用 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:

遵循 Cyber​​Fi 的 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:

Cyber​​Fi 的 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 和 Cyber​​Fi 网站正确地读取了我钱包的质押合约价值,因为它总是正确显示。我只是不确定他们是否有特殊的访问权限,因为合同是他们的?

我真的很感激这方面的任何帮助。我已经卡了好几天了。甚至其他关于如何阅读我的给定质押合约余额的建议也将不胜感激。谢谢。

我也在 StackOverflow 上发布了这个,以防这不是解决此类问题的正确 StackExchange。

4

0 回答 0