'truffle deploy --network klaytn'를 실행했을 때 'Invalid JSON RPC response: {"id":5,"jsonrpc":"2.0"}'에러가 발생하는 이유가 뭘까요?

안녕하세요 klaytn 입문자입니다.
특정 프로젝트를 클론 프로젝팅을 하던 중 배포를 위해
‘truffle deploy --network klaytn’ 를 실행하는데


이와 같은
Invalid JSON RPC response: {“id”:5,“jsonrpc”:“2.0”} 에러가 나타나고 있습니다.

문제가 대체 뭔지 혹시 해결해주실 수 있으실까 문의드립니다.

참조하고있는 강의는 다음 url과 같습니다.

제 프로젝트 스펙은 이렇습니다
Truffle v4.1.15 (core: 4.1.15)
Solidity v0.4.25 (solc-js)

<Migrations.sol>
pragma solidity ^0.4.24;

contract Migrations {
address public owner;
uint public last_completed_migration;

constructor() public {
    owner = msg.sender;
}

modifier restricted() {
    if (msg.sender == owner) _;
}

function setCompleted(uint completed) public restricted {
    last_completed_migration = completed;
    // require(true, 'setCompleted failed');
}

function upgrade(address new_address) public restricted {
    Migrations upgraded = Migrations(new_address);
    upgraded.setCompleted(last_completed_migration);
    // require(true, 'setCompleted failed');
}

}

<1_initial_migration.js>
pragma solidity ^0.4.24;

contract Migrations {
address public owner;
uint public last_completed_migration;

constructor() public {
    owner = msg.sender;
}

modifier restricted() {
    if (msg.sender == owner) _;
}

function setCompleted(uint completed) public restricted {
    last_completed_migration = completed;
    // require(true, 'setCompleted failed');
}

function upgrade(address new_address) public restricted {
    Migrations upgraded = Migrations(new_address);
    upgraded.setCompleted(last_completed_migration);
    // require(true, 'setCompleted failed');
}

}

에러 로그에 Network state unknown이라고 되어 있네요
truffle-conf.json파일 공유 가능할까요?
사용하고 있는 클레이튼 노드는 어떤 것일까요?

baobab test net을 이용하고 있고

truffle-conf.json은
truffle webpack을 보일러플레이트로 사용하고있고

webpack.config.js와 truffle.js 파일 내용은 다음과 같습니다!

<webpack.config.js>
const webpack = require(‘webpack’)
const path = require(‘path’)
const fs = require(‘fs’)
const CopyWebpackPlugin = require(“copy-webpack-plugin”);

module.exports = {
entry: “./src/index.js”,
mode: ‘development’,
output: {
filename: “index.js”,
path: path.resolve(__dirname, ‘dist’)
},
plugins: [
// new webpack.DefinePlugin({
// DEPLOYED_ADDRESS: JSON.stringify(fs.readFileSync(‘deployedAddress’, ‘utf8’).replace(/\n|\r/g, “”)),
// DEPLOYED_ABI: fs.existsSync(‘deployedABI’) && fs.readFileSync(‘deployedABI’, ‘utf8’),
// }),
new CopyWebpackPlugin([{ from: “./src/index.html”, to: “index.html”}])
],
devServer: { contentBase: path.join(__dirname, “dist”), compress: true }
}

<truffle.js>

// truffle.js config for klaytn.

const PrivatekeyConnector = require(‘connect-privkey-to-provider’)
const NETWORK_ID = ‘1001’
const GASLIMIT = ‘20000000’
const url = ‘https://api.baobab.klaytn.net:8651
const PRIVATE_KEY = ‘0x783f1b34db487b8c59f43c7d9495d630de66e63a7f5f0e7311c16a322ec1ab06’

module.exports = {
networks: {
klaytn: {
provider: new PrivatekeyConnector(PRIVATE_KEY, url),
network_id: NETWORK_ID,
gas: GASLIMIT,
gasprice: null
}
}
}

감사합니다!

답변 늦어서 죄송합니다

connect-privkey-to-provider 대신에 truffle-hdwallet-provider-klaytn 이용해 보셨을까요?
klaytn docs의 내용 : Truffle - Klaytn Docs
사용 예시 보내드립니다

const HDWalletProvider = require('truffle-hdwallet-provider-klaytn')

const privateKey = process.env.PRIVATE_KEY

module.exports = {
  //$ truffle test --network <network-name>
  networks: {
    baobab: {
      provider: () => new HDWalletProvider(privateKey, "https://api.baobab.klaytn.net:8651"),
      network_id: '1001', //Klaytn baobab testnet's network id
      gas: '8500000',
      gasPrice: null
    },
    cypress: {
      provider: () => new HDWalletProvider(privateKey, "https://api.cypress.klaytn.net:8651"),
      network_id: '8217', //Klaytn mainnet's network id
      gas: '8500000',
      gasPrice: null
    }
  },

  compilers: {
    solc: {
      version: "0.6.6",    // Fetch exact version from solc-bin (default: truffle's version)
      docker: true,        // Use "0.5.1" you've installed locally with docker (default: false)
      settings: {          // See the solidity docs for advice about optimization and evmVersion
        optimizer: {
          enabled: true,
          runs: 200
        },
        evmVersion: "constantinople"
      }
    }
  },

친절하신 답변 감사합니다.

truffle-hdwallet-provider-klaytn 모듈을 사용해도 같은 오류가 발생합니다.
실행한 코드는 아래와 같습니다.
// truffle.js config for klaytn.

// const PrivatekeyConnector = require(‘connect-privkey-to-provider’)
const HDWalletProvider = require(‘truffle-hdwallet-provider-klaytn’)
const NETWORK_ID = ‘1001’
const GASLIMIT = ‘20000000’
const url = ‘https://api.baobab.klaytn.net:8651
const PRIVATE_KEY = ‘0x783f1b34db487b8c59f43c7d9495d630de66e63a7f5f0e7311c16a322ec1ab06’

module.exports = {
networks: {
klaytn: {
provider: new HDWalletProvider(PRIVATE_KEY, url),
network_id: NETWORK_ID,
gas: GASLIMIT,
gasprice: null
}
},
compilers: {
solc: {
version: “0.4.24”, // Fetch exact version from solc-bin (default: truffle’s version)
docker: true, // Use “0.5.1” you’ve installed locally with docker (default: false)
settings: { // See the solidity docs for advice about optimization and evmVersion
optimizer: {
enabled: true,
runs: 200
},
evmVersion: “constantinople”
}
}
}
}

오류한번 확인 부탁드리고
추가적으로 문의드릴것은
‘connect-privkey-to-provider’ 모듈은 deprecated된 것인지 문의드립니다.

감사합니다.

안녕하세요
해당 문의에 답변해주셔서 대단히 감사드립니다.

오류를 했다는 말씀 드립니다.
networks 속성에 스펠링 오류가 있었던 것을 발견했습니다.

감사합니다.

안녕하세요 :slight_smile:
오타 고치면 truffle-hdwallet-provider-klaytn 잘 되시는건가요?

Klaytn에서 connect-privkey-to-provider 모듈은 공식적으로 지원하지 않습니다.
truffle-hdwallet-provider-klaytn을 써주시면 감사하겠습니다.
다음 글도 참고가 될 거 같아 추가할게요

그리고 글 작성하실 때, Private key는 지우는게 좋을거 같습니다.

감사합니다.

네 감사합니다! 말씀해주신 부분 반영해서 진행해보도록 하겠습니다.