|
| 1 | +// Copyright (c) 2025 IOTA Stiftung |
| 2 | +// SPDX-License-Identifier: Apache-2.0 |
| 3 | + |
| 4 | +package main |
| 5 | + |
| 6 | +import ( |
| 7 | + "encoding/binary" |
| 8 | + "fmt" |
| 9 | + "log" |
| 10 | + |
| 11 | + sdk "bindings/iota_sdk_ffi" |
| 12 | +) |
| 13 | + |
| 14 | +func main() { |
| 15 | + client := sdk.GraphQlClientNewDevnet() |
| 16 | + |
| 17 | + sender, _ := sdk.AddressFromHex("0x71b4b4f171b4355ff691b7c470579cf1a926f96f724e5f9a30efc4b5f75d085e") |
| 18 | + gas_coin_id, _ := sdk.ObjectIdFromHex("0xa1d009e8dafe20b1cba05e08aea488aafae1f89d892c3eaef6c0994e155e441a") |
| 19 | + |
| 20 | + gas_coin_obj, err := client.Object(gas_coin_id, nil) |
| 21 | + if err.(*sdk.SdkFfiError) != nil { |
| 22 | + log.Fatalf("Failed to fetch gas coin object: %v", err) |
| 23 | + } |
| 24 | + gas_coin := sdk.UnresolvedInputFromObject(*gas_coin_obj).WithOwnedKind() |
| 25 | + |
| 26 | + reference_gas_price, err := client.ReferenceGasPrice(nil) |
| 27 | + if err.(*sdk.SdkFfiError) != nil { |
| 28 | + log.Fatalf("Failed to fetch reference gas price: %v", err) |
| 29 | + } |
| 30 | + |
| 31 | + builder := sdk.NewTransactionBuilder() |
| 32 | + |
| 33 | + addr1, _ := sdk.AddressFromHex("0xde49ea53fbadee67d3e35a097cdbea210b659676fc680a0b0c5f11d0763d375e") |
| 34 | + addr2, _ := sdk.AddressFromHex("0xe512234aa4ef6184c52663f09612b68f040dd0c45de037d96190a071ca5525b3") |
| 35 | + |
| 36 | + addr1_arg := builder.Input(sdk.UnresolvedInputNewPure(addr1.ToBytes())) |
| 37 | + addr2_arg := builder.Input(sdk.UnresolvedInputNewPure(addr2.ToBytes())) |
| 38 | + |
| 39 | + address_type_tag := sdk.TypeTagNewAddress() |
| 40 | + balance_type_tag := sdk.TypeTagNewU64() |
| 41 | + |
| 42 | + buf := make([]byte, 8) |
| 43 | + binary.LittleEndian.PutUint64(buf, 10_000_000) |
| 44 | + bal1_arg := builder.Input(sdk.UnresolvedInputNewPure(buf)) |
| 45 | + binary.LittleEndian.PutUint64(buf, 20_000_000) |
| 46 | + bal2_arg := builder.Input(sdk.UnresolvedInputNewPure(buf)) |
| 47 | + |
| 48 | + arg1 := builder.MakeMoveVec(&address_type_tag, []*sdk.Argument{addr1_arg, addr2_arg}) |
| 49 | + arg2 := builder.MakeMoveVec(&balance_type_tag, []*sdk.Argument{bal1_arg, bal2_arg}) |
| 50 | + |
| 51 | + package_name, _ := sdk.AddressFromHex("0x2") |
| 52 | + module_name, _ := sdk.NewIdentifier("vec_map") |
| 53 | + function_name, _ := sdk.NewIdentifier("from_keys_values") |
| 54 | + |
| 55 | + function := sdk.Function{Package: package_name, |
| 56 | + Module: module_name, |
| 57 | + Function: function_name, |
| 58 | + TypeArgs: []*sdk.TypeTag{address_type_tag, balance_type_tag}, |
| 59 | + } |
| 60 | + |
| 61 | + builder.MoveCall(function, []*sdk.Argument{arg1, arg2}) |
| 62 | + |
| 63 | + builder.SetGasBudget(50_000_000) |
| 64 | + builder.SetGasPrice(*reference_gas_price) |
| 65 | + builder.SetSender(sender) |
| 66 | + builder.AddGasObjects([]*sdk.UnresolvedInput{gas_coin}) |
| 67 | + |
| 68 | + txn, err := builder.Finish() |
| 69 | + if err != nil { |
| 70 | + log.Fatalf("Failed to create transaction: %v", err) |
| 71 | + } |
| 72 | + |
| 73 | + skipChecks := false |
| 74 | + res, err := client.DryRunTx(txn, &skipChecks) |
| 75 | + |
| 76 | + if res.Error != nil { |
| 77 | + log.Fatalf("Failed to call generic Move function: %v", err) |
| 78 | + } |
| 79 | + |
| 80 | + fmt.Print("Successfully called generic Move function") |
| 81 | +} |
0 commit comments