Skip to content

weaveVM/rusty-ao

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

30 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

About

A blazingly fast client for AO written in Rust.

Install

cargo add rusty_ao

Alternatively, in your Cargo.toml, add:

[dependencies]
rusty_ao = { git = "https://github.com/weaveVM/rusty-ao.git", branch = "main" }

Usage Examples: HyperBEAM

Init HyperBEAM client

use rusty_ao::hyperbeam::Hyperbeam;

pub async fn init_hb() {
    let hb = Hyperbeam::new(
        "https://tee-1.forward.computer".to_string(),
        SignerTypes::Arweave("test_key.json".to_string()),
    )
    .unwrap();
}

Get a process last computed message state

Returns the /Results key of the latest computed message -- [email protected]

let process_id = "oQZQd1-MztVOxODecwrxFR9UGUnsrX5wGseMJ9iSH38";
let state = hb.process_now(process_id.to_string()).await.unwrap();

Get a HyperBEAM node info

Returns the JSON serialized node info -- [email protected]/info/[email protected]

let info = hb.meta_info().await.unwrap()

Get a HyperBEAM node routing config

Returns the JSON serialized node routing configuration -- /[email protected]/routes/[email protected]

let routes = hb.router_routes().await.unwrap()

Get a HyperBEAM hyperbuddy metrics

Returns the hyperbuddy node metrics data -- /[email protected]/index/[email protected]/metrics

let hyperbuddy = hb.hyperbuddy_metrics().await.unwrap()

Usage Examples: Legacy

Init an AO client

// import the crate
use rusty_ao::ao::Legacy;
// Initialize an AO client 
let ao = Legacy::new(
  "https://mu.ao-testnet.xyz".to_string(),
  "https://cu.ao-testnet.xyz".to_string(),
  SignerTypes::Arweave("test_key.json".to_string()),
  )
  .unwrap();

or using the default_init method

let ao = Legacy::default_init(SignerTypes::Arweave("test_key.json".to_string()))
  .unwrap();

Dry run an AO process message call

// let ao = ...init AO...

let res = ao
    .dry_run(
        "xU9zFkq3X2ZQ6olwNVvr1vUWIjc3kXTWr7xKQD6dh10".to_string(),
        "".to_string(),
        vec![Tag {
            name: "Action".to_string(),
            value: "Info".to_string(),
        }],
    )
    .await;

assert!(res.is_ok());
println!("{}", serde_json::to_string(&res.unwrap()).unwrap());

Spawn a new process

// let ao = ...init AO...

let res = ao
    .spawn(
        "test1".to_string(),
        "rusty-ao".to_string(),
        DEFAULT_MODULE.to_string(),
        DEFAULT_SCHEDULER.to_string(),
        vec![],
    )
    .await;

println!("{:?}", res);
assert!(res.is_ok());
println!("{}", serde_json::to_string(&res.unwrap()).unwrap());

Request CU get process result

// let ao = ...init AO...

let res = ao
    .get(
        "ya9XinY0qXeYyf7HXANqzOiKns8yiXZoDtFqUMXkX0Q".to_string(),
        "5JtjkYy1hk0Zce5mP6gDWIOdt9rCSQAFX-K9jZnqniw".to_string(),
    )
    .await;

println!("{:?}", res);
assert!(res.is_ok());
println!("{}", serde_json::to_string(&res.unwrap()).unwrap());

HyperBEAM REST API

The HyperBEAM REST API server provides access to HyperBEAM functionality built on top of the hyperbeam.rs. The following endpoints are available under hb.load.rs.

To add your HyperBEAM node metadata to the server's compiled list, open a PR adding it to compiled_node_list.json

Node Info

Retrieves a hb node information -- [email protected]/info/[email protected]

GET /node/{address}/info

Node Routes

Retrieves the routing configuration for a hb node using its address -- [email protected]/routes/[email protected]

GET /node/{address}/routes

Node Metrics Overview

An endpoint to render a node's metrics -- [email protected]/index/[email protected]/metrics

GET /node/{address}

Credits

  • goao: Golang SDK for interacting with ao processes. link
  • aoconnect: The aoconnect library provides an abstraction for spawning, evaluating, and interacting with ao Processes. link

License

This project is licensed under the MIT License