@@ -15,7 +15,14 @@ import (
1515 "time"
1616)
1717
18- type SuiKeyInfo struct {
18+ const (
19+ DefaultFaucetPort = "9123/tcp"
20+ DefaultFaucetPortNum = "9123"
21+ DefaultSuiNodePort = "9000"
22+ )
23+
24+ // SuiWalletInfo info about Sui account/wallet
25+ type SuiWalletInfo struct {
1926 Alias * string `json:"alias"` // Alias key name, usually "null"
2027 Flag int `json:"flag"` // Flag is an integer
2128 KeyScheme string `json:"keyScheme"` // Key scheme is a string
@@ -25,8 +32,11 @@ type SuiKeyInfo struct {
2532 SuiAddress string `json:"suiAddress"` // Sui address is a 0x prefixed hex string
2633}
2734
35+ // funds provided key using local faucet
36+ // we can't use the best client available - block-vision/sui-go-sdk for that, since some versions have old API and it is hardcoded
37+ // https://github.com/block-vision/sui-go-sdk/blob/main/sui/faucet_api.go#L16
2838func fundAccount (url string , address string ) error {
29- r := resty .New ().SetBaseURL (url ). EnableTrace (). SetDebug ( true )
39+ r := resty .New ().SetBaseURL (url )
3040 b := & models.FaucetRequest {
3141 FixedAmountRequest : & models.FaucetFixedAmountRequest {
3242 Recipient : address ,
@@ -40,18 +50,21 @@ func fundAccount(url string, address string) error {
4050 return nil
4151}
4252
43- func generateKeyData (containerName string , keyCipherType string ) (* SuiKeyInfo , error ) {
53+ // generateKeyData generates a wallet and returns all the data
54+ func generateKeyData (containerName string , keyCipherType string ) (* SuiWalletInfo , error ) {
4455 cmdStr := []string {"sui" , "keytool" , "generate" , keyCipherType , "--json" }
4556 keyOut , err := framework .ExecContainer (containerName , cmdStr )
4657 if err != nil {
4758 return nil , err
4859 }
60+ // formatted JSON with, no plain --json version, remove special symbols
4961 cleanKey := strings .ReplaceAll (keyOut , "\x00 " , "" )
5062 cleanKey = strings .ReplaceAll (cleanKey , "\x01 " , "" )
5163 cleanKey = strings .ReplaceAll (cleanKey , "\x02 " , "" )
5264 cleanKey = strings .ReplaceAll (cleanKey , "\n " , "" )
53- var key * SuiKeyInfo
54- if err := json .Unmarshal ([]byte ("{" + cleanKey [2 :]), & key ); err != nil {
65+ cleanKey = "{" + cleanKey [2 :]
66+ var key * SuiWalletInfo
67+ if err := json .Unmarshal ([]byte (cleanKey ), & key ); err != nil {
5568 return nil , err
5669 }
5770 framework .L .Info ().Interface ("Key" , key ).Msg ("Test key" )
@@ -63,9 +76,9 @@ func defaultSui(in *Input) {
6376 in .Image = "mysten/sui-tools:devnet"
6477 }
6578 if in .Port != "" {
66- framework .L .Warn ().Msg ("'port' field is set but only default port can be used: 9000" )
79+ framework .L .Warn ().Msgf ("'port' field is set but only default port can be used: %s" , DefaultSuiNodePort )
6780 }
68- in .Port = "9000"
81+ in .Port = DefaultSuiNodePort
6982}
7083
7184func newSui (in * Input ) (* Output , error ) {
@@ -82,15 +95,15 @@ func newSui(in *Input) (*Output, error) {
8295
8396 req := testcontainers.ContainerRequest {
8497 Image : in .Image ,
85- ExposedPorts : []string {in .Port , "9123/tcp" },
98+ ExposedPorts : []string {in .Port , DefaultFaucetPort },
8699 Name : containerName ,
87100 Labels : framework .DefaultTCLabels (),
88101 Networks : []string {framework .DefaultNetworkName },
89102 NetworkAliases : map [string ][]string {
90103 framework .DefaultNetworkName : {containerName },
91104 },
92105 HostConfigModifier : func (h * container.HostConfig ) {
93- h .PortBindings = framework .MapTheSamePort (bindPort , "9123/tcp" )
106+ h .PortBindings = framework .MapTheSamePort (bindPort , DefaultFaucetPort )
94107 },
95108 ImagePlatform : "linux/amd64" ,
96109 Env : map [string ]string {
@@ -109,7 +122,7 @@ func newSui(in *Input) (*Output, error) {
109122 },
110123 },
111124 // we need faucet for funding
112- WaitingFor : wait .ForListeningPort ("9123/tcp" ).WithStartupTimeout (10 * time .Second ).WithPollInterval (200 * time .Millisecond ),
125+ WaitingFor : wait .ForListeningPort (DefaultFaucetPort ).WithStartupTimeout (10 * time .Second ).WithPollInterval (200 * time .Millisecond ),
113126 }
114127
115128 c , err := testcontainers .GenericContainer (ctx , testcontainers.GenericContainerRequest {
@@ -123,19 +136,18 @@ func newSui(in *Input) (*Output, error) {
123136 if err != nil {
124137 return nil , err
125138 }
126- keyData , err := generateKeyData (containerName , "ed25519" )
139+ suiAccount , err := generateKeyData (containerName , "ed25519" )
127140 if err != nil {
128141 return nil , err
129142 }
130- err = fundAccount (fmt .Sprintf ("http://%s:%s" , "127.0.0.1" , "9123" ), keyData .SuiAddress )
131- if err != nil {
143+ if err := fundAccount (fmt .Sprintf ("http://%s:%s" , "127.0.0.1" , DefaultFaucetPortNum ), suiAccount .SuiAddress ); err != nil {
132144 return nil , err
133145 }
134146 return & Output {
135- UseCache : true ,
136- Family : "sui" ,
137- ContainerName : containerName ,
138- GeneratedData : & GeneratedData { Mnemonic : keyData . Mnemonic },
147+ UseCache : true ,
148+ Family : "sui" ,
149+ ContainerName : containerName ,
150+ NetworkSpecificData : & NetworkSpecificData { SuiAccount : suiAccount },
139151 Nodes : []* Node {
140152 {
141153 HostHTTPUrl : fmt .Sprintf ("http://%s:%s" , host , in .Port ),
0 commit comments