이 포스트는 블록체인에서의 거래 (Transaction)와
트랜잭션, UTXO,
Ethereum/이더리움 - 스마트 컨트랙트로 토큰 발행하기,
트랜잭션 입력 (Transaction Input), 5강 - 트랜잭션과 UTXO,
Crypto Off-Chain vs. On-Chain Transactions: What Are They?,
누구보다 빠르게 남들과는 다르게, 레이어2 솔루션,
[개념 정리] 온 체인(Onchain), 오프 체인(Offchain)이 무엇인가? 를 참고했습니다.
스마트 컨트랙트로 "트랜잭션"을 보낸다
트랜잭션을 주고받는다는 것이 거래를 한다는 건 알겠는데,
이 떄의 트랜잭션이 정확히 무슨 말일까?
블록체인 상에서 주고받는 트랜잭션의 의미에 대해 알아보자.
간단히 말하자면 데이터베이스의 상태를 변화시키는 작업의 모음
블록체인 상 저장 데이터는 트랜잭션 단위로 생성되고,
이 트랜잭션은 거래의 인풋(투입)과 아웃풋(결과) 를 생성한다.
비트코인에서 거래를 하기 위해서는 보내는 주소, 받는 주소, 금액, 수수료 등의 정보가 작성된다.
한 번 질의가 실행되면 질의가 모두 수행되거나 모두 수행되지 않는 작업 수행의 논리적인 단위이다.
트랜잭션의 특성인 원자성(Atomicity)
, 일관성(Consistency)
, 독립성, 격리성(Isolation)
, 영속성, 지속성(Durablility)
에 의해서.
하나의 묶음 처리해서 만약 중간에 실행이 중단됐을 경우, 처음부터 다시 실행하는 Rollback을 수행하고, 오류없이 실행을 마치면 commit을 한다.
블록은 헤더(header)
와 바디(body)
로 구성된다.
헤더에는 메타데이터가 삽입되고, 바디에는 트랜잭션 리스트들이 삽입된다.
트랜잭션은 발신자와 수신자, 데이터 등의 정보를 가지고 있다.
블록에는 거래의 기록단위인 트랜잭션
들을 포함한다.
특정 블록 헤더의 메타데이터를 가지고 여러 정보를 얻어올 수 있다.
예를 들어 블록은 체인 중 몇번째 블록인지, 블록에는 몇개의 트랜잭션이 담겼는지, 블록 생성자, 블록 크기, 전송량 등의 정보를 메타데이터에서 얻을 수 있다.
트랜잭션
은,
쉽게 말하면 데이터베이스의 상태를 변화시키는 일련의 논리적 기능을 수행하는 작업 단위라고 할 수 있다.
돈이 얼마나 있는지 보여주고, 돈을 가지고 있음을 보여준다.
누군가에게 10 코인을 보내고 싶다면 트랜잭션 인풋으로 보내야한다.
자신이 사용할 수 있는 이전 트랜잭션 출력(UTXO, Unspent Transaction Output) 을 자신의 개인키(private key)
로 서명하여 코인을 사용하도록 지정
보내고 난 이후의 잔액과 보낸 금액을 출력한다.
출처
MIT MAS.S62 Cryptocurrency Engineering and Design, Spring 2018
Previous transaction ID
이전 트랜잭션의 아이디
Index
트랜잭션의 아웃풋 중 소비하고자 하는 것을 가리킨다
(아웃풋은 여러 개일 수도 있어서 그 중 사용할 아웃풋을 고르는 것)
Signature
해당 비트코인을 소비할 수 있게 하는 인증 역할
자신의 개인키(private key)
로 서명한다. 이때의 서명을 디지털 서명
이라고 한다.(맞겠지?)
lock_time
해당 트랜잭션이 블록체인에 추가될 수 있는 시간
다시말해, 지난 트랜잭션의 아웃풋이 현재 트랜잭션의 인풋으로 들어간다.
지난 트랜잭션은 송신자가 코인을 받았던 기록일 것이다.
그러니까 트랜잭션을 전송한다는 말은?
내가 누구에게 얼마를 받았고 그래서 잔고가 얼마가 됐고,
누구에게 얼마를 보낼 것이고 그럼 남은 잔고가 얼마인지!
이 모든것을 담아서 보낸다는 것
탈중앙화를 표방한 블록체인이 수수료를 걷으면 은행에게 수수료를 내는 거랑 뭐가 다른가?
은행은 고정된 비용
인 반면 블록체인은 탈중앙화되어 fee가 market 상황에 따라 유동적
으로 변할 수 있다.
(나는 오히려 수수료면에서는 은행보다 더 비싸지 않나 생각한다. 유동적이라는 건 한도없이 높아질 수 있다는 거니까?
게다가 무지 느리고, 빨리 처리되기를 원하면 비용을 더 비싸게 내면 되는 시스템이기도 하고.)
블록의 첫번째 트랜잭션
다른 트랜잭션과 다른 점은 인풋은 리워드만 있고, 아웃풋은 단 하나로 채굴자의 주소를 가리키고 있다는 것이다.
코인베이스 트랜잭션의 아웃풋을 사용하려면 최소 100개의 블락의 깊이가 되어야 한다고 한다.
Unspent Transaction Ouput
의 줄임말이다.
단 한번만 사용이 될 수 있는 트랜잭션 아웃풋이다. 사용되면 없어진다.
Unspend Transaction Outputs는 모든 코인은 같지 않다는 전제를 한다.
그래서 코인을 사용할 때 특정 코인을 얼마나 사용할 것인지를 포함한다!
매 트랜잭션마다 코인은 생성되고, 소비되고, 없어진다.
모든 코인은 단 한번만 사용이 될 수 있다
비트코인의 UTXO(Unspent Transaction Outputs)
와 같은 의미로,
미사용 트랜잭션 출력값을 뜻한다.
계정 주소와 해당 계정에 남은 잔액을 객체 형태로 나타낸 것이 바로 밸런스.
TypeScript로 Balance 객체를 표현하자면 아래와 같다.
balances = [
{
address: "주소주소1",
amount: "남은 금액",
},
{
address: "주소주소2",
amount: "남은 금액",
},
{
address: "주소주소3",
amount: "남은 금액",
}
]
위의 예제 이미지로 밸런스를 설명하자면,
나의 지갑에는 처음 받은 10 + 지금받은 20 총 30달러가 있어야한다.
하지만 지갑은 그냥 30$로 보관하지 않고, [10,20] 이렇게 기록한다.
표현하자면 아래의 같다.
balances = [
{
address: "주소주소11",
amount: "10",
},
{
address: "주소주소2",
amount: "20",
}
]
On-Chain / Off-Chain
On-Chain(온체인)은 블록체인 네트워크 상에 발생하는 트랜잭션으로, 블록체인 위에 기록 된다. 온체인 상의 모든 거래 정보가 블록에 포함되며 기록된 거래는 영구적으로 제거할 수 없다.
Off-Chain(오프체인)이란 온체인과 반대로 블록체인에 기록하는 방식이 아닌, 특정한 거래 내역을 블록체인 외부에 기록하는 것이다.
블록체인 자체의 트랜잭션 처리 능력을 높이는 것.
대표적으로는 블록체인의 노드들을 더 작은 규모의 부분집합인 샤드로 나누어 트랜잭션을 병렬 처리하는 샤딩(Sharding)
이 있다.
On-chain transaction
Bitcoin on-chain transactions are validated by miners and recorded on the blockchain. Once the transactions are added to the ledger, the blockchain network is updated and distributed.
온체인 트랜잭션은 채굴자에 의해 검증되고, 블록체인에 기록되는 트랜잭션이다.
트랜잭션이 장부에 추가되면, 블록체인 네트워크는 업데이트되고 분산된다.
블록체인의 외부에서 트랜잭션을 대신 처리하는 방법을 말한다.
더 세부적으로는 아래와 같이 나뉜다.
자체적인 보안성을 갖춘 개별적인 블록체인을 구성하여 처리하는 사이드체인(Sidechain)
확장성 개선 대상의 블록체인을 지칭하는 레이어1의 보안을 차용하는 L2 솔루션
L2는 L1에 더해진 또 다른 계층의 체인,
즉 L1을 기반으로 보안성을 유지하며 이와 통신할 수 있지만 L1과는 별개로 동작하는 블록체인을 지칭한다.
Off-chain transaction
Off-chain transactions are any transactions processed outside the blockchain. These second-layer protocols aim to circumvent the on-chain’s flaws by enabling a cheaper and faster transaction.
오프체인 트랜잭션은 블록체인 외부에서 처리되는 모든 트랜잭션이다.
이 second-layer protocols은 더 싸고 더 빠른 트랜잭션이 가능하게 함으로써 온체인의 단점을 보완한다.
레이어 2 솔루션
확장성 트릴레마(Scalability Trillema)