Skip to main content

Command Palette

Search for a command to run...

[blcokchain] Account, UTXO 모델

Updated
2 min readView as Markdown
[blcokchain] Account, UTXO 모델
H

Hansei Cyber Security High Schoool (2022/3/2 ~ 2025/2/10)

모든 트랜잭션은 일회성입니다. 하나의 트랜잭션은 하나의 상태만 변화시킬 수 있습니다. 비트코인의 경우 UTXO를 통해 해결하고, 이더리움은 어카운트 기반 시스템으로 논스값을 각 트랜잭션이 오직 한번만 처리되게 하는 카운터로 사용합니다. 이 논스는 트랜잭션을 발신한 사람이 트랜잭션에 필요한 메시지 (이더리움 트랜잭션에 필요한 데이터) 재사용을 방지하기 위함입니다. 이를 인지한 상태로 코드를 살펴보자.

1. Account Model

//genesis state
Object {}

//state transition function
apply_transaction(state, transaction){
    // (1) Check the tx signature
    // (2) Check the nonce
    // (3) Apply our 'mint' or 'send' tx

    return new state
}
//state
[Object{
    contents: Object{
        amount: 100,
        from: "0x123",
        nonce: 1,
        to: "0xabc",
        type: "mint"
    },
    sig: "0x321"
}, Object{
    contents: Object{
        amount: 100,
        from: "0x456",
        nonce: 1,
        to: "0xdef",
        type: "send"
    },
    sig: "0x654"
}]

// state transition function
// (1) Check the tx signature
// (2) Check the nonce
// (3) Apply our 'mint' or 'send' tx
["State at time 0" Object {
    0xzyx: Object {
        balance: 100,
        nonce: 1
    }
}, Object{
    contents: Object{
        amount: 100,
        from: "0x456",
        nonce: 1,
        to: "0xdef",
        type: "send"
    },
    sig: "0x654"
}]

2. UTXO Model

{
  contents: {
    list of inputs,
    list of outputs
  },
  list of input signitures
}

UTXO Model은 위와 같습니다. 이제 아래에서 어떻게 진행되는지 살펴봅시다.

//genesis state
Object {}

//state transition function
apply_transaction(state, transaction){
  // (1) Check all tx signatures
  // (2) Check that all inputs are `unspent`
  // (3) Check that input value == output value
  // (4) Set inputs to `spent`
  // (5) Save our new `unspent` outputs
  return new state
}
//state
[Object {
    contents: Object {
                inputs: [0],
                outputs: [Object {
                            owner: "0x123",
                            value: 250
                            }, Object {
                            owner: "0xabc",
                            value: 250
                            }, Object {
                            owner: "0x456",
                            value: 500
                            }
                          ]
              }, 
    sigs: ["0xdef"]
}, Object {
     contents: Object{
                 inputs: [1,2],
                outputs: [Object {
                            owner: "0x456",
                            value: 500
                            }
                          ]
              },
      sigs: ["0xpqr"]
  }
]

시각적으로 보기 위해서, Alice의 UTXO를 살펴봅시다.
State는 다음과 같습니다.

outputs = [{value: 100, owner: 0x171}]
is_spent = [0] // 0 = unspent, 1 = spent

100달러를 Aparna와 Jing에게 $49씩 나눠서 보내기로 해보자.
Alice는 이 트랜잭션을 생성하고 이 트랜잭션은 input에 list 됩니다. input은 이제 우리의 0번째 요소입니다.

More from this blog

[알고리즘] 탐색 알고리즘 - Dfs / Bfs

탐색이란 많은 양의 데이터 중에서 원하는 데이터를 찾는 과정을 의미한다. 프로그래밍에서는 그래프, 트리 등의 자료구조 안에서 탐색을 하는 문제를 자주 다룬다. 대표적인 탐색 알고리즘으로 DFS와 BFS를 꼽을 수 있다. 깊이 우선 탐색(DFS, Depth - First Search) DFS는 Depth - First Search, 깊이 우선 탐색이라고도 부르며, 그래프와 트리의 깊은 부분을 우선적으로 탐색하는 알고리즘이다. 그림에서와 같이 갈...

May 15, 20251 min read

Vpn을 이용한 하이브리드 클라우드 구축하기

※ 터널링 VPN은 두 지점 간의 트래픽들을 암호화해서 누군가가 그 트래픽을 해석할 수 없도록 터널링 한다. 터널링을 통해서 캡슐화되어 있어서 실제로 WireShark 같은 걸로 통해서 트래픽을 도청하려고 보면 IP 등이 알던 것과는 전혀 다르게 되어있어서 해커들이 원하는 정보를 얻을 수 없게 된다. 키를 가지고 데이터를 암호화시키는 거고 터널 내부에 IP CIDR가 있는데 내가 로컬에서 이용하고 있는 데이터베이스의 10.0.0.0/24와 내가...

Dec 25, 20241 min read

Harold Lippin's blog

31 posts

Hackers studying blockchain