User Balance + Referral Logic (#44)
* will implement balance topup endpoint
* will quickly fix other PR reviews
* merging from master
* will finish up godmoe
* will finish up login
* added logic to top up balance (first iteration)
* should implement additional columns soon (currency, amount, tx-hash), as well as a new table for spend
* updated migrations, will account for spend next
* get back to this later
* will merge PR from stats-v2
* stats v2
rebased all my commits and squashed them down to one
* cargo upgrade
* added migrtation for spend in accounting table. will run test-deposit next
* trying to get request from polygon
* first iteration /user/balance/:tx_hash works, needs to add accepted tokens next
* creating the referral code seems to work
* will now check if spending enough credits will lead to both parties receiving credits
* rpcstats takes care of accounting for spend data
* removed track spend from table
* Revert "removed track spend from table"
This reverts commit a50802d6ae75f786864c5ec42d0ceb2cb27124ed.
* Revert "rpcstats takes care of accounting for spend data"
This reverts commit 1cec728bf241e4cfd24351134637ed81c1a5a10b.
* removed rpc request table entity
* updated referral code to use ulid s
* credits used are aggregated
* added a bunch of fields to referrer
* added database logic whenever an aggregate stats is added. will have to iterate over this a couple times i think. go to (1) detecting accepted stables next, (2) fix influxdb bug and (3) start to write test
* removed track spend as this will occur in the database
* will first work on "balance", then referral. these should really be treated as two separate PRs (although already convoluted)
* balance logic initial commit
* breaking WIP, changing the RPC call logic functions
* will start testing next
* got rid of warnings & lint
* will proceed with subtracting / adding to balance
* added decimal points, balance tracking seems to work
* will beautify code a bit
* removed deprecated dependency, and added topic + deposit contract to app.yaml
* brownie test suite does not rely on local contract files it pulls all from polygonscan
* will continue with referral
* should perhaps (in a future revision) recordhow much the referees got for free. marking referrals seems to work rn
* user is upgraded to premium if they deposit more than 10$. we dont accept more than $10M in a single tx
* will start PR, referral seems to be fine so far, perhaps up to some numbers that still may need tweaking
* will start PR
* removed rogue comments, cleaned up payments a bit
* changes before PR
* apply stats
* added unique constraint
* some refactoring such that the user file is not too bloated
* compiling
* progress with subusers, creating a table entry seems to work
* good response type is there as well now, will work on getters from primary user and secondary user next
* subuser logic also seems fine now
* downgrade logic
* fixed bug influxdb does not support different types in same query (which makes sense)
* WIP temporary commit
* merging with PR
* Delete daemon.rs
there are multiple daemons now, so this was moved to `proxyd`
* will remove request clone to &mut
* multiple request handles for payment
* making requests still seem fine
* removed redundant commented out bits
* added deposit endpoint, added deposit amount and deposit user, untested yet
* small bug with downgrade tier id
* will add authorization so balance can be received for users
* balance history should be set now too
* will check balance over time again
* subususer can see rpc key balance if admin or owner
* stats also seems to work fine now with historical balance
* things seem to be building and working
* removed clone from OpenRequestHandle
* removed influxdb from workspace members
* changed config files
* reran sea-orm generate entities, added a foreign key, should be proper now
* removed contract from commit
* made deposit contract optional
* added topic in polygon dev
* changed deposit contract to deposit factory contract
* added selfrelation on user_tier
* added payment required
* changed chain id to u64
* add wss in polygon llamarpc
* removed origin and method from the table
* added onchain transactions naming (and forgot to add a migration before)
* changed foreign key to be the referrer (id), not the code itself
* forgot to add id as the target foreign key
* WIP adding cache to update role
* fixed merge conflicts
---------
Co-authored-by: Bryan Stitt <bryan@llamanodes.com>
Co-authored-by: Bryan Stitt <bryan@stitthappens.com>
2023-05-12 19:45:15 +03:00
|
|
|
//! Handle subusers, viewing subusers, and viewing accessible rpc-keys
|
|
|
|
use crate::app::Web3ProxyApp;
|
|
|
|
use crate::frontend::authorization::RpcSecretKey;
|
|
|
|
use crate::frontend::errors::{Web3ProxyError, Web3ProxyErrorContext, Web3ProxyResponse};
|
|
|
|
use anyhow::Context;
|
|
|
|
use axum::{
|
|
|
|
extract::Query,
|
|
|
|
headers::{authorization::Bearer, Authorization},
|
|
|
|
response::IntoResponse,
|
|
|
|
Extension, Json, TypedHeader,
|
|
|
|
};
|
|
|
|
use axum_macros::debug_handler;
|
|
|
|
use entities::sea_orm_active_enums::Role;
|
|
|
|
use entities::{balance, rpc_key, secondary_user, user, user_tier};
|
|
|
|
use ethers::types::Address;
|
|
|
|
use hashbrown::HashMap;
|
|
|
|
use http::StatusCode;
|
|
|
|
use log::{debug, warn};
|
|
|
|
use migration::sea_orm;
|
|
|
|
use migration::sea_orm::prelude::Decimal;
|
|
|
|
use migration::sea_orm::ActiveModelTrait;
|
|
|
|
use migration::sea_orm::ColumnTrait;
|
|
|
|
use migration::sea_orm::EntityTrait;
|
|
|
|
use migration::sea_orm::IntoActiveModel;
|
|
|
|
use migration::sea_orm::QueryFilter;
|
|
|
|
use migration::sea_orm::TransactionTrait;
|
|
|
|
use serde_json::json;
|
|
|
|
use std::sync::Arc;
|
|
|
|
use ulid::{self, Ulid};
|
|
|
|
use uuid::Uuid;
|
|
|
|
|
|
|
|
pub async fn get_keys_as_subuser(
|
|
|
|
Extension(app): Extension<Arc<Web3ProxyApp>>,
|
|
|
|
TypedHeader(Authorization(bearer)): TypedHeader<Authorization<Bearer>>,
|
|
|
|
Query(_params): Query<HashMap<String, String>>,
|
|
|
|
) -> Web3ProxyResponse {
|
|
|
|
// First, authenticate
|
|
|
|
let (subuser, _semaphore) = app.bearer_is_authorized(bearer).await?;
|
|
|
|
|
|
|
|
let db_replica = app
|
|
|
|
.db_replica()
|
|
|
|
.context("getting replica db for user's revert logs")?;
|
|
|
|
|
|
|
|
// TODO: JOIN over RPC_KEY, SUBUSER, PRIMARY_USER and return these items
|
|
|
|
|
|
|
|
// Get all secondary users that have access to this rpc key
|
|
|
|
let secondary_user_entities = secondary_user::Entity::find()
|
|
|
|
.filter(secondary_user::Column::UserId.eq(subuser.id))
|
|
|
|
.all(db_replica.conn())
|
|
|
|
.await?
|
|
|
|
.into_iter()
|
2023-05-13 01:15:32 +03:00
|
|
|
.map(|x| (x.rpc_secret_key_id, x))
|
User Balance + Referral Logic (#44)
* will implement balance topup endpoint
* will quickly fix other PR reviews
* merging from master
* will finish up godmoe
* will finish up login
* added logic to top up balance (first iteration)
* should implement additional columns soon (currency, amount, tx-hash), as well as a new table for spend
* updated migrations, will account for spend next
* get back to this later
* will merge PR from stats-v2
* stats v2
rebased all my commits and squashed them down to one
* cargo upgrade
* added migrtation for spend in accounting table. will run test-deposit next
* trying to get request from polygon
* first iteration /user/balance/:tx_hash works, needs to add accepted tokens next
* creating the referral code seems to work
* will now check if spending enough credits will lead to both parties receiving credits
* rpcstats takes care of accounting for spend data
* removed track spend from table
* Revert "removed track spend from table"
This reverts commit a50802d6ae75f786864c5ec42d0ceb2cb27124ed.
* Revert "rpcstats takes care of accounting for spend data"
This reverts commit 1cec728bf241e4cfd24351134637ed81c1a5a10b.
* removed rpc request table entity
* updated referral code to use ulid s
* credits used are aggregated
* added a bunch of fields to referrer
* added database logic whenever an aggregate stats is added. will have to iterate over this a couple times i think. go to (1) detecting accepted stables next, (2) fix influxdb bug and (3) start to write test
* removed track spend as this will occur in the database
* will first work on "balance", then referral. these should really be treated as two separate PRs (although already convoluted)
* balance logic initial commit
* breaking WIP, changing the RPC call logic functions
* will start testing next
* got rid of warnings & lint
* will proceed with subtracting / adding to balance
* added decimal points, balance tracking seems to work
* will beautify code a bit
* removed deprecated dependency, and added topic + deposit contract to app.yaml
* brownie test suite does not rely on local contract files it pulls all from polygonscan
* will continue with referral
* should perhaps (in a future revision) recordhow much the referees got for free. marking referrals seems to work rn
* user is upgraded to premium if they deposit more than 10$. we dont accept more than $10M in a single tx
* will start PR, referral seems to be fine so far, perhaps up to some numbers that still may need tweaking
* will start PR
* removed rogue comments, cleaned up payments a bit
* changes before PR
* apply stats
* added unique constraint
* some refactoring such that the user file is not too bloated
* compiling
* progress with subusers, creating a table entry seems to work
* good response type is there as well now, will work on getters from primary user and secondary user next
* subuser logic also seems fine now
* downgrade logic
* fixed bug influxdb does not support different types in same query (which makes sense)
* WIP temporary commit
* merging with PR
* Delete daemon.rs
there are multiple daemons now, so this was moved to `proxyd`
* will remove request clone to &mut
* multiple request handles for payment
* making requests still seem fine
* removed redundant commented out bits
* added deposit endpoint, added deposit amount and deposit user, untested yet
* small bug with downgrade tier id
* will add authorization so balance can be received for users
* balance history should be set now too
* will check balance over time again
* subususer can see rpc key balance if admin or owner
* stats also seems to work fine now with historical balance
* things seem to be building and working
* removed clone from OpenRequestHandle
* removed influxdb from workspace members
* changed config files
* reran sea-orm generate entities, added a foreign key, should be proper now
* removed contract from commit
* made deposit contract optional
* added topic in polygon dev
* changed deposit contract to deposit factory contract
* added selfrelation on user_tier
* added payment required
* changed chain id to u64
* add wss in polygon llamarpc
* removed origin and method from the table
* added onchain transactions naming (and forgot to add a migration before)
* changed foreign key to be the referrer (id), not the code itself
* forgot to add id as the target foreign key
* WIP adding cache to update role
* fixed merge conflicts
---------
Co-authored-by: Bryan Stitt <bryan@llamanodes.com>
Co-authored-by: Bryan Stitt <bryan@stitthappens.com>
2023-05-12 19:45:15 +03:00
|
|
|
.collect::<HashMap<u64, secondary_user::Model>>();
|
|
|
|
|
|
|
|
// Now return a list of all subusers (their wallets)
|
|
|
|
let rpc_key_entities: Vec<(rpc_key::Model, Option<user::Model>)> = rpc_key::Entity::find()
|
|
|
|
.filter(
|
|
|
|
rpc_key::Column::Id.is_in(
|
|
|
|
secondary_user_entities
|
|
|
|
.iter()
|
|
|
|
.map(|(x, _)| *x)
|
|
|
|
.collect::<Vec<_>>(),
|
|
|
|
),
|
|
|
|
)
|
|
|
|
.find_also_related(user::Entity)
|
|
|
|
.all(db_replica.conn())
|
|
|
|
.await?;
|
|
|
|
|
|
|
|
// TODO: Merge rpc-key with respective user (join is probably easiest ...)
|
|
|
|
|
|
|
|
// Now return the list
|
|
|
|
let response_json = json!({
|
|
|
|
"subuser": format!("{:?}", Address::from_slice(&subuser.address)),
|
|
|
|
"rpc_keys": rpc_key_entities
|
|
|
|
.into_iter()
|
|
|
|
.flat_map(|(rpc_key, rpc_owner)| {
|
|
|
|
match rpc_owner {
|
|
|
|
Some(inner_rpc_owner) => {
|
|
|
|
let mut tmp = HashMap::new();
|
|
|
|
tmp.insert("rpc-key", serde_json::Value::String(Ulid::from(rpc_key.secret_key).to_string()));
|
|
|
|
tmp.insert("rpc-owner", serde_json::Value::String(format!("{:?}", Address::from_slice(&inner_rpc_owner.address))));
|
|
|
|
tmp.insert("role", serde_json::Value::String(format!("{:?}", secondary_user_entities.get(&rpc_key.id).unwrap().role))); // .to_string() returns ugly "'...'"
|
|
|
|
Some(tmp)
|
|
|
|
},
|
|
|
|
None => {
|
|
|
|
// error!("Found RPC secret key with no user!".to_owned());
|
|
|
|
None
|
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|
|
|
|
.collect::<Vec::<_>>(),
|
|
|
|
});
|
|
|
|
|
|
|
|
Ok(Json(response_json).into_response())
|
|
|
|
}
|
|
|
|
|
|
|
|
pub async fn get_subusers(
|
|
|
|
Extension(app): Extension<Arc<Web3ProxyApp>>,
|
|
|
|
TypedHeader(Authorization(bearer)): TypedHeader<Authorization<Bearer>>,
|
|
|
|
Query(mut params): Query<HashMap<String, String>>,
|
|
|
|
) -> Web3ProxyResponse {
|
|
|
|
// First, authenticate
|
|
|
|
let (user, _semaphore) = app.bearer_is_authorized(bearer).await?;
|
|
|
|
|
|
|
|
let db_replica = app
|
|
|
|
.db_replica()
|
|
|
|
.context("getting replica db for user's revert logs")?;
|
|
|
|
|
|
|
|
// Second, check if the user is a premium user
|
|
|
|
let user_tier = user_tier::Entity::find()
|
|
|
|
.filter(user_tier::Column::Id.eq(user.user_tier_id))
|
|
|
|
.one(db_replica.conn())
|
|
|
|
.await?
|
|
|
|
.ok_or(Web3ProxyError::BadRequest(
|
|
|
|
"Could not find user in db although bearer token is there!".to_string(),
|
|
|
|
))?;
|
|
|
|
|
|
|
|
debug!("User tier is: {:?}", user_tier);
|
|
|
|
// TODO: This shouldn't be hardcoded. Also, it should be an enum, not sth like this ...
|
|
|
|
if user_tier.id != 6 {
|
|
|
|
return Err(
|
|
|
|
anyhow::anyhow!("User is not premium. Must be premium to create referrals.").into(),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
let rpc_key: Ulid = params
|
|
|
|
.remove("rpc_key")
|
|
|
|
// TODO: map_err so this becomes a 500. routing must be bad
|
|
|
|
.ok_or(Web3ProxyError::BadRequest(
|
|
|
|
"You have not provided the 'rpc_key' whose access to modify".to_string(),
|
|
|
|
))?
|
|
|
|
.parse()
|
|
|
|
.context(format!("unable to parse rpc_key {:?}", params))?;
|
|
|
|
|
|
|
|
// Get the rpc key id
|
|
|
|
let rpc_key = rpc_key::Entity::find()
|
|
|
|
.filter(rpc_key::Column::SecretKey.eq(Uuid::from(rpc_key)))
|
|
|
|
.one(db_replica.conn())
|
|
|
|
.await?
|
|
|
|
.ok_or(Web3ProxyError::BadRequest(
|
|
|
|
"The provided RPC key cannot be found".to_string(),
|
|
|
|
))?;
|
|
|
|
|
|
|
|
// Get all secondary users that have access to this rpc key
|
|
|
|
let secondary_user_entities = secondary_user::Entity::find()
|
|
|
|
.filter(secondary_user::Column::RpcSecretKeyId.eq(rpc_key.id))
|
|
|
|
.all(db_replica.conn())
|
|
|
|
.await?
|
|
|
|
.into_iter()
|
2023-05-13 01:15:32 +03:00
|
|
|
.map(|x| (x.user_id, x))
|
User Balance + Referral Logic (#44)
* will implement balance topup endpoint
* will quickly fix other PR reviews
* merging from master
* will finish up godmoe
* will finish up login
* added logic to top up balance (first iteration)
* should implement additional columns soon (currency, amount, tx-hash), as well as a new table for spend
* updated migrations, will account for spend next
* get back to this later
* will merge PR from stats-v2
* stats v2
rebased all my commits and squashed them down to one
* cargo upgrade
* added migrtation for spend in accounting table. will run test-deposit next
* trying to get request from polygon
* first iteration /user/balance/:tx_hash works, needs to add accepted tokens next
* creating the referral code seems to work
* will now check if spending enough credits will lead to both parties receiving credits
* rpcstats takes care of accounting for spend data
* removed track spend from table
* Revert "removed track spend from table"
This reverts commit a50802d6ae75f786864c5ec42d0ceb2cb27124ed.
* Revert "rpcstats takes care of accounting for spend data"
This reverts commit 1cec728bf241e4cfd24351134637ed81c1a5a10b.
* removed rpc request table entity
* updated referral code to use ulid s
* credits used are aggregated
* added a bunch of fields to referrer
* added database logic whenever an aggregate stats is added. will have to iterate over this a couple times i think. go to (1) detecting accepted stables next, (2) fix influxdb bug and (3) start to write test
* removed track spend as this will occur in the database
* will first work on "balance", then referral. these should really be treated as two separate PRs (although already convoluted)
* balance logic initial commit
* breaking WIP, changing the RPC call logic functions
* will start testing next
* got rid of warnings & lint
* will proceed with subtracting / adding to balance
* added decimal points, balance tracking seems to work
* will beautify code a bit
* removed deprecated dependency, and added topic + deposit contract to app.yaml
* brownie test suite does not rely on local contract files it pulls all from polygonscan
* will continue with referral
* should perhaps (in a future revision) recordhow much the referees got for free. marking referrals seems to work rn
* user is upgraded to premium if they deposit more than 10$. we dont accept more than $10M in a single tx
* will start PR, referral seems to be fine so far, perhaps up to some numbers that still may need tweaking
* will start PR
* removed rogue comments, cleaned up payments a bit
* changes before PR
* apply stats
* added unique constraint
* some refactoring such that the user file is not too bloated
* compiling
* progress with subusers, creating a table entry seems to work
* good response type is there as well now, will work on getters from primary user and secondary user next
* subuser logic also seems fine now
* downgrade logic
* fixed bug influxdb does not support different types in same query (which makes sense)
* WIP temporary commit
* merging with PR
* Delete daemon.rs
there are multiple daemons now, so this was moved to `proxyd`
* will remove request clone to &mut
* multiple request handles for payment
* making requests still seem fine
* removed redundant commented out bits
* added deposit endpoint, added deposit amount and deposit user, untested yet
* small bug with downgrade tier id
* will add authorization so balance can be received for users
* balance history should be set now too
* will check balance over time again
* subususer can see rpc key balance if admin or owner
* stats also seems to work fine now with historical balance
* things seem to be building and working
* removed clone from OpenRequestHandle
* removed influxdb from workspace members
* changed config files
* reran sea-orm generate entities, added a foreign key, should be proper now
* removed contract from commit
* made deposit contract optional
* added topic in polygon dev
* changed deposit contract to deposit factory contract
* added selfrelation on user_tier
* added payment required
* changed chain id to u64
* add wss in polygon llamarpc
* removed origin and method from the table
* added onchain transactions naming (and forgot to add a migration before)
* changed foreign key to be the referrer (id), not the code itself
* forgot to add id as the target foreign key
* WIP adding cache to update role
* fixed merge conflicts
---------
Co-authored-by: Bryan Stitt <bryan@llamanodes.com>
Co-authored-by: Bryan Stitt <bryan@stitthappens.com>
2023-05-12 19:45:15 +03:00
|
|
|
.collect::<HashMap<u64, secondary_user::Model>>();
|
|
|
|
|
|
|
|
// Now return a list of all subusers (their wallets)
|
|
|
|
let subusers = user::Entity::find()
|
|
|
|
.filter(
|
|
|
|
user::Column::Id.is_in(
|
|
|
|
secondary_user_entities
|
|
|
|
.iter()
|
|
|
|
.map(|(x, _)| *x)
|
|
|
|
.collect::<Vec<_>>(),
|
|
|
|
),
|
|
|
|
)
|
|
|
|
.all(db_replica.conn())
|
|
|
|
.await?;
|
|
|
|
|
|
|
|
warn!("Subusers are: {:?}", subusers);
|
|
|
|
|
|
|
|
// Now return the list
|
|
|
|
let response_json = json!({
|
|
|
|
"caller": format!("{:?}", Address::from_slice(&user.address)),
|
|
|
|
"rpc_key": rpc_key,
|
|
|
|
"subusers": subusers
|
|
|
|
.into_iter()
|
|
|
|
.map(|subuser| {
|
|
|
|
let mut tmp = HashMap::new();
|
|
|
|
// .encode_hex()
|
|
|
|
tmp.insert("address", serde_json::Value::String(format!("{:?}", Address::from_slice(&subuser.address))));
|
|
|
|
tmp.insert("role", serde_json::Value::String(format!("{:?}", secondary_user_entities.get(&subuser.id).unwrap().role)));
|
|
|
|
json!(tmp)
|
|
|
|
})
|
|
|
|
.collect::<Vec::<_>>(),
|
|
|
|
});
|
|
|
|
|
|
|
|
Ok(Json(response_json).into_response())
|
|
|
|
}
|
|
|
|
|
|
|
|
#[debug_handler]
|
|
|
|
pub async fn modify_subuser(
|
|
|
|
Extension(app): Extension<Arc<Web3ProxyApp>>,
|
|
|
|
TypedHeader(Authorization(bearer)): TypedHeader<Authorization<Bearer>>,
|
|
|
|
Query(mut params): Query<HashMap<String, String>>,
|
|
|
|
) -> Web3ProxyResponse {
|
|
|
|
// First, authenticate
|
|
|
|
let (user, _semaphore) = app.bearer_is_authorized(bearer).await?;
|
|
|
|
|
|
|
|
let db_replica = app
|
|
|
|
.db_replica()
|
|
|
|
.context("getting replica db for user's revert logs")?;
|
|
|
|
|
|
|
|
// Second, check if the user is a premium user
|
|
|
|
let user_tier = user_tier::Entity::find()
|
|
|
|
.filter(user_tier::Column::Id.eq(user.user_tier_id))
|
|
|
|
.one(db_replica.conn())
|
|
|
|
.await?
|
|
|
|
.ok_or(Web3ProxyError::BadRequest(
|
|
|
|
"Could not find user in db although bearer token is there!".to_string(),
|
|
|
|
))?;
|
|
|
|
|
|
|
|
debug!("User tier is: {:?}", user_tier);
|
|
|
|
// TODO: This shouldn't be hardcoded. Also, it should be an enum, not sth like this ...
|
|
|
|
if user_tier.id != 6 {
|
|
|
|
return Err(
|
|
|
|
anyhow::anyhow!("User is not premium. Must be premium to create referrals.").into(),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
warn!("Parameters are: {:?}", params);
|
|
|
|
|
|
|
|
// Then, distinguish the endpoint to modify
|
|
|
|
let rpc_key_to_modify: Ulid = params
|
|
|
|
.remove("rpc_key")
|
|
|
|
// TODO: map_err so this becomes a 500. routing must be bad
|
|
|
|
.ok_or(Web3ProxyError::BadRequest(
|
|
|
|
"You have not provided the 'rpc_key' whose access to modify".to_string(),
|
|
|
|
))?
|
|
|
|
.parse::<Ulid>()
|
|
|
|
.context(format!("unable to parse rpc_key {:?}", params))?;
|
|
|
|
// let rpc_key_to_modify: Uuid = ulid::serde::ulid_as_uuid::deserialize(rpc_key_to_modify)?;
|
|
|
|
|
|
|
|
let subuser_address: Address = params
|
|
|
|
.remove("subuser_address")
|
|
|
|
// TODO: map_err so this becomes a 500. routing must be bad
|
|
|
|
.ok_or(Web3ProxyError::BadRequest(
|
|
|
|
"You have not provided the 'user_address' whose access to modify".to_string(),
|
|
|
|
))?
|
|
|
|
.parse()
|
|
|
|
.context(format!("unable to parse subuser_address {:?}", params))?;
|
|
|
|
|
|
|
|
// TODO: Check subuser address for eip55 checksum
|
|
|
|
|
|
|
|
let keep_subuser: bool = match params
|
|
|
|
.remove("new_status")
|
|
|
|
// TODO: map_err so this becomes a 500. routing must be bad
|
|
|
|
.ok_or(Web3ProxyError::BadRequest(
|
|
|
|
"You have not provided the new_stats key in the request".to_string(),
|
|
|
|
))?
|
|
|
|
.as_str()
|
|
|
|
{
|
|
|
|
"upsert" => Ok(true),
|
|
|
|
"remove" => Ok(false),
|
|
|
|
_ => Err(Web3ProxyError::BadRequest(
|
|
|
|
"'new_status' must be one of 'upsert' or 'remove'".to_string(),
|
|
|
|
)),
|
|
|
|
}?;
|
|
|
|
|
|
|
|
let new_role: Role = match params
|
|
|
|
.remove("new_role")
|
|
|
|
// TODO: map_err so this becomes a 500. routing must be bad
|
|
|
|
.ok_or(Web3ProxyError::BadRequest(
|
|
|
|
"You have not provided the new_stats key in the request".to_string(),
|
|
|
|
))?
|
|
|
|
.as_str()
|
|
|
|
{
|
|
|
|
// TODO: Technically, if this is the new owner, we should transpose the full table.
|
|
|
|
// For now, let's just not allow the primary owner to just delete his account
|
|
|
|
// (if there is even such a functionality)
|
|
|
|
"owner" => Ok(Role::Owner),
|
|
|
|
"admin" => Ok(Role::Admin),
|
|
|
|
"collaborator" => Ok(Role::Collaborator),
|
|
|
|
_ => Err(Web3ProxyError::BadRequest(
|
|
|
|
"'new_role' must be one of 'owner', 'admin', 'collaborator'".to_string(),
|
|
|
|
)),
|
|
|
|
}?;
|
|
|
|
|
|
|
|
// ---------------------------
|
|
|
|
// First, check if the user exists as a user. If not, add them
|
|
|
|
// (and also create a balance, and rpc_key, same procedure as logging in for first time)
|
|
|
|
// ---------------------------
|
|
|
|
let subuser = user::Entity::find()
|
|
|
|
.filter(user::Column::Address.eq(subuser_address.as_ref()))
|
|
|
|
.one(db_replica.conn())
|
|
|
|
.await?;
|
|
|
|
|
|
|
|
let rpc_key_entity = rpc_key::Entity::find()
|
|
|
|
.filter(rpc_key::Column::SecretKey.eq(Uuid::from(rpc_key_to_modify)))
|
|
|
|
.one(db_replica.conn())
|
|
|
|
.await?
|
|
|
|
.ok_or(Web3ProxyError::BadRequest(
|
|
|
|
"Provided RPC key does not exist!".to_owned(),
|
|
|
|
))?;
|
|
|
|
|
|
|
|
// Make sure that the user owns the rpc_key_entity
|
|
|
|
if rpc_key_entity.user_id != user.id {
|
|
|
|
return Err(Web3ProxyError::BadRequest(
|
|
|
|
"you must own the RPC for which you are giving permissions out".to_string(),
|
|
|
|
));
|
|
|
|
}
|
|
|
|
|
|
|
|
// TODO: There is a good chunk of duplicate logic as login-post. Consider refactoring ...
|
|
|
|
let db_conn = app.db_conn().web3_context("login requires a db")?;
|
|
|
|
let (subuser, _subuser_rpc_keys, _status_code) = match subuser {
|
|
|
|
None => {
|
|
|
|
let txn = db_conn.begin().await?;
|
|
|
|
// First add a user; the only thing we need from them is an address
|
|
|
|
// everything else is optional
|
|
|
|
let subuser = user::ActiveModel {
|
|
|
|
address: sea_orm::Set(subuser_address.to_fixed_bytes().into()), // Address::from_slice(
|
|
|
|
..Default::default()
|
|
|
|
};
|
|
|
|
|
|
|
|
let subuser = subuser.insert(&txn).await?;
|
|
|
|
|
|
|
|
// create the user's first api key
|
|
|
|
let rpc_secret_key = RpcSecretKey::new();
|
|
|
|
|
|
|
|
let subuser_rpc_key = rpc_key::ActiveModel {
|
2023-05-13 01:15:32 +03:00
|
|
|
user_id: sea_orm::Set(subuser.id),
|
User Balance + Referral Logic (#44)
* will implement balance topup endpoint
* will quickly fix other PR reviews
* merging from master
* will finish up godmoe
* will finish up login
* added logic to top up balance (first iteration)
* should implement additional columns soon (currency, amount, tx-hash), as well as a new table for spend
* updated migrations, will account for spend next
* get back to this later
* will merge PR from stats-v2
* stats v2
rebased all my commits and squashed them down to one
* cargo upgrade
* added migrtation for spend in accounting table. will run test-deposit next
* trying to get request from polygon
* first iteration /user/balance/:tx_hash works, needs to add accepted tokens next
* creating the referral code seems to work
* will now check if spending enough credits will lead to both parties receiving credits
* rpcstats takes care of accounting for spend data
* removed track spend from table
* Revert "removed track spend from table"
This reverts commit a50802d6ae75f786864c5ec42d0ceb2cb27124ed.
* Revert "rpcstats takes care of accounting for spend data"
This reverts commit 1cec728bf241e4cfd24351134637ed81c1a5a10b.
* removed rpc request table entity
* updated referral code to use ulid s
* credits used are aggregated
* added a bunch of fields to referrer
* added database logic whenever an aggregate stats is added. will have to iterate over this a couple times i think. go to (1) detecting accepted stables next, (2) fix influxdb bug and (3) start to write test
* removed track spend as this will occur in the database
* will first work on "balance", then referral. these should really be treated as two separate PRs (although already convoluted)
* balance logic initial commit
* breaking WIP, changing the RPC call logic functions
* will start testing next
* got rid of warnings & lint
* will proceed with subtracting / adding to balance
* added decimal points, balance tracking seems to work
* will beautify code a bit
* removed deprecated dependency, and added topic + deposit contract to app.yaml
* brownie test suite does not rely on local contract files it pulls all from polygonscan
* will continue with referral
* should perhaps (in a future revision) recordhow much the referees got for free. marking referrals seems to work rn
* user is upgraded to premium if they deposit more than 10$. we dont accept more than $10M in a single tx
* will start PR, referral seems to be fine so far, perhaps up to some numbers that still may need tweaking
* will start PR
* removed rogue comments, cleaned up payments a bit
* changes before PR
* apply stats
* added unique constraint
* some refactoring such that the user file is not too bloated
* compiling
* progress with subusers, creating a table entry seems to work
* good response type is there as well now, will work on getters from primary user and secondary user next
* subuser logic also seems fine now
* downgrade logic
* fixed bug influxdb does not support different types in same query (which makes sense)
* WIP temporary commit
* merging with PR
* Delete daemon.rs
there are multiple daemons now, so this was moved to `proxyd`
* will remove request clone to &mut
* multiple request handles for payment
* making requests still seem fine
* removed redundant commented out bits
* added deposit endpoint, added deposit amount and deposit user, untested yet
* small bug with downgrade tier id
* will add authorization so balance can be received for users
* balance history should be set now too
* will check balance over time again
* subususer can see rpc key balance if admin or owner
* stats also seems to work fine now with historical balance
* things seem to be building and working
* removed clone from OpenRequestHandle
* removed influxdb from workspace members
* changed config files
* reran sea-orm generate entities, added a foreign key, should be proper now
* removed contract from commit
* made deposit contract optional
* added topic in polygon dev
* changed deposit contract to deposit factory contract
* added selfrelation on user_tier
* added payment required
* changed chain id to u64
* add wss in polygon llamarpc
* removed origin and method from the table
* added onchain transactions naming (and forgot to add a migration before)
* changed foreign key to be the referrer (id), not the code itself
* forgot to add id as the target foreign key
* WIP adding cache to update role
* fixed merge conflicts
---------
Co-authored-by: Bryan Stitt <bryan@llamanodes.com>
Co-authored-by: Bryan Stitt <bryan@stitthappens.com>
2023-05-12 19:45:15 +03:00
|
|
|
secret_key: sea_orm::Set(rpc_secret_key.into()),
|
|
|
|
description: sea_orm::Set(None),
|
|
|
|
..Default::default()
|
|
|
|
};
|
|
|
|
|
|
|
|
let subuser_rpc_keys = vec![subuser_rpc_key
|
|
|
|
.insert(&txn)
|
|
|
|
.await
|
|
|
|
.web3_context("Failed saving new user key")?];
|
|
|
|
|
|
|
|
// We should also create the balance entry ...
|
|
|
|
let subuser_balance = balance::ActiveModel {
|
2023-05-13 01:15:32 +03:00
|
|
|
user_id: sea_orm::Set(subuser.id),
|
User Balance + Referral Logic (#44)
* will implement balance topup endpoint
* will quickly fix other PR reviews
* merging from master
* will finish up godmoe
* will finish up login
* added logic to top up balance (first iteration)
* should implement additional columns soon (currency, amount, tx-hash), as well as a new table for spend
* updated migrations, will account for spend next
* get back to this later
* will merge PR from stats-v2
* stats v2
rebased all my commits and squashed them down to one
* cargo upgrade
* added migrtation for spend in accounting table. will run test-deposit next
* trying to get request from polygon
* first iteration /user/balance/:tx_hash works, needs to add accepted tokens next
* creating the referral code seems to work
* will now check if spending enough credits will lead to both parties receiving credits
* rpcstats takes care of accounting for spend data
* removed track spend from table
* Revert "removed track spend from table"
This reverts commit a50802d6ae75f786864c5ec42d0ceb2cb27124ed.
* Revert "rpcstats takes care of accounting for spend data"
This reverts commit 1cec728bf241e4cfd24351134637ed81c1a5a10b.
* removed rpc request table entity
* updated referral code to use ulid s
* credits used are aggregated
* added a bunch of fields to referrer
* added database logic whenever an aggregate stats is added. will have to iterate over this a couple times i think. go to (1) detecting accepted stables next, (2) fix influxdb bug and (3) start to write test
* removed track spend as this will occur in the database
* will first work on "balance", then referral. these should really be treated as two separate PRs (although already convoluted)
* balance logic initial commit
* breaking WIP, changing the RPC call logic functions
* will start testing next
* got rid of warnings & lint
* will proceed with subtracting / adding to balance
* added decimal points, balance tracking seems to work
* will beautify code a bit
* removed deprecated dependency, and added topic + deposit contract to app.yaml
* brownie test suite does not rely on local contract files it pulls all from polygonscan
* will continue with referral
* should perhaps (in a future revision) recordhow much the referees got for free. marking referrals seems to work rn
* user is upgraded to premium if they deposit more than 10$. we dont accept more than $10M in a single tx
* will start PR, referral seems to be fine so far, perhaps up to some numbers that still may need tweaking
* will start PR
* removed rogue comments, cleaned up payments a bit
* changes before PR
* apply stats
* added unique constraint
* some refactoring such that the user file is not too bloated
* compiling
* progress with subusers, creating a table entry seems to work
* good response type is there as well now, will work on getters from primary user and secondary user next
* subuser logic also seems fine now
* downgrade logic
* fixed bug influxdb does not support different types in same query (which makes sense)
* WIP temporary commit
* merging with PR
* Delete daemon.rs
there are multiple daemons now, so this was moved to `proxyd`
* will remove request clone to &mut
* multiple request handles for payment
* making requests still seem fine
* removed redundant commented out bits
* added deposit endpoint, added deposit amount and deposit user, untested yet
* small bug with downgrade tier id
* will add authorization so balance can be received for users
* balance history should be set now too
* will check balance over time again
* subususer can see rpc key balance if admin or owner
* stats also seems to work fine now with historical balance
* things seem to be building and working
* removed clone from OpenRequestHandle
* removed influxdb from workspace members
* changed config files
* reran sea-orm generate entities, added a foreign key, should be proper now
* removed contract from commit
* made deposit contract optional
* added topic in polygon dev
* changed deposit contract to deposit factory contract
* added selfrelation on user_tier
* added payment required
* changed chain id to u64
* add wss in polygon llamarpc
* removed origin and method from the table
* added onchain transactions naming (and forgot to add a migration before)
* changed foreign key to be the referrer (id), not the code itself
* forgot to add id as the target foreign key
* WIP adding cache to update role
* fixed merge conflicts
---------
Co-authored-by: Bryan Stitt <bryan@llamanodes.com>
Co-authored-by: Bryan Stitt <bryan@stitthappens.com>
2023-05-12 19:45:15 +03:00
|
|
|
available_balance: sea_orm::Set(Decimal::new(0, 0)),
|
|
|
|
used_balance: sea_orm::Set(Decimal::new(0, 0)),
|
|
|
|
..Default::default()
|
|
|
|
};
|
|
|
|
subuser_balance.insert(&txn).await?;
|
|
|
|
// save the user and key to the database
|
|
|
|
txn.commit().await?;
|
|
|
|
|
|
|
|
(subuser, subuser_rpc_keys, StatusCode::CREATED)
|
|
|
|
}
|
|
|
|
Some(subuser) => {
|
|
|
|
if subuser.id == user.id {
|
|
|
|
return Err(Web3ProxyError::BadRequest(
|
|
|
|
"you cannot make a subuser out of yourself".to_string(),
|
|
|
|
));
|
|
|
|
}
|
|
|
|
|
|
|
|
// Let's say that a user that exists can actually also redeem a key in retrospect...
|
|
|
|
// the user is already registered
|
|
|
|
let subuser_rpc_keys = rpc_key::Entity::find()
|
|
|
|
.filter(rpc_key::Column::UserId.eq(subuser.id))
|
|
|
|
.all(db_replica.conn())
|
|
|
|
.await
|
|
|
|
.web3_context("failed loading user's key")?;
|
|
|
|
|
|
|
|
(subuser, subuser_rpc_keys, StatusCode::OK)
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
// --------------------------------
|
|
|
|
// Now apply the operation
|
|
|
|
// Either add the subuser
|
|
|
|
// Or revoke his subuser status
|
|
|
|
// --------------------------------
|
|
|
|
|
|
|
|
// Search for subuser first of all
|
|
|
|
// There should be a unique-constraint on user-id + rpc_key
|
|
|
|
let subuser_entry_secondary_user = secondary_user::Entity::find()
|
|
|
|
.filter(secondary_user::Column::UserId.eq(subuser.id))
|
|
|
|
.filter(secondary_user::Column::RpcSecretKeyId.eq(rpc_key_entity.id))
|
|
|
|
.one(db_replica.conn())
|
|
|
|
.await
|
|
|
|
.web3_context("failed using the db to check for a subuser")?;
|
|
|
|
|
|
|
|
let txn = db_conn.begin().await?;
|
|
|
|
let mut action = "no action";
|
2023-05-13 01:15:32 +03:00
|
|
|
|
|
|
|
match subuser_entry_secondary_user {
|
User Balance + Referral Logic (#44)
* will implement balance topup endpoint
* will quickly fix other PR reviews
* merging from master
* will finish up godmoe
* will finish up login
* added logic to top up balance (first iteration)
* should implement additional columns soon (currency, amount, tx-hash), as well as a new table for spend
* updated migrations, will account for spend next
* get back to this later
* will merge PR from stats-v2
* stats v2
rebased all my commits and squashed them down to one
* cargo upgrade
* added migrtation for spend in accounting table. will run test-deposit next
* trying to get request from polygon
* first iteration /user/balance/:tx_hash works, needs to add accepted tokens next
* creating the referral code seems to work
* will now check if spending enough credits will lead to both parties receiving credits
* rpcstats takes care of accounting for spend data
* removed track spend from table
* Revert "removed track spend from table"
This reverts commit a50802d6ae75f786864c5ec42d0ceb2cb27124ed.
* Revert "rpcstats takes care of accounting for spend data"
This reverts commit 1cec728bf241e4cfd24351134637ed81c1a5a10b.
* removed rpc request table entity
* updated referral code to use ulid s
* credits used are aggregated
* added a bunch of fields to referrer
* added database logic whenever an aggregate stats is added. will have to iterate over this a couple times i think. go to (1) detecting accepted stables next, (2) fix influxdb bug and (3) start to write test
* removed track spend as this will occur in the database
* will first work on "balance", then referral. these should really be treated as two separate PRs (although already convoluted)
* balance logic initial commit
* breaking WIP, changing the RPC call logic functions
* will start testing next
* got rid of warnings & lint
* will proceed with subtracting / adding to balance
* added decimal points, balance tracking seems to work
* will beautify code a bit
* removed deprecated dependency, and added topic + deposit contract to app.yaml
* brownie test suite does not rely on local contract files it pulls all from polygonscan
* will continue with referral
* should perhaps (in a future revision) recordhow much the referees got for free. marking referrals seems to work rn
* user is upgraded to premium if they deposit more than 10$. we dont accept more than $10M in a single tx
* will start PR, referral seems to be fine so far, perhaps up to some numbers that still may need tweaking
* will start PR
* removed rogue comments, cleaned up payments a bit
* changes before PR
* apply stats
* added unique constraint
* some refactoring such that the user file is not too bloated
* compiling
* progress with subusers, creating a table entry seems to work
* good response type is there as well now, will work on getters from primary user and secondary user next
* subuser logic also seems fine now
* downgrade logic
* fixed bug influxdb does not support different types in same query (which makes sense)
* WIP temporary commit
* merging with PR
* Delete daemon.rs
there are multiple daemons now, so this was moved to `proxyd`
* will remove request clone to &mut
* multiple request handles for payment
* making requests still seem fine
* removed redundant commented out bits
* added deposit endpoint, added deposit amount and deposit user, untested yet
* small bug with downgrade tier id
* will add authorization so balance can be received for users
* balance history should be set now too
* will check balance over time again
* subususer can see rpc key balance if admin or owner
* stats also seems to work fine now with historical balance
* things seem to be building and working
* removed clone from OpenRequestHandle
* removed influxdb from workspace members
* changed config files
* reran sea-orm generate entities, added a foreign key, should be proper now
* removed contract from commit
* made deposit contract optional
* added topic in polygon dev
* changed deposit contract to deposit factory contract
* added selfrelation on user_tier
* added payment required
* changed chain id to u64
* add wss in polygon llamarpc
* removed origin and method from the table
* added onchain transactions naming (and forgot to add a migration before)
* changed foreign key to be the referrer (id), not the code itself
* forgot to add id as the target foreign key
* WIP adding cache to update role
* fixed merge conflicts
---------
Co-authored-by: Bryan Stitt <bryan@llamanodes.com>
Co-authored-by: Bryan Stitt <bryan@stitthappens.com>
2023-05-12 19:45:15 +03:00
|
|
|
Some(secondary_user) => {
|
|
|
|
// In this case, remove the subuser
|
|
|
|
let mut active_subuser_entry_secondary_user = secondary_user.into_active_model();
|
|
|
|
if !keep_subuser {
|
|
|
|
// Remove the user
|
|
|
|
active_subuser_entry_secondary_user.delete(&db_conn).await?;
|
|
|
|
action = "removed";
|
|
|
|
} else {
|
|
|
|
// Just change the role
|
|
|
|
active_subuser_entry_secondary_user.role = sea_orm::Set(new_role.clone());
|
|
|
|
active_subuser_entry_secondary_user.save(&db_conn).await?;
|
|
|
|
action = "role modified";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
None if keep_subuser => {
|
|
|
|
let active_subuser_entry_secondary_user = secondary_user::ActiveModel {
|
|
|
|
user_id: sea_orm::Set(subuser.id),
|
|
|
|
rpc_secret_key_id: sea_orm::Set(rpc_key_entity.id),
|
|
|
|
role: sea_orm::Set(new_role.clone()),
|
|
|
|
..Default::default()
|
|
|
|
};
|
|
|
|
active_subuser_entry_secondary_user.insert(&txn).await?;
|
|
|
|
action = "added";
|
|
|
|
}
|
|
|
|
_ => {
|
|
|
|
// Return if the user should be removed and if there is no entry;
|
|
|
|
// in this case, the user is not entered
|
|
|
|
|
|
|
|
// Return if the user should be added and there is already an entry;
|
|
|
|
// in this case, they were already added, so we can skip this
|
|
|
|
// Do nothing in this case
|
|
|
|
}
|
|
|
|
};
|
|
|
|
txn.commit().await?;
|
|
|
|
|
|
|
|
let response = (
|
|
|
|
StatusCode::OK,
|
|
|
|
Json(json!({
|
|
|
|
"rpc_key": rpc_key_to_modify,
|
|
|
|
"subuser_address": subuser_address,
|
|
|
|
"keep_user": keep_subuser,
|
|
|
|
"new_role": new_role,
|
|
|
|
"action": action
|
|
|
|
})),
|
|
|
|
)
|
|
|
|
.into_response();
|
2023-05-13 01:15:32 +03:00
|
|
|
|
User Balance + Referral Logic (#44)
* will implement balance topup endpoint
* will quickly fix other PR reviews
* merging from master
* will finish up godmoe
* will finish up login
* added logic to top up balance (first iteration)
* should implement additional columns soon (currency, amount, tx-hash), as well as a new table for spend
* updated migrations, will account for spend next
* get back to this later
* will merge PR from stats-v2
* stats v2
rebased all my commits and squashed them down to one
* cargo upgrade
* added migrtation for spend in accounting table. will run test-deposit next
* trying to get request from polygon
* first iteration /user/balance/:tx_hash works, needs to add accepted tokens next
* creating the referral code seems to work
* will now check if spending enough credits will lead to both parties receiving credits
* rpcstats takes care of accounting for spend data
* removed track spend from table
* Revert "removed track spend from table"
This reverts commit a50802d6ae75f786864c5ec42d0ceb2cb27124ed.
* Revert "rpcstats takes care of accounting for spend data"
This reverts commit 1cec728bf241e4cfd24351134637ed81c1a5a10b.
* removed rpc request table entity
* updated referral code to use ulid s
* credits used are aggregated
* added a bunch of fields to referrer
* added database logic whenever an aggregate stats is added. will have to iterate over this a couple times i think. go to (1) detecting accepted stables next, (2) fix influxdb bug and (3) start to write test
* removed track spend as this will occur in the database
* will first work on "balance", then referral. these should really be treated as two separate PRs (although already convoluted)
* balance logic initial commit
* breaking WIP, changing the RPC call logic functions
* will start testing next
* got rid of warnings & lint
* will proceed with subtracting / adding to balance
* added decimal points, balance tracking seems to work
* will beautify code a bit
* removed deprecated dependency, and added topic + deposit contract to app.yaml
* brownie test suite does not rely on local contract files it pulls all from polygonscan
* will continue with referral
* should perhaps (in a future revision) recordhow much the referees got for free. marking referrals seems to work rn
* user is upgraded to premium if they deposit more than 10$. we dont accept more than $10M in a single tx
* will start PR, referral seems to be fine so far, perhaps up to some numbers that still may need tweaking
* will start PR
* removed rogue comments, cleaned up payments a bit
* changes before PR
* apply stats
* added unique constraint
* some refactoring such that the user file is not too bloated
* compiling
* progress with subusers, creating a table entry seems to work
* good response type is there as well now, will work on getters from primary user and secondary user next
* subuser logic also seems fine now
* downgrade logic
* fixed bug influxdb does not support different types in same query (which makes sense)
* WIP temporary commit
* merging with PR
* Delete daemon.rs
there are multiple daemons now, so this was moved to `proxyd`
* will remove request clone to &mut
* multiple request handles for payment
* making requests still seem fine
* removed redundant commented out bits
* added deposit endpoint, added deposit amount and deposit user, untested yet
* small bug with downgrade tier id
* will add authorization so balance can be received for users
* balance history should be set now too
* will check balance over time again
* subususer can see rpc key balance if admin or owner
* stats also seems to work fine now with historical balance
* things seem to be building and working
* removed clone from OpenRequestHandle
* removed influxdb from workspace members
* changed config files
* reran sea-orm generate entities, added a foreign key, should be proper now
* removed contract from commit
* made deposit contract optional
* added topic in polygon dev
* changed deposit contract to deposit factory contract
* added selfrelation on user_tier
* added payment required
* changed chain id to u64
* add wss in polygon llamarpc
* removed origin and method from the table
* added onchain transactions naming (and forgot to add a migration before)
* changed foreign key to be the referrer (id), not the code itself
* forgot to add id as the target foreign key
* WIP adding cache to update role
* fixed merge conflicts
---------
Co-authored-by: Bryan Stitt <bryan@llamanodes.com>
Co-authored-by: Bryan Stitt <bryan@stitthappens.com>
2023-05-12 19:45:15 +03:00
|
|
|
// Return early if the log was added, assume there is at most one valid log per transaction
|
2023-05-13 01:15:32 +03:00
|
|
|
Ok(response)
|
User Balance + Referral Logic (#44)
* will implement balance topup endpoint
* will quickly fix other PR reviews
* merging from master
* will finish up godmoe
* will finish up login
* added logic to top up balance (first iteration)
* should implement additional columns soon (currency, amount, tx-hash), as well as a new table for spend
* updated migrations, will account for spend next
* get back to this later
* will merge PR from stats-v2
* stats v2
rebased all my commits and squashed them down to one
* cargo upgrade
* added migrtation for spend in accounting table. will run test-deposit next
* trying to get request from polygon
* first iteration /user/balance/:tx_hash works, needs to add accepted tokens next
* creating the referral code seems to work
* will now check if spending enough credits will lead to both parties receiving credits
* rpcstats takes care of accounting for spend data
* removed track spend from table
* Revert "removed track spend from table"
This reverts commit a50802d6ae75f786864c5ec42d0ceb2cb27124ed.
* Revert "rpcstats takes care of accounting for spend data"
This reverts commit 1cec728bf241e4cfd24351134637ed81c1a5a10b.
* removed rpc request table entity
* updated referral code to use ulid s
* credits used are aggregated
* added a bunch of fields to referrer
* added database logic whenever an aggregate stats is added. will have to iterate over this a couple times i think. go to (1) detecting accepted stables next, (2) fix influxdb bug and (3) start to write test
* removed track spend as this will occur in the database
* will first work on "balance", then referral. these should really be treated as two separate PRs (although already convoluted)
* balance logic initial commit
* breaking WIP, changing the RPC call logic functions
* will start testing next
* got rid of warnings & lint
* will proceed with subtracting / adding to balance
* added decimal points, balance tracking seems to work
* will beautify code a bit
* removed deprecated dependency, and added topic + deposit contract to app.yaml
* brownie test suite does not rely on local contract files it pulls all from polygonscan
* will continue with referral
* should perhaps (in a future revision) recordhow much the referees got for free. marking referrals seems to work rn
* user is upgraded to premium if they deposit more than 10$. we dont accept more than $10M in a single tx
* will start PR, referral seems to be fine so far, perhaps up to some numbers that still may need tweaking
* will start PR
* removed rogue comments, cleaned up payments a bit
* changes before PR
* apply stats
* added unique constraint
* some refactoring such that the user file is not too bloated
* compiling
* progress with subusers, creating a table entry seems to work
* good response type is there as well now, will work on getters from primary user and secondary user next
* subuser logic also seems fine now
* downgrade logic
* fixed bug influxdb does not support different types in same query (which makes sense)
* WIP temporary commit
* merging with PR
* Delete daemon.rs
there are multiple daemons now, so this was moved to `proxyd`
* will remove request clone to &mut
* multiple request handles for payment
* making requests still seem fine
* removed redundant commented out bits
* added deposit endpoint, added deposit amount and deposit user, untested yet
* small bug with downgrade tier id
* will add authorization so balance can be received for users
* balance history should be set now too
* will check balance over time again
* subususer can see rpc key balance if admin or owner
* stats also seems to work fine now with historical balance
* things seem to be building and working
* removed clone from OpenRequestHandle
* removed influxdb from workspace members
* changed config files
* reran sea-orm generate entities, added a foreign key, should be proper now
* removed contract from commit
* made deposit contract optional
* added topic in polygon dev
* changed deposit contract to deposit factory contract
* added selfrelation on user_tier
* added payment required
* changed chain id to u64
* add wss in polygon llamarpc
* removed origin and method from the table
* added onchain transactions naming (and forgot to add a migration before)
* changed foreign key to be the referrer (id), not the code itself
* forgot to add id as the target foreign key
* WIP adding cache to update role
* fixed merge conflicts
---------
Co-authored-by: Bryan Stitt <bryan@llamanodes.com>
Co-authored-by: Bryan Stitt <bryan@stitthappens.com>
2023-05-12 19:45:15 +03:00
|
|
|
}
|