@@ -13,180 +13,97 @@ import (
13
13
func main () {
14
14
client := sdk .GraphQlClientNewDevnet ()
15
15
16
- senderAddress , err := sdk .AddressFromHex ("0x0" )
17
- if err != nil {
18
- log .Fatalf ("Failed to parse sender address: %v" , err )
19
- }
16
+ sender , _ := sdk .AddressFromHex ("0x0" )
20
17
21
- iotaNamesPackageAddress , err := sdk .AddressFromHex ("0xb9d617f24c84826bf660a2f4031951678cc80c264aebc4413459fb2a95ada9ba" )
22
- if err != nil {
23
- log .Fatalf ("Failed to parse IOTA names package address: %v" , err )
24
- }
18
+ iotaNamesPackageAddress , _ := sdk .AddressFromHex ("0xb9d617f24c84826bf660a2f4031951678cc80c264aebc4413459fb2a95ada9ba" )
25
19
26
- iotaNamesObjectId , err := sdk .ObjectIdFromHex ("0x07c59b37bd7d036bf78fa30561a2ab9f7a970837487656ec29466e817f879342" )
27
- if err != nil {
28
- log .Fatalf ("Failed to parse IOTA names object ID: %v" , err )
29
- }
20
+ iotaNamesObjectId , _ := sdk .ObjectIdFromHex ("0x07c59b37bd7d036bf78fa30561a2ab9f7a970837487656ec29466e817f879342" )
30
21
31
- stdlibAddress , err := sdk .AddressFromHex ("0x1" )
32
- if err != nil {
33
- log .Fatalf ("Failed to parse stdlib address: %v" , err )
34
- }
22
+ stdlibAddress , _ := sdk .AddressFromHex ("0x1" )
35
23
36
24
name := "name.iota"
37
25
fmt .Printf ("Looking up name: %s\n " , name )
38
26
39
- builder := sdk .NewTransactionBuilder ( )
27
+ builder := sdk .TransactionBuilderInit ( sender , client )
40
28
41
29
// Create identifiers
42
- iotaNamesModule , err := sdk .NewIdentifier ("iota_names" )
43
- if err != nil {
44
- log .Fatalf ("Failed to create identifier: %v" , err )
45
- }
46
- registryFn , err := sdk .NewIdentifier ("registry" )
47
- if err != nil {
48
- log .Fatalf ("Failed to create identifier: %v" , err )
49
- }
50
- nameModule , err := sdk .NewIdentifier ("name" )
51
- if err != nil {
52
- log .Fatalf ("Failed to create identifier: %v" , err )
53
- }
54
- newFn , err := sdk .NewIdentifier ("new" )
55
- if err != nil {
56
- log .Fatalf ("Failed to create identifier: %v" , err )
57
- }
58
- lookupFn , err := sdk .NewIdentifier ("lookup" )
59
- if err != nil {
60
- log .Fatalf ("Failed to create identifier: %v" , err )
61
- }
62
- optionModule , err := sdk .NewIdentifier ("option" )
63
- if err != nil {
64
- log .Fatalf ("Failed to create identifier: %v" , err )
65
- }
66
- borrowFn , err := sdk .NewIdentifier ("borrow" )
67
- if err != nil {
68
- log .Fatalf ("Failed to create identifier: %v" , err )
69
- }
70
- nameRecordModule , err := sdk .NewIdentifier ("name_record" )
71
- if err != nil {
72
- log .Fatalf ("Failed to create identifier: %v" , err )
73
- }
74
- targetAddressFn , err := sdk .NewIdentifier ("target_address" )
75
- if err != nil {
76
- log .Fatalf ("Failed to create identifier: %v" , err )
77
- }
78
-
79
- // Create type tags
80
- registryName , err := sdk .NewIdentifier ("Registry" )
81
- if err != nil {
82
- log .Fatalf ("Failed to create identifier: %v" , err )
83
- }
84
- registryType := sdk .NewStructTag (iotaNamesPackageAddress , registryFn , registryName , []* sdk.TypeTag {})
85
-
86
- nameRecordName , err := sdk .NewIdentifier ("NameRecord" )
87
- if err != nil {
88
- log .Fatalf ("Failed to create identifier: %v" , err )
89
- }
30
+ iotaNamesModule , _ := sdk .NewIdentifier ("iota_names" )
31
+ nameModule , _ := sdk .NewIdentifier ("name" )
32
+ nameNewFn , _ := sdk .NewIdentifier ("new" )
33
+ lookupFn , _ := sdk .NewIdentifier ("lookup" )
34
+ optionModule , _ := sdk .NewIdentifier ("option" )
35
+ borrowFn , _ := sdk .NewIdentifier ("borrow" )
36
+ targetAddressFn , _ := sdk .NewIdentifier ("target_address" )
37
+ registryModule , _ := sdk .NewIdentifier ("registry" )
38
+ registryName , _ := sdk .NewIdentifier ("Registry" )
39
+
40
+ registryType := sdk .NewStructTag (iotaNamesPackageAddress , registryModule , registryName , []* sdk.TypeTag {})
41
+
42
+ nameRecordModule , _ := sdk .NewIdentifier ("name_record" )
43
+ nameRecordName , _ := sdk .NewIdentifier ("NameRecord" )
90
44
nameRecordType := sdk .NewStructTag (iotaNamesPackageAddress , nameRecordModule , nameRecordName , []* sdk.TypeTag {})
91
45
92
46
// 1. Get the registry
93
- registryInput := builder .Input (sdk .UnresolvedInputNewShared (iotaNamesObjectId , 365644877 , true ))
94
- iotaNames := builder .MoveCall (
95
- sdk.Function {
96
- Package : iotaNamesPackageAddress ,
97
- Module : iotaNamesModule ,
98
- Function : registryFn ,
99
- TypeArgs : []* sdk.TypeTag {sdk .TypeTagNewStruct (registryType )},
100
- },
101
- []* sdk.Argument {registryInput },
47
+ builder .MoveCall (
48
+ iotaNamesPackageAddress ,
49
+ iotaNamesModule ,
50
+ registryModule ,
51
+ []* sdk.PtbArgument {sdk .PtbArgumentSharedMut (iotaNamesObjectId )},
52
+ []* sdk.TypeTag {sdk .TypeTagNewStruct (registryType )},
53
+ []string {"iota_names" },
102
54
)
103
55
104
56
// 2. Create name from string
105
- // BCS encode the string: length (as varint) + UTF-8 bytes
106
- nameBytes := []byte (name )
107
- nameLen := len (nameBytes )
108
- var bcsEncodedName []byte
109
- if nameLen < 128 {
110
- // For strings shorter than 128 bytes, length is encoded as single byte
111
- bcsEncodedName = append ([]byte {byte (nameLen )}, nameBytes ... )
112
- } else {
113
- // For longer strings, we'd need proper varint encoding
114
- // but for this example, the name should be short
115
- panic ("String too long for simple BCS encoding" )
116
- }
117
- nameInput := builder .Input (sdk .UnresolvedInputNewPure (bcsEncodedName ))
118
- nameResult := builder .MoveCall (
119
- sdk.Function {
120
- Package : iotaNamesPackageAddress ,
121
- Module : nameModule ,
122
- Function : newFn ,
123
- TypeArgs : []* sdk.TypeTag {},
124
- },
125
- []* sdk.Argument {nameInput },
57
+ builder .MoveCall (
58
+ iotaNamesPackageAddress ,
59
+ nameModule ,
60
+ nameNewFn ,
61
+ []* sdk.PtbArgument {sdk .PtbArgumentString (name )},
62
+ nil ,
63
+ []string {"name" },
126
64
)
127
65
128
66
// 3. Lookup name record
129
- nameRecordOption := builder .MoveCall (
130
- sdk.Function {
131
- Package : iotaNamesPackageAddress ,
132
- Module : registryFn ,
133
- Function : lookupFn ,
134
- TypeArgs : []* sdk.TypeTag {},
135
- },
136
- []* sdk.Argument {iotaNames , nameResult },
67
+ builder .MoveCall (
68
+ iotaNamesPackageAddress ,
69
+ registryModule ,
70
+ lookupFn ,
71
+ []* sdk.PtbArgument {sdk .PtbArgumentRes ("iota_names" ), sdk .PtbArgumentRes ("name" )},
72
+ nil ,
73
+ []string {"name_record_opt" },
137
74
)
138
75
139
76
// 4. Borrow name record from option
140
- nameRecord := builder .MoveCall (
141
- sdk.Function {
142
- Package : stdlibAddress ,
143
- Module : optionModule ,
144
- Function : borrowFn ,
145
- TypeArgs : []* sdk.TypeTag {sdk .TypeTagNewStruct (nameRecordType )},
146
- },
147
- []* sdk.Argument {nameRecordOption },
77
+ builder .MoveCall (
78
+ stdlibAddress ,
79
+ optionModule ,
80
+ borrowFn ,
81
+ []* sdk.PtbArgument {sdk .PtbArgumentRes ("name_record_opt" )},
82
+ []* sdk.TypeTag {sdk .TypeTagNewStruct (nameRecordType )},
83
+ []string {"name_record" },
148
84
)
149
85
150
86
// 5. Get target address from name record
151
- targetAddressOption := builder .MoveCall (
152
- sdk.Function {
153
- Package : iotaNamesPackageAddress ,
154
- Module : nameRecordModule ,
155
- Function : targetAddressFn ,
156
- TypeArgs : []* sdk.TypeTag {},
157
- },
158
- []* sdk.Argument {nameRecord },
87
+ builder .MoveCall (
88
+ iotaNamesPackageAddress ,
89
+ nameRecordModule ,
90
+ targetAddressFn ,
91
+ []* sdk.PtbArgument {sdk .PtbArgumentRes ("name_record" )},
92
+ nil ,
93
+ []string {"target_address_opt" },
159
94
)
160
95
161
96
// 6. Borrow address from option
162
97
builder .MoveCall (
163
- sdk.Function {
164
- Package : stdlibAddress ,
165
- Module : optionModule ,
166
- Function : borrowFn ,
167
- TypeArgs : []* sdk.TypeTag {sdk .TypeTagNewAddress ()},
168
- },
169
- []* sdk.Argument {targetAddressOption },
98
+ stdlibAddress ,
99
+ optionModule ,
100
+ borrowFn ,
101
+ []* sdk.PtbArgument {sdk .PtbArgumentRes ("target_address_opt" )},
102
+ []* sdk.TypeTag {sdk .TypeTagNewAddress ()},
103
+ []string {"target_address" },
170
104
)
171
105
172
- builder .SetSender (senderAddress )
173
- builder .SetGasBudget (50000000 )
174
- gasPrice , err := client .ReferenceGasPrice (nil )
175
- if err .(* sdk.SdkFfiError ) != nil {
176
- log .Fatalf ("Failed to get gas price: %v" , err )
177
- }
178
- if gasPrice == nil {
179
- log .Fatalf ("Missing reference gas price" )
180
- }
181
- builder .SetGasPrice (* gasPrice )
182
-
183
- txn , err := builder .Finish ()
184
- if err != nil {
185
- log .Fatalf ("Failed to create transaction: %v" , err )
186
- }
187
-
188
- skipChecks := true
189
- res , err := client .DryRunTx (txn , & skipChecks )
106
+ res , err := builder .DryRun (true )
190
107
if err .(* sdk.SdkFfiError ) != nil {
191
108
log .Fatalf ("Failed to dry run transaction: %v" , err )
192
109
}
0 commit comments