Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
plugin
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
link33
plugin
Commits
491ce6b8
Commit
491ce6b8
authored
Nov 01, 2019
by
pengjun
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
#627 update collateralize
parent
ebffcd28
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
286 additions
and
260 deletions
+286
-260
cmd.go
plugin/dapp/collateralize/commands/cmd.go
+22
-15
collateralizedb.go
plugin/dapp/collateralize/executor/collateralizedb.go
+93
-77
exec_del_local.go
plugin/dapp/collateralize/executor/exec_del_local.go
+15
-7
exec_local.go
plugin/dapp/collateralize/executor/exec_local.go
+16
-8
keys.go
plugin/dapp/collateralize/executor/keys.go
+0
-5
collateralize.proto
plugin/dapp/collateralize/proto/collateralize.proto
+13
-14
collateralize.go
plugin/dapp/collateralize/types/collateralize.go
+1
-1
collateralize.pb.go
plugin/dapp/collateralize/types/collateralize.pb.go
+107
-116
types.go
plugin/dapp/collateralize/types/types.go
+7
-6
issuancedb.go
plugin/dapp/issuance/executor/issuancedb.go
+5
-11
types.go
plugin/dapp/issuance/types/types.go
+7
-0
No files found.
plugin/dapp/collateralize/commands/cmd.go
View file @
491ce6b8
...
...
@@ -55,7 +55,7 @@ func CollateralizeCreate(cmd *cobra.Command, args []string) {
params
:=
&
rpctypes
.
CreateTxIn
{
Execer
:
types
.
ExecName
(
pkt
.
CollateralizeX
),
ActionName
:
"CollateralizeCreate"
,
Payload
:
[]
byte
(
fmt
.
Sprintf
(
"{
\"
b
alance
\"
:%d}"
,
balance
)),
Payload
:
[]
byte
(
fmt
.
Sprintf
(
"{
\"
totalB
alance
\"
:%d}"
,
balance
)),
}
var
res
string
...
...
@@ -89,7 +89,7 @@ func CollateralizeBorrow(cmd *cobra.Command, args []string) {
params
:=
&
rpctypes
.
CreateTxIn
{
Execer
:
types
.
ExecName
(
pkt
.
CollateralizeX
),
ActionName
:
"CollateralizeBorrow"
,
Payload
:
[]
byte
(
fmt
.
Sprintf
(
"{
\"
collateralizeID
\"
:
%s
,
\"
value
\"
:%d}"
,
collateralizeID
,
value
)),
Payload
:
[]
byte
(
fmt
.
Sprintf
(
"{
\"
collateralizeID
\"
:
\"
%s
\"
,
\"
value
\"
:%d}"
,
collateralizeID
,
value
)),
}
var
res
string
...
...
@@ -111,6 +111,8 @@ func CollateralizeAppendRawTxCmd() *cobra.Command {
func
addCollateralizeAppendFlags
(
cmd
*
cobra
.
Command
)
{
cmd
.
Flags
()
.
StringP
(
"collateralizeID"
,
"g"
,
""
,
"collateralize ID"
)
cmd
.
MarkFlagRequired
(
"collateralizeID"
)
cmd
.
Flags
()
.
StringP
(
"recordID"
,
"r"
,
""
,
"recordID"
)
cmd
.
MarkFlagRequired
(
"recordID"
)
cmd
.
Flags
()
.
Uint64P
(
"value"
,
"v"
,
0
,
"value"
)
cmd
.
MarkFlagRequired
(
"value"
)
}
...
...
@@ -118,12 +120,13 @@ func addCollateralizeAppendFlags(cmd *cobra.Command) {
func
CollateralizeAppend
(
cmd
*
cobra
.
Command
,
args
[]
string
)
{
rpcLaddr
,
_
:=
cmd
.
Flags
()
.
GetString
(
"rpc_laddr"
)
collateralizeID
,
_
:=
cmd
.
Flags
()
.
GetString
(
"collateralizeID"
)
recordID
,
_
:=
cmd
.
Flags
()
.
GetString
(
"recordID"
)
value
,
_
:=
cmd
.
Flags
()
.
GetUint64
(
"value"
)
params
:=
&
rpctypes
.
CreateTxIn
{
Execer
:
types
.
ExecName
(
pkt
.
CollateralizeX
),
ActionName
:
"CollateralizeAppend"
,
Payload
:
[]
byte
(
fmt
.
Sprintf
(
"{
\"
collateralizeID
\"
:
%s,
\"
value
\"
:%d}"
,
collateralize
ID
,
value
)),
Payload
:
[]
byte
(
fmt
.
Sprintf
(
"{
\"
collateralizeID
\"
:
\"
%s
\"
,
\"
recordID
\"
:
\"
%s
\"
,
\"
value
\"
:%d}"
,
collateralizeID
,
record
ID
,
value
)),
}
var
res
string
...
...
@@ -145,19 +148,19 @@ func CollateralizeRepayRawTxCmd() *cobra.Command {
func
addCollateralizeRepayFlags
(
cmd
*
cobra
.
Command
)
{
cmd
.
Flags
()
.
StringP
(
"collateralizeID"
,
"g"
,
""
,
"collateralize ID"
)
cmd
.
MarkFlagRequired
(
"collateralizeID"
)
cmd
.
Flags
()
.
Uint64P
(
"value"
,
"v"
,
0
,
"value
"
)
cmd
.
MarkFlagRequired
(
"
value
"
)
cmd
.
Flags
()
.
StringP
(
"recordID"
,
"r"
,
""
,
"recordID
"
)
cmd
.
MarkFlagRequired
(
"
recordID
"
)
}
func
CollateralizeRepay
(
cmd
*
cobra
.
Command
,
args
[]
string
)
{
rpcLaddr
,
_
:=
cmd
.
Flags
()
.
GetString
(
"rpc_laddr"
)
collateralizeID
,
_
:=
cmd
.
Flags
()
.
GetString
(
"collateralizeID"
)
value
,
_
:=
cmd
.
Flags
()
.
GetUint64
(
"value
"
)
recordID
,
_
:=
cmd
.
Flags
()
.
GetString
(
"recordID
"
)
params
:=
&
rpctypes
.
CreateTxIn
{
Execer
:
types
.
ExecName
(
pkt
.
CollateralizeX
),
ActionName
:
"CollateralizeRepay"
,
Payload
:
[]
byte
(
fmt
.
Sprintf
(
"{
\"
collateralizeID
\"
:
%s,
\"
value
\"
:%d}"
,
collateralizeID
,
value
)),
Payload
:
[]
byte
(
fmt
.
Sprintf
(
"{
\"
collateralizeID
\"
:
\"
%s
\"
,
\"
recordID
\"
:
\"
%s
\"
}"
,
collateralizeID
,
recordID
)),
}
var
res
string
...
...
@@ -191,7 +194,7 @@ func CollateralizePriceFeed(cmd *cobra.Command, args []string) {
params
:=
&
rpctypes
.
CreateTxIn
{
Execer
:
types
.
ExecName
(
pkt
.
CollateralizeX
),
ActionName
:
"CollateralizePriceFeed"
,
Payload
:
[]
byte
(
fmt
.
Sprintf
(
"{
[
\"
price
\"
:%s],[
\"
volume
\"
:%d
]}"
,
price
,
volume
)),
Payload
:
[]
byte
(
fmt
.
Sprintf
(
"{
\"
price
\"
:[ %f ],
\"
volume
\"
:[ %d
]}"
,
price
,
volume
)),
}
var
res
string
...
...
@@ -222,7 +225,7 @@ func CollateralizeClose(cmd *cobra.Command, args []string) {
params
:=
&
rpctypes
.
CreateTxIn
{
Execer
:
types
.
ExecName
(
pkt
.
CollateralizeX
),
ActionName
:
"CollateralizeClose"
,
Payload
:
[]
byte
(
fmt
.
Sprintf
(
"{
\"
collateralizeID
\"
:
%s
}"
,
collateralizeID
)),
Payload
:
[]
byte
(
fmt
.
Sprintf
(
"{
\"
collateralizeID
\"
:
\"
%s
\"
}"
,
collateralizeID
)),
}
var
res
string
...
...
@@ -258,7 +261,7 @@ func CollateralizeManage(cmd *cobra.Command, args []string) {
params
:=
&
rpctypes
.
CreateTxIn
{
Execer
:
types
.
ExecName
(
pkt
.
CollateralizeX
),
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
\"
:%
d
}"
,
debtCeiling
,
liquidationRatio
,
stabilityFeeRatio
,
period
)),
}
...
...
@@ -308,11 +311,15 @@ func CollateralizeQuery(cmd *cobra.Command, args []string) {
// req.Index = index
//}
status
,
err
:=
strconv
.
ParseInt
(
statusStr
,
10
,
32
)
if
err
!=
nil
{
fmt
.
Println
(
err
)
cmd
.
Help
()
return
var
status
int64
var
err
error
if
statusStr
!=
""
{
status
,
err
=
strconv
.
ParseInt
(
statusStr
,
10
,
32
)
if
err
!=
nil
{
fmt
.
Println
(
err
)
cmd
.
Help
()
return
}
}
if
collateralizeID
!=
""
{
...
...
plugin/dapp/collateralize/executor/collateralizedb.go
View file @
491ce6b8
...
...
@@ -73,6 +73,12 @@ func AddrKey() (key []byte) {
return
key
}
// Key for IssuancePriceFeed
func
PriceKey
()
(
key
[]
byte
)
{
key
=
append
(
key
,
[]
byte
(
"mavl-"
+
pty
.
CollateralizeX
+
"-price"
)
...
)
return
key
}
// Action struct
type
Action
struct
{
coinsAccount
*
account
.
DB
// bty账户
...
...
@@ -105,23 +111,16 @@ func NewCollateralizeAction(c *Collateralize, tx *types.Transaction, index int)
execaddr
:
dapp
.
ExecAddress
(
string
(
tx
.
Execer
)),
difficulty
:
c
.
GetDifficulty
(),
index
:
index
,
Collateralize
:
c
}
}
// GetCollCommonRecipt generate logs for Collateralize common action
func
(
action
*
Action
)
GetCollCommonRecipt
(
collateralize
*
pty
.
Collateralize
)
*
pty
.
ReceiptCollateralize
{
c
:=
&
pty
.
ReceiptCollateralize
{}
c
.
CollateralizeId
=
collateralize
.
CollateralizeId
c
.
Status
=
collateralize
.
Status
c
.
PreIndex
=
collateralize
.
PreIndex
c
.
Index
=
collateralize
.
Index
return
c
}
// GetCreateReceiptLog generate logs for Collateralize create action
func
(
action
*
Action
)
GetCreateReceiptLog
(
collateralize
*
pty
.
Collateralize
)
*
types
.
ReceiptLog
{
log
:=
&
types
.
ReceiptLog
{}
log
.
Ty
=
pty
.
TyLogCollateralizeCreate
c
:=
action
.
GetCollCommonRecipt
(
collateralize
)
c
:=
&
pty
.
ReceiptCollateralize
{}
c
.
CollateralizeId
=
collateralize
.
CollateralizeId
c
.
Status
=
collateralize
.
Status
c
.
CreateAddr
=
action
.
fromaddr
c
.
Index
=
collateralize
.
Index
log
.
Log
=
types
.
Encode
(
c
)
...
...
@@ -133,10 +132,12 @@ func (action *Action) GetBorrowReceiptLog(collateralize *pty.Collateralize, reco
log
:=
&
types
.
ReceiptLog
{}
log
.
Ty
=
pty
.
TyLogCollateralizeBorrow
c
:=
action
.
GetCollCommonRecipt
(
collateralize
)
c
:=
&
pty
.
ReceiptCollateralize
{}
c
.
CollateralizeId
=
collateralize
.
CollateralizeId
c
.
AccountAddr
=
action
.
fromaddr
c
.
RecordId
=
record
.
RecordId
c
.
RecordStatus
=
record
.
Status
c
.
Status
=
record
.
Status
c
.
Index
=
record
.
Index
log
.
Log
=
types
.
Encode
(
c
)
...
...
@@ -148,11 +149,14 @@ func (action *Action) GetRepayReceiptLog(collateralize *pty.Collateralize, recor
log
:=
&
types
.
ReceiptLog
{}
log
.
Ty
=
pty
.
TyLogCollateralizeRepay
c
:=
action
.
GetCollCommonRecipt
(
collateralize
)
c
:=
&
pty
.
ReceiptCollateralize
{}
c
.
CollateralizeId
=
collateralize
.
CollateralizeId
c
.
AccountAddr
=
action
.
fromaddr
c
.
RecordId
=
record
.
RecordId
c
.
RecordStatus
=
record
.
Status
c
.
RecordPreStatus
=
record
.
PreStatus
c
.
Status
=
record
.
Status
c
.
PreStatus
=
record
.
PreStatus
c
.
PreIndex
=
record
.
PreIndex
c
.
Index
=
record
.
Index
log
.
Log
=
types
.
Encode
(
c
)
...
...
@@ -160,11 +164,18 @@ func (action *Action) GetRepayReceiptLog(collateralize *pty.Collateralize, recor
}
// GetAppendReceiptLog generate logs for Collateralize append action
func
(
action
*
Action
)
GetAppendReceiptLog
(
collateralize
*
pty
.
Collateralize
)
*
types
.
ReceiptLog
{
func
(
action
*
Action
)
GetAppendReceiptLog
(
collateralize
*
pty
.
Collateralize
,
record
*
pty
.
BorrowRecord
)
*
types
.
ReceiptLog
{
log
:=
&
types
.
ReceiptLog
{}
log
.
Ty
=
pty
.
TyLogCollateralizeAppend
c
:=
action
.
GetCollCommonRecipt
(
collateralize
)
c
:=
&
pty
.
ReceiptCollateralize
{}
c
.
CollateralizeId
=
collateralize
.
CollateralizeId
c
.
AccountAddr
=
action
.
fromaddr
c
.
RecordId
=
record
.
RecordId
c
.
Status
=
record
.
Status
c
.
PreStatus
=
record
.
PreStatus
c
.
PreIndex
=
record
.
PreIndex
c
.
Index
=
record
.
Index
log
.
Log
=
types
.
Encode
(
c
)
...
...
@@ -176,11 +187,14 @@ func (action *Action) GetFeedReceiptLog(collateralize *pty.Collateralize, record
log
:=
&
types
.
ReceiptLog
{}
log
.
Ty
=
pty
.
TyLogCollateralizeFeed
c
:=
action
.
GetCollCommonRecipt
(
collateralize
)
c
:=
&
pty
.
ReceiptCollateralize
{}
c
.
CollateralizeId
=
collateralize
.
CollateralizeId
c
.
AccountAddr
=
record
.
AccountAddr
c
.
RecordId
=
record
.
RecordId
c
.
RecordStatus
=
record
.
Status
c
.
RecordPreStatus
=
record
.
PreStatus
c
.
Status
=
record
.
Status
c
.
PreStatus
=
record
.
PreStatus
c
.
PreIndex
=
record
.
PreIndex
c
.
Index
=
record
.
Index
log
.
Log
=
types
.
Encode
(
c
)
...
...
@@ -188,11 +202,17 @@ func (action *Action) GetFeedReceiptLog(collateralize *pty.Collateralize, record
}
// GetCloseReceiptLog generate logs for Collateralize close action
func
(
action
*
Action
)
GetCloseReceiptLog
(
C
ollateralize
*
pty
.
Collateralize
)
*
types
.
ReceiptLog
{
func
(
action
*
Action
)
GetCloseReceiptLog
(
c
ollateralize
*
pty
.
Collateralize
)
*
types
.
ReceiptLog
{
log
:=
&
types
.
ReceiptLog
{}
log
.
Ty
=
pty
.
TyLogCollateralizeClose
c
:=
action
.
GetCollCommonRecipt
(
Collateralize
)
c
:=
&
pty
.
ReceiptCollateralize
{}
c
.
CollateralizeId
=
collateralize
.
CollateralizeId
c
.
Status
=
collateralize
.
Status
c
.
PreStatus
=
pty
.
CollateralizeStatusCreated
c
.
CreateAddr
=
action
.
fromaddr
c
.
PreIndex
=
collateralize
.
PreIndex
c
.
Index
=
collateralize
.
Index
log
.
Log
=
types
.
Encode
(
c
)
...
...
@@ -233,7 +253,7 @@ func (action *Action) CollateralizeManage(manage *pty.CollateralizeManage) (*typ
var
receipt
*
types
.
Receipt
// 是否配置管理用户
if
!
isRightAddr
(
config
Key
,
action
.
fromaddr
,
action
.
db
)
{
if
!
isRightAddr
(
issuanceE
.
Manage
Key
,
action
.
fromaddr
,
action
.
db
)
{
clog
.
Error
(
"CollateralizeManage"
,
"addr"
,
action
.
fromaddr
,
"error"
,
"Address has no permission to config"
)
return
nil
,
pty
.
ErrPermissionDeny
}
...
...
@@ -245,10 +265,29 @@ func (action *Action) CollateralizeManage(manage *pty.CollateralizeManage) (*typ
}
collConfig
:=
&
pty
.
CollateralizeManage
{}
collConfig
.
StabilityFeeRatio
=
manage
.
StabilityFeeRatio
collConfig
.
Period
=
manage
.
Period
collConfig
.
LiquidationRatio
=
manage
.
LiquidationRatio
collConfig
.
DebtCeiling
=
manage
.
DebtCeiling
if
manage
.
StabilityFeeRatio
!=
0
{
collConfig
.
StabilityFeeRatio
=
manage
.
StabilityFeeRatio
}
else
{
collConfig
.
StabilityFeeRatio
=
DefaultStabilityFeeRation
}
if
manage
.
Period
!=
0
{
collConfig
.
Period
=
manage
.
Period
}
else
{
collConfig
.
Period
=
DefaultPeriod
}
if
manage
.
LiquidationRatio
!=
0
{
collConfig
.
LiquidationRatio
=
manage
.
LiquidationRatio
}
else
{
collConfig
.
LiquidationRatio
=
DefaultLiquidationRatio
}
if
manage
.
DebtCeiling
!=
0
{
collConfig
.
DebtCeiling
=
manage
.
DebtCeiling
}
else
{
collConfig
.
DebtCeiling
=
DefaultDebtCeiling
}
value
:=
types
.
Encode
(
collConfig
)
action
.
db
.
Set
(
ConfigKey
(),
value
)
...
...
@@ -313,6 +352,7 @@ func (action *Action) CollateralizeCreate(create *pty.CollateralizeCreate) (*typ
// 检查ccny余额
if
!
action
.
CheckExecTokenAccount
(
action
.
fromaddr
,
create
.
TotalBalance
,
false
)
{
clog
.
Error
(
"CollateralizeCreate"
,
"fromaddr"
,
action
.
fromaddr
,
"balance"
,
create
.
TotalBalance
,
"error"
,
types
.
ErrInsufficientBalance
)
return
nil
,
types
.
ErrInsufficientBalance
}
...
...
@@ -353,7 +393,6 @@ func (action *Action) CollateralizeCreate(create *pty.CollateralizeCreate) (*typ
coll
.
CreateAddr
=
action
.
fromaddr
coll
.
Status
=
pty
.
CollateralizeActionCreate
coll
.
Index
=
action
.
GetIndex
()
coll
.
CreateIndex
=
coll
.
Index
clog
.
Debug
(
"CollateralizeCreate created"
,
"CollateralizeID"
,
collateralizeID
,
"TotalBalance"
,
coll
.
TotalBalance
)
...
...
@@ -391,8 +430,8 @@ func calcLiquidationPrice(value int64, colValue int64) float32 {
}
// 获取最近抵押物价格
func
(
action
*
Action
)
getLatestPrice
(
db
dbm
.
KV
,
assetType
int32
)
(
float32
,
error
)
{
data
,
err
:=
db
.
Get
(
calcCollateralizeLatest
PriceKey
())
func
(
action
*
Action
)
getLatestPrice
(
db
dbm
.
KV
)
(
float32
,
error
)
{
data
,
err
:=
db
.
Get
(
PriceKey
())
if
err
!=
nil
{
clog
.
Error
(
"getLatestPrice"
,
"get"
,
err
)
return
-
1
,
err
...
...
@@ -405,16 +444,7 @@ func (action *Action)getLatestPrice(db dbm.KV, assetType int32) (float32, error)
return
-
1
,
err
}
switch
assetType
{
case
pty
.
CollateralizeAssetTypeBty
:
return
price
.
BtcPrice
,
nil
case
pty
.
CollateralizeAssetTypeBtc
:
return
price
.
BtcPrice
,
nil
case
pty
.
CollateralizeAssetTypeEth
:
return
price
.
EthPrice
,
nil
default
:
return
-
1
,
pty
.
ErrAssetType
}
return
price
.
BtyPrice
,
nil
}
// CheckExecAccountBalance 检查账户抵押物余额
...
...
@@ -480,7 +510,7 @@ func (action *Action) CollateralizeBorrow(borrow *pty.CollateralizeBorrow) (*typ
clog
.
Debug
(
"CollateralizeBorrow"
,
"value"
,
borrow
.
GetValue
())
// 获取抵押物价格
lastPrice
,
err
:=
action
.
getLatestPrice
(
action
.
db
,
coll
.
CollType
)
lastPrice
,
err
:=
action
.
getLatestPrice
(
action
.
db
)
if
err
!=
nil
{
clog
.
Error
(
"CollateralizeBorrow"
,
"CollID"
,
coll
.
CollateralizeId
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"err"
,
err
)
return
nil
,
err
...
...
@@ -537,6 +567,7 @@ func (action *Action) CollateralizeBorrow(borrow *pty.CollateralizeBorrow) (*typ
borrowRecord
.
LiquidationPrice
=
coll
.
LiquidationRatio
*
lastPrice
*
pty
.
CollateralizePreLiquidationRatio
borrowRecord
.
Status
=
pty
.
CollateralizeUserStatusCreate
borrowRecord
.
ExpireTime
=
action
.
blocktime
+
coll
.
Period
borrowRecord
.
Index
=
action
.
GetIndex
()
// 记录当前借贷的最高自动清算价格
if
coll
.
LatestLiquidationPrice
<
borrowRecord
.
LiquidationPrice
{
...
...
@@ -547,8 +578,6 @@ func (action *Action) CollateralizeBorrow(borrow *pty.CollateralizeBorrow) (*typ
coll
.
BorrowRecords
=
append
(
coll
.
BorrowRecords
,
borrowRecord
)
coll
.
Status
=
pty
.
CollateralizeStatusCreated
coll
.
Balance
-=
borrow
.
Value
coll
.
PreIndex
=
coll
.
Index
coll
.
Index
=
action
.
GetIndex
()
coll
.
Save
(
action
.
db
)
kv
=
append
(
kv
,
coll
.
GetKVSet
()
...
)
...
...
@@ -597,7 +626,7 @@ func (action *Action) CollateralizeRepay(repay *pty.CollateralizeRepay) (*types.
}
// 借贷金额+利息
realRepay
:=
borrowRecord
.
DebtValue
+
int64
(
float32
(
borrowRecord
.
DebtValue
)
*
coll
.
StabilityFeeRatio
)
+
1
realRepay
:=
borrowRecord
.
DebtValue
+
int64
(
float32
(
borrowRecord
.
DebtValue
)
*
coll
.
StabilityFeeRatio
)
// 检查
if
!
action
.
CheckExecTokenAccount
(
action
.
fromaddr
,
realRepay
*
Coin
,
false
)
{
...
...
@@ -626,6 +655,8 @@ func (action *Action) CollateralizeRepay(repay *pty.CollateralizeRepay) (*types.
// 借贷记录关闭
borrowRecord
.
PreStatus
=
borrowRecord
.
Status
borrowRecord
.
Status
=
pty
.
CollateralizeUserStatusClose
borrowRecord
.
PreIndex
=
borrowRecord
.
Index
borrowRecord
.
Index
=
action
.
GetIndex
()
// 保存
coll
.
Balance
+=
borrowRecord
.
DebtValue
...
...
@@ -633,8 +664,6 @@ func (action *Action) CollateralizeRepay(repay *pty.CollateralizeRepay) (*types.
coll
.
InvalidRecords
=
append
(
coll
.
InvalidRecords
,
borrowRecord
)
coll
.
LatestLiquidationPrice
=
getLatestLiquidationPrice
(
&
coll
.
Collateralize
)
coll
.
LatestExpireTime
=
getLatestExpireTime
(
&
coll
.
Collateralize
)
coll
.
PreIndex
=
coll
.
Index
coll
.
Index
=
action
.
GetIndex
()
coll
.
Save
(
action
.
db
)
kv
=
append
(
kv
,
coll
.
GetKVSet
()
...
)
...
...
@@ -681,7 +710,7 @@ func (action *Action) CollateralizeAppend(cAppend *pty.CollateralizeAppend) (*ty
clog
.
Debug
(
"CollateralizeAppend"
,
"value"
,
cAppend
.
CollateralValue
)
// 获取抵押物价格
lastPrice
,
err
:=
action
.
getLatestPrice
(
action
.
db
,
coll
.
CollType
)
lastPrice
,
err
:=
action
.
getLatestPrice
(
action
.
db
)
if
err
!=
nil
{
clog
.
Error
(
"CollateralizeBorrow"
,
"CollID"
,
coll
.
CollateralizeId
,
"addr"
,
action
.
fromaddr
,
"execaddr"
,
action
.
execaddr
,
"err"
,
err
)
return
nil
,
err
...
...
@@ -720,6 +749,8 @@ func (action *Action) CollateralizeAppend(cAppend *pty.CollateralizeAppend) (*ty
if
borrowRecord
.
Status
==
pty
.
CollateralizeUserStatusWarning
{
borrowRecord
.
PreStatus
=
borrowRecord
.
Status
borrowRecord
.
Status
=
pty
.
CollateralizeStatusCreated
borrowRecord
.
PreIndex
=
borrowRecord
.
Index
borrowRecord
.
Index
=
action
.
GetIndex
()
}
}
...
...
@@ -731,7 +762,7 @@ func (action *Action) CollateralizeAppend(cAppend *pty.CollateralizeAppend) (*ty
kv
=
append
(
kv
,
coll
.
GetKVSet
()
...
)
receiptLog
:=
action
.
GetAppendReceiptLog
(
&
coll
.
Collateralize
)
receiptLog
:=
action
.
GetAppendReceiptLog
(
&
coll
.
Collateralize
,
borrowRecord
)
logs
=
append
(
logs
,
receiptLog
)
receipt
=
&
types
.
Receipt
{
Ty
:
types
.
ExecOk
,
KV
:
kv
,
Logs
:
logs
}
...
...
@@ -747,12 +778,6 @@ func getManageKey(key string, db dbm.KV) ([]byte, error) {
return
value
,
nil
}
const
(
priceFeedKey
=
"collateralize-price-feed"
guarantorKey
=
"collateralize-guarantor"
configKey
=
"collateralize-config"
)
func
isRightAddr
(
key
string
,
addr
string
,
db
dbm
.
KV
)
bool
{
value
,
err
:=
getManageKey
(
key
,
db
)
if
err
!=
nil
{
...
...
@@ -781,7 +806,7 @@ func isRightAddr(key string, addr string, db dbm.KV) bool {
}
func
getGuarantorAddr
(
db
dbm
.
KV
)
(
string
,
error
)
{
value
,
err
:=
getManageKey
(
g
uarantorKey
,
db
)
value
,
err
:=
getManageKey
(
issuanceE
.
G
uarantorKey
,
db
)
if
err
!=
nil
{
clog
.
Error
(
"CollateralizePriceFeed"
,
"getGuarantorAddr"
,
err
)
return
""
,
err
...
...
@@ -838,15 +863,17 @@ func (action *Action) systemLiquidation(coll *pty.Collateralize, price float32)
borrowRecord
.
LiquidateTime
=
action
.
blocktime
borrowRecord
.
PreStatus
=
borrowRecord
.
Status
borrowRecord
.
Status
=
pty
.
CollateralizeUserStatusSystemLiquidate
borrowRecord
.
PreIndex
=
borrowRecord
.
Index
borrowRecord
.
Index
=
action
.
GetIndex
()
coll
.
InvalidRecords
=
append
(
coll
.
InvalidRecords
,
borrowRecord
)
coll
.
BorrowRecords
=
append
(
coll
.
BorrowRecords
[
:
index
],
coll
.
BorrowRecords
[
index
+
1
:
]
...
)
}
else
{
borrowRecord
.
PreStatus
=
borrowRecord
.
Status
borrowRecord
.
Status
=
pty
.
CollateralizeUserStatusWarning
borrowRecord
.
PreIndex
=
borrowRecord
.
Index
borrowRecord
.
Index
=
action
.
GetIndex
()
}
coll
.
PreIndex
=
coll
.
Index
coll
.
Index
=
action
.
GetIndex
()
log
:=
action
.
GetFeedReceiptLog
(
coll
,
borrowRecord
)
logs
=
append
(
logs
,
log
)
}
...
...
@@ -894,15 +921,17 @@ func (action *Action) expireLiquidation(coll *pty.Collateralize) (*types.Receipt
borrowRecord
.
LiquidateTime
=
action
.
blocktime
borrowRecord
.
PreStatus
=
borrowRecord
.
Status
borrowRecord
.
Status
=
pty
.
CollateralizeUserStatusExpireLiquidate
borrowRecord
.
PreIndex
=
borrowRecord
.
Index
borrowRecord
.
Index
=
action
.
GetIndex
()
coll
.
InvalidRecords
=
append
(
coll
.
InvalidRecords
,
borrowRecord
)
coll
.
BorrowRecords
=
append
(
coll
.
BorrowRecords
[
:
index
],
coll
.
BorrowRecords
[
index
+
1
:
]
...
)
}
else
{
borrowRecord
.
PreIndex
=
borrowRecord
.
Index
borrowRecord
.
Index
=
action
.
GetIndex
()
borrowRecord
.
PreStatus
=
borrowRecord
.
Status
borrowRecord
.
Status
=
pty
.
CollateralizeUserStatusExpire
}
coll
.
PreIndex
=
coll
.
Index
coll
.
Index
=
action
.
GetIndex
()
log
:=
action
.
GetFeedReceiptLog
(
coll
,
borrowRecord
)
logs
=
append
(
logs
,
log
)
}
...
...
@@ -943,7 +972,7 @@ func (action *Action) CollateralizeFeed(feed *pty.CollateralizeFeed) (*types.Rec
}
// 是否后台管理用户
if
!
isRightAddr
(
p
riceFeedKey
,
action
.
fromaddr
,
action
.
db
)
{
if
!
isRightAddr
(
issuanceE
.
P
riceFeedKey
,
action
.
fromaddr
,
action
.
db
)
{
clog
.
Error
(
"CollateralizePriceFeed"
,
"addr"
,
action
.
fromaddr
,
"error"
,
"Address has no permission to feed price"
)
return
nil
,
pty
.
ErrPermissionDeny
}
...
...
@@ -989,24 +1018,11 @@ func (action *Action) CollateralizeFeed(feed *pty.CollateralizeFeed) (*types.Rec
}
var
priceRecord
pty
.
AssetPriceRecord
if
feed
.
CollType
==
pty
.
CollateralizeAssetTypeBty
{
priceRecord
.
BtyPrice
=
price
}
else
if
feed
.
CollType
==
pty
.
CollateralizeAssetTypeBtc
{
priceRecord
.
BtcPrice
=
price
}
else
if
feed
.
CollType
==
pty
.
CollateralizeAssetTypeEth
{
priceRecord
.
EthPrice
=
price
}
else
{
priceRecord
.
BtyPrice
=
price
}
priceRecord
.
BtyPrice
=
price
priceRecord
.
RecordTime
=
action
.
blocktime
// 喂价记录
pricekv
:=
&
types
.
KeyValue
{
Key
:
calcCollateralizePriceKey
(
string
(
action
.
blocktime
)),
Value
:
types
.
Encode
(
&
priceRecord
)}
action
.
db
.
Set
(
pricekv
.
Key
,
pricekv
.
Value
)
kv
=
append
(
kv
,
pricekv
)
// 最近喂价记录
pricekv
=
&
types
.
KeyValue
{
Key
:
calcCollateralizeLatest
PriceKey
(),
Value
:
types
.
Encode
(
&
priceRecord
)}
pricekv
:=
&
types
.
KeyValue
{
Key
:
PriceKey
(),
Value
:
types
.
Encode
(
&
priceRecord
)}
action
.
db
.
Set
(
pricekv
.
Key
,
pricekv
.
Value
)
kv
=
append
(
kv
,
pricekv
)
...
...
@@ -1051,7 +1067,7 @@ func (action *Action) CollateralizeClose(close *pty.CollateralizeClose) (*types.
coll
:=
&
CollateralizeDB
{
*
collateralize
}
coll
.
Status
=
pty
.
CollateralizeStatusClose
coll
.
PreIndex
=
coll
.
Create
Index
coll
.
PreIndex
=
coll
.
Index
coll
.
Index
=
action
.
GetIndex
()
coll
.
Save
(
action
.
db
)
kv
=
append
(
kv
,
coll
.
GetKVSet
()
...
)
...
...
plugin/dapp/collateralize/executor/exec_del_local.go
View file @
491ce6b8
...
...
@@ -26,26 +26,34 @@ func (c *Collateralize) execDelLocal(tx *types.Transaction, receiptData *types.R
set
.
KV
=
append
(
set
.
KV
,
c
.
deleteCollateralizeAddr
(
collateralizeLog
.
CreateAddr
,
collateralizeLog
.
Index
)
...
)
break
case
pty
.
TyLogCollateralizeBorrow
:
set
.
KV
=
append
(
set
.
KV
,
c
.
deleteCollateralizeRecordStatus
(
collateralizeLog
.
Record
Status
,
collateralizeLog
.
Index
)
...
)
set
.
KV
=
append
(
set
.
KV
,
c
.
deleteCollateralizeRecordStatus
(
collateralizeLog
.
Status
,
collateralizeLog
.
Index
)
...
)
set
.
KV
=
append
(
set
.
KV
,
c
.
deleteCollateralizeRecordAddr
(
collateralizeLog
.
AccountAddr
,
collateralizeLog
.
Index
)
...
)
break
case
pty
.
TyLogCollateralizeAppend
:
// append没有状态变化
case
pty
.
TyLogCollateralizeAppend
:
if
collateralizeLog
.
Status
==
pty
.
CollateralizeUserStatusWarning
{
set
.
KV
=
append
(
set
.
KV
,
c
.
addCollateralizeRecordStatus
(
collateralizeLog
.
PreStatus
,
collateralizeLog
.
CollateralizeId
,
collateralizeLog
.
RecordId
,
collateralizeLog
.
PreIndex
)
...
)
set
.
KV
=
append
(
set
.
KV
,
c
.
deleteCollateralizeRecordStatus
(
collateralizeLog
.
Status
,
collateralizeLog
.
Index
)
...
)
set
.
KV
=
append
(
set
.
KV
,
c
.
addCollateralizeRecordAddr
(
collateralizeLog
.
AccountAddr
,
collateralizeLog
.
CollateralizeId
,
collateralizeLog
.
RecordId
,
collateralizeLog
.
PreIndex
)
...
)
set
.
KV
=
append
(
set
.
KV
,
c
.
deleteCollateralizeRecordAddr
(
collateralizeLog
.
AccountAddr
,
collateralizeLog
.
Index
)
...
)
}
break
case
pty
.
TyLogCollateralizeRepay
:
set
.
KV
=
append
(
set
.
KV
,
c
.
addCollateralizeRecordStatus
(
collateralizeLog
.
Record
PreStatus
,
collateralizeLog
.
CollateralizeId
,
set
.
KV
=
append
(
set
.
KV
,
c
.
addCollateralizeRecordStatus
(
collateralizeLog
.
PreStatus
,
collateralizeLog
.
CollateralizeId
,
collateralizeLog
.
RecordId
,
collateralizeLog
.
PreIndex
)
...
)
set
.
KV
=
append
(
set
.
KV
,
c
.
deleteCollateralizeRecordStatus
(
collateralizeLog
.
Record
Status
,
collateralizeLog
.
Index
)
...
)
set
.
KV
=
append
(
set
.
KV
,
c
.
deleteCollateralizeRecordStatus
(
collateralizeLog
.
Status
,
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
.
Record
Status
,
collateralizeLog
.
CollateralizeId
,
set
.
KV
=
append
(
set
.
KV
,
c
.
addCollateralizeRecordStatus
(
collateralizeLog
.
Status
,
collateralizeLog
.
CollateralizeId
,
collateralizeLog
.
RecordId
,
collateralizeLog
.
PreIndex
)
...
)
set
.
KV
=
append
(
set
.
KV
,
c
.
deleteCollateralizeRecordStatus
(
collateralizeLog
.
Record
Status
,
collateralizeLog
.
Index
)
...
)
set
.
KV
=
append
(
set
.
KV
,
c
.
deleteCollateralizeRecordStatus
(
collateralizeLog
.
Status
,
collateralizeLog
.
Index
)
...
)
set
.
KV
=
append
(
set
.
KV
,
c
.
addCollateralizeRecordAddr
(
collateralizeLog
.
AccountAddr
,
collateralizeLog
.
CollateralizeId
,
collateralizeLog
.
RecordId
,
collateralizeLog
.
PreIndex
)
...
)
// 如果没有被清算,需要把地址索引更新
if
collateralizeLog
.
RecordStatus
==
pty
.
CollateralizeUserStatusWarning
||
collateralizeLog
.
Record
Status
==
pty
.
CollateralizeUserStatusExpire
{
if
collateralizeLog
.
Status
==
pty
.
CollateralizeUserStatusWarning
||
collateralizeLog
.
Status
==
pty
.
CollateralizeUserStatusExpire
{
set
.
KV
=
append
(
set
.
KV
,
c
.
deleteCollateralizeRecordAddr
(
collateralizeLog
.
AccountAddr
,
collateralizeLog
.
Index
)
...
)
}
break
...
...
plugin/dapp/collateralize/executor/exec_local.go
View file @
491ce6b8
...
...
@@ -27,33 +27,41 @@ func (c *Collateralize) execLocal(tx *types.Transaction, receipt *types.ReceiptD
set
.
KV
=
append
(
set
.
KV
,
c
.
addCollateralizeAddr
(
collateralizeLog
.
CreateAddr
,
collateralizeLog
.
CollateralizeId
,
collateralizeLog
.
Index
)
...
)
break
case
pty
.
TyLogCollateralizeBorrow
:
set
.
KV
=
append
(
set
.
KV
,
c
.
addCollateralizeRecordStatus
(
collateralizeLog
.
Record
Status
,
collateralizeLog
.
CollateralizeId
,
set
.
KV
=
append
(
set
.
KV
,
c
.
addCollateralizeRecordStatus
(
collateralizeLog
.
Status
,
collateralizeLog
.
CollateralizeId
,
collateralizeLog
.
RecordId
,
collateralizeLog
.
Index
)
...
)
set
.
KV
=
append
(
set
.
KV
,
c
.
addCollateralizeRecordAddr
(
collateralizeLog
.
AccountAddr
,
collateralizeLog
.
CollateralizeId
,
collateralizeLog
.
RecordId
,
collateralizeLog
.
Index
)
...
)
break
case
pty
.
TyLogCollateralizeAppend
:
//append没有状态变化
case
pty
.
TyLogCollateralizeAppend
:
if
collateralizeLog
.
Status
==
pty
.
CollateralizeUserStatusWarning
{
set
.
KV
=
append
(
set
.
KV
,
c
.
deleteCollateralizeRecordStatus
(
collateralizeLog
.
PreStatus
,
collateralizeLog
.
PreIndex
)
...
)
set
.
KV
=
append
(
set
.
KV
,
c
.
addCollateralizeRecordStatus
(
collateralizeLog
.
Status
,
collateralizeLog
.
CollateralizeId
,
collateralizeLog
.
RecordId
,
collateralizeLog
.
Index
)
...
)
set
.
KV
=
append
(
set
.
KV
,
c
.
deleteCollateralizeRecordAddr
(
collateralizeLog
.
AccountAddr
,
collateralizeLog
.
PreIndex
)
...
)
set
.
KV
=
append
(
set
.
KV
,
c
.
addCollateralizeRecordAddr
(
collateralizeLog
.
AccountAddr
,
collateralizeLog
.
CollateralizeId
,
collateralizeLog
.
RecordId
,
collateralizeLog
.
Index
)
...
)
}
break
case
pty
.
TyLogCollateralizeRepay
:
set
.
KV
=
append
(
set
.
KV
,
c
.
deleteCollateralizeRecordStatus
(
collateralizeLog
.
Record
PreStatus
,
collateralizeLog
.
PreIndex
)
...
)
set
.
KV
=
append
(
set
.
KV
,
c
.
addCollateralizeRecordStatus
(
collateralizeLog
.
Record
Status
,
collateralizeLog
.
CollateralizeId
,
set
.
KV
=
append
(
set
.
KV
,
c
.
deleteCollateralizeRecordStatus
(
collateralizeLog
.
PreStatus
,
collateralizeLog
.
PreIndex
)
...
)
set
.
KV
=
append
(
set
.
KV
,
c
.
addCollateralizeRecordStatus
(
collateralizeLog
.
Status
,
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
.
Record
PreStatus
,
collateralizeLog
.
PreIndex
)
...
)
set
.
KV
=
append
(
set
.
KV
,
c
.
addCollateralizeRecordStatus
(
collateralizeLog
.
Record
Status
,
collateralizeLog
.
CollateralizeId
,
set
.
KV
=
append
(
set
.
KV
,
c
.
deleteCollateralizeRecordStatus
(
collateralizeLog
.
PreStatus
,
collateralizeLog
.
PreIndex
)
...
)
set
.
KV
=
append
(
set
.
KV
,
c
.
addCollateralizeRecordStatus
(
collateralizeLog
.
Status
,
collateralizeLog
.
CollateralizeId
,
collateralizeLog
.
RecordId
,
collateralizeLog
.
Index
)
...
)
set
.
KV
=
append
(
set
.
KV
,
c
.
deleteCollateralizeRecordAddr
(
collateralizeLog
.
AccountAddr
,
collateralizeLog
.
PreIndex
)
...
)
// 如果没有被清算,需要把地址索引更新
if
collateralizeLog
.
RecordStatus
==
pty
.
CollateralizeUserStatusWarning
||
collateralizeLog
.
Record
Status
==
pty
.
CollateralizeUserStatusExpire
{
if
collateralizeLog
.
Status
==
pty
.
CollateralizeUserStatusWarning
||
collateralizeLog
.
Status
==
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
.
deleteCollateralizeStatus
(
collateralizeLog
.
PreStatus
,
collateralizeLog
.
PreIndex
)
...
)
set
.
KV
=
append
(
set
.
KV
,
c
.
deleteCollateralizeAddr
(
collateralizeLog
.
CreateAddr
,
collateralizeLog
.
PreIndex
)
...
)
break
}
...
...
plugin/dapp/collateralize/executor/keys.go
View file @
491ce6b8
...
...
@@ -36,11 +36,6 @@ func calcCollateralizePriceKey(time string) []byte {
return
[]
byte
(
key
)
}
func
calcCollateralizeLatestPriceKey
()
[]
byte
{
key
:=
fmt
.
Sprintf
(
"LODB-collateralize-latest-price"
)
return
[]
byte
(
key
)
}
func
calcCollateralizeRecordAddrPrefix
(
addr
string
)
[]
byte
{
key
:=
fmt
.
Sprintf
(
"LODB-collateralize-record-addr:%d"
,
addr
)
return
[]
byte
(
key
)
...
...
plugin/dapp/collateralize/proto/collateralize.proto
View file @
491ce6b8
...
...
@@ -14,13 +14,11 @@ message Collateralize {
repeated
BorrowRecord
borrowRecords
=
8
;
//借贷记录
repeated
BorrowRecord
InvalidRecords
=
9
;
//失效的借贷记录
int32
status
=
10
;
//当期借贷的状态,是否关闭
int32
collType
=
11
;
//质押资产类型(1,bty,2,btc,3,eth...)
float
latestLiquidationPrice
=
12
;
//最高清算价格
int64
period
=
13
;
//借贷最大期限
int64
latestExpireTime
=
14
;
//最近超期时间
int64
index
=
15
;
//当前索引
int64
preIndex
=
16
;
//上一个索引
int64
createIndex
=
17
;
//创建时的索引,用于close删除记录
float
latestLiquidationPrice
=
11
;
//最高清算价格
int64
period
=
12
;
//借贷最大期限
int64
latestExpireTime
=
13
;
//最近超期时间
int64
index
=
14
;
//当前索引
int64
preIndex
=
15
;
//上一个索引
}
// 借出记录
...
...
@@ -36,6 +34,8 @@ message BorrowRecord {
int64
expireTime
=
9
;
//超时清算时间
int32
preStatus
=
10
;
//上一次抵押状态,用于告警恢复
string
recordId
=
11
;
//借出id,标识一次借出记录
int64
index
=
12
;
//当前索引
int64
preIndex
=
13
;
//上级索引
}
// 资产价格记录
...
...
@@ -111,13 +111,12 @@ message ReceiptCollateralize {
string
collateralizeId
=
1
;
string
createAddr
=
2
;
string
accountAddr
=
3
;
int32
status
=
4
;
int64
index
=
5
;
int32
recordStatus
=
6
;
int32
recordPreStatus
=
7
;
string
recordId
=
8
;
int64
preIndex
=
9
;
}
string
recordId
=
4
;
int32
status
=
5
;
int32
PreStatus
=
6
;
int64
index
=
7
;
int64
preIndex
=
8
;
}
// exec_local 借贷记录信息
message
CollateralizeRecord
{
...
...
plugin/dapp/collateralize/types/collateralize.go
View file @
491ce6b8
...
...
@@ -93,7 +93,7 @@ func (Collateralize CollateralizeType) CreateTx(action string, message json.RawM
return
nil
,
types
.
ErrInvalidParam
}
return
CreateRawCollateralizeAppendTx
(
&
param
)
}
else
if
action
==
"CollateralizeFeed"
{
}
else
if
action
==
"Collateralize
Price
Feed"
{
var
param
CollateralizeFeedTx
err
:=
json
.
Unmarshal
(
message
,
&
param
)
if
err
!=
nil
{
...
...
plugin/dapp/collateralize/types/collateralize.pb.go
View file @
491ce6b8
...
...
@@ -32,13 +32,11 @@ type Collateralize struct {
BorrowRecords
[]
*
BorrowRecord
`protobuf:"bytes,8,rep,name=borrowRecords,proto3" json:"borrowRecords,omitempty"`
InvalidRecords
[]
*
BorrowRecord
`protobuf:"bytes,9,rep,name=InvalidRecords,proto3" json:"InvalidRecords,omitempty"`
Status
int32
`protobuf:"varint,10,opt,name=status,proto3" json:"status,omitempty"`
CollType
int32
`protobuf:"varint,11,opt,name=collType,proto3" json:"collType,omitempty"`
LatestLiquidationPrice
float32
`protobuf:"fixed32,12,opt,name=latestLiquidationPrice,proto3" json:"latestLiquidationPrice,omitempty"`
Period
int64
`protobuf:"varint,13,opt,name=period,proto3" json:"period,omitempty"`
LatestExpireTime
int64
`protobuf:"varint,14,opt,name=latestExpireTime,proto3" json:"latestExpireTime,omitempty"`
Index
int64
`protobuf:"varint,15,opt,name=index,proto3" json:"index,omitempty"`
PreIndex
int64
`protobuf:"varint,16,opt,name=preIndex,proto3" json:"preIndex,omitempty"`
CreateIndex
int64
`protobuf:"varint,17,opt,name=createIndex,proto3" json:"createIndex,omitempty"`
LatestLiquidationPrice
float32
`protobuf:"fixed32,11,opt,name=latestLiquidationPrice,proto3" json:"latestLiquidationPrice,omitempty"`
Period
int64
`protobuf:"varint,12,opt,name=period,proto3" json:"period,omitempty"`
LatestExpireTime
int64
`protobuf:"varint,13,opt,name=latestExpireTime,proto3" json:"latestExpireTime,omitempty"`
Index
int64
`protobuf:"varint,14,opt,name=index,proto3" json:"index,omitempty"`
PreIndex
int64
`protobuf:"varint,15,opt,name=preIndex,proto3" json:"preIndex,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
...
...
@@ -139,13 +137,6 @@ func (m *Collateralize) GetStatus() int32 {
return
0
}
func
(
m
*
Collateralize
)
GetCollType
()
int32
{
if
m
!=
nil
{
return
m
.
CollType
}
return
0
}
func
(
m
*
Collateralize
)
GetLatestLiquidationPrice
()
float32
{
if
m
!=
nil
{
return
m
.
LatestLiquidationPrice
...
...
@@ -181,13 +172,6 @@ func (m *Collateralize) GetPreIndex() int64 {
return
0
}
func
(
m
*
Collateralize
)
GetCreateIndex
()
int64
{
if
m
!=
nil
{
return
m
.
CreateIndex
}
return
0
}
// 借出记录
type
BorrowRecord
struct
{
AccountAddr
string
`protobuf:"bytes,1,opt,name=accountAddr,proto3" json:"accountAddr,omitempty"`
...
...
@@ -201,6 +185,8 @@ type BorrowRecord struct {
ExpireTime
int64
`protobuf:"varint,9,opt,name=expireTime,proto3" json:"expireTime,omitempty"`
PreStatus
int32
`protobuf:"varint,10,opt,name=preStatus,proto3" json:"preStatus,omitempty"`
RecordId
string
`protobuf:"bytes,11,opt,name=recordId,proto3" json:"recordId,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_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
...
...
@@ -308,6 +294,20 @@ func (m *BorrowRecord) GetRecordId() string {
return
""
}
func
(
m
*
BorrowRecord
)
GetIndex
()
int64
{
if
m
!=
nil
{
return
m
.
Index
}
return
0
}
func
(
m
*
BorrowRecord
)
GetPreIndex
()
int64
{
if
m
!=
nil
{
return
m
.
PreIndex
}
return
0
}
// 资产价格记录
type
AssetPriceRecord
struct
{
RecordTime
int64
`protobuf:"varint,1,opt,name=recordTime,proto3" json:"recordTime,omitempty"`
...
...
@@ -931,12 +931,11 @@ type ReceiptCollateralize struct {
CollateralizeId
string
`protobuf:"bytes,1,opt,name=collateralizeId,proto3" json:"collateralizeId,omitempty"`
CreateAddr
string
`protobuf:"bytes,2,opt,name=createAddr,proto3" json:"createAddr,omitempty"`
AccountAddr
string
`protobuf:"bytes,3,opt,name=accountAddr,proto3" json:"accountAddr,omitempty"`
Status
int32
`protobuf:"varint,4,opt,name=status,proto3" json:"status,omitempty"`
Index
int64
`protobuf:"varint,5,opt,name=index,proto3" json:"index,omitempty"`
RecordStatus
int32
`protobuf:"varint,6,opt,name=recordStatus,proto3" json:"recordStatus,omitempty"`
RecordPreStatus
int32
`protobuf:"varint,7,opt,name=recordPreStatus,proto3" json:"recordPreStatus,omitempty"`
RecordId
string
`protobuf:"bytes,8,opt,name=recordId,proto3" json:"recordId,omitempty"`
PreIndex
int64
`protobuf:"varint,9,opt,name=preIndex,proto3" json:"preIndex,omitempty"`
RecordId
string
`protobuf:"bytes,4,opt,name=recordId,proto3" json:"recordId,omitempty"`
Status
int32
`protobuf:"varint,5,opt,name=status,proto3" json:"status,omitempty"`
PreStatus
int32
`protobuf:"varint,6,opt,name=PreStatus,proto3" json:"PreStatus,omitempty"`
Index
int64
`protobuf:"varint,7,opt,name=index,proto3" json:"index,omitempty"`
PreIndex
int64
`protobuf:"varint,8,opt,name=preIndex,proto3" json:"preIndex,omitempty"`
XXX_NoUnkeyedLiteral
struct
{}
`json:"-"`
XXX_unrecognized
[]
byte
`json:"-"`
XXX_sizecache
int32
`json:"-"`
...
...
@@ -988,41 +987,34 @@ func (m *ReceiptCollateralize) GetAccountAddr() string {
return
""
}
func
(
m
*
ReceiptCollateralize
)
Get
Status
()
int32
{
func
(
m
*
ReceiptCollateralize
)
Get
RecordId
()
string
{
if
m
!=
nil
{
return
m
.
Status
return
m
.
RecordId
}
return
0
return
""
}
func
(
m
*
ReceiptCollateralize
)
Get
Index
()
int64
{
func
(
m
*
ReceiptCollateralize
)
Get
Status
()
int32
{
if
m
!=
nil
{
return
m
.
Index
return
m
.
Status
}
return
0
}
func
(
m
*
ReceiptCollateralize
)
Get
Record
Status
()
int32
{
func
(
m
*
ReceiptCollateralize
)
Get
Pre
Status
()
int32
{
if
m
!=
nil
{
return
m
.
Record
Status
return
m
.
Pre
Status
}
return
0
}
func
(
m
*
ReceiptCollateralize
)
Get
RecordPreStatus
()
int32
{
func
(
m
*
ReceiptCollateralize
)
Get
Index
()
int64
{
if
m
!=
nil
{
return
m
.
RecordPreStatus
return
m
.
Index
}
return
0
}
func
(
m
*
ReceiptCollateralize
)
GetRecordId
()
string
{
if
m
!=
nil
{
return
m
.
RecordId
}
return
""
}
func
(
m
*
ReceiptCollateralize
)
GetPreIndex
()
int64
{
if
m
!=
nil
{
return
m
.
PreIndex
...
...
@@ -1719,77 +1711,76 @@ func init() {
func
init
()
{
proto
.
RegisterFile
(
"collateralize.proto"
,
fileDescriptor_a988fb4a61381972
)
}
var
fileDescriptor_a988fb4a61381972
=
[]
byte
{
// 1148 bytes of a gzipped FileDescriptorProto
0x1f
,
0x8b
,
0x08
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x02
,
0xff
,
0xdc
,
0x57
,
0xe1
,
0x6e
,
0xdc
,
0x44
,
0x10
,
0xae
,
0xed
,
0xbb
,
0x4b
,
0x6e
,
0x2e
,
0x69
,
0x93
,
0x4d
,
0x08
,
0x26
,
0x54
,
0xd1
,
0x69
,
0x85
,
0xc4
,
0x09
,
0x4a
,
0x24
,
0xd2
,
0x0a
,
0x51
,
0x21
,
0x21
,
0x92
,
0xb4
,
0x55
,
0x4e
,
0x2a
,
0x52
,
0x65
,
0x0a
,
0x42
,
0x08
,
0x90
,
0x7c
,
0xf6
,
0xa6
,
0x58
,
0x72
,
0xce
,
0x8e
,
0xbd
,
0x17
,
0x7a
,
0xfc
,
0x06
,
0xfe
,
0xf6
,
0x05
,
0x78
,
0x01
,
0x5e
,
0x80
,
0xe7
,
0x43
,
0x33
,
0xbb
,
0x67
,
0x7b
,
0xd7
,
0x77
,
0x51
,
0x02
,
0xfc
,
0xe2
,
0xcf
,
0xe9
,
0x66
,
0xe6
,
0x9b
,
0xdd
,
0xd9
,
0x99
,
0x6f
,
0x67
,
0xd6
,
0xb0
,
0x13
,
0x65
,
0x69
,
0x1a
,
0x4a
,
0x51
,
0x84
,
0x69
,
0xf2
,
0x8b
,
0x38
,
0xcc
,
0x8b
,
0x4c
,
0x66
,
0xac
,
0x2b
,
0xe7
,
0xb9
,
0x28
,
0xf9
,
0x9b
,
0x2e
,
0x6c
,
0x9e
,
0x36
,
0xcd
,
0x6c
,
0x04
,
0xf7
,
0x0c
,
0xfc
,
0x38
,
0xf6
,
0x9d
,
0xa1
,
0x33
,
0xea
,
0x07
,
0xb6
,
0x9a
,
0x71
,
0xd8
,
0x90
,
0x99
,
0x0c
,
0xd3
,
0x93
,
0x30
,
0x0d
,
0xa7
,
0x91
,
0xf0
,
0xdd
,
0xa1
,
0x33
,
0xf2
,
0x02
,
0x43
,
0xc7
,
0x86
,
0x30
,
0x88
,
0xc5
,
0x44
,
0x9e
,
0x8a
,
0x24
,
0x4d
,
0xa6
,
0xaf
,
0x7c
,
0x8f
,
0x20
,
0x4d
,
0x15
,
0xfb
,
0x00
,
0xb6
,
0xd2
,
0xe4
,
0x72
,
0x96
,
0xc4
,
0xa1
,
0x4c
,
0xb2
,
0x69
,
0x80
,
0xbf
,
0x7e
,
0x67
,
0xe8
,
0x8c
,
0xdc
,
0xa0
,
0xa5
,
0x67
,
0x0f
,
0x60
,
0xbb
,
0x94
,
0xe1
,
0x24
,
0x49
,
0x13
,
0x39
,
0x7f
,
0x26
,
0x84
,
0x02
,
0x77
,
0x09
,
0xdc
,
0x36
,
0xb0
,
0x03
,
0x80
,
0xa8
,
0x10
,
0xa1
,
0x14
,
0xc7
,
0x71
,
0x5c
,
0xf8
,
0x3d
,
0x3a
,
0x44
,
0x43
,
0xc3
,
0x7c
,
0x58
,
0x9b
,
0xe8
,
0xd0
,
0xd7
,
0x28
,
0xae
,
0x85
,
0xc8
,
0x1e
,
0xc3
,
0xe6
,
0x24
,
0x2b
,
0x8a
,
0xec
,
0xe7
,
0x40
,
0x44
,
0x59
,
0x11
,
0x97
,
0xfe
,
0xfa
,
0xd0
,
0x1b
,
0x0d
,
0x8e
,
0x76
,
0x0e
,
0x29
,
0x69
,
0x87
,
0x27
,
0x0d
,
0x5b
,
0x60
,
0x22
,
0xd9
,
0x67
,
0x70
,
0x77
,
0x3c
,
0xbd
,
0x0a
,
0xd3
,
0x24
,
0x5e
,
0xf8
,
0xf6
,
0x57
,
0xfb
,
0x5a
,
0x50
,
0xb6
,
0x07
,
0xbd
,
0x52
,
0x86
,
0x72
,
0x56
,
0xfa
,
0x30
,
0x74
,
0x46
,
0xdd
,
0x40
,
0x4b
,
0x6c
,
0x1f
,
0xd6
,
0x31
,
0xf9
,
0x2f
,
0xe7
,
0xb9
,
0xf0
,
0x07
,
0x64
,
0xa9
,
0x64
,
0xf6
,
0x09
,
0xec
,
0x61
,
0x55
,
0x4a
,
0xf9
,
0xbc
,
0xce
,
0xd6
,
0x8b
,
0x22
,
0x89
,
0x84
,
0xbf
,
0x41
,
0x89
,
0x59
,
0x61
,
0xc5
,
0xbd
,
0x72
,
0x51
,
0x24
,
0x59
,
0xec
,
0x6f
,
0xd2
,
0xe1
,
0xb5
,
0x44
,
0xf5
,
0x20
,
0x8f
,
0xa7
,
0xaf
,
0xf3
,
0xa4
,
0x10
,
0x2f
,
0x93
,
0x0b
,
0xe1
,
0xdf
,
0x25
,
0x44
,
0x4b
,
0xcf
,
0x76
,
0xa1
,
0x9b
,
0x4c
,
0x63
,
0xf1
,
0xda
,
0xbf
,
0x47
,
0x00
,
0x25
,
0x60
,
0xb4
,
0x79
,
0x21
,
0xc6
,
0x64
,
0xd8
,
0x22
,
0x43
,
0x25
,
0x23
,
0x1f
,
0x54
,
0x05
,
0x94
,
0x79
,
0x5b
,
0xf1
,
0xa1
,
0xa1
,
0xe2
,
0xbf
,
0x7a
,
0xb0
,
0xd1
,
0x4c
,
0x12
,
0xba
,
0x84
,
0x51
,
0x94
,
0xcd
,
0xa6
,
0x92
,
0xea
,
0xa8
,
0xc8
,
0xd8
,
0x54
,
0xb1
,
0xfb
,
0xd0
,
0x2f
,
0x65
,
0x58
,
0x48
,
0x8a
,
0x55
,
0xb1
,
0xb0
,
0x56
,
0x98
,
0x84
,
0xfe
,
0x26
,
0x4c
,
0x67
,
0x42
,
0xd3
,
0xd0
,
0x56
,
0x9b
,
0x48
,
0x95
,
0x43
,
0xc5
,
0x44
,
0x5b
,
0x8d
,
0x3b
,
0x22
,
0x87
,
0xd5
,
0x6a
,
0x5d
,
0xb5
,
0x63
,
0xa5
,
0xb0
,
0x28
,
0xad
,
0x16
,
0xea
,
0xb5
,
0x28
,
0x5d
,
0x95
,
0x41
,
0x97
,
0x7c
,
0xcd
,
0x28
,
0xf9
,
0x7b
,
0xb0
,
0xb9
,
0xc0
,
0xaa
,
0x1a
,
0xac
,
0xd3
,
0x2e
,
0xa6
,
0x12
,
0x29
,
0x2e
,
0xea
,
0x32
,
0xf5
,
0x09
,
0xd2
,
0xd0
,
0x60
,
0x9c
,
0x79
,
0x21
,
0xbe
,
0x6a
,
0x72
,
0xaa
,
0x56
,
0x60
,
0xa1
,
0x0a
,
0xca
,
0xf1
,
0x38
,
0x26
,
0x5a
,
0xf5
,
0x83
,
0x4a
,
0xe6
,
0xbf
,
0x3b
,
0xb0
,
0x75
,
0x5c
,
0x96
,
0x42
,
0x52
,
0x98
,
0xba
,
0x14
,
0x07
,
0x00
,
0x0a
,
0x40
,
0xdb
,
0x39
,
0x6a
,
0xbb
,
0x5a
,
0x83
,
0x0b
,
0x4e
,
0xe4
,
0x5c
,
0x1d
,
0xd8
,
0xa5
,
0x03
,
0x57
,
0xb2
,
0xb2
,
0x45
,
0xca
,
0xe6
,
0x2d
,
0x6c
,
0x51
,
0x65
,
0x13
,
0xf2
,
0xa7
,
0x66
,
0xc6
,
0x2b
,
0x99
,
0xff
,
0xe1
,
0xc1
,
0x8e
,
0xd1
,
0xa1
,
0x8e
,
0x23
,
0xcc
,
0x1e
,
0x7b
,
0x04
,
0x3d
,
0x45
,
0x1b
,
0x8a
,
0x63
,
0x70
,
0xb4
,
0xaf
,
0x2f
,
0x98
,
0x81
,
0x3d
,
0x25
,
0xc4
,
0xd9
,
0x9d
,
0x40
,
0x63
,
0xd1
,
0x4b
,
0xdd
,
0x57
,
0x8a
,
0x6f
,
0x85
,
0x97
,
0xa2
,
0x1f
,
0x7a
,
0x29
,
0x2c
,
0xfb
,
0x18
,
0xba
,
0x85
,
0xc8
,
0xc3
,
0x39
,
0x05
,
0x3e
,
0x38
,
0x7a
,
0x67
,
0x99
,
0x53
,
0x80
,
0x80
,
0xb3
,
0x3b
,
0x81
,
0x42
,
0xe2
,
0x46
,
0x61
,
0x9e
,
0x8b
,
0x69
,
0x4c
,
0x07
,
0x5a
,
0xb1
,
0xd1
,
0x31
,
0x21
,
0x70
,
0x23
,
0x85
,
0x65
,
0x87
,
0xd0
,
0x39
,
0x17
,
0x22
,
0x26
,
0x4a
,
0x0d
,
0x8e
,
0xfc
,
0x65
,
0x3e
,
0xcf
,
0x84
,
0x40
,
0x0f
,
0xc2
,
0x61
,
0x60
,
0x51
,
0x9a
,
0x95
,
0x8a
,
0x5e
,
0x2b
,
0x02
,
0x3b
,
0x45
,
0x00
,
0x06
,
0x46
,
0x48
,
0x0c
,
0xec
,
0x22
,
0x9c
,
0x86
,
0xaf
,
0x54
,
0xd3
,
0x5b
,
0x11
,
0xd8
,
0x97
,
0x84
,
0xc0
,
0xc0
,
0x14
,
0x96
,
0xdd
,
0x05
,
0x57
,
0xce
,
0x35
,
0x83
,
0x5c
,
0x39
,
0x3f
,
0x59
,
0x83
,
0xee
,
0x15
,
0x72
,
0x9d
,
0xff
,
0xe9
,
0x58
,
0xe5
,
0x51
,
0xae
,
0x76
,
0xe3
,
0x77
,
0x6e
,
0xd6
,
0xf8
,
0xdd
,
0xdb
,
0x34
,
0x7e
,
0x6f
,
0x55
,
0xe3
,
0xaf
,
0x5b
,
0x5b
,
0xa7
,
0xd9
,
0xda
,
0xf8
,
0x43
,
0xd8
,
0x36
,
0xd3
,
0x8f
,
0xcd
,
0xe3
,
0x00
,
0xa0
,
0x9c
,
0xe5
,
0xa2
,
0x40
,
0xa1
,
0xf4
,
0x9d
,
0xa1
,
0x87
,
0x53
,
0xa2
,
0xd6
,
0xf0
,
0xc7
,
0xd6
,
0xf9
,
0x14
,
0xa5
,
0x5a
,
0xc3
,
0xcf
,
0x69
,
0x0f
,
0x3f
,
0xfe
,
0xb5
,
0xe5
,
0xaa
,
0x78
,
0x75
,
0x8b
,
0x09
,
0xbb
,
0xab
,
0xb3
,
0xac
,
0x9b
,
0x9a
,
0x4e
,
0xf9
,
0x77
,
0xc0
,
0xda
,
0xcc
,
0xbb
,
0xc5
,
0xaa
,
0xcd
,
0x6b
,
0xef
,
0x5a
,
0xd7
,
0xfe
,
0x37
,
0xbb
,
0x9c
,
0x8a
,
0xa2
,
0xff
,
0xcd
,
0xea
,
0x37
,
0x6f
,
0xc5
,
0xfc
,
0x07
,
0xab
,
0x54
,
0xc8
,
0x7a
,
0x63
,
0x0c
,
0x3a
,
0xd6
,
0x18
,
0xdc
,
0x85
,
0x6e
,
0xae
,
0xfb
,
0x8e
,
0x37
,
0x72
,
0x03
,
0x25
,
0x20
,
0x13
,
0xae
,
0xb2
,
0x74
,
0x76
,
0x81
,
0xfb
,
0x78
,
0xc8
,
0x04
,
0x25
,
0xf1
,
0xcf
,
0xad
,
0x14
,
0xd2
,
0x1d
,
0xb9
,
0xf9
,
0x21
,
0xf9
,
0x5f
,
0x2e
,
0xec
,
0x06
,
0x22
,
0x12
,
0x49
,
0x2e
,
0xff
,
0xe9
,
0xeb
,
0xc9
,
0x7c
,
0x9d
,
0xb8
,
0xad
,
0xd7
,
0x89
,
0x35
,
0xf6
,
0xbc
,
0xf6
,
0xd8
,
0xab
,
0x47
,
0x47
,
0xc7
,
0x18
,
0x1d
,
0xd5
,
0x54
,
0xee
,
0x36
,
0xa7
,
0x32
,
0x87
,
0x0d
,
0x55
,
0x07
,
0x3d
,
0x0d
,
0x7a
,
0xe4
,
0x63
,
0xe8
,
0x30
,
0x7a
,
0x25
,
0xbf
,
0xa8
,
0x86
,
0x86
,
0x9a
,
0x4a
,
0xb6
,
0xda
,
0xa8
,
0xf2
,
0xba
,
0x55
,
0xe5
,
0xe6
,
0xfc
,
0xef
,
0x9b
,
0xf3
,
0xbf
,
0xcd
,
0x2f
,
0x3d
,
0x59
,
0x6e
,
0x9e
,
0x37
,
0x06
,
0x9d
,
0xb0
,
0xce
,
0x18
,
0xfd
,
0x37
,
0xa2
,
0xf1
,
0xac
,
0x68
,
0xaa
,
0x6c
,
0x74
,
0x1a
,
0xd9
,
0xe0
,
0xcf
,
0x61
,
0x77
,
0x49
,
0x18
,
0x25
,
0x7b
,
0x04
,
0x6b
,
0x85
,
0x7e
,
0xb7
,
0x39
,
0xf4
,
0x6e
,
0xdb
,
0x5f
,
0xde
,
0xeb
,
0xe9
,
0xf9
,
0xb6
,
0x80
,
0xf2
,
0x2f
,
0x90
,
0x0d
,
0x97
,
0x06
,
0x64
,
0x3c
,
0x3d
,
0xcf
,
0x6e
,
0x41
,
0xa8
,
0x37
,
0x2e
,
0xbc
,
0x1b
,
0x88
,
0xdc
,
0x24
,
0xe5
,
0xac
,
0x28
,
0xc4
,
0x54
,
0xd2
,
0x4a
,
0x75
,
0xad
,
0x1d
,
0xa3
,
0xd6
,
0xff
,
0xdb
,
0x37
,
0x38
,
0x3f
,
0x85
,
0xb7
,
0x96
,
0xe5
,
0xb4
,
0xc4
,
0x60
,
0xad
,
0xec
,
0x2d
,
0xda
,
0x76
,
0x4b
,
0xcf
,
0xbf
,
0x85
,
0xfb
,
0xd7
,
0x64
,
0xb5
,
0x64
,
0x9f
,
0x22
,
0x39
,
0xce
,
0xb3
,
0x45
,
0xb1
,
0xb9
,
0x2e
,
0xf6
,
0x35
,
0x3e
,
0x81
,
0x72
,
0xe0
,
0x47
,
0xe0
,
0xdb
,
0xe1
,
0x9d
,
0xcc
,
0xf5
,
0xe5
,
0x58
,
0x51
,
0x2c
,
0xfe
,
0x00
,
0xf6
,
0xda
,
0x3e
,
0x94
,
0x86
,
0x05
,
0xa9
,
0x9d
,
0x9a
,
0xd4
,
0xfc
,
0x7d
,
0xd8
,
0xb1
,
0xe3
,
0x18
,
0x3f
,
0x29
,
0xd9
,
0x16
,
0x78
,
0xe3
,
0x27
,
0x8b
,
0x13
,
0xe3
,
0x5f
,
0xfe
,
0x3d
,
0x1e
,
0xf2
,
0x72
,
0x09
,
0x41
,
0xf5
,
0xe2
,
0xff
,
0xea
,
0x6e
,
0xf1
,
0x09
,
0x1c
,
0xac
,
0x5a
,
0xbd
,
0xee
,
0x1a
,
0x37
,
0x5c
,
0xbf
,
0x4e
,
0x8c
,
0x6b
,
0x24
,
0xe6
,
0x0c
,
0xde
,
0xb6
,
0x8f
,
0xba
,
0xb8
,
0x90
,
0x1f
,
0xd9
,
0x17
,
0x72
,
0xe9
,
0x87
,
0x54
,
0x75
,
0x13
,
0x7f
,
0x6c
,
0xa7
,
0xf8
,
0xd6
,
0x1d
,
0xe6
,
0xba
,
0xf9
,
0xf8
,
0x14
,
0xd7
,
0x5f
,
0x16
,
0x29
,
0xfb
,
0x10
,
0x7a
,
0x0a
,
0xa5
,
0xdf
,
0xa3
,
0x4b
,
0xe3
,
0xd4
,
0x90
,
0x49
,
0x8f
,
0x3e
,
0xc2
,
0x1f
,
0xfe
,
0x1d
,
0x00
,
0x00
,
0xff
,
0xff
,
0xd0
,
0x3f
,
0xd2
,
0x26
,
0x9b
,
0x0f
,
0x00
,
0x00
,
// 1127 bytes of a gzipped FileDescriptorProto
0x1f
,
0x8b
,
0x08
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x02
,
0xff
,
0xdc
,
0x57
,
0xef
,
0x6e
,
0xdc
,
0x44
,
0x10
,
0xaf
,
0xed
,
0xfb
,
0x93
,
0x9b
,
0xcb
,
0xb5
,
0xe9
,
0x26
,
0x04
,
0x13
,
0xa2
,
0xe8
,
0xb4
,
0x42
,
0xe2
,
0x04
,
0x25
,
0x12
,
0xd7
,
0x0a
,
0x51
,
0x21
,
0x21
,
0x92
,
0x6b
,
0xab
,
0x9c
,
0x54
,
0xa4
,
0xca
,
0x14
,
0x84
,
0x10
,
0x20
,
0xf9
,
0xec
,
0x4d
,
0xb1
,
0xe4
,
0xd8
,
0x8e
,
0xbd
,
0x17
,
0x7a
,
0x7c
,
0xa7
,
0x5f
,
0x79
,
0x01
,
0x5e
,
0x80
,
0x17
,
0xe0
,
0x3d
,
0x78
,
0x23
,
0xb4
,
0xb3
,
0xeb
,
0x7f
,
0xeb
,
0x73
,
0x74
,
0x07
,
0x7c
,
0xe2
,
0x4b
,
0x94
,
0x9d
,
0xfd
,
0xcd
,
0x7a
,
0xe6
,
0x37
,
0xbf
,
0x9d
,
0xd9
,
0x83
,
0x7d
,
0x2f
,
0x0e
,
0x43
,
0x97
,
0xb3
,
0xd4
,
0x0d
,
0x83
,
0x5f
,
0xd8
,
0x69
,
0x92
,
0xc6
,
0x3c
,
0x26
,
0x5d
,
0xbe
,
0x4a
,
0x58
,
0x46
,
0xff
,
0xea
,
0xc0
,
0x68
,
0x56
,
0xdd
,
0x26
,
0x13
,
0xb8
,
0x57
,
0xc3
,
0xcf
,
0x7d
,
0xdb
,
0x18
,
0x1b
,
0x93
,
0x81
,
0xa3
,
0x9b
,
0x09
,
0x85
,
0x5d
,
0x1e
,
0x73
,
0x37
,
0x3c
,
0x77
,
0x43
,
0x37
,
0xf2
,
0x98
,
0x6d
,
0x8e
,
0x8d
,
0x89
,
0xe5
,
0xd4
,
0x6c
,
0x64
,
0x0c
,
0x43
,
0x9f
,
0x2d
,
0xf8
,
0x8c
,
0x05
,
0x61
,
0x10
,
0xbd
,
0xb2
,
0x2d
,
0x84
,
0x54
,
0x4d
,
0xe4
,
0x03
,
0xd8
,
0x0b
,
0x83
,
0xeb
,
0x65
,
0xe0
,
0xbb
,
0x3c
,
0x88
,
0x23
,
0x47
,
0xfc
,
0xb5
,
0x3b
,
0x63
,
0x63
,
0x62
,
0x3a
,
0x0d
,
0x3b
,
0x79
,
0x00
,
0xf7
,
0x33
,
0xee
,
0x2e
,
0x82
,
0x30
,
0xe0
,
0xab
,
0x67
,
0x8c
,
0x49
,
0x70
,
0x17
,
0xc1
,
0xcd
,
0x0d
,
0x72
,
0x02
,
0xe0
,
0xa5
,
0xcc
,
0xe5
,
0xec
,
0xcc
,
0xf7
,
0x53
,
0xbb
,
0x87
,
0x49
,
0x54
,
0x2c
,
0xc4
,
0x86
,
0xfe
,
0x42
,
0x85
,
0xde
,
0xc7
,
0xb8
,
0xf2
,
0x25
,
0x79
,
0x0c
,
0xa3
,
0x45
,
0x9c
,
0xa6
,
0xf1
,
0xcf
,
0x0e
,
0xf3
,
0xe2
,
0xd4
,
0xcf
,
0xec
,
0x9d
,
0xb1
,
0x35
,
0x19
,
0x4e
,
0xf7
,
0x4f
,
0x91
,
0xb4
,
0xd3
,
0xf3
,
0xca
,
0x9e
,
0x53
,
0x47
,
0x92
,
0xcf
,
0xe0
,
0xee
,
0x3c
,
0xba
,
0x71
,
0xc3
,
0xc0
,
0xcf
,
0x7d
,
0x07
,
0xed
,
0xbe
,
0x1a
,
0x94
,
0x1c
,
0x42
,
0x2f
,
0xe3
,
0x2e
,
0x5f
,
0x66
,
0x36
,
0x8c
,
0x8d
,
0x49
,
0xd7
,
0x51
,
0x2b
,
0xf2
,
0x09
,
0x1c
,
0x0a
,
0xe6
,
0x33
,
0xfe
,
0xbc
,
0x64
,
0xe4
,
0x45
,
0x1a
,
0x78
,
0xcc
,
0x1e
,
0x62
,
0xf2
,
0x2d
,
0xbb
,
0xe2
,
0xbc
,
0x84
,
0xa5
,
0x41
,
0xec
,
0xdb
,
0xbb
,
0x98
,
0xa0
,
0x5a
,
0x21
,
0xe7
,
0xe8
,
0xf1
,
0xf4
,
0x75
,
0x12
,
0xa4
,
0xec
,
0x65
,
0x70
,
0xc5
,
0xec
,
0x11
,
0x22
,
0x1a
,
0x76
,
0x72
,
0x00
,
0xdd
,
0x20
,
0xf2
,
0xd9
,
0x6b
,
0xfb
,
0x2e
,
0x02
,
0xe4
,
0x82
,
0x1c
,
0xc1
,
0x4e
,
0x92
,
0xb2
,
0x39
,
0x6e
,
0xdc
,
0xc3
,
0x8d
,
0x62
,
0x4d
,
0xff
,
0xb4
,
0x60
,
0xb7
,
0x9a
,
0xa6
,
0x10
,
0x81
,
0xeb
,
0x79
,
0xf1
,
0x32
,
0xe2
,
0x58
,
0x09
,
0x29
,
0xa7
,
0xaa
,
0x89
,
0x1c
,
0xc3
,
0x20
,
0xe3
,
0x6e
,
0xca
,
0x31
,
0x12
,
0xa9
,
0xa3
,
0xd2
,
0x50
,
0x97
,
0xe4
,
0x37
,
0x6e
,
0xb8
,
0x64
,
0x4a
,
0x48
,
0xba
,
0xb9
,
0x8e
,
0x94
,
0x0c
,
0x49
,
0x2d
,
0xe9
,
0x66
,
0xf1
,
0x45
,
0xa1
,
0x42
,
0x79
,
0x5a
,
0x57
,
0x7e
,
0xb1
,
0x30
,
0x68
,
0xa2
,
0x94
,
0x07
,
0xf5
,
0x1a
,
0xa2
,
0x2c
,
0x48
,
0x56
,
0x45
,
0xeb
,
0xd7
,
0x8a
,
0xf6
,
0x1e
,
0x8c
,
0x72
,
0xac
,
0x64
,
0x78
,
0x07
,
0xbf
,
0x52
,
0x37
,
0x0a
,
0x91
,
0xb2
,
0xb2
,
0x08
,
0x03
,
0x84
,
0x54
,
0x2c
,
0x22
,
0xce
,
0x24
,
0x65
,
0x5f
,
0x55
,
0x55
,
0x51
,
0x1a
,
0x44
,
0x19
,
0x52
,
0xe4
,
0x78
,
0xee
,
0xa3
,
0x14
,
0x06
,
0x4e
,
0xb1
,
0x2e
,
0x0b
,
0xb7
,
0xdb
,
0x56
,
0xb8
,
0x91
,
0x56
,
0xb8
,
0x37
,
0x06
,
0xec
,
0x9d
,
0x65
,
0x19
,
0xe3
,
0x98
,
0x98
,
0x2a
,
0xde
,
0x09
,
0x80
,
0x3c
,
0x12
,
0x03
,
0x34
,
0x64
,
0x80
,
0xa5
,
0x45
,
0x1c
,
0xb8
,
0xe0
,
0x2b
,
0x49
,
0x91
,
0x89
,
0x14
,
0x15
,
0x6b
,
0xb9
,
0xe7
,
0xc9
,
0x3d
,
0x2b
,
0xdf
,
0xf3
,
0x8a
,
0x3d
,
0xc6
,
0x7f
,
0xaa
,
0xd6
,
0xa8
,
0x58
,
0xd3
,
0xdf
,
0x2d
,
0xd8
,
0xaf
,
0x75
,
0xa5
,
0x33
,
0x4f
,
0xf0
,
0x4d
,
0x1e
,
0x41
,
0x4f
,
0xde
,
0x5f
,
0x8c
,
0x63
,
0x38
,
0x3d
,
0x52
,
0x97
,
0xaa
,
0x86
,
0x9d
,
0x21
,
0xe2
,
0xe2
,
0x8e
,
0xa3
,
0xb0
,
0xc2
,
0x4b
,
0xde
,
0x51
,
0x8c
,
0xaf
,
0xc5
,
0x4b
,
0x0a
,
0x56
,
0x78
,
0x49
,
0x2c
,
0xf9
,
0x18
,
0xba
,
0x29
,
0x4b
,
0xdc
,
0x15
,
0x06
,
0x3e
,
0x9c
,
0xbe
,
0xb3
,
0xce
,
0xc9
,
0x11
,
0x80
,
0x8b
,
0x3b
,
0x8e
,
0x44
,
0x8a
,
0x0f
,
0xb9
,
0x49
,
0xc2
,
0x22
,
0x1f
,
0x13
,
0x6a
,
0xf9
,
0xd0
,
0x19
,
0x22
,
0xc4
,
0x87
,
0x24
,
0x96
,
0x9c
,
0x42
,
0xe7
,
0x92
,
0x31
,
0x1f
,
0x45
,
0x38
,
0x9c
,
0xda
,
0xeb
,
0x7c
,
0x9e
,
0x31
,
0x26
,
0x3c
,
0x10
,
0x27
,
0x02
,
0xf3
,
0xc2
,
0x38
,
0x93
,
0x82
,
0x6c
,
0x09
,
0x6c
,
0x26
,
0x00
,
0x22
,
0x30
,
0x44
,
0x8a
,
0xc0
,
0xae
,
0xdc
,
0xc8
,
0x7d
,
0x25
,
0x1b
,
0x5d
,
0x4b
,
0x60
,
0x5f
,
0x22
,
0x42
,
0x04
,
0x26
,
0xb1
,
0xe4
,
0x2e
,
0x98
,
0x7c
,
0xa5
,
0x34
,
0x67
,
0xf2
,
0xd5
,
0x79
,
0x1f
,
0xba
,
0x37
,
0xe2
,
0x76
,
0xd0
,
0x3f
,
0x0c
,
0xad
,
0x3c
,
0xd2
,
0x55
,
0x6f
,
0xf6
,
0xc6
,
0x66
,
0xcd
,
0xde
,
0xdc
,
0xa6
,
0xd9
,
0x5b
,
0x6d
,
0xcd
,
0xbe
,
0x6c
,
0x75
,
0x9d
,
0x6a
,
0xab
,
0xa3
,
0x0f
,
0xe1
,
0x7e
,
0x9d
,
0x7e
,
0xd1
,
0x6e
,
0x4e
,
0x00
,
0xb2
,
0x65
,
0xc2
,
0x52
,
0xb1
,
0xc8
,
0x6c
,
0x63
,
0x6c
,
0x89
,
0xc9
,
0x50
,
0x5a
,
0xe8
,
0x63
,
0x2d
,
0x3f
,
0x29
,
0xa9
,
0xc6
,
0xc0
,
0x33
,
0x9a
,
0x03
,
0x8f
,
0x7e
,
0xad
,
0xb9
,
0x4a
,
0x5d
,
0x6d
,
0x31
,
0x55
,
0x0f
,
0x14
,
0xcb
,
0xaa
,
0x0d
,
0x2a
,
0xca
,
0xbf
,
0x03
,
0xd2
,
0x54
,
0xde
,
0x16
,
0xa7
,
0x56
,
0x1b
,
0x85
,
0x59
,
0x6f
,
0x14
,
0xf4
,
0x57
,
0xbd
,
0x9c
,
0x52
,
0xa2
,
0xff
,
0xcd
,
0xe9
,
0x9b
,
0x37
,
0x6f
,
0xfa
,
0x83
,
0x56
,
0x2a
,
0xa1
,
0x7a
,
0x71
,
0xb4
,
0xc0
,
0xbd
,
0x5c
,
0x25
,
0x92
,
0xef
,
0xae
,
0x53
,
0xac
,
0x05
,
0x55
,
0x89
,
0xea
,
0x3b
,
0xd6
,
0xc4
,
0x74
,
0xe4
,
0x42
,
0x28
,
0xe1
,
0x26
,
0x0e
,
0x97
,
0x57
,
0xe2
,
0x3b
,
0x96
,
0x50
,
0x82
,
0x5c
,
0xd1
,
0xcf
,
0x35
,
0x0a
,
0xf1
,
0x8e
,
0x6c
,
0x9e
,
0x24
,
0x7d
,
0x63
,
0xc2
,
0x81
,
0xc3
,
0x3c
,
0x16
,
0x24
,
0xfc
,
0x9f
,
0xbe
,
0x98
,
0xea
,
0x2f
,
0x12
,
0xb3
,
0xf1
,
0x22
,
0xd1
,
0x06
,
0xa5
,
0xd5
,
0x1c
,
0x94
,
0x55
,
0xa6
,
0x3b
,
0x1a
,
0xd3
,
0xe5
,
0x20
,
0xea
,
0xd6
,
0x06
,
0xd1
,
0x31
,
0x0c
,
0x5e
,
0x14
,
0x23
,
0xa4
,
0x27
,
0x47
,
0x48
,
0x61
,
0x28
,
0xc7
,
0x44
,
0xbf
,
0x6d
,
0x4c
,
0xec
,
0x68
,
0x63
,
0xa2
,
0xa1
,
0x17
,
0x35
,
0x29
,
0x36
,
0xe7
,
0x81
,
0x40
,
0xc7
,
0x2d
,
0x19
,
0xc0
,
0xff
,
0x6b
,
0x99
,
0x59
,
0x6d
,
0xa3
,
0xac
,
0x53
,
0x89
,
0x91
,
0x3e
,
0x87
,
0x83
,
0x35
,
0x61
,
0x64
,
0xe4
,
0x11
,
0xf4
,
0x53
,
0xf5
,
0xf6
,
0x32
,
0xf0
,
0xed
,
0x75
,
0xb4
,
0xbe
,
0x77
,
0xe3
,
0x13
,
0x2c
,
0x87
,
0xd2
,
0x2f
,
0x44
,
0x75
,
0xaf
,
0x6b
,
0x90
,
0x79
,
0x74
,
0x19
,
0x6f
,
0x21
,
0x90
,
0xdf
,
0x4c
,
0x78
,
0xd7
,
0x61
,
0x49
,
0x5d
,
0x64
,
0xcb
,
0x34
,
0x65
,
0x11
,
0xc7
,
0x93
,
0xca
,
0xfa
,
0x18
,
0xb5
,
0xfa
,
0xfc
,
0x6f
,
0xdf
,
0xd1
,
0x74
,
0x06
,
0x6f
,
0xad
,
0xe3
,
0x34
,
0x13
,
0xc1
,
0x6a
,
0xec
,
0xe5
,
0x6d
,
0xb8
,
0x61
,
0xa7
,
0xdf
,
0xc2
,
0xf1
,
0x2d
,
0xac
,
0x66
,
0xe4
,
0x53
,
0x21
,
0x8e
,
0xcb
,
0x38
,
0x2f
,
0x36
,
0x55
,
0xc5
,
0xbe
,
0xc5
,
0xc7
,
0x91
,
0x0e
,
0x74
,
0x0a
,
0xb6
,
0x1e
,
0xde
,
0xf9
,
0x4a
,
0x5d
,
0x8b
,
0x96
,
0x62
,
0xd1
,
0x07
,
0x70
,
0xd8
,
0xf4
,
0x41
,
0x1a
,
0x72
,
0x51
,
0x1b
,
0xa5
,
0xa8
,
0xe9
,
0xfb
,
0xb0
,
0xaf
,
0xc7
,
0x31
,
0x7f
,
0x92
,
0x91
,
0x3d
,
0xb0
,
0xe6
,
0x4f
,
0xf2
,
0x8c
,
0xc5
,
0xbf
,
0xf4
,
0x7b
,
0x91
,
0xe4
,
0xf5
,
0x1a
,
0x81
,
0xaa
,
0xc3
,
0xff
,
0xd5
,
0xdd
,
0xa2
,
0x0b
,
0x38
,
0x69
,
0x3b
,
0x5d
,
0xa5
,
0xbb
,
0xf9
,
0xf9
,
0x25
,
0x31
,
0x66
,
0x8d
,
0x98
,
0x0b
,
0x78
,
0x5b
,
0x4f
,
0x35
,
0xbf
,
0x90
,
0x1f
,
0xe9
,
0x17
,
0x72
,
0xed
,
0x8f
,
0xa1
,
0xe2
,
0x26
,
0xfe
,
0xd8
,
0xa4
,
0x78
,
0xeb
,
0x0e
,
0x73
,
0xdb
,
0xbc
,
0x7b
,
0x2a
,
0xce
,
0x5f
,
0x17
,
0x29
,
0xf9
,
0x10
,
0x7a
,
0x12
,
0xa5
,
0xde
,
0x97
,
0x6b
,
0xe3
,
0x54
,
0x90
,
0x45
,
0x0f
,
0x7f
,
0x48
,
0x3f
,
0xfc
,
0x3b
,
0x00
,
0x00
,
0xff
,
0xff
,
0x61
,
0x4f
,
0x4b
,
0xb2
,
0x5f
,
0x0f
,
0x00
,
0x00
,
}
plugin/dapp/collateralize/types/types.go
View file @
491ce6b8
...
...
@@ -26,7 +26,7 @@ const (
// Collateralize name
const
(
CollateralizeX
=
"collateralize"
CCNYTokenName
=
"
ccny
"
CCNYTokenName
=
"
CCNY
"
CollateralizePreLiquidationRatio
=
1.1
//TODO 预清算比例,抵押物价值跌到借出ccny价值110%的时候开始清算
)
...
...
@@ -36,11 +36,12 @@ const (
CollateralizeStatusClose
)
const
(
CollateralizeAssetTypeBty
=
1
+
iota
CollateralizeAssetTypeBtc
CollateralizeAssetTypeEth
)
//暂时只支持bty
//const (
// CollateralizeAssetTypeBty = 1 + iota
// CollateralizeAssetTypeBtc
// CollateralizeAssetTypeEth
//)
const
(
CollateralizeUserStatusCreate
=
1
+
iota
...
...
plugin/dapp/issuance/executor/issuancedb.go
View file @
491ce6b8
...
...
@@ -32,12 +32,6 @@ const (
ExpireWarningTime
=
3600
*
24
*
10
// 提前10天超时预警
)
const
(
priceFeedKey
=
"issuance-price-feed"
guarantorKey
=
"issuance-guarantor"
manageKey
=
"issuance-manage"
)
func
getManageKey
(
key
string
,
db
dbm
.
KV
)
([]
byte
,
error
)
{
manageKey
:=
types
.
ManageKey
(
key
)
value
,
err
:=
db
.
Get
([]
byte
(
manageKey
))
...
...
@@ -48,7 +42,7 @@ func getManageKey(key string, db dbm.KV) ([]byte, error) {
}
func
getGuarantorAddr
(
db
dbm
.
KV
)
(
string
,
error
)
{
value
,
err
:=
getManageKey
(
g
uarantorKey
,
db
)
value
,
err
:=
getManageKey
(
pty
.
G
uarantorKey
,
db
)
if
err
!=
nil
{
clog
.
Error
(
"IssuancePriceFeed"
,
"getGuarantorAddr"
,
err
)
return
""
,
err
...
...
@@ -323,7 +317,7 @@ func (action *Action) IssuanceManage(manage *pty.IssuanceManage) (*types.Receipt
var
receipt
*
types
.
Receipt
// 是否配置管理用户
if
!
isRightAddr
(
m
anageKey
,
action
.
fromaddr
,
action
.
db
)
{
if
!
isRightAddr
(
pty
.
M
anageKey
,
action
.
fromaddr
,
action
.
db
)
{
clog
.
Error
(
"IssuanceManage"
,
"addr"
,
action
.
fromaddr
,
"error"
,
"Address has no permission to config"
)
return
nil
,
pty
.
ErrPermissionDeny
}
...
...
@@ -384,7 +378,7 @@ func (action *Action) IssuanceCreate(create *pty.IssuanceCreate) (*types.Receipt
var
receipt
*
types
.
Receipt
// 是否配置管理用户
if
!
isRightAddr
(
m
anageKey
,
action
.
fromaddr
,
action
.
db
)
{
if
!
isRightAddr
(
pty
.
M
anageKey
,
action
.
fromaddr
,
action
.
db
)
{
clog
.
Error
(
"IssuanceCreate"
,
"addr"
,
action
.
fromaddr
,
"error"
,
"Address has no permission to create"
)
return
nil
,
pty
.
ErrPermissionDeny
}
...
...
@@ -859,7 +853,7 @@ func (action *Action) IssuanceFeed(feed *pty.IssuanceFeed) (*types.Receipt, erro
}
// 是否后台管理用户
if
!
isRightAddr
(
priceFeedKey
,
action
.
fromaddr
,
action
.
db
)
{
if
!
isRightAddr
(
p
ty
.
P
riceFeedKey
,
action
.
fromaddr
,
action
.
db
)
{
clog
.
Error
(
"IssuancePriceFeed"
,
"addr"
,
action
.
fromaddr
,
"error"
,
"Address has no permission to feed price"
)
return
nil
,
pty
.
ErrPermissionDeny
}
...
...
@@ -933,7 +927,7 @@ func (action *Action) IssuanceClose(close *pty.IssuanceClose) (*types.Receipt, e
return
nil
,
err
}
if
!
isRightAddr
(
m
anageKey
,
action
.
fromaddr
,
action
.
db
)
{
if
!
isRightAddr
(
pty
.
M
anageKey
,
action
.
fromaddr
,
action
.
db
)
{
clog
.
Error
(
"IssuanceClose"
,
"addr"
,
action
.
fromaddr
,
"error"
,
"Address has no permission to close"
)
return
nil
,
pty
.
ErrPermissionDeny
}
...
...
plugin/dapp/issuance/types/types.go
View file @
491ce6b8
...
...
@@ -41,4 +41,10 @@ const (
IssuanceUserStatusExpire
IssuanceUserStatusExpireLiquidate
IssuanceUserStatusClose
)
const
(
PriceFeedKey
=
"issuance-price-feed"
GuarantorKey
=
"issuance-guarantor"
ManageKey
=
"issuance-manage"
)
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment