1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
// `error_chain!` can recurse deeply
#![recursion_limit = "1024"]
#![allow(missing_docs)]
/*!
* This crate provides an interface into the Terra LCD HTTP service.
* # PFC
*
* This work is sponsored by the PFC (Pretty Freaking Cool) Validator,
* feel free to delegate to the [PFC](https://station.terra.money/validator/terravaloper12g4nkvsjjnl0t7fvq3hdcw7y8dc9fq69nyeu9q) validator.
*
* It will help defray the costs.
*
* # Warning
* This uses crytpographic routines that have not gone through any security audit.
*
* The manner which it stores private keys may be unsecure/subject to hacks, and if you use it, may put the assets behind those keys at risk.
*
* This is ALPHA software.
*
* # Usage
* ```toml
* [dependencies]
* terra-rust-api="0.1"
* tokio = { version = "1.4", features = ["full"] }
* ```
* ```
* use terra_rust_api::{Terra, GasOptions, PrivateKey};
* use terra_rust_api::core_types::{Coin, Msg, StdSignMsg, StdSignature};
* use terra_rust_api::messages::MsgSend;
* use terra_rust_api::auth_types::AuthAccountResult;
* use bitcoin::secp256k1::Secp256k1;
* use terra_rust_api::errors::Result;
*
*
* async fn demo() -> Result<()>{
* // set up the LCD client
* let gas_opts = GasOptions::create_with_gas_estimate("50ukrw",1.4)?;
* let terra = Terra::lcd_client("https://tequila-lcd.terra.dev/", "tequila-0004", &gas_opts).await?;
* // generate a private key
* let secp = Secp256k1::new();
* let from_key = PrivateKey::from_words(&secp,"your secret words")?;
* let from_public_key = from_key.public_key(&secp);
* // generate the message SEND 1000 uluna from your private key to someone else
* let coin: Coin = Coin::parse("1000uluna")?.unwrap();
* let from_account = from_public_key.account()?;
* let send: MsgSend = MsgSend::create(from_account, String::from("terra1usws7c2c6cs7nuc8vma9qzaky5pkgvm2uag6rh"), vec![coin]);
* // generate the transaction & calc fees
* let messages: Vec<Box<dyn Msg>> = vec![Box::new(send)];
* let std_fee = terra.calc_fees(&messages).await?;
* let auth_result: AuthAccountResult =
*                terra.auth().account(&from_public_key.account()?).await?;
* let account_number = auth_result.result.value.account_number;
* let std_sign_msg = StdSignMsg {
*                 chain_id: terra.chain_id.to_string(),
*                 account_number,
*                 sequence: auth_result.result.value.sequence,
*                 fee: std_fee,
*                 msgs: messages,
*                 memo: "Luna to the Moon!".to_string(),
*  };
*
* // Sign it
*  let js = serde_json::to_string(&std_sign_msg)?;
*  let sig = from_key.sign(&secp, &js)?;
*  let sigs: Vec<StdSignature> = vec![sig];
*
* // send it out
*  let resp = terra.tx().broadcast_sync(&std_sign_msg, &sigs).await?;
*  match resp.code {
*      Some(code) => {
*          log::error!("{}", serde_json::to_string(&resp)?);
*          eprintln!("Transaction returned a {} {}", code, resp.txhash)
*      }
*      None => {
*          println!("{}", resp.txhash)
*      }
*  }
* Ok(())
* }
* ```
*/
mod client;
/// Error Messages
pub mod errors;
mod keys;
/// definitions of the different type of Messages we have implemented
pub mod messages;
#[macro_use]
extern crate lazy_static;
#[macro_use]
extern crate erased_serde;
extern crate rustc_serialize;
//
//#[macro_use]
extern crate error_chain;
extern crate reqwest;

pub use client::{auth_types, client_types, core_types, market_types, staking_types};
pub use client::{GasOptions, Terra};
pub use keys::{PrivateKey, PublicKey};
pub use messages::bank;