Flow模拟器部署导入FungibleToken的自定义合约报类型不兼容错误咨询
报错原因
- 核心合约重复部署冲突:Flow模拟器默认已经将FungibleToken等标准核心合约预置部署在地址
ee82856bf20e2aa6,你的配置里既给FungibleToken设置了该预置地址作为别名,又在部署列表里将FungibleToken加入了自定义账户的部署队列,相当于运行环境中同时存在两份部署地址不同、逻辑完全一致的FungibleToken合约。Cadence采用标称类型系统,不同地址部署的合约属于完全独立的类型,导致自定义合约引用的FungibleToken类型和预期的标准类型不匹配,触发FungibleToken.Receiver类型合规报错。 - 配置语法错误:你的
flow.json部署列表中,"FungibleToken"和"ExampleToken"两项之间缺少逗号,属于JSON语法错误,也会干扰部署流程的正常执行。
解决方案
- 修正
flow.json配置:删除部署列表中自定义账户下的"FungibleToken"项,不需要自行重复部署模拟器预置的核心合约,同时补上JSON数组项之间的逗号,修正后的配置参考如下:
{ "contracts": { "FungibleToken": { "source": "./cadence/contracts/FungibleToken.cdc", "aliases": { "emulator": "ee82856bf20e2aa6" } }, "ExampleToken": "./cadence/contracts/ExampleToken.cdc" }, "deployments": { "emulator": { "emulator-account": [ "ExampleToken" ] } } }
- 可选优化合约导入写法:如果你的Flow CLI版本支持别名自动替换,可以保持现有相对路径导入写法,也可以直接指向预置地址减少路径解析开销,写法如下:
// ExampleToken.cdc import FungibleToken from 0xee82856bf20e2aa6
- 清理历史错误部署数据:如果之前已经错误将FungibleToken部署到了自定义账户,先停止模拟器,删除默认生成的
./flowdb缓存文件夹,重启模拟器后再执行部署操作即可。
内容的提问来源于stack exchange,提问作者louis_guitton
相关产品推荐
相关产品推荐

