You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用Solidity智能合约函数时出现Internal JSON-RPC error问题求助

问题分析与修复方案

1. Solidity代码语法错误

你的GetValueInEth函数存在明显笔误,Pretty是无效标识符,这会直接导致合约执行报错:

// 错误代码
uint ethAmount =Pretty (dollarsAmount*1e18)/valuePrice;

// 修复后
uint ethAmount = (dollarsAmount * 1e18) / valuePrice;

2. Chainlink价格喂料地址错误

构造函数中的地址0xD4Usea33860578De61DBAbDc8BFdb98FD742fA7028e存在拼写错误,正确的Goerli测试网ETH/USD喂料地址应为:

priceFeed = AggregatorV3Interface(0xD4a33860578De61DBAbDc8BFdb98FD742fA7028e);

如果部署在主网,地址需替换为0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419。错误地址会导致合约无法调用价格喂料合约的latestRoundData函数,触发JSON-RPC异常。

3. 价格精度计算优化

Chainlink ETH/USD喂料返回的价格是8位小数,你当前的getLatestPrice函数用price*1e18转换精度,其实可以更高效:

// 优化后
function getLatestPrice() public view returns (uint) {
    (, int price,,,) = priceFeed.latestRoundData();
    // 8位小数转18位小数,直接乘1e10即可
    return uint(price) * 1e10;
}

4. 前端调用检查点

  • 确认dollarPrice是合法的uint类型数值,避免传入字符串或非整数导致参数不匹配。
  • 确保前端连接的区块链网络与合约部署网络完全一致(比如都用Goerli测试网)。

修复后的完整合约代码

import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol";

contract TravelCoin{

    AggregatorV3Interface internal priceFeed;

    constructor() {
        // Goerli测试网ETH/USD喂料地址
        priceFeed = AggregatorV3Interface(0xD4a33860578De61DBAbDc8BFdb98FD742fA7028e);
    }

    function getLatestPrice() public view returns (uint) {
        (, int price,,,) = priceFeed.latestRoundData();
        return uint(price) * 1e10;
    }

    function GetValueInEth(uint dollarsAmount) public view returns (uint) {
        uint valuePrice = getLatestPrice();
        uint ethAmount = (dollarsAmount * 1e18) / valuePrice;
        return ethAmount;
    }
}

验证流程

  1. 重新编译并部署修复后的合约。
  2. 前端传入合法的美元整数(比如100代表100美元)调用GetValueInEth函数。
  3. 检查控制台是否返回正确的ETH数量。

内容的提问来源于stack exchange,提问作者Matteo Cicalese

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 14:45:34