Solidity合约报错:未设置运行脚本,请通过@custom:dev-run-script标签配置
解决Remix中“未设置运行脚本”的错误
错误原因
你合约里添加了@custom:dev-run-script ./scripts/deploy_with_ethers.ts标签,但Remix找不到对应的部署脚本文件,或者脚本本身无法执行,因此触发该错误。
解决方案
1. 确认部署脚本存在且路径正确
- 检查Remix文件管理器中是否有
scripts/deploy_with_ethers.ts文件。如果没有,要么创建这个脚本,要么修改NatSpec标签里的路径指向已有的脚本文件。
2. 编写符合要求的部署脚本(若缺少脚本)
如果需要用ethers.js脚本部署,创建scripts/deploy_with_ethers.ts文件,示例内容如下:
import { ethers } from "hardhat"; async function main() { // 替换为已部署的CashFlow合约实际地址 const cashFlowAddress = "0xYourCashFlowContractAddress"; // 示例支付金额,可根据需求调整数值 const customerPaymentAmt = ethers.utils.parseEther("100"); const CashFlowMerchant = await ethers.getContractFactory("CashFlowMerchant"); const merchantContract = await CashFlowMerchant.deploy(cashFlowAddress, customerPaymentAmt); await merchantContract.deployed(); console.log("CashFlowMerchant部署地址:", merchantContract.address); } main().catch((error) => { console.error(error); process.exitCode = 1; });
3. 新手友好替代方案:直接用Remix可视化部署
无需脚本的话,直接通过Remix的「Deploy & Run Transactions」面板部署:
- 先完成
CashFlowMerchant合约的编译 - 切换到「Deploy & Run Transactions」标签,选择部署环境(如Remix VM(London))
- 在部署参数输入框中,依次填入
CashFlow合约的地址、customerPaymentAmt的数值(例如100) - 点击「Deploy」按钮完成部署
额外代码优化建议
你的repayLoan函数中,开头的require(loanSettlmntAmount > 0, "No need to deduct amount")已经判断了金额大于0,后续if条件里的loanSettlmntAmount > 0属于重复判断,可简化为:
function repayLoan() external { require(loanSettlmntAmount > 0, "No need to deduct amount"); if (customerPaymentAmt > 10){ bankEMI = ((customerPaymentAmt * 10)/100); if(loanSettlmntAmount > bankEMI){ merchantAmtRecvd = customerPaymentAmt - bankEMI; }else{ bankEMI = bankEMI - loanSettlmntAmount; merchantAmtRecvd = customerPaymentAmt - bankEMI; } }else{ merchantAmtRecvd = customerPaymentAmt; } }
内容的提问来源于stack exchange,提问作者rohini dingankar
相关产品推荐
相关产品推荐

