https://youtu.be/alQlKsoO_aQ
web3설치가 안돼는 경우 아래 순서대로 트러블 슈팅
보통 npm을 이용 web3를 설치하는데 npm을 사용하고 싶지 않은 경우 아래 방법사용
https://www.youtube.com/watch?v=FNfcdkPb4rg&list=PLbbtODcOYIoFs0PDlTdxpEsZiyDR2q9aA&index=3
web3 js 는 세가지 provider를 제공한다. http, websocket, ipc provider가 있으며
provider는 사용할 네트워크를 결정한다.
보통 wallet을 통해 provider를 얻어서 처리한다.
아래는 간단하게 http provider를 사용한 경우
wallet에서 provider를 가져와서 사용하는 최근의 방법
wallet에서 provider를 가져와서 사용하는 옛날 방법
https://youtu.be/nvBAalvRHOI
Web3에 provider를 제공해서 Web3 obj를 얻고 나서
web3 obj에 abi, address 를 제공해서 Contract obj를 얻을수 있다.
그리고 Contract obj를 통해서 ethereum network의 smartcontract와 통신할수 있게 된다.
web3가 ethereum network와 통신하기 위해서는 contract address와 contract abi가 필요하다.
smart contract solidity file이 아래와 같다고 하자
그중에서 MyContract.json을 확인하면 아래와 같고 여기서 network id, address를 얻을수있다. 물론 abi도 얻을수 있다.
아래는 deploy를 하지 않은 상태여서 network id, address 정보가 없다.
아래는 준비된 정보를 가지고 web3 obj를 얻는 방법이다.
https://youtu.be/4cPEGO4NAao
ethereum smart contract에 접근 하는 두가지 방법
smart contract solidity가 아래와 같다고 하자
call 을 통해 smart contract의 데이터를 읽어 올수 있다 . 이때 from, gasPrice, gas를 설정할수 있지만 보통 생략한다.
promise를 결과로 받고 then을 이용해서 처리한경우
promise를 await해서 변수에 넣고 처리한다.
https://youtu.be/xChKky8kb6A
블럭체인에 접근하는 방법은 2가지 이다. call, transaction
call(), send() 함수를 각각이용한다.
스마트 컨트랙트 solidity file은 아래와 같다.
간단한 형식을 아래와 같다. gas 는 gas limit을 의미한다. gas, gasPrice를 설정할수 있으나 어짜피 사용자가 wallet에서 수정가능하며 작성하지 않아도 web3가 기본값을 설정해 준다.
https://youtu.be/xFOb8sGNrEQ
1. 함수를 정의해서 그 함수를 이용하는 방법
2. ethereum은 fallback 함수를 지원한다. 스마트컨트랙트에 있지 않는 함수 호출 요청이 되면 fallback 함수가 수행되는데 이를 이용하는 방법
smart contract solidity 화일은 아래와 같다.
ether 보낼때 단위는 wei이며 단위가 굉장히 작아서 때로는 javascript 가 감당을 못하는데 이런경우 다른 추가 library BN을 이용해야 하거나 web3.utils를 이용한다.
아래는 일반 함수를 이용해서 ether를 전송하는 방법
아래는 일반 함수를 이용한 방법과 ethereum fallback 함수를 이용한 경우이다. (스마트 컨트랙트로 보내는 경우)
fallback 함수를 이용해 ether를 보내는 경우 (다른 지갑으로 보내는 경우)
https://youtu.be/oQ5yPKdjxFQ
event emit을 하면 변수처럼 블록체인에 저장된다. 이는 immutable하며 emit될때마다 새로운 데이터가 만들어져서 저장된다. 이는 일반 변수보다 비용이 싸며 나중에 검색가능하고 websocket으로 listening 하고 있다 새로운 event가 발생하면 연락을 받을수 있게 된다.
아래는 smart contract solidity file이다.
아래는 emit구문을 가지고 있는 함수를 호출하고 그때 event값을 받아오는 경우이다.
아래는 이미 발생되었던 event값들을 가져오는 경우이다.
아래는 websocket을 이용해서 event가 만들어진경우 (data 이벤트상황) event값을 가져오는 경우이다.
https://youtu.be/hpyWNudPDjk