본문 바로가기

개발 학습/블록체인31

Docker로 노드 운영 (1) : Docker와 Geth 설치 및 세팅 1. 도커와 게스란 무엇인가?도커는 컨테이너 기반 오픈 소스 가상화 플랫폼으로 개발을 하다보면 회사정책에따라 서버환경, 개발환경이 계속 바뀌는데 이전에 쓰던 환경을 계속 쓸수 있도록 도와준다. 컨테이너 생성으로 분리된 환경에 설치하여 제거도 쉽다.나는 도커안에 우분투 컨테이터를 생성하여 안에서 geth로 노드를 운영해볼것이다. 게스란 이더리움 스마트 계약을 실행할 수 있는 플랫폼입니다. go, c++, python 등 다양한 언어로 이더리움을 구동할 수 있는 클라이언트가 개발되고 있으며 현재 가장 많이 사용되는 클라이언트가 go 언어로 개발된 go-ethereum (geth)입니다. 2. 도커 설치기본 OS로 우분투를 20.04를 사용하고 있으며 이전에 Docker를 설치한적있다면 이전버전을 제거한다.$.. 2022. 2. 19.
S4: Web3에 ABI로 contract 와 personal 쓰기 Contract 키워드 배포 된 컨트랙트의 함수가 어떻게 사용될지에 대한 Abi와 배포 된 컨트랙트의 주소를 가지고 new Contract 메소드로 배포가 아닌 새 contract를 만든다. 해당 컨트랙트로 내부에 있는 함수를 call( ) 하여 실행하면 함수가 실행되게 된다. const contract = new Contract(abi, address); 이렇게 만들어진 컨트랙트 객체에 있는 함수를 사용하기 위해서는 contract.methods.함수명().call() 와 같이 사용할 수 있습니다. contract.methods.함수명()은 컨트랙트에 있는 함수를 실행하는 트랜잭션 객체를 생성합니다. 또한 contract.methods.함수명().call() 은 트랜잭션을 실행한 결과를 Promise .. 2021. 12. 8.
S4: Web3.js로 InfuraApi를 사용해 데이터 읽기 Web3.js 설치 npm init npm install web3 InfuraApi로 Web3 jsonRPC사용 설정 // getBalance.js const Web3 = require('web3'); const rpcURL = "https://ropsten.infura.io/v3/{PROJECT_ID}"; // 원격 이더리움 노드에 접속할 수 있는 주소 const web3 = new Web3(rpcURL); // web3 객체 생성 잔액을 읽는 getBalance.js 생성해보기 ( 실행 node getBalance.js ) const account = "0xDd41dB13a6edc9eEce69174B0797eBcd707b574B"; web3.eth.getBalance(account) .then((ba.. 2021. 12. 7.
S4: Infura로 이더리움 노드 접근 데이터 읽기 geth나 페리티로 이더리움 노드에 접근하여 데이터를 가져오기위해서는 동기화를 거쳐야하며 많은 데이터를 다운 받아야한다는 불편한점이 있다. infura를 통해 api로 이더리움노드에 접근하여 정보를 받아올 수 있다. curl https://ropsten.infura.io/v3/{자신의 API Key} \ -X POST \ -H "Content-type: application/json" \ -d '{"jsonrpc": "2.0", "method": "eth_getBalance", "params": ["자신의 메타마스크 계정 주소", "latest"], "id":1}' 특정 메타마스크 주소의 잔고를 받아오는 요청이다. 2021. 12. 7.
S4: 다른컨트랙트 와 상호작용하기 블록체인상에 올라와있는 다른 컨트랙트와 상호작용하여 해당 컨트랙트 내부에 있는 함수를 사용할 수 있다. contract NumberInterface { function getNum(address _myAddress) public view returns (uint); } 다음과 같이 컨트랙트에서 인터페이스를 이용할 수 있지: contract MyContract { address NumberInterfaceAddress = 0xab38... // ^ 이더리움상의 FavoriteNumber 컨트랙트 주소이다 NumberInterface numberContract = NumberInterface(NumberInterfaceAddress) // 이제 `numberContract`는 다른 컨트랙트를 가리키고 있다... 2021. 12. 2.
S4: public/private/internal/external public과 private 이외에도 솔리디티에는 internal과 external이라는 함수 접근 제어자가 있지. internal은 함수가 정의된 컨트랙트를 상속하는 컨트랙트에서도 접근이 가능하다 점을 제외하면 private과 동일하지. external은 함수가 컨트랙트 바깥에서만 호출될 수 있고 컨트랙트 내의 다른 함수에 의해 호출될 수 없다는 점을 제외하면 public과 동일하지. 나중에 external과 public이 각각 왜 필요한지 살펴 볼 것이네. 2021. 12. 2.