使用Foundry与智能合约交互时遇broadcast路径访问权限错误
Foundry脚本访问broadcast目录权限错误解决办法
问题根源
DevOpsTools.get_most_recent_deployment()需要读取./broadcast里的部署记录,但当前脚本运行时没拿到该目录的读取权限,或者没启用广播模式导致目录访问被限制。
三种修复方案
方案1:给脚本加上--broadcast参数
修改Makefile里的mint指令,确保执行forge script时带上--broadcast参数:
mint: forge script script/MintBasicNft.s.sol:MintBasicNft $(ARGS) --broadcast
之后正常执行make mint ARGS="--network sepolia"就行,广播模式下脚本会被允许访问broadcast目录。
方案2:直接硬编码合约地址
不想用DevOpsTools自动找地址的话,直接在脚本里写死部署好的BasicNft合约地址,绕开读取broadcast的步骤:
// SPDX-License-Identifier: MIT pragma solidity ^0.8.18; import {Script} from "forge-std/Script.sol"; import {BasicNft} from "../src/BasicNft.sol"; contract MintBasicNft is Script { string public constant PUG = "ipfs://bafybeig37ioir76s7mg5oobetncojcm3c3hxasyd4rvid4jqhy4gkaheg4/?filename=0-PUG.json"; // 替换成你在Sepolia上部署好的BasicNft合约地址 address public constant BASIC_NFT_ADDRESS = 0xYourActualContractAddress; function run() external { mintNftOnContract(BASIC_NFT_ADDRESS); } function mintNftOnContract(address contractAddress) public { vm.startBroadcast(); BasicNft(contractAddress).mint(PUG); vm.stopBroadcast(); } }
改完直接运行原命令就能铸造NFT。
方案3:配置Foundry文件系统权限
在项目根目录的foundry.toml里添加权限配置,允许脚本读取broadcast目录:
[fs_permissions] read = ["./broadcast"]
保存后重新运行脚本,权限限制就会解除。
验证方法
- 确认BasicNft已经成功部署到Sepolia,
./broadcast目录下有对应的部署记录 - 执行修复后的命令,查看终端输出是否显示铸造成功
- 可以用
cast balance --token <合约地址> <你的钱包地址>检查NFT是否到账
内容的提问来源于stack exchange,提问作者Elyas Sarjoghi
相关产品推荐
相关产品推荐

