![](https://tistory1.daumcdn.net/tistory/6400909/skin/images/middle-flow.png)
![](https://tistory1.daumcdn.net/tistory/6400909/skin/images/middle-flow1.png)
![](https://tistory1.daumcdn.net/tistory/6400909/skin/images/middle-flow3.png)
![](https://tistory1.daumcdn.net/tistory/6400909/skin/images/middle-flow4.png)
![](https://tistory1.daumcdn.net/tistory/6400909/skin/images/middle-flow5.png)
![](https://tistory1.daumcdn.net/tistory/6400909/skin/images/middle-back.png)
분류 전체보기(63)
-
블록체인 계정 주소 checksum
이더리움의 경우, 만들어진 초기에는 계정 주소(account address)가 오타가 있는지 없는지 검증하는 기능이 들어가 있지 않았다. 아래의 케이스를 보면 주소가 다르다는 것을 눈으로 확인하는 것은 굉장히 어렵다. 0xfb6916095ca1df60bb79ce92ce3ea74c37c5d3590xfb6916095ca1df60bb79ee92ce3ea74c37c5d35920-byte hex 값으로 구성되어 있는 주소는 한개의 단어라도 오타가 발생하면 착오송금이 이루어지는 큰 문제가 발생하기 때문에 주소의 유효성을 검증하는 필요성이 부각되어서 EIP 55에서는 계정 주소가 올바른지 판단하는 표준을 제안한다.Mixed-case checksum address encoding운영되고 있는 이더리움 네트워크에서 갑자..
2025.02.03 -
인터페이스 구현 검증
코드를 보다 보면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