#6 Transaction Advanced

Transaction에 서명을 추가하여 보안을 강화한다.

Transaction(basic)에서는 보안이 전혀 없는 형태의 트랜잭션을 구현하였습니다. 이제 Wallet에서 생성한 private key, public key, address을 이용하여 signature과 validation을 진행하여 트랜잭션의 보안을 강화할 것입니다.

이 실습 내용은 Bitcoin 섹션의 Wallet, Signature & Verification 파트의 이론적 지식을 요구합니다.

아래 그림들을 통해서 코드를 이해해보세요.

Key와 Hash, Address 관계도 입니다. 이탤릭체로 예시로 사용할 값을 적어 놓았습니다.

Key, Hash, Address

먼저 Coinbase 트랜잭션 입니다.

Coinbase 트랜잭션

이어지는 일반 트랜잭션 입니다.

jy -> ht 30 트랜잭션

Signature와 verification의 간략한 도식입니다.

Sign and verify

blockchain/tx.go

Sign, Verify과정을 위해 Tx 구조를 수정하고 Util 함수를 추가합니다.

blockchain/transaction.go

Transaction에 서명(Sign)하고 검증(Verify)하는 함수를 추가합니다.

blockchain/blockchain.go

blockchain에 transaction을 서명하고 검증하는 함수를 추가합니다. 나머지 부분은 이전 코드에서 새로운 함수, 구조 정의에 따라 수정해줍니다. (코드가 너무 길어 생략하였습니다.)

cli/cli.go

Cli 프로그램의 명령어를 수정합니다.

Testing

시작전에 기존에 생성되어 있는 DB와 지갑 정보들을 삭제합니다.

다시 지갑 두개를 생성합니다.

create 2 wallets

첫 지갑의 주소로 blockchain을 생성합니다.

createblockchain

printchain 커맨드로 체인을 출력해봅시다. 아래와 같이 Genesis Block과 coinbase transaction에 대한 정보가 출력됩니다.

printchain

1번째 주소에서 2번째 주소로 30을 송금해보고, printchain으로 결과를 확인합니다. 두번째 블록에 기록된 트랜잭션의 상세 내용을 확인할 수 있습니다. Verification이 성공했음을 출력합니다.

Transaction verification: true

Last updated: May 1, 2021

Last updated

Was this helpful?