web3.php连接Ropsten测试网络出现cURL超时错误如何解决?
解决方案
- 替换已下线的Ropsten测试网
Ropsten以太坊测试网已于2022年正式停止服务,对应的公共节点均已关闭,建议替换为目前仍在维护的Sepolia或Goerli测试网,将Infura RPC地址修改为对应测试网地址即可,例:https://sepolia.infura.io/v3/你的Infura项目ID。修改前请先确认你的Infura项目已开通对应测试网的访问权限。 - 调整请求超时时间
本地Ganache节点响应速度快,web3.php默认的1秒超时配置可以正常运行,但远程公共节点响应时间更长,需要手动拉长超时时间,参考代码如下:
public function DecetralizeID(){ $contractABI = //[{*some abi*}] $contractAddress = "0xc17E4f191Fb9000262698eE4cDDE8bF66bFb6AA3"; $fromAccount = "0x9cdc1E3F896dD416660b7359A0bC81EAE5e1b93a"; // 自定义provider设置30秒超时 $provider = new \Web3\Providers\HttpProvider( new \Web3\RequestManagers\HttpRequestManager('https://sepolia.infura.io/v3/替换为你的完整Infura项目ID', 30) ); $contract = new \Web3\Contract($provider, $contractABI); //SHOWLOGSBYOWNER $contract->at($contractAddress)->call("showLogsByOwner", $fromAccount, function($err,$data) { if ($err !== null) { echo 'Error: ' . $err->getMessage(); return; } echo 'showLogsByOwner : show id logs by address user :<br>'; foreach ($data as $dt) { foreach($dt as $t) { echo $t; echo "<br>"; } } }); }
- 校验Infura配置正确性
你报错日志中的请求地址里的Infura项目ID是被截断的,检查代码中的RPC地址是否存在拼写错误、多余换行、特殊字符,同时确认Infura控制台的项目安全设置中,已将部署Laravel的服务器IP加入白名单,避免Infura拦截请求。 - 排查服务器网络连通性
在部署代码的服务器上执行curl命令测试Infura节点连通性:curl https://sepolia.infura.io/v3/你的Infura项目ID -X POST -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
如果该命令也返回超时,说明服务器网络无法正常访问Infura,需要调整服务器的防火墙规则或网络代理配置。
内容的提问来源于stack exchange,提问作者alvin Christianto
相关产品推荐
相关产品推荐

