Commit adb27358 authored by pengjun's avatar pengjun

#627 update issuance & collateralize

parent 550958aa
...@@ -284,6 +284,7 @@ func addCollateralizeQueryFlags(cmd *cobra.Command) { ...@@ -284,6 +284,7 @@ func addCollateralizeQueryFlags(cmd *cobra.Command) {
cmd.Flags().StringP("index", "i", "", "index") cmd.Flags().StringP("index", "i", "", "index")
cmd.Flags().StringP("status", "s", "", "status") cmd.Flags().StringP("status", "s", "", "status")
cmd.Flags().StringP("collateralizeIDs", "d", "", "collateralize IDs") cmd.Flags().StringP("collateralizeIDs", "d", "", "collateralize IDs")
cmd.Flags().StringP("borrowID", "b", "", "borrow ID")
} }
func CollateralizeQuery(cmd *cobra.Command, args []string) { func CollateralizeQuery(cmd *cobra.Command, args []string) {
...@@ -293,6 +294,7 @@ func CollateralizeQuery(cmd *cobra.Command, args []string) { ...@@ -293,6 +294,7 @@ func CollateralizeQuery(cmd *cobra.Command, args []string) {
statusStr, _ := cmd.Flags().GetString("status") statusStr, _ := cmd.Flags().GetString("status")
// indexstr, _ := cmd.Flags().GetString("index") // indexstr, _ := cmd.Flags().GetString("index")
collateralizeIDs, _ := cmd.Flags().GetString("collateralizeIDs") collateralizeIDs, _ := cmd.Flags().GetString("collateralizeIDs")
borrowID, _ := cmd.Flags().GetString("borrowID")
var params rpctypes.Query4Jrpc var params rpctypes.Query4Jrpc
params.Execer = pkt.CollateralizeX params.Execer = pkt.CollateralizeX
...@@ -315,25 +317,36 @@ func CollateralizeQuery(cmd *cobra.Command, args []string) { ...@@ -315,25 +317,36 @@ func CollateralizeQuery(cmd *cobra.Command, args []string) {
if collateralizeID != "" { if collateralizeID != "" {
if statusStr != "" { if statusStr != "" {
params.FuncName = "CollateralizeBorrowInfoByStatus" params.FuncName = "CollateralizeRecordByStatus"
req := &pkt.ReqCollateralizeBorrowInfoByStatus{ req := &pkt.ReqCollateralizeRecordByStatus{
CollateralizeId: collateralizeID, CollateralizeId: collateralizeID,
Status: int32(status), Status: int32(status),
} }
params.Payload = types.MustPBToJSON(req) params.Payload = types.MustPBToJSON(req)
var res pkt.RepCollateralizeBorrowInfos var res pkt.RepCollateralizeRecords
ctx := jsonrpc.NewRPCCtx(rpcLaddr, "Chain33.Query", params, &res) ctx := jsonrpc.NewRPCCtx(rpcLaddr, "Chain33.Query", params, &res)
ctx.Run() ctx.Run()
} else if address != "" { } else if address != "" {
params.FuncName = "CollateralizeBorrowInfoByAddr" params.FuncName = "CollateralizeRecordByAddr"
req := &pkt.ReqCollateralizeBorrowInfoByAddr{ req := &pkt.ReqCollateralizeRecordByAddr{
CollateralizeId: collateralizeID, CollateralizeId: collateralizeID,
Addr: address, Addr: address,
} }
params.Payload = types.MustPBToJSON(req) params.Payload = types.MustPBToJSON(req)
var res pkt.RepCollateralizeBorrowInfos var res pkt.RepCollateralizeRecords
ctx := jsonrpc.NewRPCCtx(rpcLaddr, "Chain33.Query", params, &res)
ctx.Run()
} else if borrowID != ""{
params.FuncName = "CollateralizeRecordByID"
req := &pkt.ReqCollateralizeRecord{
CollateralizeId: collateralizeID,
RecordId: borrowID,
}
params.Payload = types.MustPBToJSON(req)
var res pkt.RepCollateralizeRecord
ctx := jsonrpc.NewRPCCtx(rpcLaddr, "Chain33.Query", params, &res) ctx := jsonrpc.NewRPCCtx(rpcLaddr, "Chain33.Query", params, &res)
ctx.Run() ctx.Run()
} else { } else {
......
...@@ -59,11 +59,11 @@ func (c *Collateralize) GetDriverName() string { ...@@ -59,11 +59,11 @@ func (c *Collateralize) GetDriverName() string {
return pty.CollateralizeX return pty.CollateralizeX
} }
func (c *Collateralize) addCollateralizeID(collateralizelog *pty.ReceiptCollateralize) (kvs []*types.KeyValue) { func (c *Collateralize) addCollateralizeID(collateralizeId string, index int64) (kvs []*types.KeyValue) {
key := calcCollateralizeKey(collateralizelog.CollateralizeId, collateralizelog.Index) key := calcCollateralizeKey(collateralizeId, index)
record := &pty.CollateralizeRecord{ record := &pty.CollateralizeRecord{
CollateralizeId:collateralizelog.CollateralizeId, CollateralizeId:collateralizeId,
Index: collateralizelog.Index, Index: index,
} }
kv := &types.KeyValue{Key: key, Value: types.Encode(record)} kv := &types.KeyValue{Key: key, Value: types.Encode(record)}
...@@ -71,19 +71,19 @@ func (c *Collateralize) addCollateralizeID(collateralizelog *pty.ReceiptCollater ...@@ -71,19 +71,19 @@ func (c *Collateralize) addCollateralizeID(collateralizelog *pty.ReceiptCollater
return kvs return kvs
} }
func (c *Collateralize) deleteCollateralizeID(collateralizelog *pty.ReceiptCollateralize) (kvs []*types.KeyValue) { func (c *Collateralize) deleteCollateralizeID(collateralizeId string, index int64) (kvs []*types.KeyValue) {
key := calcCollateralizeKey(collateralizelog.CollateralizeId, collateralizelog.Index) key := calcCollateralizeKey(collateralizeId, index)
kv := &types.KeyValue{Key: key, Value: nil} kv := &types.KeyValue{Key: key, Value: nil}
kvs = append(kvs, kv) kvs = append(kvs, kv)
return kvs return kvs
} }
func (c *Collateralize) addCollateralizeStatus(collateralizelog *pty.ReceiptCollateralize) (kvs []*types.KeyValue) { func (c *Collateralize) addCollateralizeStatus(status int32, collateralizeId string, index int64) (kvs []*types.KeyValue) {
key := calcCollateralizeStatusKey(collateralizelog.Status, collateralizelog.Index) key := calcCollateralizeStatusKey(status, index)
record := &pty.CollateralizeRecord{ record := &pty.CollateralizeRecord{
CollateralizeId:collateralizelog.CollateralizeId, CollateralizeId:collateralizeId,
Index: collateralizelog.Index, Index: index,
} }
kv := &types.KeyValue{Key: key, Value: types.Encode(record)} kv := &types.KeyValue{Key: key, Value: types.Encode(record)}
...@@ -91,19 +91,19 @@ func (c *Collateralize) addCollateralizeStatus(collateralizelog *pty.ReceiptColl ...@@ -91,19 +91,19 @@ func (c *Collateralize) addCollateralizeStatus(collateralizelog *pty.ReceiptColl
return kvs return kvs
} }
func (c *Collateralize) deleteCollateralizeStatus(collateralizelog *pty.ReceiptCollateralize) (kvs []*types.KeyValue) { func (c *Collateralize) deleteCollateralizeStatus(status int32, index int64) (kvs []*types.KeyValue) {
key := calcCollateralizeStatusKey(collateralizelog.Status, collateralizelog.Index) key := calcCollateralizeStatusKey(status, index)
kv := &types.KeyValue{Key: key, Value: nil} kv := &types.KeyValue{Key: key, Value: nil}
kvs = append(kvs, kv) kvs = append(kvs, kv)
return kvs return kvs
} }
func (c *Collateralize) addCollateralizeAddr(collateralizelog *pty.ReceiptCollateralize) (kvs []*types.KeyValue) { func (c *Collateralize) addCollateralizeAddr(addr string, collateralizeId string, index int64) (kvs []*types.KeyValue) {
key := calcCollateralizeAddrKey(collateralizelog.AccountAddr, collateralizelog.Index) key := calcCollateralizeAddrKey(addr, index)
record := &pty.CollateralizeRecord{ record := &pty.CollateralizeRecord{
CollateralizeId:collateralizelog.CollateralizeId, CollateralizeId:collateralizeId,
Index: collateralizelog.Index, Index: index,
} }
kv := &types.KeyValue{Key: key, Value: types.Encode(record)} kv := &types.KeyValue{Key: key, Value: types.Encode(record)}
...@@ -111,21 +111,21 @@ func (c *Collateralize) addCollateralizeAddr(collateralizelog *pty.ReceiptCollat ...@@ -111,21 +111,21 @@ func (c *Collateralize) addCollateralizeAddr(collateralizelog *pty.ReceiptCollat
return kvs return kvs
} }
func (c *Collateralize) deleteCollateralizeAddr(collateralizelog *pty.ReceiptCollateralize) (kvs []*types.KeyValue) { func (c *Collateralize) deleteCollateralizeAddr(addr string, index int64) (kvs []*types.KeyValue) {
key := calcCollateralizeAddrKey(collateralizelog.AccountAddr, collateralizelog.Index) key := calcCollateralizeAddrKey(addr, index)
kv := &types.KeyValue{Key: key, Value: nil} kv := &types.KeyValue{Key: key, Value: nil}
kvs = append(kvs, kv) kvs = append(kvs, kv)
return kvs return kvs
} }
func (c *Collateralize) addCollateralizeRecordStatus(collateralizelog *pty.ReceiptCollateralize) (kvs []*types.KeyValue) { func (c *Collateralize) addCollateralizeRecordStatus(recordStatus int32, collateralizeId string, recordId string, index int64) (kvs []*types.KeyValue) {
key := calcCollateralizeRecordStatusKey(collateralizelog.RecordStatus, collateralizelog.Index) key := calcCollateralizeRecordStatusKey(recordStatus, index)
record := &pty.CollateralizeRecord{ record := &pty.CollateralizeRecord{
CollateralizeId:collateralizelog.CollateralizeId, CollateralizeId:collateralizeId,
Addr: collateralizelog.AccountAddr, RecordId:recordId,
Index: collateralizelog.Index, Index: index,
} }
kv := &types.KeyValue{Key: key, Value: types.Encode(record)} kv := &types.KeyValue{Key: key, Value: types.Encode(record)}
...@@ -133,8 +133,30 @@ func (c *Collateralize) addCollateralizeRecordStatus(collateralizelog *pty.Recei ...@@ -133,8 +133,30 @@ func (c *Collateralize) addCollateralizeRecordStatus(collateralizelog *pty.Recei
return kvs return kvs
} }
func (c *Collateralize) deleteCollateralizeRecordStatus(collateralizelog *pty.ReceiptCollateralize) (kvs []*types.KeyValue) { func (c *Collateralize) deleteCollateralizeRecordStatus(recordStatus int32, index int64) (kvs []*types.KeyValue) {
key := calcCollateralizeRecordStatusKey(collateralizelog.RecordStatus, collateralizelog.Index) key := calcCollateralizeRecordStatusKey(recordStatus, index)
kv := &types.KeyValue{Key: key, Value: nil}
kvs = append(kvs, kv)
return kvs
}
func (c *Collateralize) addCollateralizeRecordAddr(recordAddr string, collateralizeId string, recordId string, index int64) (kvs []*types.KeyValue) {
key := calcCollateralizeRecordAddrKey(recordAddr, index)
record := &pty.CollateralizeRecord{
CollateralizeId:collateralizeId,
RecordId:recordId,
Index: index,
}
kv := &types.KeyValue{Key: key, Value: types.Encode(record)}
kvs = append(kvs, kv)
return kvs
}
func (c *Collateralize) deleteCollateralizeRecordAddr(recordAddr string, index int64) (kvs []*types.KeyValue) {
key := calcCollateralizeRecordAddrKey(recordAddr, index)
kv := &types.KeyValue{Key: key, Value: nil} kv := &types.KeyValue{Key: key, Value: nil}
kvs = append(kvs, kv) kvs = append(kvs, kv)
......
...@@ -20,28 +20,38 @@ func (c *Collateralize) execDelLocal(tx *types.Transaction, receiptData *types.R ...@@ -20,28 +20,38 @@ func (c *Collateralize) execDelLocal(tx *types.Transaction, receiptData *types.R
switch item.Ty { switch item.Ty {
case pty.TyLogCollateralizeCreate: case pty.TyLogCollateralizeCreate:
kv := c.deleteCollateralizeStatus(&collateralizeLog) set.KV = append(set.KV, c.deleteCollateralizeStatus(collateralizeLog.Status, collateralizeLog.Index)...)
set.KV = append(set.KV, kv...) set.KV = append(set.KV, c.deleteCollateralizeAddr(collateralizeLog.CreateAddr, collateralizeLog.Index)...)
break break
case pty.TyLogCollateralizeBorrow: case pty.TyLogCollateralizeBorrow:
set.KV = append(set.KV, c.deleteCollateralizeRecordStatus(&collateralizeLog)...) set.KV = append(set.KV, c.deleteCollateralizeRecordStatus(collateralizeLog.RecordStatus, collateralizeLog.Index)...)
set.KV = append(set.KV, c.deleteCollateralizeAddr(&collateralizeLog)...) set.KV = append(set.KV, c.deleteCollateralizeRecordAddr(collateralizeLog.AccountAddr, collateralizeLog.Index)...)
break break
case pty.TyLogCollateralizeAppend: // append没有状态变化 case pty.TyLogCollateralizeAppend: // append没有状态变化
break break
case pty.TyLogCollateralizeRepay: case pty.TyLogCollateralizeRepay:
set.KV = append(set.KV, c.deleteCollateralizeRecordStatus(&collateralizeLog)...) set.KV = append(set.KV, c.addCollateralizeRecordStatus(collateralizeLog.RecordPreStatus, collateralizeLog.CollateralizeId,
set.KV = append(set.KV, c.addCollateralizeAddr(&collateralizeLog)...) collateralizeLog.RecordId, collateralizeLog.PreIndex)...)
set.KV = append(set.KV, c.deleteCollateralizeRecordStatus(collateralizeLog.RecordStatus, collateralizeLog.Index)...)
set.KV = append(set.KV, c.addCollateralizeRecordAddr(collateralizeLog.AccountAddr, collateralizeLog.CollateralizeId,
collateralizeLog.RecordId, collateralizeLog.PreIndex)...)
break break
case pty.TyLogCollateralizeFeed: case pty.TyLogCollateralizeFeed:
set.KV = append(set.KV, c.deleteCollateralizeRecordStatus(&collateralizeLog)...) set.KV = append(set.KV, c.addCollateralizeRecordStatus(collateralizeLog.RecordStatus, collateralizeLog.CollateralizeId,
if collateralizeLog.RecordStatus == pty.CollateralizeUserStatusSystemLiquidate { collateralizeLog.RecordId, collateralizeLog.PreIndex)...)
set.KV = append(set.KV, c.addCollateralizeAddr(&collateralizeLog)...) set.KV = append(set.KV, c.deleteCollateralizeRecordStatus(collateralizeLog.RecordStatus, collateralizeLog.Index)...)
set.KV = append(set.KV, c.addCollateralizeRecordAddr(collateralizeLog.AccountAddr, collateralizeLog.CollateralizeId,
collateralizeLog.RecordId, collateralizeLog.PreIndex)...)
// 如果没有被清算,需要把地址索引更新
if collateralizeLog.RecordStatus == pty.CollateralizeUserStatusWarning || collateralizeLog.RecordStatus == pty.CollateralizeUserStatusExpire {
set.KV = append(set.KV, c.deleteCollateralizeRecordAddr(collateralizeLog.AccountAddr, collateralizeLog.Index)...)
} }
break break
case pty.TyLogCollateralizeClose: case pty.TyLogCollateralizeClose:
kv := c.addCollateralizeStatus(&collateralizeLog) set.KV = append(set.KV, c.addCollateralizeStatus(pty.CollateralizeStatusCreated, collateralizeLog.CollateralizeId,
set.KV = append(set.KV, kv...) collateralizeLog.PreIndex)...)
set.KV = append(set.KV, c.addCollateralizeAddr(collateralizeLog.CreateAddr, collateralizeLog.CollateralizeId,
collateralizeLog.PreIndex)...)
break break
} }
} }
......
...@@ -21,26 +21,37 @@ func (c *Collateralize) execLocal(tx *types.Transaction, receipt *types.ReceiptD ...@@ -21,26 +21,37 @@ func (c *Collateralize) execLocal(tx *types.Transaction, receipt *types.ReceiptD
switch item.Ty { switch item.Ty {
case pty.TyLogCollateralizeCreate: case pty.TyLogCollateralizeCreate:
set.KV = append(set.KV, c.addCollateralizeStatus(&collateralizeLog)...) set.KV = append(set.KV, c.addCollateralizeStatus(collateralizeLog.Status, collateralizeLog.CollateralizeId, collateralizeLog.Index)...)
set.KV = append(set.KV, c.addCollateralizeAddr(collateralizeLog.CreateAddr, collateralizeLog.CollateralizeId, collateralizeLog.Index)...)
break break
case pty.TyLogCollateralizeBorrow: case pty.TyLogCollateralizeBorrow:
set.KV = append(set.KV, c.addCollateralizeRecordStatus(&collateralizeLog)...) set.KV = append(set.KV, c.addCollateralizeRecordStatus(collateralizeLog.RecordStatus, collateralizeLog.CollateralizeId,
set.KV = append(set.KV, c.addCollateralizeAddr(&collateralizeLog)...) collateralizeLog.RecordId, collateralizeLog.Index)...)
set.KV = append(set.KV, c.addCollateralizeRecordAddr(collateralizeLog.AccountAddr, collateralizeLog.CollateralizeId,
collateralizeLog.RecordId, collateralizeLog.Index)...)
break break
case pty.TyLogCollateralizeAppend: //append没有状态变化 case pty.TyLogCollateralizeAppend: //append没有状态变化
break break
case pty.TyLogCollateralizeRepay: case pty.TyLogCollateralizeRepay:
set.KV = append(set.KV, c.addCollateralizeRecordStatus(&collateralizeLog)...) set.KV = append(set.KV, c.deleteCollateralizeRecordStatus(collateralizeLog.RecordPreStatus, collateralizeLog.PreIndex)...)
set.KV = append(set.KV, c.deleteCollateralizeAddr(&collateralizeLog)...) set.KV = append(set.KV, c.addCollateralizeRecordStatus(collateralizeLog.RecordStatus, collateralizeLog.CollateralizeId,
collateralizeLog.RecordId, collateralizeLog.Index)...)
set.KV = append(set.KV, c.deleteCollateralizeRecordAddr(collateralizeLog.AccountAddr, collateralizeLog.PreIndex)...)
break break
case pty.TyLogCollateralizeFeed: case pty.TyLogCollateralizeFeed:
set.KV = append(set.KV, c.addCollateralizeRecordStatus(&collateralizeLog)...) set.KV = append(set.KV, c.deleteCollateralizeRecordStatus(collateralizeLog.RecordPreStatus, collateralizeLog.PreIndex)...)
if collateralizeLog.RecordStatus == pty.CollateralizeUserStatusSystemLiquidate { set.KV = append(set.KV, c.addCollateralizeRecordStatus(collateralizeLog.RecordStatus, collateralizeLog.CollateralizeId,
set.KV = append(set.KV, c.deleteCollateralizeAddr(&collateralizeLog)...) collateralizeLog.RecordId, collateralizeLog.Index)...)
set.KV = append(set.KV, c.deleteCollateralizeRecordAddr(collateralizeLog.AccountAddr, collateralizeLog.PreIndex)...)
// 如果没有被清算,需要把地址索引更新
if collateralizeLog.RecordStatus == pty.CollateralizeUserStatusWarning || collateralizeLog.RecordStatus == pty.CollateralizeUserStatusExpire {
set.KV = append(set.KV, c.addCollateralizeRecordAddr(collateralizeLog.AccountAddr, collateralizeLog.CollateralizeId,
collateralizeLog.RecordId, collateralizeLog.Index)...)
} }
break break
case pty.TyLogCollateralizeClose: case pty.TyLogCollateralizeClose:
set.KV = append(set.KV, c.deleteCollateralizeStatus(&collateralizeLog)...) set.KV = append(set.KV, c.deleteCollateralizeStatus(pty.CollateralizeStatusCreated, collateralizeLog.PreIndex)...)
set.KV = append(set.KV, c.deleteCollateralizeAddr(collateralizeLog.CreateAddr, collateralizeLog.PreIndex)...)
break break
} }
} }
......
...@@ -41,6 +41,16 @@ func calcCollateralizeLatestPriceKey() []byte { ...@@ -41,6 +41,16 @@ func calcCollateralizeLatestPriceKey() []byte {
return []byte(key) return []byte(key)
} }
func calcCollateralizeRecordAddrPrefix(addr string) []byte {
key := fmt.Sprintf("LODB-Collateralize-record-addr:%d", addr)
return []byte(key)
}
func calcCollateralizeRecordAddrKey(addr string, index int64) []byte {
key := fmt.Sprintf("LODB-Collateralize-record-addr:%d:%018d", addr, index)
return []byte(key)
}
func calcCollateralizeRecordStatusPrefix(status int32) []byte { func calcCollateralizeRecordStatusPrefix(status int32) []byte {
key := fmt.Sprintf("LODB-Collateralize-record-status:%d", status) key := fmt.Sprintf("LODB-Collateralize-record-status:%d", status)
return []byte(key) return []byte(key)
......
...@@ -80,66 +80,40 @@ func (c *Collateralize) Query_CollateralizeByAddr(req *pty.ReqCollateralizeByAdd ...@@ -80,66 +80,40 @@ func (c *Collateralize) Query_CollateralizeByAddr(req *pty.ReqCollateralizeByAdd
return ids, nil return ids, nil
} }
func (c *Collateralize) Query_CollateralizeBorrowInfoByAddr(req *pty.ReqCollateralizeBorrowInfoByAddr) (types.Message, error) { func (c *Collateralize) Query_CollateralizeRecordByID(req *pty.ReqCollateralizeRecord) (types.Message, error) {
records, err := queryCollateralizeByAddr(c.GetLocalDB(), req.Addr) issuRecord, err := queryCollateralizeRecordByID(c.GetStateDB(), req.CollateralizeId, req.RecordId)
if err != nil { if err != nil {
clog.Error("Query_CollateralizeBorrowInfoByAddr", "get collateralize record error", err) clog.Error("Query_IssuanceRecordByID", "get issuance record error", err)
return nil, err return nil, err
} }
ret := &pty.RepCollateralizeBorrowInfos{} ret := &pty.RepCollateralizeRecord{}
for _, record := range records { ret.Record = issuRecord
if record.CollateralizeId == req.CollateralizeId { return issuRecord, nil
coll, err := queryCollateralizeByID(c.GetStateDB(), record.CollateralizeId)
if err != nil {
clog.Error("Query_CollateralizeBorrowInfoByAddr", "get collateralize record error", err)
return nil, err
}
for _, borrowRecord := range coll.BorrowRecords {
if borrowRecord.AccountAddr == req.Addr {
ret.Record = append(ret.Record, borrowRecord)
}
}
for _, borrowRecord := range coll.InvalidRecords {
if borrowRecord.AccountAddr == req.Addr {
ret.Record = append(ret.Record, borrowRecord)
}
}
}
}
return nil, pty.ErrRecordNotExist
} }
func (c *Collateralize) Query_CollateralizeBorrowInfoByStatus(req *pty.ReqCollateralizeBorrowInfoByStatus) (types.Message, error) { func (c *Collateralize) Query_CollateralizeRecordByAddr(req *pty.ReqCollateralizeRecordByAddr) (types.Message, error) {
records, err := queryCollateralizeRecordByStatus(c.GetLocalDB(), req.Status) records, err := queryCollateralizeRecordByAddr(c.GetStateDB(), c.GetLocalDB(), req.Addr)
if err != nil { if err != nil {
clog.Error("Query_CollateralizeBorrowInfoByAddr", "get collateralize record error", err) clog.Error("Query_CollateralizeRecordByAddr", "get collateralize record error", err)
return nil, err return nil, err
} }
ret := &pty.RepCollateralizeBorrowInfos{} ret := &pty.RepCollateralizeRecords{}
for _, record := range records { ret.Records = records
coll, err := queryCollateralizeByID(c.GetStateDB(), record.CollateralizeId)
if err != nil {
clog.Error("Query_CollateralizeBorrowInfoByAddr", "get collateralize record error", err)
return nil, err
}
for _, borrowRecord := range coll.BorrowRecords { return ret, nil
if borrowRecord.Status == req.Status { }
ret.Record = append(ret.Record, borrowRecord)
}
}
for _, borrowRecord := range coll.InvalidRecords { func (c *Collateralize) Query_CollateralizeRecordByStatus(req *pty.ReqCollateralizeRecordByStatus) (types.Message, error) {
if borrowRecord.Status == req.Status { records, err := queryCollateralizeRecordByStatus(c.GetStateDB(), c.GetLocalDB(), req.Status)
ret.Record = append(ret.Record, borrowRecord) if err != nil {
} clog.Error("Query_CollateralizeRecordByAddr", "get collateralize record error", err)
} return nil, err
} }
ret := &pty.RepCollateralizeRecords{}
ret.Records = records
return ret, nil return ret, nil
} }
\ No newline at end of file
...@@ -18,6 +18,9 @@ message Collateralize { ...@@ -18,6 +18,9 @@ message Collateralize {
float latestLiquidationPrice = 12;//最高清算价格 float latestLiquidationPrice = 12;//最高清算价格
int64 period = 13;//借贷最大期限 int64 period = 13;//借贷最大期限
int64 latestExpireTime = 14;//最近超期时间 int64 latestExpireTime = 14;//最近超期时间
int64 index = 15;//当前索引
int64 preIndex = 16;//上一个索引
int64 createIndex = 17;//创建时的索引,用于close删除记录
} }
// 借出记录 // 借出记录
...@@ -32,6 +35,7 @@ message BorrowRecord { ...@@ -32,6 +35,7 @@ message BorrowRecord {
int64 liquidateTime = 8; //清算时间 int64 liquidateTime = 8; //清算时间
int64 expireTime = 9; //超时清算时间 int64 expireTime = 9; //超时清算时间
int32 preStatus = 10;//上一次抵押状态,用于告警恢复 int32 preStatus = 10;//上一次抵押状态,用于告警恢复
string recordId = 11;//借出id,标识一次借出记录
} }
// 资产价格记录 // 资产价格记录
...@@ -80,13 +84,15 @@ message CollateralizeBorrow { ...@@ -80,13 +84,15 @@ message CollateralizeBorrow {
// 质押清算 // 质押清算
message CollateralizeRepay { message CollateralizeRepay {
string collateralizeId = 1; //借贷期数ID string collateralizeId = 1; //借贷期数ID
int64 value = 2; //借贷价值(ccny) string recordId = 2; //借贷ID
int64 value = 3; //借贷价值(ccny)
} }
// 追加抵押物 // 追加抵押物
message CollateralizeAppend { message CollateralizeAppend {
string collateralizeId = 1; //借贷期数ID string collateralizeId = 1; //借贷期数ID
int64 collateralValue = 2; //追加价值(bty) string recordId = 2; //借贷ID
int64 collateralValue = 3; //追加价值(bty)
} }
// 喂价 // 喂价
...@@ -107,16 +113,19 @@ message ReceiptCollateralize { ...@@ -107,16 +113,19 @@ message ReceiptCollateralize {
string createAddr = 2; string createAddr = 2;
string accountAddr = 3; string accountAddr = 3;
int32 status = 4; int32 status = 4;
int32 preStatus = 5; int64 index = 5;
int64 index = 6; int32 recordStatus = 6;
int32 recordStatus = 7; int32 recordPreStatus = 7;
string recordId = 8;
int64 preIndex = 9;
} }
// exec_local 借贷记录信息 // exec_local 借贷记录信息
message CollateralizeRecord { message CollateralizeRecord {
string collateralizeId = 1; string collateralizeId = 1;
string addr = 2; string addr = 2;
int64 index = 3; string recordId = 3;
int64 index = 4;
} }
// exec_local 借贷记录信息列表 // exec_local 借贷记录信息列表
...@@ -166,18 +175,29 @@ message RepCollateralizeIDs { ...@@ -166,18 +175,29 @@ message RepCollateralizeIDs {
} }
// 根据地址和借贷ID混合查询具体借贷记录 // 根据地址和借贷ID混合查询具体借贷记录
message ReqCollateralizeBorrowInfoByAddr { message ReqCollateralizeRecordByAddr {
string collateralizeId = 1; string collateralizeId = 1;
string addr = 2; string addr = 2;
} }
// 根据状态和借贷ID混合查询具体借贷记录 // 根据状态和借贷ID混合查询具体借贷记录
message ReqCollateralizeBorrowInfoByStatus { message ReqCollateralizeRecordByStatus {
string collateralizeId = 1; string collateralizeId = 1;
int32 status = 2; int32 status = 2;
} }
// 返回借贷记录 // 返回借贷记录
message RepCollateralizeBorrowInfos { message RepCollateralizeRecords {
repeated BorrowRecord record = 1; repeated BorrowRecord records = 1;
}
// 精确查找借贷记录
message ReqCollateralizeRecord {
string collateralizeId = 1;
string recordId = 2;
}
// 返回记录
message RepCollateralizeRecord {
BorrowRecord record = 1;
} }
...@@ -11,6 +11,7 @@ import ( ...@@ -11,6 +11,7 @@ import (
_ "github.com/33cn/plugin/plugin/dapp/game" //auto gen _ "github.com/33cn/plugin/plugin/dapp/game" //auto gen
_ "github.com/33cn/plugin/plugin/dapp/guess" //auto gen _ "github.com/33cn/plugin/plugin/dapp/guess" //auto gen
_ "github.com/33cn/plugin/plugin/dapp/hashlock" //auto gen _ "github.com/33cn/plugin/plugin/dapp/hashlock" //auto gen
_ "github.com/33cn/plugin/plugin/dapp/issuance" //auto gen
_ "github.com/33cn/plugin/plugin/dapp/js" //auto gen _ "github.com/33cn/plugin/plugin/dapp/js" //auto gen
_ "github.com/33cn/plugin/plugin/dapp/lottery" //auto gen _ "github.com/33cn/plugin/plugin/dapp/lottery" //auto gen
_ "github.com/33cn/plugin/plugin/dapp/multisig" //auto gen _ "github.com/33cn/plugin/plugin/dapp/multisig" //auto gen
......
...@@ -245,7 +245,8 @@ func addIssuanceQueryFlags(cmd *cobra.Command) { ...@@ -245,7 +245,8 @@ func addIssuanceQueryFlags(cmd *cobra.Command) {
cmd.Flags().StringP("address", "a", "", "address") cmd.Flags().StringP("address", "a", "", "address")
cmd.Flags().StringP("index", "i", "", "index") cmd.Flags().StringP("index", "i", "", "index")
cmd.Flags().StringP("status", "s", "", "status") cmd.Flags().StringP("status", "s", "", "status")
cmd.Flags().StringP("issuanceIDs", "d", "", "issuance IDs") cmd.Flags().StringP("issuanceIDs", "e", "", "issuance IDs")
cmd.Flags().StringP("debtID", "d", "", "debt ID")
} }
func IssuanceQuery(cmd *cobra.Command, args []string) { func IssuanceQuery(cmd *cobra.Command, args []string) {
...@@ -255,6 +256,7 @@ func IssuanceQuery(cmd *cobra.Command, args []string) { ...@@ -255,6 +256,7 @@ func IssuanceQuery(cmd *cobra.Command, args []string) {
statusStr, _ := cmd.Flags().GetString("status") statusStr, _ := cmd.Flags().GetString("status")
// indexstr, _ := cmd.Flags().GetString("index") // indexstr, _ := cmd.Flags().GetString("index")
issuanceIDs, _ := cmd.Flags().GetString("issuanceIDs") issuanceIDs, _ := cmd.Flags().GetString("issuanceIDs")
debtID, _ := cmd.Flags().GetString("debtID")
var params rpctypes.Query4Jrpc var params rpctypes.Query4Jrpc
params.Execer = pkt.IssuanceX params.Execer = pkt.IssuanceX
...@@ -277,25 +279,36 @@ func IssuanceQuery(cmd *cobra.Command, args []string) { ...@@ -277,25 +279,36 @@ func IssuanceQuery(cmd *cobra.Command, args []string) {
if issuanceID != "" { if issuanceID != "" {
if statusStr != "" { if statusStr != "" {
params.FuncName = "IssuanceDebtInfoByStatus" params.FuncName = "IssuanceRecordsByStatus"
req := &pkt.ReqIssuanceDebtInfoByStatus{ req := &pkt.ReqIssuanceRecordsByStatus{
IssuanceId: issuanceID, IssuanceId: issuanceID,
Status: int32(status), Status: int32(status),
} }
params.Payload = types.MustPBToJSON(req) params.Payload = types.MustPBToJSON(req)
var res pkt.RepIssuanceDebtInfos var res pkt.RepIssuanceRecords
ctx := jsonrpc.NewRPCCtx(rpcLaddr, "Chain33.Query", params, &res) ctx := jsonrpc.NewRPCCtx(rpcLaddr, "Chain33.Query", params, &res)
ctx.Run() ctx.Run()
} else if address != "" { } else if address != "" {
params.FuncName = "IssuanceDebtInfoByAddr" params.FuncName = "IssuanceRecordsByAddr"
req := &pkt.ReqIssuanceDebtInfoByAddr{ req := &pkt.ReqIssuanceRecordsByAddr{
IssuanceId: issuanceID, IssuanceId: issuanceID,
Addr: address, Addr: address,
} }
params.Payload = types.MustPBToJSON(req) params.Payload = types.MustPBToJSON(req)
var res pkt.RepIssuanceDebtInfos var res pkt.RepIssuanceDebtInfo
ctx := jsonrpc.NewRPCCtx(rpcLaddr, "Chain33.Query", params, &res)
ctx.Run()
} else if debtID != ""{
params.FuncName = "IssuanceRecordByID"
req := &pkt.ReqIssuanceDebtInfo{
IssuanceId: issuanceID,
DebtId: debtID,
}
params.Payload = types.MustPBToJSON(req)
var res pkt.RepIssuanceCurrentInfo
ctx := jsonrpc.NewRPCCtx(rpcLaddr, "Chain33.Query", params, &res) ctx := jsonrpc.NewRPCCtx(rpcLaddr, "Chain33.Query", params, &res)
ctx.Run() ctx.Run()
} else { } else {
...@@ -309,14 +322,6 @@ func IssuanceQuery(cmd *cobra.Command, args []string) { ...@@ -309,14 +322,6 @@ func IssuanceQuery(cmd *cobra.Command, args []string) {
ctx := jsonrpc.NewRPCCtx(rpcLaddr, "Chain33.Query", params, &res) ctx := jsonrpc.NewRPCCtx(rpcLaddr, "Chain33.Query", params, &res)
ctx.Run() ctx.Run()
} }
} else if address != "" {
params.FuncName = "IssuanceByAddr"
req := &pkt.ReqIssuanceByAddr{Addr: address}
params.Payload = types.MustPBToJSON(req)
var res pkt.RepIssuanceIDs
ctx := jsonrpc.NewRPCCtx(rpcLaddr, "Chain33.Query", params, &res)
ctx.Run()
} else if statusStr != "" { } else if statusStr != "" {
params.FuncName = "IssuanceByStatus" params.FuncName = "IssuanceByStatus"
......
...@@ -12,34 +12,40 @@ import ( ...@@ -12,34 +12,40 @@ import (
func (c *Issuance) execDelLocal(tx *types.Transaction, receiptData *types.ReceiptData) (*types.LocalDBSet, error) { func (c *Issuance) execDelLocal(tx *types.Transaction, receiptData *types.ReceiptData) (*types.LocalDBSet, error) {
set := &types.LocalDBSet{} set := &types.LocalDBSet{}
for _, item := range receiptData.Logs { for _, item := range receiptData.Logs {
var IssuanceLog pty.ReceiptIssuance var issuanceLog pty.ReceiptIssuance
err := types.Decode(item.Log, &IssuanceLog) err := types.Decode(item.Log, &issuanceLog)
if err != nil { if err != nil {
return nil, err return nil, err
} }
switch item.Ty { switch item.Ty {
case pty.TyLogIssuanceCreate: case pty.TyLogIssuanceCreate:
kv := c.deleteIssuanceStatus(&IssuanceLog) set.KV = append(set.KV, c.deleteIssuanceStatus(issuanceLog.Status, issuanceLog.Index)...)
set.KV = append(set.KV, kv...)
break break
case pty.TyLogIssuanceDebt: case pty.TyLogIssuanceDebt:
set.KV = append(set.KV, c.deleteIssuanceRecordStatus(&IssuanceLog)...) set.KV = append(set.KV, c.deleteIssuanceRecordStatus(issuanceLog.RecordStatus, issuanceLog.Index)...)
set.KV = append(set.KV, c.deleteIssuanceAddr(&IssuanceLog)...) set.KV = append(set.KV, c.deleteIssuanceRecordAddr(issuanceLog.AccountAddr, issuanceLog.Index)...)
break break
case pty.TyLogIssuanceRepay: case pty.TyLogIssuanceRepay:
set.KV = append(set.KV, c.deleteIssuanceRecordStatus(&IssuanceLog)...) set.KV = append(set.KV, c.addIssuanceRecordStatus(issuanceLog.RecordPreStatus, issuanceLog.AccountAddr, issuanceLog.PreIndex,
set.KV = append(set.KV, c.addIssuanceAddr(&IssuanceLog)...) issuanceLog.DebtId, issuanceLog.IssuanceId)...)
set.KV = append(set.KV, c.deleteIssuanceRecordStatus(issuanceLog.RecordStatus, issuanceLog.Index)...)
set.KV = append(set.KV, c.addIssuanceRecordAddr(issuanceLog.AccountAddr, issuanceLog.PreIndex, issuanceLog.DebtId,
issuanceLog.IssuanceId)...)
break break
case pty.TyLogIssuanceFeed: case pty.TyLogIssuanceFeed:
set.KV = append(set.KV, c.deleteIssuanceRecordStatus(&IssuanceLog)...) set.KV = append(set.KV, c.addIssuanceRecordStatus(issuanceLog.RecordStatus, issuanceLog.AccountAddr, issuanceLog.PreIndex,
if IssuanceLog.RecordStatus == pty.IssuanceUserStatusSystemLiquidate { issuanceLog.DebtId, issuanceLog.IssuanceId)...)
set.KV = append(set.KV, c.addIssuanceAddr(&IssuanceLog)...) set.KV = append(set.KV, c.deleteIssuanceRecordStatus(issuanceLog.RecordStatus, issuanceLog.Index)...)
set.KV = append(set.KV, c.addIssuanceRecordAddr(issuanceLog.AccountAddr, issuanceLog.PreIndex, issuanceLog.DebtId,
issuanceLog.IssuanceId)...)
// 如果没有被清算,需要把地址索引更新
if issuanceLog.RecordStatus == pty.IssuanceUserStatusWarning || issuanceLog.RecordStatus == pty.IssuanceUserStatusExpire {
set.KV = append(set.KV, c.deleteIssuanceRecordAddr(issuanceLog.AccountAddr, issuanceLog.Index)...)
} }
break break
case pty.TyLogIssuanceClose: case pty.TyLogIssuanceClose:
kv := c.addIssuanceStatus(&IssuanceLog) set.KV = append(set.KV, c.addIssuanceStatus(pty.IssuanceStatusCreated, issuanceLog.PreIndex, issuanceLog.IssuanceId)...)
set.KV = append(set.KV, kv...)
break break
} }
} }
......
...@@ -13,32 +13,41 @@ import ( ...@@ -13,32 +13,41 @@ import (
func (c *Issuance) execLocal(tx *types.Transaction, receipt *types.ReceiptData) (*types.LocalDBSet, error) { func (c *Issuance) execLocal(tx *types.Transaction, receipt *types.ReceiptData) (*types.LocalDBSet, error) {
set := &types.LocalDBSet{} set := &types.LocalDBSet{}
for _, item := range receipt.Logs { for _, item := range receipt.Logs {
var IssuanceLog pty.ReceiptIssuance var issuanceLog pty.ReceiptIssuance
err := types.Decode(item.Log, &IssuanceLog) err := types.Decode(item.Log, &issuanceLog)
if err != nil { if err != nil {
return nil, err return nil, err
} }
switch item.Ty { switch item.Ty {
case pty.TyLogIssuanceCreate: case pty.TyLogIssuanceCreate:
set.KV = append(set.KV, c.addIssuanceStatus(&IssuanceLog)...) set.KV = append(set.KV, c.addIssuanceStatus(issuanceLog.Status, issuanceLog.Index, issuanceLog.IssuanceId)...)
break break
case pty.TyLogIssuanceDebt: case pty.TyLogIssuanceDebt:
set.KV = append(set.KV, c.addIssuanceRecordStatus(&IssuanceLog)...) set.KV = append(set.KV, c.addIssuanceRecordStatus(issuanceLog.RecordStatus, issuanceLog.AccountAddr, issuanceLog.Index,
set.KV = append(set.KV, c.addIssuanceAddr(&IssuanceLog)...) issuanceLog.DebtId, issuanceLog.IssuanceId)...)
set.KV = append(set.KV, c.addIssuanceRecordAddr(issuanceLog.AccountAddr, issuanceLog.Index, issuanceLog.DebtId,
issuanceLog.IssuanceId)...)
break break
case pty.TyLogIssuanceRepay: case pty.TyLogIssuanceRepay:
set.KV = append(set.KV, c.addIssuanceRecordStatus(&IssuanceLog)...) set.KV = append(set.KV, c.deleteIssuanceRecordStatus(issuanceLog.RecordPreStatus, issuanceLog.PreIndex)...)
set.KV = append(set.KV, c.deleteIssuanceAddr(&IssuanceLog)...) set.KV = append(set.KV, c.addIssuanceRecordStatus(issuanceLog.RecordStatus, issuanceLog.AccountAddr, issuanceLog.Index,
issuanceLog.DebtId, issuanceLog.IssuanceId)...)
set.KV = append(set.KV, c.deleteIssuanceRecordAddr(issuanceLog.AccountAddr, issuanceLog.PreIndex)...)
break break
case pty.TyLogIssuanceFeed: case pty.TyLogIssuanceFeed:
set.KV = append(set.KV, c.addIssuanceRecordStatus(&IssuanceLog)...) set.KV = append(set.KV, c.deleteIssuanceRecordStatus(issuanceLog.RecordPreStatus, issuanceLog.PreIndex)...)
if IssuanceLog.RecordStatus == pty.IssuanceUserStatusSystemLiquidate { set.KV = append(set.KV, c.addIssuanceRecordStatus(issuanceLog.RecordStatus, issuanceLog.AccountAddr, issuanceLog.Index,
set.KV = append(set.KV, c.deleteIssuanceAddr(&IssuanceLog)...) issuanceLog.DebtId, issuanceLog.IssuanceId)...)
set.KV = append(set.KV, c.deleteIssuanceRecordAddr(issuanceLog.AccountAddr, issuanceLog.PreIndex)...)
// 如果没有被清算,需要把地址索引更新
if issuanceLog.RecordStatus == pty.IssuanceUserStatusWarning || issuanceLog.RecordStatus == pty.IssuanceUserStatusExpire {
set.KV = append(set.KV, c.addIssuanceRecordAddr(issuanceLog.AccountAddr, issuanceLog.Index, issuanceLog.DebtId,
issuanceLog.IssuanceId)...)
} }
break break
case pty.TyLogIssuanceClose: case pty.TyLogIssuanceClose:
set.KV = append(set.KV, c.deleteIssuanceStatus(&IssuanceLog)...) set.KV = append(set.KV, c.deleteIssuanceStatus(issuanceLog.Status, issuanceLog.PreIndex)...)
break break
} }
} }
......
...@@ -59,11 +59,11 @@ func (c *Issuance) GetDriverName() string { ...@@ -59,11 +59,11 @@ func (c *Issuance) GetDriverName() string {
return pty.IssuanceX return pty.IssuanceX
} }
func (c *Issuance) addIssuanceID(issuancelog *pty.ReceiptIssuance) (kvs []*types.KeyValue) { func (c *Issuance) addIssuanceID(index int64, issuanceId string) (kvs []*types.KeyValue) {
key := calcIssuanceKey(issuancelog.IssuanceId, issuancelog.Index) key := calcIssuanceKey(issuanceId, index)
record := &pty.IssuanceRecord{ record := &pty.IssuanceRecord{
IssuanceId:issuancelog.IssuanceId, IssuanceId:issuanceId,
Index: issuancelog.Index, Index: index,
} }
kv := &types.KeyValue{Key: key, Value: types.Encode(record)} kv := &types.KeyValue{Key: key, Value: types.Encode(record)}
...@@ -71,19 +71,19 @@ func (c *Issuance) addIssuanceID(issuancelog *pty.ReceiptIssuance) (kvs []*types ...@@ -71,19 +71,19 @@ func (c *Issuance) addIssuanceID(issuancelog *pty.ReceiptIssuance) (kvs []*types
return kvs return kvs
} }
func (c *Issuance) deleteIssuanceID(issuancelog *pty.ReceiptIssuance) (kvs []*types.KeyValue) { func (c *Issuance) deleteIssuanceID(index int64, issuanceId string) (kvs []*types.KeyValue) {
key := calcIssuanceKey(issuancelog.IssuanceId, issuancelog.Index) key := calcIssuanceKey(issuanceId, index)
kv := &types.KeyValue{Key: key, Value: nil} kv := &types.KeyValue{Key: key, Value: nil}
kvs = append(kvs, kv) kvs = append(kvs, kv)
return kvs return kvs
} }
func (c *Issuance) addIssuanceStatus(issuancelog *pty.ReceiptIssuance) (kvs []*types.KeyValue) { func (c *Issuance) addIssuanceStatus(status int32, index int64, issuanceId string) (kvs []*types.KeyValue) {
key := calcIssuanceStatusKey(issuancelog.Status, issuancelog.Index) key := calcIssuanceStatusKey(status, index)
record := &pty.IssuanceRecord{ record := &pty.IssuanceRecord{
IssuanceId:issuancelog.IssuanceId, IssuanceId:issuanceId,
Index: issuancelog.Index, Index: index,
} }
kv := &types.KeyValue{Key: key, Value: types.Encode(record)} kv := &types.KeyValue{Key: key, Value: types.Encode(record)}
...@@ -91,19 +91,20 @@ func (c *Issuance) addIssuanceStatus(issuancelog *pty.ReceiptIssuance) (kvs []*t ...@@ -91,19 +91,20 @@ func (c *Issuance) addIssuanceStatus(issuancelog *pty.ReceiptIssuance) (kvs []*t
return kvs return kvs
} }
func (c *Issuance) deleteIssuanceStatus(issuancelog *pty.ReceiptIssuance) (kvs []*types.KeyValue) { func (c *Issuance) deleteIssuanceStatus(status int32, index int64) (kvs []*types.KeyValue) {
key := calcIssuanceStatusKey(issuancelog.Status, issuancelog.Index) key := calcIssuanceStatusKey(status, index)
kv := &types.KeyValue{Key: key, Value: nil} kv := &types.KeyValue{Key: key, Value: nil}
kvs = append(kvs, kv) kvs = append(kvs, kv)
return kvs return kvs
} }
func (c *Issuance) addIssuanceAddr(issuancelog *pty.ReceiptIssuance) (kvs []*types.KeyValue) { func (c *Issuance) addIssuanceRecordAddr(accountAddr string, index int64, debtId string, issuanceId string) (kvs []*types.KeyValue) {
key := calcIssuanceAddrKey(issuancelog.AccountAddr, issuancelog.Index) key := calcIssuanceRecordAddrKey(accountAddr, index)
record := &pty.IssuanceRecord{ record := &pty.IssuanceRecord{
IssuanceId:issuancelog.IssuanceId, IssuanceId:issuanceId,
Index: issuancelog.Index, DebtId: debtId,
Index: index,
} }
kv := &types.KeyValue{Key: key, Value: types.Encode(record)} kv := &types.KeyValue{Key: key, Value: types.Encode(record)}
...@@ -111,21 +112,22 @@ func (c *Issuance) addIssuanceAddr(issuancelog *pty.ReceiptIssuance) (kvs []*typ ...@@ -111,21 +112,22 @@ func (c *Issuance) addIssuanceAddr(issuancelog *pty.ReceiptIssuance) (kvs []*typ
return kvs return kvs
} }
func (c *Issuance) deleteIssuanceAddr(issuancelog *pty.ReceiptIssuance) (kvs []*types.KeyValue) { func (c *Issuance) deleteIssuanceRecordAddr(accountAddr string, index int64) (kvs []*types.KeyValue) {
key := calcIssuanceAddrKey(issuancelog.AccountAddr, issuancelog.Index) key := calcIssuanceRecordAddrKey(accountAddr, index)
kv := &types.KeyValue{Key: key, Value: nil} kv := &types.KeyValue{Key: key, Value: nil}
kvs = append(kvs, kv) kvs = append(kvs, kv)
return kvs return kvs
} }
func (c *Issuance) addIssuanceRecordStatus(issuancelog *pty.ReceiptIssuance) (kvs []*types.KeyValue) { func (c *Issuance) addIssuanceRecordStatus(recordStatus int32, accountAddr string, index int64, debtId string, issuanceId string) (kvs []*types.KeyValue) {
key := calcIssuanceRecordStatusKey(issuancelog.RecordStatus, issuancelog.Index) key := calcIssuanceRecordStatusKey(recordStatus, index)
record := &pty.IssuanceRecord{ record := &pty.IssuanceRecord{
IssuanceId:issuancelog.IssuanceId, IssuanceId:issuanceId,
Addr: issuancelog.AccountAddr, DebtId: debtId,
Index: issuancelog.Index, Addr: accountAddr,
Index: index,
} }
kv := &types.KeyValue{Key: key, Value: types.Encode(record)} kv := &types.KeyValue{Key: key, Value: types.Encode(record)}
...@@ -133,8 +135,8 @@ func (c *Issuance) addIssuanceRecordStatus(issuancelog *pty.ReceiptIssuance) (kv ...@@ -133,8 +135,8 @@ func (c *Issuance) addIssuanceRecordStatus(issuancelog *pty.ReceiptIssuance) (kv
return kvs return kvs
} }
func (c *Issuance) deleteIssuanceRecordStatus(issuancelog *pty.ReceiptIssuance) (kvs []*types.KeyValue) { func (c *Issuance) deleteIssuanceRecordStatus(status int32, index int64) (kvs []*types.KeyValue) {
key := calcIssuanceRecordStatusKey(issuancelog.RecordStatus, issuancelog.Index) key := calcIssuanceRecordStatusKey(status, index)
kv := &types.KeyValue{Key: key, Value: nil} kv := &types.KeyValue{Key: key, Value: nil}
kvs = append(kvs, kv) kvs = append(kvs, kv)
......
This diff is collapsed.
...@@ -21,13 +21,13 @@ func calcIssuanceStatusKey(status int32, index int64) []byte { ...@@ -21,13 +21,13 @@ func calcIssuanceStatusKey(status int32, index int64) []byte {
return []byte(key) return []byte(key)
} }
func calcIssuanceAddrPrefix(addr string) []byte { func calcIssuanceRecordAddrPrefix(addr string) []byte {
key := fmt.Sprintf("LODB-Issuance-addr:%s", addr) key := fmt.Sprintf("LODB-Issuance-record-addr:%s", addr)
return []byte(key) return []byte(key)
} }
func calcIssuanceAddrKey(addr string, index int64) []byte { func calcIssuanceRecordAddrKey(addr string, index int64) []byte {
key := fmt.Sprintf("LODB-Issuance-addr:%s:%018d", addr, index) key := fmt.Sprintf("LODB-Issuance-record-addr:%s:%018d", addr, index)
return []byte(key) return []byte(key)
} }
...@@ -41,8 +41,8 @@ func calcIssuanceLatestPriceKey() []byte { ...@@ -41,8 +41,8 @@ func calcIssuanceLatestPriceKey() []byte {
return []byte(key) return []byte(key)
} }
func calcIssuanceRecordStatusPrefix(status int32) []byte { func calcIssuanceRecordStatusPrefix(status string) []byte {
key := fmt.Sprintf("LODB-Issuance-record-status:%d", status) key := fmt.Sprintf("LODB-Issuance-record-status:%s", status)
return []byte(key) return []byte(key)
} }
......
...@@ -61,81 +61,38 @@ func (c *Issuance) Query_IssuanceByStatus(req *pty.ReqIssuanceByStatus) (types.M ...@@ -61,81 +61,38 @@ func (c *Issuance) Query_IssuanceByStatus(req *pty.ReqIssuanceByStatus) (types.M
return ids, nil return ids, nil
} }
func (c *Issuance) Query_IssuanceByAddr(req *pty.ReqIssuanceByAddr) (types.Message, error) { func (c *Issuance) Query_IssuanceRecordByID(req *pty.ReqIssuanceDebtInfo) (types.Message, error) {
ids := &pty.RepIssuanceIDs{} issuRecord, err := queryIssuanceRecordByID(c.GetStateDB(), req.IssuanceId, req.DebtId)
issuIDRecords, err := queryIssuanceByAddr(c.GetLocalDB(), req.Addr)
if err != nil { if err != nil {
clog.Error("Query_IssuanceByAddr", "get issuance record error", err) clog.Error("Query_IssuanceRecordByID", "get issuance record error", err)
return nil, err return nil, err
} }
for _, record := range issuIDRecords { ret := &pty.RepIssuanceDebtInfo{}
ids.IDs = append(ids.IDs, record.IssuanceId) ret.Record = issuRecord
} return issuRecord, nil
return ids, nil
} }
func (c *Issuance) Query_IssuanceDebtInfoByAddr(req *pty.ReqIssuanceDebtInfoByAddr) (types.Message, error) { func (c *Issuance) Query_IssuanceRecordsByAddr(req *pty.ReqIssuanceRecordsByAddr) (types.Message, error) {
records, err := queryIssuanceByAddr(c.GetLocalDB(), req.Addr) records, err := queryIssuanceRecordByAddr(c.GetStateDB(), c.GetLocalDB(), req.Addr)
if err != nil { if err != nil {
clog.Error("Query_IssuanceDebtInfoByAddr", "get issuance record error", err) clog.Error("Query_IssuanceDebtInfoByAddr", "get issuance record error", err)
return nil, err return nil, err
} }
ret := &pty.RepIssuanceDebtInfos{} ret := &pty.RepIssuanceRecords{}
for _, record := range records { ret.Records = records
if record.IssuanceId == req.IssuanceId { return ret, nil
issu, err := queryIssuanceByID(c.GetStateDB(), record.IssuanceId)
if err != nil {
clog.Error("Query_IssuanceDebtInfoByAddr", "get issuance record error", err)
return nil, err
}
for _, borrowRecord := range issu.DebtRecords {
if borrowRecord.AccountAddr == req.Addr {
ret.Record = append(ret.Record, borrowRecord)
}
}
for _, borrowRecord := range issu.InvalidRecords {
if borrowRecord.AccountAddr == req.Addr {
ret.Record = append(ret.Record, borrowRecord)
}
}
}
}
return nil, pty.ErrRecordNotExist
} }
func (c *Issuance) Query_IssuanceDebtInfoByStatus(req *pty.ReqIssuanceDebtInfoByStatus) (types.Message, error) { func (c *Issuance) Query_IssuanceRecordsByStatus(req *pty.ReqIssuanceRecordsByStatus) (types.Message, error) {
records, err := queryIssuanceRecordByStatus(c.GetLocalDB(), req.Status) records, err := queryIssuanceRecordsByStatus(c.GetStateDB(), c.GetLocalDB(), req.Status)
if err != nil { if err != nil {
clog.Error("Query_IssuanceDebtInfoByAddr", "get issuance record error", err) clog.Error("Query_IssuanceDebtInfoByAddr", "get issuance record error", err)
return nil, err return nil, err
} }
ret := &pty.RepIssuanceDebtInfos{} ret := &pty.RepIssuanceRecords{}
for _, record := range records { ret.Records = records
issu, err := queryIssuanceByID(c.GetStateDB(), record.IssuanceId)
if err != nil {
clog.Error("Query_IssuanceDebtInfoByAddr", "get issuance record error", err)
return nil, err
}
for _, borrowRecord := range issu.DebtRecords {
if borrowRecord.Status == req.Status {
ret.Record = append(ret.Record, borrowRecord)
}
}
for _, borrowRecord := range issu.InvalidRecords {
if borrowRecord.Status == req.Status {
ret.Record = append(ret.Record, borrowRecord)
}
}
}
return ret, nil return ret, nil
} }
\ No newline at end of file
...@@ -19,6 +19,9 @@ message Issuance { ...@@ -19,6 +19,9 @@ message Issuance {
int64 createTime = 13;//创建时间 int64 createTime = 13;//创建时间
int64 balance = 14;//剩余可发行ccny int64 balance = 14;//剩余可发行ccny
string issuerAddr = 15;//发行地址 string issuerAddr = 15;//发行地址
int64 index = 16;//当前索引
int64 preIndex = 17;//上级索引
int64 createIndex = 18;//创建索引,用于close删除状态
} }
// 抵押记录 // 抵押记录
...@@ -33,10 +36,11 @@ message DebtRecord { ...@@ -33,10 +36,11 @@ message DebtRecord {
int64 liquidateTime = 8; //清算时间 int64 liquidateTime = 8; //清算时间
int64 expireTime = 9; //超时清算时间 int64 expireTime = 9; //超时清算时间
int32 preStatus = 10;//上一次抵押状态,用于告警恢复 int32 preStatus = 10;//上一次抵押状态,用于告警恢复
string debtId = 11;//借贷id
} }
// 资产价格记录 // 资产价格记录
message AssetPriceRecord { message IssuanceAssetPriceRecord {
int64 recordTime = 1; //价格记录时间 int64 recordTime = 1; //价格记录时间
float btyPrice = 2; //bty价格 float btyPrice = 2; //bty价格
} }
...@@ -68,13 +72,14 @@ message IssuanceCreate { ...@@ -68,13 +72,14 @@ message IssuanceCreate {
// 质押借出 // 质押借出
message IssuanceDebt { message IssuanceDebt {
string IssuanceId = 1; //借贷期数ID string issuanceId = 1; //借贷期数ID
int64 value = 2; //借贷价值(ccny) int64 value = 2; //借贷价值(ccny)
} }
// 质押清算 // 质押清算
message IssuanceRepay { message IssuanceRepay {
string IssuanceId = 1; //借贷期数ID string issuanceId = 1; //借贷期数ID
string debtId = 2; //借贷ID
} }
// 喂价 // 喂价
...@@ -86,24 +91,27 @@ message IssuanceFeed { ...@@ -86,24 +91,27 @@ message IssuanceFeed {
// 借贷关闭 // 借贷关闭
message IssuanceClose { message IssuanceClose {
string IssuanceId = 1; //借贷期数ID string issuanceId = 1; //借贷期数ID
} }
// exec_local 借贷信息 // exec_local 借贷信息
message ReceiptIssuance { message ReceiptIssuance {
string IssuanceId = 1; string issuanceId = 1;
string accountAddr = 2; string accountAddr = 2;
int32 status = 3; int32 status = 3;
int32 preStatus = 4; string debtId = 4;
int64 index = 5; int32 recordStatus = 5;
int32 recordStatus = 6; int32 recordPreStatus = 6;
int64 index = 7;
int64 preIndex = 8;
} }
// exec_local 借贷记录信息 // exec_local 借贷记录信息
message IssuanceRecord { message IssuanceRecord {
string IssuanceId = 1; string issuanceId = 1;
string addr = 2; string addr = 2;
int64 index = 3; string debtId = 3;
int64 index = 4;
} }
// exec_local 借贷记录信息列表 // exec_local 借贷记录信息列表
...@@ -113,7 +121,7 @@ message IssuanceRecords { ...@@ -113,7 +121,7 @@ message IssuanceRecords {
// 根据ID查询一期借贷信息 // 根据ID查询一期借贷信息
message ReqIssuanceInfo { message ReqIssuanceInfo {
string IssuanceId = 1; string issuanceId = 1;
} }
// 返回一期借贷信息 // 返回一期借贷信息
...@@ -129,7 +137,7 @@ message RepIssuanceCurrentInfo { ...@@ -129,7 +137,7 @@ message RepIssuanceCurrentInfo {
// 根据ID列表查询多期借贷信息 // 根据ID列表查询多期借贷信息
message ReqIssuanceInfos { message ReqIssuanceInfos {
repeated string IssuanceIds = 1; repeated string issuanceIds = 1;
} }
// 返回多期借贷信息 // 返回多期借贷信息
...@@ -137,34 +145,40 @@ message RepIssuanceCurrentInfos { ...@@ -137,34 +145,40 @@ message RepIssuanceCurrentInfos {
repeated RepIssuanceCurrentInfo infos = 1; repeated RepIssuanceCurrentInfo infos = 1;
} }
// 根据借贷状态查询 // 根据发行状态查询
message ReqIssuanceByStatus { message ReqIssuanceByStatus {
int32 status = 1; int32 status = 1;
} }
// 根据用户地址查询
message ReqIssuanceByAddr {
string addr = 1;
}
// 返回借贷ID列表 // 返回借贷ID列表
message RepIssuanceIDs { message RepIssuanceIDs {
repeated string IDs = 1; repeated string IDs = 1;
} }
// 根据地址和借贷ID混合查询具体借贷记录 // 根据用户地址查询发行记录
message ReqIssuanceDebtInfoByAddr { message ReqIssuanceRecordsByAddr {
string IssuanceId = 1; string issuanceId = 1;
string addr = 2; string addr = 2;
} }
// 根据状态和借贷ID混合查询具体借贷记录 // 根据状态查询发行记录
message ReqIssuanceDebtInfoByStatus { message ReqIssuanceRecordsByStatus {
string IssuanceId = 1; string issuanceId = 1;
int32 status = 2; int32 status = 2;
} }
// 返回借贷记录 // 返回记录列表
message RepIssuanceDebtInfos { message RepIssuanceRecords {
repeated DebtRecord record = 1; repeated DebtRecord records = 1;
}
// 精确查找发行记录
message ReqIssuanceDebtInfo {
string issuanceId = 1;
string debtId = 2;
}
// 返回记录
message RepIssuanceDebtInfo {
DebtRecord record = 1;
} }
This diff is collapsed.
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