안녕하세요.
Cypress에 hardhat으로 컨트랙트를 배포하여 서비스를 운영하고 유지보수 하고 있는 개발자 입니다.
코드매칭을 진행하려고 했는데 오류가 발생했는데 Ozys측에 문의하여 hardhat으로 배포한 컨트랙트는
샘플URL에 있는 링크를 참고하여 진행하라고 안내를 받았습니다.
그리고 해당 샘플을 보면서 진행했는데 오류가 발생해서 아래와 같이 문의를 남깁니다.
-
프로젝트 구조
-
hardhat.config.js
require("@nomicfoundation/hardhat-toolbox");
require("dotenv").config();
// 1. Mainnet Cypress configuration details https://docs.klaytnscope.com/contract/configuration-for-hardhat-verify-plugin
// 2. RPC details can be found https://docs.klaytn.foundation/docs/references/service-providers/public-en/
/** @type import('hardhat/config').HardhatUserConfig */
module.exports = {
solidity: "0.8.24",
networks: {
klaytn: {
chainId: 8217,
url: "https://api-cypress.klaytnscope.com/api",
accounts:[process.env.PRIVATE_KEY]
},
},
etherscan: {
apiKey: {
klaytn: "unnecessary",
},
customChains: [
{
network: "klaytn",
chainId: 8217,
urls: {
apiURL: "https://api-cypress.klaytnscope.com/api",
browserURL: "https://klaytnscope.com",
},
},
]
},
sourcify: {
enabled: false
}
}
// We require the Hardhat Runtime Environment explicitly here. This is optional
// but useful for running the script in a standalone fashion through `node <script>`.
//
// You can also run a script with `npx hardhat run <script>`. If you do that, Hardhat
// will compile your contracts, add the Hardhat Runtime Environment's members to the
// global scope, and execute the script.
const hre = require("hardhat");
async function main() {
const currentTimestampInSeconds = Math.round(Date.now() / 1000);
const unlockTime = currentTimestampInSeconds + 60;
const lockedAmount = hre.ethers.parseEther("0.001");
const lock = await hre.ethers.deployContract("ABC", [unlockTime], {
value: lockedAmount,
});
await lock.waitForDeployment();
console.log(
`ABC_flat with ${ethers.formatEther(
lockedAmount
)}ETH and unlock timestamp ${unlockTime} deployed to ${lock.target}`
);
}
// We recommend this pattern to be able to use async/await everywhere
// and properly handle errors.
main().catch((error) => {
console.error(error);
process.exitCode = 1;
});
PRIVATE_KEY= "0x6157be8d..."
파일들은 위와 같습니다.
어떻게 하면 코드매칭을 진행할 수 있을까요??
1 Like
config는 올바르게 설정된 것 같은데요, 어떤 오류가 발생하는지도 공유주시면 도움이 될 것 같습니다. hh verify 후 나타나는 에러도 공유주실 수 있으실까요?
1 Like
@lewis_kim
“npx hardhat run scripts/deploy.js --network klaytn”
명령어를 실행하고 나니까
“HardhatError: HH110: Invalid JSON-RPC response received: {“status”:“0”,“message”:“NOTOK”,“result”:“Missing Or invalid Module name”}” 이런 오류가 발생했습니다
1 Like
아, hardhat의 network url에 klaytnscope의 verifying용 rpc url을 사용하셨네요. networks에는 블록체인 노드의 엔드포인트 주소를 작성해주셔야 합니다.
1 Like
@lewis_kim
감사합니다.
그 부분을 수정해서 deploy.js를 실행해봤는데
컨트랙트를 다시 배포하는거 같은데 맞을까요??
이미 컨트랙트를 Cypress에 배포해서 서비스를 운영중인데
오류가 발생할거처럼 보여져서 문의드립니다.
======================================================
-
- 09 15:22
git소스를 최신화 부탁드려도 될까요?
나름대로 해보려고 했는데 자꾸 에러가 발생하네요…
이미 배포 하셨다면 npx hardhat verify DEPLOYED_ADDRESS CONSTRUCTOR_ARGS
로 검증하시면 됩니다.
@lewis_kim
알려주신 명령어를 실행했는데
"Network “Contract Address” doesn’t exit"라는 오류가 발생했습니다
Deploy Contract링크는 이렇게 조회가 되는데도 오류가 발생하네요
export HARDHAT_NETWORK=klaytn
이나 --networks klaytn
으로 네트워크를 명시해주셨나요?
1 Like
@lewis_kim
네네
"npx hardhat verify --networks klaytn “0x1668e7c20df9d9675ceda3feae02eda06dd2d546” <constructor_parameters>"로 실행하였습니다.
<constructor_parameters> 부분에 인자값이 많은데 {}로 감싸서 전달해야할까요?
“npx hardhat verify --network klaytn “0x1668e7c20df9d9675ceda3feae02eda06dd2d546” ” 로 해서 명령어를 실행했는데 "hardhat-verify found one or more errors during the verification process:
Etherscan:
A network request failed. This is an error from the block explorer, not Hardhat. Error: Unexpected token i in JSON at position 0" 이런 오류가 발생했습니다.
@lewis_kim
알려주신 링크를 통해서 실행해봤습니다.
실행한 명령어와 오류 메시지는
npx hardhat verify --network klaytn --constructor-args scripts/arguments.js 0x1668e7c20df9d9675ceda3feae02eda06dd2d546
hardhat-verify found one or more errors during the verification process:
Etherscan:
The address provided as argument contains a contract, but its bytecode doesn't match any of your local contracts.
Possible causes are:
- The artifact for that contract is outdated or missing. You can try compiling the project again with the --force flag before re-running the verification.
- The contract's code changed after the deployment was executed. Sometimes this happens by changes in seemingly unrelated contracts.
- The solidity compiler settings were modified after the deployment was executed (like the optimizer, target EVM, etc.)
- The given address is wrong.
- The selected network (klaytn) is wrong.
와 같습니다.
해당 Contract를 배포할 때 인자값으로 값을 전달하도록 되어 있어
링크에 나온 샘플처럼 arguments.js를 만들어서 실행했습니다.
`module.exports = [
"abc",
"...",
100,
"...",
"...",
"..."
];
오류메시지를 검색해봤는데 컨트랙트가 변경됐다는 오류로 나오는데
컨트랙트의 소스가 변경된것은 없었는데 해당 오류가 발생했습니다