src > wallet.js 파일 생성
secp256k1 - 암호화 알고리즘
위 암호 알고리즘을 사용하기 위해 package 설치 (경로 : src )
npm i elliptic
wallet.js 에 가져오기 & console.log 찍어서 elliptic이 무엇인지 보기
const ecdsa = require('elliptic')
console.log(ecdsa)
아래 ec 라는 아이를 사용할 것 !
const ecdsa = require('elliptic')
console.log(ecdsa)
const ec = ecdsa.ec("secp256k1")
console.log(ec)
const ecdsa = require('elliptic')
const ec = ecdsa.ec("secp256k1")
// 키 만들기
console.log(ec.genKeyPair().getPrivate().toString(16).toUpperCase())
toString() 숫자로
toString(16) 16진수로
const ecdsa = require('elliptic')
const ec = ecdsa.ec("secp256k1")
// 키 만들기
console.log(ec.genKeyPair().getPrivate().toString(16).toUpperCase())
function generatorPrivateKey(){
// const KeyParir = ec.genKeyPair()
// const privateKey = KeyPair.getPrivate()
// return privateKey.toString(16).toUpperCase();
return ec.genKeyPair().getPrivate().toString(16).toUpperCase()
}
console.log(generatorPrivateKey())
주석처리한 3줄처럼 나눠서 쓰거나 한 줄로 처리
지갑에서 요 키값이 id, / dcontent, data
fs 내장객체 가져오기
const ecdsa = require('elliptic')
const ec = ecdsa.ec("secp256k1")
const fs = require('fs')
node server.js
특정폴더가 있으면 ->폴더 생성 X
없으면 -> 폴더 생성 진행
function initWallet(){
console.log(fs.existsSync("wallet/")) //파일이 있으면 true/ 없으면 false 반환
}
initWallet()
function initWallet(){
if(!fs.existsSync("wallet/")){ //파일이 있으면 true/ 없으면 false 반환
//위의 값이 false일 경우 폴더를 생성
fs.mkdirSync("wallet/")
}
}
initWallet()
다시한번 node. wallet.js / server on 하면 wallet 폴더가 생김 ! (src > wallet 폴더)
폴더 명 / 파일 명 정해주기
// 폴더 명 / 파일 명 정해주기
//const privateKeyLocation = "wallet/" + "default"
const privateKeyLocation = "wallet/" + (process.env.PRIVATE_KEY || "default")
const privateFile = `${privateKeyLocation}/private_key`
function initWallet(){
if(!fs.existsSync("wallet/")){ //파일이 있으면 true/ 없으면 false 반환
//위의 값이 false일 경우 폴더를 생성
fs.mkdirSync("wallet/")
}
if(!fs.existsSync(privateKeyLocation)){
fs.mkdirSync(privateKeyLocation)
}
}
폴더 안에 text 파일을 넣기 위함
키 생성해주기
function initWallet(){
if(!fs.existsSync("wallet/")){ //파일이 있으면 true/ 없으면 false 반환
//위의 값이 false일 경우 폴더를 생성
fs.mkdirSync("wallet/")
}
if(!fs.existsSync(privateKeyLocation)){
fs.mkdirSync(privateKeyLocation)
}
const newPrivateKey = generatorPrivateKey();
}
전체 코드
const ecdsa = require('elliptic')
const ec = ecdsa.ec("secp256k1")
const fs = require('fs')
// 키 만들기
//console.log(ec.genKeyPair().getPrivate().toString(16).toUpperCase())
// 폴더 명 / 파일 명 정해주기
//const privateKeyLocation = "wallet/" + "default"
const privateKeyLocation = "wallet/" + (process.env.PRIVATE_KEY || "default")
const privateFile = `${privateKeyLocation}/private_key`
function generatorPrivateKey(){
// const KeyParir = ec.genKeyPair()
// const privateKey = KeyPair.getPrivate()
// return privateKey.toString(16).toUpperCase();
return ec.genKeyPair().getPrivate().toString(16).toUpperCase()
}
console.log(generatorPrivateKey())
// 폴더 / 파일 / 내용이 업승면 채워넣는 함수 (있으면 패쓰)
function initWallet(){
if(!fs.existsSync("wallet/")){ //파일이 있으면 true/ 없으면 false 반환
//위의 값이 false일 경우 폴더를 생성
fs.mkdirSync("wallet/")
}
if(!fs.existsSync(privateKeyLocation)){
fs.mkdirSync(privateKeyLocation)
}
if(!fs.existsSync(privateFile)){
console.log(`주소값 키값을 생성 중입니다..`)
// 없으면 파일 생성
const newPrivateKey = generatorPrivateKey();
//첫번째 인자값은 경로 + 파일명
//두번째 인자값은 파일 내용
fs.writeFileSync(privateFile, newPrivateKey)
console.log(`개인 키 생성이 완료되었습니다.`)
}
// 파일 있는 경우
}
initWallet()
파일 체크하기
function getPrivateFromWallet(){
const buffer = fs.readFileSync(privateFile)
console.log(buffer)
}
getPrivateFromWallet()
우리가 알아볼 수 있게 toString()을 붙이기
return하기
function getPrivateFromWallet(){
const buffer = fs.readFileSync(privateFile)
console.log(buffer.toString())
return buffer.toString()
}
getPrivateFromWallet()
공개키 / 비밀키
function getPrivateFromWallet(){
const buffer = fs.readFileSync(privateFile)
return buffer.toString()
}
function getPublicFromWallet(){
const privateKey = getPrivateFromWallet()
const key = ec.keyFromPrivate(privateKey,"hex")
return key.getPublic().encode("hex")
}
console.log(getPrivateFromWallet())
console.log(getPublicFromWallet())
비밀키로 공개키를 만듬 (복호화 가능)
module로 빼기 & 전체 코드
const ecdsa = require('elliptic')
const ec = ecdsa.ec("secp256k1")
const fs = require('fs')
// 키 만들기
//console.log(ec.genKeyPair().getPrivate().toString(16).toUpperCase())
// 폴더 명 / 파일 명 정해주기
//const privateKeyLocation = "wallet/" + "default"
const privateKeyLocation = "wallet/" + (process.env.PRIVATE_KEY || "default")
const privateFile = `${privateKeyLocation}/private_key`
function generatorPrivateKey(){
// const KeyParir = ec.genKeyPair()
// const privateKey = KeyPair.getPrivate()
// return privateKey.toString(16).toUpperCase();
return ec.genKeyPair().getPrivate().toString(16).toUpperCase()
}
// 폴더 / 파일 / 내용이 업승면 채워넣는 함수 (있으면 패쓰)
function initWallet(){
if(!fs.existsSync("wallet/")){ //파일이 있으면 true/ 없으면 false 반환
//위의 값이 false일 경우 폴더를 생성
fs.mkdirSync("wallet/")
}
if(!fs.existsSync(privateKeyLocation)){
fs.mkdirSync(privateKeyLocation)
}
if(!fs.existsSync(privateFile)){
console.log(`주소값 키값을 생성 중입니다..`)
// 없으면 파일 생성
const newPrivateKey = generatorPrivateKey();
//첫번째 인자값은 경로 + 파일명
//두번째 인자값은 파일 내용
fs.writeFileSync(privateFile, newPrivateKey)
console.log(`개인 키 생성이 완료되었습니다.`)
}
console.log(`키값 존재합니다. `)
}
function getPrivateFromWallet(){
const buffer = fs.readFileSync(privateFile)
return buffer.toString()
}
function getPublicFromWallet(){
const privateKey = getPrivateFromWallet()
const key = ec.keyFromPrivate(privateKey,"hex")
return key.getPublic().encode("hex")
}
module.exports = {
initWallet, getPublicFromWallet,
}
server.js
wallet 가져오기
const express = require('express')
const app = express()
const port = process.env.PORT || 3000
const bodyParser = require('body-parser')
const bc = require('./block.js')
const ws = require('./network.js')
const wl = require('./wallet') //추가
폴더, 파일, 파일 안 키값 생성하기 위해 initWallet() 실행
wl.initWallet()
ws.wsInit()
app.listen(port,()=>{
console.log(`server start port ${port}`)
})
get address 만들기
app.get('/address', (req,res)=>{
const address = wl.getPublicFromWallet()
res.send({address})
})
windows Terminal 에서 확인
curl http://localhost:3000/address
질문 위에 왜 다르게 나오는지!? 그리고 -X GET 은 리눅스에서만 가능한지 -> -X GET은 리눅스에서 해석해주는 shellscript 이고 윈도우는 다른os이므로 설정된 명령어 / 출력값도 달라진대 !
자료조사 할 것 !
상장한 토큰들 3가지
메인넷 vs 테스트넷
메타마스크
ERC20 ERC721
'블록체인 기반 핀테크 및 응용 SW개발자 양성과정 일기' 카테고리의 다른 글
[124일차] basic C++ on Linux (0) | 2021.09.10 |
---|---|
[블록체인 이더리움] ERC-20 & ERC-721 / dApp / 스마트 컨트랙트란? (0) | 2021.09.09 |
[122일차] 블록체인 작업증명 Proof of Work (POW) (0) | 2021.09.08 |
[121일차] WebSocket ws로 Server 구현 (0) | 2021.09.07 |
[120일차] 블록체인 ws WebSocket (0) | 2021.09.06 |