pub use crate::client::AccumulateClient;
pub type Accumulate = AccumulateClient;
pub use crate::codec::{
TransactionCodec, TransactionEnvelope, TransactionSignature,
TransactionBodyBuilder, TokenRecipient, KeySpec, BinaryReader, BinaryWriter,
AccumulateHash, UrlHash, canonical_json, sha256_bytes, to_canonical_string
};
pub use crate::canonjson::{dumps_canonical, canonicalize};
pub use crate::crypto::ed25519::{Ed25519Signer, verify, verify_prehashed, verify_signature, sha256};
pub use crate::crypto::ed25519_helper::Ed25519Helper;
pub use crate::codec::hash_helper::HashHelper;
pub use crate::protocol::{EnvelopeBuilder, helpers as protocol_helpers};
pub use crate::generated::enums::{
AccountAuthOperationType, AccountType, AllowedTransactionBit, BookType,
DataEntryType, ExecutorVersion, KeyPageOperationType, NetworkMaintenanceOperationType,
ObjectType, PartitionType, SignatureType, TransactionMax, TransactionType,
VoteType, VoteTally,
};
pub use crate::generated::signatures::*;
pub use crate::generated::header::*;
pub use crate::generated::transactions::*;
pub use crate::generated::types as protocol_types;
pub use crate::generated::api_methods::{
AccumulateRpc,
StatusParams, QueryParams, ExecuteParams, QueryDirectoryParams, QueryTxParams,
QueryTxLocalParams, ExecuteCreateIdentityParams, ExecuteSendTokensParams,
FaucetParams, VersionParams, DescribeParams,
StatusResponse, QueryResponse, ExecuteResponse, QueryDirectoryResponse, QueryTxResponse,
QueryTxLocalResponse, ExecuteCreateIdentityResponse, ExecuteSendTokensResponse
};
pub use crate::generated::api_methods::AccumulateClient as GenericAccumulateClient;
pub use crate::runtime::signing::*;
pub use crate::runtime::rpc::*;
#[cfg(test)]
pub use crate::runtime::signing_test_shims;
pub mod canonjson;
pub mod client;
pub mod codec;
pub mod crypto;
pub mod errors;
pub mod generated;
pub mod helpers;
pub mod json_rpc_client;
pub mod protocol;
pub mod runtime;
pub mod types;
pub mod types_matrix;
pub use crate::helpers::{
KERMIT_V2, KERMIT_V3, DEVNET_V2, DEVNET_V3,
TxBody, TxResult,
SmartSigner, HeaderOptions, KeyManager, KeyPageState, KeyEntry,
QuickStart, Wallet, AdiInfo, KeyPageInfo,
poll_for_balance, poll_for_credits, wait_for_tx,
derive_lite_identity_url, derive_lite_token_account_url, sha256_hash,
};
pub use crate::types::{
V3NodeInfo, ServiceAddress, NodeInfoOptions,
V3ConsensusStatus, LastBlock, ConsensusPeerInfo, ConsensusStatusOptions,
V3NetworkStatus, AcmeOracle, PartitionExecutorVersion, NetworkStatusOptions,
V3Metrics, MetricsOptions,
V3Submission, SubmitOptions, ValidateOptions,
V3FaucetOptions, V3SnapshotInfo, ListSnapshotsOptions,
FindServiceOptions, FindServiceResult, SubscribeOptions,
RangeOptions, ReceiptOptions, DefaultQuery,
ChainQuery, DataQuery, DirectoryQuery, PendingQuery, BlockQuery,
AnchorSearchQuery, PublicKeySearchQuery, PublicKeyHashSearchQuery,
DelegateSearchQuery, MessageHashSearchQuery, V3Query,
};
use anyhow::Result;
use std::time::Duration;
use url::Url;
#[derive(Debug, Clone)]
pub struct AccOptions {
pub timeout: Duration,
pub headers: std::collections::HashMap<String, String>,
}
impl Default for AccOptions {
fn default() -> Self {
Self {
timeout: Duration::from_secs(30),
headers: std::collections::HashMap::new(),
}
}
}
impl AccumulateClient {
pub async fn from_endpoints(v2: Url, v3: Url, opts: AccOptions) -> Result<Self> {
Self::new_with_options(v2, v3, opts)
.await
.map_err(|e| anyhow::anyhow!(e))
}
pub async fn from_env() -> Result<Self> {
dotenvy::dotenv().ok();
let v2_url = std::env::var("ACCUMULATE_V2_URL")
.map_err(|_| anyhow::anyhow!("ACCUMULATE_V2_URL environment variable not set"))?;
let v3_url = std::env::var("ACCUMULATE_V3_URL")
.map_err(|_| anyhow::anyhow!("ACCUMULATE_V3_URL environment variable not set"))?;
let v2 = Url::parse(&v2_url)?;
let v3 = Url::parse(&v3_url)?;
let timeout_ms = std::env::var("ACCUMULATE_TIMEOUT_MS")
.ok()
.and_then(|s| s.parse().ok())
.unwrap_or(30_000);
let opts = AccOptions {
timeout: Duration::from_millis(timeout_ms),
..Default::default()
};
Self::from_endpoints(v2, v3, opts).await
}
pub async fn devnet(opts: AccOptions) -> Result<Self> {
let v2 = Url::parse("http://localhost:26660/v2")?;
let v3 = Url::parse("http://localhost:26661/v3")?;
Self::from_endpoints(v2, v3, opts).await
}
pub async fn testnet(opts: AccOptions) -> Result<Self> {
let v2 = Url::parse("https://testnet.accumulatenetwork.io/v2")?;
let v3 = Url::parse("https://testnet.accumulatenetwork.io/v3")?;
Self::from_endpoints(v2, v3, opts).await
}
pub async fn mainnet(opts: AccOptions) -> Result<Self> {
let v2 = Url::parse("https://mainnet.accumulatenetwork.io/v2")?;
let v3 = Url::parse("https://mainnet.accumulatenetwork.io/v3")?;
Self::from_endpoints(v2, v3, opts).await
}
pub async fn custom(base_url: &str, opts: AccOptions) -> Result<Self> {
let base = Url::parse(base_url)?;
let v2 = base.join("/v2")?;
let v3 = base.join("/v3")?;
Self::from_endpoints(v2, v3, opts).await
}
}