Skip to content

Commit

Permalink
update chainclient to v0.0.4
Browse files Browse the repository at this point in the history
handle timeout to GetLogs
  • Loading branch information
bglmmz committed Sep 1, 2022
1 parent 18cac91 commit 324597e
Show file tree
Hide file tree
Showing 6 changed files with 102 additions and 47 deletions.
10 changes: 5 additions & 5 deletions did/credential_service_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,17 +41,17 @@ var vc = "{\"context\":\"http://datumtech.com/did/v1\",\"version\":\"1.0.0\",\"i
var credentialHash ethcommon.Hash

var config = &Config{
DocumentContractProxy: ethcommon.HexToAddress("0x279167d9767b10CEF88b9a81D9C912e475c0B75b"),
PctContractProxy: ethcommon.HexToAddress("0xFa2A71584740c749F1EF055741140833534504CD"),
ProposalContractProxy: ethcommon.HexToAddress("0x857027b23F73F5823984d90550A39cAA6FA43A11"),
CredentialContractProxy: ethcommon.HexToAddress("0x6Afe474d2201525558b50D5D5a8544e88d222E05"),
DocumentContractProxy: ethcommon.HexToAddress("0x207c35F61E70A6Cb5DD8Ad3Eb17c89fB061b6988"),
PctContractProxy: ethcommon.HexToAddress("0x4fD33BbF1cFd29e35739E0C434FC0a95e25B79A8"),
ProposalContractProxy: ethcommon.HexToAddress("0x5858781B484B7cdB0d76f34B8bC3bEa2C75561E9"),
CredentialContractProxy: ethcommon.HexToAddress("0x164388ac354CFb804017E070a61e90809E9369Fd"),
}

func setup() {
fmt.Println("initing........")
InitMockWallet()
MockWalletInstance().SetPrivateKey(privateKey)
ethcontext := chainclient.NewEthClientContext("ws://8.219.126.197:6790", "lat", MockWalletInstance())
ethcontext := chainclient.NewEthClientContext("http://8.219.126.197:6789", "lat", MockWalletInstance())
didService = NewDIDService(ethcontext, config)
fmt.Println("publicKey:" + publicKey)
fmt.Println("bech32Addr:" + bech32Addr.String())
Expand Down
58 changes: 37 additions & 21 deletions did/document_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"bytes"
"context"
"crypto/ecdsa"
platoncommon "github.com/PlatONnetwork/PlatON-Go/common"
"github.com/bglmmz/chainclient"
"github.com/datumtechs/did-sdk-go/common"
"github.com/datumtechs/did-sdk-go/contracts"
Expand Down Expand Up @@ -167,16 +168,17 @@ func (s *DocumentService) QueryDidDocumentByAddress(address ethcommon.Address) *
// init the result
response := new(Response[*types.DidDocument])
response.CallMode = true
response.Status = Response_FAILURE
response.Status = Response_SUCCESS

blockNo, err := s.documentContractInstance.GetLatestBlock(nil, address)
if err != nil {
log.WithError(err).Errorf("failed to call GetLatestBlock(), bech32Addr: %s", address)
log.WithError(err).Errorf("failed to call GetLatestBlock(), bech32Addr: %s", platoncommon.Address(address).Bech32())
response.Msg = "failed to get latest block of DID"
response.Status = Response_FAILURE
return response
}
if blockNo == nil || blockNo.Uint64() == 0 {
log.WithError(err).Errorf("DID not found, bech32Addr: %s", address)
log.WithError(err).Errorf("DID not found, bech32Addr: %s", platoncommon.Address(address).Bech32())
response.Msg = "DID not found"
response.Status = Response_NOT_FOUND
return response
Expand All @@ -200,30 +202,44 @@ func (s *DocumentService) QueryDidDocumentByAddress(address ethcommon.Address) *

prevBlock := blockNo
log.Debugf("blockNumber:%d", prevBlock.Uint64())
for prevBlock.Uint64() > 0 {
logs := s.ctx.GetLog(timeoutCtx, s.documentContractProxy, prevBlock)
for _, eachLog := range logs {
event, err := s.documentContractInstance.ParseDIDAttributeChange(eachLog)
breakFor := false
go func() {
main_loop:
for !breakFor && prevBlock.Uint64() > 0 {
logs, err := s.ctx.GetLog(timeoutCtx, s.documentContractProxy, prevBlock)
if err != nil {
response.Msg = "failed to parse contract event"
return response
log.WithError(err).Errorf("failed to get block logs, blockNumber:%d", prevBlock.Uint64())
response.Msg = "failed to get block logs"
response.Status = Response_FAILURE
break main_loop
}
switch event.FieldKey {
case types.DOC_EVENT_CREATE:
document.Created = event.FieldValue
document.Updated = event.UpdateTime
prevBlock = event.BlockNumber
case types.DOC_EVEN_PUBLICKEY:
didPublicKey := types.EventToDidPublicKey(document.Id, event.FieldValue)
document.Updated = event.UpdateTime
document.SupplementDidPublicKey(didPublicKey)
prevBlock = event.BlockNumber
for _, eachLog := range logs {
event, err := s.documentContractInstance.ParseDIDAttributeChange(eachLog)
if err != nil {
response.Msg = "failed to parse contract event"
response.Status = Response_FAILURE
break main_loop
}
switch event.FieldKey {
case types.DOC_EVENT_CREATE:
document.Created = event.FieldValue
document.Updated = event.UpdateTime
prevBlock = event.BlockNumber
case types.DOC_EVEN_PUBLICKEY:
didPublicKey := types.EventToDidPublicKey(document.Id, event.FieldValue)
document.Updated = event.UpdateTime
document.SupplementDidPublicKey(didPublicKey)
prevBlock = event.BlockNumber
}
}
}
}
cancelFn()
}()

<-timeoutCtx.Done()
breakFor = true

response.Data = document
response.Status = Response_SUCCESS
return response

}
Expand Down
22 changes: 19 additions & 3 deletions did/document_service_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,17 +38,29 @@ func Test_createApplicantDid(t *testing.T) {
t.Logf("response.data:%+v", response.Data)

a := assert.New(t)
if a.Contains(response.Msg, "Did exists") || a.Equal(Response_SUCCESS, response.Status) {
if a.Equal(Response_SUCCESS, response.Status) {
docResponse := didService.DocumentService.QueryDidDocument(response.Data)
t.Logf("response.Data:%+v", *docResponse.Data)
t.Logf("pubkey:%+v", *docResponse.Data.PublicKey[0])
} else {
if a.Contains(response.Msg, "Did exists") {
docResponse := didService.DocumentService.QueryDidDocument(response.Data)
t.Logf("response.Data:%+v", *docResponse.Data)
t.Logf("pubkey:%+v", *docResponse.Data.PublicKey[0])
}
}
}

func Test_QueryDidDocument(t *testing.T) {
setup()
response := didService.DocumentService.QueryDidDocument("did:pid:lat1g83xnwcqc4uufpx9588muq0e98g93rlmpgx563")
t.Logf("response:%+v", *response.Data.PublicKey[0])
response := didService.DocumentService.QueryDidDocument("did:pid:lat1cq9svdd8vc83u74relncn6cyxywr5mjqccqlea")
a := assert.New(t)
if a.Equal(Response_SUCCESS, response.Status) {
t.Logf("response:%+v", *response.Data.PublicKey[0])
} else {
t.Fatal(response.Msg)
}

}

func Test_HexToPublicKey(t *testing.T) {
Expand All @@ -62,3 +74,7 @@ func Test_HexToPublicKey(t *testing.T) {
t.Logf("bech32Addr:%+v", bech32Addr.Bech32())

}

func Test_timeout(t *testing.T) {

}
51 changes: 34 additions & 17 deletions did/evidence_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -122,14 +122,15 @@ func (s *CredentialService) QueryEvidence(req QueryEvidenceReq) *Response[*types
// init the result
response := new(Response[*types.EvidenceSignInfo])
response.CallMode = true
response.Status = Response_FAILURE
response.Status = Response_SUCCESS

credentialHash := ethcommon.BytesToHash(ethhexuti.MustDecode(req.EvidenceId))

status, err := s.credentialContractInstance.GetStatus(nil, credentialHash)
if err != nil {
log.WithError(err).Errorf("QueryEvidence: failed to get latest block), evidenceId: %s", req.EvidenceId)
response.Msg = "failed to get latest block"
response.Status = Response_FAILURE
return response
}
// init return struct
Expand All @@ -142,11 +143,13 @@ func (s *CredentialService) QueryEvidence(req QueryEvidenceReq) *Response[*types
if err != nil {
log.WithError(err).Errorf("QueryEvidence: failed to get latest block), evidenceId: %s", req.EvidenceId)
response.Msg = "failed to get latest block"
response.Status = Response_FAILURE
return response
}
if blockNo == nil || blockNo.Uint64() == 0 {
log.WithError(err).Errorf("QueryEvidence: evidence not found, evidenceId:%s", req.EvidenceId)
response.Msg = "evidence not found"
response.Status = Response_FAILURE
return response
}

Expand All @@ -155,27 +158,41 @@ func (s *CredentialService) QueryEvidence(req QueryEvidenceReq) *Response[*types
defer cancelFn()

prevBlock := blockNo
for prevBlock.Uint64() > 0 {
logs := s.ctx.GetLog(timeoutCtx, s.credentialContractProxy, prevBlock)
for _, eachLog := range logs {
event, err := s.credentialContractInstance.ParseCredentialAttributeChange(eachLog)
breakFor := false
go func() {
main_loop:
for !breakFor && prevBlock.Uint64() > 0 {
logs, err := s.ctx.GetLog(timeoutCtx, s.credentialContractProxy, prevBlock)
if err != nil {
response.Msg = "failed to parse CredentialAttributeChange event"
return response
log.WithError(err).Errorf("failed to get block logs, blockNumber:%d", prevBlock.Uint64())
response.Msg = "failed to get block logs"
response.Status = Response_FAILURE
break main_loop
}
switch event.FieldKey {
case types.VC_EVENT_SIGNATURE:
evidence.SupplementSignature(event.FieldValue)
evidence.Timestamp = event.UpdateTime
case types.VC_EVENT_SIGNERPUBKEY:
evidence.SupplementSignerPubKey(event.FieldValue)
evidence.Timestamp = event.UpdateTime
for _, eachLog := range logs {
event, err := s.credentialContractInstance.ParseCredentialAttributeChange(eachLog)
if err != nil {
response.Msg = "failed to parse CredentialAttributeChange event"
response.Status = Response_FAILURE
break main_loop
}
switch event.FieldKey {
case types.VC_EVENT_SIGNATURE:
evidence.SupplementSignature(event.FieldValue)
evidence.Timestamp = event.UpdateTime
case types.VC_EVENT_SIGNERPUBKEY:
evidence.SupplementSignerPubKey(event.FieldValue)
evidence.Timestamp = event.UpdateTime
}
prevBlock = event.BlockNumber
}
prevBlock = event.BlockNumber
}
}
cancelFn()
}()

<-timeoutCtx.Done()
breakFor = true

response.Status = Response_SUCCESS
response.Data = evidence
return response
}
Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ go 1.18

require (
github.com/PlatONnetwork/PlatON-Go v1.2.2
github.com/bglmmz/chainclient v0.0.1
github.com/bglmmz/chainclient v0.0.4
github.com/ethereum/go-ethereum v1.10.21
github.com/google/uuid v1.2.0
github.com/json-schema-spec/json-schema-go v0.2.6
Expand Down
6 changes: 6 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,12 @@ github.com/bglmmz/chainclient v0.0.0-20220731143903-9b327389888a h1:9qxK/Spnv+co
github.com/bglmmz/chainclient v0.0.0-20220731143903-9b327389888a/go.mod h1:c0Cch443MrvXSZxtbnXu3DiSO4sIjY11nSjCogWjj94=
github.com/bglmmz/chainclient v0.0.1 h1:p37zm39Ef/iTxpF3BvDntLCBaisKwVYGolwZ7vP2k6U=
github.com/bglmmz/chainclient v0.0.1/go.mod h1:5Gb2Tazp9Rxeb6kBYPW2doSyxwIVwpr8i5Bhadxw7G0=
github.com/bglmmz/chainclient v0.0.2 h1:FzpFD8G6R2DLM1ZDyt73UAiOZBHANYjCgaP1IXbjml4=
github.com/bglmmz/chainclient v0.0.2/go.mod h1:5Gb2Tazp9Rxeb6kBYPW2doSyxwIVwpr8i5Bhadxw7G0=
github.com/bglmmz/chainclient v0.0.3 h1:cIcouSvB410+dPDPpB24Rc27WASND1MxMfKjLrfb5Ts=
github.com/bglmmz/chainclient v0.0.3/go.mod h1:5Gb2Tazp9Rxeb6kBYPW2doSyxwIVwpr8i5Bhadxw7G0=
github.com/bglmmz/chainclient v0.0.4 h1:5FUDKM/kcGTfWb/FXwIs7t3JI774lyGtqH4QfHBUmEc=
github.com/bglmmz/chainclient v0.0.4/go.mod h1:5Gb2Tazp9Rxeb6kBYPW2doSyxwIVwpr8i5Bhadxw7G0=
github.com/btcsuite/btcd v0.20.1-beta h1:Ik4hyJqN8Jfyv3S4AGBOmyouMsYE3EdYODkMbQjwPGw=
github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ=
github.com/btcsuite/btcd/btcec/v2 v2.2.0 h1:fzn1qaOt32TuLjFlkzYSsBC35Q3KUjT1SwPxiMSCF5k=
Expand Down

0 comments on commit 324597e

Please sign in to comment.