76a61cb3ae
* Import cw3-flex-multisig and cw4-group contracts * Add release_funds to coconut-bandwidth-contract * Create contract.rs file * Add cw multi test and a test that uses it * Use mnemonic for coconut mode too * Stricter access to config file, which contains mnemonic * Update tests * Remove signed deposits dir after merging that into sql db * Clippy nits * More clippy * Remove backtraces features to pass clippy tests * Merge the same mnemonic for rewarding and coconut * Simplify things, letting network monitor use testnet-mode with gateways * Unify the nymd clients * Sqlx common storage for buying/consuming credentials * Link credential storage to credential client * Trigger rewarded_set update on bootstrap error * Fix bug on message signing * Simplify coconut feature in code and set it in validator-api * Update some local consts * Link clients to credential storage * Simplify sql query and change socks5 too * Update attr handling such that public ones are usable * Normalize test addresses * Fix clippy * Merge storages for (non)coconut creds * Fmt miss * Disable wasm client support for now Co-authored-by: durch <durch@users.noreply.github.com>
72 lines
2.0 KiB
Rust
72 lines
2.0 KiB
Rust
// Copyright 2022 - Nym Technologies SA <contact@nymtech.net>
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
use crate::models::ERC20Credential;
|
|
|
|
#[derive(Clone)]
|
|
pub(crate) struct ERC20CredentialManager {
|
|
connection_pool: sqlx::SqlitePool,
|
|
}
|
|
|
|
impl ERC20CredentialManager {
|
|
/// Creates new instance of the `ERC20CredentialManager` with the provided sqlite connection pool.
|
|
///
|
|
/// # Arguments
|
|
///
|
|
/// * `connection_pool`: database connection pool to use.
|
|
pub(crate) fn new(connection_pool: sqlx::SqlitePool) -> Self {
|
|
ERC20CredentialManager { connection_pool }
|
|
}
|
|
|
|
/// Inserts provided signature into the database.
|
|
///
|
|
/// # Arguments
|
|
///
|
|
/// * `public_key`: Base58 representation of a public key.
|
|
/// * `private_key`: Base58 representation of a private key.
|
|
pub(crate) async fn insert_erc20_credential(
|
|
&self,
|
|
public_key: String,
|
|
private_key: String,
|
|
) -> Result<(), sqlx::Error> {
|
|
sqlx::query!(
|
|
"INSERT INTO erc20_credentials(public_key, private_key, consumed) VALUES (?, ?, ?)",
|
|
public_key,
|
|
private_key,
|
|
false,
|
|
)
|
|
.execute(&self.connection_pool)
|
|
.await?;
|
|
Ok(())
|
|
}
|
|
|
|
/// Tries to retrieve one of the stored, unused credentials.
|
|
pub(crate) async fn get_next_erc20_credential(&self) -> Result<ERC20Credential, sqlx::Error> {
|
|
sqlx::query_as!(
|
|
ERC20Credential,
|
|
"SELECT * FROM erc20_credentials WHERE consumed = false"
|
|
)
|
|
.fetch_one(&self.connection_pool)
|
|
.await
|
|
}
|
|
|
|
/// Mark a credential as being consumed.
|
|
pub(crate) async fn consume_erc20_credential(
|
|
&self,
|
|
public_key: String,
|
|
) -> Result<(), sqlx::Error> {
|
|
sqlx::query!(
|
|
r#"
|
|
UPDATE erc20_credentials
|
|
SET consumed = true
|
|
WHERE public_key = ?
|
|
"#,
|
|
public_key
|
|
)
|
|
.execute(&self.connection_pool)
|
|
.await?;
|
|
|
|
Ok(())
|
|
}
|
|
}
|