From 2efc0046d17f23de6d57e169542c6f73e268fcff Mon Sep 17 00:00:00 2001 From: 0xblockhash <2381582593@qq.com> Date: Sat, 6 May 2023 17:30:38 +0800 Subject: [PATCH] Add Sui Mainnet RPC URL & Update README.md --- README.md | 639 ++++++++++++++++++++++++++++++++++- config/config.go | 34 -- config/sui.keystore.fortest | 8 - constant/rpc.go | 2 + examples/event/main.go | 48 +++ examples/object/main.go | 26 +- examples/transaction/main.go | 86 ++--- models/read_object.go | 7 + sui/read_obj_api.go | 25 ++ sui/sui_test.go | 167 +++++---- 10 files changed, 869 insertions(+), 173 deletions(-) delete mode 100644 config/config.go delete mode 100644 config/sui.keystore.fortest create mode 100644 examples/event/main.go diff --git a/README.md b/README.md index 1fdf7f8..75ab00e 100644 --- a/README.md +++ b/README.md @@ -9,30 +9,43 @@

## Overview -The Sui-Go-SDK provided by BlockVision aims to offer access to all resources in the BlockVision API and also offers some additional features that make the integration easier. + +The Sui-Go-SDK provided by BlockVision aims to offer access to all resources in the BlockVision API and also offers some +additional features that make the integration easier. Sui-Go-SDK is designed for Layer 1 BlockChain [Sui](https://github.com/MystenLabs/sui) in Go programming language. ### Features -+ Support the mainstream methods in the Object, Coin, Event, Read Transaction Blocks, System Data, and Write Transaction Blocks modules. + ++ Support the mainstream methods in the Object, Coin, Event, Read Transaction Blocks, System Data, and Write Transaction + Blocks modules. + Customized request method `SuiCall`. + Unsigned methods can be executed without loading your keystore file. + Provide the method `SignAndExecuteTransactionBlock` to send signed transaction. ## Quick Start -### Install +### Install + ```shell go get github.com/block-vision/sui-go-sdk ``` ### Go Version + | Golang Version | |----------------| | \>= 1.20 | ## Examples -### Get started +### Connecting to Sui Network + +You can use the NewSuiClient method and pass in the RPC URL as an argument to easily connect to the Sui network. +BlockVision provides the following free and fast Sui network endpoints: + ++ MainNet: https://sui-mainnet-endpoint.blockvision.org ++ TestNet: https://sui-testnet-endpoint.blockvision.org + ```go package main @@ -40,15 +53,313 @@ import ( "context" "fmt" - "github.com/block-vision/sui-go-sdk/models" "github.com/block-vision/sui-go-sdk/sui" ) func main() { // configure your endpoint here or use blockVision's free Sui RPC endpoint cli := sui.NewSuiClient("https://sui-testnet-endpoint.blockvision.org") +} - ctx := context.Background() +``` + +### Writing Transaction Blocks to Sui + +#### Transfer Object + +```go +package main + +import ( + "context" + "fmt" + "github.com/block-vision/sui-go-sdk/constant" + "github.com/block-vision/sui-go-sdk/models" + "github.com/block-vision/sui-go-sdk/signer" + "github.com/block-vision/sui-go-sdk/sui" + "github.com/block-vision/sui-go-sdk/utils" +) + +func main() { + var ctx = context.Background() + var cli = sui.NewSuiClient(constant.BvTestnetEndpoint) + + signerAccount, err := signer.NewSignertWithMnemonic("input your mnemonic") + + if err != nil { + fmt.Println(err.Error()) + return + } + + priKey := signerAccount.PriKey + fmt.Printf("signerAccount.Address: %s\n", signerAccount.Address) + + rsp, err := cli.TransferObject(ctx, models.TransferObjectRequest{ + Signer: signerAccount.Address, + ObjectId: "0x99b51302b66bd65b070cdb549b86e4b9aa7370cfddc70211c2b5a478140c7999", + Gas: "0xc699c6014da947778fe5f740b2e9caf905ca31fb4c81e346f467ae126e3c03f1", + GasBudget: "100000000", + Recipient: "0xaf9f4d20c205f26051a7e1758601c4c47a9f99df3f9823f70926c17c80882d36", + }) + + if err != nil { + fmt.Println(err.Error()) + return + } + + // see the successful transaction url: https://explorer.sui.io/txblock/71xJsyNDRpGV96Dpw2FtjbWgJn2b5yP7KkYC13TGC5n9?network=testnet + rsp2, err := cli.SignAndExecuteTransactionBlock(ctx, models.SignAndExecuteTransactionBlockRequest{ + TxnMetaData: rsp, + PriKey: priKey, + // only fetch the effects field + Options: models.SuiTransactionBlockOptions{ + ShowInput: true, + ShowRawInput: true, + ShowEffects: true, + }, + RequestType: "WaitForLocalExecution", + }) + + if err != nil { + fmt.Println(err.Error()) + return + } + + utils.PrettyPrint(rsp2) +} + +``` + +#### Transfer Sui + +```go +package main + +import ( + "context" + "fmt" + "github.com/block-vision/sui-go-sdk/constant" + "github.com/block-vision/sui-go-sdk/models" + "github.com/block-vision/sui-go-sdk/signer" + "github.com/block-vision/sui-go-sdk/sui" + "github.com/block-vision/sui-go-sdk/utils" +) + +func main() { + var ctx = context.Background() + var cli = sui.NewSuiClient(constant.BvTestnetEndpoint) + + signerAccount, err := signer.NewSignertWithMnemonic("input your mnemonic") + + if err != nil { + fmt.Println(err.Error()) + return + } + + priKey := signerAccount.PriKey + fmt.Printf("signerAccount.Address: %s\n", signerAccount.Address) + + rsp, err := cli.TransferSui(ctx, models.TransferSuiRequest{ + Signer: signerAccount.Address, + SuiObjectId: "0xc699c6014da947778fe5f740b2e9caf905ca31fb4c81e346f467ae126e3c03f1", + GasBudget: "100000000", + Recipient: "0xb7f98d327f19f674347e1e40641408253142d6e7e5093a7c96eda8cdfd7d9bb5", + Amount: "1", + }) + + if err != nil { + fmt.Println(err.Error()) + return + } + + // see the successful transaction url: https://explorer.sui.io/txblock/C7iYsH4tU5RdY1KBeNax4mCBn3XLZ5UswsuDpKrVkcH6?network=testnet + rsp2, err := cli.SignAndExecuteTransactionBlock(ctx, models.SignAndExecuteTransactionBlockRequest{ + TxnMetaData: rsp, + PriKey: priKey, + // only fetch the effects field + Options: models.SuiTransactionBlockOptions{ + ShowInput: true, + ShowRawInput: true, + ShowEffects: true, + }, + RequestType: "WaitForLocalExecution", + }) + + if err != nil { + fmt.Println(err.Error()) + return + } + + utils.PrettyPrint(rsp2) +} + +``` + +#### Move Call + +```go + +package main + +import ( + "context" + "fmt" + "github.com/block-vision/sui-go-sdk/constant" + "github.com/block-vision/sui-go-sdk/models" + "github.com/block-vision/sui-go-sdk/signer" + "github.com/block-vision/sui-go-sdk/sui" + "github.com/block-vision/sui-go-sdk/utils" +) + +func main() { + var ctx = context.Background() + var cli = sui.NewSuiClient(constant.BvTestnetEndpoint) + + signerAccount, err := signer.NewSignertWithMnemonic("input your mnemonic") + + if err != nil { + fmt.Println(err.Error()) + return + } + + priKey := signerAccount.PriKey + fmt.Printf("signerAccount.Address: %s\n", signerAccount.Address) + + rsp, err := cli.MoveCall(ctx, models.MoveCallRequest{ + Signer: signerAccount.Address, + PackageObjectId: "0x7d584c9a27ca4a546e8203b005b0e9ae746c9bec6c8c3c0bc84611bcf4ceab5f", + Module: "auction", + Function: "start_an_auction", + TypeArguments: []interface{}{}, + Arguments: []interface{}{ + "0x342e959f8d9d1fa9327a05fd54fefd929bbedad47190bdbb58743d8ba3bd3420", + "0x3fd0fdedb84cf1f59386b6251ba6dd2cb495094da26e0a5a38239acd9d437f96", + "0xb3de4235cb04167b473de806d00ba351e5860500253cf8e62d711e578e1d92ae", + "BlockVision", + "0xc699c6014da947778fe5f740b2e9caf905ca31fb4c81e346f467ae126e3c03f1", + }, + Gas: "0x58c103930dc52c0ab86319d99218e301596fda6fd80c4efafd7f4c9df1d0b6d0", + GasBudget: "100000000", + }) + + if err != nil { + fmt.Println(err.Error()) + return + } + + // see the successful transaction url: https://explorer.sui.io/txblock/CD5hFB4bWFThhb6FtvKq3xAxRri72vsYLJAVd7p9t2sR?network=testnet + rsp2, err := cli.SignAndExecuteTransactionBlock(ctx, models.SignAndExecuteTransactionBlockRequest{ + TxnMetaData: rsp, + PriKey: priKey, + // only fetch the effects field + Options: models.SuiTransactionBlockOptions{ + ShowInput: true, + ShowRawInput: true, + ShowEffects: true, + }, + RequestType: "WaitForLocalExecution", + }) + + if err != nil { + fmt.Println(err.Error()) + return + } + + utils.PrettyPrint(rsp2) +} + +``` + +#### Merge coins + +```go + +package main + +import ( + "context" + "fmt" + "github.com/block-vision/sui-go-sdk/constant" + "github.com/block-vision/sui-go-sdk/models" + "github.com/block-vision/sui-go-sdk/signer" + "github.com/block-vision/sui-go-sdk/sui" + "github.com/block-vision/sui-go-sdk/utils" +) + +func main() { + var ctx = context.Background() + var cli = sui.NewSuiClient(constant.BvTestnetEndpoint) + + signerAccount, err := signer.NewSignertWithMnemonic("puppy gate beyond civil bargain matter flock armed spy piece cook depart") + + if err != nil { + fmt.Println(err.Error()) + return + } + + priKey := signerAccount.PriKey + fmt.Printf("signerAccount.Address: %s\n", signerAccount.Address) + + rsp, err := cli.MergeCoins(ctx, models.MergeCoinsRequest{ + Signer: signerAccount.Address, + PrimaryCoin: "0x180fe0c159644fe4b376e4488498e524b2a564919775cb2719734a4699ae7b28", + CoinToMerge: "0x3b4644f82b4dc339c17ed5f786f4050e1f765b38e9297ffdacdfc5ead482669f", + Gas: "0xc699c6014da947778fe5f740b2e9caf905ca31fb4c81e346f467ae126e3c03f1", + GasBudget: "100000000", + }) + + if err != nil { + fmt.Println(err.Error()) + return + } + + utils.PrettyPrint(rsp) + + // see the successful transaction url: https://explorer.sui.io/txblock/DZrnvnk67b27KQXisQA7VfnBUnga2SMnWNMY3UCZPG5a?network=testnet + rsp2, err := cli.SignAndExecuteTransactionBlock(ctx, models.SignAndExecuteTransactionBlockRequest{ + TxnMetaData: rsp, + PriKey: priKey, + // only fetch the effects field + Options: models.SuiTransactionBlockOptions{ + ShowInput: true, + ShowRawInput: true, + ShowEffects: true, + }, + RequestType: "WaitForLocalExecution", + }) + + if err != nil { + fmt.Println(err.Error()) + return + } + + utils.PrettyPrint(rsp2) +} + +``` + +### Reading Data from Sui + +#### Get the address all balance + +Fetch all balance owned by the address `0xb7f98d327f19f674347e1e40641408253142d6e7e5093a7c96eda8cdfd7d9bb5`. + +```go +package main + +import ( + "context" + "fmt" + + "github.com/block-vision/sui-go-sdk/constant" + "github.com/block-vision/sui-go-sdk/models" + "github.com/block-vision/sui-go-sdk/sui" + "github.com/block-vision/sui-go-sdk/utils" +) + +func main() { + var ctx = context.Background() + var cli = sui.NewSuiClient(constant.BvTestnetEndpoint) rsp, err := cli.SuiXGetAllBalance(ctx, models.SuiXGetAllBalanceRequest{ Owner: "0xb7f98d327f19f674347e1e40641408253142d6e7e5093a7c96eda8cdfd7d9bb5", @@ -59,9 +370,9 @@ func main() { return } - fmt.Println(rsp) + utils.PrettyPrint(rsp) - //If you want to request for original json response data, you can use SuiCall(). + // If you want to request for original json response data, you can use SuiCall(). callRsp, err := cli.SuiCall(ctx, "suix_getAllBalances", "0xb7f98d327f19f674347e1e40641408253142d6e7e5093a7c96eda8cdfd7d9bb5") if err != nil { @@ -69,21 +380,321 @@ func main() { return } - fmt.Println(callRsp) + utils.PrettyPrint(callRsp) } + ``` -## Contribution -+ We welcome your suggestions, comments (including criticisms), comments and contributions. -+ Please follow the PR/issue template provided to ensure that your contributions are clear and easy to understand. -+ Thank you to all the people who participate in building better infrastructure! +#### Get Coin Metadata + +Fetch coin metadata by the CoinType `0xf7a0b8cc24808220226301e102dae27464ea46e0d74bb968828318b9e3a921fa`. + +```go +package main + +import ( + "context" + "fmt" + + "github.com/block-vision/sui-go-sdk/constant" + "github.com/block-vision/sui-go-sdk/models" + "github.com/block-vision/sui-go-sdk/sui" + "github.com/block-vision/sui-go-sdk/utils" +) + +func main() { + var ctx = context.Background() + var cli = sui.NewSuiClient(constant.BvTestnetEndpoint) + + rsp, err := cli.SuiXGetCoinMetadata(ctx, models.SuiXGetCoinMetadataRequest{ + CoinType: "0xf7a0b8cc24808220226301e102dae27464ea46e0d74bb968828318b9e3a921fa::busd::BUSD", + }) + + if err != nil { + fmt.Println(err.Error()) + return + } + + utils.PrettyPrint(rsp) +} + +``` + +#### Get Owned Objects + +Fetch objects owned by the address `0xb7f98d327f19f674347e1e40641408253142d6e7e5093a7c96eda8cdfd7d9bb5`. + +```go +package main + +import ( + "context" + "fmt" + + "github.com/block-vision/sui-go-sdk/constant" + "github.com/block-vision/sui-go-sdk/models" + "github.com/block-vision/sui-go-sdk/sui" + "github.com/block-vision/sui-go-sdk/utils" +) + +func main() { + var ctx = context.Background() + var cli = sui.NewSuiClient(constant.BvTestnetEndpoint) + + suiObjectResponseQuery := models.SuiObjectResponseQuery{ + // only fetch the effects field + Options: models.SuiObjectDataOptions{ + ShowType: true, + ShowContent: true, + ShowBcs: true, + ShowOwner: true, + }, + } + + rsp, err := cli.SuiXGetOwnedObjects(ctx, models.SuiXGetOwnedObjectsRequest{ + Address: "0xb7f98d327f19f674347e1e40641408253142d6e7e5093a7c96eda8cdfd7d9bb5", + Query: suiObjectResponseQuery, + Limit: 5, + }) + + if err != nil { + fmt.Println(err.Error()) + return + } + + utils.PrettyPrint(rsp) +} + +``` + +#### Get Object + +Fetch object details for the object with id `0xeeb964d1e640219c8ddb791cc8548f3242a3392b143ff47484a3753291cad898`. + + +```go +package main + +import ( + "context" + "fmt" + + "github.com/block-vision/sui-go-sdk/constant" + "github.com/block-vision/sui-go-sdk/models" + "github.com/block-vision/sui-go-sdk/sui" + "github.com/block-vision/sui-go-sdk/utils" +) + +func main() { + var ctx = context.Background() + var cli = sui.NewSuiClient(constant.BvTestnetEndpoint) + + rsp, err := cli.SuiGetObject(ctx, models.SuiGetObjectRequest{ + ObjectId: "0xeeb964d1e640219c8ddb791cc8548f3242a3392b143ff47484a3753291cad898", + // only fetch the effects field + Options: models.SuiObjectDataOptions{ + ShowContent: true, + ShowDisplay: true, + ShowType: true, + ShowBcs: true, + ShowOwner: true, + ShowPreviousTransaction: true, + ShowStorageRebate: true, + }, + }) + + if err != nil { + fmt.Println(err.Error()) + return + } + + utils.PrettyPrint(rsp) +} + +``` + +#### Get Transaction + +Fetch transaction details with digests `CeVpDXKKU3Gs89efej9pKiYYQyTzifE2BDxWwquUaUht`. + +```go +package main + +import ( + "context" + "fmt" + + "github.com/block-vision/sui-go-sdk/constant" + "github.com/block-vision/sui-go-sdk/models" + "github.com/block-vision/sui-go-sdk/sui" + "github.com/block-vision/sui-go-sdk/utils" +) + +func main() { + var ctx = context.Background() + var cli = sui.NewSuiClient(constant.BvTestnetEndpoint) + + rsp, err := cli.SuiGetTransactionBlock(ctx, models.SuiGetTransactionBlockRequest{ + Digest: "CeVpDXKKU3Gs89efej9pKiYYQyTzifE2BDxWwquUaUht", + // only fetch the effects field + Options: models.SuiTransactionBlockOptions{ + ShowInput: true, + ShowRawInput: true, + ShowEffects: true, + ShowEvents: true, + ShowBalanceChanges: true, + ShowObjectChanges: true, + }, + }) + + if err != nil { + fmt.Println(err.Error()) + return + } + + utils.PrettyPrint(rsp) + + // fetch multiple transactions in one batch request + rsp2, err := cli.SuiMultiGetTransactionBlocks(ctx, models.SuiMultiGetTransactionBlocksRequest{ + Digests: []string{"CeVpDXKKU3Gs89efej9pKiYYQyTzifE2BDxWwquUaUht", "C2zZu2dpX2sLQy2234yt6ecRiNTVgQTXeQpgw9GhxGgo"}, + // only fetch the effects field + Options: models.SuiTransactionBlockOptions{ + ShowInput: true, + ShowRawInput: true, + ShowEffects: true, + ShowEvents: true, + ShowObjectChanges: true, + ShowBalanceChanges: true, + }, + }) + + if err != nil { + fmt.Println(err.Error()) + return + } + + for _, transactionBlock := range rsp2 { + utils.PrettyPrint(*transactionBlock) + } + +} + +``` + +#### Get Checkpoints + +Get latest 10 Checkpoints in descending order. + +```go +package main + +import ( + "context" + "fmt" + + "github.com/block-vision/sui-go-sdk/constant" + "github.com/block-vision/sui-go-sdk/models" + "github.com/block-vision/sui-go-sdk/sui" + "github.com/block-vision/sui-go-sdk/utils" +) + +func main() { + var ctx = context.Background() + var cli = sui.NewSuiClient(constant.BvTestnetEndpoint) + + rsp, err := cli.SuiGetCheckpoints(ctx, models.SuiGetCheckpointsRequest{ + Limit: 10, + DescendingOrder: true, + }) + + if err != nil { + fmt.Println(err.Error()) + return + } + + utils.PrettyPrint(rsp) + + // fetch Checkpoint 1628214 and print details. + rsp2, err := cli.SuiGetCheckpoint(ctx, models.SuiGetCheckpointRequest{ + CheckpointID: "1628214", + }) + + if err != nil { + fmt.Println(err.Error()) + return + } + + utils.PrettyPrint(rsp2) + +} + +``` + +#### Query Events + +Fetch event details with digests `CeVpDXKKU3Gs89efej9pKiYYQyTzifE2BDxWwquUaUht`. + +```go +package main + +import ( + "context" + "fmt" + + "github.com/block-vision/sui-go-sdk/constant" + "github.com/block-vision/sui-go-sdk/models" + "github.com/block-vision/sui-go-sdk/sui" + "github.com/block-vision/sui-go-sdk/utils" +) + +func main() { + var ctx = context.Background() + var cli = sui.NewSuiClient(constant.BvTestnetEndpoint) + + rsp, err := cli.SuiGetEvents(ctx, models.SuiGetEventsRequest{ + Digest: "HATq5p7MNynkBL5bLsdVqL3K38PxWHbqs7vndGiz5qrA", + }) + + if err != nil { + fmt.Println(err.Error()) + return + } + + utils.PrettyPrint(rsp) + + // fetch list of events for a specified query criteria. + rsp2, err := cli.SuiXQueryEvents(ctx, models.SuiXQueryEventsRequest{ + SuiEventFilter: models.EventFilterByMoveEventType{ + MoveEventType: "0x3::validator::StakingRequestEvent", + }, + Limit: 5, + DescendingOrder: true, + }) + + if err != nil { + fmt.Println(err.Error()) + return + } + + utils.PrettyPrint(rsp2) + +} + +``` + +## Contribution + ++ We welcome your suggestions, comments (including criticisms), comments and contributions. ++ Please follow the PR/issue template provided to ensure that your contributions are clear and easy to understand. ++ Thank you to all the people who participate in building better infrastructure! ## Resources + + [SDK Examples](https://github.com/block-vision/sui-go-sdk/tree/main/examples) + [Sui](https://github.com/MystenLabs/sui) +## License -## License [Apache 2.0 license](LICENSE) diff --git a/config/config.go b/config/config.go deleted file mode 100644 index f9c74a9..0000000 --- a/config/config.go +++ /dev/null @@ -1,34 +0,0 @@ -package config - -import ( - "encoding/json" - "io/ioutil" - "os" -) - -type KeyStoreConfig struct { - Keys []string -} - -var keyStoreConfig KeyStoreConfig - -func GetKeyStore(path string) (KeyStoreConfig, error) { - err := loadConfig(path) - return keyStoreConfig, err -} - -func loadConfig(dir string) error { - f, err := os.Open(dir) - if err != nil { - return err - } - content, err := ioutil.ReadAll(f) - if err != nil { - return err - } - err = json.Unmarshal(content, &keyStoreConfig.Keys) - if err != nil { - return err - } - return nil -} diff --git a/config/sui.keystore.fortest b/config/sui.keystore.fortest deleted file mode 100644 index 7043574..0000000 --- a/config/sui.keystore.fortest +++ /dev/null @@ -1,8 +0,0 @@ -[ - "AQOf3sfviz7pkIN+qpZfeVrsidg3o39wCohnNS6hkmCzkRyGeALaqpP2iJ1LqWJsxxY2b6H6HLyPOoOhoiBi7SnZ", - "AF6BUd9nBhR0h6hivei0nwcMe1N/GnrB7YecMu8G4yVp9hpOwpqaoCyxgSrHQsz1U0nlNKNVURrtyjfMoSRGKCw=", - "ACCxbg6Y1dMH02D/RqgzeQLLlOJB6FancLCDSFZ0oe3XgaH5ViyVHCgu3+shKU4OpArSvXSzSSuyjLRd+zDijk0=", - "AEQmSf8ZrgC5wsRKwUwLPxcaMD7TiUjp1SMxopHKY+/GbwLY2gyLSs7wMgwILoCJJbHLsSxHkVGEcka5L/UAe8o=", - "ADNVM7XLQd7bx0YFqY4R6J+581liKIeKQWhETX1IO5aFpR6k8+RV/JkHAHJMnRbZTtmNOrERWHJxOzh4oLWY4i0=", - "AKMI98sBlQLPXtvNKAu/DA7mDJACduEI/zqdIZzv9kBRARz/t75VC7TzR68ez6CYvWDtf7cXC0Ks1R0RuQJOm9c=" -] \ No newline at end of file diff --git a/constant/rpc.go b/constant/rpc.go index 744e351..d9ea329 100644 --- a/constant/rpc.go +++ b/constant/rpc.go @@ -2,5 +2,7 @@ package constant const ( BvTestnetEndpoint = "https://sui-testnet-endpoint.blockvision.org" + BvMainnetEndpoint = "https://sui-mainnet-endpoint.blockvision.org" SuiTestnetEndpoint = "https://fullnode.testnet.sui.io" + SuiMainnetEndpoint = "https://fullnode.mainnet.sui.io" ) diff --git a/examples/event/main.go b/examples/event/main.go new file mode 100644 index 0000000..fc91e6c --- /dev/null +++ b/examples/event/main.go @@ -0,0 +1,48 @@ +package main + +import ( + "context" + "fmt" + "github.com/block-vision/sui-go-sdk/constant" + "github.com/block-vision/sui-go-sdk/models" + "github.com/block-vision/sui-go-sdk/sui" + "github.com/block-vision/sui-go-sdk/utils" +) + +var ctx = context.Background() +var cli = sui.NewSuiClient(constant.BvTestnetEndpoint) + +func main() { + SuiGetEvents() + SuiXQueryEvents() +} + +func SuiGetEvents() { + rsp, err := cli.SuiGetEvents(ctx, models.SuiGetEventsRequest{ + Digest: "HATq5p7MNynkBL5bLsdVqL3K38PxWHbqs7vndGiz5qrA", + }) + + if err != nil { + fmt.Println(err.Error()) + return + } + + utils.PrettyPrint(rsp) +} + +func SuiXQueryEvents() { + rsp, err := cli.SuiXQueryEvents(ctx, models.SuiXQueryEventsRequest{ + SuiEventFilter: models.EventFilterByMoveEventType{ + MoveEventType: "0x3::validator::StakingRequestEvent", + }, + Limit: 5, + DescendingOrder: false, + }) + + if err != nil { + fmt.Println(err.Error()) + return + } + + utils.PrettyPrint(rsp) +} diff --git a/examples/object/main.go b/examples/object/main.go index 46e806a..70fb7ae 100644 --- a/examples/object/main.go +++ b/examples/object/main.go @@ -13,6 +13,7 @@ var ctx = context.Background() var cli = sui.NewSuiClient(constant.BvTestnetEndpoint) func main() { + SuiGetObject() SuiXGetOwnedObjects() SuiMultiGetObjects() SuiXGetDynamicField() @@ -20,6 +21,29 @@ func main() { SuiGetLoadedChildObjects() } +func SuiGetObject() { + rsp, err := cli.SuiGetObject(ctx, models.SuiGetObjectRequest{ + ObjectId: "0xeeb964d1e640219c8ddb791cc8548f3242a3392b143ff47484a3753291cad898", + Options: models.SuiObjectDataOptions{ + ShowContent: true, + ShowDisplay: true, + ShowType: true, + ShowBcs: true, + ShowOwner: true, + ShowPreviousTransaction: true, + ShowStorageRebate: true, + }, + }) + + if err != nil { + fmt.Println(err.Error()) + return + } + + utils.PrettyPrint(rsp) + +} + func SuiXGetOwnedObjects() { suiObjectResponseQuery := models.SuiObjectResponseQuery{ Filter: models.ObjectFilterByPackage{ @@ -122,4 +146,4 @@ func SuiGetLoadedChildObjects() { } utils.PrettyPrint(rsp) -} \ No newline at end of file +} diff --git a/examples/transaction/main.go b/examples/transaction/main.go index b4678ef..1c060b1 100644 --- a/examples/transaction/main.go +++ b/examples/transaction/main.go @@ -72,7 +72,7 @@ func SuiDryRunTransactionBlock() { func SuiDevInspectTransactionBlock() { rsp, err := cli.SuiDevInspectTransactionBlock(ctx, models.SuiDevInspectTransactionBlockRequest{ - Sender: "0xb7f98d327f19f674347e1e40641408253142d6e7e5093a7c96eda8cdfd7d9bb5", + Sender: "0x4ae8be62692d1bbf892b657ee78a59954240ee0525f20a5b5687a70995cf0eff", TxBytes: "AAACAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQEAAAAAAAAAAQEAjgDW4hJZlqvw654RGR3SdndKkdjoC0pzXQLxja/NUahLowQAAAAAACBEQGwClI9RQX68dzbN7PN29/Pw/Sc1hbtZwNAny7wZ+wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMKc3VpX3N5c3RlbRZyZXF1ZXN0X3dpdGhkcmF3X3N0YWtlAAIBAAABAQC3+Y0yfxn2dDR+HkBkFAglMULW5+UJOnyW7ajN/X2btQEqzrI5x8BMQ6LjmCSgAykfjisdYCcyTfW79nyzDB/PvtZBpwAAAAAAIAm+IREDziwoZLm7lc4ZKegZ2J5viEgoss9zgrFkHLh6t/mNMn8Z9nQ0fh5AZBQIJTFC1uflCTp8lu2ozf19m7XoAwAAAAAAAFDhjyoAAAAAAA==", GasPrice: "1000", Epoch: "87", @@ -100,7 +100,7 @@ func SignAndExecuteTransactionBlock() { Signer: signerAccount.Address, SuiObjectId: "0xc699c6014da947778fe5f740b2e9caf905ca31fb4c81e346f467ae126e3c03f1", GasBudget: "100000000", - Recipient: "0xb7f98d327f19f674347e1e40641408253142d6e7e5093a7c96eda8cdfd7d9bb5", + Recipient: "0x4ae8be62692d1bbf892b657ee78a59954240ee0525f20a5b5687a70995cf0eff", Amount: "1", }) @@ -215,7 +215,7 @@ func SuiXQueryTransactionBlocks() { func MoveCall() { rsp, err := cli.MoveCall(ctx, models.MoveCallRequest{ - Signer: "0xb7f98d327f19f674347e1e40641408253142d6e7e5093a7c96eda8cdfd7d9bb5", + Signer: "0x4ae8be62692d1bbf892b657ee78a59954240ee0525f20a5b5687a70995cf0eff", PackageObjectId: "0x7d584c9a27ca4a546e8203b005b0e9ae746c9bec6c8c3c0bc84611bcf4ceab5f", Module: "auction", Function: "start_an_auction", @@ -225,9 +225,9 @@ func MoveCall() { "0x3fd0fdedb84cf1f59386b6251ba6dd2cb495094da26e0a5a38239acd9d437f96", "0xb3de4235cb04167b473de806d00ba351e5860500253cf8e62d711e578e1d92ae", "web3", - "0x2aceb239c7c04c43a2e39824a003291f8e2b1d6027324df5bbf67cb30c1fcfbe", + "0xc699c6014da947778fe5f740b2e9caf905ca31fb4c81e346f467ae126e3c03f1", }, - Gas: "0x2aceb239c7c04c43a2e39824a003291f8e2b1d6027324df5bbf67cb30c1fcfbe", + Gas: "0xc699c6014da947778fe5f740b2e9caf905ca31fb4c81e346f467ae126e3c03f1", GasBudget: "1000", }) @@ -241,11 +241,11 @@ func MoveCall() { func MergeCoins() { rsp, err := cli.MergeCoins(ctx, models.MergeCoinsRequest{ - Signer: "0xb7f98d327f19f674347e1e40641408253142d6e7e5093a7c96eda8cdfd7d9bb5", - PrimaryCoin: "0x2aceb239c7c04c43a2e39824a003291f8e2b1d6027324df5bbf67cb30c1fcfbe", + Signer: "0x4ae8be62692d1bbf892b657ee78a59954240ee0525f20a5b5687a70995cf0eff", + PrimaryCoin: "0xc699c6014da947778fe5f740b2e9caf905ca31fb4c81e346f467ae126e3c03f1", CoinToMerge: "0x92f03fdec6e0278dcb6fa3f4467eeee3e0bee1ac41825351ef53431677d2e2f7", - Gas: "0x2aceb239c7c04c43a2e39824a003291f8e2b1d6027324df5bbf67cb30c1fcfbe", - GasBudget: "1000", + Gas: "0xc699c6014da947778fe5f740b2e9caf905ca31fb4c81e346f467ae126e3c03f1", + GasBudget: "1000000", }) if err != nil { @@ -258,10 +258,10 @@ func MergeCoins() { func SplitCoin() { rsp, err := cli.SplitCoin(ctx, models.SplitCoinRequest{ - Signer: "0xb7f98d327f19f674347e1e40641408253142d6e7e5093a7c96eda8cdfd7d9bb5", - CoinObjectId: "0x2aceb239c7c04c43a2e39824a003291f8e2b1d6027324df5bbf67cb30c1fcfbe", + Signer: "0x4ae8be62692d1bbf892b657ee78a59954240ee0525f20a5b5687a70995cf0eff", + CoinObjectId: "0xc699c6014da947778fe5f740b2e9caf905ca31fb4c81e346f467ae126e3c03f1", SplitAmounts: []string{"1000", "1000"}, - Gas: "0x2aceb239c7c04c43a2e39824a003291f8e2b1d6027324df5bbf67cb30c1fcfbe", + Gas: "0xc699c6014da947778fe5f740b2e9caf905ca31fb4c81e346f467ae126e3c03f1", GasBudget: "1000", }) @@ -275,10 +275,10 @@ func SplitCoin() { func SplitCoinEqual() { rsp, err := cli.SplitCoinEqual(ctx, models.SplitCoinEqualRequest{ - Signer: "0xb7f98d327f19f674347e1e40641408253142d6e7e5093a7c96eda8cdfd7d9bb5", - CoinObjectId: "0x2aceb239c7c04c43a2e39824a003291f8e2b1d6027324df5bbf67cb30c1fcfbe", + Signer: "0x4ae8be62692d1bbf892b657ee78a59954240ee0525f20a5b5687a70995cf0eff", + CoinObjectId: "0xc699c6014da947778fe5f740b2e9caf905ca31fb4c81e346f467ae126e3c03f1", SplitCount: "2", - Gas: "0x2aceb239c7c04c43a2e39824a003291f8e2b1d6027324df5bbf67cb30c1fcfbe", + Gas: "0xc699c6014da947778fe5f740b2e9caf905ca31fb4c81e346f467ae126e3c03f1", GasBudget: "1000", }) @@ -292,12 +292,12 @@ func SplitCoinEqual() { func Publish() { rsp, err := cli.Publish(ctx, models.PublishRequest{ - Sender: "0xb7f98d327f19f674347e1e40641408253142d6e7e5093a7c96eda8cdfd7d9bb5", + Sender: "0x4ae8be62692d1bbf892b657ee78a59954240ee0525f20a5b5687a70995cf0eff", CompiledModules: []string{ "oRzrCwUAAAALAQAOAg4kAzJZBIsBFgWhAZoBB7sC5wEIogQoBsoECgrUBBoM7gSjAQ2RBgQAAAEBAQIBAwEEAQUBBgAHCAAACAgAAAkIAAIKDAEAAQQLAgAGDAIAAxIEAAEUBAEAAQANAAEAAA4CAQAADwMBAAAQBAEAAhUHCAEAAhYJCgEAARcLDAEAARgNCAEAAxkEDgAGGg8QAAUFEQEBCAEVEwgBAAIbFBUBAAMcDgEAAR0BDAEABR4ZAQEIBAYFBgYGBwYKAwsGDAYKFgoXDgYPGAMHCAEHCwMBCAQHCAUAAwYIAgcIAQcIBQEIAAEHCAUCBwsHAQgECwcBCAQBCAQBBgsDAQkAAQMBBwsDAQkAAQcLBwEJAAIHCwcBCQADAQsHAQkAAgcLBwEJAAsHAQkAAQgGAQYIBQEFAgkABQIDCwMBCAQBBgsHAQkAAwcLBwEJAAMHCAUBCwMBCQABCwMBCAQBCAIBCAEBCQAGZG9udXRzB2JhbGFuY2UEY29pbgZvYmplY3QDc3VpCHRyYW5zZmVyCnR4X2NvbnRleHQFRG9udXQJRG9udXRTaG9wDFNob3BPd25lckNhcARDb2luA1NVSQlUeENvbnRleHQJYnV5X2RvbnV0D2NvbGxlY3RfcHJvZml0cwllYXRfZG9udXQEaW5pdAJpZANVSUQFcHJpY2UHQmFsYW5jZQV2YWx1ZQtiYWxhbmNlX211dAVzcGxpdARqb2luA25ldwZzZW5kZXIEdGFrZQZkZWxldGUEemVybwxzaGFyZV9vYmplY3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAwgAAAAAAAAAAAACAREIBgECAxEIBhMDAQsHAQgEAgIBEQgGAAEEAAUmCgEuOAAKABAAFCYDEAsAAQsBAQsCAQcAJwsBOAEMAwsDCgAQABQ4AgwECwAPAQsEOAMBCgIRCBIACwIuEQk4BAIBAQQAEhAKARABOAUMAwsBDwELAwoCOAYMBAsECwIuEQk4BwICAQQADgYLABMADAELARENAgMAAAABDgoAEQgSAgoALhEJOAgLABEIBugDAAAAAAAAOAkSATgKAgEBAQIA", }, - Dependencies: []string{"0x2aceb239c7c04c43a2e39824a003291f8e2b1d6027324df5bbf67cb30c1fcfbe"}, - Gas: "0x2aceb239c7c04c43a2e39824a003291f8e2b1d6027324df5bbf67cb30c1fcfbe", + Dependencies: []string{"0xc699c6014da947778fe5f740b2e9caf905ca31fb4c81e346f467ae126e3c03f1"}, + Gas: "0xc699c6014da947778fe5f740b2e9caf905ca31fb4c81e346f467ae126e3c03f1", GasBudget: "1000", }) @@ -311,9 +311,9 @@ func Publish() { func TransferObject() { rsp, err := cli.TransferObject(ctx, models.TransferObjectRequest{ - Signer: "0xb7f98d327f19f674347e1e40641408253142d6e7e5093a7c96eda8cdfd7d9bb5", - ObjectId: "0x2aceb239c7c04c43a2e39824a003291f8e2b1d6027324df5bbf67cb30c1fcfbe", - Gas: "0x2aceb239c7c04c43a2e39824a003291f8e2b1d6027324df5bbf67cb30c1fcfbe", + Signer: "0x4ae8be62692d1bbf892b657ee78a59954240ee0525f20a5b5687a70995cf0eff", + ObjectId: "0xc699c6014da947778fe5f740b2e9caf905ca31fb4c81e346f467ae126e3c03f1", + Gas: "0xc699c6014da947778fe5f740b2e9caf905ca31fb4c81e346f467ae126e3c03f1", GasBudget: "1000", Recipient: "0x4ae8be62692d1bbf892b657ee78a59954240ee0525f20a5b5687a70995cf0eff", }) @@ -328,9 +328,9 @@ func TransferObject() { func TransferSui() { rsp, err := cli.TransferSui(ctx, models.TransferSuiRequest{ - Signer: "0xb7f98d327f19f674347e1e40641408253142d6e7e5093a7c96eda8cdfd7d9bb5", - SuiObjectId: "0x2aceb239c7c04c43a2e39824a003291f8e2b1d6027324df5bbf67cb30c1fcfbe", - GasBudget: "1000", + Signer: "0x4ae8be62692d1bbf892b657ee78a59954240ee0525f20a5b5687a70995cf0eff", + SuiObjectId: "0xc699c6014da947778fe5f740b2e9caf905ca31fb4c81e346f467ae126e3c03f1", + GasBudget: "1000000", Recipient: "0x4ae8be62692d1bbf892b657ee78a59954240ee0525f20a5b5687a70995cf0eff", Amount: "1", }) @@ -345,12 +345,12 @@ func TransferSui() { func Pay() { rsp, err := cli.Pay(ctx, models.PayRequest{ - Signer: "0xb7f98d327f19f674347e1e40641408253142d6e7e5093a7c96eda8cdfd7d9bb5", + Signer: "0x4ae8be62692d1bbf892b657ee78a59954240ee0525f20a5b5687a70995cf0eff", SuiObjectId: []string{"0x92f03fdec6e0278dcb6fa3f4467eeee3e0bee1ac41825351ef53431677d2e2f7"}, Recipient: []string{"0x4ae8be62692d1bbf892b657ee78a59954240ee0525f20a5b5687a70995cf0eff"}, Amount: []string{"1"}, - Gas: "0x2aceb239c7c04c43a2e39824a003291f8e2b1d6027324df5bbf67cb30c1fcfbe", - GasBudget: "1000", + Gas: "0xc699c6014da947778fe5f740b2e9caf905ca31fb4c81e346f467ae126e3c03f1", + GasBudget: "1000000", }) if err != nil { @@ -363,11 +363,11 @@ func Pay() { func PaySui() { rsp, err := cli.PaySui(ctx, models.PaySuiRequest{ - Signer: "0xb7f98d327f19f674347e1e40641408253142d6e7e5093a7c96eda8cdfd7d9bb5", - SuiObjectId: []string{"0x2aceb239c7c04c43a2e39824a003291f8e2b1d6027324df5bbf67cb30c1fcfbe"}, + Signer: "0x4ae8be62692d1bbf892b657ee78a59954240ee0525f20a5b5687a70995cf0eff", + SuiObjectId: []string{"0xc699c6014da947778fe5f740b2e9caf905ca31fb4c81e346f467ae126e3c03f1"}, Recipient: []string{"0x4ae8be62692d1bbf892b657ee78a59954240ee0525f20a5b5687a70995cf0eff"}, Amount: []string{"1"}, - GasBudget: "1000", + GasBudget: "1000000", }) if err != nil { @@ -380,10 +380,10 @@ func PaySui() { func PayAllSui() { rsp, err := cli.PayAllSui(ctx, models.PayAllSuiRequest{ - Signer: "0xb7f98d327f19f674347e1e40641408253142d6e7e5093a7c96eda8cdfd7d9bb5", - SuiObjectId: []string{"0x2aceb239c7c04c43a2e39824a003291f8e2b1d6027324df5bbf67cb30c1fcfbe"}, + Signer: "0x4ae8be62692d1bbf892b657ee78a59954240ee0525f20a5b5687a70995cf0eff", + SuiObjectId: []string{"0xc699c6014da947778fe5f740b2e9caf905ca31fb4c81e346f467ae126e3c03f1"}, Recipient: "0x4ae8be62692d1bbf892b657ee78a59954240ee0525f20a5b5687a70995cf0eff", - GasBudget: "1000", + GasBudget: "1000000", }) if err != nil { @@ -396,11 +396,11 @@ func PayAllSui() { func RequestAddStake() { rsp, err := cli.RequestAddStake(ctx, models.AddStakeRequest{ - Signer: "0xb7f98d327f19f674347e1e40641408253142d6e7e5093a7c96eda8cdfd7d9bb5", - Coins: []string{"0x2aceb239c7c04c43a2e39824a003291f8e2b1d6027324df5bbf67cb30c1fcfbe"}, + Signer: "0x4ae8be62692d1bbf892b657ee78a59954240ee0525f20a5b5687a70995cf0eff", + Coins: []string{"0xc699c6014da947778fe5f740b2e9caf905ca31fb4c81e346f467ae126e3c03f1"}, Amount: "1", Validator: "0x884515e99dab69c4c28662149db81ca563ed4c36e0c8ce44a58e40e25a0a64a1", - Gas: "0x2aceb239c7c04c43a2e39824a003291f8e2b1d6027324df5bbf67cb30c1fcfbe", + Gas: "0xc699c6014da947778fe5f740b2e9caf905ca31fb4c81e346f467ae126e3c03f1", GasBudget: "1000", }) @@ -414,9 +414,9 @@ func RequestAddStake() { func RequestWithdrawStake() { rsp, err := cli.RequestWithdrawStake(ctx, models.WithdrawStakeRequest{ - Signer: "0xb7f98d327f19f674347e1e40641408253142d6e7e5093a7c96eda8cdfd7d9bb5", - StakedObjectId: "0x2aceb239c7c04c43a2e39824a003291f8e2b1d6027324df5bbf67cb30c1fcfbe", - Gas: "0x2aceb239c7c04c43a2e39824a003291f8e2b1d6027324df5bbf67cb30c1fcfbe", + Signer: "0x4ae8be62692d1bbf892b657ee78a59954240ee0525f20a5b5687a70995cf0eff", + StakedObjectId: "0xc699c6014da947778fe5f740b2e9caf905ca31fb4c81e346f467ae126e3c03f1", + Gas: "0xc699c6014da947778fe5f740b2e9caf905ca31fb4c81e346f467ae126e3c03f1", GasBudget: "1000", }) @@ -430,7 +430,7 @@ func RequestWithdrawStake() { func BatchTransaction() { rsp, err := cli.BatchTransaction(ctx, models.BatchTransactionRequest{ - Signer: "0xb7f98d327f19f674347e1e40641408253142d6e7e5093a7c96eda8cdfd7d9bb5", + Signer: "0x4ae8be62692d1bbf892b657ee78a59954240ee0525f20a5b5687a70995cf0eff", RPCTransactionRequestParams: []models.RPCTransactionRequestParams{ { MoveCallRequestParams: &models.MoveCallRequest{ @@ -443,18 +443,18 @@ func BatchTransaction() { "0x3fd0fdedb84cf1f59386b6251ba6dd2cb495094da26e0a5a38239acd9d437f96", "0xb3de4235cb04167b473de806d00ba351e5860500253cf8e62d711e578e1d92ae", "web3", - "0x2aceb239c7c04c43a2e39824a003291f8e2b1d6027324df5bbf67cb30c1fcfbe", + "0xc699c6014da947778fe5f740b2e9caf905ca31fb4c81e346f467ae126e3c03f1", }, }, }, { TransferObjectRequestParams: &models.TransferObjectRequest{ - ObjectId: "0x2aceb239c7c04c43a2e39824a003291f8e2b1d6027324df5bbf67cb30c1fcfbe", + ObjectId: "0xc699c6014da947778fe5f740b2e9caf905ca31fb4c81e346f467ae126e3c03f1", Recipient: "0x4ae8be62692d1bbf892b657ee78a59954240ee0525f20a5b5687a70995cf0eff", }, }, }, - Gas: "0x2aceb239c7c04c43a2e39824a003291f8e2b1d6027324df5bbf67cb30c1fcfbe", + Gas: "0xc699c6014da947778fe5f740b2e9caf905ca31fb4c81e346f467ae126e3c03f1", GasBudget: "1000", SuiTransactionBlockBuilderMode: "DevInspect", }) diff --git a/models/read_object.go b/models/read_object.go index a5686b6..f1e8c2f 100644 --- a/models/read_object.go +++ b/models/read_object.go @@ -47,6 +47,13 @@ type SuiObjectResponseQuery struct { Options SuiObjectDataOptions `json:"options"` } +type SuiGetObjectRequest struct { + // the ID of the queried object + ObjectId string `json:"ObjectId"` + // config which fields to include in the response, by default only digest is included + Options SuiObjectDataOptions `json:"options"` +} + type SuiXGetOwnedObjectsRequest struct { // the owner's Sui address Address string `json:"address" validate:"checkAddress"` diff --git a/sui/read_obj_api.go b/sui/read_obj_api.go index d23e6bf..a4ae401 100644 --- a/sui/read_obj_api.go +++ b/sui/read_obj_api.go @@ -13,6 +13,7 @@ import ( ) type IReadObjectFromSuiAPI interface { + SuiGetObject(ctx context.Context, req models.SuiGetObjectRequest) (models.SuiObjectData, error) SuiXGetOwnedObjects(ctx context.Context, req models.SuiXGetOwnedObjectsRequest) (models.PaginatedObjectsResponse, error) SuiMultiGetObjects(ctx context.Context, req models.SuiMultiGetObjectsRequest) ([]*models.SuiObjectResponse, error) SuiXGetDynamicField(ctx context.Context, req models.SuiXGetDynamicFieldRequest) (models.PaginatedDynamicFieldInfoResponse, error) @@ -25,6 +26,30 @@ type suiReadObjectFromSuiImpl struct { conn *httpconn.HttpConn } +// SuiGetObject implements the method `sui_getObject`, gets the object information for a specified object. +func (s *suiReadObjectFromSuiImpl) SuiGetObject(ctx context.Context, req models.SuiGetObjectRequest) (models.SuiObjectData, error) { + var rsp models.SuiObjectData + + respBytes, err := s.conn.Request(ctx, httpconn.Operation{ + Method: "sui_getObject", + Params: []interface{}{ + req.ObjectId, + req.Options, + }, + }) + if err != nil { + return rsp, err + } + if gjson.ParseBytes(respBytes).Get("error").Exists() { + return rsp, errors.New(gjson.ParseBytes(respBytes).Get("error").String()) + } + err = json.Unmarshal([]byte(gjson.ParseBytes(respBytes).Get("result.data").String()), &rsp) + if err != nil { + return rsp, err + } + return rsp, nil +} + // SuiXGetOwnedObjects implements the method `suix_getOwnedObjects`, gets the list of objects owned by an address. func (s *suiReadObjectFromSuiImpl) SuiXGetOwnedObjects(ctx context.Context, req models.SuiXGetOwnedObjectsRequest) (models.PaginatedObjectsResponse, error) { var rsp models.PaginatedObjectsResponse diff --git a/sui/sui_test.go b/sui/sui_test.go index 11cc618..edb7d51 100644 --- a/sui/sui_test.go +++ b/sui/sui_test.go @@ -133,7 +133,7 @@ func TestOnReadCoinFromSui(t *testing.T) { t.Run("test on suix_getBalance", func(t *testing.T) { rsp, err := cli.SuiXGetBalance(ctx, models.SuiXGetBalanceRequest{ - Owner: "0xb7f98d327f19f674347e1e40641408253142d6e7e5093a7c96eda8cdfd7d9bb5", + Owner: "0x4ae8be62692d1bbf892b657ee78a59954240ee0525f20a5b5687a70995cf0eff", CoinType: "0x2::sui::SUI", }) @@ -147,7 +147,7 @@ func TestOnReadCoinFromSui(t *testing.T) { t.Run("test on suix_getAllBalances", func(t *testing.T) { rsp, err := cli.SuiXGetAllBalance(ctx, models.SuiXGetAllBalanceRequest{ - Owner: "0xb7f98d327f19f674347e1e40641408253142d6e7e5093a7c96eda8cdfd7d9bb5", + Owner: "0x4ae8be62692d1bbf892b657ee78a59954240ee0525f20a5b5687a70995cf0eff", }) if err != nil { @@ -160,7 +160,7 @@ func TestOnReadCoinFromSui(t *testing.T) { t.Run("test on suix_getCoins", func(t *testing.T) { rsp, err := cli.SuiXGetCoins(ctx, models.SuiXGetCoinsRequest{ - Owner: "0xb7f98d327f19f674347e1e40641408253142d6e7e5093a7c96eda8cdfd7d9bb5", + Owner: "0x4ae8be62692d1bbf892b657ee78a59954240ee0525f20a5b5687a70995cf0eff", CoinType: "0x2::sui::SUI", Limit: 5, }) @@ -175,7 +175,7 @@ func TestOnReadCoinFromSui(t *testing.T) { t.Run("test on suix_getAllCoins", func(t *testing.T) { rsp, err := cli.SuiXGetAllCoins(ctx, models.SuiXGetAllCoinsRequest{ - Owner: "0xb7f98d327f19f674347e1e40641408253142d6e7e5093a7c96eda8cdfd7d9bb5", + Owner: "0x4ae8be62692d1bbf892b657ee78a59954240ee0525f20a5b5687a70995cf0eff", Limit: 5, }) @@ -293,6 +293,27 @@ func TestOnReadTransactionFromSui(t *testing.T) { } func TestOnReadObjectFromSui(t *testing.T) { + t.Run("test on sui_getObject", func(t *testing.T) { + rsp, err := cli.SuiGetObject(ctx, models.SuiGetObjectRequest{ + ObjectId: "0xeeb964d1e640219c8ddb791cc8548f3242a3392b143ff47484a3753291cad898", + Options: models.SuiObjectDataOptions{ + ShowContent: true, + ShowDisplay: true, + ShowType: true, + ShowBcs: true, + ShowOwner: true, + ShowPreviousTransaction: true, + ShowStorageRebate: true, + }, + }) + + if err != nil { + t.Error(err.Error()) + t.FailNow() + } + + utils.PrettyPrint(rsp) + }) t.Run("test on suix_getOwnedObjects", func(t *testing.T) { suiObjectResponseQuery := models.SuiObjectResponseQuery{ @@ -444,7 +465,7 @@ func TestOnWriteTransactionToSui(t *testing.T) { t.Run("test on unsafe_moveCall", func(t *testing.T) { rsp, err := cli.MoveCall(ctx, models.MoveCallRequest{ - Signer: "0xb7f98d327f19f674347e1e40641408253142d6e7e5093a7c96eda8cdfd7d9bb5", + Signer: "0x4ae8be62692d1bbf892b657ee78a59954240ee0525f20a5b5687a70995cf0eff", PackageObjectId: "0x7d584c9a27ca4a546e8203b005b0e9ae746c9bec6c8c3c0bc84611bcf4ceab5f", Module: "auction", Function: "start_an_auction", @@ -454,9 +475,9 @@ func TestOnWriteTransactionToSui(t *testing.T) { "0x3fd0fdedb84cf1f59386b6251ba6dd2cb495094da26e0a5a38239acd9d437f96", "0xb3de4235cb04167b473de806d00ba351e5860500253cf8e62d711e578e1d92ae", "web3", - "0x2aceb239c7c04c43a2e39824a003291f8e2b1d6027324df5bbf67cb30c1fcfbe", + "0xc699c6014da947778fe5f740b2e9caf905ca31fb4c81e346f467ae126e3c03f1", }, - Gas: "0x2aceb239c7c04c43a2e39824a003291f8e2b1d6027324df5bbf67cb30c1fcfbe", + Gas: "0xc699c6014da947778fe5f740b2e9caf905ca31fb4c81e346f467ae126e3c03f1", GasBudget: "1000", }) @@ -471,10 +492,10 @@ func TestOnWriteTransactionToSui(t *testing.T) { t.Run("test on unsafe_mergeCoins", func(t *testing.T) { rsp, err := cli.MergeCoins(ctx, models.MergeCoinsRequest{ - Signer: "0xb7f98d327f19f674347e1e40641408253142d6e7e5093a7c96eda8cdfd7d9bb5", - PrimaryCoin: "0x2aceb239c7c04c43a2e39824a003291f8e2b1d6027324df5bbf67cb30c1fcfbe", + Signer: "0x4ae8be62692d1bbf892b657ee78a59954240ee0525f20a5b5687a70995cf0eff", + PrimaryCoin: "0xc699c6014da947778fe5f740b2e9caf905ca31fb4c81e346f467ae126e3c03f1", CoinToMerge: "0x92f03fdec6e0278dcb6fa3f4467eeee3e0bee1ac41825351ef53431677d2e2f7", - Gas: "0x2aceb239c7c04c43a2e39824a003291f8e2b1d6027324df5bbf67cb30c1fcfbe", + Gas: "0xc699c6014da947778fe5f740b2e9caf905ca31fb4c81e346f467ae126e3c03f1", GasBudget: "1000", }) @@ -488,12 +509,12 @@ func TestOnWriteTransactionToSui(t *testing.T) { t.Run("test on unsafe_publish", func(t *testing.T) { rsp, err := cli.Publish(ctx, models.PublishRequest{ - Sender: "0xb7f98d327f19f674347e1e40641408253142d6e7e5093a7c96eda8cdfd7d9bb5", + Sender: "0x4ae8be62692d1bbf892b657ee78a59954240ee0525f20a5b5687a70995cf0eff", CompiledModules: []string{ "oRzrCwUAAAALAQAOAg4kAzJZBIsBFgWhAZoBB7sC5wEIogQoBsoECgrUBBoM7gSjAQ2RBgQAAAEBAQIBAwEEAQUBBgAHCAAACAgAAAkIAAIKDAEAAQQLAgAGDAIAAxIEAAEUBAEAAQANAAEAAA4CAQAADwMBAAAQBAEAAhUHCAEAAhYJCgEAARcLDAEAARgNCAEAAxkEDgAGGg8QAAUFEQEBCAEVEwgBAAIbFBUBAAMcDgEAAR0BDAEABR4ZAQEIBAYFBgYGBwYKAwsGDAYKFgoXDgYPGAMHCAEHCwMBCAQHCAUAAwYIAgcIAQcIBQEIAAEHCAUCBwsHAQgECwcBCAQBCAQBBgsDAQkAAQMBBwsDAQkAAQcLBwEJAAIHCwcBCQADAQsHAQkAAgcLBwEJAAsHAQkAAQgGAQYIBQEFAgkABQIDCwMBCAQBBgsHAQkAAwcLBwEJAAMHCAUBCwMBCQABCwMBCAQBCAIBCAEBCQAGZG9udXRzB2JhbGFuY2UEY29pbgZvYmplY3QDc3VpCHRyYW5zZmVyCnR4X2NvbnRleHQFRG9udXQJRG9udXRTaG9wDFNob3BPd25lckNhcARDb2luA1NVSQlUeENvbnRleHQJYnV5X2RvbnV0D2NvbGxlY3RfcHJvZml0cwllYXRfZG9udXQEaW5pdAJpZANVSUQFcHJpY2UHQmFsYW5jZQV2YWx1ZQtiYWxhbmNlX211dAVzcGxpdARqb2luA25ldwZzZW5kZXIEdGFrZQZkZWxldGUEemVybwxzaGFyZV9vYmplY3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAwgAAAAAAAAAAAACAREIBgECAxEIBhMDAQsHAQgEAgIBEQgGAAEEAAUmCgEuOAAKABAAFCYDEAsAAQsBAQsCAQcAJwsBOAEMAwsDCgAQABQ4AgwECwAPAQsEOAMBCgIRCBIACwIuEQk4BAIBAQQAEhAKARABOAUMAwsBDwELAwoCOAYMBAsECwIuEQk4BwICAQQADgYLABMADAELARENAgMAAAABDgoAEQgSAgoALhEJOAgLABEIBugDAAAAAAAAOAkSATgKAgEBAQIA", }, - Dependencies: []string{"0x2aceb239c7c04c43a2e39824a003291f8e2b1d6027324df5bbf67cb30c1fcfbe"}, - Gas: "0x2aceb239c7c04c43a2e39824a003291f8e2b1d6027324df5bbf67cb30c1fcfbe", + Dependencies: []string{"0xc699c6014da947778fe5f740b2e9caf905ca31fb4c81e346f467ae126e3c03f1"}, + Gas: "0xc699c6014da947778fe5f740b2e9caf905ca31fb4c81e346f467ae126e3c03f1", GasBudget: "1000", }) @@ -507,10 +528,10 @@ func TestOnWriteTransactionToSui(t *testing.T) { t.Run("test on unsafe_splitCoin", func(t *testing.T) { rsp, err := cli.SplitCoin(ctx, models.SplitCoinRequest{ - Signer: "0xb7f98d327f19f674347e1e40641408253142d6e7e5093a7c96eda8cdfd7d9bb5", - CoinObjectId: "0x2aceb239c7c04c43a2e39824a003291f8e2b1d6027324df5bbf67cb30c1fcfbe", + Signer: "0x4ae8be62692d1bbf892b657ee78a59954240ee0525f20a5b5687a70995cf0eff", + CoinObjectId: "0xc699c6014da947778fe5f740b2e9caf905ca31fb4c81e346f467ae126e3c03f1", SplitAmounts: []string{"1000", "1000"}, - Gas: "0x2aceb239c7c04c43a2e39824a003291f8e2b1d6027324df5bbf67cb30c1fcfbe", + Gas: "0xc699c6014da947778fe5f740b2e9caf905ca31fb4c81e346f467ae126e3c03f1", GasBudget: "1000", }) @@ -524,10 +545,10 @@ func TestOnWriteTransactionToSui(t *testing.T) { t.Run("test on unsafe_splitCoinEqual", func(t *testing.T) { rsp, err := cli.SplitCoinEqual(ctx, models.SplitCoinEqualRequest{ - Signer: "0xb7f98d327f19f674347e1e40641408253142d6e7e5093a7c96eda8cdfd7d9bb5", - CoinObjectId: "0x2aceb239c7c04c43a2e39824a003291f8e2b1d6027324df5bbf67cb30c1fcfbe", + Signer: "0x4ae8be62692d1bbf892b657ee78a59954240ee0525f20a5b5687a70995cf0eff", + CoinObjectId: "0xc699c6014da947778fe5f740b2e9caf905ca31fb4c81e346f467ae126e3c03f1", SplitCount: "2", - Gas: "0x2aceb239c7c04c43a2e39824a003291f8e2b1d6027324df5bbf67cb30c1fcfbe", + Gas: "0xc699c6014da947778fe5f740b2e9caf905ca31fb4c81e346f467ae126e3c03f1", GasBudget: "1000", }) @@ -541,9 +562,9 @@ func TestOnWriteTransactionToSui(t *testing.T) { t.Run("test on unsafe_transferObject", func(t *testing.T) { rsp, err := cli.TransferObject(ctx, models.TransferObjectRequest{ - Signer: "0xb7f98d327f19f674347e1e40641408253142d6e7e5093a7c96eda8cdfd7d9bb5", - ObjectId: "0x2aceb239c7c04c43a2e39824a003291f8e2b1d6027324df5bbf67cb30c1fcfbe", - Gas: "0x2aceb239c7c04c43a2e39824a003291f8e2b1d6027324df5bbf67cb30c1fcfbe", + Signer: "0x4ae8be62692d1bbf892b657ee78a59954240ee0525f20a5b5687a70995cf0eff", + ObjectId: "0xc699c6014da947778fe5f740b2e9caf905ca31fb4c81e346f467ae126e3c03f1", + Gas: "0xc699c6014da947778fe5f740b2e9caf905ca31fb4c81e346f467ae126e3c03f1", GasBudget: "1000", Recipient: "0x4ae8be62692d1bbf892b657ee78a59954240ee0525f20a5b5687a70995cf0eff", }) @@ -558,8 +579,8 @@ func TestOnWriteTransactionToSui(t *testing.T) { t.Run("test on unsafe_transferSui", func(t *testing.T) { rsp, err := cli.TransferSui(ctx, models.TransferSuiRequest{ - Signer: "0xb7f98d327f19f674347e1e40641408253142d6e7e5093a7c96eda8cdfd7d9bb5", - SuiObjectId: "0x2aceb239c7c04c43a2e39824a003291f8e2b1d6027324df5bbf67cb30c1fcfbe", + Signer: "0x4ae8be62692d1bbf892b657ee78a59954240ee0525f20a5b5687a70995cf0eff", + SuiObjectId: "0xc699c6014da947778fe5f740b2e9caf905ca31fb4c81e346f467ae126e3c03f1", GasBudget: "1000", Recipient: "0x4ae8be62692d1bbf892b657ee78a59954240ee0525f20a5b5687a70995cf0eff", Amount: "1", @@ -575,11 +596,11 @@ func TestOnWriteTransactionToSui(t *testing.T) { t.Run("test on unsafe_pay", func(t *testing.T) { rsp, err := cli.Pay(ctx, models.PayRequest{ - Signer: "0xb7f98d327f19f674347e1e40641408253142d6e7e5093a7c96eda8cdfd7d9bb5", + Signer: "0x4ae8be62692d1bbf892b657ee78a59954240ee0525f20a5b5687a70995cf0eff", SuiObjectId: []string{"0x92f03fdec6e0278dcb6fa3f4467eeee3e0bee1ac41825351ef53431677d2e2f7"}, Recipient: []string{"0x4ae8be62692d1bbf892b657ee78a59954240ee0525f20a5b5687a70995cf0eff"}, Amount: []string{"1"}, - Gas: "0x2aceb239c7c04c43a2e39824a003291f8e2b1d6027324df5bbf67cb30c1fcfbe", + Gas: "0xc699c6014da947778fe5f740b2e9caf905ca31fb4c81e346f467ae126e3c03f1", GasBudget: "1000", }) @@ -593,8 +614,8 @@ func TestOnWriteTransactionToSui(t *testing.T) { t.Run("test on unsafe_paySui", func(t *testing.T) { rsp, err := cli.PaySui(ctx, models.PaySuiRequest{ - Signer: "0xb7f98d327f19f674347e1e40641408253142d6e7e5093a7c96eda8cdfd7d9bb5", - SuiObjectId: []string{"0x2aceb239c7c04c43a2e39824a003291f8e2b1d6027324df5bbf67cb30c1fcfbe"}, + Signer: "0x4ae8be62692d1bbf892b657ee78a59954240ee0525f20a5b5687a70995cf0eff", + SuiObjectId: []string{"0xc699c6014da947778fe5f740b2e9caf905ca31fb4c81e346f467ae126e3c03f1"}, Recipient: []string{"0x4ae8be62692d1bbf892b657ee78a59954240ee0525f20a5b5687a70995cf0eff"}, Amount: []string{"1"}, GasBudget: "1000", @@ -610,8 +631,8 @@ func TestOnWriteTransactionToSui(t *testing.T) { t.Run("test on unsafe_payAllSui", func(t *testing.T) { rsp, err := cli.PayAllSui(ctx, models.PayAllSuiRequest{ - Signer: "0xb7f98d327f19f674347e1e40641408253142d6e7e5093a7c96eda8cdfd7d9bb5", - SuiObjectId: []string{"0x2aceb239c7c04c43a2e39824a003291f8e2b1d6027324df5bbf67cb30c1fcfbe"}, + Signer: "0x4ae8be62692d1bbf892b657ee78a59954240ee0525f20a5b5687a70995cf0eff", + SuiObjectId: []string{"0xc699c6014da947778fe5f740b2e9caf905ca31fb4c81e346f467ae126e3c03f1"}, Recipient: "0x4ae8be62692d1bbf892b657ee78a59954240ee0525f20a5b5687a70995cf0eff", GasBudget: "1000", }) @@ -626,7 +647,7 @@ func TestOnWriteTransactionToSui(t *testing.T) { t.Run("test on unsafe_batchTransaction", func(t *testing.T) { rsp, err := cli.BatchTransaction(ctx, models.BatchTransactionRequest{ - Signer: "0xb7f98d327f19f674347e1e40641408253142d6e7e5093a7c96eda8cdfd7d9bb5", + Signer: "0x4ae8be62692d1bbf892b657ee78a59954240ee0525f20a5b5687a70995cf0eff", RPCTransactionRequestParams: []models.RPCTransactionRequestParams{ { MoveCallRequestParams: &models.MoveCallRequest{ @@ -639,18 +660,18 @@ func TestOnWriteTransactionToSui(t *testing.T) { "0x3fd0fdedb84cf1f59386b6251ba6dd2cb495094da26e0a5a38239acd9d437f96", "0xb3de4235cb04167b473de806d00ba351e5860500253cf8e62d711e578e1d92ae", "web3", - "0x2aceb239c7c04c43a2e39824a003291f8e2b1d6027324df5bbf67cb30c1fcfbe", + "0xc699c6014da947778fe5f740b2e9caf905ca31fb4c81e346f467ae126e3c03f1", }, }, }, { TransferObjectRequestParams: &models.TransferObjectRequest{ - ObjectId: "0x2aceb239c7c04c43a2e39824a003291f8e2b1d6027324df5bbf67cb30c1fcfbe", + ObjectId: "0xc699c6014da947778fe5f740b2e9caf905ca31fb4c81e346f467ae126e3c03f1", Recipient: "0x4ae8be62692d1bbf892b657ee78a59954240ee0525f20a5b5687a70995cf0eff", }, }, }, - Gas: "0x2aceb239c7c04c43a2e39824a003291f8e2b1d6027324df5bbf67cb30c1fcfbe", + Gas: "0xc699c6014da947778fe5f740b2e9caf905ca31fb4c81e346f467ae126e3c03f1", GasBudget: "1000", SuiTransactionBlockBuilderMode: "DevInspect", }) @@ -664,47 +685,47 @@ func TestOnWriteTransactionToSui(t *testing.T) { }) /* - t.Run("test on SignAndExecuteTransactionBlock", func(t *testing.T) { - signerAccount, err := signer.NewSignertWithMnemonic("input your mnemonic") - if err != nil { - fmt.Println(err.Error()) - t.FailNow() - } - priKey := signerAccount.PriKey - fmt.Printf("signerAccount.Address: %s\n", signerAccount.Address) + t.Run("test on SignAndExecuteTransactionBlock", func(t *testing.T) { + signerAccount, err := signer.NewSignertWithMnemonic("input your mnemonic") + if err != nil { + fmt.Println(err.Error()) + t.FailNow() + } + priKey := signerAccount.PriKey + fmt.Printf("signerAccount.Address: %s\n", signerAccount.Address) - rsp, err := cli.TransferSui(ctx, models.TransferSuiRequest{ - Signer: signerAccount.Address, - SuiObjectId: "0xc699c6014da947778fe5f740b2e9caf905ca31fb4c81e346f467ae126e3c03f1", - GasBudget: "100000000", - Recipient: "0xb7f98d327f19f674347e1e40641408253142d6e7e5093a7c96eda8cdfd7d9bb5", - Amount: "1", + rsp, err := cli.TransferSui(ctx, models.TransferSuiRequest{ + Signer: signerAccount.Address, + SuiObjectId: "0xc699c6014da947778fe5f740b2e9caf905ca31fb4c81e346f467ae126e3c03f1", + GasBudget: "100000000", + Recipient: "0x4ae8be62692d1bbf892b657ee78a59954240ee0525f20a5b5687a70995cf0eff", + Amount: "1", + }) + + if err != nil { + fmt.Println(err.Error()) + t.FailNow() + } + + // see the successful transaction url: https://suivision.xyz/txblock/C7iYsH4tU5RdY1KBeNax4mCBn3XLZ5UswsuDpKrVkcH6 + rsp2, err := cli.SignAndExecuteTransactionBlock(ctx, models.SignAndExecuteTransactionBlockRequest{ + TxnMetaData: rsp, + PriKey: priKey, + Options: models.SuiTransactionBlockOptions{ + ShowInput: true, + ShowRawInput: true, + ShowEffects: true, + }, + RequestType: "WaitForLocalExecution", + }) + + if err != nil { + fmt.Println(err.Error()) + t.FailNow() + } + + utils.PrettyPrint(rsp2) }) - - if err != nil { - fmt.Println(err.Error()) - t.FailNow() - } - - // see the successful transaction url: https://suivision.xyz/txblock/C7iYsH4tU5RdY1KBeNax4mCBn3XLZ5UswsuDpKrVkcH6 - rsp2, err := cli.SignAndExecuteTransactionBlock(ctx, models.SignAndExecuteTransactionBlockRequest{ - TxnMetaData: rsp, - PriKey: priKey, - Options: models.SuiTransactionBlockOptions{ - ShowInput: true, - ShowRawInput: true, - ShowEffects: true, - }, - RequestType: "WaitForLocalExecution", - }) - - if err != nil { - fmt.Println(err.Error()) - t.FailNow() - } - - utils.PrettyPrint(rsp2) - }) */ }