This commit is contained in:
Jędrzej Stuczyński
2023-12-06 12:28:58 +00:00
committed by Jon Häggblad
parent b4b32bb907
commit 37dd20ded1
17 changed files with 4174 additions and 102 deletions
Generated
+39 -9
View File
@@ -1649,6 +1649,16 @@ dependencies = [
"tendermint-proto",
]
[[package]]
name = "cosmos-sdk-proto"
version = "0.20.0"
source = "git+https://github.com/jstuczyn/cosmos-rust?branch=nym-temp/all-validator-features#67718aa27a96efb9881e927a8f998c94b885093c"
dependencies = [
"prost 0.12.1",
"prost-types 0.12.1",
"tendermint-proto",
]
[[package]]
name = "cosmrs"
version = "0.15.0"
@@ -1656,7 +1666,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "47126f5364df9387b9d8559dcef62e99010e1d4098f39eb3f7ee4b5c254e40ea"
dependencies = [
"bip32",
"cosmos-sdk-proto",
"cosmos-sdk-proto 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ecdsa 0.16.8",
"eyre",
"k256",
"rand_core 0.6.4",
"serde",
"serde_json",
"signature 2.1.0",
"subtle-encoding",
"tendermint",
"thiserror",
]
[[package]]
name = "cosmrs"
version = "0.15.0"
source = "git+https://github.com/jstuczyn/cosmos-rust?branch=nym-temp/all-validator-features#67718aa27a96efb9881e927a8f998c94b885093c"
dependencies = [
"bip32",
"cosmos-sdk-proto 0.20.0 (git+https://github.com/jstuczyn/cosmos-rust?branch=nym-temp/all-validator-features)",
"ecdsa 0.16.8",
"eyre",
"k256",
@@ -5956,7 +5985,7 @@ name = "nym-api-requests"
version = "0.1.0"
dependencies = [
"bs58 0.4.0",
"cosmrs",
"cosmrs 0.15.0 (git+https://github.com/jstuczyn/cosmos-rust?branch=nym-temp/all-validator-features)",
"cosmwasm-std",
"getset",
"nym-coconut-interface",
@@ -6014,7 +6043,7 @@ name = "nym-bity-integration"
version = "0.1.0"
dependencies = [
"anyhow",
"cosmrs",
"cosmrs 0.15.0 (git+https://github.com/jstuczyn/cosmos-rust?branch=nym-temp/all-validator-features)",
"eyre",
"k256",
"nym-cli-commands",
@@ -6059,7 +6088,7 @@ dependencies = [
"cfg-if",
"clap 4.4.7",
"comfy-table",
"cosmrs",
"cosmrs 0.15.0 (git+https://github.com/jstuczyn/cosmos-rust?branch=nym-temp/all-validator-features)",
"cosmwasm-std",
"cw-utils",
"handlebars",
@@ -6328,7 +6357,7 @@ name = "nym-credentials"
version = "0.1.0"
dependencies = [
"bls12_381",
"cosmrs",
"cosmrs 0.15.0 (git+https://github.com/jstuczyn/cosmos-rust?branch=nym-temp/all-validator-features)",
"log",
"nym-api-requests",
"nym-coconut-interface",
@@ -7415,7 +7444,7 @@ name = "nym-types"
version = "1.0.0"
dependencies = [
"base64 0.21.4",
"cosmrs",
"cosmrs 0.15.0 (git+https://github.com/jstuczyn/cosmos-rust?branch=nym-temp/all-validator-features)",
"cosmwasm-std",
"eyre",
"hmac 0.12.1",
@@ -7449,7 +7478,7 @@ dependencies = [
"bip32",
"bip39",
"colored",
"cosmrs",
"cosmrs 0.15.0 (git+https://github.com/jstuczyn/cosmos-rust?branch=nym-temp/all-validator-features)",
"cosmwasm-std",
"cw-controllers",
"cw-utils",
@@ -7498,6 +7527,7 @@ dependencies = [
"anyhow",
"bip39",
"clap 4.4.7",
"futures",
"nym-bin-common",
"nym-config",
"nym-network-defaults",
@@ -7530,7 +7560,7 @@ dependencies = [
name = "nym-wallet-types"
version = "1.0.0"
dependencies = [
"cosmrs",
"cosmrs 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)",
"cosmwasm-std",
"hex-literal",
"nym-config",
@@ -7614,7 +7644,7 @@ version = "0.1.0"
dependencies = [
"async-trait",
"const_format",
"cosmrs",
"cosmrs 0.15.0 (git+https://github.com/jstuczyn/cosmos-rust?branch=nym-temp/all-validator-features)",
"eyre",
"futures",
"nym-bin-common",
+4 -1
View File
@@ -203,7 +203,10 @@ cw-controllers = { version = "=1.1.0" }
# cosmrs-related
bip32 = "0.5.1"
cosmrs = "=0.15.0"
# temporarily using a fork again (yay.) because we need staking and slashing support
cosmrs = { git = "https://github.com/jstuczyn/cosmos-rust", branch ="nym-temp/all-validator-features" }
#cosmrs = "=0.15.0"
tendermint = "0.34" # same version as used by cosmrs
tendermint-rpc = "0.34" # same version as used by cosmrs
prost = "0.12"
@@ -52,10 +52,6 @@ use wasmtimer::tokio::sleep;
pub const DEFAULT_BROADCAST_POLLING_RATE: Duration = Duration::from_secs(4);
pub const DEFAULT_BROADCAST_TIMEOUT: Duration = Duration::from_secs(60);
#[cfg(feature = "http-client")]
#[async_trait]
impl CosmWasmClient for cosmrs::rpc::HttpClient {}
#[cfg_attr(target_arch = "wasm32", async_trait(?Send))]
#[cfg_attr(not(target_arch = "wasm32"), async_trait)]
pub trait CosmWasmClient: TendermintRpcClient {
@@ -522,3 +518,7 @@ pub trait CosmWasmClient: TendermintRpcClient {
res.try_into()
}
}
#[cfg_attr(target_arch = "wasm32", async_trait(?Send))]
#[cfg_attr(not(target_arch = "wasm32"), async_trait)]
impl<T> CosmWasmClient for T where T: TendermintRpcClient {}
@@ -26,6 +26,7 @@ use cosmrs::rpc::{HttpClient, HttpClientUrl};
pub mod client_traits;
mod helpers;
pub mod logs;
pub mod module_traits;
pub mod types;
#[derive(Debug)]
@@ -329,14 +330,6 @@ where
}
}
#[async_trait]
impl<C, S> CosmWasmClient for MaybeSigningClient<C, S>
where
C: TendermintRpcClient + Send + Sync,
S: Send + Sync,
{
}
#[async_trait]
impl<C, S> SigningCosmWasmClient for MaybeSigningClient<C, S>
where
@@ -0,0 +1,8 @@
// Copyright 2023 - Nym Technologies SA <contact@nymtech.net>
// SPDX-License-Identifier: Apache-2.0
pub mod staking;
pub mod slashing;
pub use staking::query::StakingQueryClient;
// pub use slashing::query
@@ -0,0 +1,4 @@
// Copyright 2023 - Nym Technologies SA <contact@nymtech.net>
// SPDX-License-Identifier: Apache-2.0
pub mod query;
@@ -0,0 +1,3 @@
// Copyright 2023 - Nym Technologies SA <contact@nymtech.net>
// SPDX-License-Identifier: Apache-2.0
@@ -0,0 +1,4 @@
// Copyright 2023 - Nym Technologies SA <contact@nymtech.net>
// SPDX-License-Identifier: Apache-2.0
pub mod query;
@@ -0,0 +1,80 @@
// Copyright 2023 - Nym Technologies SA <contact@nymtech.net>
// SPDX-License-Identifier: Apache-2.0
use crate::nyxd::error::NyxdError;
use crate::nyxd::{CosmWasmClient, PageRequest};
use async_trait::async_trait;
use cosmrs::proto::cosmos::staking::v1beta1::{
QueryHistoricalInfoRequest as ProtoQueryHistoricalInfoRequest,
QueryHistoricalInfoResponse as ProtoQueryHistoricalInfoResponse,
QueryValidatorRequest as ProtoQueryValidatorRequest,
QueryValidatorResponse as ProtoQueryValidatorResponse,
QueryValidatorsRequest as ProtoQueryValidatorsRequest,
QueryValidatorsResponse as ProtoQueryValidatorsResponse,
};
use cosmrs::staking::{
QueryHistoricalInfoRequest, QueryHistoricalInfoResponse, QueryValidatorRequest,
QueryValidatorResponse, QueryValidatorsRequest, QueryValidatorsResponse,
};
use cosmrs::AccountId;
// TODO: change trait restriction from `CosmWasmClient` to `TendermintRpcClient`
#[cfg_attr(target_arch = "wasm32", async_trait(?Send))]
#[cfg_attr(not(target_arch = "wasm32"), async_trait)]
pub trait StakingQueryClient: CosmWasmClient {
async fn historical_info(&self, height: i64) -> Result<QueryHistoricalInfoResponse, NyxdError> {
let path = Some("/cosmos.staking.v1beta1.Query/HistoricalInfo".to_owned());
let req = QueryHistoricalInfoRequest { height };
let res = self
.make_abci_query::<ProtoQueryHistoricalInfoRequest, ProtoQueryHistoricalInfoResponse>(
path,
req.into(),
)
.await?;
Ok(res.try_into()?)
}
async fn validator(
&self,
validator_addr: AccountId,
) -> Result<QueryValidatorResponse, NyxdError> {
let path = Some("/cosmos.staking.v1beta1.Query/Validator".to_owned());
let req = QueryValidatorRequest { validator_addr };
let res = self
.make_abci_query::<ProtoQueryValidatorRequest, ProtoQueryValidatorResponse>(
path,
req.into(),
)
.await?;
Ok(res.try_into()?)
}
async fn validators(
&self,
status: String,
pagination: Option<PageRequest>,
) -> Result<QueryValidatorsResponse, NyxdError> {
let path = Some("/cosmos.staking.v1beta1.Query/Validators".to_owned());
let req = QueryValidatorsRequest { status, pagination };
let res = self
.make_abci_query::<ProtoQueryValidatorsRequest, ProtoQueryValidatorsResponse>(
path,
req.into(),
)
.await?;
Ok(res.try_into()?)
}
}
#[cfg_attr(target_arch = "wasm32", async_trait(?Send))]
#[cfg_attr(not(target_arch = "wasm32"), async_trait)]
impl<T> StakingQueryClient for T where T: CosmWasmClient {}
@@ -29,24 +29,29 @@ use tendermint_rpc::endpoint::*;
use tendermint_rpc::{Error as TendermintRpcError, Order};
use url::Url;
pub use crate::nyxd::cosmwasm_client::client_traits::{CosmWasmClient, SigningCosmWasmClient};
pub use crate::nyxd::fee::Fee;
pub use crate::nyxd::{
cosmwasm_client::{
client_traits::{CosmWasmClient, SigningCosmWasmClient},
module_traits::{self, StakingQueryClient},
},
fee::Fee,
};
pub use crate::rpc::TendermintRpcClient;
pub use coin::Coin;
pub use cosmrs::bank::MsgSend;
pub use cosmrs::tendermint::abci::{
response::DeliverTx, types::ExecTxResult, Event, EventAttribute,
pub use cosmrs::{
bank::MsgSend,
bip32,
query::{PageRequest, PageResponse},
tendermint::{
abci::{response::DeliverTx, types::ExecTxResult, Event, EventAttribute},
block::Height,
hash::{self, Algorithm, Hash},
validator::Info as TendermintValidatorInfo,
Time as TendermintTime,
},
tx::{self, Msg},
AccountId, Coin as CosmosCoin, Denom, Gas,
};
pub use cosmrs::tendermint::block::Height;
pub use cosmrs::tendermint::hash::{self, Algorithm, Hash};
pub use cosmrs::tendermint::validator::Info as TendermintValidatorInfo;
pub use cosmrs::tendermint::Time as TendermintTime;
pub use cosmrs::tx::Msg;
pub use cosmrs::tx::{self};
pub use cosmrs::Any;
pub use cosmrs::Coin as CosmosCoin;
pub use cosmrs::Gas;
pub use cosmrs::{bip32, AccountId, Denom};
pub use cosmwasm_std::Coin as CosmWasmCoin;
pub use cw2;
pub use cw3;
@@ -56,9 +61,8 @@ pub use fee::{gas_price::GasPrice, GasAdjustable, GasAdjustment};
pub use tendermint_rpc::{
endpoint::{tx::Response as TxResponse, validators::Response as ValidatorResponse},
query::Query,
Paging,
Paging, Request, Response, SimpleRequest,
};
pub use tendermint_rpc::{Request, Response, SimpleRequest};
#[cfg(feature = "http-client")]
use crate::http_client;
@@ -729,7 +733,7 @@ where
where
H: Into<Height> + Send,
{
self.client.validators(height, paging).await
TendermintRpcClient::validators(&self.client, height, paging).await
}
async fn latest_consensus_params(
@@ -804,14 +808,6 @@ where
}
}
#[async_trait]
impl<C, S> CosmWasmClient for NyxdClient<C, S>
where
C: TendermintRpcClient + Send + Sync,
S: Send + Sync,
{
}
impl<C, S> OfflineSigner for NyxdClient<C, S>
where
S: OfflineSigner,
+2 -4
View File
@@ -1014,8 +1014,7 @@ dependencies = [
[[package]]
name = "cosmos-sdk-proto"
version = "0.20.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "32560304ab4c365791fd307282f76637213d8083c1a98490c35159cd67852237"
source = "git+https://github.com/jstuczyn/cosmos-rust?branch=nym-temp/all-validator-features#67718aa27a96efb9881e927a8f998c94b885093c"
dependencies = [
"prost",
"prost-types",
@@ -1025,8 +1024,7 @@ dependencies = [
[[package]]
name = "cosmrs"
version = "0.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "47126f5364df9387b9d8559dcef62e99010e1d4098f39eb3f7ee4b5c254e40ea"
source = "git+https://github.com/jstuczyn/cosmos-rust?branch=nym-temp/all-validator-features#67718aa27a96efb9881e927a8f998c94b885093c"
dependencies = [
"bip32",
"cosmos-sdk-proto",
+1
View File
@@ -14,6 +14,7 @@ license = "GPL-3"
anyhow.workspace = true
bip39 = { workspace = true, features = ["zeroize"] }
clap = { workspace = true, features = ["cargo"] }
futures.workspace = true
serde = { workspace = true, features = ["derive"] }
thiserror.workspace = true
tokio = { workspace = true, features = ["rt-multi-thread", "time", "macros"] }
File diff suppressed because it is too large Load Diff
+5 -1
View File
@@ -2,8 +2,10 @@
// SPDX-License-Identifier: GPL-3.0-only
use crate::cli::try_load_current_config;
use crate::config::Config;
use crate::error::NymRewarderError;
use crate::rewarder::Rewarder;
use bip39::Mnemonic;
use std::path::PathBuf;
#[derive(Debug, clap::Args)]
@@ -13,7 +15,9 @@ pub struct Args {
}
pub(crate) async fn execute(args: Args) -> Result<(), NymRewarderError> {
let config = try_load_current_config(&args.custom_config_path)?.with_override(args);
// let config = try_load_current_config(&args.custom_config_path)?.with_override(args);
let config = Config::new(Mnemonic::generate(24).unwrap());
Rewarder::new(config).run().await
}
+54 -49
View File
@@ -3,10 +3,14 @@
use crate::config::Config;
use crate::error::NymRewarderError;
use futures::StreamExt;
use nym_network_defaults::NymNetworkDetails;
use nym_task::TaskManager;
use nym_validator_client::nyxd::module_traits::StakingQueryClient;
use nym_validator_client::nyxd::{Paging, TendermintRpcClient};
use nym_validator_client::{nyxd, DirectSigningHttpRpcNyxdClient};
use tendermint_rpc::WebSocketClient;
use tendermint_rpc::query::EventType;
use tendermint_rpc::{SubscriptionClient, WebSocketClient};
use tracing::info;
mod tasks;
@@ -29,55 +33,56 @@ impl Rewarder {
//
//
// let client_config =
// nyxd::Config::try_from_nym_network_details(&NymNetworkDetails::new_from_env())?;
//
// let client = DirectSigningHttpRpcNyxdClient::connect_with_mnemonic(
// client_config,
// self.config.base.upstream_nyxd.as_str(),
// // note: the clone here is fine as the mnemonic itself implements ZeroizeOnDrop
// self.config.base.mnemonic.clone(),
// )?;
let client_config =
nyxd::Config::try_from_nym_network_details(&NymNetworkDetails::new_from_env())?;
let (client, driver) = WebSocketClient::new("https://rpc.nymtech.net/")
.await
.unwrap();
/*
/// #[tokio::main]
/// async fn main() {
/// let (client, driver) = WebSocketClient::new("ws://127.0.0.1:26657/websocket")
/// .await
/// .unwrap();
/// let driver_handle = tokio::spawn(async move { driver.run().await });
///
/// // Standard client functionality
/// let tx = format!("some-key=some-value");
/// client.broadcast_tx_async(Transaction::from(tx.into_bytes())).await.unwrap();
///
/// // Subscription functionality
/// let mut subs = client.subscribe(EventType::NewBlock.into())
/// .await
/// .unwrap();
///
/// // Grab 5 NewBlock events
/// let mut ev_count = 5_i32;
///
/// while let Some(res) = subs.next().await {
/// let ev = res.unwrap();
/// println!("Got event: {:?}", ev);
/// ev_count -= 1;
/// if ev_count < 0 {
/// break;
/// }
/// }
///
/// // Signal to the driver to terminate.
/// client.close().unwrap();
/// // Await the driver's termination to ensure proper connection closure.
/// let _ = driver_handle.await.unwrap();
/// }
/// ```
*/
let client = DirectSigningHttpRpcNyxdClient::connect_with_mnemonic(
client_config,
self.config.base.upstream_nyxd.as_str(),
// note: the clone here is fine as the mnemonic itself implements ZeroizeOnDrop
self.config.base.mnemonic.clone(),
)?;
let foo = StakingQueryClient::validator(
&client,
"nvaloper1l3whttjtav328jntcswfy63p9ell9uk0fp50zh"
.parse()
.unwrap(),
)
.await
.unwrap();
println!("{:#?}", foo);
// client.validator("").await.unwrap();
// let validators = client.validators(10015526u32, Paging::All).await.unwrap();
// println!("{:#?}", validators);
// let (client, driver) = WebSocketClient::new("wss://rpc.nymtech.net/websocket")
// .await
// .unwrap();
//
// let driver_handle = tokio::spawn(async move { driver.run().await });
//
// let mut subs = client.subscribe(EventType::NewBlock.into()).await.unwrap();
//
// let mut ev_count = 10;
// while let Some(res) = subs.next().await {
// let ev = res.unwrap();
// println!("Got event: {:#?}", ev);
// break;
// // ev_count -= 1;
// // if ev_count < 0 {
// // break;
// // }
// }
//
// // Signal to the driver to terminate.
// client.close().unwrap();
// // Await the driver's termination to ensure proper connection closure.
// let _ = driver_handle.await.unwrap();
/*
task 1:
@@ -0,0 +1,5 @@
// Copyright 2023 - Nym Technologies SA <contact@nymtech.net>
// SPDX-License-Identifier: GPL-3.0-only
// sure, we could subscribe to new block events and watch for signing of every single block
// but realistically we don't need that kind of accuracy so just checking the VP every few minutes is enough
@@ -1,2 +1,4 @@
// Copyright 2023 - Nym Technologies SA <contact@nymtech.net>
// SPDX-License-Identifier: GPL-3.0-only
pub mod block_watcher;