Web3

이것은 web3.js 라이브러리의 메인(또는 'umbrella') 클래스 입니다.

var Web3 = require('web3');
> Web3.utils
> Web3.version
> Web3.givenProvider
> Web3.providers
> Web3.modules

Web3.modules

   Web3.modules

object  수동으로 인스턴스화 가능하게 object  모든 주요 sub modules  classes  함께 return 합니다.

이것은 모든 주요 하위 모듈의 클래스와 함께 객체를 반환하여 수동으로 인스턴스화 할 수 있게 해줍니다.

반환값

Object: Module Constructor 에 대한 리스트
  • Eth - Constructor: Eth 모듈은 이더리움 네트워크와 통신하는 모듈입니다. web3.eth 에서 자세한 정보를 확인 할 수 있습니다.
  • Net - Constructor: Net 모듈은 네트워크 속성과 관련된 모듈입니다. web3.eth.net 에서 자세한 정보를 확인 할 수 있습니다.
  • Personal - Constructor: Personal 모듈은 이더리움 계정과 관련된 처리를 하는 모듈입니다. web3.eth.personal 에서 자세한 정보를 확인 할 수 있습니다.
  • Shh - Constructor: Shh 모듈은 Whisper 프로토콜과 관련된 처리를 하는 모듈입니다. web3.shh 에서 자세한 정보를 확인 할 수 있습니다.
  • Bzz - Constructor: Bzz 모듈은 Swarm 네트워크와 관련된 처리를 하는 모듈입니다. web3.bzz 에서 자세한 정보를 확인 할 수 있습니다.

예제

Web3.modules
> {
    Eth: Eth(provider),
    Net: Net(provider),
    Personal: Personal(provider),
    Shh: Shh(provider),
    Bzz: Bzz(provider),
}

Web3 인스터스 (Instance)

Web3 class 는 모든 Ethereum 관련 modules 를 담을 수 있는 umbrella package 입니다.

var Web3 = require('web3');

//"Web3.providers.givenProvider" 는 이더리움 지원 브라우저에 대해 설정 됩니다.
==

var web3 = new Web3(Web3.givenProvider || 'ws://some.local-or-remote.node:8546');

> web3.eth > web3.shh > web3.bzz > web3.utils > web3.version


version

Web3 클래스의 정적 액세스(Static Access) 가능한 속성과 인스턴스별 속성 입니다.
Web3.version
web3.version

web3.js 라이브러리의 현재 패키지 버전을 포함합니다.

String: 현재의 버전 정보

web3.version;
> "1.2.3"

utils(유틸)

Web3 클래스의 정적 액세스(Static Access) 가능한 속성과 인스턴스별 속성 입니다.
Web3.utils
web3.utils

유틸리티 함수는 Web3 클래스 객체에 직접적으로 노출 됩니다. 자세한 정보는 :ref:`web3.utils <utils>`에서 확인 할 수 있습니다.


setProvider

web3.setProvider(myProvider)
web3.eth.setProvider(myProvider)
web3.shh.setProvider(myProvider)
web3.bzz.setProvider(myProvider)
...

해당 모듈의 web3 Provider를 변경 또는 설정 합니다. .. note:: web3.eth, web3.shh 등등과 같은 모든 하위 모듈에 대해 동일한 Provider가 설정됩니다. web3.bzz 는 분리된 provider가 예외적으로 적용됩니다.

  1. Object - myProvider: :ref:Provider를 검증합니다. <web3-providers>.

Boolean

var Web3 = require('web3');
var web3 = new Web3('http://localhost:8545');
// 또는
var web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:8545'));

// provider를 변경합니다.
web3.setProvider('ws://localhost:8546');

// 또는

web3.setProvider(new Web3.providers.WebsocketProvider('ws://localhost:8546'));

// node.js 에서 IPC Provider를 사용합니다.
var net = require('net');
var web3 = new Web3('/Users/myuser/Library/Ethereum/geth.ipc', net); // mac os 의 경로

// 또는

var web3 = new Web3(new Web3.providers.IpcProvider('/Users/myuser/Library/Ethereum/geth.ipc', net)); // mac os 경로
// 윈도우의 경로 : "\\\\.\\pipe\\geth.ipc"
// 리눅스의 경로: "/users/myuser/.ethereum/geth.ipc"

providers(프로바이더)

web3.providers
web3.eth.providers
web3.shh.providers
web3.bzz.providers
...

providers 를 포함하고 있습니다.

반환값 (Return)

Object with the following providers:

  • Object - HttpProvider:http 프로바이더는 더이상 사용되지 않게 되었습니다. 이것은 구독에 사용할 수 없을 것 입니다.
  • Object - WebsocketProvider: 웹 소켓 프로바이더는 레거시 브라우저에 대한 표준입니다.
  • Object - IpcProvider: IPC 프로바이더는 로컬노드를 사용하는 nodejs Dapp에 대한 표준입니다. 가장 안전한 연결을 제공합니다.

예시 (예시 (Example))

var Web3 = require('web3');
// use the given Provider, e.g in Mist, or instantiate a new websocket provider
//
var web3 = new Web3(Web3.givenProvider || 'ws://remotenode.com:8546');
// or
var web3 = new Web3(Web3.givenProvider || new Web3.providers.WebsocketProvider('ws://remotenode.com:8546'));

// Using the IPC provider in node.js
var net = require('net');

var web3 = new Web3('/Users/myuser/Library/Ethereum/geth.ipc', net); // mac os path
// or
var web3 = new Web3(new Web3.providers.IpcProvider('/Users/myuser/Library/Ethereum/geth.ipc', net)); // mac os path
// on windows the path is: "\\\\.\\pipe\\geth.ipc"
// on linux the path is: "/users/myuser/.ethereum/geth.ipc"

설정하기

// ====
// Http
// ====

var Web3HttpProvider = require('web3-providers-http');

var options = {
    keepAlive: true,
    withCredentials: false,
    timeout: 20000, // ms
    headers: [
        {
            name: 'Access-Control-Allow-Origin',
            value: '*'
        },
        {
            ...
        }
    ],
    agent: {
        http: http.Agent(...),
        baseUrl: ''
    }
};

var provider = new Web3HttpProvider('http://localhost:8545', options);

// ==========
// 웹소켓
// ==========

var Web3WsProvider = require('web3-providers-ws');

var options = {
    timeout: 30000, // ms

    // 크레덴셜을 url에 포함해서 사용할 수 있습니다 ex: ws://username:password@localhost:8546
    headers: {
      authorization: 'Basic username:password'
    },

    // 만약 결과값이 크다면 사용할 수 있습니다.
    clientConfig: {
      maxReceivedFrameSize: 100000000,   // bytes - default: 1MiB
      maxReceivedMessageSize: 100000000, // bytes - default: 8MiB
    },

    // 자동 재연결 활성화
    reconnect: {
        auto: true,
        delay: 5000, // ms
        maxAttempts: 5,
        onTimeout: false
    }
};

var ws = new Web3WsProvider('ws://localhost:8546', options);
HTTP 와 Websocket 프로바이더에 대한 정보를 더 얻으려면 밑에 링크를 참고할 수 있습니다.

givenProvider

web3.givenProvider
web3.eth.
web3.shh.givenProvider
web3.bzz.givenProvider
...

이더리움 호환 브라우저에서 web3.js 를 사용하면, 이 함수는 해당 브라우저의 네이티브 프로바이더를 반환합니다. 호환 브라우저가 아닐 경우, null 을 반환합니다.

Object: 설정된 givenProvider 또는 null.;


currentProvider

web3.currentProvider
web3.eth.currentProvider
web3.shh.currentProvider
web3.bzz.currentProvider
...

현재 provider 또는 null 을 반환합니다

Object: 현재 설정된 프로바이더 또는 null;


BatchRequest

new web3.BatchRequest()
new web3.eth.BatchRequest()
new web3.shh.BatchRequest()
new web3.bzz.BatchRequest()

Batch 요청을 만들고 실행하는 클래스 입니다.

인자 (Parameters)

없음

반환값 (Returns)

Object: 밑에 두 메소드로 이루어져 있습니다:

  • add(request): batch call에 요청 오브젝트를 추가합니다.
  • execute(): batch 요청을 실행합니다.

예시 (Example)

var contract = new web3.eth.Contract(abi, address);

var batch = new web3.BatchRequest();
batch.add(web3.eth.getBalance.request('0x0000000000000000000000000000000000000000', 'latest', callback));
batch.add(contract.methods.balance(address).call.request({from: '0x0000000000000000000000000000000000000000'}, callback2));
batch.execute();

extend

web3.extend(methods)
web3.eth.extend(methods)
web3.shh.extend(methods)
web3.bzz.extend(methods)
...

web3 모듈을 확장할 수 있게 합니다.

  1. methods - Object: 메서드 배열이 있는 확장 개체에서는 개체를 아래와 같이 설명한다:
    • property - String: (optional) 모듈에 추가할 속성의 이름. 설정된 속성이 없는 경우 모듈에 직접 추가됨.
    • methods - Array: 메서드 설명 배열
      • name - String: 추가할 메서드의 이름.
      • call - String: RPC 메서드의 이름.
      • params - Number: (optional) 함수에 대한 파라미터의 갯수, 기본값은 0.
      • inputFormatter - Array: (optional) 입력 포맷터 함수 배열. 각 어레이 항목은 함수 매개 변수에 응답하므로 일부 매개 변수를 포맷하지 않으려면 대신 null 을 추가하세요.
      • outputFormatter - ``Function: (optional) 메서드의 출력을 포맷하는 데 사용할 수 있다.

Object: 확장 모듈을 반환합니다.

web3.extend({
    property: 'myModule',
    methods: [{
        name: 'getBalance',
        call: 'eth_getBalance',
        params: 2,
        inputFormatter: [web3.extend.formatters.inputAddressFormatter, web3.extend.formatters.inputDefaultBlockNumberFormatter],
        outputFormatter: web3.utils.hexToNumberString
    },{
        name: 'getGasPriceSuperFunction',
        call: 'eth_gasPriceSuper',
        params: 2,
        inputFormatter: [null, web3.utils.numberToHex]
    }]
});

web3.extend({
    methods: [{
        name: 'directCall',
        call: 'eth_callForFun',
    }]
});

console.log(web3);
> Web3 {
    myModule: {
        getBalance: function(){},
        getGasPriceSuperFunction: function(){}
    },
    directCall: function(){},
    eth: Eth {...},
    bzz: Bzz {...},
    ...
}