Commit adb27358 authored by pengjun's avatar pengjun

#627 update issuance & collateralize

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