#soroban #stellar #smart-contracts #client-server #rpc-server #networking #rust

soroban-client

一个用于与Stellar区块链上的Soroban智能合约交互的高级Rust客户端库

20个版本

0.3.2 2024年4月15日
0.3.0 2024年3月30日
0.2.9 2024年3月24日
0.2.1 2023年10月14日
0.1.4 2023年7月20日

#13 in #stellar

每月28次下载

Apache-2.0LGPL-3.0+

42KB
939

Rust Soroban 客户端库

Crates.io Crates.io Crates.io publish workflow

drawing

Rust客户端库,用于与Stellar区块链上的Soroban智能合约交互

该项目目前处于早期开发阶段,尚不可用。它是一个正在进行中的项目,可能会进行重大更改,包括添加或删除功能以及对其功能的修改。

快速入门

将以下内容添加到您的Cargo.toml中

[dependencies]
soroban-client = "0.3.1"

并将以下内容添加到您的代码中

use soroban_client::*;

描述

该库由3个组件组成:

  1. rs-stellar-xdr: 一个用于编码/解码XDR数据的底层库。该库已被Stellar核心团队开发。
  2. rs-stellar-base: 一个提供了一组完整功能的库,用于读取、写入、散列和签名Stellar网络中使用的原始XDR构造。它为构建和签名交易提供了良好的抽象。
  3. rs-soroban-client: 一个高级Rust库,作为Horizon客户端的客户端API。它对于与Soroban RPC服务器进行通信非常有用。

此库将使开发者能够无缝地将Soroban功能集成到基于Rust的应用和服务中。Stellar团队已经通过构建xdr库和rust stellar strkey实现,为soroban和整个Stellar生态系统中的Rust社区奠定了基础。

库的示例用法

// Submitting a transaction
use soroban_client::Server;
use soroban_client::Networks;
use soroban_client::TransactionBuilder;
use soroban_client::Keypair;

#[tokio::main]
async fn main() {
    let server = Server::new("https://127.0.0.1:8000/soroban/rpc").unwrap();
    let public_key = "..."; // Replace with the actual public key
    let secret_string = "..."; // Replace with the actual secret key
    let contract_id = "..."; // Replace with the actual contract ID

    let account = server.get_account(public_key).await.unwrap();

    // Fee hardcoded for this example.
    let fee = 100;

    let contract = Contract::new(contract_id).unwrap();

    let mut transaction = TransactionBuilder::new(&account, fee, Networks::STANDALONE)
        .add_operation(
            // An operation to call increment on the contract
            contract.call("increment").unwrap(),
        )
        .set_timeout(30)
        .build();

    // Simulate the transaction to discover the storage footprint, and update the
    // transaction to include it. If you already know the storage footprint you
    // can use `add_footprint` to add it yourself, skipping this step.
    transaction = server.prepare_transaction(transaction).await.unwrap();

    // Sign the transaction
    let secret_key = Keypair::from_secret(secret_string).unwrap();
    transaction.sign(&secret_key);

    match server.send_transaction(transaction).await {
        Ok(transaction_result) => {
            println!("{:?}", transaction_result);
        }
        Err(err) => {
            eprintln!("{:?}", err);
        }
    }
}

实际用法案例

假设有人想构建一个针对基于Soroban本身构建的DEX的贸易机器人。这个机器人将在短时间内执行大量交易,通常利用市场低效率和价格差异。一个用于Soroban的Rust客户端库将为该人提供一套高效的工具集,用于构建交易算法、与Stellar网络交互以及以最小的延迟执行交易。

作者

拉胡尔·索什特 (Twitter)

依赖项

~16–31MB
~493K SLoC