Skip to content

Commit

Permalink
feat: support resolve NameService.
Browse files Browse the repository at this point in the history
  • Loading branch information
Zhangguiguang committed Dec 15, 2023
1 parent 716be19 commit 37c874d
Show file tree
Hide file tree
Showing 10 changed files with 64 additions and 12 deletions.
5 changes: 5 additions & 0 deletions client/0_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -86,3 +86,8 @@ func (s SUI) Decimal() decimal.Decimal {
func (s SUI) String() string {
return strconv.FormatInt(s.Int64(), 10)
}

func SuiAddressNoErr(str string) *suiAddress {
s, _ := sui_types.NewAddressFromHex(str)
return s
}
2 changes: 1 addition & 1 deletion client/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ func (c *Client) CallContext(ctx context.Context, result interface{}, method Met
if len(respmsg.Result) == 0 {
return ErrNoResult
}
return json.Unmarshal(respmsg.Result, &result)
return json.Unmarshal(respmsg.Result, result)
}

// BatchCall sends all given requests as a single batch and waits for the server
Expand Down
16 changes: 16 additions & 0 deletions client/client_call.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package client

import (
"context"
"errors"
"strings"

"github.com/coming-chat/go-sui/v2/lib"
Expand Down Expand Up @@ -387,6 +388,21 @@ func (c *Client) QueryEvents(
return &resp, c.CallContext(ctx, &resp, queryEvents, query, cursor, limit, descendingOrder)
}

func (c *Client) ResolveNameServiceAddress(ctx context.Context, suiName string) (*suiAddress, error) {
var resp suiAddress
err := c.CallContext(ctx, &resp, resolveNameServiceAddress, suiName)
if err != nil && err.Error() == "nil address" {
return nil, errors.New("sui name not found")
}
return &resp, nil
}

func (c *Client) ResolveNameServiceNames(ctx context.Context,
owner suiAddress, cursor *suiObjectID, limit *uint) (*types.SuiNamePage, error) {
var resp types.SuiNamePage
return &resp, c.CallContext(ctx, &resp, resolveNameServiceNames, owner, cursor, limit)
}

func (c *Client) GetDynamicFields(
ctx context.Context, parentObjectId suiObjectID, cursor *suiObjectID,
limit *uint,
Expand Down
34 changes: 29 additions & 5 deletions client/client_call_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -229,8 +229,8 @@ func TestClient_GetAllCoins(t *testing.T) {
}

func TestClient_GetTransaction(t *testing.T) {
cli := TestnetClient(t)
digest := "B6WTZwFp1D6poMAQyWW8EGkq6iNLgqY1V64xJkgZDwVY"
cli := MainnetClient(t)
digest := "D1TM8Esaj3G9xFEDirqMWt9S7HjJXFrAGYBah1zixWTL"
d, err := sui_types.NewDigest(digest)
require.Nil(t, err)
resp, err := cli.GetTransactionBlock(
Expand All @@ -245,7 +245,7 @@ func TestClient_GetTransaction(t *testing.T) {
require.NoError(t, err)
t.Logf("%#v", resp)

require.Equal(t, int64(1997880), resp.Effects.Data.GasFee())
require.Equal(t, int64(11178568), resp.Effects.Data.GasFee())
}

func TestBatchCall_GetObject(t *testing.T) {
Expand Down Expand Up @@ -491,8 +491,8 @@ func TestClient_TryGetPastObject(t *testing.T) {
}

func TestClient_GetEvents(t *testing.T) {
cli := ChainClient(t)
digest := "8WvqRRZ96u3UjY24WcjmZtUZyugXUagiQNkpRe97aKRR"
cli := MainnetClient(t)
digest := "D1TM8Esaj3G9xFEDirqMWt9S7HjJXFrAGYBah1zixWTL"
d, err := sui_types.NewDigest(digest)
require.Nil(t, err)
res, err := cli.GetEvents(context.Background(), *d)
Expand Down Expand Up @@ -585,6 +585,30 @@ func TestClient_QueryTransactionBlocks(t *testing.T) {
}
}

func TestClient_ResolveNameServiceAddress(t *testing.T) {
c := MainnetClient(t)
addr, err := c.ResolveNameServiceAddress(context.Background(), "2222.sui")
require.Nil(t, err)
require.Equal(t, addr.String(), "0x6174c5bd8ab9bf492e159a64e102de66429cfcde4fa883466db7b03af28b3ce9")

addr, err = c.ResolveNameServiceAddress(context.Background(), "2222.suijjzzww")
require.ErrorContains(t, err, "not found")
}

func TestClient_ResolveNameServiceNames(t *testing.T) {
c := MainnetClient(t)
owner := SuiAddressNoErr("0x57188743983628b3474648d8aa4a9ee8abebe8f6816243773d7e8ed4fd833a28")
namePage, err := c.ResolveNameServiceNames(context.Background(), *owner, nil, nil)
require.Nil(t, err)
require.NotEmpty(t, namePage.Data)
t.Log(namePage.Data)

owner = SuiAddressNoErr("0x57188743983628b3474648d8aa4a9ee8abebe8f681")
namePage, err = c.ResolveNameServiceNames(context.Background(), *owner, nil, nil)
require.Nil(t, err)
require.Empty(t, namePage.Data)
}

func TestClient_QueryEvents(t *testing.T) {
cli := ChainClient(t)
limit := uint(10)
Expand Down
4 changes: 2 additions & 2 deletions client/client_call_unsafe_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ import (
)

func TestClient_TransferObject(t *testing.T) {
cli := ChainClient(t)
signer := M1Address(t)
cli := MainnetClient(t)
signer := SuiAddressNoErr("0x57188743983628b3474648d8aa4a9ee8abebe8f6816243773d7e8ed4fd833a28")
recipient := signer
coins, err := cli.GetCoins(context.Background(), *signer, nil, nil, 10)
require.NoError(t, err)
Expand Down
2 changes: 2 additions & 0 deletions client/method.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,8 @@ const (
queryEvents SuiXMethod = "queryEvents"
queryObjects SuiXMethod = "queryObjects"
queryTransactionBlocks SuiXMethod = "queryTransactionBlocks"
resolveNameServiceAddress SuiXMethod = "resolveNameServiceAddress"
resolveNameServiceNames SuiXMethod = "resolveNameServiceNames"
subscribeEvent SuiXMethod = "subscribeEvent"
batchTransaction UnsafeMethod = "batchTransaction"
mergeCoins UnsafeMethod = "mergeCoins"
Expand Down
7 changes: 5 additions & 2 deletions move_types/account_address.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,12 +49,15 @@ func (a AccountAddress) MarshalJSON() ([]byte, error) {
}

func (a *AccountAddress) UnmarshalJSON(data []byte) error {
str := ""
var str *string
err := json.Unmarshal(data, &str)
if err != nil {
return err
}
tmp, err := NewAccountAddressHex(str)
if str == nil {
return errors.New("nil address")
}
tmp, err := NewAccountAddressHex(*str)
if err == nil {
*a = *tmp
}
Expand Down
2 changes: 1 addition & 1 deletion types/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ type ObjectOwner struct {
*string
}

type Page[T SuiTransactionBlockResponse | SuiEvent | Coin | SuiObjectResponse | DynamicFieldInfo,
type Page[T SuiTransactionBlockResponse | SuiEvent | Coin | SuiObjectResponse | DynamicFieldInfo | string,
C sui_types.TransactionDigest | EventId | sui_types.ObjectID] struct {
Data []T `json:"data"`
NextCursor *C `json:"nextCursor,omitempty"`
Expand Down
2 changes: 2 additions & 0 deletions types/objects.go
Original file line number Diff line number Diff line change
Expand Up @@ -224,3 +224,5 @@ func (s SuiPastObject) Tag() string {
func (s SuiPastObject) Content() string {
return "details"
}

type SuiNamePage = Page[string, sui_types.ObjectID]
2 changes: 1 addition & 1 deletion types/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ const (
SuiCoinType = "0x2::sui::SUI"
DevNetRpcUrl = "https://fullnode.devnet.sui.io"
TestnetRpcUrl = "https://fullnode.testnet.sui.io"
MainnetRpcUrl = "https://sui-mainnet.coming.chat"
MainnetRpcUrl = "https://fullnode.mainnet.sui.io"
)

// ShortString Returns the address with leading zeros trimmed, e.g. 0x2
Expand Down

0 comments on commit 37c874d

Please sign in to comment.