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

feat: add param #455

Merged
merged 4 commits into from
Mar 23, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 2 additions & 0 deletions docs/core/proto-docs.md
Original file line number Diff line number Diff line change
Expand Up @@ -3974,6 +3974,7 @@ Query defines the gRPC querier service.
| `successful_bid_end_at` | [google.protobuf.Timestamp](#google.protobuf.Timestamp) | | |
| `auto_relisted_count` | [uint64](#uint64) | | |
| `collected_amount` | [cosmos.base.v1beta1.Coin](#cosmos.base.v1beta1.Coin) | | |
| `minimum_bidding_period` | [google.protobuf.Duration](#google.protobuf.Duration) | | |



Expand Down Expand Up @@ -4672,6 +4673,7 @@ Query defines the gRPC querier service.
| `bid_token` | [string](#string) | | |
| `minimum_deposit_rate` | [string](#string) | | 1% = 0.01 |
| `automatic_refinancing` | [bool](#bool) | | |
| `minimum_bidding_period` | [google.protobuf.Duration](#google.protobuf.Duration) | | |



Expand Down
5 changes: 5 additions & 0 deletions proto/nftmarket/nftmarket.proto
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package ununifi.nftmarket;

import "gogoproto/gogo.proto";
import "google/protobuf/timestamp.proto";
import "google/protobuf/duration.proto";
import "cosmos/base/v1beta1/coin.proto";
import "cosmos_proto/cosmos.proto";

Expand Down Expand Up @@ -72,6 +73,10 @@ message NftListing {
];
uint64 auto_relisted_count = 12;
cosmos.base.v1beta1.Coin collected_amount = 13 [(gogoproto.nullable) = false];
google.protobuf.Duration minimum_bidding_period = 14 [
(gogoproto.stdduration) = true,
(gogoproto.nullable) = false
];
}

message borrowing {
Expand Down
5 changes: 5 additions & 0 deletions proto/nftmarket/tx.proto
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package ununifi.nftmarket;

import "gogoproto/gogo.proto";
import "google/protobuf/timestamp.proto";
import "google/protobuf/duration.proto";
import "cosmos/base/v1beta1/coin.proto";
import "nftmarket/nftmarket.proto";
import "cosmos_proto/cosmos.proto";
Expand Down Expand Up @@ -51,6 +52,10 @@ message MsgListNft {
(gogoproto.nullable) = false
];
bool automatic_refinancing = 6;
google.protobuf.Duration minimum_bidding_period = 7 [
(gogoproto.stdduration) = true,
(gogoproto.nullable) = false
];
}
message MsgListNftResponse {}

Expand Down
12 changes: 6 additions & 6 deletions scripts/commands/nftmarket_v2.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,23 +3,23 @@
SCRIPT_DIR=$(cd $(dirname $0); pwd)
. $SCRIPT_DIR/../setup/variables.sh

ununifid tx nftmarket mint a10 a10 uri 888838 --home $CHAIN_DIR/$CHAINID_1 --chain-id $CHAINID_1 --keyring-backend test --from=$VAL1 --gas=300000 -y --broadcast-mode=block| jq .;
ununifid tx nftmarket mint a10 a11 uri 888838 --home $CHAIN_DIR/$CHAINID_1 --chain-id $CHAINID_1 --keyring-backend test --from=$VAL1 --gas=300000 -y --broadcast-mode=block| jq .;
$BINARY tx nftmarket mint a10 a10 uri 888838 --home $CHAIN_DIR/$CHAINID_1 --from=$VAL1 $conf| jq .;
$BINARY tx nftmarket mint a10 a11 uri 888838 --home $CHAIN_DIR/$CHAINID_1 --from=$VAL1 $conf| jq .;

# auto-refinancing
ununifid tx nftmarket listing a10 a10 --min-minimum-deposit-rate 0.01 --bid-token uguu -r --home $CHAIN_DIR/$CHAINID_1 --chain-id $CHAINID_1 --from $VAL1 --keyring-backend test --gas 300000 -y| jq . ;
$BINARY tx nftmarket listing a10 a10 --min-minimum-deposit-rate 0.01 --bid-token uguu -r --from $VAL1 $conf| jq . ;

# not auto-refinancing
# ununifid tx nftmarket listing a10 a10 --min-minimum-deposit-rate 0.1 --bid-token uguu --home $CHAIN_DIR/$CHAINID_1 --chain-id $CHAINID_1 --from $VAL1 --keyring-backend test --gas 300000 -y| jq . ;
ununifid tx nftmarket listing a10 a11 --min-minimum-deposit-rate 0.1 --bid-token uguu --home $CHAIN_DIR/$CHAINID_1 --chain-id $CHAINID_1 --from $VAL1 --keyring-backend test --gas 300000 -y| jq . ;
$BINARY tx nftmarket listing a10 a11 --min-minimum-deposit-rate 0.1 --bid-token uguu --from $VAL1 $conf| jq . ;

# ununifid tx nftmarket placebid a10 a10 100uguu 80uguu 0.1 20 --home $CHAIN_DIR/$CHAINID_1 --chain-id $CHAINID_1 --from $USER1 --keyring-backend test --gas 300000 -y --broadcast-mode=block --automatic-payment| jq .;
# ununifid tx nftmarket placebid a10 a10 100uguu 1uguu 0.1 20 --home $CHAIN_DIR/$CHAINID_1 --chain-id $CHAINID_1 --from $USER1 --keyring-backend test --gas 300000 -y --broadcast-mode=block --automatic-payment| jq .;

# ununifid tx nftmarket placebid a10 a10 100uguu 60uguu 0.1 20 --home $CHAIN_DIR/$CHAINID_1 --chain-id $CHAINID_1 --from $USER1 --keyring-backend test --gas 300000 -y --broadcast-mode=block --automatic-payment| jq .;
ununifid tx nftmarket placebid a10 a10 100uguu 50uguu 0.1 30 --home $CHAIN_DIR/$CHAINID_1 --chain-id $CHAINID_1 --from $USER1 --keyring-backend test --gas 300000 -y --broadcast-mode=block --automatic-payment| jq .;
$BINARY tx nftmarket placebid a10 a10 100uguu 50uguu 0.1 10000000000 --from $USER1 $conf| jq .;
# ununifid tx nftmarket placebid a10 a10 102uguu 20uguu 0.3 12000000 --home $CHAIN_DIR/$CHAINID_1 --chain-id $CHAINID_1 --from $USER2 --keyring-backend test --gas 300000 -y --broadcast-mode=block --automatic-payment| jq .;
ununifid tx nftmarket placebid a10 a10 103uguu 2uguu 0.2 12000000 --home $CHAIN_DIR/$CHAINID_1 --chain-id $CHAINID_1 --from $USER3 --keyring-backend test --gas 300000 -y --broadcast-mode=block --automatic-payment| jq .;
ununifid tx nftmarket placebid a10 a10 103uguu 2uguu 0.2 12000000 --from $USER3 $conf| jq .;
# not automatic payment
ununifid tx nftmarket placebid a10 a10 102uguu 20uguu 0.3 12000000 --home $CHAIN_DIR/$CHAINID_1 --chain-id $CHAINID_1 --from $USER2 --keyring-backend test --gas 300000 -y --broadcast-mode=block | jq .;

Expand Down
11 changes: 6 additions & 5 deletions x/nftmarket/client/cli/flags.go
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
package cli

const (
FlagAutomaticPayment = "automatic-payment"
FlagBidToken = "bid-token"
FlagMinimumDepositRate = "min-minimum-deposit-rate"
FlagOwner = "owner"
FlagAutomaticRefinancing = "automatic-refinancing"
FlagAutomaticPayment = "automatic-payment"
FlagBidToken = "bid-token"
FlagMinimumDepositRate = "min-minimum-deposit-rate"
FlagOwner = "owner"
FlagAutomaticRefinancing = "automatic-refinancing"
FlagMinimumBiddingPeriodHours = "min-bidding-period-hours"
)
10 changes: 9 additions & 1 deletion x/nftmarket/client/cli/tx.go
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,14 @@ $ %s tx %s listing 1 1 --from myKeyName --chain-id ununifi-x
return err
}

msg := types.NewMsgListNft(clientCtx.GetFromAddress(), nftIde, bidToken, minDepositRateDec, automaticRef)
minBiddingPeriodHour, err := cmd.Flags().GetUint64(FlagMinimumBiddingPeriodHours)
if err != nil {
return err
}
// convert uint64 to time.Duration
minBiddingPeriod := time.Duration(minBiddingPeriodHour) * time.Hour

msg := types.NewMsgListNft(clientCtx.GetFromAddress(), nftIde, bidToken, minDepositRateDec, automaticRef, minBiddingPeriod)
if err := msg.ValidateBasic(); err != nil {
return err
}
Expand All @@ -125,6 +132,7 @@ $ %s tx %s listing 1 1 --from myKeyName --chain-id ununifi-x

cmd.Flags().String(FlagBidToken, "uguu", "bid token")
cmd.Flags().String(FlagMinimumDepositRate, "0.1", "min minimum deposit rate")
cmd.Flags().Uint64(FlagMinimumBiddingPeriodHours, 1, "min minimum deposit rate")
cmd.Flags().BoolP(FlagAutomaticRefinancing, "r", false, "automatic refinancing")
flags.AddTxFlagsToCmd(cmd)

Expand Down
6 changes: 6 additions & 0 deletions x/nftmarket/keeper/bid.go
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,12 @@ func (k Keeper) PlaceBid(ctx sdk.Context, msg *types.MsgPlaceBid) error {
return types.ErrInvalidBidDenom
}

// todo add test case
minimumBiddingPeriodHour := time.Now().Add(listing.MinimumBiddingPeriod)
if msg.BiddingPeriod.Before(minimumBiddingPeriodHour) {
return types.ErrSmallBiddingPeriod
}

bids := types.NftBids(k.GetBidsByNft(ctx, listing.IdBytes()))
bidder := msg.Sender.AccAddress()
oldBid := bids.GetBidByBidder(bidder.String())
Expand Down
18 changes: 9 additions & 9 deletions x/nftmarket/keeper/bid_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -454,7 +454,7 @@ func (suite *KeeperTestSuite) TestPlaceBid() {
Sender: ununifitypes.StringAccAddress(bidder),
NftId: nftIdentifier,
BidAmount: bidAmount,
BiddingPeriod: suite.ctx.BlockTime().AddDate(0, 0, 1),
BiddingPeriod: time.Now().Add(time.Hour * 24),
DepositLendingRate: sdk.MustNewDecFromStr("0.05"),
AutomaticPayment: false,
DepositAmount: depositAmount,
Expand All @@ -472,7 +472,7 @@ func (suite *KeeperTestSuite) TestPlaceBid() {
Sender: ununifitypes.StringAccAddress(bidder),
NftId: nftIdentifier,
BidAmount: tc.originAmount,
BiddingPeriod: suite.ctx.BlockTime().AddDate(0, 0, 1),
BiddingPeriod: time.Now().Add(time.Hour * 24),
DepositLendingRate: sdk.MustNewDecFromStr("0.05"),
AutomaticPayment: false,
DepositAmount: tc.originAmount,
Expand All @@ -499,7 +499,7 @@ func (suite *KeeperTestSuite) TestPlaceBid() {
Sender: ununifitypes.StringAccAddress(tc.bidder),
NftId: nftIdentifier,
BidAmount: tc.bidAmount,
BiddingPeriod: suite.ctx.BlockTime().AddDate(0, 0, 1),
BiddingPeriod: time.Now().Add(time.Hour * 24),
DepositLendingRate: sdk.MustNewDecFromStr("0.05"),
AutomaticPayment: false,
DepositAmount: tc.depositAmount,
Expand Down Expand Up @@ -704,7 +704,7 @@ func (suite *KeeperTestSuite) TestCancelBid() {
Sender: ununifitypes.StringAccAddress(bidder),
NftId: nftIdentifier,
BidAmount: bidAmount,
BiddingPeriod: suite.ctx.BlockTime().AddDate(0, 0, 1),
BiddingPeriod: time.Now().Add(time.Hour * 24),
DepositLendingRate: sdk.MustNewDecFromStr("0.05"),
AutomaticPayment: false,
DepositAmount: depositAmount,
Expand All @@ -723,7 +723,7 @@ func (suite *KeeperTestSuite) TestCancelBid() {
Sender: ununifitypes.StringAccAddress(bidder),
NftId: nftIdentifier,
BidAmount: tc.bidAmount,
BiddingPeriod: suite.ctx.BlockTime().AddDate(0, 0, 1),
BiddingPeriod: time.Now().Add(time.Hour * 24),
DepositLendingRate: sdk.MustNewDecFromStr("0.05"),
AutomaticPayment: false,
DepositAmount: tc.depositAmount,
Expand Down Expand Up @@ -872,7 +872,7 @@ func (suite *KeeperTestSuite) TestPayFullBid() {
Sender: ununifitypes.StringAccAddress(bidder),
NftId: nftIdentifier,
BidAmount: tc.bidAmount,
BiddingPeriod: suite.ctx.BlockTime().AddDate(0, 0, 1),
BiddingPeriod: time.Now().Add(time.Hour * 24),
DepositLendingRate: sdk.MustNewDecFromStr("0.05"),
AutomaticPayment: false,
DepositAmount: tc.depositAmount,
Expand Down Expand Up @@ -931,7 +931,7 @@ func (suite *KeeperTestSuite) TestHandleMaturedCancelledBids() {
BidAmount: sdk.NewInt64Coin("uguu", 1000000),
DepositAmount: sdk.NewInt64Coin("uguu", 100000),
PaidAmount: sdk.NewInt64Coin("uguu", 0),
BiddingPeriod: suite.ctx.BlockTime().AddDate(0, 0, 1),
BiddingPeriod: time.Now().Add(time.Hour * 24),
DepositLendingRate: sdk.MustNewDecFromStr("0.05"),
AutomaticPayment: true,
BidTime: now,
Expand All @@ -947,7 +947,7 @@ func (suite *KeeperTestSuite) TestHandleMaturedCancelledBids() {
BidAmount: sdk.NewInt64Coin("uguu", 1000000),
DepositAmount: sdk.NewInt64Coin("uguu", 100000),
PaidAmount: sdk.NewInt64Coin("uguu", 0),
BiddingPeriod: suite.ctx.BlockTime().AddDate(0, 0, 1),
BiddingPeriod: time.Now().Add(time.Hour * 24),
DepositLendingRate: sdk.MustNewDecFromStr("0.05"),
AutomaticPayment: true,
BidTime: now,
Expand All @@ -963,7 +963,7 @@ func (suite *KeeperTestSuite) TestHandleMaturedCancelledBids() {
BidAmount: sdk.NewInt64Coin("uguu", 1000000),
DepositAmount: sdk.NewInt64Coin("uguu", 100000),
PaidAmount: sdk.NewInt64Coin("uguu", 0),
BiddingPeriod: suite.ctx.BlockTime().AddDate(0, 0, 1),
BiddingPeriod: time.Now().Add(time.Hour * 24),
DepositLendingRate: sdk.MustNewDecFromStr("0.05"),
AutomaticPayment: true,
BidTime: now.Add(time.Second),
Expand Down
8 changes: 4 additions & 4 deletions x/nftmarket/keeper/loan_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,7 @@ func (suite *KeeperTestSuite) TestBorrow() {
Sender: ununifitypes.StringAccAddress(bidder),
NftId: nftIdentifier,
BidAmount: bidAmount,
BiddingPeriod: suite.ctx.BlockTime().AddDate(0, 0, 1),
BiddingPeriod: time.Now().Add(time.Hour * 24),
DepositLendingRate: sdk.MustNewDecFromStr("0.05"),
AutomaticPayment: false,
DepositAmount: depositAmount,
Expand Down Expand Up @@ -386,7 +386,7 @@ func (suite *KeeperTestSuite) TestRepay() {
Sender: ununifitypes.StringAccAddress(bidder),
NftId: nftIdentifier,
BidAmount: bidAmount,
BiddingPeriod: suite.ctx.BlockTime().AddDate(0, 0, 1),
BiddingPeriod: time.Now().Add(time.Hour * 24),
DepositLendingRate: sdk.MustNewDecFromStr("0.05"),
AutomaticPayment: false,
DepositAmount: depositAmount,
Expand Down Expand Up @@ -532,7 +532,7 @@ func (suite *KeeperTestSuite) TestLoanManagement() {
Sender: ununifitypes.StringAccAddress(bidder),
NftId: nftIdentifier,
BidAmount: bidAmount,
BiddingPeriod: suite.ctx.BlockTime().AddDate(0, 0, 1),
BiddingPeriod: time.Now().Add(time.Hour * 24),
DepositLendingRate: sdk.MustNewDecFromStr("0.05"),
AutomaticPayment: true,
DepositAmount: depositAmount,
Expand Down Expand Up @@ -575,7 +575,7 @@ func (suite *KeeperTestSuite) PlaceAndBorrow(bidAmount sdk.Coin, depositAmount s
Sender: ununifitypes.StringAccAddress(bidder),
NftId: nftId,
BidAmount: bidAmount,
BiddingPeriod: suite.ctx.BlockTime().AddDate(0, 0, 1),
BiddingPeriod: time.Now().Add(time.Hour * 24),
DepositLendingRate: sdk.MustNewDecFromStr("0.05"),
AutomaticPayment: true,
DepositAmount: depositAmount,
Expand Down
3 changes: 3 additions & 0 deletions x/nftmarket/keeper/nft_listing.go
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,9 @@ func (k Keeper) ListNft(ctx sdk.Context, msg *types.MsgListNft) error {
AutomaticRefinancing: msg.AutomaticRefinancing,
StartedAt: ctx.BlockTime(),
CollectedAmount: sdk.NewCoin(msg.BidToken, sdk.ZeroInt()),
// todo: add validation.
// we should to determine maximum bidding period.
MinimumBiddingPeriod: msg.MinimumBiddingPeriod,
}
k.SaveNftListing(ctx, listing)

Expand Down
Loading