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를 생성해주고, 위 함수들을 사용하면 된다.