Commit ebffcd28 authored by pengjun's avatar pengjun

#627 update issuance

parent adb27358
...@@ -258,7 +258,7 @@ func CollateralizeManage(cmd *cobra.Command, args []string) { ...@@ -258,7 +258,7 @@ func CollateralizeManage(cmd *cobra.Command, args []string) {
params := &rpctypes.CreateTxIn{ params := &rpctypes.CreateTxIn{
Execer: types.ExecName(pkt.CollateralizeX), Execer: types.ExecName(pkt.CollateralizeX),
ActionName: "CollateralizeManage", ActionName: "CollateralizeManage",
Payload: []byte(fmt.Sprintf("{\"debtCeiling\":%d, \"liquidationRatio\":%f, \"stabilityFeeRatio\":%f, \"period\":%s,}", Payload: []byte(fmt.Sprintf("{\"debtCeiling\":%d, \"liquidationRatio\":%f, \"stabilityFeeRatio\":%f, \"period\":%s}",
debtCeiling, liquidationRatio, stabilityFeeRatio, period)), debtCeiling, liquidationRatio, stabilityFeeRatio, period)),
} }
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
package executor package executor
import ( import (
"fmt"
"github.com/33cn/chain33/account" "github.com/33cn/chain33/account"
"github.com/33cn/chain33/common" "github.com/33cn/chain33/common"
dbm "github.com/33cn/chain33/common/db" dbm "github.com/33cn/chain33/common/db"
...@@ -62,13 +63,13 @@ func Key(id string) (key []byte) { ...@@ -62,13 +63,13 @@ func Key(id string) (key []byte) {
// Key for CollateralizeConfig // Key for CollateralizeConfig
func ConfigKey() (key []byte) { func ConfigKey() (key []byte) {
key = append(key, []byte("mavl-"+pty.CollateralizeX+"config")...) key = append(key, []byte("mavl-"+pty.CollateralizeX+"-config")...)
return key return key
} }
// Key for CollateralizeAddrConfig // Key for CollateralizeAddrConfig
func AddrKey() (key []byte) { func AddrKey() (key []byte) {
key = append(key, []byte("mavl-"+issuanceE.IssuanceX+"addr")...) key = append(key, []byte("mavl-"+issuanceE.IssuanceX+"-addr")...)
return key return key
} }
...@@ -274,30 +275,22 @@ func (action *Action) getCollateralizeConfig() (*pty.CollateralizeManage, error) ...@@ -274,30 +275,22 @@ func (action *Action) getCollateralizeConfig() (*pty.CollateralizeManage, error)
} }
func (action *Action) getSuperAddr() []string { func isSuperAddr(addr string, db dbm.KV) bool {
data, err := action.db.Get(AddrKey()) data, err := db.Get(AddrKey())
if err != nil { if err != nil {
clog.Error("getSuperAddr", "error", err) clog.Error("getSuperAddr", "error", err)
return nil return false
} }
var addrStore pty.CollateralizeAddr var item types.ConfigItem
err = types.Decode(data, &addrStore) err = types.Decode(data, &item)
if err != nil { if err != nil {
clog.Debug("getSuperAddr", "decode", err) clog.Error("isSuperAddr", "Decode", data)
return nil
}
return addrStore.SuperAddrs
}
func isSuperAddr(super []string, addr string) bool {
if super == nil || len(super) == 0 {
return false return false
} }
for _, superAddr := range super { for _, op := range item.GetArr().Value {
if superAddr == addr { if op == addr {
return true return true
} }
} }
...@@ -311,8 +304,7 @@ func (action *Action) CollateralizeCreate(create *pty.CollateralizeCreate) (*typ ...@@ -311,8 +304,7 @@ func (action *Action) CollateralizeCreate(create *pty.CollateralizeCreate) (*typ
var kv []*types.KeyValue var kv []*types.KeyValue
var receipt *types.Receipt var receipt *types.Receipt
superAddr := action.getSuperAddr() if !isSuperAddr(action.fromaddr, action.db) {
if !isSuperAddr(superAddr, action.fromaddr) {
clog.Error("CollateralizeCreate", "error", "CollateralizeCreate need super address") clog.Error("CollateralizeCreate", "error", "CollateralizeCreate need super address")
return nil, pty.ErrPermissionDeny return nil, pty.ErrPermissionDeny
} }
...@@ -332,7 +324,7 @@ func (action *Action) CollateralizeCreate(create *pty.CollateralizeCreate) (*typ ...@@ -332,7 +324,7 @@ func (action *Action) CollateralizeCreate(create *pty.CollateralizeCreate) (*typ
} }
// 冻结ccny // 冻结ccny
receipt, err = action.tokenAccount.ExecFrozen(action.fromaddr, action.execaddr, create.TotalBalance) receipt, err = action.tokenAccount.ExecFrozen(action.fromaddr, action.execaddr, create.TotalBalance * Coin)
if err != nil { if err != nil {
clog.Error("CollateralizeCreate.Frozen", "addr", action.fromaddr, "execaddr", action.execaddr, "amount", create.TotalBalance) clog.Error("CollateralizeCreate.Frozen", "addr", action.fromaddr, "execaddr", action.execaddr, "amount", create.TotalBalance)
return nil, err return nil, err
...@@ -402,14 +394,14 @@ func calcLiquidationPrice(value int64, colValue int64) float32 { ...@@ -402,14 +394,14 @@ func calcLiquidationPrice(value int64, colValue int64) float32 {
func (action *Action)getLatestPrice(db dbm.KV, assetType int32) (float32, error) { func (action *Action)getLatestPrice(db dbm.KV, assetType int32) (float32, error) {
data, err := db.Get(calcCollateralizeLatestPriceKey()) data, err := db.Get(calcCollateralizeLatestPriceKey())
if err != nil { if err != nil {
clog.Debug("getLatestPrice", "get", err) clog.Error("getLatestPrice", "get", err)
return -1, err return -1, err
} }
var price pty.AssetPriceRecord var price pty.AssetPriceRecord
//decode //decode
err = types.Decode(data, &price) err = types.Decode(data, &price)
if err != nil { if err != nil {
clog.Debug("getLatestPrice", "decode", err) clog.Error("getLatestPrice", "decode", err)
return -1, err return -1, err
} }
...@@ -517,7 +509,7 @@ func (action *Action) CollateralizeBorrow(borrow *pty.CollateralizeBorrow) (*typ ...@@ -517,7 +509,7 @@ func (action *Action) CollateralizeBorrow(borrow *pty.CollateralizeBorrow) (*typ
kv = append(kv, receipt.KV...) kv = append(kv, receipt.KV...)
// 抵押物冻结 // 抵押物冻结
receipt, err = action.coinsAccount.ExecFrozen(coll.CreateAddr, action.execaddr, btyFrozen) receipt, err = action.coinsAccount.ExecFrozen(coll.CreateAddr, action.execaddr, btyFrozen*Coin)
if err != nil { if err != nil {
clog.Error("CollateralizeBorrow.Frozen", "addr", coll.CreateAddr, "execaddr", action.execaddr, "amount", btyFrozen) clog.Error("CollateralizeBorrow.Frozen", "addr", coll.CreateAddr, "execaddr", action.execaddr, "amount", btyFrozen)
return nil, err return nil, err
...@@ -526,7 +518,7 @@ func (action *Action) CollateralizeBorrow(borrow *pty.CollateralizeBorrow) (*typ ...@@ -526,7 +518,7 @@ func (action *Action) CollateralizeBorrow(borrow *pty.CollateralizeBorrow) (*typ
kv = append(kv, receipt.KV...) kv = append(kv, receipt.KV...)
// 借出ccny // 借出ccny
receipt, err = action.tokenAccount.ExecTransfer(coll.CreateAddr, action.fromaddr, action.execaddr, borrow.Value) receipt, err = action.tokenAccount.ExecTransfer(coll.CreateAddr, action.fromaddr, action.execaddr, borrow.Value*Coin)
if err != nil { if err != nil {
clog.Error("CollateralizeBorrow.ExecTokenTransfer", "addr", action.fromaddr, "execaddr", action.execaddr, "amount", borrow.Value) clog.Error("CollateralizeBorrow.ExecTokenTransfer", "addr", action.fromaddr, "execaddr", action.execaddr, "amount", borrow.Value)
return nil, err return nil, err
...@@ -604,23 +596,17 @@ func (action *Action) CollateralizeRepay(repay *pty.CollateralizeRepay) (*types. ...@@ -604,23 +596,17 @@ func (action *Action) CollateralizeRepay(repay *pty.CollateralizeRepay) (*types.
return nil, pty.ErrRecordNotExist return nil, pty.ErrRecordNotExist
} }
// 检查清算金额(默认全部清算,部分清算在其他接口)
if repay.Value != borrowRecord.DebtValue {
clog.Error("CollateralizeRepay", "CollID", repay.CollateralizeId, "addr", action.fromaddr, "execaddr", action.execaddr, "collateralize value", borrowRecord.DebtValue, "err", pty.ErrRepayValueInsufficient)
return nil, pty.ErrRepayValueInsufficient
}
// 借贷金额+利息 // 借贷金额+利息
realRepay := repay.Value + int64(float32(repay.Value) * coll.StabilityFeeRatio) + 1 realRepay := borrowRecord.DebtValue + int64(float32(borrowRecord.DebtValue) * coll.StabilityFeeRatio) + 1
// 检查 // 检查
if !action.CheckExecTokenAccount(action.fromaddr, realRepay, false) { if !action.CheckExecTokenAccount(action.fromaddr, realRepay*Coin, false) {
clog.Error("CollateralizeRepay", "CollID", coll.CollateralizeId, "addr", action.fromaddr, "execaddr", action.execaddr, "err", types.ErrInsufficientBalance) clog.Error("CollateralizeRepay", "CollID", coll.CollateralizeId, "addr", action.fromaddr, "execaddr", action.execaddr, "err", types.ErrInsufficientBalance)
return nil, types.ErrNoBalance return nil, types.ErrNoBalance
} }
// ccny转移 // ccny转移
receipt, err = action.tokenAccount.ExecTransfer(action.fromaddr, coll.CreateAddr, action.execaddr, realRepay) receipt, err = action.tokenAccount.ExecTransfer(action.fromaddr, coll.CreateAddr, action.execaddr, realRepay*Coin)
if err != nil { if err != nil {
clog.Error("CollateralizeRepay.ExecTokenTransfer", "addr", action.fromaddr, "execaddr", action.execaddr, "amount", realRepay) clog.Error("CollateralizeRepay.ExecTokenTransfer", "addr", action.fromaddr, "execaddr", action.execaddr, "amount", realRepay)
return nil, err return nil, err
...@@ -629,7 +615,7 @@ func (action *Action) CollateralizeRepay(repay *pty.CollateralizeRepay) (*types. ...@@ -629,7 +615,7 @@ func (action *Action) CollateralizeRepay(repay *pty.CollateralizeRepay) (*types.
kv = append(kv, receipt.KV...) kv = append(kv, receipt.KV...)
// 抵押物归还 // 抵押物归还
receipt, err = action.coinsAccount.ExecTransferFrozen(coll.CreateAddr, action.execaddr, action.execaddr, borrowRecord.CollateralValue) receipt, err = action.coinsAccount.ExecTransferFrozen(coll.CreateAddr, action.fromaddr, action.execaddr, borrowRecord.CollateralValue*Coin)
if err != nil { if err != nil {
clog.Error("CollateralizeRepay.ExecTransferFrozen", "addr", coll.CreateAddr, "execaddr", action.execaddr, "amount", borrowRecord.CollateralValue) clog.Error("CollateralizeRepay.ExecTransferFrozen", "addr", coll.CreateAddr, "execaddr", action.execaddr, "amount", borrowRecord.CollateralValue)
return nil, err return nil, err
...@@ -642,7 +628,7 @@ func (action *Action) CollateralizeRepay(repay *pty.CollateralizeRepay) (*types. ...@@ -642,7 +628,7 @@ func (action *Action) CollateralizeRepay(repay *pty.CollateralizeRepay) (*types.
borrowRecord.Status = pty.CollateralizeUserStatusClose borrowRecord.Status = pty.CollateralizeUserStatusClose
// 保存 // 保存
coll.Balance += repay.Value coll.Balance += borrowRecord.DebtValue
coll.BorrowRecords = append(coll.BorrowRecords[:index], coll.BorrowRecords[index+1:]...) coll.BorrowRecords = append(coll.BorrowRecords[:index], coll.BorrowRecords[index+1:]...)
coll.InvalidRecords = append(coll.InvalidRecords, borrowRecord) coll.InvalidRecords = append(coll.InvalidRecords, borrowRecord)
coll.LatestLiquidationPrice = getLatestLiquidationPrice(&coll.Collateralize) coll.LatestLiquidationPrice = getLatestLiquidationPrice(&coll.Collateralize)
...@@ -702,7 +688,7 @@ func (action *Action) CollateralizeAppend(cAppend *pty.CollateralizeAppend) (*ty ...@@ -702,7 +688,7 @@ func (action *Action) CollateralizeAppend(cAppend *pty.CollateralizeAppend) (*ty
} }
// 检查抵押物账户余额 // 检查抵押物账户余额
if !action.CheckExecAccountBalance(action.fromaddr, cAppend.CollateralValue, 0) { if !action.CheckExecAccountBalance(action.fromaddr, cAppend.CollateralValue*Coin, 0) {
clog.Error("CollateralizeBorrow", "CollID", coll.CollateralizeId, "addr", action.fromaddr, "execaddr", action.execaddr, "err", types.ErrNoBalance) clog.Error("CollateralizeBorrow", "CollID", coll.CollateralizeId, "addr", action.fromaddr, "execaddr", action.execaddr, "err", types.ErrNoBalance)
return nil, types.ErrNoBalance return nil, types.ErrNoBalance
} }
...@@ -717,7 +703,7 @@ func (action *Action) CollateralizeAppend(cAppend *pty.CollateralizeAppend) (*ty ...@@ -717,7 +703,7 @@ func (action *Action) CollateralizeAppend(cAppend *pty.CollateralizeAppend) (*ty
kv = append(kv, receipt.KV...) kv = append(kv, receipt.KV...)
// 抵押物冻结 // 抵押物冻结
receipt, err = action.coinsAccount.ExecFrozen(coll.CreateAddr, action.execaddr, cAppend.CollateralValue) receipt, err = action.coinsAccount.ExecFrozen(coll.CreateAddr, action.execaddr, cAppend.CollateralValue*Coin)
if err != nil { if err != nil {
clog.Error("CollateralizeBorrow.Frozen", "addr", coll.CreateAddr, "execaddr", action.execaddr, "amount", cAppend.CollateralValue, "err", err) clog.Error("CollateralizeBorrow.Frozen", "addr", coll.CreateAddr, "execaddr", action.execaddr, "amount", cAppend.CollateralValue, "err", err)
return nil, err return nil, err
...@@ -812,7 +798,7 @@ func getGuarantorAddr(db dbm.KV) (string, error) { ...@@ -812,7 +798,7 @@ func getGuarantorAddr(db dbm.KV) (string, error) {
return "", err return "", err
} }
return item.GetAddr(), nil return item.GetArr().Value[0], nil
} }
// 系统清算 // 系统清算
...@@ -840,7 +826,7 @@ func (action *Action) systemLiquidation(coll *pty.Collateralize, price float32) ...@@ -840,7 +826,7 @@ func (action *Action) systemLiquidation(coll *pty.Collateralize, price float32)
} }
// 抵押物转移 // 抵押物转移
receipt, err := action.coinsAccount.ExecTransferFrozen(action.fromaddr, getGuarantorAddr, action.execaddr, borrowRecord.CollateralValue) receipt, err := action.coinsAccount.ExecTransferFrozen(coll.CreateAddr, getGuarantorAddr, action.execaddr, borrowRecord.CollateralValue*Coin)
if err != nil { if err != nil {
clog.Error("systemLiquidation", "addr", action.fromaddr, "execaddr", action.execaddr, "amount", borrowRecord.CollateralValue, "err", err) clog.Error("systemLiquidation", "addr", action.fromaddr, "execaddr", action.execaddr, "amount", borrowRecord.CollateralValue, "err", err)
continue continue
...@@ -852,8 +838,8 @@ func (action *Action) systemLiquidation(coll *pty.Collateralize, price float32) ...@@ -852,8 +838,8 @@ func (action *Action) systemLiquidation(coll *pty.Collateralize, price float32)
borrowRecord.LiquidateTime = action.blocktime borrowRecord.LiquidateTime = action.blocktime
borrowRecord.PreStatus = borrowRecord.Status borrowRecord.PreStatus = borrowRecord.Status
borrowRecord.Status = pty.CollateralizeUserStatusSystemLiquidate borrowRecord.Status = pty.CollateralizeUserStatusSystemLiquidate
coll.BorrowRecords = append(coll.BorrowRecords[:index], coll.BorrowRecords[index+1:]...)
coll.InvalidRecords = append(coll.InvalidRecords, borrowRecord) coll.InvalidRecords = append(coll.InvalidRecords, borrowRecord)
coll.BorrowRecords = append(coll.BorrowRecords[:index], coll.BorrowRecords[index+1:]...)
} else { } else {
borrowRecord.PreStatus = borrowRecord.Status borrowRecord.PreStatus = borrowRecord.Status
borrowRecord.Status = pty.CollateralizeUserStatusWarning borrowRecord.Status = pty.CollateralizeUserStatusWarning
...@@ -896,7 +882,7 @@ func (action *Action) expireLiquidation(coll *pty.Collateralize) (*types.Receipt ...@@ -896,7 +882,7 @@ func (action *Action) expireLiquidation(coll *pty.Collateralize) (*types.Receipt
} }
// 抵押物转移 // 抵押物转移
receipt, err := action.coinsAccount.ExecTransferFrozen(action.fromaddr, getGuarantorAddr, action.execaddr, borrowRecord.CollateralValue) receipt, err := action.coinsAccount.ExecTransferFrozen(coll.CreateAddr, getGuarantorAddr, action.execaddr, borrowRecord.CollateralValue*Coin)
if err != nil { if err != nil {
clog.Error("systemLiquidation", "addr", action.fromaddr, "execaddr", action.execaddr, "amount", borrowRecord.CollateralValue, "err", err) clog.Error("systemLiquidation", "addr", action.fromaddr, "execaddr", action.execaddr, "amount", borrowRecord.CollateralValue, "err", err)
continue continue
...@@ -908,8 +894,8 @@ func (action *Action) expireLiquidation(coll *pty.Collateralize) (*types.Receipt ...@@ -908,8 +894,8 @@ func (action *Action) expireLiquidation(coll *pty.Collateralize) (*types.Receipt
borrowRecord.LiquidateTime = action.blocktime borrowRecord.LiquidateTime = action.blocktime
borrowRecord.PreStatus = borrowRecord.Status borrowRecord.PreStatus = borrowRecord.Status
borrowRecord.Status = pty.CollateralizeUserStatusExpireLiquidate borrowRecord.Status = pty.CollateralizeUserStatusExpireLiquidate
coll.BorrowRecords = append(coll.BorrowRecords[:index], coll.BorrowRecords[index+1:]...)
coll.InvalidRecords = append(coll.InvalidRecords, borrowRecord) coll.InvalidRecords = append(coll.InvalidRecords, borrowRecord)
coll.BorrowRecords = append(coll.BorrowRecords[:index], coll.BorrowRecords[index+1:]...)
} else { } else {
borrowRecord.PreStatus = borrowRecord.Status borrowRecord.PreStatus = borrowRecord.Status
borrowRecord.Status = pty.CollateralizeUserStatusExpire borrowRecord.Status = pty.CollateralizeUserStatusExpire
...@@ -968,14 +954,14 @@ func (action *Action) CollateralizeFeed(feed *pty.CollateralizeFeed) (*types.Rec ...@@ -968,14 +954,14 @@ func (action *Action) CollateralizeFeed(feed *pty.CollateralizeFeed) (*types.Rec
return nil, pty.ErrPriceInvalid return nil, pty.ErrPriceInvalid
} }
collIDRecords, err := queryCollateralizeByStatus(action.localDB, pty.CollateralizeStatusCreated) ids, err := queryCollateralizeByStatus(action.localDB, pty.CollateralizeStatusCreated)
if err != nil { if err != nil {
clog.Error("CollateralizePriceFeed", "get collateralize record error", err) clog.Error("CollateralizePriceFeed", "get collateralize record error", err)
return nil, err return nil, err
} }
for _, collID := range collIDRecords { for _, collID := range ids {
coll, err := queryCollateralizeByID(action.db, collID.CollateralizeId) coll, err := queryCollateralizeByID(action.db, collID)
if err != nil { if err != nil {
clog.Error("CollateralizePriceFeed", "Collateralize ID", coll.CollateralizeId, "get collateralize record by id error", err) clog.Error("CollateralizePriceFeed", "Collateralize ID", coll.CollateralizeId, "get collateralize record by id error", err)
continue continue
...@@ -1032,6 +1018,7 @@ func (action *Action) CollateralizeFeed(feed *pty.CollateralizeFeed) (*types.Rec ...@@ -1032,6 +1018,7 @@ func (action *Action) CollateralizeFeed(feed *pty.CollateralizeFeed) (*types.Rec
func (action *Action) CollateralizeClose(close *pty.CollateralizeClose) (*types.Receipt, error) { func (action *Action) CollateralizeClose(close *pty.CollateralizeClose) (*types.Receipt, error) {
var logs []*types.ReceiptLog var logs []*types.ReceiptLog
var kv []*types.KeyValue var kv []*types.KeyValue
var receipt *types.Receipt
collateralize, err := queryCollateralizeByID(action.db, close.CollateralizeId) collateralize, err := queryCollateralizeByID(action.db, close.CollateralizeId)
if err != nil { if err != nil {
...@@ -1039,6 +1026,11 @@ func (action *Action) CollateralizeClose(close *pty.CollateralizeClose) (*types. ...@@ -1039,6 +1026,11 @@ func (action *Action) CollateralizeClose(close *pty.CollateralizeClose) (*types.
return nil, err return nil, err
} }
if action.fromaddr != collateralize.CreateAddr {
clog.Error("CollateralizeClose", "CollateralizeId", close.CollateralizeId, "err", "account error", "create", collateralize.CreateAddr, "from", action.fromaddr)
return nil, pty.ErrPermissionDeny
}
for _, borrowRecord := range collateralize.BorrowRecords { for _, borrowRecord := range collateralize.BorrowRecords {
if borrowRecord.Status != pty.CollateralizeUserStatusClose { if borrowRecord.Status != pty.CollateralizeUserStatusClose {
clog.Error("CollateralizeClose", "CollateralizeId", close.CollateralizeId, "addr", action.fromaddr, "execaddr", action.execaddr, "err", pty.ErrCollateralizeRecordNotEmpty) clog.Error("CollateralizeClose", "CollateralizeId", close.CollateralizeId, "addr", action.fromaddr, "execaddr", action.execaddr, "err", pty.ErrCollateralizeRecordNotEmpty)
...@@ -1046,6 +1038,15 @@ func (action *Action) CollateralizeClose(close *pty.CollateralizeClose) (*types. ...@@ -1046,6 +1038,15 @@ func (action *Action) CollateralizeClose(close *pty.CollateralizeClose) (*types.
} }
} }
// 解冻ccny
receipt, err = action.tokenAccount.ExecActive(action.fromaddr, action.execaddr, collateralize.TotalBalance*Coin)
if err != nil {
clog.Error("IssuanceClose.ExecActive", "addr", action.fromaddr, "execaddr", action.execaddr, "amount", collateralize.TotalBalance)
return nil, err
}
logs = append(logs, receipt.Logs...)
kv = append(kv, receipt.KV...)
clog.Debug("CollateralizeClose", "ID", close.CollateralizeId) clog.Debug("CollateralizeClose", "ID", close.CollateralizeId)
coll := &CollateralizeDB{*collateralize} coll := &CollateralizeDB{*collateralize}
...@@ -1078,14 +1079,14 @@ func queryCollateralizeByID(db dbm.KV, collateralizeID string) (*pty.Collaterali ...@@ -1078,14 +1079,14 @@ func queryCollateralizeByID(db dbm.KV, collateralizeID string) (*pty.Collaterali
return &coll, nil return &coll, nil
} }
func queryCollateralizeByStatus(localdb dbm.Lister, status int32) ([]*pty.CollateralizeRecord, error) { func queryCollateralizeByStatus(localdb dbm.Lister, status int32) ([]string, error) {
data, err := localdb.List(calcCollateralizeStatusPrefix(status), nil, DefultCount, ListDESC) data, err := localdb.List(calcCollateralizeStatusPrefix(status), nil, DefultCount, ListDESC)
if err != nil { if err != nil {
clog.Debug("queryCollateralizesByStatus", "error", err) clog.Debug("queryCollateralizesByStatus", "error", err)
return nil, err return nil, err
} }
var colls []*pty.CollateralizeRecord var ids []string
var coll pty.CollateralizeRecord var coll pty.CollateralizeRecord
for _, collBytes := range data { for _, collBytes := range data {
err = types.Decode(collBytes, &coll) err = types.Decode(collBytes, &coll)
...@@ -1093,20 +1094,20 @@ func queryCollateralizeByStatus(localdb dbm.Lister, status int32) ([]*pty.Collat ...@@ -1093,20 +1094,20 @@ func queryCollateralizeByStatus(localdb dbm.Lister, status int32) ([]*pty.Collat
clog.Debug("queryCollateralizesByStatus", "decode", err) clog.Debug("queryCollateralizesByStatus", "decode", err)
return nil, err return nil, err
} }
colls = append(colls, &coll) ids = append(ids, coll.CollateralizeId)
} }
return colls, nil return ids, nil
} }
func queryCollateralizeByAddr(localdb dbm.Lister, addr string) ([]*pty.CollateralizeRecord, error) { func queryCollateralizeByAddr(localdb dbm.Lister, addr string) ([]string, error) {
data, err := localdb.List(calcCollateralizeAddrPrefix(addr), nil, DefultCount, ListDESC) data, err := localdb.List(calcCollateralizeAddrPrefix(addr), nil, DefultCount, ListDESC)
if err != nil { if err != nil {
clog.Debug("queryCollateralizesByAddr", "error", err) clog.Debug("queryCollateralizesByAddr", "error", err)
return nil, err return nil, err
} }
var colls []*pty.CollateralizeRecord var ids []string
var coll pty.CollateralizeRecord var coll pty.CollateralizeRecord
for _, collBytes := range data { for _, collBytes := range data {
err = types.Decode(collBytes, &coll) err = types.Decode(collBytes, &coll)
...@@ -1114,10 +1115,10 @@ func queryCollateralizeByAddr(localdb dbm.Lister, addr string) ([]*pty.Collatera ...@@ -1114,10 +1115,10 @@ func queryCollateralizeByAddr(localdb dbm.Lister, addr string) ([]*pty.Collatera
clog.Debug("queryCollateralizesByAddr", "decode", err) clog.Debug("queryCollateralizesByAddr", "decode", err)
return nil, err return nil, err
} }
colls = append(colls, &coll) ids = append(ids, coll.CollateralizeId)
} }
return colls, nil return ids, nil
} }
// 精确查找发行记录 // 精确查找发行记录
...@@ -1171,7 +1172,14 @@ func queryCollateralizeRecordByAddr(db dbm.KV, localdb dbm.Lister, addr string) ...@@ -1171,7 +1172,14 @@ func queryCollateralizeRecordByAddr(db dbm.KV, localdb dbm.Lister, addr string)
} }
func queryCollateralizeRecordByStatus(db dbm.KV, localdb dbm.Lister, status int32) ([]*pty.BorrowRecord, error) { func queryCollateralizeRecordByStatus(db dbm.KV, localdb dbm.Lister, status int32) ([]*pty.BorrowRecord, error) {
data, err := localdb.List(calcCollateralizeRecordStatusPrefix(status), nil, DefultCount, ListDESC) var statusKey string
if status == 0 {
statusKey = ""
} else {
statusKey = fmt.Sprintf("%d", status)
}
data, err := localdb.List(calcCollateralizeRecordStatusPrefix(statusKey), nil, DefultCount, ListDESC)
if err != nil { if err != nil {
clog.Debug("queryCollateralizeRecordByStatus", "error", err) clog.Debug("queryCollateralizeRecordByStatus", "error", err)
return nil, err return nil, err
...@@ -1183,13 +1191,13 @@ func queryCollateralizeRecordByStatus(db dbm.KV, localdb dbm.Lister, status int3 ...@@ -1183,13 +1191,13 @@ func queryCollateralizeRecordByStatus(db dbm.KV, localdb dbm.Lister, status int3
err = types.Decode(collBytes, &coll) err = types.Decode(collBytes, &coll)
if err != nil { if err != nil {
clog.Debug("queryCollateralizesByStatus", "decode", err) clog.Debug("queryCollateralizesByStatus", "decode", err)
return nil, err continue
} }
record, err := queryCollateralizeRecordByID(db, coll.CollateralizeId, coll.RecordId) record, err := queryCollateralizeRecordByID(db, coll.CollateralizeId, coll.RecordId)
if err != nil { if err != nil {
clog.Error("queryIssuanceRecordsByStatus", "decode", err) clog.Error("queryIssuanceRecordsByStatus", "decode", err)
return nil, err continue
} }
records = append(records, record) records = append(records, record)
} }
......
...@@ -12,47 +12,51 @@ import ( ...@@ -12,47 +12,51 @@ import (
func (c *Collateralize) execDelLocal(tx *types.Transaction, receiptData *types.ReceiptData) (*types.LocalDBSet, error) { func (c *Collateralize) 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 collateralizeLog pty.ReceiptCollateralize if item.Ty == pty.TyLogCollateralizeCreate || item.Ty == pty.TyLogCollateralizeBorrow || item.Ty == pty.TyLogCollateralizeAppend ||
err := types.Decode(item.Log, &collateralizeLog) item.Ty == pty.TyLogCollateralizeRepay || item.Ty == pty.TyLogCollateralizeFeed || item.Ty == pty.TyLogCollateralizeClose {
if err != nil { var collateralizeLog pty.ReceiptCollateralize
return nil, err err := types.Decode(item.Log, &collateralizeLog)
} if err != nil {
return nil, err
}
switch item.Ty { switch item.Ty {
case pty.TyLogCollateralizeCreate: case pty.TyLogCollateralizeCreate:
set.KV = append(set.KV, c.deleteCollateralizeStatus(collateralizeLog.Status, collateralizeLog.Index)...) set.KV = append(set.KV, c.deleteCollateralizeStatus(collateralizeLog.Status, collateralizeLog.Index)...)
set.KV = append(set.KV, c.deleteCollateralizeAddr(collateralizeLog.CreateAddr, collateralizeLog.Index)...) 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.RecordStatus, collateralizeLog.Index)...) 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.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.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)...) 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.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.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:
set.KV = append(set.KV, c.deleteCollateralizeStatus(collateralizeLog.Status, collateralizeLog.Index)...)
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
} }
break
case pty.TyLogCollateralizeClose:
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
} }
} }
return set, nil return set, nil
......
...@@ -13,46 +13,50 @@ import ( ...@@ -13,46 +13,50 @@ import (
func (c *Collateralize) execLocal(tx *types.Transaction, receipt *types.ReceiptData) (*types.LocalDBSet, error) { func (c *Collateralize) 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 collateralizeLog pty.ReceiptCollateralize if item.Ty == pty.TyLogCollateralizeCreate || item.Ty == pty.TyLogCollateralizeBorrow || item.Ty == pty.TyLogCollateralizeAppend ||
err := types.Decode(item.Log, &collateralizeLog) item.Ty == pty.TyLogCollateralizeRepay || item.Ty == pty.TyLogCollateralizeFeed || item.Ty == pty.TyLogCollateralizeClose {
if err != nil { var collateralizeLog pty.ReceiptCollateralize
return nil, err err := types.Decode(item.Log, &collateralizeLog)
} if err != nil {
return nil, err
}
switch item.Ty { switch item.Ty {
case pty.TyLogCollateralizeCreate: case pty.TyLogCollateralizeCreate:
set.KV = append(set.KV, c.addCollateralizeStatus(collateralizeLog.Status, collateralizeLog.CollateralizeId, collateralizeLog.Index)...) 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)...) 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.RecordStatus, collateralizeLog.CollateralizeId, set.KV = append(set.KV, c.addCollateralizeRecordStatus(collateralizeLog.RecordStatus, collateralizeLog.CollateralizeId,
collateralizeLog.RecordId, collateralizeLog.Index)...) 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.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.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, set.KV = append(set.KV, c.addCollateralizeRecordAddr(collateralizeLog.AccountAddr, collateralizeLog.CollateralizeId,
collateralizeLog.RecordId, collateralizeLog.Index)...) collateralizeLog.RecordId, collateralizeLog.Index)...)
break
case pty.TyLogCollateralizeAppend: //append没有状态变化
break
case pty.TyLogCollateralizeRepay:
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.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.addCollateralizeStatus(collateralizeLog.Status, collateralizeLog.CollateralizeId, collateralizeLog.Index)...)
set.KV = append(set.KV, c.deleteCollateralizeStatus(pty.CollateralizeStatusCreated, collateralizeLog.PreIndex)...)
set.KV = append(set.KV, c.deleteCollateralizeAddr(collateralizeLog.CreateAddr, collateralizeLog.PreIndex)...)
break
} }
break
case pty.TyLogCollateralizeClose:
set.KV = append(set.KV, c.deleteCollateralizeStatus(pty.CollateralizeStatusCreated, collateralizeLog.PreIndex)...)
set.KV = append(set.KV, c.deleteCollateralizeAddr(collateralizeLog.CreateAddr, collateralizeLog.PreIndex)...)
break
} }
} }
return set, nil return set, nil
......
...@@ -7,56 +7,56 @@ package executor ...@@ -7,56 +7,56 @@ package executor
import "fmt" import "fmt"
func calcCollateralizeKey(collateralizeID string, index int64) []byte { func calcCollateralizeKey(collateralizeID string, index int64) []byte {
key := fmt.Sprintf("LODB-Collateralize-ID:%s:%018d", collateralizeID, index) key := fmt.Sprintf("LODB-collateralize-ID:%s:%018d", collateralizeID, index)
return []byte(key) return []byte(key)
} }
func calcCollateralizeStatusPrefix(status int32) []byte { func calcCollateralizeStatusPrefix(status int32) []byte {
key := fmt.Sprintf("LODB-Collateralize-status-index:%d", status) key := fmt.Sprintf("LODB-collateralize-status:%d", status)
return []byte(key) return []byte(key)
} }
func calcCollateralizeStatusKey(status int32, index int64) []byte { func calcCollateralizeStatusKey(status int32, index int64) []byte {
key := fmt.Sprintf("LODB-Collateralize-status:%d:%018d", status, index) key := fmt.Sprintf("LODB-collateralize-status:%d:%018d", status, index)
return []byte(key) return []byte(key)
} }
func calcCollateralizeAddrPrefix(addr string) []byte { func calcCollateralizeAddrPrefix(addr string) []byte {
key := fmt.Sprintf("LODB-Collateralize-addr:%s", addr) key := fmt.Sprintf("LODB-collateralize-addr:%s", addr)
return []byte(key) return []byte(key)
} }
func calcCollateralizeAddrKey(addr string, index int64) []byte { func calcCollateralizeAddrKey(addr string, index int64) []byte {
key := fmt.Sprintf("LODB-Collateralize-addr:%s:%018d", addr, index) key := fmt.Sprintf("LODB-collateralize-addr:%s:%018d", addr, index)
return []byte(key) return []byte(key)
} }
func calcCollateralizePriceKey(time string) []byte { func calcCollateralizePriceKey(time string) []byte {
key := fmt.Sprintf("LODB-Collateralize-price:%s", time) key := fmt.Sprintf("LODB-collateralize-price:%s", time)
return []byte(key) return []byte(key)
} }
func calcCollateralizeLatestPriceKey() []byte { func calcCollateralizeLatestPriceKey() []byte {
key := fmt.Sprintf("LODB-Collateralize-latest-price") key := fmt.Sprintf("LODB-collateralize-latest-price")
return []byte(key) return []byte(key)
} }
func calcCollateralizeRecordAddrPrefix(addr string) []byte { func calcCollateralizeRecordAddrPrefix(addr string) []byte {
key := fmt.Sprintf("LODB-Collateralize-record-addr:%d", addr) key := fmt.Sprintf("LODB-collateralize-record-addr:%d", addr)
return []byte(key) return []byte(key)
} }
func calcCollateralizeRecordAddrKey(addr string, index int64) []byte { func calcCollateralizeRecordAddrKey(addr string, index int64) []byte {
key := fmt.Sprintf("LODB-Collateralize-record-addr:%d:%018d", addr, index) key := fmt.Sprintf("LODB-collateralize-record-addr:%d:%018d", addr, index)
return []byte(key) return []byte(key)
} }
func calcCollateralizeRecordStatusPrefix(status int32) []byte { func calcCollateralizeRecordStatusPrefix(status string) []byte {
key := fmt.Sprintf("LODB-Collateralize-record-status:%d", status) key := fmt.Sprintf("LODB-collateralize-record-status:%s", status)
return []byte(key) return []byte(key)
} }
func calcCollateralizeRecordStatusKey(status int32, index int64) []byte { func calcCollateralizeRecordStatusKey(status int32, index int64) []byte {
key := fmt.Sprintf("LODB-Collateralize-record-status:%d:%018d", status, index) key := fmt.Sprintf("LODB-collateralize-record-status:%d:%018d", status, index)
return []byte(key) return []byte(key)
} }
\ No newline at end of file
...@@ -58,10 +58,7 @@ func (c *Collateralize) Query_CollateralizeByStatus(req *pty.ReqCollateralizeByS ...@@ -58,10 +58,7 @@ func (c *Collateralize) Query_CollateralizeByStatus(req *pty.ReqCollateralizeByS
return nil, err return nil, err
} }
for _, record := range collIDRecords { ids.IDs = append(ids.IDs, collIDRecords...)
ids.IDs = append(ids.IDs, record.CollateralizeId)
}
return ids, nil return ids, nil
} }
...@@ -73,47 +70,42 @@ func (c *Collateralize) Query_CollateralizeByAddr(req *pty.ReqCollateralizeByAdd ...@@ -73,47 +70,42 @@ func (c *Collateralize) Query_CollateralizeByAddr(req *pty.ReqCollateralizeByAdd
return nil, err return nil, err
} }
for _, record := range collIDRecords { ids.IDs = append(ids.IDs, collIDRecords...)
ids.IDs = append(ids.IDs, record.CollateralizeId)
}
return ids, nil return ids, nil
} }
func (c *Collateralize) Query_CollateralizeRecordByID(req *pty.ReqCollateralizeRecord) (types.Message, error) { func (c *Collateralize) Query_CollateralizeRecordByID(req *pty.ReqCollateralizeRecord) (types.Message, error) {
ret := &pty.RepCollateralizeRecord{}
issuRecord, err := queryCollateralizeRecordByID(c.GetStateDB(), req.CollateralizeId, req.RecordId) issuRecord, err := queryCollateralizeRecordByID(c.GetStateDB(), req.CollateralizeId, req.RecordId)
if err != nil { if err != nil {
clog.Error("Query_IssuanceRecordByID", "get issuance record error", err) clog.Error("Query_IssuanceRecordByID", "get collateralize record error", err)
return nil, err return nil, err
} }
ret := &pty.RepCollateralizeRecord{}
ret.Record = issuRecord ret.Record = issuRecord
return issuRecord, nil return ret, nil
} }
func (c *Collateralize) Query_CollateralizeRecordByAddr(req *pty.ReqCollateralizeRecordByAddr) (types.Message, error) { func (c *Collateralize) Query_CollateralizeRecordByAddr(req *pty.ReqCollateralizeRecordByAddr) (types.Message, error) {
ret := &pty.RepCollateralizeRecords{}
records, err := queryCollateralizeRecordByAddr(c.GetStateDB(), c.GetLocalDB(), req.Addr) records, err := queryCollateralizeRecordByAddr(c.GetStateDB(), c.GetLocalDB(), req.Addr)
if err != nil { if err != nil {
clog.Error("Query_CollateralizeRecordByAddr", "get collateralize record error", err) clog.Error("Query_CollateralizeRecordByAddr", "get collateralize record error", err)
return nil, err return nil, err
} }
ret := &pty.RepCollateralizeRecords{}
ret.Records = records ret.Records = records
return ret, nil return ret, nil
} }
func (c *Collateralize) Query_CollateralizeRecordByStatus(req *pty.ReqCollateralizeRecordByStatus) (types.Message, error) { func (c *Collateralize) Query_CollateralizeRecordByStatus(req *pty.ReqCollateralizeRecordByStatus) (types.Message, error) {
ret := &pty.RepCollateralizeRecords{}
records, err := queryCollateralizeRecordByStatus(c.GetStateDB(), c.GetLocalDB(), req.Status) records, err := queryCollateralizeRecordByStatus(c.GetStateDB(), c.GetLocalDB(), req.Status)
if err != nil { if err != nil {
clog.Error("Query_CollateralizeRecordByAddr", "get collateralize record error", err) clog.Error("Query_CollateralizeRecordByStatus", "get collateralize record error", err)
return nil, err return nil, err
} }
ret := &pty.RepCollateralizeRecords{}
ret.Records = records ret.Records = records
return ret, nil return ret, nil
} }
\ No newline at end of file
...@@ -85,7 +85,6 @@ message CollateralizeBorrow { ...@@ -85,7 +85,6 @@ message CollateralizeBorrow {
message CollateralizeRepay { message CollateralizeRepay {
string collateralizeId = 1; //借贷期数ID string collateralizeId = 1; //借贷期数ID
string recordId = 2; //借贷ID string recordId = 2; //借贷ID
int64 value = 3; //借贷价值(ccny)
} }
// 追加抵押物 // 追加抵押物
......
...@@ -201,7 +201,7 @@ func CreateRawCollateralizeRepayTx(parm *CollateralizeRepayTx) (*types.Transacti ...@@ -201,7 +201,7 @@ func CreateRawCollateralizeRepayTx(parm *CollateralizeRepayTx) (*types.Transacti
v := &CollateralizeRepay{ v := &CollateralizeRepay{
CollateralizeId: parm.CollateralizeID, CollateralizeId: parm.CollateralizeID,
Value: parm.Value, RecordId:parm.RecordID,
} }
repay := &CollateralizeAction{ repay := &CollateralizeAction{
Ty: CollateralizeActionRepay, Ty: CollateralizeActionRepay,
...@@ -230,6 +230,7 @@ func CreateRawCollateralizeAppendTx(parm *CollateralizeAppendTx) (*types.Transac ...@@ -230,6 +230,7 @@ func CreateRawCollateralizeAppendTx(parm *CollateralizeAppendTx) (*types.Transac
v := &CollateralizeAppend{ v := &CollateralizeAppend{
CollateralizeId: parm.CollateralizeID, CollateralizeId: parm.CollateralizeID,
RecordId:parm.RecordID,
CollateralValue: parm.Value, CollateralValue: parm.Value,
} }
append := &CollateralizeAction{ append := &CollateralizeAction{
......
...@@ -730,7 +730,6 @@ func (m *CollateralizeBorrow) GetValue() int64 { ...@@ -730,7 +730,6 @@ func (m *CollateralizeBorrow) GetValue() int64 {
type CollateralizeRepay struct { type CollateralizeRepay struct {
CollateralizeId string `protobuf:"bytes,1,opt,name=collateralizeId,proto3" json:"collateralizeId,omitempty"` CollateralizeId string `protobuf:"bytes,1,opt,name=collateralizeId,proto3" json:"collateralizeId,omitempty"`
RecordId string `protobuf:"bytes,2,opt,name=recordId,proto3" json:"recordId,omitempty"` RecordId string `protobuf:"bytes,2,opt,name=recordId,proto3" json:"recordId,omitempty"`
Value int64 `protobuf:"varint,3,opt,name=value,proto3" json:"value,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"` XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"` XXX_sizecache int32 `json:"-"`
...@@ -775,13 +774,6 @@ func (m *CollateralizeRepay) GetRecordId() string { ...@@ -775,13 +774,6 @@ func (m *CollateralizeRepay) GetRecordId() string {
return "" return ""
} }
func (m *CollateralizeRepay) GetValue() int64 {
if m != nil {
return m.Value
}
return 0
}
// 追加抵押物 // 追加抵押物
type CollateralizeAppend struct { type CollateralizeAppend struct {
CollateralizeId string `protobuf:"bytes,1,opt,name=collateralizeId,proto3" json:"collateralizeId,omitempty"` CollateralizeId string `protobuf:"bytes,1,opt,name=collateralizeId,proto3" json:"collateralizeId,omitempty"`
...@@ -1727,78 +1719,77 @@ func init() { ...@@ -1727,78 +1719,77 @@ func init() {
func init() { proto.RegisterFile("collateralize.proto", fileDescriptor_a988fb4a61381972) } func init() { proto.RegisterFile("collateralize.proto", fileDescriptor_a988fb4a61381972) }
var fileDescriptor_a988fb4a61381972 = []byte{ var fileDescriptor_a988fb4a61381972 = []byte{
// 1155 bytes of a gzipped FileDescriptorProto // 1148 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x57, 0x51, 0x6f, 0xe3, 0xc4, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x57, 0xe1, 0x6e, 0xdc, 0x44,
0x13, 0x3f, 0xdb, 0x49, 0xda, 0x4c, 0xda, 0x5e, 0xbb, 0xed, 0xbf, 0x7f, 0x53, 0x4e, 0x55, 0xb4, 0x10, 0xae, 0xed, 0xbb, 0x4b, 0x6e, 0x2e, 0x69, 0x93, 0x4d, 0x08, 0x26, 0x54, 0xd1, 0x69, 0x85,
0x42, 0x22, 0x82, 0xa3, 0x12, 0xbd, 0x13, 0xe2, 0x84, 0x84, 0x68, 0x7b, 0x77, 0x6a, 0xa4, 0x43, 0xc4, 0x09, 0x4a, 0x24, 0xd2, 0x0a, 0x51, 0x21, 0x21, 0x92, 0xb4, 0x55, 0x4e, 0x2a, 0x52, 0x65,
0x3a, 0x99, 0x03, 0xf1, 0x00, 0x48, 0x8e, 0xbd, 0x3d, 0x2c, 0xb9, 0xb1, 0x6b, 0x6f, 0xca, 0x85, 0x0a, 0x42, 0x08, 0x90, 0x7c, 0xf6, 0xa6, 0x58, 0x72, 0xce, 0x8e, 0xbd, 0x17, 0x7a, 0xfc, 0x06,
0x67, 0xe0, 0xf5, 0xbe, 0x00, 0x5f, 0x80, 0x2f, 0xc0, 0xe7, 0x43, 0x33, 0xbb, 0xb1, 0xbd, 0xeb, 0xfe, 0xf6, 0x05, 0x78, 0x01, 0x5e, 0x80, 0xe7, 0x43, 0x33, 0xbb, 0x67, 0x7b, 0xd7, 0x77, 0x51,
0xa4, 0x6a, 0x81, 0x27, 0x5e, 0xa2, 0xcc, 0xec, 0x6f, 0x76, 0x66, 0x67, 0x7e, 0x3b, 0xb3, 0x86, 0x02, 0xfc, 0xe2, 0xcf, 0xe9, 0x66, 0xe6, 0x9b, 0xdd, 0xd9, 0x99, 0x6f, 0x67, 0xd6, 0xb0, 0x13,
0xdd, 0x28, 0x4b, 0xd3, 0x50, 0x8a, 0x22, 0x4c, 0x93, 0x9f, 0xc5, 0x51, 0x5e, 0x64, 0x32, 0x63, 0x65, 0x69, 0x1a, 0x4a, 0x51, 0x84, 0x69, 0xf2, 0x8b, 0x38, 0xcc, 0x8b, 0x4c, 0x66, 0xac, 0x2b,
0x5d, 0x39, 0xcf, 0x45, 0xc9, 0xdf, 0x76, 0x61, 0xf3, 0xac, 0xb9, 0xcc, 0x46, 0x70, 0xdf, 0xc0, 0xe7, 0xb9, 0x28, 0xf9, 0x9b, 0x2e, 0x6c, 0x9e, 0x36, 0xcd, 0x6c, 0x04, 0xf7, 0x0c, 0xfc, 0x38,
0x8f, 0x63, 0xdf, 0x19, 0x3a, 0xa3, 0x7e, 0x60, 0xab, 0x19, 0x87, 0x0d, 0x99, 0xc9, 0x30, 0x3d, 0xf6, 0x9d, 0xa1, 0x33, 0xea, 0x07, 0xb6, 0x9a, 0x71, 0xd8, 0x90, 0x99, 0x0c, 0xd3, 0x93, 0x30,
0x0d, 0xd3, 0x70, 0x1a, 0x09, 0xdf, 0x1d, 0x3a, 0x23, 0x2f, 0x30, 0x74, 0x6c, 0x08, 0x83, 0x58, 0x0d, 0xa7, 0x91, 0xf0, 0xdd, 0xa1, 0x33, 0xf2, 0x02, 0x43, 0xc7, 0x86, 0x30, 0x88, 0xc5, 0x44,
0x4c, 0xe4, 0x99, 0x48, 0xd2, 0x64, 0xfa, 0xda, 0xf7, 0x08, 0xd2, 0x54, 0xb1, 0x0f, 0x60, 0x3b, 0x9e, 0x8a, 0x24, 0x4d, 0xa6, 0xaf, 0x7c, 0x8f, 0x20, 0x4d, 0x15, 0xfb, 0x00, 0xb6, 0xd2, 0xe4,
0x4d, 0xae, 0x66, 0x49, 0x1c, 0xca, 0x24, 0x9b, 0x06, 0xf8, 0xeb, 0x77, 0x86, 0xce, 0xc8, 0x0d, 0x72, 0x96, 0xc4, 0xa1, 0x4c, 0xb2, 0x69, 0x80, 0xbf, 0x7e, 0x67, 0xe8, 0x8c, 0xdc, 0xa0, 0xa5,
0x5a, 0x7a, 0xf6, 0x10, 0x76, 0x4a, 0x19, 0x4e, 0x92, 0x34, 0x91, 0xf3, 0xe7, 0x42, 0x28, 0x70, 0x67, 0x0f, 0x60, 0xbb, 0x94, 0xe1, 0x24, 0x49, 0x13, 0x39, 0x7f, 0x26, 0x84, 0x02, 0x77, 0x09,
0x97, 0xc0, 0xed, 0x05, 0x76, 0x08, 0x10, 0x15, 0x22, 0x94, 0xe2, 0x24, 0x8e, 0x0b, 0xbf, 0x47, 0xdc, 0x36, 0xb0, 0x03, 0x80, 0xa8, 0x10, 0xa1, 0x14, 0xc7, 0x71, 0x5c, 0xf8, 0x3d, 0x3a, 0x44,
0x87, 0x68, 0x68, 0x98, 0x0f, 0x6b, 0x13, 0x1d, 0xfa, 0x1a, 0xc5, 0xb5, 0x10, 0xd9, 0x13, 0xd8, 0x43, 0xc3, 0x7c, 0x58, 0x9b, 0xe8, 0xd0, 0xd7, 0x28, 0xae, 0x85, 0xc8, 0x1e, 0xc3, 0xe6, 0x24,
0x9c, 0x64, 0x45, 0x91, 0xfd, 0x14, 0x88, 0x28, 0x2b, 0xe2, 0xd2, 0x5f, 0x1f, 0x7a, 0xa3, 0xc1, 0x2b, 0x8a, 0xec, 0xe7, 0x40, 0x44, 0x59, 0x11, 0x97, 0xfe, 0xfa, 0xd0, 0x1b, 0x0d, 0x8e, 0x76,
0xf1, 0xee, 0x11, 0x25, 0xed, 0xe8, 0xb4, 0xb1, 0x16, 0x98, 0x48, 0xf6, 0x19, 0x6c, 0x8d, 0xa7, 0x0e, 0x29, 0x69, 0x87, 0x27, 0x0d, 0x5b, 0x60, 0x22, 0xd9, 0x67, 0x70, 0x77, 0x3c, 0xbd, 0x0a,
0xd7, 0x61, 0x9a, 0xc4, 0x0b, 0xdb, 0xfe, 0x6a, 0x5b, 0x0b, 0xca, 0xf6, 0xa1, 0x57, 0xca, 0x50, 0xd3, 0x24, 0x5e, 0xf8, 0xf6, 0x57, 0xfb, 0x5a, 0x50, 0xb6, 0x07, 0xbd, 0x52, 0x86, 0x72, 0x56,
0xce, 0x4a, 0x1f, 0x86, 0xce, 0xa8, 0x1b, 0x68, 0x89, 0x1d, 0xc0, 0x3a, 0x26, 0xff, 0xd5, 0x3c, 0xfa, 0x30, 0x74, 0x46, 0xdd, 0x40, 0x4b, 0x6c, 0x1f, 0xd6, 0x31, 0xf9, 0x2f, 0xe7, 0xb9, 0xf0,
0x17, 0xfe, 0x80, 0x56, 0x2a, 0x99, 0x7d, 0x02, 0xfb, 0x58, 0x95, 0x52, 0xbe, 0xa8, 0xb3, 0xf5, 0x07, 0x64, 0xa9, 0x64, 0xf6, 0x09, 0xec, 0x61, 0x55, 0x4a, 0xf9, 0xbc, 0xce, 0xd6, 0x8b, 0x22,
0xb2, 0x48, 0x22, 0xe1, 0x6f, 0x50, 0x62, 0x56, 0xac, 0xa2, 0xaf, 0x5c, 0x14, 0x49, 0x16, 0xfb, 0x89, 0x84, 0xbf, 0x41, 0x89, 0x59, 0x61, 0xc5, 0xbd, 0x72, 0x51, 0x24, 0x59, 0xec, 0x6f, 0xd2,
0x9b, 0x74, 0x78, 0x2d, 0x51, 0x3d, 0xc8, 0xe2, 0xd9, 0x9b, 0x3c, 0x29, 0xc4, 0xab, 0xe4, 0x52, 0xe1, 0xb5, 0x44, 0xf5, 0x20, 0x8f, 0xa7, 0xaf, 0xf3, 0xa4, 0x10, 0x2f, 0x93, 0x0b, 0xe1, 0xdf,
0xf8, 0x5b, 0x84, 0x68, 0xe9, 0xd9, 0x1e, 0x74, 0x93, 0x69, 0x2c, 0xde, 0xf8, 0xf7, 0x09, 0xa0, 0x25, 0x44, 0x4b, 0xcf, 0x76, 0xa1, 0x9b, 0x4c, 0x63, 0xf1, 0xda, 0xbf, 0x47, 0x00, 0x25, 0x60,
0x04, 0x8c, 0x36, 0x2f, 0xc4, 0x98, 0x16, 0xb6, 0x69, 0xa1, 0x92, 0x91, 0x0f, 0xaa, 0x02, 0x6a, 0xb4, 0x79, 0x21, 0xc6, 0x64, 0xd8, 0x22, 0x43, 0x25, 0x23, 0x1f, 0x54, 0x05, 0x94, 0x79, 0x5b,
0x79, 0x47, 0xf1, 0xa1, 0xa1, 0xe2, 0xbf, 0x78, 0xb0, 0xd1, 0x4c, 0x12, 0x9a, 0x84, 0x51, 0x94, 0xf1, 0xa1, 0xa1, 0xe2, 0xbf, 0x7a, 0xb0, 0xd1, 0x4c, 0x12, 0xba, 0x84, 0x51, 0x94, 0xcd, 0xa6,
0xcd, 0xa6, 0x92, 0xea, 0xa8, 0xc8, 0xd8, 0x54, 0xb1, 0x07, 0xd0, 0x2f, 0x65, 0x58, 0x48, 0x8a, 0x92, 0xea, 0xa8, 0xc8, 0xd8, 0x54, 0xb1, 0xfb, 0xd0, 0x2f, 0x65, 0x58, 0x48, 0x8a, 0x55, 0xb1,
0x55, 0xb1, 0xb0, 0x56, 0x98, 0x84, 0xfe, 0x26, 0x4c, 0x67, 0x42, 0xd3, 0xd0, 0x56, 0x9b, 0x48, 0xb0, 0x56, 0x98, 0x84, 0xfe, 0x26, 0x4c, 0x67, 0x42, 0xd3, 0xd0, 0x56, 0x9b, 0x48, 0x95, 0x43,
0x95, 0x43, 0xc5, 0x44, 0x5b, 0x8d, 0x1e, 0x91, 0xc3, 0x6a, 0xb7, 0xae, 0xf2, 0x58, 0x29, 0x2c, 0xc5, 0x44, 0x5b, 0x8d, 0x3b, 0x22, 0x87, 0xd5, 0x6a, 0x5d, 0xb5, 0x63, 0xa5, 0xb0, 0x28, 0xad,
0x4a, 0xab, 0x8d, 0x7a, 0x2d, 0x4a, 0x57, 0x65, 0xd0, 0x25, 0x5f, 0x33, 0x4a, 0xfe, 0x1e, 0x6c, 0x16, 0xea, 0xb5, 0x28, 0x5d, 0x95, 0x41, 0x97, 0x7c, 0xcd, 0x28, 0xf9, 0x7b, 0xb0, 0xb9, 0xc0,
0x2e, 0xb0, 0xaa, 0x06, 0xeb, 0xe4, 0xc5, 0x54, 0x22, 0xc5, 0x45, 0x5d, 0xa6, 0x3e, 0x41, 0x1a, 0xaa, 0x1a, 0xac, 0xd3, 0x2e, 0xa6, 0x12, 0x29, 0x2e, 0xea, 0x32, 0xf5, 0x09, 0xd2, 0xd0, 0x60,
0x1a, 0x8c, 0x33, 0x2f, 0xc4, 0x57, 0x4d, 0x4e, 0xd5, 0x0a, 0x2c, 0x54, 0x41, 0x39, 0x1e, 0xc7, 0x9c, 0x79, 0x21, 0xbe, 0x6a, 0x72, 0xaa, 0x56, 0x60, 0xa1, 0x0a, 0xca, 0xf1, 0x38, 0x26, 0x5a,
0x44, 0xab, 0x7e, 0x50, 0xc9, 0xfc, 0x37, 0x07, 0xb6, 0x4f, 0xca, 0x52, 0x48, 0x0a, 0x53, 0x97, 0xf5, 0x83, 0x4a, 0xe6, 0xbf, 0x3b, 0xb0, 0x75, 0x5c, 0x96, 0x42, 0x52, 0x98, 0xba, 0x14, 0x07,
0xe2, 0x10, 0x40, 0x01, 0xc8, 0x9d, 0xa3, 0xdc, 0xd5, 0x1a, 0xdc, 0x70, 0x22, 0xe7, 0xea, 0xc0, 0x00, 0x0a, 0x40, 0xdb, 0x39, 0x6a, 0xbb, 0x5a, 0x83, 0x0b, 0x4e, 0xe4, 0x5c, 0x1d, 0xd8, 0xa5,
0x2e, 0x1d, 0xb8, 0x92, 0xd5, 0x5a, 0xa4, 0xd6, 0xbc, 0xc5, 0x5a, 0x54, 0xad, 0x09, 0xf9, 0x63, 0x03, 0x57, 0xb2, 0xb2, 0x45, 0xca, 0xe6, 0x2d, 0x6c, 0x51, 0x65, 0x13, 0xf2, 0xa7, 0x66, 0xc6,
0x33, 0xe3, 0x95, 0xcc, 0x7f, 0xf7, 0x60, 0xd7, 0xe8, 0x50, 0x27, 0x11, 0x66, 0x8f, 0x3d, 0x86, 0x2b, 0x99, 0xff, 0xe1, 0xc1, 0x8e, 0xd1, 0xa1, 0x8e, 0x23, 0xcc, 0x1e, 0x7b, 0x04, 0x3d, 0x45,
0x9e, 0xa2, 0x0d, 0xc5, 0x31, 0x38, 0x3e, 0xd0, 0x17, 0xcc, 0xc0, 0x9e, 0x11, 0xe2, 0xfc, 0x5e, 0x1b, 0x8a, 0x63, 0x70, 0xb4, 0xaf, 0x2f, 0x98, 0x81, 0x3d, 0x25, 0xc4, 0xd9, 0x9d, 0x40, 0x63,
0xa0, 0xb1, 0x68, 0xa5, 0xee, 0x2b, 0xc5, 0xb7, 0xc2, 0x4a, 0xd1, 0x0f, 0xad, 0x14, 0x96, 0x7d, 0xd1, 0x4b, 0xdd, 0x57, 0x8a, 0x6f, 0x85, 0x97, 0xa2, 0x1f, 0x7a, 0x29, 0x2c, 0xfb, 0x18, 0xba,
0x0c, 0xdd, 0x42, 0xe4, 0xe1, 0x9c, 0x02, 0x1f, 0x1c, 0xbf, 0xb3, 0xcc, 0x28, 0x40, 0xc0, 0xf9, 0x85, 0xc8, 0xc3, 0x39, 0x05, 0x3e, 0x38, 0x7a, 0x67, 0x99, 0x53, 0x80, 0x80, 0xb3, 0x3b, 0x81,
0xbd, 0x40, 0x21, 0xd1, 0x51, 0x98, 0xe7, 0x62, 0x1a, 0xd3, 0x81, 0x56, 0x38, 0x3a, 0x21, 0x04, 0x42, 0xe2, 0x46, 0x61, 0x9e, 0x8b, 0x69, 0x4c, 0x07, 0x5a, 0xb1, 0xd1, 0x31, 0x21, 0x70, 0x23,
0x3a, 0x52, 0x58, 0x76, 0x04, 0x9d, 0x0b, 0x21, 0x62, 0xa2, 0xd4, 0xe0, 0xd8, 0x5f, 0x66, 0xf3, 0x85, 0x65, 0x87, 0xd0, 0x39, 0x17, 0x22, 0x26, 0x4a, 0x0d, 0x8e, 0xfc, 0x65, 0x3e, 0xcf, 0x84,
0x5c, 0x08, 0xb4, 0x20, 0x1c, 0x06, 0x16, 0xa5, 0x59, 0xa9, 0xe8, 0xb5, 0x22, 0xb0, 0x33, 0x04, 0x40, 0x0f, 0xc2, 0x61, 0x60, 0x51, 0x9a, 0x95, 0x8a, 0x5e, 0x2b, 0x02, 0x3b, 0x45, 0x00, 0x06,
0x60, 0x60, 0x84, 0xc4, 0xc0, 0x2e, 0xc3, 0x69, 0xf8, 0x5a, 0x35, 0xbd, 0x15, 0x81, 0x7d, 0x49, 0x46, 0x48, 0x0c, 0xec, 0x22, 0x9c, 0x86, 0xaf, 0x54, 0xd3, 0x5b, 0x11, 0xd8, 0x97, 0x84, 0xc0,
0x08, 0x0c, 0x4c, 0x61, 0xd9, 0x16, 0xb8, 0x72, 0xae, 0x19, 0xe4, 0xca, 0xf9, 0xe9, 0x1a, 0x74, 0xc0, 0x14, 0x96, 0xdd, 0x05, 0x57, 0xce, 0x35, 0x83, 0x5c, 0x39, 0x3f, 0x59, 0x83, 0xee, 0x15,
0xaf, 0x91, 0xeb, 0xfc, 0x0f, 0xc7, 0x2a, 0x8f, 0x32, 0xb5, 0x1b, 0xbf, 0x73, 0xbb, 0xc6, 0xef, 0x72, 0x9d, 0xff, 0xe9, 0x58, 0xe5, 0x51, 0xae, 0x76, 0xe3, 0x77, 0x6e, 0xd6, 0xf8, 0xdd, 0xdb,
0xde, 0xa5, 0xf1, 0x7b, 0xab, 0x1a, 0x7f, 0xdd, 0xda, 0x3a, 0xcd, 0xd6, 0xc6, 0x1f, 0xc1, 0x8e, 0x34, 0x7e, 0x6f, 0x55, 0xe3, 0xaf, 0x5b, 0x5b, 0xa7, 0xd9, 0xda, 0xf8, 0x43, 0xd8, 0x36, 0xd3,
0x99, 0x7e, 0x6c, 0x1e, 0x87, 0x00, 0xe5, 0x2c, 0x17, 0x05, 0x0a, 0xa5, 0xef, 0x0c, 0x3d, 0x9c, 0x8f, 0xcd, 0xe3, 0x00, 0xa0, 0x9c, 0xe5, 0xa2, 0x40, 0xa1, 0xf4, 0x9d, 0xa1, 0x87, 0x53, 0xa2,
0x12, 0xb5, 0x86, 0x3f, 0xb1, 0xce, 0xa7, 0x28, 0xd5, 0x1a, 0x7e, 0x4e, 0x7b, 0xf8, 0xf1, 0xaf, 0xd6, 0xf0, 0xc7, 0xd6, 0xf9, 0x14, 0xa5, 0x5a, 0xc3, 0xcf, 0x69, 0x0f, 0x3f, 0xfe, 0xb5, 0xe5,
0x2d, 0x53, 0xc5, 0xab, 0x3b, 0x4c, 0xd8, 0x3d, 0x9d, 0x65, 0xdd, 0xd4, 0x74, 0xca, 0x73, 0x60, 0xaa, 0x78, 0x75, 0x8b, 0x09, 0xbb, 0xab, 0xb3, 0xac, 0x9b, 0x9a, 0x4e, 0xf9, 0x77, 0xc0, 0xda,
0x6d, 0xe6, 0xdd, 0x61, 0xd7, 0xe6, 0xb5, 0x77, 0xcd, 0x6b, 0x5f, 0x7b, 0xf4, 0x9a, 0x1e, 0x7f, 0xcc, 0xbb, 0xc5, 0xaa, 0xcd, 0x6b, 0xef, 0x5a, 0xd7, 0xfe, 0x37, 0xbb, 0x9c, 0x8a, 0xa2, 0xff,
0xb5, 0x8b, 0xac, 0x88, 0xfb, 0x2f, 0xf9, 0xbc, 0x75, 0x83, 0xe6, 0xdf, 0x5b, 0x05, 0xc4, 0xbb, 0xcd, 0xea, 0x37, 0x6f, 0xc5, 0xfc, 0x07, 0xab, 0x54, 0xc8, 0x7a, 0x63, 0x0c, 0x3a, 0xd6, 0x18,
0x60, 0x0c, 0x47, 0xc7, 0x1a, 0x8e, 0x7b, 0xd0, 0xcd, 0x75, 0x37, 0xf2, 0x46, 0x6e, 0xa0, 0x04, 0xdc, 0x85, 0x6e, 0xae, 0xfb, 0x8e, 0x37, 0x72, 0x03, 0x25, 0x20, 0x13, 0xae, 0xb2, 0x74, 0x76,
0xe4, 0xc7, 0x75, 0x96, 0xce, 0x2e, 0xd1, 0x8f, 0x87, 0xfc, 0x50, 0x12, 0xff, 0xdc, 0x4a, 0x2c, 0x81, 0xfb, 0x78, 0xc8, 0x04, 0x25, 0xf1, 0xcf, 0xad, 0x14, 0xd2, 0x1d, 0xb9, 0xf9, 0x21, 0xf9,
0xdd, 0x9c, 0xdb, 0x1f, 0x92, 0xff, 0xe9, 0xc2, 0x5e, 0x20, 0x22, 0x91, 0xe4, 0xf2, 0xef, 0xbe, 0x5f, 0x2e, 0xec, 0x06, 0x22, 0x12, 0x49, 0x2e, 0xff, 0xe9, 0xeb, 0xc9, 0x7c, 0x9d, 0xb8, 0xad,
0xa9, 0xcc, 0x37, 0x8b, 0xdb, 0x7a, 0xb3, 0x58, 0xc3, 0xd0, 0x6b, 0x0f, 0xc3, 0x7a, 0xa0, 0x74, 0xd7, 0x89, 0x35, 0xf6, 0xbc, 0xf6, 0xd8, 0xab, 0x47, 0x47, 0xc7, 0x18, 0x1d, 0xd5, 0x54, 0xee,
0x8c, 0x81, 0x52, 0xcd, 0xea, 0x6e, 0x73, 0x56, 0x73, 0xd8, 0x50, 0x75, 0xd0, 0x33, 0xa2, 0x47, 0x36, 0xa7, 0x32, 0x87, 0x0d, 0x55, 0x07, 0x3d, 0x0d, 0x7a, 0xe4, 0x63, 0xe8, 0x30, 0x7a, 0x25,
0x36, 0x86, 0x0e, 0xa3, 0x57, 0xf2, 0xcb, 0x6a, 0x94, 0xa8, 0x59, 0x65, 0xab, 0x8d, 0x2a, 0xaf, 0xbf, 0xa8, 0x86, 0x86, 0x9a, 0x4a, 0xb6, 0xda, 0xa8, 0xf2, 0xba, 0x55, 0xe5, 0xe6, 0xfc, 0xef,
0x5b, 0x55, 0x6e, 0xbe, 0x0a, 0xfa, 0xe6, 0xab, 0xa0, 0xcd, 0x2f, 0x3d, 0x6f, 0x6e, 0x9f, 0x37, 0x9b, 0xf3, 0xbf, 0xcd, 0x2f, 0x3d, 0x59, 0x6e, 0x9e, 0x37, 0x06, 0x9d, 0xb0, 0xce, 0x18, 0xfd,
0x06, 0x9d, 0xb0, 0xce, 0x18, 0xfd, 0x37, 0xa2, 0xf1, 0xda, 0x3c, 0x57, 0xd9, 0xe8, 0x34, 0xb2, 0x37, 0xa2, 0xf1, 0xac, 0x68, 0xaa, 0x6c, 0x74, 0x1a, 0xd9, 0xe0, 0xcf, 0x61, 0x77, 0x49, 0x18,
0xc1, 0x5f, 0xc0, 0xde, 0x92, 0x30, 0x4a, 0xf6, 0x18, 0xd6, 0x0a, 0xfd, 0x9a, 0x73, 0xe8, 0x35, 0x25, 0x7b, 0x04, 0x6b, 0x85, 0x7e, 0xb7, 0x39, 0xf4, 0x6e, 0xdb, 0x5f, 0xde, 0xeb, 0xe9, 0xf9,
0x77, 0xb0, 0x7c, 0x02, 0xd0, 0xa3, 0x6e, 0x01, 0xe5, 0x5f, 0x20, 0x1b, 0xae, 0x0c, 0xc8, 0x78, 0xb6, 0x80, 0xf2, 0x2f, 0x90, 0x0d, 0x97, 0x06, 0x64, 0x3c, 0x3d, 0xcf, 0x6e, 0x41, 0xa8, 0x37,
0x7a, 0x91, 0xdd, 0x81, 0x50, 0x6f, 0x5d, 0x78, 0x37, 0x10, 0xb9, 0x49, 0xca, 0x59, 0x51, 0x88, 0x2e, 0xbc, 0x1b, 0x88, 0xdc, 0x24, 0xe5, 0xac, 0x28, 0xc4, 0x54, 0xd2, 0x4a, 0x75, 0xad, 0x1d,
0xa9, 0xa4, 0x9d, 0xea, 0x5a, 0x3b, 0x46, 0xad, 0xff, 0xb3, 0x2f, 0x73, 0x7e, 0x06, 0xff, 0x5b, 0xa3, 0xd6, 0xff, 0xdb, 0x37, 0x38, 0x3f, 0x85, 0xb7, 0x96, 0xe5, 0xb4, 0xc4, 0x60, 0xad, 0xec,
0x96, 0xd3, 0x12, 0x83, 0xb5, 0xb2, 0xb7, 0x68, 0xe6, 0x2d, 0x3d, 0xff, 0x16, 0x1e, 0xdc, 0x90, 0x2d, 0xda, 0x76, 0x4b, 0xcf, 0xbf, 0x85, 0xfb, 0xd7, 0x64, 0xb5, 0x64, 0x9f, 0x22, 0x39, 0xce,
0xd5, 0x92, 0x7d, 0x8a, 0xe4, 0xb8, 0xc8, 0x16, 0xc5, 0xe6, 0xba, 0xd8, 0x37, 0xd8, 0x04, 0xca, 0xb3, 0x45, 0xb1, 0xb9, 0x2e, 0xf6, 0x35, 0x3e, 0x81, 0x72, 0xe0, 0x47, 0xe0, 0xdb, 0xe1, 0x9d,
0x80, 0x1f, 0x83, 0x6f, 0x87, 0x77, 0x3a, 0xd7, 0x97, 0x63, 0x45, 0xb1, 0xf8, 0x43, 0xd8, 0x6f, 0xcc, 0xf5, 0xe5, 0x58, 0x51, 0x2c, 0xfe, 0x00, 0xf6, 0xda, 0x3e, 0x94, 0x86, 0x05, 0xa9, 0x9d,
0xdb, 0x50, 0x1a, 0x16, 0xa4, 0x76, 0x6a, 0x52, 0xf3, 0xf7, 0x61, 0xd7, 0x8e, 0x63, 0xfc, 0xb4, 0x9a, 0xd4, 0xfc, 0x7d, 0xd8, 0xb1, 0xe3, 0x18, 0x3f, 0x29, 0xd9, 0x16, 0x78, 0xe3, 0x27, 0x8b,
0x64, 0xdb, 0xe0, 0x8d, 0x9f, 0x2e, 0x4e, 0x8c, 0x7f, 0xf9, 0x77, 0x78, 0xc8, 0xab, 0x25, 0x04, 0x13, 0xe3, 0x5f, 0xfe, 0x3d, 0x1e, 0xf2, 0x72, 0x09, 0x41, 0xf5, 0xe2, 0xff, 0xea, 0x6e, 0xf1,
0xd5, 0x9b, 0xff, 0xa3, 0xbb, 0xc5, 0x27, 0x70, 0xb8, 0x6a, 0xf7, 0xba, 0x6b, 0xdc, 0x72, 0xff, 0x09, 0x1c, 0xac, 0x5a, 0xbd, 0xee, 0x1a, 0x37, 0x5c, 0xbf, 0x4e, 0x8c, 0x6b, 0x24, 0xe6, 0x0c,
0x3a, 0x31, 0xae, 0x91, 0x98, 0x73, 0xf8, 0xbf, 0x7d, 0xd4, 0xc5, 0x85, 0xfc, 0xc8, 0xbe, 0x90, 0xde, 0xb6, 0x8f, 0xba, 0xb8, 0x90, 0x1f, 0xd9, 0x17, 0x72, 0xe9, 0x87, 0x54, 0x75, 0x13, 0x7f,
0x4b, 0x3f, 0xaf, 0xaa, 0x9b, 0xf8, 0x43, 0x3b, 0xc5, 0x77, 0xee, 0x30, 0x37, 0x4c, 0x30, 0xfe, 0x6c, 0xa7, 0xf8, 0xd6, 0x1d, 0xe6, 0xba, 0xf9, 0xf8, 0x14, 0xd7, 0x5f, 0x16, 0x29, 0xfb, 0x10,
0x0c, 0xf7, 0x5f, 0x16, 0x29, 0xfb, 0x10, 0x7a, 0x0a, 0xa5, 0x5f, 0xa9, 0x4b, 0xe3, 0xd4, 0x90, 0x7a, 0x0a, 0xa5, 0xdf, 0xa3, 0x4b, 0xe3, 0xd4, 0x90, 0x49, 0x8f, 0x3e, 0xc2, 0x1f, 0xfe, 0x1d,
0x49, 0x8f, 0x3e, 0xcd, 0x1f, 0xfd, 0x15, 0x00, 0x00, 0xff, 0xff, 0xc2, 0xc2, 0xca, 0x4a, 0xb1, 0x00, 0x00, 0xff, 0xff, 0xd0, 0x3f, 0xd2, 0x26, 0x9b, 0x0f, 0x00, 0x00,
0x0f, 0x00, 0x00,
} }
...@@ -20,13 +20,14 @@ type CollateralizeBorrowTx struct { ...@@ -20,13 +20,14 @@ type CollateralizeBorrowTx struct {
// CollateralizeRepayTx for construction // CollateralizeRepayTx for construction
type CollateralizeRepayTx struct { type CollateralizeRepayTx struct {
CollateralizeID string `json:"collateralizeId"` CollateralizeID string `json:"collateralizeId"`
Value int64 `json:"value"` RecordID string `json:"recordID"`
Fee int64 `json:"fee"` Fee int64 `json:"fee"`
} }
// CollateralizeAppednTx for construction // CollateralizeAppednTx for construction
type CollateralizeAppendTx struct { type CollateralizeAppendTx struct {
CollateralizeID string `json:"collateralizeId"` CollateralizeID string `json:"collateralizeId"`
RecordID string `json:"recordID"`
Value int64 `json:"value"` Value int64 `json:"value"`
Fee int64 `json:"fee"` Fee int64 `json:"fee"`
} }
......
...@@ -2,11 +2,11 @@ package commands ...@@ -2,11 +2,11 @@ package commands
import ( import (
"fmt" "fmt"
"github.com/spf13/cobra"
jsonrpc "github.com/33cn/chain33/rpc/jsonclient" jsonrpc "github.com/33cn/chain33/rpc/jsonclient"
rpctypes "github.com/33cn/chain33/rpc/types" rpctypes "github.com/33cn/chain33/rpc/types"
"github.com/33cn/chain33/types" "github.com/33cn/chain33/types"
pkt "github.com/33cn/plugin/plugin/dapp/issuance/types" pkt "github.com/33cn/plugin/plugin/dapp/issuance/types"
"github.com/spf13/cobra"
"strconv" "strconv"
) )
...@@ -44,6 +44,7 @@ func IssuanceCreateRawTxCmd() *cobra.Command { ...@@ -44,6 +44,7 @@ func IssuanceCreateRawTxCmd() *cobra.Command {
func addIssuanceCreateFlags(cmd *cobra.Command) { func addIssuanceCreateFlags(cmd *cobra.Command) {
cmd.Flags().Uint64P("balance", "b", 0, "balance") cmd.Flags().Uint64P("balance", "b", 0, "balance")
cmd.MarkFlagRequired("balance")
cmd.Flags().Uint64P("debtCeiling", "d", 0, "debtCeiling") cmd.Flags().Uint64P("debtCeiling", "d", 0, "debtCeiling")
cmd.Flags().Float32P("liquidationRatio", "l", 0, "liquidationRatio") cmd.Flags().Float32P("liquidationRatio", "l", 0, "liquidationRatio")
cmd.Flags().Uint64P("period", "p", 0, "period") cmd.Flags().Uint64P("period", "p", 0, "period")
...@@ -56,11 +57,10 @@ func IssuanceCreate(cmd *cobra.Command, args []string) { ...@@ -56,11 +57,10 @@ func IssuanceCreate(cmd *cobra.Command, args []string) {
liquidationRatio, _ := cmd.Flags().GetFloat32("liquidationRatio") liquidationRatio, _ := cmd.Flags().GetFloat32("liquidationRatio")
period, _ := cmd.Flags().GetUint64("period") period, _ := cmd.Flags().GetUint64("period")
params := &rpctypes.CreateTxIn{ params := &rpctypes.CreateTxIn{
Execer: types.ExecName(pkt.IssuanceX), Execer: types.ExecName(pkt.IssuanceX),
ActionName: "IssuanceCreate", ActionName: "IssuanceCreate",
Payload: []byte(fmt.Sprintf("{\"balance\":%d, \"debtCeiling\":%d, \"liquidationRatio\":%f, \"period\":%d,}", Payload: []byte(fmt.Sprintf("{\"totalBalance\":%d, \"debtCeiling\":%d, \"liquidationRatio\":%f, \"period\":%d}",
balance, debtCeiling, liquidationRatio, period)), balance, debtCeiling, liquidationRatio, period)),
} }
...@@ -95,7 +95,7 @@ func IssuanceDebt(cmd *cobra.Command, args []string) { ...@@ -95,7 +95,7 @@ func IssuanceDebt(cmd *cobra.Command, args []string) {
params := &rpctypes.CreateTxIn{ params := &rpctypes.CreateTxIn{
Execer: types.ExecName(pkt.IssuanceX), Execer: types.ExecName(pkt.IssuanceX),
ActionName: "IssuanceDebt", ActionName: "IssuanceDebt",
Payload: []byte(fmt.Sprintf("{\"issuanceID\":%s,\"value\":%d}", issuanceID, value)), Payload: []byte(fmt.Sprintf("{\"issuanceID\":\"%s\",\"value\":%d}", issuanceID, value)),
} }
var res string var res string
...@@ -117,16 +117,19 @@ func IssuanceRepayRawTxCmd() *cobra.Command { ...@@ -117,16 +117,19 @@ func IssuanceRepayRawTxCmd() *cobra.Command {
func addIssuanceRepayFlags(cmd *cobra.Command) { func addIssuanceRepayFlags(cmd *cobra.Command) {
cmd.Flags().StringP("issuanceID", "g", "", "issuance ID") cmd.Flags().StringP("issuanceID", "g", "", "issuance ID")
cmd.MarkFlagRequired("issuanceID") cmd.MarkFlagRequired("issuanceID")
cmd.Flags().StringP("debtID", "d", "", "debt ID")
cmd.MarkFlagRequired("debtID")
} }
func IssuanceRepay(cmd *cobra.Command, args []string) { func IssuanceRepay(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr") rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
issuanceID, _ := cmd.Flags().GetString("issuanceID") issuanceID, _ := cmd.Flags().GetString("issuanceID")
debtID, _ := cmd.Flags().GetString("debtID")
params := &rpctypes.CreateTxIn{ params := &rpctypes.CreateTxIn{
Execer: types.ExecName(pkt.IssuanceX), Execer: types.ExecName(pkt.IssuanceX),
ActionName: "IssuanceRepay", ActionName: "IssuanceRepay",
Payload: []byte(fmt.Sprintf("{\"issuanceID\":%s}", issuanceID)), Payload: []byte(fmt.Sprintf("{\"issuanceID\":\"%s\", \"debtID\":\"%s\"}", issuanceID, debtID)),
} }
var res string var res string
...@@ -160,7 +163,7 @@ func IssuancePriceFeed(cmd *cobra.Command, args []string) { ...@@ -160,7 +163,7 @@ func IssuancePriceFeed(cmd *cobra.Command, args []string) {
params := &rpctypes.CreateTxIn{ params := &rpctypes.CreateTxIn{
Execer: types.ExecName(pkt.IssuanceX), Execer: types.ExecName(pkt.IssuanceX),
ActionName: "IssuancePriceFeed", ActionName: "IssuancePriceFeed",
Payload: []byte(fmt.Sprintf("{[\"price\":%s],[\"volume\":%d]}", price, volume)), Payload: []byte(fmt.Sprintf("{\"price\":[ %f ], \"volume\":[ %d ]}", price, volume)),
} }
var res string var res string
...@@ -191,7 +194,7 @@ func IssuanceClose(cmd *cobra.Command, args []string) { ...@@ -191,7 +194,7 @@ func IssuanceClose(cmd *cobra.Command, args []string) {
params := &rpctypes.CreateTxIn{ params := &rpctypes.CreateTxIn{
Execer: types.ExecName(pkt.IssuanceX), Execer: types.ExecName(pkt.IssuanceX),
ActionName: "IssuanceClose", ActionName: "IssuanceClose",
Payload: []byte(fmt.Sprintf("{\"issuanceID\":%s}", issuanceID)), Payload: []byte(fmt.Sprintf("{\"issuanceId\":\"%s\"}", issuanceID)),
} }
var res string var res string
...@@ -212,6 +215,7 @@ func IssuanceManageRawTxCmd() *cobra.Command { ...@@ -212,6 +215,7 @@ func IssuanceManageRawTxCmd() *cobra.Command {
func addIssuanceManageFlags(cmd *cobra.Command) { func addIssuanceManageFlags(cmd *cobra.Command) {
cmd.Flags().StringP("addr", "a", "", "addr") cmd.Flags().StringP("addr", "a", "", "addr")
cmd.MarkFlagRequired("addr")
} }
func IssuanceManage(cmd *cobra.Command, args []string) { func IssuanceManage(cmd *cobra.Command, args []string) {
...@@ -221,7 +225,7 @@ func IssuanceManage(cmd *cobra.Command, args []string) { ...@@ -221,7 +225,7 @@ func IssuanceManage(cmd *cobra.Command, args []string) {
params := &rpctypes.CreateTxIn{ params := &rpctypes.CreateTxIn{
Execer: types.ExecName(pkt.IssuanceX), Execer: types.ExecName(pkt.IssuanceX),
ActionName: "IssuanceManage", ActionName: "IssuanceManage",
Payload: []byte(fmt.Sprintf("{[\"addr\":%s]}", addr)), Payload: []byte(fmt.Sprintf("{\"addr\":[\"%s\"]}", addr)),
} }
var res string var res string
...@@ -270,11 +274,15 @@ func IssuanceQuery(cmd *cobra.Command, args []string) { ...@@ -270,11 +274,15 @@ func IssuanceQuery(cmd *cobra.Command, args []string) {
// req.Index = index // req.Index = index
//} //}
status, err := strconv.ParseInt(statusStr, 10, 32) var status int64
if err != nil { var err error
fmt.Println(err) if statusStr != "" {
cmd.Help() status, err = strconv.ParseInt(statusStr, 10, 32)
return if err != nil {
fmt.Println(err)
cmd.Help()
return
}
} }
if issuanceID != "" { if issuanceID != "" {
...@@ -297,7 +305,7 @@ func IssuanceQuery(cmd *cobra.Command, args []string) { ...@@ -297,7 +305,7 @@ func IssuanceQuery(cmd *cobra.Command, args []string) {
Addr: address, Addr: address,
} }
params.Payload = types.MustPBToJSON(req) params.Payload = types.MustPBToJSON(req)
var res pkt.RepIssuanceDebtInfo 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 debtID != ""{ } else if debtID != ""{
...@@ -308,7 +316,7 @@ func IssuanceQuery(cmd *cobra.Command, args []string) { ...@@ -308,7 +316,7 @@ func IssuanceQuery(cmd *cobra.Command, args []string) {
DebtId: debtID, DebtId: debtID,
} }
params.Payload = types.MustPBToJSON(req) params.Payload = types.MustPBToJSON(req)
var res pkt.RepIssuanceCurrentInfo var res pkt.RepIssuanceDebtInfo
ctx := jsonrpc.NewRPCCtx(rpcLaddr, "Chain33.Query", params, &res) ctx := jsonrpc.NewRPCCtx(rpcLaddr, "Chain33.Query", params, &res)
ctx.Run() ctx.Run()
} else { } else {
...@@ -342,7 +350,6 @@ func IssuanceQuery(cmd *cobra.Command, args []string) { ...@@ -342,7 +350,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 { } else {
fmt.Println("Error: requeres at least one of gameID, address or status")
cmd.Help() cmd.Help()
} }
} }
...@@ -16,7 +16,7 @@ func (c *Issuance) Exec_Create(payload *pty.IssuanceCreate, tx *types.Transactio ...@@ -16,7 +16,7 @@ func (c *Issuance) Exec_Create(payload *pty.IssuanceCreate, tx *types.Transactio
} }
// Exec_Borrow Action // Exec_Borrow Action
func (c *Issuance) Exec_Borrow(payload *pty.IssuanceDebt, tx *types.Transaction, index int) (*types.Receipt, error) { func (c *Issuance) Exec_Debt(payload *pty.IssuanceDebt, tx *types.Transaction, index int) (*types.Receipt, error) {
actiondb := NewIssuanceAction(c, tx, index) actiondb := NewIssuanceAction(c, tx, index)
return actiondb.IssuanceDebt(payload) return actiondb.IssuanceDebt(payload)
} }
...@@ -38,3 +38,9 @@ func (c *Issuance) Exec_Close(payload *pty.IssuanceClose, tx *types.Transaction, ...@@ -38,3 +38,9 @@ func (c *Issuance) Exec_Close(payload *pty.IssuanceClose, tx *types.Transaction,
actiondb := NewIssuanceAction(c, tx, index) actiondb := NewIssuanceAction(c, tx, index)
return actiondb.IssuanceClose(payload) return actiondb.IssuanceClose(payload)
} }
// Exec_Manage Action
func (c *Issuance) Exec_Manage(payload *pty.IssuanceManage, tx *types.Transaction, index int) (*types.Receipt, error) {
actiondb := NewIssuanceAction(c, tx, index)
return actiondb.IssuanceManage(payload)
}
...@@ -12,41 +12,46 @@ import ( ...@@ -12,41 +12,46 @@ 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 if item.Ty == pty.TyLogIssuanceCreate || item.Ty == pty.TyLogIssuanceDebt || item.Ty == pty.TyLogIssuanceRepay ||
err := types.Decode(item.Log, &issuanceLog) item.Ty == pty.TyLogIssuanceFeed || item.Ty == pty.TyLogIssuanceClose {
if err != nil { var issuanceLog pty.ReceiptIssuance
return nil, err err := types.Decode(item.Log, &issuanceLog)
} if err != nil {
return nil, err
}
switch item.Ty { switch item.Ty {
case pty.TyLogIssuanceCreate: case pty.TyLogIssuanceCreate:
set.KV = append(set.KV, c.deleteIssuanceStatus(issuanceLog.Status, issuanceLog.Index)...) set.KV = append(set.KV, c.deleteIssuanceStatus(issuanceLog.Status, issuanceLog.Index)...)
break break
case pty.TyLogIssuanceDebt: case pty.TyLogIssuanceDebt:
set.KV = append(set.KV, c.deleteIssuanceRecordStatus(issuanceLog.RecordStatus, issuanceLog.Index)...) set.KV = append(set.KV, c.deleteIssuanceRecordStatus(issuanceLog.Status, issuanceLog.Index)...)
set.KV = append(set.KV, c.deleteIssuanceRecordAddr(issuanceLog.AccountAddr, issuanceLog.Index)...)
break
case pty.TyLogIssuanceRepay:
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.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)...) set.KV = append(set.KV, c.deleteIssuanceRecordAddr(issuanceLog.AccountAddr, issuanceLog.Index)...)
break
case pty.TyLogIssuanceRepay:
set.KV = append(set.KV, c.addIssuanceRecordStatus(issuanceLog.PreStatus, issuanceLog.AccountAddr, issuanceLog.PreIndex,
issuanceLog.DebtId, issuanceLog.IssuanceId)...)
set.KV = append(set.KV, c.deleteIssuanceRecordStatus(issuanceLog.Status, 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.addIssuanceRecordStatus(issuanceLog.Status, issuanceLog.AccountAddr, issuanceLog.PreIndex,
issuanceLog.DebtId, issuanceLog.IssuanceId)...)
set.KV = append(set.KV, c.deleteIssuanceRecordStatus(issuanceLog.Status, issuanceLog.Index)...)
set.KV = append(set.KV, c.addIssuanceRecordAddr(issuanceLog.AccountAddr, issuanceLog.PreIndex, issuanceLog.DebtId,
issuanceLog.IssuanceId)...)
// 如果没有被清算,需要把地址索引更新
if issuanceLog.Status == pty.IssuanceUserStatusWarning || issuanceLog.Status == pty.IssuanceUserStatusExpire {
set.KV = append(set.KV, c.deleteIssuanceRecordAddr(issuanceLog.AccountAddr, issuanceLog.Index)...)
}
set.KV = append(set.KV, c.deleteIssuancePriceRecord(issuanceLog.RecordTime)...)
break
case pty.TyLogIssuanceClose:
set.KV = append(set.KV, c.deleteIssuanceStatus(issuanceLog.Status, issuanceLog.Index)...)
set.KV = append(set.KV, c.addIssuanceStatus(issuanceLog.PreStatus, issuanceLog.PreIndex, issuanceLog.IssuanceId)...)
break
} }
break
case pty.TyLogIssuanceClose:
set.KV = append(set.KV, c.addIssuanceStatus(pty.IssuanceStatusCreated, issuanceLog.PreIndex, issuanceLog.IssuanceId)...)
break
} }
} }
return set, nil return set, nil
......
...@@ -13,42 +13,47 @@ import ( ...@@ -13,42 +13,47 @@ 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 if item.Ty == pty.TyLogIssuanceCreate || item.Ty == pty.TyLogIssuanceDebt || item.Ty == pty.TyLogIssuanceRepay ||
err := types.Decode(item.Log, &issuanceLog) item.Ty == pty.TyLogIssuanceFeed || item.Ty == pty.TyLogIssuanceClose {
if err != nil { var issuanceLog pty.ReceiptIssuance
return nil, err err := types.Decode(item.Log, &issuanceLog)
} if err != nil {
return nil, err
}
switch item.Ty { switch item.Ty {
case pty.TyLogIssuanceCreate: case pty.TyLogIssuanceCreate:
set.KV = append(set.KV, c.addIssuanceStatus(issuanceLog.Status, issuanceLog.Index, issuanceLog.IssuanceId)...) 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.RecordStatus, issuanceLog.AccountAddr, issuanceLog.Index, set.KV = append(set.KV, c.addIssuanceRecordStatus(issuanceLog.Status, issuanceLog.AccountAddr, issuanceLog.Index,
issuanceLog.DebtId, issuanceLog.IssuanceId)...) 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.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.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, set.KV = append(set.KV, c.addIssuanceRecordAddr(issuanceLog.AccountAddr, issuanceLog.Index, issuanceLog.DebtId,
issuanceLog.IssuanceId)...) issuanceLog.IssuanceId)...)
break
case pty.TyLogIssuanceRepay:
set.KV = append(set.KV, c.deleteIssuanceRecordStatus(issuanceLog.PreStatus, issuanceLog.PreIndex)...)
set.KV = append(set.KV, c.addIssuanceRecordStatus(issuanceLog.Status, 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.deleteIssuanceRecordStatus(issuanceLog.PreStatus, issuanceLog.PreIndex)...)
set.KV = append(set.KV, c.addIssuanceRecordStatus(issuanceLog.Status, issuanceLog.AccountAddr, issuanceLog.Index,
issuanceLog.DebtId, issuanceLog.IssuanceId)...)
set.KV = append(set.KV, c.deleteIssuanceRecordAddr(issuanceLog.AccountAddr, issuanceLog.PreIndex)...)
// 如果没有被清算,需要把地址索引更新
if issuanceLog.Status == pty.IssuanceUserStatusWarning || issuanceLog.Status == pty.IssuanceUserStatusExpire {
set.KV = append(set.KV, c.addIssuanceRecordAddr(issuanceLog.AccountAddr, issuanceLog.Index, issuanceLog.DebtId,
issuanceLog.IssuanceId)...)
}
set.KV = append(set.KV, c.addIssuancePriceRecord(issuanceLog.RecordTime, issuanceLog.BtyPrice)...)
break
case pty.TyLogIssuanceClose:
set.KV = append(set.KV, c.addIssuanceStatus(issuanceLog.Status, issuanceLog.Index, issuanceLog.IssuanceId)...)
set.KV = append(set.KV, c.deleteIssuanceStatus(issuanceLog.PreStatus, issuanceLog.PreIndex)...)
break
} }
break
case pty.TyLogIssuanceClose:
set.KV = append(set.KV, c.deleteIssuanceStatus(issuanceLog.Status, issuanceLog.PreIndex)...)
break
} }
} }
return set, nil return set, nil
......
...@@ -143,6 +143,26 @@ func (c *Issuance) deleteIssuanceRecordStatus(status int32, index int64) (kvs [] ...@@ -143,6 +143,26 @@ func (c *Issuance) deleteIssuanceRecordStatus(status int32, index int64) (kvs []
return kvs return kvs
} }
func (c *Issuance) addIssuancePriceRecord(recordTime int64, price float32) (kvs []*types.KeyValue) {
key := calcIssuancePriceKey(string(recordTime))
record := &pty.IssuanceAssetPriceRecord{
RecordTime:recordTime,
BtyPrice:price,
}
kv := &types.KeyValue{Key: key, Value: types.Encode(record)}
kvs = append(kvs, kv)
return kvs
}
func (c *Issuance) deleteIssuancePriceRecord(recordTime int64) (kvs []*types.KeyValue) {
key := calcIssuancePriceKey(string(recordTime))
kv := &types.KeyValue{Key: key, Value:nil}
kvs = append(kvs, kv)
return kvs
}
// CheckReceiptExecOk return true to check if receipt ty is ok // CheckReceiptExecOk return true to check if receipt ty is ok
func (c *Issuance) CheckReceiptExecOk() bool { func (c *Issuance) CheckReceiptExecOk() bool {
return true return true
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
package executor package executor
import ( import (
"fmt"
"github.com/33cn/chain33/account" "github.com/33cn/chain33/account"
"github.com/33cn/chain33/common" "github.com/33cn/chain33/common"
dbm "github.com/33cn/chain33/common/db" dbm "github.com/33cn/chain33/common/db"
...@@ -24,6 +25,9 @@ const ( ...@@ -24,6 +25,9 @@ const (
const ( const (
Coin = types.Coin // 1e8 Coin = types.Coin // 1e8
DefaultDebtCeiling = 100000 // 默认借贷限额
DefaultLiquidationRatio = 0.25 // 默认质押比
DefaultPeriod = 3600 * 24 * 365 // 默认合约限期
PriceWarningRate = 1.3 // 价格提前预警率 PriceWarningRate = 1.3 // 价格提前预警率
ExpireWarningTime = 3600 * 24 * 10 // 提前10天超时预警 ExpireWarningTime = 3600 * 24 * 10 // 提前10天超时预警
) )
...@@ -61,7 +65,7 @@ func getGuarantorAddr(db dbm.KV) (string, error) { ...@@ -61,7 +65,7 @@ func getGuarantorAddr(db dbm.KV) (string, error) {
return "", err return "", err
} }
return item.GetAddr(), nil return item.GetArr().Value[0], nil
} }
func isRightAddr(key string, addr string, db dbm.KV) bool { func isRightAddr(key string, addr string, db dbm.KV) bool {
...@@ -91,6 +95,29 @@ func isRightAddr(key string, addr string, db dbm.KV) bool { ...@@ -91,6 +95,29 @@ func isRightAddr(key string, addr string, db dbm.KV) bool {
} }
func isSuperAddr(addr string, db dbm.KV) bool {
data, err := db.Get(AddrKey())
if err != nil {
clog.Error("getSuperAddr", "error", err)
return false
}
var item types.ConfigItem
err = types.Decode(data, &item)
if err != nil {
clog.Error("isSuperAddr", "Decode", data)
return false
}
for _, op := range item.GetArr().Value {
if op == addr {
return true
}
}
return false
}
// IssuanceDB def // IssuanceDB def
type IssuanceDB struct { type IssuanceDB struct {
pty.Issuance pty.Issuance
...@@ -120,7 +147,13 @@ func Key(id string) (key []byte) { ...@@ -120,7 +147,13 @@ func Key(id string) (key []byte) {
// Key for IssuanceAddrConfig // Key for IssuanceAddrConfig
func AddrKey() (key []byte) { func AddrKey() (key []byte) {
key = append(key, []byte("mavl-"+pty.IssuanceX+"addr")...) key = append(key, []byte("mavl-"+pty.IssuanceX+"-addr")...)
return key
}
// Key for IssuancePriceFeed
func PriceKey() (key []byte) {
key = append(key, []byte("mavl-"+pty.IssuanceX+"-price")...)
return key return key
} }
...@@ -156,22 +189,15 @@ func NewIssuanceAction(c *Issuance, tx *types.Transaction, index int) *Action { ...@@ -156,22 +189,15 @@ func NewIssuanceAction(c *Issuance, tx *types.Transaction, index int) *Action {
execaddr: dapp.ExecAddress(string(tx.Execer)), difficulty: c.GetDifficulty(), index: index, Issuance: c} execaddr: dapp.ExecAddress(string(tx.Execer)), difficulty: c.GetDifficulty(), index: index, Issuance: c}
} }
// GetCollCommonRecipt generate logs for Issuance common action
func (action *Action) GetCollCommonRecipt(issuance *pty.Issuance) *pty.ReceiptIssuance {
c := &pty.ReceiptIssuance{}
c.IssuanceId = issuance.IssuanceId
c.Status = issuance.Status
c.Index = issuance.Index
c.PreIndex = issuance.PreIndex
return c
}
// GetCreateReceiptLog generate logs for Issuance create action // GetCreateReceiptLog generate logs for Issuance create action
func (action *Action) GetCreateReceiptLog(issuance *pty.Issuance) *types.ReceiptLog { func (action *Action) GetCreateReceiptLog(issuance *pty.Issuance) *types.ReceiptLog {
log := &types.ReceiptLog{} log := &types.ReceiptLog{}
log.Ty = pty.TyLogIssuanceCreate log.Ty = pty.TyLogIssuanceCreate
c := action.GetCollCommonRecipt(issuance) c := &pty.ReceiptIssuance{}
c.IssuanceId = issuance.IssuanceId
c.Status = issuance.Status
c.Index = issuance.Index
log.Log = types.Encode(c) log.Log = types.Encode(c)
...@@ -183,10 +209,12 @@ func (action *Action) GetDebtReceiptLog(issuance *pty.Issuance, debtRecord *pty. ...@@ -183,10 +209,12 @@ func (action *Action) GetDebtReceiptLog(issuance *pty.Issuance, debtRecord *pty.
log := &types.ReceiptLog{} log := &types.ReceiptLog{}
log.Ty = pty.TyLogIssuanceDebt log.Ty = pty.TyLogIssuanceDebt
c := action.GetCollCommonRecipt(issuance) c := &pty.ReceiptIssuance{}
c.IssuanceId = issuance.IssuanceId
c.AccountAddr = action.fromaddr c.AccountAddr = action.fromaddr
c.DebtId = debtRecord.DebtId c.DebtId = debtRecord.DebtId
c.RecordStatus = debtRecord.Status c.Status = debtRecord.Status
c.Index = debtRecord.Index
log.Log = types.Encode(c) log.Log = types.Encode(c)
...@@ -198,11 +226,14 @@ func (action *Action) GetRepayReceiptLog(issuance *pty.Issuance, debtRecord *pty ...@@ -198,11 +226,14 @@ func (action *Action) GetRepayReceiptLog(issuance *pty.Issuance, debtRecord *pty
log := &types.ReceiptLog{} log := &types.ReceiptLog{}
log.Ty = pty.TyLogIssuanceRepay log.Ty = pty.TyLogIssuanceRepay
c := action.GetCollCommonRecipt(issuance) c := &pty.ReceiptIssuance{}
c.IssuanceId = issuance.IssuanceId
c.AccountAddr = action.fromaddr c.AccountAddr = action.fromaddr
c.DebtId = debtRecord.DebtId c.DebtId = debtRecord.DebtId
c.RecordStatus = debtRecord.Status c.Status = debtRecord.Status
c.RecordPreStatus = debtRecord.PreStatus c.PreStatus = debtRecord.PreStatus
c.Index = debtRecord.Index
c.PreIndex = debtRecord.PreIndex
log.Log = types.Encode(c) log.Log = types.Encode(c)
...@@ -214,11 +245,27 @@ func (action *Action) GetFeedReceiptLog(issuance *pty.Issuance, debtRecord *pty. ...@@ -214,11 +245,27 @@ func (action *Action) GetFeedReceiptLog(issuance *pty.Issuance, debtRecord *pty.
log := &types.ReceiptLog{} log := &types.ReceiptLog{}
log.Ty = pty.TyLogIssuanceFeed log.Ty = pty.TyLogIssuanceFeed
c := action.GetCollCommonRecipt(issuance) c := &pty.ReceiptIssuance{}
c.IssuanceId = issuance.IssuanceId
c.AccountAddr = debtRecord.AccountAddr c.AccountAddr = debtRecord.AccountAddr
c.DebtId = debtRecord.DebtId c.DebtId = debtRecord.DebtId
c.RecordStatus = debtRecord.Status c.Status = debtRecord.Status
c.RecordPreStatus = debtRecord.PreStatus c.PreStatus = debtRecord.PreStatus
c.Index = debtRecord.Index
c.PreIndex = debtRecord.PreIndex
log.Log = types.Encode(c)
return log
}
// GetFeedReceiptLog generate logs for Issuance price feed action
func (action *Action) GetPriceReceiptLog(price *pty.IssuanceAssetPriceRecord) *types.ReceiptLog {
log := &types.ReceiptLog{}
log.Ty = pty.TyLogIssuanceFeed
c := &pty.ReceiptIssuance{}
c.RecordTime = price.RecordTime
c.BtyPrice = price.BtyPrice
log.Log = types.Encode(c) log.Log = types.Encode(c)
...@@ -226,11 +273,16 @@ func (action *Action) GetFeedReceiptLog(issuance *pty.Issuance, debtRecord *pty. ...@@ -226,11 +273,16 @@ func (action *Action) GetFeedReceiptLog(issuance *pty.Issuance, debtRecord *pty.
} }
// GetCloseReceiptLog generate logs for Issuance close action // GetCloseReceiptLog generate logs for Issuance close action
func (action *Action) GetCloseReceiptLog(Issuance *pty.Issuance) *types.ReceiptLog { func (action *Action) GetCloseReceiptLog(issuance *pty.Issuance) *types.ReceiptLog {
log := &types.ReceiptLog{} log := &types.ReceiptLog{}
log.Ty = pty.TyLogIssuanceClose log.Ty = pty.TyLogIssuanceClose
c := action.GetCollCommonRecipt(Issuance) c := &pty.ReceiptIssuance{}
c.IssuanceId = issuance.IssuanceId
c.Status = issuance.Status
c.PreStatus = pty.IssuanceStatusCreated
c.Index = issuance.Index
c.PreIndex = issuance.PreIndex
log.Log = types.Encode(c) log.Log = types.Encode(c)
...@@ -277,24 +329,29 @@ func (action *Action) IssuanceManage(manage *pty.IssuanceManage) (*types.Receipt ...@@ -277,24 +329,29 @@ func (action *Action) IssuanceManage(manage *pty.IssuanceManage) (*types.Receipt
} }
// 添加大户地址 // 添加大户地址
var item types.ConfigItem
data, err := action.db.Get(AddrKey()) data, err := action.db.Get(AddrKey())
if err != nil { if err != nil {
if err != types.ErrNotFound { if err != types.ErrNotFound {
clog.Error("IssuanceManage", "error", err) clog.Error("IssuanceManage", "error", err)
return nil, err return nil, err
} }
value := types.Encode(manage) emptyValue := &types.ArrayConfig{Value: make([]string, 0)}
arr := types.ConfigItem_Arr{Arr: emptyValue}
item.Value = &arr
item.GetArr().Value = append(item.GetArr().Value, manage.SuperAddrs...)
value := types.Encode(&item)
action.db.Set(AddrKey(), value) action.db.Set(AddrKey(), value)
kv = append(kv, &types.KeyValue{Key:AddrKey(), Value: value}) kv = append(kv, &types.KeyValue{Key:AddrKey(), Value: value})
} else { } else {
var addrStore pty.IssuanceManage err = types.Decode(data, &item)
err = types.Decode(data, &addrStore)
if err != nil { if err != nil {
clog.Debug("IssuanceManage", "decode", err) clog.Debug("IssuanceManage", "decode", err)
return nil, err return nil, err
} }
addrStore.SuperAddrs = append(addrStore.SuperAddrs, manage.SuperAddrs...) item.GetArr().Value = append(item.GetArr().Value, manage.SuperAddrs...)
value := types.Encode(&addrStore) value := types.Encode(&item)
action.db.Set(AddrKey(), value) action.db.Set(AddrKey(), value)
kv = append(kv, &types.KeyValue{Key:AddrKey(), Value: value}) kv = append(kv, &types.KeyValue{Key:AddrKey(), Value: value})
} }
...@@ -320,20 +377,6 @@ func (action *Action) getSuperAddr() []string { ...@@ -320,20 +377,6 @@ func (action *Action) getSuperAddr() []string {
return addrStore.SuperAddrs return addrStore.SuperAddrs
} }
func isSuperAddr(super []string, addr string) bool {
if super == nil || len(super) == 0 {
return false
}
for _, superAddr := range super {
if superAddr == addr {
return true
}
}
return false
}
// IssuanceCreate 创建借贷,持有一定数量ccny的用户可创建借贷,提供给其他用户借贷 // IssuanceCreate 创建借贷,持有一定数量ccny的用户可创建借贷,提供给其他用户借贷
func (action *Action) IssuanceCreate(create *pty.IssuanceCreate) (*types.Receipt, error) { func (action *Action) IssuanceCreate(create *pty.IssuanceCreate) (*types.Receipt, error) {
var logs []*types.ReceiptLog var logs []*types.ReceiptLog
...@@ -347,7 +390,7 @@ func (action *Action) IssuanceCreate(create *pty.IssuanceCreate) (*types.Receipt ...@@ -347,7 +390,7 @@ func (action *Action) IssuanceCreate(create *pty.IssuanceCreate) (*types.Receipt
} }
// 检查ccny余额 // 检查ccny余额
if !action.CheckExecTokenAccount(action.fromaddr, create.TotalBalance, false) { if !action.CheckExecTokenAccount(action.fromaddr, create.TotalBalance*Coin, false) {
return nil, types.ErrInsufficientBalance return nil, types.ErrInsufficientBalance
} }
...@@ -360,7 +403,7 @@ func (action *Action) IssuanceCreate(create *pty.IssuanceCreate) (*types.Receipt ...@@ -360,7 +403,7 @@ func (action *Action) IssuanceCreate(create *pty.IssuanceCreate) (*types.Receipt
} }
// 冻结ccny // 冻结ccny
receipt, err = action.tokenAccount.ExecFrozen(action.fromaddr, action.execaddr, create.TotalBalance) receipt, err = action.tokenAccount.ExecFrozen(action.fromaddr, action.execaddr, create.TotalBalance*Coin)
if err != nil { if err != nil {
clog.Error("IssuanceCreate.Frozen", "addr", action.fromaddr, "execaddr", action.execaddr, "amount", create.TotalBalance) clog.Error("IssuanceCreate.Frozen", "addr", action.fromaddr, "execaddr", action.execaddr, "amount", create.TotalBalance)
return nil, err return nil, err
...@@ -371,16 +414,27 @@ func (action *Action) IssuanceCreate(create *pty.IssuanceCreate) (*types.Receipt ...@@ -371,16 +414,27 @@ func (action *Action) IssuanceCreate(create *pty.IssuanceCreate) (*types.Receipt
// 构造coll结构 // 构造coll结构
issu := &IssuanceDB{} issu := &IssuanceDB{}
issu.IssuanceId = issuanceID issu.IssuanceId = issuanceID
issu.LiquidationRatio = create.LiquidationRatio
issu.TotalBalance = create.TotalBalance issu.TotalBalance = create.TotalBalance
if create.LiquidationRatio != 0 {
issu.LiquidationRatio = create.LiquidationRatio
} else {
issu.LiquidationRatio = DefaultLiquidationRatio
}
if create.DebtCeiling != 0 {
issu.DebtCeiling = create.DebtCeiling
} else {
issu.DebtCeiling = DefaultDebtCeiling
}
if create.Period != 0 {
issu.Period = create.Period
} else {
issu.Period = DefaultPeriod
}
issu.Balance = create.TotalBalance issu.Balance = create.TotalBalance
issu.DebtCeiling = create.DebtCeiling
issu.Period = create.Period
issu.CreateTime = action.blocktime issu.CreateTime = action.blocktime
issu.IssuerAddr = action.fromaddr issu.IssuerAddr = action.fromaddr
issu.Status = pty.IssuanceActionCreate issu.Status = pty.IssuanceActionCreate
issu.Index = action.GetIndex() issu.Index = action.GetIndex()
issu.CreateIndex = issu.Index
clog.Debug("IssuanceCreate created", "IssuanceID", issuanceID, "TotalBalance", issu.TotalBalance) clog.Debug("IssuanceCreate created", "IssuanceID", issuanceID, "TotalBalance", issu.TotalBalance)
...@@ -410,16 +464,16 @@ func getBtyNumToFrozen(value int64, price float32, ratio float32) (int64,error) ...@@ -410,16 +464,16 @@ func getBtyNumToFrozen(value int64, price float32, ratio float32) (int64,error)
// 获取最近抵押物价格 // 获取最近抵押物价格
func (action *Action)getLatestPrice(db dbm.KV) (float32, error) { func (action *Action)getLatestPrice(db dbm.KV) (float32, error) {
data, err := db.Get(calcIssuanceLatestPriceKey()) data, err := db.Get(PriceKey())
if err != nil { if err != nil {
clog.Debug("getLatestPrice", "get", err) clog.Error("getLatestPrice", "get", err)
return -1, err return -1, err
} }
var price pty.IssuanceAssetPriceRecord var price pty.IssuanceAssetPriceRecord
//decode //decode
err = types.Decode(data, &price) err = types.Decode(data, &price)
if err != nil { if err != nil {
clog.Debug("getLatestPrice", "decode", err) clog.Error("getLatestPrice", "decode", err)
return -1, err return -1, err
} }
...@@ -455,6 +509,11 @@ func (action *Action) IssuanceDebt(debt *pty.IssuanceDebt) (*types.Receipt, erro ...@@ -455,6 +509,11 @@ func (action *Action) IssuanceDebt(debt *pty.IssuanceDebt) (*types.Receipt, erro
var logs []*types.ReceiptLog var logs []*types.ReceiptLog
var kv []*types.KeyValue var kv []*types.KeyValue
if !isSuperAddr(action.fromaddr, action.db) {
clog.Error("IssuanceDebt", "error", "IssuanceDebt need super address")
return nil, pty.ErrPermissionDeny
}
// 查找对应的借贷ID // 查找对应的借贷ID
issuance, err := queryIssuanceByID(action.db, debt.IssuanceId) issuance, err := queryIssuanceByID(action.db, debt.IssuanceId)
if err != nil { if err != nil {
...@@ -468,13 +527,6 @@ func (action *Action) IssuanceDebt(debt *pty.IssuanceDebt) (*types.Receipt, erro ...@@ -468,13 +527,6 @@ func (action *Action) IssuanceDebt(debt *pty.IssuanceDebt) (*types.Receipt, erro
return nil, pty.ErrIssuanceStatus return nil, pty.ErrIssuanceStatus
} }
//// 一个地址在一期借贷中只允许借出一次
//for _, record := range issuance.DebtRecords {
// if record.AccountAddr == action.fromaddr {
// clog.Error("IssuanceDebt","IssuanceId", debt.IssuanceId, action.fromaddr, "execaddr", action.execaddr, "err", pty.ErrIssuanceAccountExist)
// return nil, err
// }
//}
issu := &IssuanceDB{*issuance} issu := &IssuanceDB{*issuance}
// 借贷金额检查 // 借贷金额检查
...@@ -511,7 +563,7 @@ func (action *Action) IssuanceDebt(debt *pty.IssuanceDebt) (*types.Receipt, erro ...@@ -511,7 +563,7 @@ func (action *Action) IssuanceDebt(debt *pty.IssuanceDebt) (*types.Receipt, erro
} }
// 检查抵押物账户余额 // 检查抵押物账户余额
if !action.CheckExecAccountBalance(action.fromaddr, btyFrozen, 0) { if !action.CheckExecAccountBalance(action.fromaddr, btyFrozen*Coin, 0) {
clog.Error("IssuanceDebt", "CollID", issu.IssuanceId, "addr", action.fromaddr, "execaddr", action.execaddr, "err", types.ErrNoBalance) clog.Error("IssuanceDebt", "CollID", issu.IssuanceId, "addr", action.fromaddr, "execaddr", action.execaddr, "err", types.ErrNoBalance)
return nil, types.ErrNoBalance return nil, types.ErrNoBalance
} }
...@@ -526,7 +578,7 @@ func (action *Action) IssuanceDebt(debt *pty.IssuanceDebt) (*types.Receipt, erro ...@@ -526,7 +578,7 @@ func (action *Action) IssuanceDebt(debt *pty.IssuanceDebt) (*types.Receipt, erro
kv = append(kv, receipt.KV...) kv = append(kv, receipt.KV...)
// 抵押物冻结 // 抵押物冻结
receipt, err = action.coinsAccount.ExecFrozen(issu.IssuerAddr, action.execaddr, btyFrozen) receipt, err = action.coinsAccount.ExecFrozen(issu.IssuerAddr, action.execaddr, btyFrozen*Coin)
if err != nil { if err != nil {
clog.Error("IssuanceDebt.Frozen", "addr", issu.IssuerAddr, "execaddr", action.execaddr, "amount", btyFrozen) clog.Error("IssuanceDebt.Frozen", "addr", issu.IssuerAddr, "execaddr", action.execaddr, "amount", btyFrozen)
return nil, err return nil, err
...@@ -535,7 +587,7 @@ func (action *Action) IssuanceDebt(debt *pty.IssuanceDebt) (*types.Receipt, erro ...@@ -535,7 +587,7 @@ func (action *Action) IssuanceDebt(debt *pty.IssuanceDebt) (*types.Receipt, erro
kv = append(kv, receipt.KV...) kv = append(kv, receipt.KV...)
// 借出ccny // 借出ccny
receipt, err = action.tokenAccount.ExecTransfer(issu.IssuerAddr, action.fromaddr, action.execaddr, debt.Value) receipt, err = action.tokenAccount.ExecTransfer(issu.IssuerAddr, action.fromaddr, action.execaddr, debt.Value*Coin)
if err != nil { if err != nil {
clog.Error("IssuanceDebt.ExecTokenTransfer", "addr", action.fromaddr, "execaddr", action.execaddr, "amount", debt.Value) clog.Error("IssuanceDebt.ExecTokenTransfer", "addr", action.fromaddr, "execaddr", action.execaddr, "amount", debt.Value)
return nil, err return nil, err
...@@ -554,6 +606,7 @@ func (action *Action) IssuanceDebt(debt *pty.IssuanceDebt) (*types.Receipt, erro ...@@ -554,6 +606,7 @@ func (action *Action) IssuanceDebt(debt *pty.IssuanceDebt) (*types.Receipt, erro
debtRecord.LiquidationPrice = issu.LiquidationRatio * lastPrice * pty.IssuancePreLiquidationRatio debtRecord.LiquidationPrice = issu.LiquidationRatio * lastPrice * pty.IssuancePreLiquidationRatio
debtRecord.Status = pty.IssuanceUserStatusCreate debtRecord.Status = pty.IssuanceUserStatusCreate
debtRecord.ExpireTime = action.blocktime + issu.Period debtRecord.ExpireTime = action.blocktime + issu.Period
debtRecord.Index = action.GetIndex()
// 记录当前借贷的最高自动清算价格 // 记录当前借贷的最高自动清算价格
if issu.LatestLiquidationPrice < debtRecord.LiquidationPrice { if issu.LatestLiquidationPrice < debtRecord.LiquidationPrice {
...@@ -565,8 +618,6 @@ func (action *Action) IssuanceDebt(debt *pty.IssuanceDebt) (*types.Receipt, erro ...@@ -565,8 +618,6 @@ func (action *Action) IssuanceDebt(debt *pty.IssuanceDebt) (*types.Receipt, erro
issu.CollateralValue += btyFrozen issu.CollateralValue += btyFrozen
issu.DebtValue += debt.Value issu.DebtValue += debt.Value
issu.Balance -= debt.Value issu.Balance -= debt.Value
issu.PreIndex = issu.Index
issu.Index = action.GetIndex()
issu.Save(action.db) issu.Save(action.db)
kv = append(kv, issu.GetKVSet()...) kv = append(kv, issu.GetKVSet()...)
...@@ -615,13 +666,13 @@ func (action *Action) IssuanceRepay(repay *pty.IssuanceRepay) (*types.Receipt, e ...@@ -615,13 +666,13 @@ func (action *Action) IssuanceRepay(repay *pty.IssuanceRepay) (*types.Receipt, e
} }
// 检查 // 检查
if !action.CheckExecTokenAccount(action.fromaddr, debtRecord.DebtValue, false) { if !action.CheckExecTokenAccount(action.fromaddr, debtRecord.DebtValue*Coin, false) {
clog.Error("IssuanceRepay", "CollID", issu.IssuanceId, "addr", action.fromaddr, "execaddr", action.execaddr, "err", types.ErrInsufficientBalance) clog.Error("IssuanceRepay", "CollID", issu.IssuanceId, "addr", action.fromaddr, "execaddr", action.execaddr, "err", types.ErrInsufficientBalance)
return nil, types.ErrNoBalance return nil, types.ErrNoBalance
} }
// ccny转移 // ccny转移
receipt, err = action.tokenAccount.ExecTransfer(action.fromaddr, issu.IssuerAddr, action.execaddr, debtRecord.DebtValue) receipt, err = action.tokenAccount.ExecTransfer(action.fromaddr, issu.IssuerAddr, action.execaddr, debtRecord.DebtValue*Coin)
if err != nil { if err != nil {
clog.Error("IssuanceRepay.ExecTokenTransfer", "addr", action.fromaddr, "execaddr", action.execaddr, "amount", debtRecord.DebtValue) clog.Error("IssuanceRepay.ExecTokenTransfer", "addr", action.fromaddr, "execaddr", action.execaddr, "amount", debtRecord.DebtValue)
return nil, err return nil, err
...@@ -630,7 +681,7 @@ func (action *Action) IssuanceRepay(repay *pty.IssuanceRepay) (*types.Receipt, e ...@@ -630,7 +681,7 @@ func (action *Action) IssuanceRepay(repay *pty.IssuanceRepay) (*types.Receipt, e
kv = append(kv, receipt.KV...) kv = append(kv, receipt.KV...)
// 抵押物归还 // 抵押物归还
receipt, err = action.coinsAccount.ExecTransferFrozen(issu.IssuerAddr, action.execaddr, action.execaddr, debtRecord.CollateralValue) receipt, err = action.coinsAccount.ExecTransferFrozen(issu.IssuerAddr, action.fromaddr, action.execaddr, debtRecord.CollateralValue*Coin)
if err != nil { if err != nil {
clog.Error("IssuanceRepay.ExecTransferFrozen", "addr", issu.IssuerAddr, "execaddr", action.execaddr, "amount", debtRecord.CollateralValue) clog.Error("IssuanceRepay.ExecTransferFrozen", "addr", issu.IssuerAddr, "execaddr", action.execaddr, "amount", debtRecord.CollateralValue)
return nil, err return nil, err
...@@ -641,6 +692,8 @@ func (action *Action) IssuanceRepay(repay *pty.IssuanceRepay) (*types.Receipt, e ...@@ -641,6 +692,8 @@ func (action *Action) IssuanceRepay(repay *pty.IssuanceRepay) (*types.Receipt, e
// 借贷记录关闭 // 借贷记录关闭
debtRecord.PreStatus = debtRecord.Status debtRecord.PreStatus = debtRecord.Status
debtRecord.Status = pty.IssuanceUserStatusClose debtRecord.Status = pty.IssuanceUserStatusClose
debtRecord.PreIndex = debtRecord.Index
debtRecord.Index = action.GetIndex()
// 保存 // 保存
issu.Balance += debtRecord.DebtValue issu.Balance += debtRecord.DebtValue
...@@ -650,8 +703,6 @@ func (action *Action) IssuanceRepay(repay *pty.IssuanceRepay) (*types.Receipt, e ...@@ -650,8 +703,6 @@ func (action *Action) IssuanceRepay(repay *pty.IssuanceRepay) (*types.Receipt, e
issu.InvalidRecords = append(issu.InvalidRecords, debtRecord) issu.InvalidRecords = append(issu.InvalidRecords, debtRecord)
issu.LatestLiquidationPrice = getLatestLiquidationPrice(&issu.Issuance) issu.LatestLiquidationPrice = getLatestLiquidationPrice(&issu.Issuance)
issu.LatestExpireTime = getLatestExpireTime(&issu.Issuance) issu.LatestExpireTime = getLatestExpireTime(&issu.Issuance)
issu.PreIndex = issu.Index
issu.Index = action.GetIndex()
issu.Save(action.db) issu.Save(action.db)
kv = append(kv, issu.GetKVSet()...) kv = append(kv, issu.GetKVSet()...)
...@@ -687,7 +738,7 @@ func (action *Action) systemLiquidation(issu *pty.Issuance, price float32) (*typ ...@@ -687,7 +738,7 @@ func (action *Action) systemLiquidation(issu *pty.Issuance, price float32) (*typ
} }
// 抵押物转移 // 抵押物转移
receipt, err := action.coinsAccount.ExecTransferFrozen(action.fromaddr, getGuarantorAddr, action.execaddr, debtRecord.CollateralValue) receipt, err := action.coinsAccount.ExecTransferFrozen(issu.IssuerAddr, getGuarantorAddr, action.execaddr, debtRecord.CollateralValue*Coin)
if err != nil { if err != nil {
clog.Error("systemLiquidation", "addr", action.fromaddr, "execaddr", action.execaddr, "amount", debtRecord.CollateralValue, "err", err) clog.Error("systemLiquidation", "addr", action.fromaddr, "execaddr", action.execaddr, "amount", debtRecord.CollateralValue, "err", err)
continue continue
...@@ -699,14 +750,16 @@ func (action *Action) systemLiquidation(issu *pty.Issuance, price float32) (*typ ...@@ -699,14 +750,16 @@ func (action *Action) systemLiquidation(issu *pty.Issuance, price float32) (*typ
debtRecord.LiquidateTime = action.blocktime debtRecord.LiquidateTime = action.blocktime
debtRecord.PreStatus = debtRecord.Status debtRecord.PreStatus = debtRecord.Status
debtRecord.Status = pty.IssuanceUserStatusSystemLiquidate debtRecord.Status = pty.IssuanceUserStatusSystemLiquidate
issu.DebtRecords = append(issu.DebtRecords[:index], issu.DebtRecords[index+1:]...) debtRecord.PreIndex = debtRecord.Index
debtRecord.Index = action.GetIndex()
issu.InvalidRecords = append(issu.InvalidRecords, debtRecord) issu.InvalidRecords = append(issu.InvalidRecords, debtRecord)
issu.DebtRecords = append(issu.DebtRecords[:index], issu.DebtRecords[index+1:]...)
} else { } else {
debtRecord.PreIndex = debtRecord.Index
debtRecord.Index = action.GetIndex()
debtRecord.PreStatus = debtRecord.Status debtRecord.PreStatus = debtRecord.Status
debtRecord.Status = pty.IssuanceUserStatusWarning debtRecord.Status = pty.IssuanceUserStatusWarning
} }
issu.PreIndex = issu.Index
issu.Index = action.GetIndex()
log := action.GetFeedReceiptLog(issu, debtRecord) log := action.GetFeedReceiptLog(issu, debtRecord)
logs = append(logs, log) logs = append(logs, log)
...@@ -743,7 +796,7 @@ func (action *Action) expireLiquidation(issu *pty.Issuance) (*types.Receipt, err ...@@ -743,7 +796,7 @@ func (action *Action) expireLiquidation(issu *pty.Issuance) (*types.Receipt, err
} }
// 抵押物转移 // 抵押物转移
receipt, err := action.coinsAccount.ExecTransferFrozen(action.fromaddr, getGuarantorAddr, action.execaddr, debtRecord.CollateralValue) receipt, err := action.coinsAccount.ExecTransferFrozen(issu.IssuerAddr, getGuarantorAddr, action.execaddr, debtRecord.CollateralValue*Coin)
if err != nil { if err != nil {
clog.Error("systemLiquidation", "addr", action.fromaddr, "execaddr", action.execaddr, "amount", debtRecord.CollateralValue, "err", err) clog.Error("systemLiquidation", "addr", action.fromaddr, "execaddr", action.execaddr, "amount", debtRecord.CollateralValue, "err", err)
continue continue
...@@ -755,14 +808,16 @@ func (action *Action) expireLiquidation(issu *pty.Issuance) (*types.Receipt, err ...@@ -755,14 +808,16 @@ func (action *Action) expireLiquidation(issu *pty.Issuance) (*types.Receipt, err
debtRecord.LiquidateTime = action.blocktime debtRecord.LiquidateTime = action.blocktime
debtRecord.PreStatus = debtRecord.Status debtRecord.PreStatus = debtRecord.Status
debtRecord.Status = pty.IssuanceUserStatusExpireLiquidate debtRecord.Status = pty.IssuanceUserStatusExpireLiquidate
issu.DebtRecords = append(issu.DebtRecords[:index], issu.DebtRecords[index+1:]...) debtRecord.PreIndex = debtRecord.Index
debtRecord.Index = action.GetIndex()
issu.InvalidRecords = append(issu.InvalidRecords, debtRecord) issu.InvalidRecords = append(issu.InvalidRecords, debtRecord)
issu.DebtRecords = append(issu.DebtRecords[:index], issu.DebtRecords[index+1:]...)
} else { } else {
debtRecord.PreIndex = debtRecord.Index
debtRecord.Index = action.GetIndex()
debtRecord.PreStatus = debtRecord.Status debtRecord.PreStatus = debtRecord.Status
debtRecord.Status = pty.IssuanceUserStatusExpire debtRecord.Status = pty.IssuanceUserStatusExpire
} }
issu.PreIndex = issu.Index
issu.Index = action.GetIndex()
log := action.GetFeedReceiptLog(issu, debtRecord) log := action.GetFeedReceiptLog(issu, debtRecord)
logs = append(logs, log) logs = append(logs, log)
...@@ -815,14 +870,14 @@ func (action *Action) IssuanceFeed(feed *pty.IssuanceFeed) (*types.Receipt, erro ...@@ -815,14 +870,14 @@ func (action *Action) IssuanceFeed(feed *pty.IssuanceFeed) (*types.Receipt, erro
return nil, pty.ErrPriceInvalid return nil, pty.ErrPriceInvalid
} }
collIDRecords, err := queryIssuanceByStatus(action.localDB, pty.IssuanceStatusCreated) ids, err := queryIssuanceByStatus(action.localDB, pty.IssuanceStatusCreated)
if err != nil { if err != nil {
clog.Error("IssuancePriceFeed", "get issuance record error", err) clog.Error("IssuancePriceFeed", "get issuance record error", err)
return nil, err return nil, err
} }
for _, collID := range collIDRecords { for _, collID := range ids {
issu, err := queryIssuanceByID(action.db, collID.IssuanceId) issu, err := queryIssuanceByID(action.db, collID)
if err != nil { if err != nil {
clog.Error("IssuancePriceFeed", "Issuance ID", issu.IssuanceId, "get issuance record by id error", err) clog.Error("IssuancePriceFeed", "Issuance ID", issu.IssuanceId, "get issuance record by id error", err)
continue continue
...@@ -854,12 +909,11 @@ func (action *Action) IssuanceFeed(feed *pty.IssuanceFeed) (*types.Receipt, erro ...@@ -854,12 +909,11 @@ func (action *Action) IssuanceFeed(feed *pty.IssuanceFeed) (*types.Receipt, erro
priceRecord.RecordTime = action.blocktime priceRecord.RecordTime = action.blocktime
// 喂价记录 // 喂价记录
pricekv := &types.KeyValue{Key: calcIssuancePriceKey(string(action.blocktime)), Value: types.Encode(&priceRecord)} log := action.GetPriceReceiptLog(&priceRecord)
action.db.Set(pricekv.Key, pricekv.Value) logs = append(logs, log)
kv = append(kv, pricekv)
// 最近喂价记录 // 最近喂价记录
pricekv = &types.KeyValue{Key: calcIssuanceLatestPriceKey(), Value: types.Encode(&priceRecord)} pricekv := &types.KeyValue{Key: PriceKey(), Value: types.Encode(&priceRecord)}
action.db.Set(pricekv.Key, pricekv.Value) action.db.Set(pricekv.Key, pricekv.Value)
kv = append(kv, pricekv) kv = append(kv, pricekv)
...@@ -871,6 +925,7 @@ func (action *Action) IssuanceFeed(feed *pty.IssuanceFeed) (*types.Receipt, erro ...@@ -871,6 +925,7 @@ func (action *Action) IssuanceFeed(feed *pty.IssuanceFeed) (*types.Receipt, erro
func (action *Action) IssuanceClose(close *pty.IssuanceClose) (*types.Receipt, error) { func (action *Action) IssuanceClose(close *pty.IssuanceClose) (*types.Receipt, error) {
var logs []*types.ReceiptLog var logs []*types.ReceiptLog
var kv []*types.KeyValue var kv []*types.KeyValue
var receipt *types.Receipt
issuance, err := queryIssuanceByID(action.db, close.IssuanceId) issuance, err := queryIssuanceByID(action.db, close.IssuanceId)
if err != nil { if err != nil {
...@@ -878,6 +933,11 @@ func (action *Action) IssuanceClose(close *pty.IssuanceClose) (*types.Receipt, e ...@@ -878,6 +933,11 @@ func (action *Action) IssuanceClose(close *pty.IssuanceClose) (*types.Receipt, e
return nil, err return nil, err
} }
if !isRightAddr(manageKey, action.fromaddr, action.db) {
clog.Error("IssuanceClose", "addr", action.fromaddr, "error", "Address has no permission to close")
return nil, pty.ErrPermissionDeny
}
for _, debtRecord := range issuance.DebtRecords { for _, debtRecord := range issuance.DebtRecords {
if debtRecord.Status != pty.IssuanceUserStatusClose { if debtRecord.Status != pty.IssuanceUserStatusClose {
clog.Error("IssuanceClose", "IssuanceId", close.IssuanceId, "addr", action.fromaddr, "execaddr", action.execaddr, "err", pty.ErrIssuanceRecordNotEmpty) clog.Error("IssuanceClose", "IssuanceId", close.IssuanceId, "addr", action.fromaddr, "execaddr", action.execaddr, "err", pty.ErrIssuanceRecordNotEmpty)
...@@ -885,11 +945,20 @@ func (action *Action) IssuanceClose(close *pty.IssuanceClose) (*types.Receipt, e ...@@ -885,11 +945,20 @@ func (action *Action) IssuanceClose(close *pty.IssuanceClose) (*types.Receipt, e
} }
} }
// 解冻ccny
receipt, err = action.tokenAccount.ExecActive(action.fromaddr, action.execaddr, issuance.TotalBalance*Coin)
if err != nil {
clog.Error("IssuanceClose.ExecActive", "addr", action.fromaddr, "execaddr", action.execaddr, "amount", issuance.TotalBalance)
return nil, err
}
logs = append(logs, receipt.Logs...)
kv = append(kv, receipt.KV...)
clog.Debug("IssuanceClose", "ID", close.IssuanceId) clog.Debug("IssuanceClose", "ID", close.IssuanceId)
issu := &IssuanceDB{*issuance} issu := &IssuanceDB{*issuance}
issu.Status = pty.IssuanceStatusClose issu.Status = pty.IssuanceStatusClose
issu.PreIndex = issu.CreateIndex issu.PreIndex = issu.Index
issu.Index = action.GetIndex() issu.Index = action.GetIndex()
issu.Save(action.db) issu.Save(action.db)
...@@ -905,7 +974,6 @@ func (action *Action) IssuanceClose(close *pty.IssuanceClose) (*types.Receipt, e ...@@ -905,7 +974,6 @@ func (action *Action) IssuanceClose(close *pty.IssuanceClose) (*types.Receipt, e
func queryIssuanceByID(db dbm.KV, issuanceID string) (*pty.Issuance, error) { func queryIssuanceByID(db dbm.KV, issuanceID string) (*pty.Issuance, error) {
data, err := db.Get(Key(issuanceID)) data, err := db.Get(Key(issuanceID))
if err != nil { if err != nil {
clog.Error("queryIssuanceByID", "error", err)
return nil, err return nil, err
} }
...@@ -919,14 +987,14 @@ func queryIssuanceByID(db dbm.KV, issuanceID string) (*pty.Issuance, error) { ...@@ -919,14 +987,14 @@ func queryIssuanceByID(db dbm.KV, issuanceID string) (*pty.Issuance, error) {
} }
// 根据发行状态查找发行ID // 根据发行状态查找发行ID
func queryIssuanceByStatus(localdb dbm.Lister, status int32) ([]*pty.IssuanceRecord, error) { func queryIssuanceByStatus(localdb dbm.Lister, status int32) ([]string, error) {
data, err := localdb.List(calcIssuanceStatusPrefix(status), nil, DefultCount, ListDESC) data, err := localdb.List(calcIssuanceStatusPrefix(status), nil, DefultCount, ListDESC)
if err != nil { if err != nil {
clog.Debug("queryIssuancesByStatus", "error", err) clog.Debug("queryIssuancesByStatus", "error", err)
return nil, err return nil, err
} }
var colls []*pty.IssuanceRecord var ids []string
var issu pty.IssuanceRecord var issu pty.IssuanceRecord
for _, collBytes := range data { for _, collBytes := range data {
err = types.Decode(collBytes, &issu) err = types.Decode(collBytes, &issu)
...@@ -934,10 +1002,10 @@ func queryIssuanceByStatus(localdb dbm.Lister, status int32) ([]*pty.IssuanceRec ...@@ -934,10 +1002,10 @@ func queryIssuanceByStatus(localdb dbm.Lister, status int32) ([]*pty.IssuanceRec
clog.Debug("queryIssuancesByStatus", "decode", err) clog.Debug("queryIssuancesByStatus", "decode", err)
return nil, err return nil, err
} }
colls = append(colls, &issu) ids = append(ids, issu.IssuanceId)
} }
return colls, nil return ids, nil
} }
// 精确查找发行记录 // 精确查找发行记录
...@@ -969,7 +1037,7 @@ func queryIssuanceRecordsByStatus(db dbm.KV, localdb dbm.Lister, status int32) ( ...@@ -969,7 +1037,7 @@ func queryIssuanceRecordsByStatus(db dbm.KV, localdb dbm.Lister, status int32) (
if status == 0 { if status == 0 {
statusKey = "" statusKey = ""
} else { } else {
statusKey = string(status) statusKey = fmt.Sprintf("%d", status)
} }
data, err := localdb.List(calcIssuanceRecordStatusPrefix(statusKey), nil, DefultCount, ListDESC) data, err := localdb.List(calcIssuanceRecordStatusPrefix(statusKey), nil, DefultCount, ListDESC)
...@@ -984,13 +1052,13 @@ func queryIssuanceRecordsByStatus(db dbm.KV, localdb dbm.Lister, status int32) ( ...@@ -984,13 +1052,13 @@ func queryIssuanceRecordsByStatus(db dbm.KV, localdb dbm.Lister, status int32) (
err = types.Decode(collBytes, &issu) err = types.Decode(collBytes, &issu)
if err != nil { if err != nil {
clog.Error("queryIssuanceRecordsByStatus", "decode", err) clog.Error("queryIssuanceRecordsByStatus", "decode", err)
return nil, err continue
} }
record, err := queryIssuanceRecordByID(db, issu.IssuanceId, issu.DebtId) record, err := queryIssuanceRecordByID(db, issu.IssuanceId, issu.DebtId)
if err != nil { if err != nil {
clog.Error("queryIssuanceRecordsByStatus", "decode", err) clog.Error("queryIssuanceRecordsByStatus", "decode", err)
return nil, err continue
} }
records = append(records, record) records = append(records, record)
} }
......
...@@ -7,46 +7,41 @@ package executor ...@@ -7,46 +7,41 @@ package executor
import "fmt" import "fmt"
func calcIssuanceKey(issuanceID string, index int64) []byte { func calcIssuanceKey(issuanceID string, index int64) []byte {
key := fmt.Sprintf("LODB-Issuance-ID:%s:%018d", issuanceID, index) key := fmt.Sprintf("LODB-issuance-ID:%s:%018d", issuanceID, index)
return []byte(key) return []byte(key)
} }
func calcIssuanceStatusPrefix(status int32) []byte { func calcIssuanceStatusPrefix(status int32) []byte {
key := fmt.Sprintf("LODB-Issuance-status-index:%d", status) key := fmt.Sprintf("LODB-issuance-status:%d", status)
return []byte(key) return []byte(key)
} }
func calcIssuanceStatusKey(status int32, index int64) []byte { func calcIssuanceStatusKey(status int32, index int64) []byte {
key := fmt.Sprintf("LODB-Issuance-status:%d:%018d", status, index) key := fmt.Sprintf("LODB-issuance-status:%d:%018d", status, index)
return []byte(key) return []byte(key)
} }
func calcIssuanceRecordAddrPrefix(addr string) []byte { func calcIssuanceRecordAddrPrefix(addr string) []byte {
key := fmt.Sprintf("LODB-Issuance-record-addr:%s", addr) key := fmt.Sprintf("LODB-issuance-record-addr:%s", addr)
return []byte(key) return []byte(key)
} }
func calcIssuanceRecordAddrKey(addr string, index int64) []byte { func calcIssuanceRecordAddrKey(addr string, index int64) []byte {
key := fmt.Sprintf("LODB-Issuance-record-addr:%s:%018d", addr, index) key := fmt.Sprintf("LODB-issuance-record-addr:%s:%018d", addr, index)
return []byte(key) return []byte(key)
} }
func calcIssuancePriceKey(time string) []byte { func calcIssuancePriceKey(time string) []byte {
key := fmt.Sprintf("LODB-Issuance-price:%s", time) key := fmt.Sprintf("LODB-issuance-price:%s", time)
return []byte(key)
}
func calcIssuanceLatestPriceKey() []byte {
key := fmt.Sprintf("LODB-Issuance-latest-price")
return []byte(key) return []byte(key)
} }
func calcIssuanceRecordStatusPrefix(status string) []byte { func calcIssuanceRecordStatusPrefix(status string) []byte {
key := fmt.Sprintf("LODB-Issuance-record-status:%s", status) key := fmt.Sprintf("LODB-issuance-record-status:%s", status)
return []byte(key) return []byte(key)
} }
func calcIssuanceRecordStatusKey(status int32, index int64) []byte { func calcIssuanceRecordStatusKey(status int32, index int64) []byte {
key := fmt.Sprintf("LODB-Issuance-record-status:%d:%018d", status, index) key := fmt.Sprintf("LODB-issuance-record-status:%d:%018d", status, index)
return []byte(key) return []byte(key)
} }
\ No newline at end of file
...@@ -22,6 +22,8 @@ func (c *Issuance) Query_IssuanceInfoByID(req *pty.ReqIssuanceInfo) (types.Messa ...@@ -22,6 +22,8 @@ func (c *Issuance) Query_IssuanceInfoByID(req *pty.ReqIssuanceInfo) (types.Messa
DebtCeiling: issu.DebtCeiling, DebtCeiling: issu.DebtCeiling,
LiquidationRatio: issu.LiquidationRatio, LiquidationRatio: issu.LiquidationRatio,
Balance: issu.Balance, Balance: issu.Balance,
CollateralValue: issu.CollateralValue,
DebtValue: issu.DebtValue,
}, nil }, nil
} }
...@@ -40,6 +42,8 @@ func (c *Issuance) Query_IssuanceInfoByIDs(req *pty.ReqIssuanceInfos) (types.Mes ...@@ -40,6 +42,8 @@ func (c *Issuance) Query_IssuanceInfoByIDs(req *pty.ReqIssuanceInfos) (types.Mes
DebtCeiling: issu.DebtCeiling, DebtCeiling: issu.DebtCeiling,
LiquidationRatio: issu.LiquidationRatio, LiquidationRatio: issu.LiquidationRatio,
Balance: issu.Balance, Balance: issu.Balance,
CollateralValue: issu.CollateralValue,
DebtValue: issu.DebtValue,
}) })
} }
...@@ -50,49 +54,46 @@ func (c *Issuance) Query_IssuanceByStatus(req *pty.ReqIssuanceByStatus) (types.M ...@@ -50,49 +54,46 @@ func (c *Issuance) Query_IssuanceByStatus(req *pty.ReqIssuanceByStatus) (types.M
ids := &pty.RepIssuanceIDs{} ids := &pty.RepIssuanceIDs{}
issuIDRecords, err := queryIssuanceByStatus(c.GetLocalDB(), req.Status) issuIDRecords, err := queryIssuanceByStatus(c.GetLocalDB(), req.Status)
if err != nil { if err != nil {
clog.Error("Query_IssuanceByStatus", "get issuance record error", err) clog.Error("Query_IssuanceByStatus", "get issuance error", err)
return nil, err return nil, err
} }
ids.IDs = append(ids.IDs, issuIDRecords...)
for _, record := range issuIDRecords {
ids.IDs = append(ids.IDs, record.IssuanceId)
}
return ids, nil return ids, nil
} }
func (c *Issuance) Query_IssuanceRecordByID(req *pty.ReqIssuanceDebtInfo) (types.Message, error) { func (c *Issuance) Query_IssuanceRecordByID(req *pty.ReqIssuanceDebtInfo) (types.Message, error) {
ret := &pty.RepIssuanceDebtInfo{}
issuRecord, err := queryIssuanceRecordByID(c.GetStateDB(), req.IssuanceId, req.DebtId) issuRecord, err := queryIssuanceRecordByID(c.GetStateDB(), req.IssuanceId, req.DebtId)
if err != nil { if err != nil {
clog.Error("Query_IssuanceRecordByID", "get issuance record error", err) clog.Error("Query_IssuanceRecordByID", "get issuance record error", err)
return nil, err return nil, err
} }
ret := &pty.RepIssuanceDebtInfo{}
ret.Record = issuRecord ret.Record = issuRecord
return issuRecord, nil return ret, nil
} }
func (c *Issuance) Query_IssuanceRecordsByAddr(req *pty.ReqIssuanceRecordsByAddr) (types.Message, error) { func (c *Issuance) Query_IssuanceRecordsByAddr(req *pty.ReqIssuanceRecordsByAddr) (types.Message, error) {
ret := &pty.RepIssuanceRecords{}
records, err := queryIssuanceRecordByAddr(c.GetStateDB(), 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.RepIssuanceRecords{}
ret.Records = records ret.Records = records
return ret, nil return ret, nil
} }
func (c *Issuance) Query_IssuanceRecordsByStatus(req *pty.ReqIssuanceRecordsByStatus) (types.Message, error) { func (c *Issuance) Query_IssuanceRecordsByStatus(req *pty.ReqIssuanceRecordsByStatus) (types.Message, error) {
ret := &pty.RepIssuanceRecords{}
records, err := queryIssuanceRecordsByStatus(c.GetStateDB(), 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_IssuanceDebtInfoByStatus", "get issuance record error", err)
return nil, err return nil, err
} }
ret := &pty.RepIssuanceRecords{} ret.Records = append(ret.Records, records...)
ret.Records = records
return ret, nil return ret, nil
} }
\ No newline at end of file
...@@ -21,7 +21,6 @@ message Issuance { ...@@ -21,7 +21,6 @@ message Issuance {
string issuerAddr = 15;//发行地址 string issuerAddr = 15;//发行地址
int64 index = 16;//当前索引 int64 index = 16;//当前索引
int64 preIndex = 17;//上级索引 int64 preIndex = 17;//上级索引
int64 createIndex = 18;//创建索引,用于close删除状态
} }
// 抵押记录 // 抵押记录
...@@ -37,6 +36,8 @@ message DebtRecord { ...@@ -37,6 +36,8 @@ message DebtRecord {
int64 expireTime = 9; //超时清算时间 int64 expireTime = 9; //超时清算时间
int32 preStatus = 10;//上一次抵押状态,用于告警恢复 int32 preStatus = 10;//上一次抵押状态,用于告警恢复
string debtId = 11;//借贷id string debtId = 11;//借贷id
int64 index = 12;//当前索引
int64 preIndex = 13;//上级索引
} }
// 资产价格记录 // 资产价格记录
...@@ -98,12 +99,13 @@ message IssuanceClose { ...@@ -98,12 +99,13 @@ message IssuanceClose {
message ReceiptIssuance { message ReceiptIssuance {
string issuanceId = 1; string issuanceId = 1;
string accountAddr = 2; string accountAddr = 2;
int32 status = 3; string debtId = 3;
string debtId = 4; int32 status = 4;
int32 recordStatus = 5; int32 preStatus = 5;
int32 recordPreStatus = 6; int64 index = 6;
int64 index = 7; int64 preIndex = 7;
int64 preIndex = 8; int64 recordTime = 8; //价格记录时间
float btyPrice = 9; //bty价格
} }
// exec_local 借贷记录信息 // exec_local 借贷记录信息
......
...@@ -84,7 +84,7 @@ func (Issuance IssuanceType) CreateTx(action string, message json.RawMessage) (* ...@@ -84,7 +84,7 @@ func (Issuance IssuanceType) CreateTx(action string, message json.RawMessage) (*
return nil, types.ErrInvalidParam return nil, types.ErrInvalidParam
} }
return CreateRawIssuanceRepayTx(&param) return CreateRawIssuanceRepayTx(&param)
} else if action == "IssuanceFeed" { } else if action == "IssuancePriceFeed" {
var param IssuanceFeedTx var param IssuanceFeedTx
err := json.Unmarshal(message, &param) err := json.Unmarshal(message, &param)
if err != nil { if err != nil {
...@@ -117,7 +117,7 @@ func (Issuance IssuanceType) CreateTx(action string, message json.RawMessage) (* ...@@ -117,7 +117,7 @@ func (Issuance IssuanceType) CreateTx(action string, message json.RawMessage) (*
func (Issuance IssuanceType) GetTypeMap() map[string]int32 { func (Issuance IssuanceType) GetTypeMap() map[string]int32 {
return map[string]int32{ return map[string]int32{
"Create": IssuanceActionCreate, "Create": IssuanceActionCreate,
"Borrow": IssuanceActionDebt, "Debt": IssuanceActionDebt,
"Repay": IssuanceActionRepay, "Repay": IssuanceActionRepay,
"Feed": IssuanceActionFeed, "Feed": IssuanceActionFeed,
"Close": IssuanceActionClose, "Close": IssuanceActionClose,
...@@ -191,6 +191,7 @@ func CreateRawIssuanceRepayTx(parm *IssuanceRepayTx) (*types.Transaction, error) ...@@ -191,6 +191,7 @@ func CreateRawIssuanceRepayTx(parm *IssuanceRepayTx) (*types.Transaction, error)
v := &IssuanceRepay{ v := &IssuanceRepay{
IssuanceId: parm.IssuanceID, IssuanceId: parm.IssuanceID,
DebtId: parm.DebtID,
} }
repay := &IssuanceAction{ repay := &IssuanceAction{
Ty: IssuanceActionRepay, Ty: IssuanceActionRepay,
......
...@@ -39,7 +39,6 @@ type Issuance struct { ...@@ -39,7 +39,6 @@ type Issuance struct {
IssuerAddr string `protobuf:"bytes,15,opt,name=issuerAddr,proto3" json:"issuerAddr,omitempty"` IssuerAddr string `protobuf:"bytes,15,opt,name=issuerAddr,proto3" json:"issuerAddr,omitempty"`
Index int64 `protobuf:"varint,16,opt,name=index,proto3" json:"index,omitempty"` Index int64 `protobuf:"varint,16,opt,name=index,proto3" json:"index,omitempty"`
PreIndex int64 `protobuf:"varint,17,opt,name=preIndex,proto3" json:"preIndex,omitempty"` PreIndex int64 `protobuf:"varint,17,opt,name=preIndex,proto3" json:"preIndex,omitempty"`
CreateIndex int64 `protobuf:"varint,18,opt,name=createIndex,proto3" json:"createIndex,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"` XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"` XXX_sizecache int32 `json:"-"`
...@@ -189,13 +188,6 @@ func (m *Issuance) GetPreIndex() int64 { ...@@ -189,13 +188,6 @@ func (m *Issuance) GetPreIndex() int64 {
return 0 return 0
} }
func (m *Issuance) GetCreateIndex() int64 {
if m != nil {
return m.CreateIndex
}
return 0
}
// 抵押记录 // 抵押记录
type DebtRecord struct { type DebtRecord struct {
AccountAddr string `protobuf:"bytes,1,opt,name=accountAddr,proto3" json:"accountAddr,omitempty"` AccountAddr string `protobuf:"bytes,1,opt,name=accountAddr,proto3" json:"accountAddr,omitempty"`
...@@ -209,6 +201,8 @@ type DebtRecord struct { ...@@ -209,6 +201,8 @@ type DebtRecord struct {
ExpireTime int64 `protobuf:"varint,9,opt,name=expireTime,proto3" json:"expireTime,omitempty"` ExpireTime int64 `protobuf:"varint,9,opt,name=expireTime,proto3" json:"expireTime,omitempty"`
PreStatus int32 `protobuf:"varint,10,opt,name=preStatus,proto3" json:"preStatus,omitempty"` PreStatus int32 `protobuf:"varint,10,opt,name=preStatus,proto3" json:"preStatus,omitempty"`
DebtId string `protobuf:"bytes,11,opt,name=debtId,proto3" json:"debtId,omitempty"` DebtId string `protobuf:"bytes,11,opt,name=debtId,proto3" json:"debtId,omitempty"`
Index int64 `protobuf:"varint,12,opt,name=index,proto3" json:"index,omitempty"`
PreIndex int64 `protobuf:"varint,13,opt,name=preIndex,proto3" json:"preIndex,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"` XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"` XXX_sizecache int32 `json:"-"`
...@@ -316,6 +310,20 @@ func (m *DebtRecord) GetDebtId() string { ...@@ -316,6 +310,20 @@ func (m *DebtRecord) GetDebtId() string {
return "" return ""
} }
func (m *DebtRecord) GetIndex() int64 {
if m != nil {
return m.Index
}
return 0
}
func (m *DebtRecord) GetPreIndex() int64 {
if m != nil {
return m.PreIndex
}
return 0
}
// 资产价格记录 // 资产价格记录
type IssuanceAssetPriceRecord struct { type IssuanceAssetPriceRecord struct {
RecordTime int64 `protobuf:"varint,1,opt,name=recordTime,proto3" json:"recordTime,omitempty"` RecordTime int64 `protobuf:"varint,1,opt,name=recordTime,proto3" json:"recordTime,omitempty"`
...@@ -812,12 +820,13 @@ func (m *IssuanceClose) GetIssuanceId() string { ...@@ -812,12 +820,13 @@ func (m *IssuanceClose) GetIssuanceId() string {
type ReceiptIssuance struct { type ReceiptIssuance struct {
IssuanceId string `protobuf:"bytes,1,opt,name=issuanceId,proto3" json:"issuanceId,omitempty"` IssuanceId string `protobuf:"bytes,1,opt,name=issuanceId,proto3" json:"issuanceId,omitempty"`
AccountAddr string `protobuf:"bytes,2,opt,name=accountAddr,proto3" json:"accountAddr,omitempty"` AccountAddr string `protobuf:"bytes,2,opt,name=accountAddr,proto3" json:"accountAddr,omitempty"`
Status int32 `protobuf:"varint,3,opt,name=status,proto3" json:"status,omitempty"` DebtId string `protobuf:"bytes,3,opt,name=debtId,proto3" json:"debtId,omitempty"`
DebtId string `protobuf:"bytes,4,opt,name=debtId,proto3" json:"debtId,omitempty"` Status int32 `protobuf:"varint,4,opt,name=status,proto3" json:"status,omitempty"`
RecordStatus int32 `protobuf:"varint,5,opt,name=recordStatus,proto3" json:"recordStatus,omitempty"` PreStatus int32 `protobuf:"varint,5,opt,name=preStatus,proto3" json:"preStatus,omitempty"`
RecordPreStatus int32 `protobuf:"varint,6,opt,name=recordPreStatus,proto3" json:"recordPreStatus,omitempty"` Index int64 `protobuf:"varint,6,opt,name=index,proto3" json:"index,omitempty"`
Index int64 `protobuf:"varint,7,opt,name=index,proto3" json:"index,omitempty"` PreIndex int64 `protobuf:"varint,7,opt,name=preIndex,proto3" json:"preIndex,omitempty"`
PreIndex int64 `protobuf:"varint,8,opt,name=preIndex,proto3" json:"preIndex,omitempty"` RecordTime int64 `protobuf:"varint,8,opt,name=recordTime,proto3" json:"recordTime,omitempty"`
BtyPrice float32 `protobuf:"fixed32,9,opt,name=btyPrice,proto3" json:"btyPrice,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"` XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"` XXX_sizecache int32 `json:"-"`
...@@ -862,13 +871,6 @@ func (m *ReceiptIssuance) GetAccountAddr() string { ...@@ -862,13 +871,6 @@ func (m *ReceiptIssuance) GetAccountAddr() string {
return "" return ""
} }
func (m *ReceiptIssuance) GetStatus() int32 {
if m != nil {
return m.Status
}
return 0
}
func (m *ReceiptIssuance) GetDebtId() string { func (m *ReceiptIssuance) GetDebtId() string {
if m != nil { if m != nil {
return m.DebtId return m.DebtId
...@@ -876,16 +878,16 @@ func (m *ReceiptIssuance) GetDebtId() string { ...@@ -876,16 +878,16 @@ func (m *ReceiptIssuance) GetDebtId() string {
return "" return ""
} }
func (m *ReceiptIssuance) GetRecordStatus() int32 { func (m *ReceiptIssuance) GetStatus() int32 {
if m != nil { if m != nil {
return m.RecordStatus return m.Status
} }
return 0 return 0
} }
func (m *ReceiptIssuance) GetRecordPreStatus() int32 { func (m *ReceiptIssuance) GetPreStatus() int32 {
if m != nil { if m != nil {
return m.RecordPreStatus return m.PreStatus
} }
return 0 return 0
} }
...@@ -904,6 +906,20 @@ func (m *ReceiptIssuance) GetPreIndex() int64 { ...@@ -904,6 +906,20 @@ func (m *ReceiptIssuance) GetPreIndex() int64 {
return 0 return 0
} }
func (m *ReceiptIssuance) GetRecordTime() int64 {
if m != nil {
return m.RecordTime
}
return 0
}
func (m *ReceiptIssuance) GetBtyPrice() float32 {
if m != nil {
return m.BtyPrice
}
return 0
}
// exec_local 借贷记录信息 // exec_local 借贷记录信息
type IssuanceRecord struct { type IssuanceRecord struct {
IssuanceId string `protobuf:"bytes,1,opt,name=issuanceId,proto3" json:"issuanceId,omitempty"` IssuanceId string `protobuf:"bytes,1,opt,name=issuanceId,proto3" json:"issuanceId,omitempty"`
...@@ -1550,72 +1566,72 @@ func init() { ...@@ -1550,72 +1566,72 @@ func init() {
func init() { proto.RegisterFile("issuance.proto", fileDescriptor_7110f4228953d675) } func init() { proto.RegisterFile("issuance.proto", fileDescriptor_7110f4228953d675) }
var fileDescriptor_7110f4228953d675 = []byte{ var fileDescriptor_7110f4228953d675 = []byte{
// 1067 bytes of a gzipped FileDescriptorProto // 1060 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x57, 0xcd, 0x6e, 0xdb, 0x46, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x57, 0xcd, 0x6e, 0xdb, 0x46,
0x10, 0x36, 0x49, 0x51, 0xb2, 0x47, 0xb6, 0xec, 0x6c, 0x1c, 0x97, 0x08, 0xda, 0x40, 0x58, 0xf4, 0x10, 0x36, 0x49, 0x51, 0xb2, 0x46, 0xb6, 0xec, 0x6c, 0x1c, 0x97, 0x08, 0xda, 0x40, 0x58, 0xf4,
0xa0, 0xf4, 0xc7, 0x6e, 0xed, 0xa2, 0x40, 0x6f, 0xb5, 0xec, 0xb6, 0x16, 0xd0, 0x04, 0x01, 0x6b, 0xa0, 0xf4, 0xc7, 0x6e, 0xed, 0xa2, 0x40, 0x6f, 0xf5, 0x4f, 0x5b, 0x0b, 0x68, 0x82, 0x82, 0x35,
0x04, 0xbd, 0xd2, 0xe4, 0x3a, 0x20, 0x40, 0x8b, 0x0c, 0xb9, 0x32, 0xa2, 0x73, 0xfb, 0x0c, 0x3d, 0x82, 0x5e, 0x69, 0x72, 0x1d, 0x10, 0xa0, 0x45, 0x86, 0x5c, 0x19, 0xd1, 0xbd, 0xf7, 0xde, 0xfb,
0xf4, 0x5d, 0xfa, 0x6a, 0x45, 0x31, 0xb3, 0x4b, 0x2e, 0x7f, 0xa4, 0x4a, 0xe8, 0xa1, 0x17, 0x43, 0x14, 0x7d, 0x81, 0xbe, 0x55, 0x1f, 0xa0, 0x98, 0xd9, 0x25, 0x97, 0x3f, 0x52, 0x24, 0xf4, 0xd0,
0x3b, 0xf3, 0xed, 0xec, 0xcc, 0x7c, 0x1f, 0x67, 0xd7, 0x30, 0x8a, 0x8b, 0x62, 0x11, 0xcc, 0x43, 0x8b, 0xa1, 0x9d, 0xfd, 0x38, 0x3b, 0x33, 0xdf, 0xc7, 0x8f, 0x6b, 0x18, 0xc7, 0x45, 0xb1, 0x08,
0x71, 0x9a, 0xe5, 0xa9, 0x4c, 0x99, 0x2b, 0x97, 0x99, 0x28, 0xf8, 0x1f, 0x2e, 0xec, 0xce, 0xb4, 0xe6, 0xa1, 0x38, 0xc9, 0xf2, 0x54, 0xa6, 0xcc, 0x95, 0xcb, 0x4c, 0x14, 0xfc, 0x9f, 0x1e, 0xec,
0x87, 0xbd, 0x00, 0x28, 0x51, 0xb3, 0xc8, 0xb3, 0xc6, 0xd6, 0x64, 0xcf, 0xaf, 0x59, 0x18, 0x87, 0xce, 0xf4, 0x0e, 0x7b, 0x01, 0x50, 0xa2, 0x66, 0x91, 0x67, 0x4d, 0xac, 0xe9, 0xd0, 0xaf, 0x45,
0x7d, 0x99, 0xca, 0x20, 0x99, 0x06, 0x09, 0x5a, 0x3c, 0x7b, 0x6c, 0x4d, 0x1c, 0xbf, 0x61, 0x63, 0x18, 0x87, 0x3d, 0x99, 0xca, 0x20, 0xb9, 0x0c, 0x12, 0x8c, 0x78, 0xf6, 0xc4, 0x9a, 0x3a, 0x7e,
0x63, 0x18, 0x46, 0xe2, 0x4e, 0x5e, 0x89, 0x38, 0x89, 0xe7, 0xef, 0x3c, 0x87, 0x20, 0x75, 0x13, 0x23, 0xc6, 0x26, 0x30, 0x8a, 0xc4, 0x9d, 0xbc, 0x12, 0x71, 0x12, 0xcf, 0xdf, 0x7a, 0x0e, 0x41,
0xfb, 0x0c, 0x8e, 0x92, 0xf8, 0xfd, 0x22, 0x8e, 0x02, 0x19, 0xa7, 0x73, 0x1f, 0xff, 0x7a, 0xbd, 0xea, 0x21, 0xf6, 0x19, 0x1c, 0x26, 0xf1, 0xbb, 0x45, 0x1c, 0x05, 0x32, 0x4e, 0xe7, 0x3e, 0xfe,
0xb1, 0x35, 0xb1, 0xfd, 0x8e, 0x9d, 0x4d, 0xe0, 0x30, 0x4c, 0x93, 0x24, 0x90, 0x22, 0x0f, 0x92, 0xf5, 0x7a, 0x13, 0x6b, 0x6a, 0xfb, 0x9d, 0x38, 0x9b, 0xc2, 0x41, 0x98, 0x26, 0x49, 0x20, 0x45,
0xb7, 0x41, 0xb2, 0x10, 0x9e, 0x4b, 0x11, 0xdb, 0x66, 0xf6, 0x31, 0xec, 0xe1, 0x21, 0x0a, 0xd3, 0x1e, 0x24, 0x6f, 0x82, 0x64, 0x21, 0x3c, 0x97, 0x32, 0xb6, 0xc3, 0xec, 0x63, 0x18, 0xe2, 0x21,
0x27, 0x8c, 0x31, 0xb0, 0x0b, 0x95, 0x95, 0x2f, 0xc2, 0x34, 0x8f, 0x0a, 0x6f, 0x30, 0x76, 0x26, 0x0a, 0xd3, 0x27, 0x8c, 0x09, 0xb0, 0x73, 0x55, 0x95, 0x2f, 0xc2, 0x34, 0x8f, 0x0a, 0x6f, 0x30,
0xc3, 0xf3, 0x27, 0xa7, 0xd4, 0x83, 0xd3, 0xeb, 0xca, 0xe3, 0xd7, 0x51, 0xec, 0x3b, 0x18, 0xc5, 0x71, 0xa6, 0xa3, 0xb3, 0x27, 0x27, 0x34, 0x83, 0x93, 0xeb, 0x6a, 0xc7, 0xaf, 0xa3, 0xd8, 0x77,
0xf3, 0xc7, 0x20, 0x89, 0xa3, 0x72, 0xdf, 0xee, 0xba, 0x7d, 0x2d, 0x20, 0x3b, 0x81, 0x7e, 0x21, 0x30, 0x8e, 0xe7, 0x8f, 0x41, 0x12, 0x47, 0xe5, 0x73, 0xbb, 0xeb, 0x9e, 0x6b, 0x01, 0xd9, 0x31,
0x03, 0xb9, 0x28, 0xbc, 0xbd, 0xb1, 0x35, 0x71, 0x7d, 0xbd, 0x62, 0xdf, 0xc2, 0x09, 0x66, 0x5d, 0xf4, 0x0b, 0x19, 0xc8, 0x45, 0xe1, 0x0d, 0x27, 0xd6, 0xd4, 0xf5, 0xf5, 0x8a, 0x7d, 0x0b, 0xc7,
0xc8, 0x9f, 0x4d, 0xa5, 0x6f, 0xf2, 0x38, 0x14, 0x1e, 0x50, 0x07, 0xd6, 0x78, 0x31, 0x5e, 0x26, 0x58, 0x75, 0x21, 0x7f, 0x36, 0x9d, 0xfe, 0x92, 0xc7, 0xa1, 0xf0, 0x80, 0x26, 0xb0, 0x66, 0x17,
0xf2, 0x38, 0x8d, 0xbc, 0x21, 0x95, 0xa6, 0x57, 0xd4, 0x4b, 0xda, 0xf1, 0xc3, 0x87, 0x2c, 0xce, 0xf3, 0x65, 0x22, 0x8f, 0xd3, 0xc8, 0x1b, 0x51, 0x6b, 0x7a, 0x45, 0xb3, 0xa4, 0x27, 0x7e, 0x78,
0xc5, 0x6d, 0xfc, 0x20, 0xbc, 0x7d, 0x42, 0x74, 0xec, 0xc8, 0x6e, 0x98, 0x8b, 0x40, 0x2a, 0xd4, 0x9f, 0xc5, 0xb9, 0xb8, 0x8d, 0x1f, 0x84, 0xb7, 0x47, 0x88, 0x4e, 0x1c, 0xd9, 0x0d, 0x73, 0x11,
0x01, 0xa1, 0x6a, 0x16, 0xe6, 0xc1, 0xe0, 0x4e, 0x13, 0x3b, 0x22, 0x67, 0xb9, 0x2c, 0x75, 0x21, 0x48, 0x85, 0xda, 0x27, 0x54, 0x2d, 0xc2, 0x3c, 0x18, 0xdc, 0x69, 0x62, 0xc7, 0xb4, 0x59, 0x2e,
0xf2, 0xcb, 0x28, 0xca, 0xbd, 0x43, 0xa3, 0x0b, 0x65, 0x61, 0xc7, 0xe0, 0xc6, 0xf3, 0x48, 0x7c, 0x4b, 0x5d, 0x88, 0xfc, 0x22, 0x8a, 0x72, 0xef, 0xc0, 0xe8, 0x42, 0x45, 0xd8, 0x11, 0xb8, 0xf1,
0xf0, 0x8e, 0x68, 0x9f, 0x5a, 0xb0, 0xe7, 0xb0, 0x9b, 0xe5, 0x62, 0x46, 0x8e, 0x27, 0xe4, 0xa8, 0x3c, 0x12, 0xef, 0xbd, 0x43, 0x7a, 0x4e, 0x2d, 0xd8, 0x73, 0xd8, 0xcd, 0x72, 0x31, 0xa3, 0x8d,
0xd6, 0xa8, 0x12, 0x75, 0xb2, 0x72, 0x33, 0xa5, 0x92, 0x9a, 0x89, 0xff, 0x6d, 0x03, 0x98, 0x06, 0x27, 0xb4, 0x51, 0xad, 0xf9, 0x5f, 0x0e, 0x80, 0x19, 0x1f, 0x8a, 0x26, 0x08, 0xc3, 0x74, 0x31,
0xe3, 0x86, 0x20, 0x0c, 0xd3, 0xc5, 0x5c, 0x52, 0x0e, 0x4a, 0x9b, 0x75, 0x13, 0x0a, 0xa0, 0x90, 0x97, 0x74, 0x82, 0x52, 0x5e, 0x3d, 0x84, 0xf4, 0x16, 0x32, 0xc8, 0x25, 0xd5, 0xae, 0x74, 0x67,
0x41, 0x2e, 0xa9, 0x3a, 0xa5, 0x4c, 0x63, 0x58, 0x25, 0x24, 0x67, 0xb5, 0x90, 0x1a, 0x48, 0xc5, 0x02, 0xab, 0x64, 0xe2, 0xac, 0x96, 0x49, 0x03, 0xa9, 0x26, 0xaf, 0xb4, 0xd7, 0x0e, 0x37, 0x05,
0x8d, 0x52, 0x67, 0xdb, 0xdc, 0x94, 0x9c, 0xdb, 0x96, 0x5c, 0x53, 0xe6, 0x2a, 0x50, 0xbf, 0x23, 0xe5, 0xb6, 0x05, 0xd5, 0x14, 0xb1, 0x4a, 0xd4, 0xef, 0x88, 0xb8, 0x22, 0x4f, 0x8b, 0x61, 0xd0,
0xf3, 0x8a, 0x5e, 0x2d, 0x97, 0x41, 0x43, 0x2e, 0x9f, 0xc2, 0x41, 0x89, 0x55, 0xac, 0xed, 0xd2, 0x10, 0xc3, 0xa7, 0xb0, 0x5f, 0x62, 0x15, 0x27, 0xbb, 0x74, 0x4a, 0x33, 0x88, 0xc3, 0x17, 0x86,
0x29, 0x4d, 0x23, 0xd2, 0x23, 0x0c, 0xfd, 0x7b, 0x8a, 0x58, 0x63, 0xc1, 0x3c, 0xb3, 0x5c, 0xfc, 0xdc, 0xa1, 0xa2, 0xcd, 0x44, 0xb0, 0xce, 0x2c, 0x17, 0xbf, 0xaa, 0x03, 0x80, 0x0e, 0x30, 0x01,
0xa2, 0x0e, 0x00, 0x3a, 0xc0, 0x18, 0xf0, 0x6c, 0x4c, 0x7a, 0xa6, 0xa4, 0xb5, 0xe7, 0xeb, 0x15, 0x3c, 0x1b, 0x8b, 0x9e, 0x29, 0xe1, 0x0c, 0x7d, 0xbd, 0x32, 0x94, 0xed, 0xad, 0xa3, 0x6c, 0xbf,
0x7f, 0x0b, 0x5e, 0x39, 0x18, 0x2e, 0x8b, 0x42, 0x48, 0xca, 0x54, 0xb3, 0xf1, 0x02, 0x20, 0xa7, 0x45, 0xd9, 0x1b, 0xf0, 0x4a, 0xa3, 0xb8, 0x28, 0x0a, 0x21, 0xa9, 0x37, 0xcd, 0xdf, 0x0b, 0x80,
0x5f, 0x74, 0xa2, 0xa5, 0x4e, 0x34, 0x16, 0xa4, 0xfe, 0x4e, 0x2e, 0x55, 0xcd, 0x36, 0xd5, 0x5c, 0x9c, 0x7e, 0x51, 0x8d, 0x96, 0xaa, 0xd1, 0x44, 0x30, 0xef, 0x9d, 0x5c, 0xaa, 0x29, 0xd9, 0x34,
0xad, 0xf9, 0x5f, 0x36, 0x8c, 0xaa, 0xc0, 0x21, 0xf6, 0x80, 0x9d, 0x41, 0x5f, 0x51, 0x4f, 0xa1, 0xa5, 0x6a, 0xcd, 0xff, 0xb6, 0x61, 0x5c, 0x25, 0x0e, 0x71, 0x6a, 0xec, 0x14, 0xfa, 0x4a, 0x97,
0x86, 0xe7, 0xcf, 0xf4, 0x07, 0x56, 0xc2, 0xae, 0xc8, 0x79, 0xb3, 0xe3, 0x6b, 0x18, 0x7b, 0x09, 0x94, 0x6a, 0x74, 0xf6, 0x4c, 0xbf, 0x70, 0x25, 0xec, 0x8a, 0x36, 0x6f, 0x76, 0x7c, 0x0d, 0x63,
0x3d, 0xcc, 0x92, 0x62, 0x0f, 0xcf, 0x9f, 0xb6, 0xe0, 0x28, 0x9b, 0x9b, 0x1d, 0x9f, 0x20, 0xec, 0x2f, 0xa1, 0x87, 0x7d, 0x51, 0xee, 0xd1, 0xd9, 0xd3, 0x16, 0x1c, 0x85, 0x76, 0xb3, 0xe3, 0x13,
0x0b, 0x70, 0x73, 0x91, 0x05, 0x4b, 0xa2, 0x7b, 0x78, 0x7e, 0xdc, 0xc2, 0xfa, 0xe8, 0xbb, 0xd9, 0x84, 0x7d, 0x01, 0x6e, 0x2e, 0xb2, 0x60, 0x49, 0x02, 0x19, 0x9d, 0x1d, 0xb5, 0xb0, 0x3e, 0xee,
0xf1, 0x15, 0x08, 0x03, 0xdf, 0x0b, 0x11, 0x11, 0xe3, 0xdd, 0xc0, 0x3f, 0x0a, 0x11, 0x61, 0x60, 0xdd, 0xec, 0xf8, 0x0a, 0x84, 0x89, 0xef, 0x85, 0x88, 0x48, 0x23, 0xdd, 0xc4, 0x3f, 0x0a, 0x11,
0x84, 0x60, 0xe0, 0x30, 0x49, 0x0b, 0xc5, 0x7c, 0x37, 0xf0, 0x15, 0xfa, 0x30, 0x30, 0x81, 0xb0, 0x61, 0x62, 0x84, 0x60, 0xe2, 0x30, 0x49, 0x0b, 0xa5, 0x95, 0x6e, 0xe2, 0x2b, 0xdc, 0xc3, 0xc4,
0xc4, 0x87, 0x60, 0x1e, 0xbc, 0x53, 0x1a, 0xe8, 0x96, 0xf8, 0x8a, 0x9c, 0x58, 0xa2, 0x82, 0xb1, 0x04, 0xc2, 0x16, 0x1f, 0x82, 0x79, 0xf0, 0x56, 0xa9, 0xa6, 0xdb, 0xe2, 0x2b, 0xda, 0xc4, 0x16,
0x11, 0xd8, 0x72, 0xa9, 0xd9, 0xb2, 0xe5, 0x72, 0x3a, 0x00, 0xf7, 0x11, 0x75, 0xc5, 0xbf, 0x32, 0x15, 0x8c, 0x8d, 0xc1, 0x96, 0x4b, 0xcd, 0xaf, 0x2d, 0x97, 0x97, 0x03, 0x70, 0x1f, 0x51, 0x89,
0xed, 0x53, 0x9b, 0x90, 0x8d, 0x62, 0x91, 0xa9, 0x6f, 0xb1, 0xf0, 0xac, 0xb1, 0x83, 0x9f, 0xa7, 0xfc, 0x2b, 0x33, 0x3e, 0xf5, 0x10, 0xb2, 0x51, 0x2c, 0x32, 0xf5, 0x6e, 0x16, 0x9e, 0x35, 0x71,
0xb1, 0xf0, 0x3f, 0x2d, 0xb3, 0x45, 0xb5, 0xb2, 0x33, 0xc9, 0xad, 0xcd, 0x93, 0xdc, 0xde, 0x6e, 0xf0, 0x75, 0x35, 0x11, 0xfe, 0xa7, 0x65, 0x1e, 0x51, 0xa3, 0xec, 0x38, 0xbb, 0xb5, 0xd9, 0xd9,
0x92, 0x3b, 0x6b, 0x26, 0xb9, 0x99, 0x60, 0xbd, 0xfa, 0x04, 0xe3, 0xd7, 0xb0, 0x5f, 0xe7, 0x6d, 0xed, 0xed, 0x9c, 0xdd, 0x59, 0xe3, 0xec, 0xc6, 0xd1, 0x7a, 0x75, 0x47, 0xe3, 0xd7, 0xb0, 0x57,
0xe3, 0x1d, 0x74, 0xac, 0xfb, 0xa0, 0xf3, 0xd1, 0x4d, 0xf9, 0x09, 0x0e, 0x1a, 0x8c, 0x6e, 0x0c, 0xe7, 0x6d, 0xe3, 0x37, 0xe9, 0x48, 0xcf, 0x41, 0xd7, 0xa3, 0x87, 0xf2, 0x13, 0xec, 0x37, 0x18,
0x63, 0x54, 0x6f, 0x37, 0x54, 0xff, 0xab, 0x49, 0x07, 0xd9, 0x46, 0x25, 0xe3, 0x67, 0x7f, 0xbb, 0xdd, 0x98, 0xc6, 0xbc, 0x27, 0x76, 0xfd, 0x3d, 0xe1, 0xbf, 0x99, 0x72, 0x90, 0x6d, 0x54, 0x32,
0xcc, 0x54, 0x93, 0x5c, 0xbf, 0x5a, 0x63, 0x2a, 0x99, 0x96, 0xb8, 0x33, 0xb1, 0x7d, 0xb5, 0xc0, 0x1a, 0xc5, 0xed, 0x32, 0x53, 0x43, 0x72, 0xfd, 0x6a, 0x8d, 0xa5, 0x64, 0x5a, 0xe2, 0xce, 0xd4,
0xc8, 0x8f, 0x69, 0xb2, 0x78, 0xc0, 0x01, 0xe3, 0x60, 0xa1, 0x6a, 0xc5, 0xcf, 0x4c, 0x8a, 0xa4, 0xf6, 0xd5, 0x02, 0x33, 0x3f, 0xa6, 0xc9, 0xe2, 0x01, 0x2d, 0xc9, 0xc1, 0x46, 0xd5, 0x8a, 0x9f,
0x8d, 0x4d, 0x29, 0xf2, 0xdf, 0x6c, 0x38, 0xf4, 0x45, 0x28, 0xe2, 0x4c, 0x6e, 0x7d, 0x43, 0xb7, 0x9a, 0x12, 0x49, 0x1b, 0x9b, 0x4a, 0xe4, 0x7f, 0xd8, 0x70, 0xe0, 0x8b, 0x50, 0xc4, 0x99, 0xdc,
0xc6, 0xa4, 0xdd, 0x1d, 0x93, 0x66, 0xd4, 0x38, 0x8d, 0x51, 0x63, 0x1a, 0xd2, 0xab, 0x37, 0x04, 0xfa, 0x8b, 0xdd, 0x32, 0x56, 0xbb, 0x6b, 0xac, 0xa6, 0x71, 0xa7, 0x61, 0x10, 0xc6, 0xb4, 0x7a,
0x95, 0xa2, 0x3e, 0x6c, 0x3d, 0x3f, 0x5c, 0xda, 0xd5, 0xb0, 0xe1, 0xc8, 0x54, 0xeb, 0x37, 0xd5, 0x0d, 0xd3, 0x6a, 0xd8, 0x8d, 0xdb, 0xb6, 0x9b, 0xca, 0x56, 0xfa, 0xeb, 0x6c, 0x65, 0xd0, 0xb4,
0x98, 0xe9, 0x13, 0xac, 0x6d, 0x36, 0x37, 0xc5, 0x60, 0xdd, 0x4d, 0xb1, 0xdb, 0xbc, 0x29, 0x78, 0x95, 0x96, 0x75, 0xec, 0x7e, 0xd0, 0x3a, 0x86, 0x2d, 0xeb, 0xc8, 0x8d, 0x8e, 0x8d, 0x11, 0x7d,
0x6e, 0xb4, 0x6b, 0x86, 0xcf, 0xbf, 0xf6, 0x80, 0x41, 0x2f, 0x30, 0xc5, 0xd3, 0xef, 0x5a, 0x75, 0x70, 0x1e, 0x0c, 0x7a, 0x81, 0x19, 0x04, 0xfd, 0x5e, 0x3b, 0x81, 0xaa, 0x97, 0x5e, 0xad, 0x17,
0x4e, 0xa3, 0xba, 0x2a, 0x9f, 0x5e, 0x2d, 0x1f, 0x3e, 0x85, 0xc3, 0xe6, 0x99, 0x05, 0x3b, 0x83, 0x7e, 0x09, 0x07, 0xcd, 0x33, 0x0b, 0x76, 0x0a, 0x83, 0x5c, 0x5f, 0x10, 0x2c, 0xba, 0x20, 0x3c,
0x41, 0xae, 0x1f, 0x01, 0x16, 0x3d, 0x02, 0x9e, 0x75, 0x06, 0x09, 0x3d, 0x04, 0x4a, 0x14, 0xff, 0xeb, 0x98, 0x0a, 0x5d, 0x12, 0x4a, 0x14, 0xff, 0x1a, 0x89, 0x7c, 0x57, 0xee, 0xce, 0xe6, 0xf7,
0x1a, 0xc9, 0x7b, 0x5f, 0x7a, 0x67, 0xf3, 0xfb, 0x74, 0x23, 0xe1, 0xbf, 0xdb, 0x70, 0xe2, 0x8b, 0xe9, 0x46, 0xf2, 0x7f, 0xb7, 0xe1, 0xd8, 0x17, 0x59, 0xa5, 0x98, 0x45, 0x9e, 0x8b, 0xb9, 0xa4,
0xac, 0x52, 0xc9, 0x22, 0xcf, 0xc5, 0x5c, 0xd2, 0x56, 0xc3, 0x9a, 0xd5, 0x60, 0xed, 0xff, 0x7f, 0x47, 0x0d, 0x53, 0x56, 0x83, 0xa9, 0xff, 0xff, 0xb6, 0x56, 0xbb, 0x41, 0xb8, 0xcd, 0x1b, 0xc4,
0x91, 0xd5, 0x5e, 0x09, 0x6e, 0xf3, 0x95, 0xb0, 0xe2, 0x8a, 0xed, 0x6f, 0xf1, 0x56, 0x1b, 0xb4, 0x8a, 0x0f, 0x74, 0x7f, 0x8b, 0x7b, 0xdc, 0xa0, 0xf5, 0xd9, 0xe5, 0xdf, 0xc0, 0x61, 0x6b, 0x72,
0x2e, 0x4e, 0xfe, 0x0d, 0x1c, 0xb5, 0x3a, 0x57, 0x60, 0x0d, 0xa6, 0x51, 0xe5, 0x8c, 0xab, 0x9b, 0x05, 0xf6, 0x60, 0x06, 0x55, 0xfa, 0x5d, 0x3d, 0xc4, 0x5f, 0xc3, 0x47, 0xab, 0x67, 0x57, 0xb0,
0xf8, 0x6b, 0xf8, 0x68, 0x75, 0xef, 0x0a, 0x76, 0x81, 0x24, 0xdf, 0xa7, 0x25, 0x73, 0x9f, 0x68, 0x73, 0x24, 0xf9, 0x3e, 0x2d, 0x99, 0xfb, 0x44, 0x33, 0xb7, 0x1a, 0xee, 0x2b, 0x2c, 0xff, 0x12,
0xe6, 0x56, 0xc3, 0x7d, 0x85, 0xe5, 0x5f, 0xc2, 0xd3, 0x5a, 0x16, 0xd3, 0xa5, 0xb9, 0x2d, 0x57, 0x9e, 0xd6, 0xaa, 0xb8, 0x5c, 0x9a, 0x6f, 0xed, 0x2a, 0x22, 0x38, 0x87, 0x71, 0x2d, 0xdf, 0xec,
0x11, 0xc1, 0x39, 0x8c, 0x6a, 0xf1, 0x66, 0xd7, 0x05, 0x3b, 0x02, 0x67, 0x76, 0x5d, 0xa6, 0x8a, 0xba, 0x60, 0x87, 0xe0, 0xcc, 0xae, 0xcb, 0x52, 0xf1, 0x27, 0x7f, 0x0d, 0x5e, 0x2d, 0xa5, 0x56,
0x3f, 0xf9, 0x6b, 0xf0, 0x6a, 0x21, 0xb5, 0xb2, 0xa6, 0x4b, 0xfa, 0x2c, 0xff, 0x83, 0xa8, 0xf9, 0xd6, 0xe5, 0x92, 0x5e, 0xd1, 0xff, 0x20, 0x6a, 0x7e, 0x0b, 0xcf, 0x57, 0xe5, 0xd3, 0x95, 0x6e,
0x2d, 0x3c, 0x5f, 0x15, 0x4f, 0x67, 0xba, 0xc5, 0x04, 0xd4, 0x95, 0xd8, 0x8d, 0x4a, 0x2e, 0x81, 0xe1, 0x86, 0xba, 0x13, 0xbb, 0xd1, 0xc9, 0x05, 0xb0, 0x5a, 0x27, 0xa5, 0xfe, 0x3f, 0x6f, 0xeb,
0xd5, 0x2a, 0x29, 0xf5, 0xff, 0x79, 0x5b, 0xff, 0x2b, 0x1e, 0xc1, 0x95, 0xf6, 0x5f, 0x35, 0x7a, 0x7f, 0xc5, 0x05, 0xb9, 0xd2, 0xfe, 0xab, 0xc6, 0xec, 0x10, 0xb1, 0x8d, 0xfe, 0xd7, 0xfa, 0xf3,
0x87, 0x88, 0x6d, 0xf4, 0xbf, 0x76, 0x26, 0x7f, 0x8f, 0xe1, 0xb2, 0x4e, 0xb8, 0x97, 0xd0, 0x57, 0xf7, 0x98, 0x2e, 0xeb, 0xa4, 0x7b, 0x09, 0x7d, 0x75, 0xa0, 0xbe, 0x41, 0xac, 0xa8, 0x48, 0x03,
0x07, 0xea, 0x57, 0xc3, 0x8a, 0x8c, 0x34, 0xe0, 0xae, 0x4f, 0xff, 0xf3, 0x5c, 0xfc, 0x13, 0x00, 0xee, 0xfa, 0xf4, 0xff, 0xd0, 0xf9, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xba, 0x69, 0x9e, 0x9a,
0x00, 0xff, 0xff, 0x80, 0xd9, 0xe6, 0x0e, 0x05, 0x0d, 0x00, 0x00, 0x21, 0x0d, 0x00, 0x00,
} }
...@@ -23,6 +23,7 @@ type IssuanceDebtTx struct { ...@@ -23,6 +23,7 @@ type IssuanceDebtTx struct {
// IssuanceRepayTx for construction // IssuanceRepayTx for construction
type IssuanceRepayTx struct { type IssuanceRepayTx struct {
IssuanceID string `json:"issuanceId"` IssuanceID string `json:"issuanceId"`
DebtID string `json:"debtId"`
Fee int64 `json:"fee"` Fee int64 `json:"fee"`
} }
......
...@@ -24,7 +24,7 @@ const ( ...@@ -24,7 +24,7 @@ const (
// Issuance name // Issuance name
const ( const (
IssuanceX = "issuance" IssuanceX = "issuance"
CCNYTokenName = "ccny" CCNYTokenName = "CCNY"
IssuancePreLiquidationRatio = 1.1 //TODO 预清算比例,抵押物价值跌到借出ccny价值110%的时候开始清算 IssuancePreLiquidationRatio = 1.1 //TODO 预清算比例,抵押物价值跌到借出ccny价值110%的时候开始清算
) )
......
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