#forge #grpc #grpc-client #wallet #chain #applications #transaction

forge_grpc

Forge gRPC客户端的Rust语言实现

4个版本

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

#forge中排名第6


用于forge_sdk

Apache-2.0

3.5MB
78K SLoC

Forge SDK - Grpc客户端

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

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

更多信息请参见:Forge SDK概述


钱包

钱包包将帮助用户创建本地账户、验证签名等。功能如下

钱包API如下

  • create_default_wallet() -> 结果<钱包>
  • from_wallet_type(w_type: &WalletType) -> 结果<钱包>
  • from_pk(pk: &[u8],w_type: &WalletType) -> 结果<钱包>
  • from_sk(sk: &[u8],w_type: &WalletType) -> 结果<钱包>
  • verify(&self,message: &[u8],signature: &[u8]) -> 结果<bool>
  • sign(&self,message: &[u8]) -> 结果<Vec<u8>>

grpc

帮助您创建/获取与Forge链的连接,然后通过连接向Forge链发送消息。消息包括GetInfoSendTxGetStateSubscribe/Unsubscribe等。

连接模块

帮助您创建/获取与Forge链的连接。

事务

帮助您构建事务对象,然后将其发送到Forge链。

示例 如何创建本地钱包,在Forge链上声明钱包,签到以获取一些代币,然后转给其他人。 示例仓库更多示例

  • 1.设置Cargo.toml
    [dependencies]
    forge_wallet = "^0.1.2"
    forge_grpc = "^0.1.3"
    
  • 2.与Forge链建立连接。
    let chain_address = "127.0.0.1:28210";
    let chain_name = "chain_1";
    connection::add_connection(chain_name, chain_address)?;
    
  • 3.创建两个账户:Alice和bob。
    // create two local wallets: Alice, Bob
    let alice = forge_wallet::Wallet::create_default_wallet()?;
    let bob = forge_wallet::Wallet::create_default_wallet()?;
    
    // declare Alice on forge 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 forge chain
    request.wallet = bob.clone();
    declare.moniker = Some(String::from("bob_01"));
    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)?;
    
  • Alice和bob检查余额。
    // sleep 5s to wait transfer transaction stable.
    std::thread::sleep(std::time::Duration::from_secs(5));
    let resp = forge_grpc::get_account_state(
        &vec![alice.address, bob.address],
        Some(chain_name.to_string()),
    )?;
    println!(
        "alice balance: {:#?}, bob balance: {:#?}",
        resp[0].get_state().get_balance().to_string(decimal),
        resp[1].get_state().get_balance().to_string(decimal)
    );
    

  • APIs

    GRPC公开API以帮助用户get_infosend_txsubscribe\unsubscribewallets等。详细信息请参阅lib.rs

    • 获取函数

      • 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>)
      • get_validators_info(chain_name: Option<String>)
      • get_config(is_parsed: Option<bool>,chain_name: Option<String>)
      • get_tx(txs: &[String],chain_name: Option<String>)
      • get_unconfirmed_txs(paging: &chain_client::页面输入,chain_name: Option<String>)
      • 获取区块(高度: u64,chain_name: Option<String>)
      • 多重签名(多重签名: &chain_client::请求多重签名,chain_name: Option<String>)
      • 搜索(密钥: &字符串,: &字符串,chain_name: Option<String>)
    • 钱包功能

      • 创建钱包(请求: &钱包客户端::创建钱包,锻造名称: Option<String>)
      • 恢复钱包(请求: &钱包客户端::恢复钱包,锻造名称: Option<String>)
      • 删除钱包(请求: &钱包客户端::删除钱包,锻造名称: Option<String>)
      • 列出钱包(锻造名称: Option<String>)
      • 声明节点(锻造名称: Option<String>,验证者: bool)
    • 状态功能

      • 获取账户状态(钱包地址: &[String],chain_name: Option<String>)
      • 获取锻造状态(请求: &状态客户端::锻造状态,chain_name: Option<String>)
      • 获取协议状态(请求: Arc<状态客户端::请求状态>,chain_name: Option<String>)
      • 获取资产状态(请求: Arc<状态客户端::请求状态>,chain_name: Option<String>)
      • 获取代表状态(请求: Arc<状态客户端::请求状态>,chain_name: Option<String>)
      • 获取交换状态(请求: Arc<状态客户端::请求状态>,chain_name: Option<String>)
      • 获取泰达币状态(请求: Arc<状态客户端::请求状态>,chain_name: Option<String>)
      • 获取股份状态(请求: Arc<状态客户端::请求状态>,chain_name: Option<String>)
    • 发送事务功能

      • 声明(请求: &请求,递减: &构建itx::声明)
      • 戳击(请求: &请求)
      • 转让(请求: &请求,转让: &构建itx::转让)
      • 创建资产(请求: &请求,itx: &构建itx::创建资产)
      • 更新资产(请求: &请求,itx: &构建itx::更新资产)
      • 消耗资产(请求: &请求,itx: &构建itx::消耗资产,资产地址: &字符串,签署者: &[钱包])
      • 获取资产(请求: &请求,itx: &构建itx::获取资产)
      • 交换(请求: &请求,itx: &构建itx::交换,签署者: &[钱包])
      • 代表(请求: &请求,itx: &构建itx::代表事务)
      • 账户迁移(请求: &请求,itx: &构建itx::账户迁移)
      • 存入代币(请求: &请求,itx: &构建itx::存入代币)
      • 设置交换(请求: &请求,itx: &构建itx::设置交换)
      • 撤销交换(请求: &请求,itx: &构建itx::撤销交换)
      • 检索交换(请求: &请求,itx: &构建itx::检索交换)
      • 创建事务(请求: &构建事务::创建事务,锻造名称: Option<String>)
      • 准备交换事务(请求: &请求,itx: &构建itx::交换,签署者: &[钱包])
      • 发送简单事务(请求: &事务请求,锻造名称: Option<String>)
    • 事件功能

      • 订阅(请求: &事件客户端::订阅,锻造名称: Option<String>)
      • 退订(请求: &事件客户端::退订,锻造名称: Option<String>)
  • 事务示例

    示例模块展示了如何向锻造发送事务,例如声明、戳击、资产等。此外,该模块还展示了如何创建钱包、添加连接、获取连接等。详细信息请参阅模块 grpc/src/example

    支持的交易类型

    • 1. 创建钱包
    • 2. 转账
    • 3. 资产
    • 4. 交换
    • 5. 代表
    • 6. 交换和代表同时进行
    • 7. 原子交换
    • 8. 订阅/退订
    • 9. 迁移账户

  • forge_wallet:帮助您创建本地账户、验证签名等。以下API如下
    • create_default_wallet() -> 结果<钱包>
    • from_wallet_type(w_type: &WalletType) -> 结果<钱包>
    • from_pk(pk: &[u8],w_type: &WalletType) -> 结果<钱包>
    • from_sk(sk: &[u8],w_type: &WalletType) -> 结果<钱包>
    • verify(&self,message: &[u8],signature: &[u8]) -> 结果<bool>
    • 哈希(&self,message: &[u8]) -> 结果<Vec<u8>>
    • sign(&self,message: &[u8]) -> 结果<Vec<u8>>
  • forge_util:提供一些帮助API,例如 将json保存到本地 等。
  • forge_did:从pk、sk或pk哈希生成 forge didforge did 示例 did:abt:zNYm1gM23ZGHNYDYyBwSaywzTqLKoj4WuTeC
  • forge_hasher:提供一些哈希算法,例如 blake2bkeccaksha2sha3
  • forge_signer:提供一些签名算法,例如 ed25519secp256k1
  • forge_crypter:提供一些加密算法,例如 ed25519

依赖

~51MB
~881K SLoC