@@ -15,6 +15,7 @@ import (
1515type GnoClient struct {
1616 client gnoclient.Client
1717 config ClientConfig
18+ logger core.Logger
1819}
1920
2021// ClientConfig holds the contract configuration
@@ -34,22 +35,35 @@ func NewGnoClient(config ClientConfig) (*GnoClient, error) {
3435 client := gnoclient.Client {
3536 RPCClient : rpcClient ,
3637 }
38+
39+ // Create a logger for the client
40+ logger := core .NewSlogLogger (core .ParseLogLevel ("info" ))
3741
3842 return & GnoClient {
3943 client : client ,
4044 config : config ,
45+ logger : logger ,
4146 }, nil
4247}
4348
4449// GetLinkedAddress returns the Gno address linked to a platform user ID
4550func (c * GnoClient ) GetLinkedAddress (platformID string ) (string , error ) {
4651 query := fmt .Sprintf (`GetLinkedAddress("%v")` , platformID )
47- result , _ , err := c .client .QEval ("gno.land/" + c .config .UserContract , query )
52+ contractPath := "gno.land/" + c .config .UserContract
53+
54+ c .logger .Debug ("Querying GetLinkedAddress" , "platform_id" , platformID , "contract" , contractPath , "query" , query )
55+
56+ result , _ , err := c .client .QEval (contractPath , query )
4857 if err != nil {
58+ c .logger .Error ("GetLinkedAddress query failed" , "error" , err , "platform_id" , platformID , "contract" , contractPath )
4959 return "" , fmt .Errorf ("failed to get linked address: %w" , err )
5060 }
51- fmt .Println ("GetLinkedAddress result:" , result )
52- return parseGnoAddress (result ), nil
61+
62+ c .logger .Info ("GetLinkedAddress result" , "platform_id" , platformID , "raw_result" , result )
63+ address := parseGnoAddress (result )
64+ c .logger .Info ("GetLinkedAddress parsed" , "platform_id" , platformID , "address" , address )
65+
66+ return address , nil
5367}
5468
5569// GetLinkedRole returns the role mapping for a specific realm role
@@ -65,22 +79,47 @@ func (c *GnoClient) GetLinkedRole(realmPath, roleName, platformGuildID string) (
6579// ListLinkedRoles returns all role mappings for a realm
6680func (c * GnoClient ) ListLinkedRoles (realmPath , platformGuildID string ) ([]* core.RoleMapping , error ) {
6781 query := fmt .Sprintf (`ListLinkedRolesJSON("%v", "%v")` , realmPath , platformGuildID )
68- result , _ , err := c .client .QEval ("gno.land/" + c .config .RoleContract , query )
82+ contractPath := "gno.land/" + c .config .RoleContract
83+
84+ c .logger .Debug ("Querying ListLinkedRoles" , "realm_path" , realmPath , "guild_id" , platformGuildID , "contract" , contractPath , "query" , query )
85+
86+ result , _ , err := c .client .QEval (contractPath , query )
6987 if err != nil {
88+ c .logger .Error ("ListLinkedRoles query failed" , "error" , err , "realm_path" , realmPath , "guild_id" , platformGuildID , "contract" , contractPath )
7089 return nil , fmt .Errorf ("failed to list linked roles: %w" , err )
7190 }
72- return parseLinkedRoles (result )
91+
92+ c .logger .Info ("ListLinkedRoles result" , "realm_path" , realmPath , "guild_id" , platformGuildID , "raw_result" , result )
93+
94+ roles , err := parseLinkedRoles (result )
95+ if err != nil {
96+ c .logger .Error ("Failed to parse linked roles" , "error" , err , "raw_result" , result )
97+ return nil , err
98+ }
99+
100+ c .logger .Info ("ListLinkedRoles parsed" , "realm_path" , realmPath , "guild_id" , platformGuildID , "role_count" , len (roles ))
101+
102+ return roles , nil
73103}
74104
75105// HasRole checks if an address has a specific role in the realm
76106func (c * GnoClient ) HasRole (realmPath , roleName , address string ) (bool , error ) {
77107 query := fmt .Sprintf (`HasRole("%v", "%v")` , roleName , address )
108+
109+ c .logger .Debug ("Querying HasRole" , "realm_path" , realmPath , "role_name" , roleName , "address" , address , "query" , query )
110+
78111 result , _ , err := c .client .QEval (realmPath , query )
79112 if err != nil {
113+ c .logger .Error ("HasRole query failed" , "error" , err , "realm_path" , realmPath , "role_name" , roleName , "address" , address )
80114 return false , fmt .Errorf ("failed to check role membership: %w" , err )
81115 }
82- fmt .Println ("HasRole result:" , result )
83- return result == "(true bool)" , nil
116+
117+ c .logger .Info ("HasRole result" , "realm_path" , realmPath , "role_name" , roleName , "address" , address , "raw_result" , result )
118+
119+ isMember := result == "(true bool)"
120+ c .logger .Info ("HasRole parsed" , "realm_path" , realmPath , "role_name" , roleName , "address" , address , "is_member" , isMember )
121+
122+ return isMember , nil
84123}
85124
86125// Parsing functions (same as before)
0 commit comments