rinkey 배포 "Error: Mnemonic invalid or undefined"

미해결질문
hsu940103 프로필

에러의 원인을 찾기 못해서 질문 올립니다. mac OS에서 수업 따라가고 있습니다. 해결 방법 조언을 부탁드립니다.

Error: Mnemonic invalid or undefined
    at t (/Users/hw-11135/Desktop/dapp-example/node_modules/truffle-hdwallet-provider/dist/webpack:/truffle-hdwallet-provider/src/index.js:60:1)
    at new checkBIP39Mnemonic (/Users/hw-11135/Desktop/dapp-example/node_modules/truffle-hdwallet-provider/dist/webpack:/truffle-hdwallet-provider/src/index.js:90:1)
    at Object.provider (/Users/hw-11135/Desktop/dapp-example/truffle-config.js:67:23)
    at Object.create (/Users/hw-11135/.nvm/versions/node/v10.15.2/lib/node_modules/truffle/build/webpack:/packages/truffle-provider/index.js:16:1)
    at Config.get [as provider] (/Users/hw-11135/.nvm/versions/node/v10.15.2/lib/node_modules/truffle/build/webpack:/packages/truffle-config/index.js:203:1)
    at Object.detect (/Users/hw-11135/.nvm/versions/node/v10.15.2/lib/node_modules/truffle/build/webpack:/packages/truffle-environment/environment.js:18:1)
    at Contracts.compile.then (/Users/hw-11135/.nvm/versions/node/v10.15.2/lib/node_modules/truffle/build/webpack:/packages/truffle-core/lib/commands/migrate.js:180:1)
Truffle v5.0.25 (core: 5.0.25)
Node v10.15.2

coldmind 프로필
coldmind 3달 전

이더리움 테스트넷 Rinkeby에 배포하려면 우선 배포 트랜잭션 비용을 지불해야 하는 이더가 있어야 합니다(없다면 메타마스크에서 입금 버튼을 눌러서 이더 얻기를 수행하시면 됩니다 ).

아마 실습용으로 깃허브에 있는 자료를 참조하신듯 합니다. 우선 메타마스크에서 오른쪽에 ... 을 클릭하면 계정 상세보기가 있습니다. 상세보기에는 계정키 내보내기가 있습니다. 그것을 통해 private key 문자열을 복사한 다음에  truffle-config.js에 다음 <private key> 부분에 넣으면 됩니다.

const HDWalletProvider = require("truffle-hdwallet-provider");

const privateKeys = ['cae19a0a36a3bd...6c359e9b74cfa'];

그리고  실습자료에서는 인퓨라(Infura)를 통해 이더리움 테스트넷에 연결합니다. 인퓨라는 컨센시스라는 곳에서 운영하는 일종의 노드 게이트웨이 입니다. 그래서 인퓨라에 가입하여 API key를 받아야 합니다. key를 받은 다음 <API-Key> 부분에 적어 주시면 되겠습니다.

new HDWalletProvider(privateKeys, "https://rinkeby.infura.io/v3/<API-Key>");

참고로 방금 제가 SimpleStorage 컨트랙트를 Rinkeby에 배포한 주소를 알려드립니다.

SimpleStorage

hsu940103 프로필
hsu940103 3달 전

동영상 강의를 따라서 공부하고 있습니다.
truffle-config.js 파일은 아래와 같이 작성했고, private.key는 따로 설명이 없어서 빈 파일로 생성만 해뒀는데,
아직 해결하지 못했습니다. ㅠㅠ
어느 부분을 수정하면 좋을지 알려주시면 감사하겠습니다!

const HDWalletProvider = require('truffle-hdwallet-provider');
const fs = require('fs');
const key = fs.readFileSync("private.key").toString().trim();
module.exports = {
    (중략)
    networks: {
        rinkeby: {
            provider: () => new HDWalletProvider(key, 'https://rinkeby.infura.io/v3/f003fc0b5e4b4f72b5c60cae42917eb4'),
            network_id: 4,
            (중략)
        }
    }
    (중략)
}

coldmind 프로필
coldmind 3달 전

별도로 파일로 만든 것은 보안상의 이유때문이고 그냥 private key만 적혀있는 텍스트 파일입니다. 아래와 같이 직접 넣어도 되겠습니다.

const key = ['cae19a0a36a3bdf....a6c359e9b74cfa'];

배열인 이유는 hdwallet이 12개의 단어(mnemonic)으로 키페어를 여러개 생성할 수 있기 때문입니다.

hsu940103 프로필
hsu940103 3달 전

감사합니다. 마지막으로 하나만 더 질문 드리겠습니다!

private.key 파일에 대한 설명이 없었던 것 같은데(혹시 있었다면 죄송합니다ㅠ),
private.key 파일에 어떤 내용이 포함되어야하는지 질문 드립니다!

coldmind 프로필
coldmind 3달 전

강좌에는 로컬에만 배포하는 것을 기준으로 진행되기 때문에 자세한 설명이 없었을 것 같습니다.

private.key는 그냥 텍스트 파일이고 private key만 적혀있습니다. 첫 번째 행에 cae19a0a36a3bdf....a6c359e9b74cfa 적으면 되겠습니다.

지식공유자 되기
많은 사람들에게 배움의 기회를 주고,
경제적 보상을 받아보세요.
지식공유참여
기업 교육을 위한 인프런
“인프런 비즈니스” 를 통해 모든 팀원이 인프런의 강의들을
자유롭게 학습하는 환경을 제공하세요.
인프런 비즈니스