Goalng 을통한 Indy-VDR 개발

  1. Indy-vdr 설치
$ git clone <https://github.com/hyperledger/indy-vdr.git>
$ cd Indy-vdr

// Rust 설치
$ curl --proto '=https' --tlsv1.2 -sSf <https://sh.rustup.rs> | sh
$ source $HOME/.cargo/env
$ cargo build --lib

-확인- Compiling indy-vdr v0.4.0 (/home/isaac/indy-vdr/libindy_vdr)

// 해당 작업 안하면 go run할 때 라이브러리 못찾는다고 에러 뜸…
//$ cp /home/USERNAME/indy-vdr/target/release/deps/libindy_vdr.* /use/local/lib
$ cp /home/isaac/indy-vdr/target/debug/libindy_vdr.* /usr/local/lib // 현재시스템 적용

//$ export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH // Ubuntu
$ export LD_LIBRARY_PATH=/usr/local_lib::${LD_LIBRARY_PATH} // CentOS
$ source ~/.bash_profile

// CMake 설치(Rust 에러시)
$ cd /usr/local/src
$ wget <https://github.com/Kitware/CMake/releases/download/v3.23.2/cmake-3.23.2.tar.gz>
$ tar -zxvf cmake-3.23.2.tar.gz
$ cd cmake-3.23.2
$ ./booststrap --prefix=/usr/local/
$ ./bootstrap && make && sudo make install
$ /usr/local/bin/cmake --version
cmake version 3.23.2

CMake suite maintained and supported by Kitware (kitware.com/cmake).

// GCC-C++ 설치(CMake 에러시)
$ yum -y install gcc-c++

// 이후 make 에러시 openssl 설치
$ sudo yum install openssl-devel

// Library 렙핑 오류 = LD_LIBRARY_PATH
# vi ~/.bash_profile
  1. 코드작성
package main

import (
        "encoding/json"
        "fmt"
        "io"
        "os"

        "github.com/hyperledger/indy-vdr/wrappers/golang/vdr"
)

type ReadReply struct {
        Type          string      `json:"type"`
        Identifier    string      `json:"identifier,omitempty"`
        ReqID         uint32      `json:"reqId"`
        SeqNo         uint32      `json:"seqNo"`
        TxnTime       uint32      `json:"TxnTime"`
        Data          interface{} `json:"data"`
        SignatureType string      `json:"signature_type,omitempty"`
        Origin        string      `json:"origin,omitempty"`
        Dest          string      `json:"dest,omitempty"`
        Ref           uint32      `json:"ref,omitempty"`
        Tag           string      `json:"tag,omitempty"`
}

func main() {
        genesisFile, err := getGenesisFile()
        if err != nil {
                fmt.Print(err)
                return
        }

        defer  genesisFile.Close()

        client, err := vdr.New(genesisFile)
        if err != nil {
                fmt.Print(err)
                return
        }

        err = client.RefreshPool()
        if err != nil {
                fmt.Print(err)
                return
        }

        rply, err := client.GetNym("4zRGZz6aGepQvqSbeguWp9")
        if err != nil {
                fmt.Print(err)
                return
        }

        toByte, _ := json.Marshal(rply)

        var response ReadReply
        err = json.Unmarshal(toByte, &response)

        if response.Data == nil {
                fmt.Print("non exists did")
                return
        }

        fmt.Println("Exist!")
        fmt.Println(response.Data)
}

func getGenesisFile() (genesisFile io.ReadCloser, err error) {
        genesisFile, err = os.Open("./pool_transactions_genesis")
        if err != err {
                return
        }
        return
}