mirror of
https://github.com/logos-blockchain/lssa.git
synced 2026-01-02 13:23:10 +00:00
68 lines
2.3 KiB
Rust
68 lines
2.3 KiB
Rust
use nssa::{
|
|
AccountId, PublicTransaction,
|
|
program::Program,
|
|
public_transaction::{Message, WitnessSet},
|
|
};
|
|
use wallet::{WalletCore, helperfunctions::fetch_config};
|
|
|
|
// Before running this example, compile the `hello_world.rs` guest program with:
|
|
//
|
|
// cargo risczero build --manifest-path examples/program_deployment/methods/guest/Cargo.toml
|
|
//
|
|
// Note: you must run the above command from the root of the `lssa` repository.
|
|
// Note: The compiled binary file is stored in
|
|
// methods/guest/target/riscv32im-risc0-zkvm-elf/docker/hello_world.bin
|
|
//
|
|
//
|
|
// Usage:
|
|
// cargo run --bin run_hello_world /path/to/guest/binary <account_id>
|
|
//
|
|
// Example:
|
|
// cargo run --bin run_hello_world \
|
|
// methods/guest/target/riscv32im-risc0-zkvm-elf/docker/hello_world.bin \
|
|
// Ds8q5PjLcKwwV97Zi7duhRVF9uwA2PuYMoLL7FwCzsXE
|
|
|
|
#[tokio::main]
|
|
async fn main() {
|
|
// Load wallet config and storage
|
|
let wallet_config = fetch_config().await.unwrap();
|
|
let wallet_core = WalletCore::start_from_config_update_chain(wallet_config)
|
|
.await
|
|
.unwrap();
|
|
|
|
// Parse arguments
|
|
// First argument is the path to the program binary
|
|
let program_path = std::env::args_os().nth(1).unwrap().into_string().unwrap();
|
|
// Second argument is the account_id
|
|
let account_id: AccountId = std::env::args_os()
|
|
.nth(2)
|
|
.unwrap()
|
|
.into_string()
|
|
.unwrap()
|
|
.parse()
|
|
.unwrap();
|
|
|
|
// Load the program
|
|
let bytecode: Vec<u8> = std::fs::read(program_path).unwrap();
|
|
let program = Program::new(bytecode).unwrap();
|
|
|
|
// Define the desired greeting in ASCII
|
|
let greeting: Vec<u8> = vec![72, 111, 108, 97, 32, 109, 117, 110, 100, 111, 33];
|
|
|
|
// Construct the public transaction
|
|
// No nonces nor signing keys are needed for this example. Check out the
|
|
// `run_hello_world_with_authorization` on how to use them.
|
|
let nonces = vec![];
|
|
let signing_keys = [];
|
|
let message = Message::try_new(program.id(), vec![account_id], nonces, greeting).unwrap();
|
|
let witness_set = WitnessSet::for_message(&message, &signing_keys);
|
|
let tx = PublicTransaction::new(message, witness_set);
|
|
|
|
// Submit the transaction
|
|
let _response = wallet_core
|
|
.sequencer_client
|
|
.send_tx_public(tx)
|
|
.await
|
|
.unwrap();
|
|
}
|