Hardhat.config 설정 값 문의

안녕하세요
hardhat 프레임 워크를 활용해서 배포를 하려고 합니다.
hardhat.config 파일에 network 부분을 다음과 같이 설정을 하고

//hardhat.config.ts

networks: {
    hardhat: {
      chainId: 1337,
      accounts: {
        mnemonic: "test test test test test test test test test test test junk",
        initialIndex: 0,
        accountsBalance: "10000000000000000000000",
      },
    },
    baobab: {
      url: "https://kaikas.baobab.klaytn.net:8651",
      chainId: 1001,
      accounts: {
        initialIndex: 0,
        mnemonic: privateKey,
        accountsBalance: "100000000000000",
      },
    },
  },

설정을 하고나서 npx hardhat run scripts/token-deploy.ts --network baobab 을 실행을 시키면
reason: ‘insufficient funds for intrinsic transaction cost’
에러가 발생하고 있습니다. baobab에 gas: 2000000 과 gasPrice: 25000000000 을 동일하게 설정하고 해도 동일한 에러가 나고 있습니다.

제가 설정을 잘못한 것일까요???
구글 검색이나 github의 예제들을 보면서 설정값을 넣었는데 실행이 되질 않습니다

deploy하기 위해 키링 만든 주소에 klay가 있으신가용?

넵 baobab testnet에서 클레이는 5klay 있습니다.

가스는 used gas * gas price 로 계산되니까 gasPrice를 높일 필요 없을거 같아요
혹시 deploy하려는 코드 사이즈가 문제일수도 있습니다.
가스 문제가 난다고 하면 요 2개정도가 제일 가능성 있어 보입니다.

1개의 좋아요

안녕하세요

제가 사용하고있는 config와 deploy 스크립트 전달드립니다.

hardhat.config.ts

import "dotenv/config";
import "@typechain/hardhat";
import "@nomiclabs/hardhat-ethers";
import "@nomiclabs/hardhat-waffle";

import { HardhatUserConfig } from 'hardhat/types';

const config: HardhatUserConfig = {
  solidity: {
    version: '0.5.6',
    settings: {
      optimizer: {
        enabled: true,
        runs: 200,
      }
    }
  },
  namedAccounts: {
    deployer: 0,
  },
  networks: {
    hardhat: {},
    cypress: {
      url: process.env.CYPRESS_URL,
      httpHeaders: {
        'Authorization': 'Basic ' + Buffer.from(process.env.ACCESS_KEY_ID + ':' + process.env.SECRET_ACCESS_KEY).toString('base64'),
        'x-chain-id': '8217',
      },
      accounts: [
        process.env.DEPLOYER || ''
      ],
      chainId: 8217,
      gas: 8500000,
    },
    baobab: {
      url: process.env.BAOBAB_URL,
      httpHeaders: {
        'Authorization': 'Basic ' + Buffer.from(process.env.ACCESS_KEY_ID + ':' + process.env.SECRET_ACCESS_KEY).toString('base64'),
        'x-chain-id': '1001',
      },
      accounts: [
        process.env.DEPLOYER || ''
      ],
      chainId: 1001,
      gas: 8500000,
    },
  },
  mocha: {
    timeout: 100000
  }
}

export default config;

deploy.ts

import "@nomiclabs/hardhat-ethers";
import "@nomiclabs/hardhat-waffle";
import { getNamedAccounts, config } from 'hardhat';
import { HttpNetworkUserConfig } from "hardhat/src/types/config";
import Caver from 'caver-js'

async function main() {
  const { deployer } = await getNamedAccounts();

  console.log("Deploying contracts with the account:", deployer);

  const network = config.networks[process.env.HARDHAT_NETWORK as string] as HttpNetworkUserConfig;

  const caver = new Caver(new Caver.providers.HttpProvider(network.url!, {
    headers: [
      { name: 'Authorization', value: 'Basic ' + Buffer.from(process.env.ACCESS_KEY_ID + ':' + process.env.SECRET_ACCESS_KEY).toString('base64') },
      { name: 'x-chain-id', value: network.chainId!.toString() }
    ]
  }));

  caver.klay.accounts.wallet.add(caver.klay.accounts.privateKeyToAccount(process.env.DEPLOYER!));

  const transaction = await caver.klay.sendTransaction({
    type: 'SMART_CONTRACT_DEPLOY',
    from: deployer,
    data: '', /* bytecode */
    gas: '50000000',
    value: 0,
  });

  console.log(transaction);
}

main()
  .then(() => process.exit(0))
  .catch((error) => {
    console.error(error);
    process.exit(1);
  });

dependencies

"@klaytn/contracts": "^0.9.0",
"@nomiclabs/hardhat-ethers": "^2.0.0",
"@nomiclabs/hardhat-truffle5": "^2.0.3",
"@nomiclabs/hardhat-waffle": "^2.0.0",
"@openzeppelin/contracts": "2.5.1",
"@typechain/ethers-v5": "^7.2.0",
"@typechain/hardhat": "^3.0.0",
"@types/chai-as-promised": "^7.1.4",
"@types/mocha": "^9.0.0",
"caver-js": "^1.6.5",
"chai": "^3.4.0",
"chai-as-promised": "^7.1.1",
"dotenv": "^10.0.0",
"ethereum-waffle": "^3.0.0",
"ethers": "5.0.32",
"hardhat": "^2.8.0",
"hardhat-deploy": "^0.9.14",
"rimraf": "^3.0.2",
"ts-node": "^10.4.0",
"typechain": "^6.0.5",
"typescript": "^4.5.4"
3개의 좋아요

안녕하세요, 저도 hardhat 설정에 어려움을 겪고있어 문의드립니다. 혹시 ACCESS_KEY_ID와 SECRET_ACCESS_KEY 값을 제외한 .env파일 내용을 공유해주실 수 있으실까요?

process.env.DEPLOYER, process.env.HARDHAT_NETWORK 등에 어떤 값을 설정해야 할지 모르겠어서요ㅜ

그리고 ACCESS_KEY_ID와 SECRET_ACCESS_KEY 값은 Klaytn API Service에서 받은 Credential의 AccessKey ID와 Secret AccessKey를 사용하셨을까요, 아니면 직접 운영하시는 노드의 정보일까요?

질문이 많아 죄송합니다. ㅠㅠ

안녕하세요

내용은 다음과 같습니다.

DEPLOYER
컨트랙트를 배포할 지갑의 시크릿 주소 입니다.

ACCESS_KEY_ID
KAS 서비스에서 제공해주는 엑세스 키 입니다.

SECRET_ACCESS_KEY
KAS 서비스에서 제공해주는 시크릿 엑세스 키입니다.

HARDHAT_NETWORK
하드헷 스크립트를 실행시킬때 네트워크 인자를 추가하여 실행하게되는데 해당 값이 자동으로 들어갑니다.

2개의 좋아요

HARDHAT_NETWORK
하드헷 스크립트를 실행시킬때 네트워크 인자를 추가하여 실행하게되는데 해당 값이 자동으로 들어간다 라고 하셨는데 그러면

.env파일에

‘HARDHAT_NETWORK=’ 이런 식으로 비워 놓으라는 말씀이실까요? ㅠ

그리고
‘HARDHAT_NETWORK=https://public-node-api.klaytnapi.com/v1/cypress’
‘BAOBAB_URL=https://api.baobab.klaytn.net:8651’

이게 맞을까요?

또,
deploy.ts의

namedAccounts: {
deployer: 0,
},

부분에서

Type ‘{ solidity: { version: string; settings: { optimizer: { enabled: boolean; runs: number; }; }; }; namedAccounts: { deployer: number; }; networks: { hardhat: {}; cypress: { url: string; httpHeaders: { Authorization: string; ‘x-chain-id’: string; }; accounts: string[]; chainId: number; gas: number; }; baobab: { …; };…’

is not assignable to type ‘HardhatUserConfig’.
Object literal may only specify known properties, and ‘namedAccounts’ does not exist in type

이런 에러가 발생하는데 혹시 추가로 더 설정해줘야 하는 내용이 있을까요?

구글링을 한다고 하는데 답을 잘 못찾네요.ㅠ

위쪽에 'HARDHAT_URL=https://public-node-api.klaytnapi.com/v1/cypress’가 맞는지 적었어야 했는데 잘못 적었네요.
우선 HARDHAT_NETWORK는 npx hardhat run scripts/deploy.ts --network baobab의 --network baobab 대신에 미리 설정해 놓는거라고 생각이 되서 테스트넷인 baobab부터 해보기 위해 ‘HARDHAT_NETWORK=baobab’ 이라고 적어봤구요,

is not assignable to type ‘HardhatUserConfig’.에러는 deploy.ts가 아니라 hardhat.config.ts에서 발생하던 것이었고(deploy.ts에서 발생했다고 잘못 적었습니다 ㅠ) npm i hardhat-deploy-ethers 를 해서 해결하였습니다.

그런데 이제 baobab에 deploy해보기 위해 npx hardhat run scripts/deploy.ts를 실행했더니(.env파일에 'HARDHAT_NETWORK=baobab’되어있는 상태)

ProviderError: Invalid gas tip cap. It must be set to the same value as gas unit price.
at HttpProvider.request (/Users/jjj/IdeaProjects/nft-marketplace-clone/node_modules/hardhat/src/internal/core/providers/http.ts:49:19)
at LocalAccountsProvider.request (/Users/jjj/IdeaProjects/nft-marketplace-clone/node_modules/hardhat/src/internal/core/providers/accounts.ts:181:36)
at processTicksAndRejections (internal/process/task_queues.js:93:5)
at async EthersProviderWrapper.send (/Users/jjj/IdeaProjects/nft-marketplace-clone/node_modules/hardhat-deploy-ethers/src/internal/ethers-provider-wrapper.ts:13:20) 와 같은 에러가 발생하여 검색해서

안녕하세요 Web3.js 를 통한 메타마스크 클레이 전송 문의 이 문제와 같은 문제인지 살펴보았습니다. 이 글에 대한 답글로 Transaction Fees - Klaytn Docs 살펴보라고 하셨는데, 현재 스마트 컨트랙트 배포를 하려고 하는 것이니

SmartContractDeploy : TxGasContractCreation + PayloadGas + KeyValidationGas

를 적용해야 할것같은데, 막상 TxGasContractCreation, PayloadGas, KeyValidationGas 각각의 값에 대한 요금값을 해당 페이지에서 찾아볼 수 없어서 이부분 진행하지 못했고

다시 klaytn포럼에서 검색해서 gasPrice를 null로 해서 되었다는 글, 25gpeb, baobab일경우 75gpeb로 설정해야 한다는 글을 보아서

null, 25000000000, 75000000000각각의 값을
hardhat.config.js의

    baobab: {
      url: process.env.BAOBAB_URL,
      httpHeaders: {
        'Authorization': 'Basic ' + Buffer.from(process.env.ACCESS_KEY_ID + ':' + process.env.SECRET_ACCESS_KEY).toString('base64'),
        'x-chain-id': '1001',
      },
      accounts: [
        process.env.DEPLOYER || ''
      ],
      chainId: 1001,
      gas: 8500000,
      gasPrice:
    },

여기에 gasPrice: null, gasPrice: 25000000000, gasPrice: 75000000000,

deploy.ts의

  const transaction = await caver.klay.sendTransaction({
    type: 'SMART_CONTRACT_DEPLOY',
    from: deployer,
    data: '', /* bytecode */
    gas: '50000000',
    gasPrice: 
    value: 0,
  });

gasPrice에 gasPrice: null, gasPrice: 25000000000, gasPrice: 75000000000, 이런 식으로 번갈아가며 넣어봤는데 어떤 경우도 제대로 동작하지 않았습니다.

Invalid gas tip cap. It must be set to the same value as gas unit price 현 상황에서 이 에러 관련 어떻게 해결해야 할까요? ㅠㅠ

@moomin

안녕하세요.
Using Ethereum tools: How to set gas price | by Klaytn | Klaytn | Mar, 2022 | Medium 게시물을 참고해보시면 도움을 얻으실 수 있을 거 같습니다.

추가로 현재 질문자 분께서 기재해주신 75000000000 이라는 값은 맞지 않는 값입니다. 뒤에 0이 하나 더 붙어야 해요. 30배가 오른 것이기에 3을 곱하시는 것이 아닌 30을 곱한 값을 적어주셨어야 합니다.

질문에 올려주신 값은 단순 3을 곱한 값이네요. 이 점도 참고 부탁드립니다 :slight_smile:

2개의 좋아요

안녕하세요 글 작성자 인데요
저는 hardhat과 klaytn 설정 하다가 진도가 너무 느려져서 결국 truffle 이용했습니다.

1개의 좋아요

75gpeb가 아니라 750gpeb였군요. 750 000 000 000으로 바꿔서 넣었더니 deploy가 되었습니다! 감사합니다.
추가로 안내해 주신 링크에서는 Baobab 750ston, Cypress 25ston at the time of writing 이라고 되어 있는데 KAS등의 공지를 보니 메인넷에도 750gpeb로 변경된 거겠지요? (실물 klay가 없어서 테스트를 못해봤습니다)

아직 bapp은 만드는 중이라 hardhat으로 완전히 사용 가능한 것인지는 알수 없지만 DEAN님이 알려주신 코드대로 설정하되 hardhat.config.ts의

baobab: {
      url: process.env.BAOBAB_URL,
      httpHeaders: {
        'Authorization': 'Basic ' + Buffer.from(process.env.ACCESS_KEY_ID + ':' + process.env.SECRET_ACCESS_KEY).toString('base64'),
        'x-chain-id': '1001',
      },
      accounts: [
        process.env.DEPLOYER || ''
      ],
      chainId: 1001,
      gas: 8500000,
      // 여기
    },

부분에
gasPrice: 750000000000 넣고 npx hardhat run scripts/deploy.ts 하니 배포가 되었습니다. 원글 작성해주셔서 감사합니다…! 덕분에 저도 추가로 질문할 힌트를 얻었습니다. truffle로 배포 무사히 하신것 같지만 혹 hardhat으로 하게 되셔도 배포 가능하실것 같습니다.! :grinning:

2개의 좋아요

@moomin

잘 해결되셨다니 다행입니다 :slight_smile: 다른 분들도 참고하실 수 있게끔 코드와 함께 문제 해결 사례를 공유해주셔서 감사합니다.

말씀하신 것처럼 현재 Cypress 또한 Baobab과 동일한 GasPrice가 적용되어 있습니다.
참고 부탁드려요.

1개의 좋아요

감사합니다. hardhat으로 배포하게 되면 참고 하겠습니다~~!!!

1개의 좋아요

오늘 해보니 baobab gasPrice를 250000000000으로 바꿔야 deploy가 되네요. 찾아보니 https://medium.com/klaytn/updates-on-bots-mitigation-measures-april-gas-fee-burn-and-gas-price-reduction-69b29e35db59 가스 가격 인하 공지가 있었습니다.

1개의 좋아요