3 个版本

0.1.3 2019 年 10 月 21 日
0.1.2 2019 年 10 月 16 日
0.1.0 2019 年 10 月 12 日

#5 in #forge

Apache-2.0

3.5MB
78K SLoC

Forge SDK

要在 Forge 上开发应用程序,您需要选择一个 SDK。Forge SDK 的目的是使与 Forge 构建的链交互尽可能容易。所有 SDK API 都组织到以下类别

  • 链 API:提供与链相关 gRPC 的客户端包装器
  • 钱包 API:提供与钱包相关 gRPC 的客户端包装器
  • 状态 API:提供与状态相关 gRPC 的客户端包装器
  • 订阅 API:提供与订阅相关 gRPC 的客户端包装器
  • 交易 API:交易 gRPC 为 send_tx,这组 API 提供辅助函数,以简化构建和发送交易。
  • 其他 API:解析配置、初始化 SDK 等。

有关更多信息,请参阅: Forge SDK 概述


如何通过 Rust SDK 与 Forge 链通信?

准备

编写您的应用程序代码

  • 3. 创建您的 Rust 项目。

    • $ cargo new demo 创建名为 demo 的 rust 项目。
    • 设置 Cargo.tomlDependencies
        [dependencies]
        forge_wallet = "^0.1.2"
        forge_grpc = "^0.1.3"
      
    • main.rslib.rs 中使用 forge 包
        extern crate forge_grpc;
        extern crate forge_wallet;
      

    详情请参阅 rust_sdk_example

  • 4. 编写您的 Rust 项目代码。以下是一个示例

    • 创建与上述创建的链的 gRPC 连接
      let chain_address = "127.0.0.1:28210";
      let chain_name = "chain_1";
      connection::add_connection(chain_name, chain_address)?;
      
    • 获取链配置
      forge_grpc::get_chain_info(Some(chain_name.to_string()))?;
      
    • 声明钱包
      use forge_grpc::transaction;
      // -.create two wallets: alice, bob
      let alice = forge_wallet::Wallet::create_default_wallet()?;
      let bob = forge_wallet::Wallet::create_default_wallet()?;
      
      // -.declare alice on chain
      let mut request = transaction::build_request::Request {
          wallet: alice.clone(),
          forge_name: Some(chain_name.to_string()),
          ..Default::default()
      };
      let mut declare = transaction::build_itx::Declare {
          moniker: Some(String::from("alice")),
          ..Default::default()
      };
      forge_grpc::declare(&request, &declare)?;
      
      // -.declare bob on chain
      request.wallet = bob.clone();
      declare.moniker = Some(String::from("bob_01"));
      let resp = forge_grpc::declare(&request, &declare)?;
      
    • Alice 检入以获取一些代币
      request.wallet = alice.clone();
      forge_grpc::poke(&request)?;
      
    • Alice 向 Bob 转账 1.0 代币
      let decimal = connection::get_connection(Some(chain_name.to_string())).unwrap().get_decimal() as usize;
      let transfer_itx = transaction::build_itx::Transfer {
          to: Some(bob.address.to_owned()),
          value: Some(forge_grpc::BigUint::from_string("1", decimal)?),
          ..Default::default()
      };
      forge_grpc::transfer(&request, &transfer_itx)?;
      
    • 然后您可以在 forge_web 上检查发送的交易。默认地址为 127.0.0.1:8210

    详情请参阅 rust_sdk_example

    更多示例请见 grpc_example


  • forge_wallet:帮助您创建本地账户,验证签名等。API 如下

    • create_default_wallet() -> 结果<钱包>
    • from_wallet_type(类型: &WalletType) -> 结果<钱包>
    • from_pk(私钥: &[u8],类型: &WalletType) -> 结果<钱包>
    • from_sk(密钥: &[u8],类型: &WalletType) -> 结果<钱包>
    • verify(&self,消息: &[u8],签名: &[u8]) -> 结果<bool>
    • hash(&self,消息: &[u8]) -> 结果<Vec<u8>>
    • sign(&self,消息: &[u8]) -> 结果<Vec<u8>>
  • forge_grpc:帮助您连接到 forge 链,从链中搜索内容,向 forge 链发送交易等。

    • get_chain_info(chain_name: Option<String>)
    • get_chain_id(chain_name: Option<String>)
    • get_net_info(chain_name: Option<String>)
    • get_node_info(chain_name: Option<String>)
    • create_wallet(request: &wallet_client::CreateWallet,forge_name: Option<String>)
    • recover_wallet(request: &wallet_client::RecoverWallet,forge_name: Option<String>)
    • remove_wallet(request: &wallet_client::RemoveWallet,forge_name: Option<String>)
    • declare(request: &Request,dec: &build_itx::Declare)
    • poke(request: &Request)
    • transfer(request: &Request,transfer: &build_itx::Transfer)
    • create_asset(request: &Request,itx: &build_itx::CreateAsset)
  • forge_util:提供一些帮助 API,例如 将 JSON 保存到本地 等。

  • forge_did:从 pkskpk hash 生成 forge did。例如 did:abt:zNYm1gM23ZGHNYDYyBwSaywzTqLKoj4WuTeC

  • forge_hasher:提供一些哈希算法,例如 blake2bkeccaksha2sha3

  • forge_signer:提供一些签名算法,例如 ed25519secp256k1

  • forge_crypter:提供一些加密算法,例如 ed25519

依赖项

~67MB
~1M SLoC