Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Vault/allow multiple currency #76

Merged
merged 54 commits into from
Nov 11, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
0118e0e
add bid denom check
sontrinh16 Oct 31, 2024
06c7be0
allow multiple stable coin denom
vuong177 Oct 31, 2024
7f62acd
allow multiple mint denom in vault
vuong177 Oct 31, 2024
4536c35
update liquidate logic
vuong177 Oct 31, 2024
7ce2dc8
psm keeper should use const from psm types
vuong177 Oct 31, 2024
d981cba
cancel bid in bidbyaddress
sontrinh16 Nov 1, 2024
9b77243
add query bidder bids
sontrinh16 Nov 1, 2024
245e106
refactor testcase
vuong177 Nov 1, 2024
b3b0f50
Merge branch 'vault/allow-multiple-currency' into son/auction_multipl…
vuong177 Nov 1, 2024
c8713de
Merge pull request #71 from onomyprotocol/son/auction_multiple_stable
vuong177 Nov 1, 2024
1ee268b
nit
vuong177 Nov 1, 2024
4ce4b30
Merge branch 'main' into vault/allow-multiple-currency
vuong177 Nov 4, 2024
bd16083
nits
vuong177 Nov 4, 2024
13f43de
import nit
vuong177 Nov 4, 2024
7df5199
proto
DongLieu Nov 4, 2024
8391e3d
nits
DongLieu Nov 4, 2024
1e740ff
add Noms for genesis
DongLieu Nov 4, 2024
b8a84b4
add Nom types for msg gov
DongLieu Nov 4, 2024
32d9fdb
updates msg server and test full script
DongLieu Nov 4, 2024
eba4c8f
updates script and fix test pass ci
DongLieu Nov 4, 2024
abd2daa
updates tests and rename msg
DongLieu Nov 4, 2024
17404ce
nits
DongLieu Nov 4, 2024
fb8ec9e
minor
DongLieu Nov 4, 2024
175dcf7
rename and update scipt psm
DongLieu Nov 4, 2024
2c6e0f9
use collections
DongLieu Nov 5, 2024
474bc3c
lint
DongLieu Nov 5, 2024
97faecd
Merge pull request #80 from onomyprotocol/dong/LastestAuctionPeriods
DongLieu Nov 5, 2024
63b0f5c
fix abci aution
DongLieu Nov 5, 2024
3c0516d
check denom
DongLieu Nov 5, 2024
799bfa1
nits
vuong177 Nov 6, 2024
d82580e
check vault owner when mint coin
vuong177 Nov 6, 2024
117aaf0
Merge pull request #81 from onomyprotocol/dong/fix-abci
vuong177 Nov 6, 2024
da16681
test beginblocker for vaults
DongLieu Nov 6, 2024
fc5d3e4
add beginblocker vaults module
DongLieu Nov 7, 2024
b690dd9
Merge pull request #82 from onomyprotocol/dong/add-test-vaults-abci
DongLieu Nov 7, 2024
765d1a9
Merge pull request #84 from onomyprotocol/dong/add-beginblocker-vaults
DongLieu Nov 7, 2024
16835b5
add validate StabilityFee
DongLieu Nov 7, 2024
d19c303
minor
DongLieu Nov 7, 2024
10140e7
Merge pull request #85 from onomyprotocol/dong/validate-msg-vaults
DongLieu Nov 7, 2024
cc1924a
minor
DongLieu Nov 7, 2024
7156e46
Merge pull request #86 from onomyprotocol/dong/minor
DongLieu Nov 7, 2024
41e3d7f
Merge remote-tracking branch 'origin/main' into vault/allow-multiple-…
vuong177 Nov 8, 2024
efff475
check status
DongLieu Nov 8, 2024
b49d729
Merge pull request #88 from onomyprotocol/dong/checkStatus
DongLieu Nov 8, 2024
b048910
refactor swap msg
vuong177 Nov 8, 2024
4f09b4e
rename
DongLieu Nov 8, 2024
04cd748
updates
DongLieu Nov 8, 2024
1eb130a
remove noms
DongLieu Nov 8, 2024
ed66585
oracle script
DongLieu Nov 8, 2024
86bd072
updates file proposal psm
DongLieu Nov 8, 2024
d89cee4
nits
DongLieu Nov 8, 2024
02856bd
fix test pass ci
DongLieu Nov 8, 2024
038f33b
update spec psm
DongLieu Nov 8, 2024
8029fcc
Merge pull request #78 from onomyprotocol/psm/allow-multiple-currency
vuong177 Nov 10, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions proto/reserve/auction/v1/auction.proto
Original file line number Diff line number Diff line change
Expand Up @@ -88,11 +88,11 @@ message BidQueue {
uint64 auction_id = 1;

// array of bid entries with bidder address
repeated Bid bids = 2;
repeated Bid bids = 2 [ (gogoproto.nullable) = false, (amino.dont_omitempty) = true ];
}

// Bids defines a list of bid entries
message Bids {
// array of bid entries with bidder address
repeated Bid bids = 1;
repeated Bid bids = 1 [ (gogoproto.nullable) = false, (amino.dont_omitempty) = true ];
}
17 changes: 16 additions & 1 deletion proto/reserve/auction/v1/query.proto
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,11 @@ service Query {
}

rpc QueryAllBids(QueryAllBidsRequest) returns (QueryAllBidsResponse){
option (google.api.http).get = "/reserve/auction/auction";
option (google.api.http).get = "/reserve/auction/bids";
}

rpc QueryAllBidderBids(QueryAllBidderBidsRequest) returns (QueryAllBidderBidsResponse){
option (google.api.http).get = "/reserve/auction/bids/{bidder}";
}
}

Expand Down Expand Up @@ -52,4 +56,15 @@ message QueryAllBidsResponse {
// params holds all the parameters of this module.
repeated Bid Bids = 1
[ (gogoproto.nullable) = false, (amino.dont_omitempty) = true ];
}

message QueryAllBidderBidsRequest {
string bidder = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"];
uint64 auction_id = 2;
}

message QueryAllBidderBidsResponse {
// params holds all the parameters of this module.
repeated Bid Bids = 1
[ (gogoproto.nullable) = false, (amino.dont_omitempty) = true ];
}
2 changes: 1 addition & 1 deletion proto/reserve/psm/v1/genesis.proto
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,6 @@ message GenesisState {
(amino.dont_omitempty) = true
];

repeated Stablecoin stablecoins = 2
repeated StablecoinInfo stablecoins = 2
[ (gogoproto.nullable) = false, (amino.dont_omitempty) = true ];
}
2 changes: 1 addition & 1 deletion proto/reserve/psm/v1/params.proto
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import "cosmos_proto/cosmos.proto";
option go_package = "github.com/onomyprotocol/reserve/x/psm/types";

message Params {
// total $nomUSD can mint
// total $nomX can mint
bytes limit_total = 1 [
(cosmos_proto.scalar) = "cosmos.Int",
(gogoproto.customtype) = "cosmossdk.io/math.Int",
Expand Down
8 changes: 4 additions & 4 deletions proto/reserve/psm/v1/psm.proto
Original file line number Diff line number Diff line change
Expand Up @@ -8,23 +8,23 @@ import "cosmos/base/v1beta1/coin.proto";

option go_package = "github.com/onomyprotocol/reserve/x/psm/types";

message Stablecoin {
message StablecoinInfo {
// stablecoin name
string denom = 1;
// limit total stablecoin module support
// limit total stablecoin
bytes limit_total = 2 [
(cosmos_proto.scalar) = "cosmos.Int",
(gogoproto.customtype) = "cosmossdk.io/math.Int",
(gogoproto.nullable) = false,
(amino.dont_omitempty) = true
];
// stablecoin to nomUSD exchange fee, fee_in when 1 stablecoin = 1nomUSD
// stablecoin to nom exchange fee, fee_in when 1 stablecoin = 1nomUSD
bytes fee_in = 3 [
(cosmos_proto.scalar) = "cosmos.Dec",
(gogoproto.customtype) = "cosmossdk.io/math.LegacyDec",
(gogoproto.nullable) = false
];
// nomUSD to stablecoin exchange fee, fee_out when 1 stablecoin = 1nomUSD
// nom to stablecoin exchange fee, fee_out when 1 stablecoin = 1nomUSD
bytes fee_out = 4 [
(cosmos_proto.scalar) = "cosmos.Dec",
(gogoproto.customtype) = "cosmossdk.io/math.LegacyDec",
Expand Down
4 changes: 2 additions & 2 deletions proto/reserve/psm/v1/query.proto
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ message QueryStablecoinRequest {
}

message QueryStablecoinResponse {
Stablecoin stablecoin = 1 [(gogoproto.nullable) = false];
StablecoinInfo stablecoin = 1 [(gogoproto.nullable) = false];

bytes swapable_quantity = 3 [
(cosmos_proto.scalar) = "cosmos.Int",
Expand All @@ -63,7 +63,7 @@ message QueryAllStablecoinResponse {
}

message StablecoinResponse {
Stablecoin stablecoin = 1 [(gogoproto.nullable) = false];
StablecoinInfo stablecoin = 1 [(gogoproto.nullable) = false];
bytes swapable_quantity = 3 [
(cosmos_proto.scalar) = "cosmos.Int",
(gogoproto.customtype) = "cosmossdk.io/math.Int",
Expand Down
43 changes: 19 additions & 24 deletions proto/reserve/psm/v1/tx.proto
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,7 @@ service Msg {
rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse);
rpc AddStableCoinProposal(MsgAddStableCoin) returns (MsgAddStableCoinResponse);
rpc UpdatesStableCoinProposal(MsgUpdatesStableCoin) returns (MsgUpdatesStableCoinResponse);
rpc SwapTonomUSD(MsgSwapTonomUSD) returns (MsgSwapTonomUSDResponse);
rpc SwapToStablecoin(MsgSwapToStablecoin) returns (MsgSwapToStablecoinResponse);
rpc StableSwap(MsgStableSwap) returns (MsgStableSwapResponse);
}

// MsgUpdateParams is the Msg/UpdateParams request type.
Expand All @@ -44,27 +43,6 @@ message MsgUpdateParams {
// MsgUpdateParams message.
message MsgUpdateParamsResponse {}

message MsgSwapTonomUSD {
option (cosmos.msg.v1.signer) = "address";

string address = 1;
cosmos.base.v1beta1.Coin coin = 2;
}
message MsgSwapTonomUSDResponse {}

message MsgSwapToStablecoin {
option (cosmos.msg.v1.signer) = "address";

string address = 1;
string to_denom = 2;
bytes amount = 3 [
(cosmos_proto.scalar) = "cosmos.Int",
(gogoproto.customtype) = "cosmossdk.io/math.Int",
(gogoproto.nullable) = false,
(amino.dont_omitempty) = true
];
}
message MsgSwapToStablecoinResponse {}

message MsgAddStableCoin {
option (cosmos.msg.v1.signer) = "authority";
Expand All @@ -91,6 +69,7 @@ message MsgAddStableCoin {
(gogoproto.customtype) = "cosmossdk.io/math.LegacyDec",
(gogoproto.nullable) = false
];
int64 oracle_script = 6;
}

message MsgAddStableCoinResponse {}
Expand Down Expand Up @@ -120,6 +99,22 @@ message MsgUpdatesStableCoin {
(gogoproto.customtype) = "cosmossdk.io/math.LegacyDec",
(gogoproto.nullable) = false
];

int64 oracle_script = 6;
}

message MsgUpdatesStableCoinResponse {}
message MsgUpdatesStableCoinResponse {}

// MsgUpdateParamsResponse defines the response structure for executing a
// MsgStableSwap message.

message MsgStableSwap {
option (cosmos.msg.v1.signer) = "address";

string address = 1;
string expected_denom = 2;
cosmos.base.v1beta1.Coin offer_coin = 3
[ (gogoproto.nullable) = false, (amino.dont_omitempty) = true ];

}
message MsgStableSwapResponse {}
20 changes: 12 additions & 8 deletions proto/reserve/vaults/params.proto
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ message Params {
(gogoproto.nullable) = false
];

string mint_denom = 2;
repeated string allowed_mint_denom = 2;

google.protobuf.Duration charging_period = 3 [
(gogoproto.stdduration) = true,
Expand All @@ -33,42 +33,44 @@ message Params {

// VaultParams defines the parameters for each collateral vault type.
message VaultMamagerParams {
string min_collateral_ratio = 1 [
string mint_denom = 1;

string min_collateral_ratio = 2 [
(cosmos_proto.scalar) = "cosmos.Dec",
(gogoproto.customtype) = "cosmossdk.io/math.LegacyDec",
(amino.dont_omitempty) = true,
(gogoproto.nullable) = false
];

string liquidation_ratio = 2 [
string liquidation_ratio = 3 [
(cosmos_proto.scalar) = "cosmos.Dec",
(gogoproto.customtype) = "cosmossdk.io/math.LegacyDec",
(amino.dont_omitempty) = true,
(gogoproto.nullable) = false
];

string max_debt = 3 [
string max_debt = 4 [
(cosmos_proto.scalar) = "cosmos.Int",
(gogoproto.customtype) = "cosmossdk.io/math.Int",
(amino.dont_omitempty) = true,
(gogoproto.nullable) = false
];

string stability_fee = 4 [
string stability_fee = 5 [
(cosmos_proto.scalar) = "cosmos.Dec",
(gogoproto.customtype) = "cosmossdk.io/math.LegacyDec",
(amino.dont_omitempty) = true,
(gogoproto.nullable) = false
];

string liquidation_penalty = 5 [
string liquidation_penalty = 6 [
(cosmos_proto.scalar) = "cosmos.Dec",
(gogoproto.customtype) = "cosmossdk.io/math.LegacyDec",
(amino.dont_omitempty) = true,
(gogoproto.nullable) = false
];

string minting_fee = 6 [
string minting_fee = 7 [
(cosmos_proto.scalar) = "cosmos.Dec",
(gogoproto.customtype) = "cosmossdk.io/math.LegacyDec",
(amino.dont_omitempty) = true,
Expand Down Expand Up @@ -142,7 +144,9 @@ message VaultLiquidationStatus {
}

message Liquidation {
string denom = 1;
string debt_denom = 1;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should be collateral_denom I think


string mint_denom = 2;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we should rename. Lets say debt and mint denom is same nomUSD


repeated Vault liquidating_vaults = 3;

Expand Down
14 changes: 0 additions & 14 deletions script/proposal-2.json

This file was deleted.

23 changes: 23 additions & 0 deletions script/proposal-psm.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"messages": [{
"@type": "/reserve.psm.v1.MsgAddStableCoin",
"authority":"onomy10d07y265gmmuvt4z0w9aw880jnsr700jqr8n8k",
"denom": "usdt",
"limit_total": "100000000000000000000000000000",
"fee_in": "0.001000000000000000",
"fee_out": "0.001000000000000000",
"oracle_script": "44"
},
{
"@type": "/reserve.psm.v1.MsgAddStableCoin",
"authority":"onomy10d07y265gmmuvt4z0w9aw880jnsr700jqr8n8k",
"denom": "usdc",
"limit_total": "100000000000000000000000000000",
"fee_in": "0.001000000000000000",
"fee_out": "0.001000000000000000",
"oracle_script": "44"
}],
"deposit": "100000000stake",
"title": "My proposal",
"summary": "A short summary of my proposal"
}
44 changes: 20 additions & 24 deletions script/psm-test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,15 @@ echo $mnemonic2| reserved keys add validator2 --recover --keyring-backend=test -
echo $mnemonic3| reserved keys add validator3 --recover --keyring-backend=test --home=$HOME/.reserved/validator3

# create validator node with tokens to transfer to the three other nodes
reserved genesis add-genesis-account $(reserved keys show validator1 -a --keyring-backend=test --home=$HOME/.reserved/validator1) 10000000000000000000000000000000stake,10000000000000000000000000000000usdt --home=$HOME/.reserved/validator1
reserved genesis add-genesis-account $(reserved keys show validator2 -a --keyring-backend=test --home=$HOME/.reserved/validator2) 10000000000000000000000000000000stake,10000000000000000000000000000000usdt --home=$HOME/.reserved/validator1
reserved genesis add-genesis-account $(reserved keys show validator3 -a --keyring-backend=test --home=$HOME/.reserved/validator3) 10000000000000000000000000000000stake,10000000000000000000000000000000usdt --home=$HOME/.reserved/validator1
reserved genesis add-genesis-account $(reserved keys show validator1 -a --keyring-backend=test --home=$HOME/.reserved/validator1) 10000000000000000000000000000000stake,10000000000000000000000000000000usdt --home=$HOME/.reserved/validator2
reserved genesis add-genesis-account $(reserved keys show validator2 -a --keyring-backend=test --home=$HOME/.reserved/validator2) 10000000000000000000000000000000stake,10000000000000000000000000000000usdt --home=$HOME/.reserved/validator2
reserved genesis add-genesis-account $(reserved keys show validator3 -a --keyring-backend=test --home=$HOME/.reserved/validator3) 10000000000000000000000000000000stake,10000000000000000000000000000000usdt --home=$HOME/.reserved/validator2
reserved genesis add-genesis-account $(reserved keys show validator1 -a --keyring-backend=test --home=$HOME/.reserved/validator1) 10000000000000000000000000000000stake,10000000000000000000000000000000usdt --home=$HOME/.reserved/validator3
reserved genesis add-genesis-account $(reserved keys show validator2 -a --keyring-backend=test --home=$HOME/.reserved/validator2) 10000000000000000000000000000000stake,10000000000000000000000000000000usdt --home=$HOME/.reserved/validator3
reserved genesis add-genesis-account $(reserved keys show validator3 -a --keyring-backend=test --home=$HOME/.reserved/validator3) 10000000000000000000000000000000stake,10000000000000000000000000000000usdt --home=$HOME/.reserved/validator3
reserved genesis add-genesis-account $(reserved keys show validator1 -a --keyring-backend=test --home=$HOME/.reserved/validator1) 10000000000000000000000000000000stake,10000000000000000000000000000000usdt,10000000000000000000000000000000usdc --home=$HOME/.reserved/validator1
reserved genesis add-genesis-account $(reserved keys show validator2 -a --keyring-backend=test --home=$HOME/.reserved/validator2) 10000000000000000000000000000000stake,10000000000000000000000000000000usdt,10000000000000000000000000000000usdc --home=$HOME/.reserved/validator1
reserved genesis add-genesis-account $(reserved keys show validator3 -a --keyring-backend=test --home=$HOME/.reserved/validator3) 10000000000000000000000000000000stake,10000000000000000000000000000000usdt,10000000000000000000000000000000usdc --home=$HOME/.reserved/validator1
reserved genesis add-genesis-account $(reserved keys show validator1 -a --keyring-backend=test --home=$HOME/.reserved/validator1) 10000000000000000000000000000000stake,10000000000000000000000000000000usdt,10000000000000000000000000000000usdc --home=$HOME/.reserved/validator2
reserved genesis add-genesis-account $(reserved keys show validator2 -a --keyring-backend=test --home=$HOME/.reserved/validator2) 10000000000000000000000000000000stake,10000000000000000000000000000000usdt,10000000000000000000000000000000usdc --home=$HOME/.reserved/validator2
reserved genesis add-genesis-account $(reserved keys show validator3 -a --keyring-backend=test --home=$HOME/.reserved/validator3) 10000000000000000000000000000000stake,10000000000000000000000000000000usdt,10000000000000000000000000000000usdc --home=$HOME/.reserved/validator2
reserved genesis add-genesis-account $(reserved keys show validator1 -a --keyring-backend=test --home=$HOME/.reserved/validator1) 10000000000000000000000000000000stake,10000000000000000000000000000000usdt,10000000000000000000000000000000usdc --home=$HOME/.reserved/validator3
reserved genesis add-genesis-account $(reserved keys show validator2 -a --keyring-backend=test --home=$HOME/.reserved/validator2) 10000000000000000000000000000000stake,10000000000000000000000000000000usdt,10000000000000000000000000000000usdc --home=$HOME/.reserved/validator3
reserved genesis add-genesis-account $(reserved keys show validator3 -a --keyring-backend=test --home=$HOME/.reserved/validator3) 10000000000000000000000000000000stake,10000000000000000000000000000000usdt,10000000000000000000000000000000usdc --home=$HOME/.reserved/validator3
reserved genesis gentx validator1 1000000000000000000000stake --keyring-backend=test --home=$HOME/.reserved/validator1 --chain-id=testing-1
reserved genesis gentx validator2 1000000000000000000000stake --keyring-backend=test --home=$HOME/.reserved/validator2 --chain-id=testing-1
reserved genesis gentx validator3 1000000000000000000000stake --keyring-backend=test --home=$HOME/.reserved/validator3 --chain-id=testing-1
Expand Down Expand Up @@ -118,7 +118,7 @@ screen -S onomy3 -t onomy3 -d -m reserved start --home=$HOME/.reserved/validator

# submit proposal add usdt
sleep 7
reserved tx gov submit-proposal ./script/proposal-2.json --home=$HOME/.reserved/validator1 --from validator1 --keyring-backend test --fees 20stake --chain-id testing-1 -y
reserved tx gov submit-proposal ./script/proposal-psm.json --home=$HOME/.reserved/validator1 --from validator1 --keyring-backend test --fees 20stake --chain-id testing-1 -y

# # # vote
sleep 7
Expand All @@ -130,22 +130,18 @@ reserved tx gov vote 1 yes --from validator3 --keyring-backend test --home ~/.r
sleep 15
# echo "========sleep=========="

# # check add usdt, balances
# reserved q psm all-stablecoin
# # # check add usdt, balances
# # reserved q psm all-stablecoin
reserved q bank balances $(reserved keys show validator1 -a --keyring-backend test --home /Users/donglieu/.reserved/validator1)

# # tx swap usdt to nomUSD
# echo "========swap==========="
reserved tx psm swap-to-nomUSD 100000000000000000000000usdt --from validator1 --keyring-backend test --home ~/.reserved/validator1 --chain-id testing-1 -y --fees 20stake
# # # tx swap usdt to nomUSD
# # echo "========swap==========="
reserved tx psm swap 100000000000000000000000usdt nomUSD --from validator1 --keyring-backend test --home ~/.reserved/validator1 --chain-id testing-1 -y --fees 20stake

sleep 7
# # Check account after swap
reserved q bank balances $(reserved keys show validator1 -a --keyring-backend test --home /Users/donglieu/.reserved/validator1)

# # tx swap nomUSD to usdt
# reserved tx psm swap-to-stablecoin usdt 1000nomUSD --from validator1 --keyring-backend test --home ~/.reserved/validator1 --chain-id testing-1 -y --fees 20stake

# sleep 7
# # Check account after swap
# reserved q bank balances $(reserved keys show validator1 -a --keyring-backend test --home /Users/donglieu/.reserved/validator1)
# # killall reserved || true
reserved tx psm swap 1000000000usdc nomUSD --from validator1 --keyring-backend test --home ~/.reserved/validator1 --chain-id testing-1 -y --fees 20stake
sleep 7
reserved tx psm swap 1000nomUSD usdc --from validator1 --keyring-backend test --home ~/.reserved/validator1 --chain-id testing-1 -y --fees 20stake
sleep 7
reserved tx psm swap 1000nomUSD usdt --from validator1 --keyring-backend test --home ~/.reserved/validator1 --chain-id testing-1 -y --fees 20stake
Loading
Loading