전체 글(62)
-
인터페이스 구현 검증
코드를 보다 보면var _ SomeInterface = &SomeStruct{}이런 식으로 표현되어 있는 것을 종종 본적이 있을 것이다. Golang의 interface는 덕 타이핑을 사용하여 interface 내에 선언된 method들의 실제 구현 없이 method명만 언급되어도 된다.예를 들어 SomeInterface가 아래와 같은 method명 들을 가지고 있다고 가정하자.type SomeInterface interface { GetHomeDir() string GetApp(string) *types.App GetNumber() (*big.Int, error)}이 때 코드 내에 var _ SomeInterface = &SomeStruct{}로 명시된 상황에서 SomeStruct가 r..
2024.11.14 -
랜덤 변수에서 도메인까지, 블록체인 키와 계정 주소
블록체인에서 사용자 별로 보유중인 코인/토큰 수량을 구분하기 위하여 마치 은행의 계좌번호처럼 주소의 개념을 사용한다. 블록체인 개발자들은 이 주소를 어떠한 데이터를 사용하여 어떻게 표현할 것인가에 대해 많은 고민을 하였다. 사용자가 조금이라도 더 쉽게 자신의 계정을 다루기 위해 고민한 흔적들을 확인해본다.이 페이지에서는 UTXO를 사용하는 비트코인 등의 플랫폼에서, 잔액을 추적하기 위해 주소가 가변되어 고정되지 않는 경우는 제외하고 이더리움 같은 account 기반 블록체인 플랫폼을 중심으로 설명한다.Mnemonic 코드위 그림은 대표적인 블록체인 지갑앱인 메타마스크의 화면이다. 처음 메타마스크에 가입을 하고 자신의 주소를 생성할 때에 위와 같은 페이지를 발견했었을 것이다. '왜 이렇게 많은 문자를 기억..
2024.11.14 -
Golang을 이용하여 Solidity smart contract 다루기
보통 Solidity 스마트 컨트랙트를 다룰때는 JS로 되어있는 web3.js나 ethers.js를 사용하여 interaction 하고, 배포시에는 hardhat, truffle을 사용한다. 이들은 모두 javascript 기반이다. 다른 언어를 사용하여 프로그램을 개발한다면 언어 호환에 대한 고민이 있을 수 있다. Go-ethereum에서는 Golang을 기반으로 하는 서버 등의 프로그램에서 다른 언어로 이루어진 라이브러리를 사용하지 않고도 쉽고 편리하게 Solidity 컨트랙트를 다룰 수 있게 하는 기능을 제공하기 때문에 이번 페이지에서는 해당 기능을 소개하고 사용하는 방법에 대해 작성하여 한다.Bind packageGeth는 "bind" package가 존재한다. 해당 패키지의 directory는 ..
2024.11.13 -
Rust macro 활용
Rust에서 자주 사용되는 Option을 살펴보자.pub fn example_function() -> Result { // Some codes... let a: Option = temp.get(1); Ok(())}이 때 a가 Option 타입일 때, a의 값이 존재하면 unwrap()을 통해 T를 가져오고, 존재하지 않다면 error를 return한다 가정한다. 그렇다면 코드 상에서는 아래와 같이 표현될 수 있을 것이다.pub fn example_function() -> Result { // Some codes... let a: Option = temp.get(1); if a.is_none() { return CustomError::AIsNone{} } ..
2024.11.13 -
프로그램에서 동작 중인 goroutines 확인
Golang으로 개발하다 보면 goroutine을 자주 사용할 수 밖에 없고, 멀티 쓰레드 간 채널을 통해 데이터를 자주 받아야 하는 상황이 잦을것이다. 이 때 송수신 채널들이 데이터를 주고 받지 못하던지, goroutine이 동작하지 않는다던지 하는 다양한 이유로 goroutine의 생사 여부를 확인해야 하는 과정이 필요할 수 있다. 간단하게 확인하는 방법을 공유한다.Golang 디버깅 프로그램 dlv를 설치하고, 제대로 설치되어 있는지 버전을 확인한다.$ go install github.com/go-delve/delve/cmd/dlv@latest$ dlv versionGoroutine 동작을 확인하려 하는 대상인, 내가 구동시키고 있는 프로그램의 PID를 확인한다.$ ps -ef | grep PROG..
2024.11.13 -
Private transaction 전송을 위한 Tessera Overview
Tessera는 Hyperledger Besu나 GoQuorum에서 사용하는 private 보장 기술이다. 앞서 언급된 블록체인들은 모든 사용자에게 오픈된 public chain이 아닌 허가된 참여자가 사용하는 private, permissioned chain이라고 볼 수 있다. 그렇기 때문에, 태생적으로 모든 이들에게 오픈된 블록체인 특성에서 트랜잭션 거래 내역을 숨길 용도로 개발되었다. Tessera가 어떤 식으로 동작하는지 확인해본다.TesseraTessera가 적용된 블록체인 플랫폼을 확인해보면 알 수 있듯이 EVM 상에서 privacy를 보장하기 위한 기술이다. Java 기반으로 만들어져 있어 Hyperledger Besu와 더 밀접해 보이지만, Golang으로 개발된 GoQuorum에서도 AP..
2024.11.08