BlockChain/Etereum

Ethereum (6) - express와 web3-js를 사용하여 간단한 서버 구축하기

Lalabla 2022. 4. 6. 17:18
반응형

web3-js

web3-js는 이더리움 노드와 상호작용할 수 있는 자바 스크립트 기반의 API 이다. 해당 API를 통해 이더리움 노드에 접근하여 계좌정보, 컨트랙션 정보, 블록정보 등을 조회할 수 있다. 

공식문서는 여기를 참고하면 된다.

 

서버 구축하기

먼저 서버를 구축할 폴더를 만들고 npm init을 통해 프로젝트를 생성한다. 

 

mkdir ether_web3_server
cd ether_web3_server
npm init

 

그리고 ether_web3_server 폴더에 express와 web3.js를 설치한다.

 

npm install express
npm install web3

 

프로젝트에 index.js를 생성하고 다음 코드를 붙여넣는다.

(해당 코드는 서버를 실행하기 위한 가장 기본적인 코드이며, API를 만들면서 변경될 것이다.)

 

const express =require('express');
const app = express();
const port = 8080;

app.get('/', (req, res) => {
	res.send('Hello Node.js!');
});
app.listen(port, () => {
	console.log('Listening...');
});

 

그리고 package.json에 "scripts" 하위 항목으로 다음 문장을 추가한다.

 

"start": "nodemon index.js",

 

만약 노드몬이 설치되어 있지 않다면 여기를 참고해서 설치하자.

여기까지 설정 했으면 서버 구동을 위한 초기세팅은 끝났다. 이제 실행해보자. 

 

npm start

 

 

터미널에 다음과 같이 입력하면 서버가 구동될 것이다.

크롬에 localhost:8080이라고 검색했을때 아래와 같은 결과가 나오면 성공이다!.

가나슈 설치

이더리움 네트워크 연동을 위해 가나슈를 설치해서 연동해보려고 한다.

가나슈는 테스트 목적으로 PC에 설치해서 사용하는 이더리움 네트워크로 실제 이더리움 테스트넷에 연결하면 속도가 느려서 테스트하기 불편하지만 가나슈는 자체 서버로 구동되기 때문에 빠른 테스트가 가능하다는 장점이 있다.

가나슈 설치는 여기에서 할 수 있다.  가나슈가 설치되었으면 실행한다.

가나슈는 처음 설치하고 별다른 설정을 하지않으면 7545번 포트에서 동작한다.

web3-js 라이브러리 연동

가나슈가 실행되었으면 처음 작성했던 index.js를 다음과 같이 수정한다. 

 

const express =require('express');
const app = express();
const port = 8080;
const Web3 = require('web3');

function getWeb3() { 
    const web3 = new Web3(new Web3.providers.HttpProvider('http://127.0.0.1:7545'));
    return web3;
}

async function getAccounts() {
    try {
        const accounts = await getWeb3().eth.getAccounts(); 
        console.log(accounts);
        return accounts;
    } catch (e) {
        console.log(e);
        return e;
    }
}

app.get('/', (req, res) => {
    getAccounts().then((accounts) => {
        res.send(accounts);
    })
});
app.listen(port, () => {
	console.log('Listening...');
});

해당 코드는 web3에서 계좌들을 불러오는 함수를 추가한 것이다. 

 

코드를 수정했으면 다시 

npm start

를 실행해보자. 

 

chrome에서 http://localhost:8080을 조회하면 다음과 같이나오면 성공이다. 

 

자 실행이 잘 되면 가스비를 확인 요청 하는 API, 블록 정보를 가져오는 API를 추가하자. 

추가한 전체 index.js는 다음과 같다. 

const express =require('express');
const app = express();
const port = 8080;
const Web3 = require('web3');

function getWeb3() { 
    const web3 = new Web3(new Web3.providers.HttpProvider('http://127.0.0.1:7545'));
    return web3;
}

//계좌 불러오기
async function getAccounts() {
    try {
        const accounts = await getWeb3().eth.getAccounts(); 
        console.log(accounts);
        return accounts;
    } catch (e) {
        console.log(e);
        return e;
    }
}

//가스비 불러오기
async function getGasPrice() {
    try {
        const gasPrice = await getWeb3().eth.getGasPrice();
        console.log(gasPrice);
        return gasPrice;
    } catch (e) {
        console.log(e);
        return e;
    }
}

//블록정보 가져오기
async function getBlock() {
    try {
        const getBlock = await getWeb3().eth.getBlock("latest");
        console.log(getBlock);
        return getBlock;
    } catch (e) {
        console.log(e);
        return e;
    }
}

app.get('/', (req, res) => {
    getAccounts().then((accounts) => {
        res.send(accounts);
    })
});

app.get('/gasprice', (req, res) => {
    getGasPrice().then((gasPrice) => {
        res.send(gasPrice);
    })
})

app.get('/getblock', (req, res) => {
    getBlock().then((getBlock) => {
        res.send(getBlock);
    })
})

app.listen(port, () => {
	console.log('Listening...');
});

 

추가하고 해당 URL을 조회해보면 다음과 같은 결과가 나오는 것을 볼 수 있다. 

가스비 조회

가스비 조회

블록정보 조회

블록정보 조회

여기까지 제대로 나오면 성공이다.! 

 

전체 프로젝트 코드는 여기에 있다.

반응형