본문 바로가기
블록체인 기술사업 교육/Node.js

블록체인 기술사업 교육 16일차

by Mecodata 2023. 4. 24.

Node.js, MongoDB 연결

mongoose

- mongoose 라이브러리 이용 (npm imstall mongoose)

mongoDB에는 스키마가 없기 때문에 mongoose를 사용해서 스키마를 생성

- 스키마(Schema) = 해당 컬렉션의 문서에 어떤 종류의 값이 들어가는지를 정의

- 모델(model) = 스키마를 통해서 만드는 인스턴스

- mongoose 7번대 버전부터는 콜백 함수 미지원

mongoose 함수

- connect(주소) = 해당 주소의 MongoDB 연결

- disconnect(), connection.close() = mongoose 연결 해제

- Schema() = 필드 타입 정보를 JSON 형태로 정의

 const Schema = mongoose.Schema; 와 같이 변수로 선언한 후 사용

- model(문자열(단수 표현), 스키마) = 지정한 스키마를 참조하여 모델 생성

var mongoose = require("mongoose");
const Schema = mongoose.Schema;

// 스키마 정의
var checkres = new Schema({
  address: { type: String, required: true },
  blockNumber: { type: Number, required: true },
  returnValue: { type: Schema.Types.Mixed, required: true },
  createtime: { type: Date, required: true, default: new Date() },
});

// 모델 생성
var checkModel = mongoose.model("checklist", checkres);

mongoose.connect("MongDB 주소"); // MongoDB 연결
var CheckRes = new checkModel();
CheckRes.address = address;
CheckRes.blockNumber = blockNumber;
CheckRes.returnValue = returnValue;

result = CheckRes.save(); // CheckRes 객체를 MongoDB에 저장
mongoose.connection.close(); // MongoDB 종료

- findOne(), find() = 데이터 조회

- create(조건) = 데이터 추가

- save() = MongoDB에 저장

- update(수정할 값, 수정한 값) = 데이터 수정

- remove(조건) = 해당 조건 만족 시 삭제 

 

스키마(Schema) 타입

- String = 문자열
- Number = 정수
- Schema.Types.ObjectId = id (정의를 안해도 자동적으로 몽고에서는 생성하며 행을 구분하는 id 값으로 사용)
- Buffer = 바이너리 타입
- Boolea = 참/거짓
- Schema.Types.Mixed: 다양한 타입 저장 가능
- Array = 배열 ([] 이용)

- Date = 날짜

※ new Date()로 현재 시간 자동 생성 시 한국 시간으로 변환하는 방법

function getCurrentDate() {
  var date = new Date();
  var year = date.getFullYear();
  var month = date.getMonth();
  var today = date.getDate();
  var hours = date.getHours();
  var minutes = date.getMinutes();
  var seconds = date.getSeconds();
  var milliseconds = date.getMilliseconds();
  return new Date(
    Date.UTC(year, month, today, hours, minutes, seconds, milliseconds)
  );
}

스키마(Schema) 속성

- required = 입력 필수
- unique = 중복값 비허용
- trim = 공백 제거
- default = document 생성 시 기본값 설정
- lowercase = 알파벳 소문자로 출력

 

Klaytn 토큰 생성

const CaverExtKAS = require("caver-js-ext-kas");
require("dotenv").config();

const caver = new CaverExtKAS();

const accessKeyId = process.env.AccessKeyID;
const secretAccessKey = process.env.SecretAccessKey;
const chainId = 1001;

// KAS API 초기화
caver.initKASAPI(chainId, accessKeyId, secretAccessKey);

const keyringContainer = new caver.keyringContainer();

// private key를 이용해 keyring 생성
const keyring = keyringContainer.keyring.createFromPrivateKey(
  process.env.PrimaryKey
);
keyringContainer.add(keyring);

// Token 생성 함수 => klaytnscope에서 확인 가능
async function createToken() {
  const kip7 = await caver.kct.kip7.deploy(
    {
      name: "CYBER", // 토큰명
      symbol: "CY", // 토큰 심볼
      decimals: 0, // 소숫점 자리수
      initialSupply: "100000000000", // 초기 발행량
    },
    keyring.address,
    keyringContainer
  );
  console.log(kip7);
}
createToken();

// Token 전송 함수
async function transferToken(address, amount) {
  const cyberToken = await new caver.kct.kip7(
    "토큰 컨트랙트 주소"
  );
  await cyberToken.setWallet(keyringContainer);
  const receipt = await cyberToken.transfer(address, amount, {
    from: keyring.address,
  });
  console.log(receipt);
}
transferToken("토큰을 받을 지갑 주소", 토큰수);

// 지갑에서 Token 조회
async function getBalance(address) {
  const cyberToken = await new caver.kct.kip7(
    "토큰 컨트랙트 주소"
  );
  const balance = await cyberToken.balanceOf(address);
  console.log(balance);
}

getBalance("조회할 지갑 주소");

// 지갑 생성
async function createWallet() {
  const wallet = await caver.kas.wallet.createAccount();
  console.log(wallet);
}

createWallet();

댓글