관리 메뉴

개발이야기

[블록체인 개발] Web3.js - 1 본문

블록체인 /블록체인 개발

[블록체인 개발] Web3.js - 1

안성주지몬 2018. 12. 2. 19:22

블록체인 개발, 특히 이더리움 네트워크를 사용해서 블록체인 개발을 할 때 반드시 필요한 Web3.js는 과연 무엇일까요.

이더리움 네트워크를 포함한 블록체인 네트워크는 노드로 구성되어 있고, 각 노드들은 블록체인에 대한 복사본을 가지고 있습니다.

특히 이더리움 네트워크 상에서 여러분이 스마트 컨트랙트의 함수를 실행하려고 하면 노드들에게 query를 보내 아래의 내용을 전달해야 합니다.

1. 스마트 컨트랙트의 주소

2. 실행하고자 하는 함수

3. 함수에 전달하고자 하는 변수들


이더리움 노드들은 JSON-RPC라고 불리는 언어로만 소통을 합니다. 이 언어는 사람이  읽기는 불편하죠. 

컨트랙트의 함수를 실행하고 싶다는 query는 아래와 같습니다.


{"jsonrpc":"2.0","method":"eth_sendTransaction","params":[{"from":"0xb60e8dd61c5d32be8058bb8eb970870f07233155","to":"0xd46e8dd67c5d32be8058bb8eb970870f07244567","gas":"0x76c0","gasPrice":"0x9184e72a000","value":"0x9184e72a","data":"0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675"}],"id":1}


이를 Web3.js 가 우리에게 조금 더 편리하게 사용할 수 있도록 도와주죠.


Web3.js를 사용하기 위해서는 Web3 프로바이더(Provider)가 필요합니다.

우리가 만약에 DApp을 개발한다면 사용자들은 직접 블록체인에 데이터를 저장시키는것을 바랄것입니다.

이럴때 필요한 것이 사용자의 개인키와 이더리움 계정입니다. 개인키와 이더리움 계정을 편리하게 보관해주고

트랜잭션을 발생시켜주는 것이 바로 메타마스크이죠.


예시)

// in node.js use: var Web3 = require('web3');

var web3 = new Web3(Web3.givenProvider || "ws://localhost:8546");


Web3.js 를 통해 스마트 컨트랙트의 함수를 호출할 때 사용되는 두 개의 메소드가 있습니다.


1. Call


call은 컨트랙 내의 view, pure로 정의된 함수를 위해 사용됩니다. 트랜잭션을 발생시키지 않기 때문에 소모되는 가스 역시 없습니다.

예시)

Mycontrac.methods.mymethods(123)

.call({from:userAccount})


2. Send


send는 call과 달리 트랜잭션을 만들고 블록체인 상의 데이터를 변경하게 도와줍니다. view와 pure로 정의되지 않은 모든 함수에 대해서 send를 사용합니다. 


예시 )


Mycontrac.methods.mymethods(123)

.send({from:userAccount})


call과 send의 문법은 거의 동일합니다.


< 참고자료 >

[1] https://web3js.readthedocs.io/en/1.0/getting-started.html

[2] 크립토좀비 https://cryptozombies.io/ko

Comments