[TIL] Part4 - DAY61 Project - typescript

박동우·2023년 6월 21일

블록체인 스쿨 3기

목록 보기
57/72

[TIL] 2023-06-21 DAY61


Project

GIT 주소
https://github.com/dowoo303/SOLIDITY
https://github.com/dowoo303/hardhat


오늘 배운것들

  1. 오전: typescript 시작
  2. 오후: 프로젝트

각종 팁

회고




💻 Solidity 코딩

✅ typescript

공부 사이트

https://www.typescriptlang.org/ko/docs/handbook/intro.html

설치법

npm install typescript
npx tsc 파일명.ts : js파일 생성
node 파일명.js : 파일 실행

typescript 특징

  1. 타입을 정의할 수 있다(:)
  2. undefined : 무엇인가가 초기화 되지 않았다.
  3. null : 무엇인가를 초기화 후 null 값 할당
  4. any : 어떤 타입이든 다 가능
  5. 유니온타입( | ) : 타입 여러개 설정 가능
  6. 배열 : 설정한 타입의 값만 배열에 입력 가능
  7. 객체 : 객체+배열도 가능
  8. 함수에도 타입을 적어줘야한다.(반환값이 없는 경우에는 void)

npx create-react-app my-app --template typescript 으로 react시작 -> 기존과 다르게 jsx파일이 아닌 tsx파일이 생성됨.


💻 Project

인프라란?

일반 사용자가 블록체인과 통신을 하기 위해서는 중간에서 브릿지 역할을 해주는 모듈이 필요합니다. 이더리움 블록체인의 경우 클라이언트와 노드를 연결해주는 Web3.js를 통해 블록체인 네트워크에 접근할 수 있습니다.

사실 이더리움 블록체인의 노드에 접근하는 일 뿐만 아니라 Geth(Go Ethereum)같은 클라이언트 프로그램을 통해서 직접 블록체인 내의 노드를 실행할 수도 있습니다. 그리고 해당 노드에 접근하기 위한 엔드포인트를 만들어 직접 관리할 수도 있습니다.

여기서 문제가 발생합니다. 이더리움 블록체인에서 Geth를 실행하면 주변에 있는 피어들과 동기화를 진행하고 블록체인 사본을 다운로드 받기 시작합니다. 이대시, 상태 트리, 블록 들을 다운받으면 용량이 꽤 큰 데이터를 다운받아야 합니다. 만약 테스트넷이 아닌 메인넷인 경우 노드 하나를 운영하는데 비용이 발생합니다.

이 문제를 해결하기 위해 등장한 것이 Infura입니다. 원격 이더리움 노드에 접근할 수 있도록 엔드포인트를 제공해줍니다. 개발자는 이더리움 블록체인에서 노드를 직접 구동하고 관리하지 않아도 블록체인에 접근할 수 있고 JSON RPC로 통신할 수 있습니다.


NFT 판매기능

리믹스에서 require을 사용해서 원하는 금액 설정 후 react로 들고가서 NFT민팅 시도.
단, ERC20과는 다르게 갯수 입력 없이 그냥 민팅 버튼 하나로만 구현하려고 함.
-> totalSupply가 key가 아닐까 생각중
-> 일단은 그냥 기존에 구현되어 있던 getTbalance()함수 사용.


NFT 할인적용

할인쿠폰
NFT 민팅시에 바로 할인

이거하려면 누른 사람 지갑에 할인쿠폰 NFT 갯수 추적(balanceOf)해서 할인률 적용시켜야한다.
그럴려면 require를 할인쿠폰 갯수만큼 설정 따로 해주면 될듯.

리믹스에서는 타 컨트랙트의 balanceof함수를 호출해서 require에 곱해줘야하고(https://meongae.tistory.com/45)
react에서는 abi랑 주소 들고와서 컨트랙트로 만든 다음 위 리믹스랑 똑같은 식으로 쿠폰 갯수만큼 할인해줘야함.


profile
HELLO!

0개의 댓글