반응형

프라이빗 이더리움을 운영중에 문제가 되는것 중에 하나가 pending이다. pending이 저절로 풀리면 다행인데 안풀릴때가 있다. 머 언제가는 풀릴지 모르지만 프라이빗으로 운영중인 경우 펜딩이 발생하면 블록에서 조회가 안되므로 문제가 된다.

이런 경우에 현재 블록에서 펜딩이 일어나고 있는 트랜잭션이 몇개인지 확인해 보는 방법을 알아보자.

 

우선 attach로 접속하는 경우에는 

 

> eth.pendingTransactions

 

명령으로 펜딩된 트랜잭션들을 볼 수 있다. 또는 

 

> eth.pendingTransactions.length

 

로 펜딩중인 트랜잭션의 갯수를 확인할 수 있다.

 

그런데 이 명령어가 rpc에서는 안된다는 것이다. rpc로 확인하는 경우에는 다른 방법으로 해야한다.

 

nodejs로 파일을 만들어 보자

 

var Web3 = require("web3");
var web3 = new Web3(new Web3.providers.HttpProvider("http://127.0.0.1:8545"));

web3.eth.getBlock(
    "pending",
    function (error, block) {
            var pl=block.transactions.length;
                if(pl>1){
                        console.log(pl);
                        console.log("pending...");
                }
});

 

이렇게 만들어서 노드로 실행해보면 펜딩중인 트랜잭션의 갯수를 알 수 있다. pendingTransactions인줄 알고 새빠지게 했는데 안돼서 개고생했다.

 

여기서 중요한건 저 ip이다. 저기 적혀져 있는 ip의 블록체인만 체크한다. 전체 블록체인은 체크하지 않는다. 만약 3대의 블록체인 서버를 운영중이라면 각 서버마다 저 파일을 만들어서 체크해야한다.

 

펜딩이 생기면 geth를 재시작하거나 하는 방법으로 pending을 풀 수 있다. 메인넷이나 테스트넷에서는 이런게 필요없겠지만 대사를 위해 프라이빗 네트워크를 구성하는 경우에는 pending이 문제가 될 수도 있다.

반응형

+ Recent posts