Commit 8de1b924 authored by 任硕's avatar 任硕 Committed by linj

query unfreeze

parent f9d4465d
...@@ -81,40 +81,10 @@ func (a *action) UnfreezeWithdraw(withdraw *uf.UnfreezeWithdraw) (*types.Receipt ...@@ -81,40 +81,10 @@ func (a *action) UnfreezeWithdraw(withdraw *uf.UnfreezeWithdraw) (*types.Receipt
} }
var logs []*types.ReceiptLog var logs []*types.ReceiptLog
var kv []*types.KeyValue var kv []*types.KeyValue
currentTime := time.Now().Unix() reaTimes, available, err := getWithdrawAvailable(unfreeze)
expectTimes := (currentTime + unfreeze.Period - unfreeze.StartTime) / unfreeze.Period if err != nil {
reaTimes := expectTimes - int64(unfreeze.WithdrawTimes) uflog.Error("unfreeze withdraw ", "execaddr", a.execaddr, "err", err)
if reaTimes <= 0 { return nil, err
uflog.Error("unfreeze withdraw ", "execaddr", a.execaddr, "err", types.ErrUnfreezeBeforeDue)
return nil, types.ErrUnfreezeBeforeDue
}
if unfreeze.Remaining <= 0 {
uflog.Error("unfreeze withdraw ", "execaddr", a.execaddr, "err", types.ErrUnfreezeEmptied)
return nil, types.ErrUnfreezeEmptied
}
var available int64
switch unfreeze.Means {
case 1: // 百分比
for i := int64(0); i < reaTimes; i++ {
if tmp := unfreeze.Remaining * unfreeze.Amount / 10000; tmp == 0 {
available = unfreeze.Remaining
break
} else {
available += tmp
}
}
case 2: // 固额
for i := int64(0); i < reaTimes; i++ {
if unfreeze.Remaining <= unfreeze.Amount {
available = unfreeze.Remaining
break
}
available += unfreeze.Amount
}
default:
uflog.Error("unfreeze withdraw ", "execaddr", a.execaddr, "err", types.ErrUnfreezeMeans)
return nil, types.ErrUnfreezeMeans
} }
tokenAccDB, err := account.NewAccountDB("token", unfreeze.TokenName, a.db) tokenAccDB, err := account.NewAccountDB("token", unfreeze.TokenName, a.db)
...@@ -225,8 +195,63 @@ func (a *action) getTerminateLog(unfreeze *uf.Unfreeze) *types.ReceiptLog { ...@@ -225,8 +195,63 @@ func (a *action) getTerminateLog(unfreeze *uf.Unfreeze) *types.ReceiptLog {
} }
//查询可提币状态 //查询可提币状态
func QueryWithdraw(stateDB dbm.KV, param *uf.QueryWithdrawStatus) (types.Message, error) { func QueryWithdraw(stateDB dbm.KV, param *uf.QueryUnfreezeWithdraw) (types.Message, error) {
//查询提币次数 //查询提币次数
//计算当前可否提币 //计算当前可否提币
return &types.Reply{}, nil unfreezeID := param.UnfreezeID
value, err := stateDB.Get(key(unfreezeID))
if err != nil {
uflog.Error("QueryWithdraw ", "unfreezeID", unfreezeID, "err", err)
return nil, err
}
var unfreeze uf.Unfreeze
err = types.Decode(value, &unfreeze)
if err != nil {
uflog.Error("QueryWithdraw ", "unfreezeID", unfreezeID, "err", err)
return nil, err
}
reply := &uf.ReplyQueryUnfreezeWithdraw{UnfreezeID: unfreezeID}
_, available, err := getWithdrawAvailable(unfreeze)
if err != nil {
reply.AvailableAmount = 0
} else {
reply.AvailableAmount = available
}
return reply, nil
}
func getWithdrawAvailable(unfreeze uf.Unfreeze) (int64, int64, error) {
currentTime := time.Now().Unix()
expectTimes := (currentTime + unfreeze.Period - unfreeze.StartTime) / unfreeze.Period
reaTimes := expectTimes - int64(unfreeze.WithdrawTimes)
if reaTimes <= 0 {
return 0, 0, types.ErrUnfreezeBeforeDue
}
if unfreeze.Remaining <= 0 {
return 0, 0, types.ErrUnfreezeEmptied
}
var available int64
switch unfreeze.Means {
case 1: // 百分比
for i := int64(0); i < reaTimes; i++ {
if tmp := unfreeze.Remaining * unfreeze.Amount / 10000; tmp == 0 {
available = unfreeze.Remaining
break
} else {
available += tmp
}
}
case 2: // 固额
for i := int64(0); i < reaTimes; i++ {
if unfreeze.Remaining <= unfreeze.Amount {
available = unfreeze.Remaining
break
}
available += unfreeze.Amount
}
default:
return 0, 0, types.ErrUnfreezeMeans
}
return reaTimes, available, nil
} }
...@@ -5,6 +5,6 @@ import ( ...@@ -5,6 +5,6 @@ import (
"gitlab.33.cn/chain33/chain33/types" "gitlab.33.cn/chain33/chain33/types"
) )
func (u *Unfreeze) Query_QueryWithdraw(in *uf.QueryWithdrawStatus) (types.Message, error) { func (u *Unfreeze) Query_QueryWithdraw(in *uf.QueryUnfreezeWithdraw) (types.Message, error) {
return QueryWithdraw(u.GetStateDB(), in) return QueryWithdraw(u.GetStateDB(), in)
} }
...@@ -72,6 +72,11 @@ message ReceiptTerminate { ...@@ -72,6 +72,11 @@ message ReceiptTerminate {
} }
// query // query
message QueryWithdrawStatus { message QueryUnfreezeWithdraw {
string unfreezeID = 1; string unfreezeID = 1;
} }
message ReplyQueryUnfreezeWithdraw {
string unfreezeID = 1;
int64 availableAmount = 2;
}
\ No newline at end of file
...@@ -16,7 +16,8 @@ It has these top-level messages: ...@@ -16,7 +16,8 @@ It has these top-level messages:
ReceiptCreate ReceiptCreate
ReceiptWithdraw ReceiptWithdraw
ReceiptTerminate ReceiptTerminate
QueryWithdrawStatus QueryUnfreezeWithdraw
ReplyQueryUnfreezeWithdraw
*/ */
package types package types
...@@ -466,22 +467,46 @@ func (m *ReceiptTerminate) GetUnfreezeID() string { ...@@ -466,22 +467,46 @@ func (m *ReceiptTerminate) GetUnfreezeID() string {
} }
// query // query
type QueryWithdrawStatus struct { type QueryUnfreezeWithdraw struct {
UnfreezeID string `protobuf:"bytes,1,opt,name=unfreezeID" json:"unfreezeID,omitempty"` UnfreezeID string `protobuf:"bytes,1,opt,name=unfreezeID" json:"unfreezeID,omitempty"`
} }
func (m *QueryWithdrawStatus) Reset() { *m = QueryWithdrawStatus{} } func (m *QueryUnfreezeWithdraw) Reset() { *m = QueryUnfreezeWithdraw{} }
func (m *QueryWithdrawStatus) String() string { return proto.CompactTextString(m) } func (m *QueryUnfreezeWithdraw) String() string { return proto.CompactTextString(m) }
func (*QueryWithdrawStatus) ProtoMessage() {} func (*QueryUnfreezeWithdraw) ProtoMessage() {}
func (*QueryWithdrawStatus) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } func (*QueryUnfreezeWithdraw) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} }
func (m *QueryWithdrawStatus) GetUnfreezeID() string { func (m *QueryUnfreezeWithdraw) GetUnfreezeID() string {
if m != nil { if m != nil {
return m.UnfreezeID return m.UnfreezeID
} }
return "" return ""
} }
type ReplyQueryUnfreezeWithdraw struct {
UnfreezeID string `protobuf:"bytes,1,opt,name=unfreezeID" json:"unfreezeID,omitempty"`
AvailableAmount int64 `protobuf:"varint,2,opt,name=availableAmount" json:"availableAmount,omitempty"`
}
func (m *ReplyQueryUnfreezeWithdraw) Reset() { *m = ReplyQueryUnfreezeWithdraw{} }
func (m *ReplyQueryUnfreezeWithdraw) String() string { return proto.CompactTextString(m) }
func (*ReplyQueryUnfreezeWithdraw) ProtoMessage() {}
func (*ReplyQueryUnfreezeWithdraw) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} }
func (m *ReplyQueryUnfreezeWithdraw) GetUnfreezeID() string {
if m != nil {
return m.UnfreezeID
}
return ""
}
func (m *ReplyQueryUnfreezeWithdraw) GetAvailableAmount() int64 {
if m != nil {
return m.AvailableAmount
}
return 0
}
func init() { func init() {
proto.RegisterType((*Unfreeze)(nil), "types.Unfreeze") proto.RegisterType((*Unfreeze)(nil), "types.Unfreeze")
proto.RegisterType((*UnfreezeAction)(nil), "types.UnfreezeAction") proto.RegisterType((*UnfreezeAction)(nil), "types.UnfreezeAction")
...@@ -491,40 +516,42 @@ func init() { ...@@ -491,40 +516,42 @@ func init() {
proto.RegisterType((*ReceiptCreate)(nil), "types.ReceiptCreate") proto.RegisterType((*ReceiptCreate)(nil), "types.ReceiptCreate")
proto.RegisterType((*ReceiptWithdraw)(nil), "types.ReceiptWithdraw") proto.RegisterType((*ReceiptWithdraw)(nil), "types.ReceiptWithdraw")
proto.RegisterType((*ReceiptTerminate)(nil), "types.ReceiptTerminate") proto.RegisterType((*ReceiptTerminate)(nil), "types.ReceiptTerminate")
proto.RegisterType((*QueryWithdrawStatus)(nil), "types.QueryWithdrawStatus") proto.RegisterType((*QueryUnfreezeWithdraw)(nil), "types.QueryUnfreezeWithdraw")
proto.RegisterType((*ReplyQueryUnfreezeWithdraw)(nil), "types.ReplyQueryUnfreezeWithdraw")
} }
func init() { proto.RegisterFile("unfreeze.proto", fileDescriptor0) } func init() { proto.RegisterFile("unfreeze.proto", fileDescriptor0) }
var fileDescriptor0 = []byte{ var fileDescriptor0 = []byte{
// 459 bytes of a gzipped FileDescriptorProto // 480 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0x4d, 0x6f, 0xd3, 0x40, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0xc1, 0x6e, 0xd3, 0x40,
0x10, 0x8d, 0xed, 0xda, 0x49, 0x26, 0x6a, 0x80, 0xe5, 0x6b, 0x0f, 0x08, 0x45, 0x16, 0x87, 0x9c, 0x10, 0x8d, 0xed, 0xda, 0x49, 0x26, 0x6a, 0x0a, 0x2b, 0x0a, 0x2b, 0x84, 0x50, 0x64, 0x71, 0xc8,
0x82, 0x94, 0xaa, 0x12, 0x57, 0x28, 0x87, 0x70, 0x00, 0x89, 0xa5, 0x08, 0x71, 0xdc, 0xa6, 0x53, 0x29, 0x48, 0xa9, 0x10, 0x5c, 0x4b, 0x39, 0x84, 0x03, 0x48, 0xac, 0x8a, 0x10, 0xc7, 0x4d, 0x3a,
0x58, 0x51, 0xef, 0x46, 0xeb, 0x31, 0x95, 0xf9, 0x8b, 0x5c, 0x38, 0xf0, 0x83, 0xaa, 0x5d, 0xdb, 0x81, 0x15, 0xf6, 0xda, 0xda, 0x4c, 0x5a, 0x99, 0x5f, 0xe4, 0xc2, 0x81, 0x0f, 0x42, 0xde, 0xb5,
0x89, 0xeb, 0x44, 0x49, 0x8f, 0xfb, 0xe6, 0xbd, 0xf1, 0xec, 0x9b, 0xb7, 0x86, 0x71, 0xa1, 0xaf, 0x13, 0xd7, 0x89, 0xd2, 0xc2, 0x71, 0xdf, 0xcc, 0x1b, 0xcf, 0xbe, 0xf7, 0xd6, 0x30, 0x5c, 0xeb,
0x2c, 0xe2, 0x1f, 0x9c, 0xad, 0xac, 0x21, 0xc3, 0x62, 0x2a, 0x57, 0x98, 0xa7, 0xff, 0x42, 0x18, 0xa5, 0x41, 0xfc, 0x89, 0x93, 0xdc, 0x64, 0x94, 0xb1, 0x90, 0x8a, 0x1c, 0x57, 0xf1, 0x6f, 0x1f,
0x7c, 0xad, 0x2b, 0xec, 0x25, 0x40, 0xc3, 0xfa, 0xf0, 0x9e, 0x07, 0x93, 0x60, 0x3a, 0x14, 0x2d, 0x7a, 0x9f, 0xab, 0x0a, 0x7b, 0x0e, 0x50, 0x77, 0xbd, 0x7f, 0xc7, 0xbd, 0x91, 0x37, 0xee, 0x8b,
0x84, 0xbd, 0x80, 0x61, 0x4e, 0xd2, 0xd2, 0xb9, 0xca, 0x90, 0x87, 0x93, 0x60, 0x1a, 0x89, 0x0d, 0x06, 0xc2, 0x9e, 0x41, 0x7f, 0x45, 0xd2, 0xd0, 0xa5, 0x4a, 0x91, 0xfb, 0x23, 0x6f, 0x1c, 0x88,
0xe0, 0xaa, 0x64, 0x7e, 0xa1, 0xfe, 0x24, 0x33, 0xe4, 0x91, 0x17, 0x6f, 0x00, 0xd7, 0x9b, 0x0c, 0x2d, 0x50, 0x56, 0x29, 0xfb, 0x81, 0xfa, 0xa3, 0x4c, 0x91, 0x07, 0x96, 0xbc, 0x05, 0xca, 0xd9,
0xc9, 0xeb, 0x33, 0x53, 0x68, 0xe2, 0x47, 0x5e, 0xdc, 0x42, 0x9c, 0x5a, 0x69, 0x45, 0x4a, 0x92, 0x94, 0x91, 0x4c, 0x2e, 0xb2, 0xb5, 0x26, 0x7e, 0x64, 0xc9, 0x0d, 0xa4, 0x64, 0x2b, 0xad, 0x48,
0xb1, 0x3c, 0xae, 0xd4, 0x6b, 0x80, 0x4d, 0x60, 0x74, 0x81, 0x1a, 0xaf, 0xd4, 0x52, 0x49, 0x5b, 0x49, 0xca, 0x0c, 0x0f, 0x1d, 0x7b, 0x03, 0xb0, 0x11, 0x0c, 0xe6, 0xa8, 0x71, 0xa9, 0x16, 0x4a,
0xf2, 0xc4, 0xd7, 0xdb, 0x10, 0x7b, 0x06, 0xc9, 0x0a, 0xad, 0x32, 0x97, 0xbc, 0xef, 0x7b, 0xd7, 0x9a, 0x82, 0x47, 0xb6, 0xde, 0x84, 0xd8, 0x63, 0x88, 0x72, 0x34, 0x2a, 0xbb, 0xe2, 0x5d, 0x3b,
0x27, 0xf6, 0x04, 0xe2, 0x0c, 0xa5, 0xce, 0xf9, 0x60, 0x12, 0x4c, 0x63, 0x51, 0x1d, 0x1c, 0x5b, 0xbb, 0x3a, 0xb1, 0x47, 0x10, 0xa6, 0x28, 0xf5, 0x8a, 0xf7, 0x46, 0xde, 0x38, 0x14, 0xee, 0x50,
0x66, 0x7e, 0x92, 0x61, 0xc5, 0xae, 0x4e, 0xec, 0x15, 0x1c, 0xdf, 0x28, 0xfa, 0x79, 0x69, 0xe5, 0x76, 0xcb, 0xd4, 0x6e, 0xd2, 0x77, 0xdd, 0xee, 0xc4, 0x5e, 0xc0, 0xf1, 0x8d, 0xa2, 0xef, 0x57,
0x8d, 0xbb, 0x53, 0xce, 0xc1, 0xab, 0xee, 0x82, 0x6e, 0x56, 0x8b, 0x99, 0x54, 0x5a, 0xe9, 0x1f, 0x46, 0xde, 0x94, 0x77, 0x5a, 0x71, 0xb0, 0xac, 0xdb, 0x60, 0xb9, 0xab, 0xc1, 0x54, 0x2a, 0xad,
0x7c, 0x54, 0xf9, 0xb0, 0x06, 0xd2, 0xbf, 0x01, 0x8c, 0x1b, 0x4b, 0xdf, 0x2e, 0x49, 0x19, 0xcd, 0xf4, 0x37, 0x3e, 0x70, 0x3a, 0x6c, 0x80, 0xf8, 0x97, 0x07, 0xc3, 0x5a, 0xd2, 0xf3, 0x05, 0xa9,
0x5e, 0x43, 0xb2, 0xb4, 0x28, 0x09, 0xbd, 0xa9, 0xa3, 0xf9, 0xd3, 0x99, 0x77, 0x7f, 0xd6, 0xd0, 0x4c, 0xb3, 0x97, 0x10, 0x2d, 0x0c, 0x4a, 0x42, 0x2b, 0xea, 0x60, 0x7a, 0x3a, 0xb1, 0xea, 0x4f,
0xce, 0x7c, 0x71, 0xd1, 0x13, 0x35, 0x8d, 0x9d, 0xc2, 0xa0, 0xf9, 0xa4, 0x37, 0x7a, 0x34, 0x7f, 0xea, 0xb6, 0x0b, 0x5b, 0x9c, 0x75, 0x44, 0xd5, 0xc6, 0x5e, 0x41, 0xaf, 0xfe, 0xa4, 0x15, 0x7a,
0xde, 0x91, 0x7c, 0xab, 0xcb, 0x8b, 0x9e, 0x58, 0x53, 0xd9, 0x1b, 0x18, 0x12, 0xda, 0x4c, 0x69, 0x30, 0x7d, 0xd2, 0xa2, 0x7c, 0xa9, 0xca, 0xb3, 0x8e, 0xd8, 0xb4, 0xb2, 0x37, 0xd0, 0x27, 0x34,
0xf7, 0xa9, 0xc8, 0xeb, 0x78, 0x47, 0x77, 0xde, 0xd4, 0x17, 0x3d, 0xb1, 0x21, 0xb3, 0x31, 0x84, 0xa9, 0xd2, 0xe5, 0xa7, 0x02, 0xcb, 0xe3, 0x2d, 0xde, 0x65, 0x5d, 0x9f, 0x75, 0xc4, 0xb6, 0x99,
0x54, 0xfa, 0xb5, 0xc4, 0x22, 0xa4, 0xf2, 0x5d, 0x1f, 0xe2, 0xdf, 0xf2, 0xba, 0xc0, 0xf4, 0x7f, 0x0d, 0xc1, 0xa7, 0xc2, 0xda, 0x12, 0x0a, 0x9f, 0x8a, 0xb7, 0x5d, 0x08, 0xaf, 0x65, 0xb2, 0xc6,
0xeb, 0x36, 0xd5, 0x98, 0x77, 0x63, 0x10, 0xec, 0x8d, 0x41, 0xb8, 0x3f, 0x06, 0xd1, 0x56, 0x0c, 0xf8, 0x4f, 0xe3, 0x36, 0x6e, 0xcd, 0xdb, 0x31, 0xf0, 0x0e, 0xc6, 0xc0, 0x3f, 0x1c, 0x83, 0x60,
0x3a, 0x8b, 0x3e, 0xda, 0xb7, 0xe8, 0x78, 0xf7, 0xa2, 0x93, 0xdd, 0x8b, 0xee, 0xb7, 0x17, 0x9d, 0x27, 0x06, 0x2d, 0xa3, 0x8f, 0x0e, 0x19, 0x1d, 0xee, 0x37, 0x3a, 0xda, 0x6f, 0x74, 0xb7, 0x69,
0xce, 0xe1, 0x61, 0xd7, 0xc9, 0x43, 0xf1, 0x4f, 0x4f, 0xe0, 0xd1, 0x96, 0x8b, 0x07, 0x45, 0x1f, 0x74, 0x3c, 0x85, 0x07, 0x6d, 0x25, 0xef, 0x8a, 0x7f, 0x7c, 0x06, 0x0f, 0x77, 0x54, 0xbc, 0x93,
0xe1, 0x58, 0xe0, 0x12, 0xd5, 0x8a, 0x6a, 0xf7, 0xee, 0xf1, 0xc8, 0x36, 0x0f, 0x21, 0xec, 0x3c, 0xf4, 0x01, 0x8e, 0x05, 0x2e, 0x50, 0xe5, 0x54, 0xa9, 0x77, 0x8f, 0x47, 0xb6, 0x7d, 0x08, 0x7e,
0x84, 0xf4, 0x3b, 0x3c, 0xa8, 0xdb, 0xad, 0xc7, 0xde, 0xca, 0x6c, 0xb0, 0x2b, 0xb3, 0x1d, 0x63, 0xeb, 0x21, 0xc4, 0x5f, 0xe1, 0xa4, 0x1a, 0xb7, 0x59, 0x7b, 0x27, 0xb3, 0xde, 0xbe, 0xcc, 0xb6,
0xa3, 0x2d, 0x63, 0x9d, 0x25, 0x75, 0xeb, 0xfb, 0xdf, 0xee, 0x14, 0x1e, 0x7f, 0x2e, 0xd0, 0x96, 0x84, 0x0d, 0x76, 0x84, 0x2d, 0x25, 0xa9, 0x46, 0xdf, 0xff, 0x76, 0xaf, 0xe1, 0xf4, 0xd3, 0x1a,
0xcd, 0x30, 0x5f, 0x48, 0x52, 0x91, 0x1f, 0x92, 0x5d, 0x24, 0xfe, 0x1f, 0x74, 0x72, 0x1b, 0x00, 0x4d, 0xf1, 0xcf, 0x5a, 0x2e, 0xe1, 0xa9, 0xc0, 0x3c, 0x29, 0xfe, 0x8b, 0xcd, 0xc6, 0x70, 0x22,
0x00, 0xff, 0xff, 0xb5, 0x01, 0xb3, 0xc9, 0x95, 0x04, 0x00, 0x00, 0xaf, 0xa5, 0x4a, 0xe4, 0x3c, 0xc1, 0x73, 0x67, 0xaf, 0xfb, 0x1d, 0xb5, 0xe1, 0x79, 0x64, 0xff,
0x76, 0x67, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0xf9, 0x3c, 0xaa, 0xaf, 0xff, 0x04, 0x00, 0x00,
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment