Hyperledger Indy ( indy-vdr) nym request

hop6·2021년 10월 19일
0

indy-vdr을 사용하여 실제로 did를 등록하는 예제 코드를 작성해본다.

import (
	"fmt"
    	"strings"
        "io"

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

Nym request에 서명을 할 endorser 권한을 갖는 did를 먼저 구해야 한다.

func CreateDidWithSeed(seed string) ( sig *crypto.Ed25519Signer, sDid string, err error) {

	base, err := identifiers.ConvertSeed(seed[0:32])
	if err != nil {
		fmt.Println(err)
	}

	var pubkey ed25519.PublicKey
	var privkey ed25519.PrivateKey
	privkey = ed25519.NewKeyFromSeed(base)
	pubkey = privkey.Public().(ed25519.PublicKey)
	did, err := identifiers.CreateDID(&identifiers.MyDIDInfo{PublicKey: pubkey, Cid: true, MethodName: "sov"})
	if err != nil {
		fmt.Println(err)
	}

	res := strings.Split(did.String(), ":")

	fmt.Println("Did: ", res[2])
	fmt.Println("Verkey: ", did.AbbreviateVerkey())

	mysig := crypto.NewSigner(pubkey, privkey)

	return mysig, res[2], nil
}
// seed값을 넣으면 해당 did, verkey를 리턴하는 함수

Nym request을 보내는 함수 작성

func Nym(targetDid string, targetVerkey string, sDid string, sign *crypto.Ed25519Signer, client *vdr.Client) (err error) {

	err = client.CreateNym(targetDid, targetVerkey, "", sDid, sign)

	if err != nil {
		return
	}

	return
}
// 메소드 명은 CreateNym이지만, indy에 request 전송까지 된다.

추가적으로 getNym 함수 ...

func getNym(did string, client *vdr.Client) (err error) {

	ReadReply, err := client.GetNym(did)
		if err != nil {
			return
		}

		if ReadReply.Data == nil {
			fmt.Println("non exists did")
			return
		}

	fmt.Print("Response : ")
	fmt.Println(ReadReply.Data)

	return
}

main에서는 적절히 genesisfile을 가져와 client를 생성해주고, 위 함수들을 사용하면 된다.

0개의 댓글