Skip to content
Closed
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 45 additions & 0 deletions bindings/go/examples/send_iota/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
// Copyright (c) 2025 IOTA Stiftung
// SPDX-License-Identifier: Apache-2.0

package main

import (
"log"

sdk "bindings/iota_sdk_ffi"
)

func main() {
client := sdk.GraphQlClientNewDevnet()

sender, _ := sdk.AddressFromHex("0x611830d3641a68f94a690dcc25d1f4b0dac948325ac18f6dd32564371735f32c")
recipient, _ := sdk.AddressFromHex("0x0000a4984bd495d4346fa208ddff4f5d5e5ad48c21dec631ddebc99809f16900")

var amount = uint64(1_000_000_000)
builder := sdk.TransactionBuilderInit(sender, client)
builder.SendIota(recipient, &amount)

txn, err := builder.Finish()
if err.(*sdk.SdkFfiError) != nil {
log.Fatalf("Failed to create transaction: %v", err)
}

txnBytes, err := txn.BcsSerialize()
if err != nil {
log.Fatalf("Failed to serialize transaction: %v", err)
}
log.Printf("Signing Digest: %v", sdk.HexEncode(txn.SigningDigest()))
log.Printf("Txn Bytes: %v", sdk.Base64Encode(txnBytes))

skipChecks := bool(false)
res, err := client.DryRunTx(txn, &skipChecks)
if err.(*sdk.SdkFfiError) != nil {
log.Fatalf("Failed to dry run the command `send_iota`: %v", err)
}

if res.Error != nil {
log.Fatalf("Failed to dry run the command `send_iota`: %v", *res.Error)
}

log.Print("Dry run of `send_iota` command successful!")
}
39 changes: 39 additions & 0 deletions bindings/kotlin/examples/SendIota.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
// Copyright (c) 2025 IOTA Stiftung
// SPDX-License-Identifier: Apache-2.0

import iota_sdk.*
import kotlinx.coroutines.runBlocking

fun main() = runBlocking {
try {
val client = GraphQlClient.newDevnet()

val sender =
Address.fromHex(
"0x611830d3641a68f94a690dcc25d1f4b0dac948325ac18f6dd32564371735f32c"
)
val recipient =
Address.fromHex(
"0x0000a4984bd495d4346fa208ddff4f5d5e5ad48c21dec631ddebc99809f16900"
)

val builder = TransactionBuilder.init(sender, client)

builder.sendIota(recipient, 1_000_000_000UL)

val txn = builder.finish()

println("Signing Digest: ${hexEncode(txn.signingDigest())}")
println("Txn Bytes: ${base64Encode(txn.bcsSerialize())}")

val res = builder.dryRun()

if (res.error != null) {
throw Exception("Failed to dry run the command `send_iota`: ${res.error}")
}

println("Dry run of `send_iota` command successful!")
} catch (e: Exception) {
e.printStackTrace()
}
}
39 changes: 39 additions & 0 deletions bindings/python/examples/send_iota.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# Copyright (c) 2025 IOTA Stiftung
# SPDX-License-Identifier: Apache-2.0

from lib.iota_sdk_ffi import *

import asyncio


async def main():
try:
client = GraphQlClient.new_devnet()

sender = Address.from_hex(
"0x611830d3641a68f94a690dcc25d1f4b0dac948325ac18f6dd32564371735f32c"
)
recipient = Address.from_hex(
"0x0000a4984bd495d4346fa208ddff4f5d5e5ad48c21dec631ddebc99809f16900"
)

builder = await TransactionBuilder.init(sender, client)
builder.send_iota(recipient, 1_000_000_000)

txn = await builder.finish()

print("Signing Digest:", hex_encode(txn.signing_digest()))
print("Txn Bytes:", base64_encode(txn.bcs_serialize()))

res = await client.dry_run_tx(txn)
if res.error is not None:
raise Exception("Failed to dry run the command `send_iota`:", res.error)

print("Dry run of `send_iota` command successful!")

except Exception as e:
print(f"Error: {e}")


if __name__ == "__main__":
asyncio.run(main())
22 changes: 9 additions & 13 deletions crates/iota-graphql-client/examples/prepare_send_iota.rs
Original file line number Diff line number Diff line change
@@ -1,28 +1,24 @@
// Copyright (c) 2025 IOTA Stiftung
// SPDX-License-Identifier: Apache-2.0

use std::str::FromStr;

use base64ct::Encoding;
use eyre::Result;
use eyre::{Result, bail};
use iota_graphql_client::Client;
use iota_transaction_builder::TransactionBuilder;
use iota_types::{Address, ObjectId};
use iota_types::ObjectId;

#[tokio::main]
async fn main() -> Result<()> {
let client = Client::new_devnet();

let from_address =
Address::from_str("0x611830d3641a68f94a690dcc25d1f4b0dac948325ac18f6dd32564371735f32c")?;
let to_address =
Address::from_str("0x0000a4984bd495d4346fa208ddff4f5d5e5ad48c21dec631ddebc99809f16900")?;
let sender = "0x611830d3641a68f94a690dcc25d1f4b0dac948325ac18f6dd32564371735f32c".parse()?;
let recipient = "0x0000a4984bd495d4346fa208ddff4f5d5e5ad48c21dec631ddebc99809f16900".parse()?;

let mut builder = TransactionBuilder::new(from_address).with_client(client.clone());
let mut builder = TransactionBuilder::new(sender).with_client(client.clone());

builder.transfer_objects(
to_address,
ObjectId::from_str("0xd04077fe3b6fad13b3d4ed0d535b7ca92afcac8f0f2a0e0925fb9f4f0b30c699")?,
recipient,
"0xd04077fe3b6fad13b3d4ed0d535b7ca92afcac8f0f2a0e0925fb9f4f0b30c699".parse::<ObjectId>()?,
);

let txn = builder.finish().await?;
Expand All @@ -36,10 +32,10 @@ async fn main() -> Result<()> {
let res = client.dry_run_tx(&txn, false).await?;

if let Some(err) = res.error {
eyre::bail!("Failed to send IOTA: {err}");
bail!("Failed to dry run command `transfer_objects`: {err}");
}

println!("Send IOTA dry run was successful!");
println!("Dry run of `transfer_objects` command successful!");

Ok(())
}
19 changes: 7 additions & 12 deletions crates/iota-graphql-client/examples/prepare_send_iota_multi.rs
Original file line number Diff line number Diff line change
@@ -1,23 +1,18 @@
// Copyright (c) 2025 IOTA Stiftung
// SPDX-License-Identifier: Apache-2.0

use std::str::FromStr;

use base64ct::Encoding;
use eyre::Result;
use eyre::{Result, bail};
use iota_graphql_client::Client;
use iota_transaction_builder::{TransactionBuilder, res};
use iota_types::{Address, ObjectId};
use iota_types::Address;

#[tokio::main]
async fn main() -> Result<()> {
let client = Client::new_devnet();

let coin =
ObjectId::from_str("0x0b0270ee9d27da0db09651e5f7338dfa32c7ee6441ccefa1f6e305735bcfc7ab")?;

let sender =
Address::from_str("0x611830d3641a68f94a690dcc25d1f4b0dac948325ac18f6dd32564371735f32c")?;
let coin = "0x0b0270ee9d27da0db09651e5f7338dfa32c7ee6441ccefa1f6e305735bcfc7ab".parse()?;
let sender = "0x611830d3641a68f94a690dcc25d1f4b0dac948325ac18f6dd32564371735f32c".parse()?;

// Recipients and amounts
let recipients = [
Expand All @@ -42,7 +37,7 @@ async fn main() -> Result<()> {

// Transfer each split coin to the corresponding recipient
for (i, (address, _)) in recipients.iter().enumerate() {
builder.transfer_objects(Address::from_str(address)?, res(&labels[i]));
builder.transfer_objects(Address::from_hex(address)?, res(&labels[i]));
}

let txn = builder.finish().await?;
Expand All @@ -56,10 +51,10 @@ async fn main() -> Result<()> {
let res = client.dry_run_tx(&txn, false).await?;

if let Some(err) = res.error {
eyre::bail!("Failed to send IOTA: {err}");
bail!("Failed to dry run commands `split_coins`, `transfer_objects`: {err}");
}

println!("Send IOTA dry run was successful!");
println!("Dry run of `split_coins`, `transfer_objects` commands successful!");

Ok(())
}
37 changes: 37 additions & 0 deletions crates/iota-graphql-client/examples/send_iota.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
// Copyright (c) 2025 IOTA Stiftung
// SPDX-License-Identifier: Apache-2.0

use base64ct::Encoding;
use eyre::{Result, bail};
use iota_graphql_client::Client;
use iota_transaction_builder::TransactionBuilder;

#[tokio::main]
async fn main() -> Result<()> {
let client = Client::new_devnet();

let sender = "0x611830d3641a68f94a690dcc25d1f4b0dac948325ac18f6dd32564371735f32c".parse()?;
let recipient = "0x0000a4984bd495d4346fa208ddff4f5d5e5ad48c21dec631ddebc99809f16900".parse()?;

let mut builder = TransactionBuilder::new(sender).with_client(client.clone());

builder.send_iota(recipient, 1_000_000_000);

let txn = builder.finish().await?;

println!("Signing Digest: {}", hex::encode(txn.signing_digest()));
println!(
"Txn Bytes: {}",
base64ct::Base64::encode_string(&bcs::to_bytes(&txn)?)
);

let res = client.dry_run_tx(&txn, false).await?;

if let Some(err) = res.error {
bail!("Failed to dry run the command `send_iota`: {err}");
}

println!("Dry run of `send_iota` command successful!");

Ok(())
}