Commit 2f57d651 authored by pengjun's avatar pengjun

#627 update balance value to float64

parent 2e4b635d
...@@ -44,7 +44,7 @@ func CollateralizeCreateRawTxCmd() *cobra.Command { ...@@ -44,7 +44,7 @@ func CollateralizeCreateRawTxCmd() *cobra.Command {
} }
func addCollateralizeCreateFlags(cmd *cobra.Command) { func addCollateralizeCreateFlags(cmd *cobra.Command) {
cmd.Flags().Uint64P("balance", "b", 0, "balance") cmd.Flags().Float64P("balance", "b", 0, "balance")
cmd.MarkFlagRequired("balance") cmd.MarkFlagRequired("balance")
} }
...@@ -56,12 +56,12 @@ func CollateralizeCreate(cmd *cobra.Command, args []string) { ...@@ -56,12 +56,12 @@ func CollateralizeCreate(cmd *cobra.Command, args []string) {
} }
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr") rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
balance, _ := cmd.Flags().GetUint64("balance") balance, _ := cmd.Flags().GetFloat64("balance")
params := &rpctypes.CreateTxIn{ params := &rpctypes.CreateTxIn{
Execer: cfg.ExecName(pkt.CollateralizeX), Execer: cfg.ExecName(pkt.CollateralizeX),
ActionName: "CollateralizeCreate", ActionName: "CollateralizeCreate",
Payload: []byte(fmt.Sprintf("{\"totalBalance\":%d}", balance)), Payload: []byte(fmt.Sprintf("{\"totalBalance\":%f}", balance)),
} }
var res string var res string
...@@ -83,7 +83,7 @@ func CollateralizeBorrowRawTxCmd() *cobra.Command { ...@@ -83,7 +83,7 @@ func CollateralizeBorrowRawTxCmd() *cobra.Command {
func addCollateralizeBorrowFlags(cmd *cobra.Command) { func addCollateralizeBorrowFlags(cmd *cobra.Command) {
cmd.Flags().StringP("collateralizeID", "g", "", "collateralize ID") cmd.Flags().StringP("collateralizeID", "g", "", "collateralize ID")
cmd.MarkFlagRequired("collateralizeID") cmd.MarkFlagRequired("collateralizeID")
cmd.Flags().Uint64P("value", "v", 0, "value") cmd.Flags().Float64P("value", "v", 0, "value")
cmd.MarkFlagRequired("value") cmd.MarkFlagRequired("value")
} }
...@@ -96,12 +96,12 @@ func CollateralizeBorrow(cmd *cobra.Command, args []string) { ...@@ -96,12 +96,12 @@ func CollateralizeBorrow(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr") rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
collateralizeID, _ := cmd.Flags().GetString("collateralizeID") collateralizeID, _ := cmd.Flags().GetString("collateralizeID")
value, _ := cmd.Flags().GetUint64("value") value, _ := cmd.Flags().GetFloat64("value")
params := &rpctypes.CreateTxIn{ params := &rpctypes.CreateTxIn{
Execer: cfg.ExecName(pkt.CollateralizeX), Execer: cfg.ExecName(pkt.CollateralizeX),
ActionName: "CollateralizeBorrow", ActionName: "CollateralizeBorrow",
Payload: []byte(fmt.Sprintf("{\"collateralizeID\":\"%s\",\"value\":%d}", collateralizeID, value)), Payload: []byte(fmt.Sprintf("{\"collateralizeID\":\"%s\",\"value\":%f}", collateralizeID, value)),
} }
var res string var res string
...@@ -125,7 +125,7 @@ func addCollateralizeAppendFlags(cmd *cobra.Command) { ...@@ -125,7 +125,7 @@ func addCollateralizeAppendFlags(cmd *cobra.Command) {
cmd.MarkFlagRequired("collateralizeID") cmd.MarkFlagRequired("collateralizeID")
cmd.Flags().StringP("recordID", "r", "", "recordID") cmd.Flags().StringP("recordID", "r", "", "recordID")
cmd.MarkFlagRequired("recordID") cmd.MarkFlagRequired("recordID")
cmd.Flags().Uint64P("value", "v", 0, "value") cmd.Flags().Float64P("value", "v", 0, "value")
cmd.MarkFlagRequired("value") cmd.MarkFlagRequired("value")
} }
...@@ -139,12 +139,12 @@ func CollateralizeAppend(cmd *cobra.Command, args []string) { ...@@ -139,12 +139,12 @@ func CollateralizeAppend(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr") rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
collateralizeID, _ := cmd.Flags().GetString("collateralizeID") collateralizeID, _ := cmd.Flags().GetString("collateralizeID")
recordID, _ := cmd.Flags().GetString("recordID") recordID, _ := cmd.Flags().GetString("recordID")
value, _ := cmd.Flags().GetUint64("value") value, _ := cmd.Flags().GetFloat64("value")
params := &rpctypes.CreateTxIn{ params := &rpctypes.CreateTxIn{
Execer: cfg.ExecName(pkt.CollateralizeX), Execer: cfg.ExecName(pkt.CollateralizeX),
ActionName: "CollateralizeAppend", ActionName: "CollateralizeAppend",
Payload: []byte(fmt.Sprintf("{\"collateralizeID\":\"%s\", \"recordID\":\"%s\", \"value\":%d}", collateralizeID, recordID, value)), Payload: []byte(fmt.Sprintf("{\"collateralizeID\":\"%s\", \"recordID\":\"%s\", \"value\":%f}", collateralizeID, recordID, value)),
} }
var res string var res string
...@@ -204,7 +204,7 @@ func CollateralizePriceFeedRawTxCmd() *cobra.Command { ...@@ -204,7 +204,7 @@ func CollateralizePriceFeedRawTxCmd() *cobra.Command {
} }
func addCollateralizePriceFeedFlags(cmd *cobra.Command) { func addCollateralizePriceFeedFlags(cmd *cobra.Command) {
cmd.Flags().Float32P("price", "p", 0, "price") cmd.Flags().Float64P("price", "p", 0, "price")
cmd.MarkFlagRequired("price") cmd.MarkFlagRequired("price")
cmd.Flags().Uint64P("volume", "v", 0, "volume") cmd.Flags().Uint64P("volume", "v", 0, "volume")
cmd.MarkFlagRequired("volume") cmd.MarkFlagRequired("volume")
...@@ -246,7 +246,7 @@ func CollateralizeRetrieveRawTxCmd() *cobra.Command { ...@@ -246,7 +246,7 @@ func CollateralizeRetrieveRawTxCmd() *cobra.Command {
func addCollateralizeRetrieveFlags(cmd *cobra.Command) { func addCollateralizeRetrieveFlags(cmd *cobra.Command) {
cmd.Flags().StringP("collateralizeID", "g", "", "collateralize ID") cmd.Flags().StringP("collateralizeID", "g", "", "collateralize ID")
cmd.MarkFlagRequired("collateralizeID") cmd.MarkFlagRequired("collateralizeID")
cmd.Flags().StringP("balance", "b", "", "retrieve balance") cmd.Flags().Float64P("balance", "b", 0, "retrieve balance")
cmd.MarkFlagRequired("balance") cmd.MarkFlagRequired("balance")
} }
...@@ -259,12 +259,12 @@ func CollateralizeRetrieve(cmd *cobra.Command, args []string) { ...@@ -259,12 +259,12 @@ func CollateralizeRetrieve(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr") rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
collateralizeID, _ := cmd.Flags().GetString("collateralizeID") collateralizeID, _ := cmd.Flags().GetString("collateralizeID")
balance, _ := cmd.Flags().GetInt64("balance") balance, _ := cmd.Flags().GetFloat64("balance")
params := &rpctypes.CreateTxIn{ params := &rpctypes.CreateTxIn{
Execer: cfg.ExecName(pkt.CollateralizeX), Execer: cfg.ExecName(pkt.CollateralizeX),
ActionName: "CollateralizeRetrieve", ActionName: "CollateralizeRetrieve",
Payload: []byte(fmt.Sprintf("{\"collateralizeID\":\"%s\", \"balance\": %d}", collateralizeID, balance)), Payload: []byte(fmt.Sprintf("{\"collateralizeID\":\"%s\", \"balance\": %f}", collateralizeID, balance)),
} }
var res string var res string
...@@ -284,11 +284,11 @@ func CollateralizeManageRawTxCmd() *cobra.Command { ...@@ -284,11 +284,11 @@ func CollateralizeManageRawTxCmd() *cobra.Command {
} }
func addCollateralizeManageFlags(cmd *cobra.Command) { func addCollateralizeManageFlags(cmd *cobra.Command) {
cmd.Flags().Uint64P("debtCeiling", "d", 0, "debtCeiling") cmd.Flags().Float64P("debtCeiling", "d", 0, "debtCeiling")
cmd.Flags().Float32P("liquidationRatio", "l", 0, "liquidationRatio") cmd.Flags().Float64P("liquidationRatio", "l", 0, "liquidationRatio")
cmd.Flags().Float32P("stabilityFeeRatio", "s", 0, "stabilityFeeRatio") cmd.Flags().Float64P("stabilityFeeRatio", "s", 0, "stabilityFeeRatio")
cmd.Flags().Uint64P("period", "p", 0, "period") cmd.Flags().Uint64P("period", "p", 0, "period")
cmd.Flags().Uint64P("totalBalance", "t", 0, "totalBalance") cmd.Flags().Float64P("totalBalance", "t", 0, "totalBalance")
} }
func CollateralizeManage(cmd *cobra.Command, args []string) { func CollateralizeManage(cmd *cobra.Command, args []string) {
...@@ -299,16 +299,16 @@ func CollateralizeManage(cmd *cobra.Command, args []string) { ...@@ -299,16 +299,16 @@ func CollateralizeManage(cmd *cobra.Command, args []string) {
} }
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr") rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
debtCeiling, _ := cmd.Flags().GetUint64("debtCeiling") debtCeiling, _ := cmd.Flags().GetFloat32("debtCeiling")
liquidationRatio, _ := cmd.Flags().GetFloat32("liquidationRatio") liquidationRatio, _ := cmd.Flags().GetFloat32("liquidationRatio")
stabilityFeeRatio, _ := cmd.Flags().GetFloat32("stabilityFeeRatio") stabilityFeeRatio, _ := cmd.Flags().GetFloat32("stabilityFeeRatio")
period, _ := cmd.Flags().GetUint64("period") period, _ := cmd.Flags().GetUint64("period")
totalBalance, _ := cmd.Flags().GetUint64("totalBalance") totalBalance, _ := cmd.Flags().GetFloat32("totalBalance")
params := &rpctypes.CreateTxIn{ params := &rpctypes.CreateTxIn{
Execer: cfg.ExecName(pkt.CollateralizeX), Execer: cfg.ExecName(pkt.CollateralizeX),
ActionName: "CollateralizeManage", ActionName: "CollateralizeManage",
Payload: []byte(fmt.Sprintf("{\"debtCeiling\":%d, \"liquidationRatio\":%f, \"stabilityFeeRatio\":%f, \"period\":%d, \"totalBalance\":%d}", Payload: []byte(fmt.Sprintf("{\"debtCeiling\":%f, \"liquidationRatio\":%f, \"stabilityFeeRatio\":%f, \"period\":%d, \"totalBalance\":%f}",
debtCeiling, liquidationRatio, stabilityFeeRatio, period, totalBalance)), debtCeiling, liquidationRatio, stabilityFeeRatio, period, totalBalance)),
} }
......
...@@ -93,6 +93,11 @@ func initEnv() *execEnv { ...@@ -93,6 +93,11 @@ func initEnv() *execEnv {
Frozen: 0, Frozen: 0,
Addr: string(Nodes[1]), Addr: string(Nodes[1]),
} }
accountBToken := types.Account{
Balance: types.Coin/10,
Frozen: 0,
Addr: string(Nodes[1]),
}
accountC := types.Account{ accountC := types.Account{
Balance: total, Balance: total,
Frozen: 0, Frozen: 0,
...@@ -117,6 +122,8 @@ func initEnv() *execEnv { ...@@ -117,6 +122,8 @@ func initEnv() *execEnv {
accB.SetDB(stateDB) accB.SetDB(stateDB)
accB.SaveExecAccount(execAddr, &accountB) accB.SaveExecAccount(execAddr, &accountB)
manageKeySet("issuance-price-feed", accountB.Addr, stateDB) manageKeySet("issuance-price-feed", accountB.Addr, stateDB)
tokenAccB,_ := account.NewAccountDB(cfg, tokenE.GetName(), pkt.CCNYTokenName, stateDB)
tokenAccB.SaveExecAccount(execAddr, &accountBToken)
accC := account.NewCoinsAccount(cfg) accC := account.NewCoinsAccount(cfg)
accC.SetDB(stateDB) accC.SetDB(stateDB)
...@@ -584,12 +591,3 @@ func signTx(tx *types.Transaction, hexPrivKey string) (*types.Transaction, error ...@@ -584,12 +591,3 @@ func signTx(tx *types.Transaction, hexPrivKey string) (*types.Transaction, error
tx.Sign(int32(signType), privKey) tx.Sign(int32(signType), privKey)
return tx, nil return tx, nil
} }
//func TestSlice(t *testing.T) {
// var a []int
// a = append(a, 1)
// fmt.Println(a)
//
// a = append(a[:0], a[1:]...)
// fmt.Println(a)
//}
\ No newline at end of file
...@@ -144,7 +144,7 @@ func (c *Collateralize) Query_CollateralizeConfig(req *pty.ReqCollateralizeRecor ...@@ -144,7 +144,7 @@ func (c *Collateralize) Query_CollateralizeConfig(req *pty.ReqCollateralizeRecor
clog.Debug("Query_CollateralizeByStatus", "get collateralize record error", err) clog.Debug("Query_CollateralizeByStatus", "get collateralize record error", err)
} }
collBalance := config.CollTotalBalance balance := config.TotalBalance
for _, id := range collIDRecords { for _, id := range collIDRecords {
coll, err := queryCollateralizeByID(c.GetStateDB(), id) coll, err := queryCollateralizeByID(c.GetStateDB(), id)
if err != nil { if err != nil {
...@@ -152,15 +152,15 @@ func (c *Collateralize) Query_CollateralizeConfig(req *pty.ReqCollateralizeRecor ...@@ -152,15 +152,15 @@ func (c *Collateralize) Query_CollateralizeConfig(req *pty.ReqCollateralizeRecor
return nil, err return nil, err
} }
collBalance -= coll.TotalBalance balance -= coll.TotalBalance
} }
ret := &pty.RepCollateralizeConfig{ ret := &pty.RepCollateralizeConfig{
CollTotalBalance:config.CollTotalBalance, TotalBalance:config.TotalBalance,
DebtCeiling: config.DebtCeiling, DebtCeiling: config.DebtCeiling,
LiquidationRatio: config.LiquidationRatio, LiquidationRatio: config.LiquidationRatio,
StabilityFeeRatio: config.StabilityFeeRatio, StabilityFeeRatio: config.StabilityFeeRatio,
Period: config.Period, Period: config.Period,
CollBalance: collBalance, Balance: balance,
CurrentTime: config.CurrentTime, CurrentTime: config.CurrentTime,
} }
......
...@@ -7,14 +7,14 @@ message Collateralize { ...@@ -7,14 +7,14 @@ message Collateralize {
string collateralizeId = 1; //放贷ID,一期放贷对应一个ID string collateralizeId = 1; //放贷ID,一期放贷对应一个ID
int64 totalBalance = 2; //当期放贷的总金额(ccny) int64 totalBalance = 2; //当期放贷的总金额(ccny)
int64 debtCeiling = 3; //单用户可借出的限额(ccny) int64 debtCeiling = 3; //单用户可借出的限额(ccny)
float liquidationRatio = 4; //清算比例 double liquidationRatio = 4; //清算比例
float stabilityFeeRatio = 5; //稳定费率 double stabilityFeeRatio = 5; //稳定费率
string createAddr = 6; //创建人地址 string createAddr = 6; //创建人地址
int64 balance = 7; //放贷剩余金额(ccny) int64 balance = 7; //放贷剩余金额(ccny)
repeated BorrowRecord borrowRecords = 8; //借贷记录 repeated BorrowRecord borrowRecords = 8; //借贷记录
repeated BorrowRecord InvalidRecords = 9; //失效的借贷记录 repeated BorrowRecord InvalidRecords = 9; //失效的借贷记录
int32 status = 10;//当期借贷的状态,是否关闭 int32 status = 10;//当期借贷的状态,是否关闭
float latestLiquidationPrice = 11;//最高清算价格 double latestLiquidationPrice = 11;//最高清算价格
int64 period = 12;//借贷最大期限 int64 period = 12;//借贷最大期限
int64 latestExpireTime = 13;//最近超期时间 int64 latestExpireTime = 13;//最近超期时间
int64 index = 14;//当前索引 int64 index = 14;//当前索引
...@@ -27,9 +27,9 @@ message BorrowRecord { ...@@ -27,9 +27,9 @@ message BorrowRecord {
string accountAddr = 1; //借贷人地址 string accountAddr = 1; //借贷人地址
int64 startTime = 2; //借贷时间 int64 startTime = 2; //借贷时间
int64 collateralValue = 3; //抵押物价值(bty) int64 collateralValue = 3; //抵押物价值(bty)
float collateralPrice = 4; //抵押物价格 double collateralPrice = 4; //抵押物价格
int64 debtValue = 5; //债务价值(ccny) int64 debtValue = 5; //债务价值(ccny)
float liquidationPrice = 6; //抵押物清算价格 double liquidationPrice = 6; //抵押物清算价格
int32 status = 7; //抵押状态,是否被清算 int32 status = 7; //抵押状态,是否被清算
int64 liquidateTime = 8; //清算时间 int64 liquidateTime = 8; //清算时间
int64 expireTime = 9; //超时清算时间 int64 expireTime = 9; //超时清算时间
...@@ -43,9 +43,9 @@ message BorrowRecord { ...@@ -43,9 +43,9 @@ message BorrowRecord {
// 资产价格记录 // 资产价格记录
message AssetPriceRecord { message AssetPriceRecord {
int64 recordTime = 1; //价格记录时间 int64 recordTime = 1; //价格记录时间
float btyPrice = 2; //bty价格 double btyPrice = 2; //bty价格
float btcPrice = 3; //btc价格 double btcPrice = 3; //btc价格
float ethPrice = 4; //eth价格 double ethPrice = 4; //eth价格
} }
// action // action
...@@ -63,12 +63,12 @@ message CollateralizeAction { ...@@ -63,12 +63,12 @@ message CollateralizeAction {
} }
message CollateralizeManage { message CollateralizeManage {
int64 debtCeiling = 1; //单用户可借出的限额(ccny) int64 debtCeiling = 1; //单用户可借出的限额(ccny)
float liquidationRatio = 2; //清算比例 double liquidationRatio = 2; //清算比例
float stabilityFeeRatio = 3; //稳定费 double stabilityFeeRatio = 3; //稳定费
int64 period = 4; //合约期限 int64 period = 4; //合约期限
int64 collTotalBalance = 5; //放贷总量 int64 totalBalance = 5; //放贷总量
int64 currentTime = 6; //设置时间 int64 currentTime = 6; //设置时间
} }
message CollateralizeAddr { message CollateralizeAddr {
...@@ -81,8 +81,8 @@ message CollateralizeCreate { ...@@ -81,8 +81,8 @@ message CollateralizeCreate {
// 质押借出 // 质押借出
message CollateralizeBorrow { message CollateralizeBorrow {
string collateralizeId = 1; //借贷期数ID string collateralizeId = 1; //借贷期数ID
int64 value = 2; //借贷价值(ccny) int64 value = 2; //借贷价值(ccny)
} }
// 质押清算 // 质押清算
...@@ -93,22 +93,22 @@ message CollateralizeRepay { ...@@ -93,22 +93,22 @@ message CollateralizeRepay {
// 追加抵押物 // 追加抵押物
message CollateralizeAppend { message CollateralizeAppend {
string collateralizeId = 1; //借贷期数ID string collateralizeId = 1; //借贷期数ID
string recordId = 2; //借贷ID string recordId = 2; //借贷ID
int64 collateralValue = 3; //追加价值(bty) int64 collateralValue = 3; //追加价值(bty)
} }
// 喂价 // 喂价
message CollateralizeFeed { message CollateralizeFeed {
int32 collType = 1; //抵押物价格类型(1,bty,2,btc,3,eth...) int32 collType = 1; //抵押物价格类型(1,bty,2,btc,3,eth...)
repeated float price = 2; //喂价 repeated double price = 2; //喂价
repeated int64 volume = 3; //成交量 repeated int64 volume = 3; //成交量
} }
// 收回 // 收回
message CollateralizeRetrieve { message CollateralizeRetrieve {
string collateralizeId = 1; //借贷期数ID string collateralizeId = 1; //借贷期数ID
int64 balance = 2; //收回金额 int64 balance = 2; //收回金额
} }
// exec_local 放贷信息 // exec_local 放贷信息
...@@ -147,8 +147,8 @@ message RepCollateralizeCurrentInfo { ...@@ -147,8 +147,8 @@ message RepCollateralizeCurrentInfo {
int32 status = 1;//当期借贷的状态,是否关闭 int32 status = 1;//当期借贷的状态,是否关闭
int64 totalBalance = 2; //当期可借贷的总金额(ccny) int64 totalBalance = 2; //当期可借贷的总金额(ccny)
int64 debtCeiling = 3; //单用户可借出的限额(ccny) int64 debtCeiling = 3; //单用户可借出的限额(ccny)
float liquidationRatio = 4; //清算比例 double liquidationRatio = 4; //清算比例
float stabilityFeeRatio = 5; //稳定费 double stabilityFeeRatio = 5; //稳定费
string createAddr = 6; //创建人地址 string createAddr = 6; //创建人地址
int64 balance = 7; //剩余可借贷金额(ccny) int64 balance = 7; //剩余可借贷金额(ccny)
int64 period = 8; //合约期限 int64 period = 8; //合约期限
...@@ -218,16 +218,16 @@ message RepCollateralizeRecord { ...@@ -218,16 +218,16 @@ message RepCollateralizeRecord {
// 返回放贷配置 // 返回放贷配置
message RepCollateralizeConfig { message RepCollateralizeConfig {
int64 debtCeiling = 1; //单用户可借出的限额(ccny) int64 debtCeiling = 1; //单用户可借出的限额(ccny)
float liquidationRatio = 2; //清算比例 double liquidationRatio = 2; //清算比例
float stabilityFeeRatio = 3; //稳定费 double stabilityFeeRatio = 3; //稳定费
int64 period = 4; //合约期限 int64 period = 4; //合约期限
int64 collTotalBalance = 5; //放贷总量 int64 totalBalance = 5; //放贷总量
int64 collBalance = 6; //剩余放贷额度 int64 balance = 6; //剩余放贷额度
int64 currentTime = 7; //设置时间 int64 currentTime = 7; //设置时间
} }
// 返回最新抵押物价格 // 返回最新抵押物价格
message RepCollateralizePrice { message RepCollateralizePrice {
float price = 1; //当前抵押物最新价格 double price = 1; //当前抵押物最新价格
} }
\ No newline at end of file
...@@ -6,6 +6,7 @@ package types ...@@ -6,6 +6,7 @@ package types
import ( import (
"encoding/json" "encoding/json"
"math"
"reflect" "reflect"
"github.com/33cn/chain33/common/address" "github.com/33cn/chain33/common/address"
...@@ -111,7 +112,7 @@ func (collateralize CollateralizeType) CreateTx(action string, message json.RawM ...@@ -111,7 +112,7 @@ func (collateralize CollateralizeType) CreateTx(action string, message json.RawM
return nil, types.ErrInvalidParam return nil, types.ErrInvalidParam
} }
return CreateRawCollateralizeFeedTx(cfg, &param) return CreateRawCollateralizeFeedTx(cfg, &param)
} else if action == "CollateralizeRetrive" { } else if action == "CollateralizeRetrieve" {
var param CollateralizeRetrieveTx var param CollateralizeRetrieveTx
err := json.Unmarshal(message, &param) err := json.Unmarshal(message, &param)
if err != nil { if err != nil {
...@@ -153,7 +154,7 @@ func CreateRawCollateralizeCreateTx(cfg *types.Chain33Config, parm *Collateraliz ...@@ -153,7 +154,7 @@ func CreateRawCollateralizeCreateTx(cfg *types.Chain33Config, parm *Collateraliz
} }
v := &CollateralizeCreate{ v := &CollateralizeCreate{
TotalBalance: parm.TotalBalance, TotalBalance: int64(math.Trunc((parm.TotalBalance+0.0000001)*1e4)) * 1e4,
} }
create := &CollateralizeAction{ create := &CollateralizeAction{
Ty: CollateralizeActionCreate, Ty: CollateralizeActionCreate,
...@@ -182,7 +183,7 @@ func CreateRawCollateralizeBorrowTx(cfg *types.Chain33Config, parm *Collateraliz ...@@ -182,7 +183,7 @@ func CreateRawCollateralizeBorrowTx(cfg *types.Chain33Config, parm *Collateraliz
v := &CollateralizeBorrow{ v := &CollateralizeBorrow{
CollateralizeId: parm.CollateralizeID, CollateralizeId: parm.CollateralizeID,
Value: parm.Value, Value: int64(math.Trunc((parm.Value+0.0000001)*1e4)) * 1e4,
} }
borrow := &CollateralizeAction{ borrow := &CollateralizeAction{
Ty: CollateralizeActionBorrow, Ty: CollateralizeActionBorrow,
...@@ -241,7 +242,7 @@ func CreateRawCollateralizeAppendTx(cfg *types.Chain33Config, parm *Collateraliz ...@@ -241,7 +242,7 @@ func CreateRawCollateralizeAppendTx(cfg *types.Chain33Config, parm *Collateraliz
v := &CollateralizeAppend{ v := &CollateralizeAppend{
CollateralizeId: parm.CollateralizeID, CollateralizeId: parm.CollateralizeID,
RecordId:parm.RecordID, RecordId:parm.RecordID,
CollateralValue: parm.Value, CollateralValue: int64(math.Trunc((parm.Value+0.0000001)*1e4)) * 1e4,
} }
append := &CollateralizeAction{ append := &CollateralizeAction{
Ty: CollateralizeActionAppend, Ty: CollateralizeActionAppend,
...@@ -299,7 +300,7 @@ func CreateRawCollateralizeRetrieveTx(cfg *types.Chain33Config, parm *Collateral ...@@ -299,7 +300,7 @@ func CreateRawCollateralizeRetrieveTx(cfg *types.Chain33Config, parm *Collateral
v := &CollateralizeRetrieve{ v := &CollateralizeRetrieve{
CollateralizeId: parm.CollateralizeID, CollateralizeId: parm.CollateralizeID,
Balance: parm.Balance, Balance: int64(math.Trunc((parm.Balance+0.0000001)*1e4)) * 1e4,
} }
close := &CollateralizeAction{ close := &CollateralizeAction{
Ty: CollateralizeActionRetrieve, Ty: CollateralizeActionRetrieve,
...@@ -328,11 +329,11 @@ func CreateRawCollateralizeManageTx(cfg *types.Chain33Config, parm *Collateraliz ...@@ -328,11 +329,11 @@ func CreateRawCollateralizeManageTx(cfg *types.Chain33Config, parm *Collateraliz
} }
v := &CollateralizeManage{ v := &CollateralizeManage{
DebtCeiling: parm.DebtCeiling, DebtCeiling: int64(math.Trunc((parm.DebtCeiling+0.0000001)*1e4)) * 1e4,
LiquidationRatio: parm.LiquidationRatio, LiquidationRatio: parm.LiquidationRatio,
StabilityFeeRatio: parm.StabilityFeeRatio, StabilityFeeRatio: parm.StabilityFeeRatio,
Period: parm.Period, Period: parm.Period,
CollTotalBalance: parm.CollTotalBalance, TotalBalance: int64(math.Trunc((parm.TotalBalance+0.0000001)*1e4)) * 1e4,
} }
manage := &CollateralizeAction{ manage := &CollateralizeAction{
......
...@@ -9,7 +9,6 @@ import "errors" ...@@ -9,7 +9,6 @@ import "errors"
// Errors for lottery // Errors for lottery
var ( var (
ErrRiskParam = errors.New("ErrRiskParam") ErrRiskParam = errors.New("ErrRiskParam")
ErrCollateralizeRepeatHash = errors.New("ErrCollateralizeRepeatHash")
ErrCollateralizeStatus = errors.New("ErrCollateralizeStatus") ErrCollateralizeStatus = errors.New("ErrCollateralizeStatus")
ErrCollateralizeExceedDebtCeiling = errors.New("ErrCollateralizeExceedDebtCeiling") ErrCollateralizeExceedDebtCeiling = errors.New("ErrCollateralizeExceedDebtCeiling")
ErrPriceInvalid = errors.New("ErrPriceInvalid") ErrPriceInvalid = errors.New("ErrPriceInvalid")
......
...@@ -6,14 +6,14 @@ package types ...@@ -6,14 +6,14 @@ package types
// CollateralizeCreateTx for construction // CollateralizeCreateTx for construction
type CollateralizeCreateTx struct { type CollateralizeCreateTx struct {
TotalBalance int64 `json:"totalBalance"` TotalBalance float64 `json:"totalBalance"`
Fee int64 `json:"fee"` Fee int64 `json:"fee"`
} }
// CollateralizeBorrowTx for construction // CollateralizeBorrowTx for construction
type CollateralizeBorrowTx struct { type CollateralizeBorrowTx struct {
CollateralizeID string `json:"collateralizeId"` CollateralizeID string `json:"collateralizeId"`
Value int64 `json:"value"` Value float64 `json:"value"`
Fee int64 `json:"fee"` Fee int64 `json:"fee"`
} }
...@@ -28,13 +28,13 @@ type CollateralizeRepayTx struct { ...@@ -28,13 +28,13 @@ type CollateralizeRepayTx struct {
type CollateralizeAppendTx struct { type CollateralizeAppendTx struct {
CollateralizeID string `json:"collateralizeId"` CollateralizeID string `json:"collateralizeId"`
RecordID string `json:"recordID"` RecordID string `json:"recordID"`
Value int64 `json:"value"` Value float64 `json:"value"`
Fee int64 `json:"fee"` Fee int64 `json:"fee"`
} }
// CollateralizeFeedTx for construction // CollateralizeFeedTx for construction
type CollateralizeFeedTx struct { type CollateralizeFeedTx struct {
Price []float32 `json:"price"` Price []float64 `json:"price"`
Volume []int64 `json:"volume"` Volume []int64 `json:"volume"`
Fee int64 `json:"fee"` Fee int64 `json:"fee"`
} }
...@@ -42,16 +42,16 @@ type CollateralizeFeedTx struct { ...@@ -42,16 +42,16 @@ type CollateralizeFeedTx struct {
// CollateralizeRetrieveTx for construction // CollateralizeRetrieveTx for construction
type CollateralizeRetrieveTx struct { type CollateralizeRetrieveTx struct {
CollateralizeID string `json:"collateralizeId"` CollateralizeID string `json:"collateralizeId"`
Balance int64 `json:"Balance"` Balance float64 `json:"Balance"`
Fee int64 `json:"fee"` Fee int64 `json:"fee"`
} }
// CollateralizeManageTx for construction // CollateralizeManageTx for construction
type CollateralizeManageTx struct { type CollateralizeManageTx struct {
DebtCeiling int64 `json:"debtCeiling"` DebtCeiling float64 `json:"debtCeiling"`
LiquidationRatio float32 `json:"liquidationRatio"` LiquidationRatio float64 `json:"liquidationRatio"`
StabilityFeeRatio float32 `json:"stabilityFeeRatio"` StabilityFeeRatio float64 `json:"stabilityFeeRatio"`
Period int64 `json:"period"` Period int64 `json:"period"`
CollTotalBalance int64 `json:"collTotalBalance"` TotalBalance float64 `json:"totalBalance"`
Fee int64 `json:"fee"` Fee int64 `json:"fee"`
} }
...@@ -43,11 +43,11 @@ func IssuanceCreateRawTxCmd() *cobra.Command { ...@@ -43,11 +43,11 @@ func IssuanceCreateRawTxCmd() *cobra.Command {
} }
func addIssuanceCreateFlags(cmd *cobra.Command) { func addIssuanceCreateFlags(cmd *cobra.Command) {
cmd.Flags().Uint64P("balance", "b", 0, "balance") cmd.Flags().Float64P("balance", "b", 0, "balance")
cmd.MarkFlagRequired("balance") cmd.MarkFlagRequired("balance")
cmd.Flags().Uint64P("debtCeiling", "d", 0, "debtCeiling") cmd.Flags().Float64P("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().Float32P("period", "p", 0, "period")
} }
func IssuanceCreate(cmd *cobra.Command, args []string) { func IssuanceCreate(cmd *cobra.Command, args []string) {
...@@ -58,15 +58,15 @@ func IssuanceCreate(cmd *cobra.Command, args []string) { ...@@ -58,15 +58,15 @@ func IssuanceCreate(cmd *cobra.Command, args []string) {
} }
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr") rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
balance, _ := cmd.Flags().GetUint64("balance") balance, _ := cmd.Flags().GetFloat64("balance")
debtCeiling, _ := cmd.Flags().GetUint64("debtCeiling") debtCeiling, _ := cmd.Flags().GetFloat64("debtCeiling")
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: cfg.ExecName(pkt.IssuanceX), Execer: cfg.ExecName(pkt.IssuanceX),
ActionName: "IssuanceCreate", ActionName: "IssuanceCreate",
Payload: []byte(fmt.Sprintf("{\"totalBalance\":%d, \"debtCeiling\":%d, \"liquidationRatio\":%f, \"period\":%d}", Payload: []byte(fmt.Sprintf("{\"totalBalance\":%f, \"debtCeiling\":%f, \"liquidationRatio\":%f, \"period\":%d}",
balance, debtCeiling, liquidationRatio, period)), balance, debtCeiling, liquidationRatio, period)),
} }
...@@ -89,7 +89,7 @@ func IssuanceDebtRawTxCmd() *cobra.Command { ...@@ -89,7 +89,7 @@ func IssuanceDebtRawTxCmd() *cobra.Command {
func addIssuanceDebtFlags(cmd *cobra.Command) { func addIssuanceDebtFlags(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().Uint64P("value", "v", 0, "value") cmd.Flags().Float64P("value", "v", 0, "value")
cmd.MarkFlagRequired("value") cmd.MarkFlagRequired("value")
} }
...@@ -102,12 +102,12 @@ func IssuanceDebt(cmd *cobra.Command, args []string) { ...@@ -102,12 +102,12 @@ func IssuanceDebt(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")
value, _ := cmd.Flags().GetUint64("value") value, _ := cmd.Flags().GetFloat64("value")
params := &rpctypes.CreateTxIn{ params := &rpctypes.CreateTxIn{
Execer: cfg.ExecName(pkt.IssuanceX), Execer: cfg.ExecName(pkt.IssuanceX),
ActionName: "IssuanceDebt", ActionName: "IssuanceDebt",
Payload: []byte(fmt.Sprintf("{\"issuanceID\":\"%s\",\"value\":%d}", issuanceID, value)), Payload: []byte(fmt.Sprintf("{\"issuanceID\":\"%s\",\"value\":%f}", issuanceID, value)),
} }
var res string var res string
......
...@@ -81,4 +81,9 @@ func (c *Issuance) ExecDelLocal_Feed(payload *pty.IssuanceFeed, tx *types.Transa ...@@ -81,4 +81,9 @@ func (c *Issuance) ExecDelLocal_Feed(payload *pty.IssuanceFeed, tx *types.Transa
// ExecDelLocal_Close Action // ExecDelLocal_Close Action
func (c *Issuance) ExecDelLocal_Close(payload *pty.IssuanceClose, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) { func (c *Issuance) ExecDelLocal_Close(payload *pty.IssuanceClose, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
return c.execDelLocal(tx, receiptData) return c.execDelLocal(tx, receiptData)
}
// ExecDelLocal_Manage Action
func (c *Issuance) ExecDelLocal_Manage(payload *pty.IssuanceManage, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
return c.execDelLocal(tx, receiptData)
} }
\ No newline at end of file
...@@ -83,3 +83,8 @@ func (c *Issuance) ExecLocal_Feed(payload *pty.IssuanceFeed, tx *types.Transacti ...@@ -83,3 +83,8 @@ func (c *Issuance) ExecLocal_Feed(payload *pty.IssuanceFeed, tx *types.Transacti
func (c *Issuance) ExecLocal_Close(payload *pty.IssuanceClose, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) { func (c *Issuance) ExecLocal_Close(payload *pty.IssuanceClose, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
return c.execLocal(tx, receiptData) return c.execLocal(tx, receiptData)
} }
// ExecLocal_Manage Action
func (c *Issuance) ExecLocal_Manage(payload *pty.IssuanceManage, tx *types.Transaction, receiptData *types.ReceiptData, index int) (*types.LocalDBSet, error) {
return c.execLocal(tx, receiptData)
}
...@@ -144,7 +144,7 @@ func (c *Issuance) deleteIssuanceRecordStatus(status int32, index int64) (kvs [] ...@@ -144,7 +144,7 @@ func (c *Issuance) deleteIssuanceRecordStatus(status int32, index int64) (kvs []
return kvs return kvs
} }
func (c *Issuance) addIssuancePriceRecord(recordTime int64, price float32) (kvs []*types.KeyValue) { func (c *Issuance) addIssuancePriceRecord(recordTime int64, price float64) (kvs []*types.KeyValue) {
key := calcIssuancePriceKey(string(recordTime)) key := calcIssuancePriceKey(string(recordTime))
record := &pty.IssuanceAssetPriceRecord{ record := &pty.IssuanceAssetPriceRecord{
......
...@@ -13,6 +13,7 @@ import ( ...@@ -13,6 +13,7 @@ import (
"github.com/33cn/chain33/types" "github.com/33cn/chain33/types"
pty "github.com/33cn/plugin/plugin/dapp/issuance/types" pty "github.com/33cn/plugin/plugin/dapp/issuance/types"
tokenE "github.com/33cn/plugin/plugin/dapp/token/executor" tokenE "github.com/33cn/plugin/plugin/dapp/token/executor"
"math"
) )
// List control // List control
...@@ -25,7 +26,7 @@ const ( ...@@ -25,7 +26,7 @@ const (
const ( const (
Coin = types.Coin // 1e8 Coin = types.Coin // 1e8
DefaultDebtCeiling = 100000 // 默认借贷限额 DefaultDebtCeiling = 100000 * Coin // 默认借贷限额
DefaultLiquidationRatio = 0.25 // 默认质押比 DefaultLiquidationRatio = 0.25 // 默认质押比
DefaultPeriod = 3600 * 24 * 365 // 默认合约限期 DefaultPeriod = 3600 * 24 * 365 // 默认合约限期
PriceWarningRate = 1.3 // 价格提前预警率 PriceWarningRate = 1.3 // 价格提前预警率
...@@ -289,8 +290,8 @@ func (action *Action) GetIndex() int64 { ...@@ -289,8 +290,8 @@ func (action *Action) GetIndex() int64 {
return action.height*types.MaxTxsPerBlock + int64(action.index) return action.height*types.MaxTxsPerBlock + int64(action.index)
} }
func getLatestLiquidationPrice(issu *pty.Issuance) float32 { func getLatestLiquidationPrice(issu *pty.Issuance) float64 {
var latest float32 var latest float64
for _, collRecord := range issu.DebtRecords { for _, collRecord := range issu.DebtRecords {
if collRecord.LiquidationPrice > latest { if collRecord.LiquidationPrice > latest {
latest = collRecord.LiquidationPrice latest = collRecord.LiquidationPrice
...@@ -385,7 +386,7 @@ func (action *Action) IssuanceCreate(create *pty.IssuanceCreate) (*types.Receipt ...@@ -385,7 +386,7 @@ func (action *Action) IssuanceCreate(create *pty.IssuanceCreate) (*types.Receipt
} }
// 检查ccny余额 // 检查ccny余额
if !action.CheckExecTokenAccount(action.fromaddr, create.TotalBalance*Coin, false) { if !action.CheckExecTokenAccount(action.fromaddr, create.TotalBalance, false) {
return nil, types.ErrInsufficientBalance return nil, types.ErrInsufficientBalance
} }
...@@ -398,7 +399,7 @@ func (action *Action) IssuanceCreate(create *pty.IssuanceCreate) (*types.Receipt ...@@ -398,7 +399,7 @@ func (action *Action) IssuanceCreate(create *pty.IssuanceCreate) (*types.Receipt
} }
// 冻结ccny // 冻结ccny
receipt, err = action.tokenAccount.ExecFrozen(action.fromaddr, action.execaddr, create.TotalBalance*Coin) receipt, err = action.tokenAccount.ExecFrozen(action.fromaddr, action.execaddr, create.TotalBalance)
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
...@@ -445,20 +446,19 @@ func (action *Action) IssuanceCreate(create *pty.IssuanceCreate) (*types.Receipt ...@@ -445,20 +446,19 @@ func (action *Action) IssuanceCreate(create *pty.IssuanceCreate) (*types.Receipt
} }
// 根据最近抵押物价格计算需要冻结的BTY数量 // 根据最近抵押物价格计算需要冻结的BTY数量
func getBtyNumToFrozen(value int64, price float32, ratio float32) (int64,error) { func getBtyNumToFrozen(value int64, price float64, ratio float64) (int64,error) {
if price == 0 { if price == 0 {
clog.Error("Bty price should greate to 0") clog.Error("Bty price should greate to 0")
return 0, pty.ErrPriceInvalid return 0, pty.ErrPriceInvalid
} }
btyValue := float32(value)/ratio valueReal := float64(value)/1e8
btyNum := int64(btyValue/price) + 1 btyValue := valueReal/(price * ratio)
return int64(math.Trunc((btyValue+0.0000001)*1e4)) * 1e4, nil
return btyNum, nil
} }
// 获取最近抵押物价格 // 获取最近抵押物价格
func getLatestPrice(db dbm.KV) (float32, error) { func getLatestPrice(db dbm.KV) (float64, error) {
data, err := db.Get(PriceKey()) data, err := db.Get(PriceKey())
if err != nil { if err != nil {
clog.Error("getLatestPrice", "get", err) clog.Error("getLatestPrice", "get", err)
...@@ -558,13 +558,13 @@ func (action *Action) IssuanceDebt(debt *pty.IssuanceDebt) (*types.Receipt, erro ...@@ -558,13 +558,13 @@ func (action *Action) IssuanceDebt(debt *pty.IssuanceDebt) (*types.Receipt, erro
} }
// 检查抵押物账户余额 // 检查抵押物账户余额
if !action.CheckExecAccountBalance(action.fromaddr, btyFrozen*Coin, 0) { if !action.CheckExecAccountBalance(action.fromaddr, btyFrozen, 0) {
clog.Error("IssuanceDebt.CheckExecAccountBalance", "CollID", issu.IssuanceId, "addr", action.fromaddr, "execaddr", action.execaddr, "btyFrozen", btyFrozen, "err", types.ErrNoBalance) clog.Error("IssuanceDebt.CheckExecAccountBalance", "CollID", issu.IssuanceId, "addr", action.fromaddr, "execaddr", action.execaddr, "btyFrozen", btyFrozen, "err", types.ErrNoBalance)
return nil, types.ErrNoBalance return nil, types.ErrNoBalance
} }
// 抵押物转账 // 抵押物转账
receipt, err := action.coinsAccount.ExecTransfer(action.fromaddr, issu.IssuerAddr, action.execaddr, btyFrozen*Coin) receipt, err := action.coinsAccount.ExecTransfer(action.fromaddr, issu.IssuerAddr, action.execaddr, btyFrozen)
if err != nil { if err != nil {
clog.Error("IssuanceDebt.ExecTransfer", "addr", action.fromaddr, "execaddr", action.execaddr, "amount", btyFrozen) clog.Error("IssuanceDebt.ExecTransfer", "addr", action.fromaddr, "execaddr", action.execaddr, "amount", btyFrozen)
return nil, err return nil, err
...@@ -573,7 +573,7 @@ func (action *Action) IssuanceDebt(debt *pty.IssuanceDebt) (*types.Receipt, erro ...@@ -573,7 +573,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*Coin) receipt, err = action.coinsAccount.ExecFrozen(issu.IssuerAddr, action.execaddr, btyFrozen)
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
...@@ -582,7 +582,7 @@ func (action *Action) IssuanceDebt(debt *pty.IssuanceDebt) (*types.Receipt, erro ...@@ -582,7 +582,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.ExecTransferFrozen(issu.IssuerAddr, action.fromaddr, action.execaddr, debt.Value*Coin) receipt, err = action.tokenAccount.ExecTransferFrozen(issu.IssuerAddr, action.fromaddr, action.execaddr, debt.Value)
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
...@@ -663,13 +663,13 @@ func (action *Action) IssuanceRepay(repay *pty.IssuanceRepay) (*types.Receipt, e ...@@ -663,13 +663,13 @@ func (action *Action) IssuanceRepay(repay *pty.IssuanceRepay) (*types.Receipt, e
} }
// 检查 // 检查
if !action.CheckExecTokenAccount(action.fromaddr, debtRecord.DebtValue*Coin, false) { if !action.CheckExecTokenAccount(action.fromaddr, debtRecord.DebtValue, 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*Coin) receipt, err = action.tokenAccount.ExecTransfer(action.fromaddr, issu.IssuerAddr, action.execaddr, debtRecord.DebtValue)
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
...@@ -678,7 +678,7 @@ func (action *Action) IssuanceRepay(repay *pty.IssuanceRepay) (*types.Receipt, e ...@@ -678,7 +678,7 @@ func (action *Action) IssuanceRepay(repay *pty.IssuanceRepay) (*types.Receipt, e
kv = append(kv, receipt.KV...) kv = append(kv, receipt.KV...)
// 冻结ccny // 冻结ccny
receipt, err = action.tokenAccount.ExecFrozen(issu.IssuerAddr, action.execaddr, debtRecord.DebtValue*Coin) receipt, err = action.tokenAccount.ExecFrozen(issu.IssuerAddr, action.execaddr, debtRecord.DebtValue)
if err != nil { if err != nil {
clog.Error("IssuanceCreate.Frozen", "addr", action.fromaddr, "execaddr", action.execaddr, "amount", debtRecord.DebtValue) clog.Error("IssuanceCreate.Frozen", "addr", action.fromaddr, "execaddr", action.execaddr, "amount", debtRecord.DebtValue)
return nil, err return nil, err
...@@ -687,7 +687,7 @@ func (action *Action) IssuanceRepay(repay *pty.IssuanceRepay) (*types.Receipt, e ...@@ -687,7 +687,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.fromaddr, action.execaddr, debtRecord.CollateralValue*Coin) receipt, err = action.coinsAccount.ExecTransferFrozen(issu.IssuerAddr, action.fromaddr, action.execaddr, debtRecord.CollateralValue)
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
...@@ -720,7 +720,7 @@ func (action *Action) IssuanceRepay(repay *pty.IssuanceRepay) (*types.Receipt, e ...@@ -720,7 +720,7 @@ func (action *Action) IssuanceRepay(repay *pty.IssuanceRepay) (*types.Receipt, e
} }
// 系统清算 // 系统清算
func (action *Action) systemLiquidation(issu *pty.Issuance, price float32) (*types.Receipt, error) { func (action *Action) systemLiquidation(issu *pty.Issuance, price float64) (*types.Receipt, error) {
var logs []*types.ReceiptLog var logs []*types.ReceiptLog
var kv []*types.KeyValue var kv []*types.KeyValue
...@@ -743,7 +743,7 @@ func (action *Action) systemLiquidation(issu *pty.Issuance, price float32) (*typ ...@@ -743,7 +743,7 @@ func (action *Action) systemLiquidation(issu *pty.Issuance, price float32) (*typ
} }
// 抵押物转移 // 抵押物转移
receipt, err := action.coinsAccount.ExecTransferFrozen(issu.IssuerAddr, getGuarantorAddr, action.execaddr, debtRecord.CollateralValue*Coin) receipt, err := action.coinsAccount.ExecTransferFrozen(issu.IssuerAddr, getGuarantorAddr, action.execaddr, debtRecord.CollateralValue)
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
...@@ -801,7 +801,7 @@ func (action *Action) expireLiquidation(issu *pty.Issuance) (*types.Receipt, err ...@@ -801,7 +801,7 @@ func (action *Action) expireLiquidation(issu *pty.Issuance) (*types.Receipt, err
} }
// 抵押物转移 // 抵押物转移
receipt, err := action.coinsAccount.ExecTransferFrozen(issu.IssuerAddr, getGuarantorAddr, action.execaddr, debtRecord.CollateralValue*Coin) receipt, err := action.coinsAccount.ExecTransferFrozen(issu.IssuerAddr, getGuarantorAddr, action.execaddr, debtRecord.CollateralValue)
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
...@@ -840,8 +840,8 @@ func (action *Action) expireLiquidation(issu *pty.Issuance) (*types.Receipt, err ...@@ -840,8 +840,8 @@ func (action *Action) expireLiquidation(issu *pty.Issuance) (*types.Receipt, err
} }
// 价格计算策略 // 价格计算策略
func pricePolicy(feed *pty.IssuanceFeed) float32 { func pricePolicy(feed *pty.IssuanceFeed) float64 {
var totalPrice float32 var totalPrice float64
var totalVolume int64 var totalVolume int64
for _, volume := range feed.Volume { for _, volume := range feed.Volume {
totalVolume += volume totalVolume += volume
...@@ -852,7 +852,7 @@ func pricePolicy(feed *pty.IssuanceFeed) float32 { ...@@ -852,7 +852,7 @@ func pricePolicy(feed *pty.IssuanceFeed) float32 {
return 0 return 0
} }
for i, price := range feed.Price { for i, price := range feed.Price {
totalPrice += price * float32(float64(feed.Volume[i])/float64(totalVolume)) totalPrice += price * (float64(feed.Volume[i])/float64(totalVolume))
} }
return totalPrice return totalPrice
...@@ -955,9 +955,9 @@ func (action *Action) IssuanceClose(close *pty.IssuanceClose) (*types.Receipt, e ...@@ -955,9 +955,9 @@ func (action *Action) IssuanceClose(close *pty.IssuanceClose) (*types.Receipt, e
} }
// 解冻ccny // 解冻ccny
receipt, err = action.tokenAccount.ExecActive(action.fromaddr, action.execaddr, issuance.Balance*Coin) receipt, err = action.tokenAccount.ExecActive(action.fromaddr, action.execaddr, issuance.Balance)
if err != nil { if err != nil {
clog.Error("IssuanceClose.ExecActive", "addr", action.fromaddr, "execaddr", action.execaddr, "amount", issuance.TotalBalance) clog.Error("IssuanceClose.ExecActive", "addr", action.fromaddr, "execaddr", action.execaddr, "amount", issuance.Balance, "err", err)
return nil, err return nil, err
} }
logs = append(logs, receipt.Logs...) logs = append(logs, receipt.Logs...)
......
...@@ -7,13 +7,13 @@ message Issuance { ...@@ -7,13 +7,13 @@ message Issuance {
string issuanceId = 1; //发行ID,一期发行对应一个ID string issuanceId = 1; //发行ID,一期发行对应一个ID
int64 totalBalance = 2; //当期发行的总金额(ccny) int64 totalBalance = 2; //当期发行的总金额(ccny)
int64 debtCeiling = 3; //单用户可借出的限额(ccny) int64 debtCeiling = 3; //单用户可借出的限额(ccny)
float liquidationRatio = 4; //清算比例 double liquidationRatio = 4; //清算比例
int64 collateralValue = 5; //抵押物总数量(bty) int64 collateralValue = 5; //抵押物总数量(bty)
int64 debtValue = 6; //产生的ccny数量 int64 debtValue = 6; //产生的ccny数量
repeated DebtRecord debtRecords = 7; //大户抵押记录 repeated DebtRecord debtRecords = 7; //大户抵押记录
repeated DebtRecord invalidRecords = 8; //大户抵押记录 repeated DebtRecord invalidRecords = 8; //大户抵押记录
int32 status = 9; //当期发行的状态,是否关闭 int32 status = 9; //当期发行的状态,是否关闭
float latestLiquidationPrice = 10;//最高清算价格 double latestLiquidationPrice = 10;//最高清算价格
int64 period = 11;//发行最大期限 int64 period = 11;//发行最大期限
int64 latestExpireTime = 12;//最近超期时间 int64 latestExpireTime = 12;//最近超期时间
int64 createTime = 13;//创建时间 int64 createTime = 13;//创建时间
...@@ -28,9 +28,9 @@ message DebtRecord { ...@@ -28,9 +28,9 @@ message DebtRecord {
string accountAddr = 1; //抵押人地址 string accountAddr = 1; //抵押人地址
int64 startTime = 2; //抵押时间 int64 startTime = 2; //抵押时间
int64 collateralValue = 3; //抵押物价值(bty) int64 collateralValue = 3; //抵押物价值(bty)
float collateralPrice = 4; //抵押物价格 double collateralPrice = 4; //抵押物价格
int64 debtValue = 5; //债务价值(ccny) int64 debtValue = 5; //债务价值(ccny)
float liquidationPrice = 6; //抵押物清算价格 double liquidationPrice = 6; //抵押物清算价格
int32 status = 7; //抵押状态,是否被清算 int32 status = 7; //抵押状态,是否被清算
int64 liquidateTime = 8; //清算时间 int64 liquidateTime = 8; //清算时间
int64 expireTime = 9; //超时清算时间 int64 expireTime = 9; //超时清算时间
...@@ -44,7 +44,7 @@ message DebtRecord { ...@@ -44,7 +44,7 @@ message DebtRecord {
// 资产价格记录 // 资产价格记录
message IssuanceAssetPriceRecord { message IssuanceAssetPriceRecord {
int64 recordTime = 1; //价格记录时间 int64 recordTime = 1; //价格记录时间
float btyPrice = 2; //bty价格 double btyPrice = 2; //bty价格
} }
// action // action
...@@ -68,7 +68,7 @@ message IssuanceManage { ...@@ -68,7 +68,7 @@ message IssuanceManage {
message IssuanceCreate { message IssuanceCreate {
int64 totalBalance = 1; //发行总金额 int64 totalBalance = 1; //发行总金额
int64 debtCeiling = 2; //单用户可借出的限额(ccny) int64 debtCeiling = 2; //单用户可借出的限额(ccny)
float liquidationRatio = 3; //清算比例 double liquidationRatio = 3; //清算比例
int64 period = 4; //发行最大期限 int64 period = 4; //发行最大期限
} }
...@@ -86,9 +86,9 @@ message IssuanceRepay { ...@@ -86,9 +86,9 @@ message IssuanceRepay {
// 喂价 // 喂价
message IssuanceFeed { message IssuanceFeed {
int32 collType = 1; //抵押物价格类型(1,bty,2,btc,3,eth...) int32 collType = 1; //抵押物价格类型(1,bty,2,btc,3,eth...)
repeated float price = 2; //喂价 repeated double price = 2; //喂价
repeated int64 volume = 3; //成交量 repeated int64 volume = 3; //成交量
} }
// 借贷关闭 // 借贷关闭
...@@ -106,7 +106,7 @@ message ReceiptIssuance { ...@@ -106,7 +106,7 @@ message ReceiptIssuance {
int64 index = 6; int64 index = 6;
int64 preIndex = 7; int64 preIndex = 7;
int64 recordTime = 8; //价格记录时间 int64 recordTime = 8; //价格记录时间
float btyPrice = 9; //bty价格 double btyPrice = 9; //bty价格
} }
// exec_local 抵押记录信息 // exec_local 抵押记录信息
...@@ -132,7 +132,7 @@ message RepIssuanceCurrentInfo { ...@@ -132,7 +132,7 @@ message RepIssuanceCurrentInfo {
int32 status = 1; //当期发行的状态,是否关闭 int32 status = 1; //当期发行的状态,是否关闭
int64 totalBalance = 2; //当期发行总金额(ccny) int64 totalBalance = 2; //当期发行总金额(ccny)
int64 debtCeiling = 3; //单用户可借出的限额(ccny) int64 debtCeiling = 3; //单用户可借出的限额(ccny)
float liquidationRatio = 4; //清算比例 double liquidationRatio = 4; //清算比例
int64 balance = 5; //剩余可借贷金额(ccny) int64 balance = 5; //剩余可借贷金额(ccny)
int64 collateralValue = 6; //抵押物总数量(bty) int64 collateralValue = 6; //抵押物总数量(bty)
int64 debtValue = 7; //产生的ccny数量 int64 debtValue = 7; //产生的ccny数量
...@@ -195,5 +195,5 @@ message RepIssuanceDebtInfo { ...@@ -195,5 +195,5 @@ message RepIssuanceDebtInfo {
// 返回最新抵押物价格 // 返回最新抵押物价格
message RepIssuancePrice { message RepIssuancePrice {
float price = 1; //当前抵押物最新价格 double price = 1; //当前抵押物最新价格
} }
\ No newline at end of file
...@@ -6,6 +6,7 @@ package types ...@@ -6,6 +6,7 @@ package types
import ( import (
"encoding/json" "encoding/json"
"math"
"reflect" "reflect"
"github.com/33cn/chain33/common/address" "github.com/33cn/chain33/common/address"
...@@ -143,8 +144,8 @@ func CreateRawIssuanceCreateTx(cfg *types.Chain33Config, parm *IssuanceCreateTx) ...@@ -143,8 +144,8 @@ func CreateRawIssuanceCreateTx(cfg *types.Chain33Config, parm *IssuanceCreateTx)
} }
v := &IssuanceCreate{ v := &IssuanceCreate{
TotalBalance: parm.TotalBalance, TotalBalance: int64(math.Trunc((parm.TotalBalance+0.0000001)*1e4)) * 1e4,
DebtCeiling: parm.DebtCeiling, DebtCeiling: int64(math.Trunc((parm.DebtCeiling+0.0000001)*1e4)) * 1e4,
LiquidationRatio: parm.LiquidationRatio, LiquidationRatio: parm.LiquidationRatio,
Period: parm.Period, Period: parm.Period,
} }
...@@ -175,7 +176,7 @@ func CreateRawIssuanceDebtTx(cfg *types.Chain33Config, parm *IssuanceDebtTx) (*t ...@@ -175,7 +176,7 @@ func CreateRawIssuanceDebtTx(cfg *types.Chain33Config, parm *IssuanceDebtTx) (*t
v := &IssuanceDebt{ v := &IssuanceDebt{
IssuanceId: parm.IssuanceID, IssuanceId: parm.IssuanceID,
Value: parm.Value, Value: int64(math.Trunc((parm.Value+0.0000001)*1e4)) * 1e4,
} }
debt := &IssuanceAction{ debt := &IssuanceAction{
Ty: IssuanceActionDebt, Ty: IssuanceActionDebt,
......
This diff is collapsed.
...@@ -6,17 +6,17 @@ package types ...@@ -6,17 +6,17 @@ package types
// IssuanceCreateTx for construction // IssuanceCreateTx for construction
type IssuanceCreateTx struct { type IssuanceCreateTx struct {
DebtCeiling int64 `json:"debtCeiling"` DebtCeiling float64 `json:"debtCeiling"`
LiquidationRatio float32 `json:"liquidationRatio"` LiquidationRatio float64 `json:"liquidationRatio"`
Period int64 `json:"period"` Period int64 `json:"period"`
TotalBalance int64 `json:"totalBalance"` TotalBalance float64 `json:"totalBalance"`
Fee int64 `json:"fee"` Fee int64 `json:"fee"`
} }
// IssuanceDebtTx for construction // IssuanceDebtTx for construction
type IssuanceDebtTx struct { type IssuanceDebtTx struct {
IssuanceID string `json:"issuanceId"` IssuanceID string `json:"issuanceId"`
Value int64 `json:"value"` Value float64 `json:"value"`
Fee int64 `json:"fee"` Fee int64 `json:"fee"`
} }
...@@ -29,7 +29,7 @@ type IssuanceRepayTx struct { ...@@ -29,7 +29,7 @@ type IssuanceRepayTx struct {
// IssuanceFeedTx for construction // IssuanceFeedTx for construction
type IssuanceFeedTx struct { type IssuanceFeedTx struct {
Price []float32 `json:"price"` Price []float64 `json:"price"`
Volume []int64 `json:"volume"` Volume []int64 `json:"volume"`
Fee int64 `json:"fee"` Fee int64 `json:"fee"`
} }
......
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