使用openzeppelin 部署可以升级的合约时,遇到了
The requested contract was not found. Make sure the source code is available for compilation
官网的常见问题给给出了答案
为什么我必须为Truffle重新编译所有合同?
Truffle工件(build/contracts中的JSON文件)包含你每个合同的AST(抽象语法树)。我们的插件使用这些信息来验证您的合同是否[升级安全](#what-does-it-mean-for-a-contract-to-upgrade-safe)。
Truffle有时会只对发生变化的合同进行部分重新编译。当这种情况发生时,我们会要求您使用 truffle compile --all 或删除 build/contracts 目录来触发一次完整的重新编译。技术上的原因是,由于 Solidity 并不产生确定的 AST,如果不是来自同一个编译器运行,插件就无法正确解决引用。
在执行完 truffle compile --all 之后,错误消失了。