Blockchain

#15 transaction ch.5 - utxo update

Sila 2022. 6. 27. 18:15

tx pool에 대해 알아보기 전에 우선 새로운 블록이 체인에 추가되었을 경우,

 

다른 네트워크 참여자들에게 utxo에 대한 정보를 최신화 시켜주는 방식에 대해 알아보자.

 

예전에 P2PServer class 객체를 만들어 줄 때처럼 몇 가지 경우로 나눠 생각해보면 좀 더 머리에 잘 들어온다.

 

i) 내가 체인에 블럭을 추가했을 때 (채굴자 시점)

이미 우리는 addBlock 함수에서 newBlock을 만들어 chain에 넣었다.

 

이 newBlock의 tx들을 참조해 utxo를 업데이트 해주면 된다.

 

/*  src/core/blockchain/chain.ts  */

// ...중략

public addBlock ( data : ITransaction[]) : Failable < Block, string > {
    // ...중략
    
    this.blockchain.push(newBlock)
    
    newBlock.data.forEach((_tx:ITransaction) => {
        this.updateUTXO(_tx)
    })
    // #14 참조
    
    return { isError : false, value : newBlock }
}

 

ii) 다른 사람이 블록을 추가했을 때 ( 1개의 블록만을 업데이트 할 때 )

다른 노드와 통신 시, 상대방이 나보다 하나의 블록을 더 가지고 있고, 그 하나의 블록에 대한 정보를 받아

 

업데이트 할 때를 생각해보자.

 

이 때 사용했던 함수 addToChain 함수의 매개변수 (_receivedBlock) 의 tx 데이터를 받아 이를 참조해

 

내가 가진 utxo 정보를 업데이트 할 수 있다.

 

/*  src/core/blockchain/chain.ts  */

// ...중략

public addToChain ( _receivedChain : Block ) : Failable < undefined, string > {
    // ...중략
    
    this.blockchain.push(_receivedBlock)
    _receivedBlock.data.forEach((tx) => {
        this.updateUTXO(tx)
    })
    
    // ...중략
}

 

iii) 체인을 통째로 교체할 때

블록 갯수의 차이가 2 이상이라 내 체인을 남의 체인으로 통쨰로 교체하는 경우에도 동일한 방식으로 utxo를 업데이트

 

해주면 된다. 이 경우 사용된 replaceChain 함수에서 updateUTXO 함수를 호출한다.

 

/*  src/core/blockchain/chain.ts  */

// ...중략

public replaceChain ( _receivedChain : Block [] ) : Failable < undefined, string > {
    // ...중략
    
    this.blockchain = _receivedChain
    
    this.blockchain.forEach((_block : IBlock) => {
        _block.data.forEach((_tx) => {
            this.updateUTXO(_tx)
            // 블록체인의 첫 블록부터 utxo를 계산해 업데이트한다
        })
    })
}

 

이렇게 하면 체인을 업데이트 할 때 관련 함수 내부에서 utxo를 업데이트하는 함수를 호출함으로써

 

utxo도 같이 업데이트해줄 수 있다.

'Blockchain' 카테고리의 다른 글

#17 ethereum  (0) 2022.06.29
#16 transaction ch.6 - tx pool  (0) 2022.06.27
#14 transaction ch4. - transaction  (0) 2022.06.24
#13 tx ch3. 채굴자 보상  (0) 2022.06.23
#12 Transaction ch2.코인 전송  (0) 2022.06.22