Commit 9c251ca9 authored by pengjun's avatar pengjun Committed by vipwzw

#627 fix issuance table error; add fork

parent bbb107d5
......@@ -312,9 +312,11 @@ Enable=0
[fork.sub.issuance]
Enable=0
ForkIssuanceTableUpdate=0
[fork.sub.collateralize]
Enable=0
ForkCollateralizeTableUpdate=0
#对已有的平行链如果不是从0开始同步数据,需要设置这个kvmvccmavl的对应平行链高度的fork,如果从0开始同步,statehash会跟以前mavl的不同
[fork.sub.store-kvmvccmavl]
......
......@@ -30,6 +30,7 @@ type execEnv struct {
db dbm.KV
execAddr string
cfg *types.Chain33Config
ldb dbm.DB
}
var (
......@@ -76,8 +77,9 @@ func addrKeySet(value string, db dbm.KV) {
func initEnv() *execEnv {
cfg := types.NewChain33Config(types.GetDefaultCfgstring())
cfg.SetTitleOnlyForTest("chain33")
cfg.RegisterDappFork(pkt.CollateralizeX, pkt.ForkCollateralizeTableUpdate, 0)
Init(pkt.CollateralizeX, cfg, nil)
_, _, kvdb := util.CreateTestDB()
_, ldb, kvdb := util.CreateTestDB()
accountA := types.Account{
Balance: total,
......@@ -140,6 +142,7 @@ func initEnv() *execEnv {
db: stateDB,
execAddr: execAddr,
cfg: cfg,
ldb: ldb,
}
}
......@@ -182,9 +185,7 @@ func TestCollateralize(t *testing.T) {
set, err := exec.ExecLocal(createTx, receiptData, int(1))
assert.Nil(t, err)
assert.NotNil(t, set)
for _, kv := range set.KV {
env.kvdb.Set(kv.Key, kv.Value)
}
util.SaveKVList(env.ldb, set.KV)
// collateralize create
p1 := &pkt.CollateralizeCreateTx{
......@@ -211,9 +212,7 @@ func TestCollateralize(t *testing.T) {
set, err = exec.ExecLocal(createTx, receiptData, int(1))
assert.Nil(t, err)
assert.NotNil(t, set)
for _, kv := range set.KV {
env.kvdb.Set(kv.Key, kv.Value)
}
util.SaveKVList(env.ldb, set.KV)
collateralizeID := createTx.Hash()
// query collateralize by id
res, err := exec.Query("CollateralizeInfoByID", types.Encode(&pkt.ReqCollateralizeInfo{CollateralizeId: common.ToHex(collateralizeID)}))
......@@ -256,9 +255,7 @@ func TestCollateralize(t *testing.T) {
set, err = exec.ExecLocal(createTx, receiptData, int(1))
assert.Nil(t, err)
assert.NotNil(t, set)
for _, kv := range set.KV {
env.kvdb.Set(kv.Key, kv.Value)
}
util.SaveKVList(env.ldb, set.KV)
// query collateralize by id
res, err = exec.Query("CollateralizePrice", nil)
assert.Nil(t, err)
......@@ -291,9 +288,7 @@ func TestCollateralize(t *testing.T) {
set, err = exec.ExecLocal(createTx, receiptData, int(1))
assert.Nil(t, err)
assert.NotNil(t, set)
for _, kv := range set.KV {
env.kvdb.Set(kv.Key, kv.Value)
}
util.SaveKVList(env.ldb, set.KV)
borrowID := createTx.Hash()
// query collateralize by id
res, err = exec.Query("CollateralizeRecordByID",
......@@ -348,9 +343,7 @@ func TestCollateralize(t *testing.T) {
set, err = exec.ExecLocal(createTx, receiptData, int(1))
assert.Nil(t, err)
assert.NotNil(t, set)
for _, kv := range set.KV {
env.kvdb.Set(kv.Key, kv.Value)
}
util.SaveKVList(env.ldb, set.KV)
// query collateralize by id
res, err = exec.Query("CollateralizeRecordByID",
types.Encode(&pkt.ReqCollateralizeRecord{CollateralizeId: common.ToHex(collateralizeID), RecordId: common.ToHex(borrowID)}))
......@@ -394,9 +387,7 @@ func TestCollateralize(t *testing.T) {
set, err = exec.ExecLocal(createTx, receiptData, int(1))
assert.Nil(t, err)
assert.NotNil(t, set)
for _, kv := range set.KV {
env.kvdb.Set(kv.Key, kv.Value)
}
util.SaveKVList(env.ldb, set.KV)
// query collateralize by status
res, err = exec.Query("CollateralizeRecordByStatus",
types.Encode(&pkt.ReqCollateralizeRecordByStatus{CollateralizeId: common.ToHex(collateralizeID), Status: 6}))
......@@ -444,9 +435,7 @@ func TestCollateralize(t *testing.T) {
set, err = exec.ExecLocal(createTx, receiptData, int(1))
assert.Nil(t, err)
assert.NotNil(t, set)
for _, kv := range set.KV {
env.kvdb.Set(kv.Key, kv.Value)
}
util.SaveKVList(env.ldb, set.KV)
p71 := &pkt.CollateralizeBorrowTx{
CollateralizeID: common.ToHex(collateralizeID),
......@@ -474,9 +463,7 @@ func TestCollateralize(t *testing.T) {
set, err = exec.ExecLocal(createTx, receiptData, int(1))
assert.Nil(t, err)
assert.NotNil(t, set)
for _, kv := range set.KV {
env.kvdb.Set(kv.Key, kv.Value)
}
util.SaveKVList(env.ldb, set.KV)
p8 := &pkt.CollateralizeFeedTx{}
p8.Price = append(p8.Price, 0.28)
......@@ -503,9 +490,7 @@ func TestCollateralize(t *testing.T) {
set, err = exec.ExecLocal(createTx, receiptData, int(1))
assert.Nil(t, err)
assert.NotNil(t, set)
for _, kv := range set.KV {
env.kvdb.Set(kv.Key, kv.Value)
}
util.SaveKVList(env.ldb, set.KV)
// query collateralize by status
res, err = exec.Query("CollateralizeRecordByStatus",
types.Encode(&pkt.ReqCollateralizeRecordByStatus{CollateralizeId: common.ToHex(collateralizeID), Status: 2}))
......@@ -540,9 +525,7 @@ func TestCollateralize(t *testing.T) {
set, err = exec.ExecLocal(createTx, receiptData, int(1))
assert.Nil(t, err)
assert.NotNil(t, set)
for _, kv := range set.KV {
env.kvdb.Set(kv.Key, kv.Value)
}
util.SaveKVList(env.ldb, set.KV)
// query collateralize by status
res, err = exec.Query("CollateralizeRecordByStatus",
types.Encode(&pkt.ReqCollateralizeRecordByStatus{CollateralizeId: common.ToHex(collateralizeID), Status: 4}))
......@@ -574,9 +557,7 @@ func TestCollateralize(t *testing.T) {
set, err = exec.ExecLocal(createTx, receiptData, int(1))
assert.Nil(t, err)
assert.NotNil(t, set)
for _, kv := range set.KV {
env.kvdb.Set(kv.Key, kv.Value)
}
util.SaveKVList(env.ldb, set.KV)
// query collateralize by status
res, err = exec.Query("CollateralizeRecordByStatus",
types.Encode(&pkt.ReqCollateralizeRecordByStatus{CollateralizeId: common.ToHex(collateralizeID), Status: 3}))
......@@ -585,6 +566,9 @@ func TestCollateralize(t *testing.T) {
res, err = exec.Query("CollateralizeRecordByStatus",
types.Encode(&pkt.ReqCollateralizeRecordByStatus{CollateralizeId: common.ToHex(collateralizeID), Status: 4}))
assert.Nil(t, res)
res, err = exec.Query("CollateralizeRecordByStatus",
types.Encode(&pkt.ReqCollateralizeRecordByStatus{CollateralizeId: common.ToHex(collateralizeID), Status: 1}))
assert.Nil(t, res)
// expire liquidate
p10 := &pkt.CollateralizeBorrowTx{
......@@ -613,9 +597,7 @@ func TestCollateralize(t *testing.T) {
set, err = exec.ExecLocal(createTx, receiptData, int(1))
assert.Nil(t, err)
assert.NotNil(t, set)
for _, kv := range set.KV {
env.kvdb.Set(kv.Key, kv.Value)
}
util.SaveKVList(env.ldb, set.KV)
p11 := &pkt.CollateralizeFeedTx{}
p11.Price = append(p11.Price, 1)
......@@ -642,9 +624,7 @@ func TestCollateralize(t *testing.T) {
set, err = exec.ExecLocal(createTx, receiptData, int(1))
assert.Nil(t, err)
assert.NotNil(t, set)
for _, kv := range set.KV {
env.kvdb.Set(kv.Key, kv.Value)
}
util.SaveKVList(env.ldb, set.KV)
// query collateralize by status
res, err = exec.Query("CollateralizeRecordByStatus",
types.Encode(&pkt.ReqCollateralizeRecordByStatus{CollateralizeId: common.ToHex(collateralizeID), Status: 5}))
......@@ -678,9 +658,7 @@ func TestCollateralize(t *testing.T) {
set, err = exec.ExecLocal(createTx, receiptData, int(1))
assert.Nil(t, err)
assert.NotNil(t, set)
for _, kv := range set.KV {
env.kvdb.Set(kv.Key, kv.Value)
}
util.SaveKVList(env.ldb, set.KV)
// query collateralize by status
res, err = exec.Query("CollateralizeByStatus", types.Encode(&pkt.ReqCollateralizeByStatus{Status: 1}))
assert.Nil(t, err)
......
......@@ -14,6 +14,13 @@ import (
func (c *Collateralize) execLocal(tx *types.Transaction, receipt *types.ReceiptData) (*types.LocalDBSet, error) {
set := &types.LocalDBSet{}
var collTable, recordTable *table.Table
cfg := c.GetAPI().GetConfig()
if cfg.IsDappFork(c.GetHeight(), pty.CollateralizeX, pty.ForkCollateralizeTableUpdate) {
recordTable = pty.NewRecordTable(c.GetLocalDB())
collTable = pty.NewCollateralizeTable(c.GetLocalDB())
}
for _, item := range receipt.Logs {
if item.Ty >= pty.TyLogCollateralizeCreate && item.Ty <= pty.TyLogCollateralizeRetrieve {
var collateralizeLog pty.ReceiptCollateralize
......@@ -23,14 +30,18 @@ func (c *Collateralize) execLocal(tx *types.Transaction, receipt *types.ReceiptD
}
if item.Ty == pty.TyLogCollateralizeCreate || item.Ty == pty.TyLogCollateralizeRetrieve {
collTable = pty.NewCollateralizeTable(c.GetLocalDB())
if !cfg.IsDappFork(c.GetHeight(), pty.CollateralizeX, pty.ForkCollateralizeTableUpdate) {
collTable = pty.NewCollateralizeTable(c.GetLocalDB())
}
err = collTable.Replace(&pty.ReceiptCollateralize{CollateralizeId: collateralizeLog.CollateralizeId, Status: collateralizeLog.Status,
AccountAddr: collateralizeLog.AccountAddr})
if err != nil {
return nil, err
}
} else {
recordTable = pty.NewRecordTable(c.GetLocalDB())
if !cfg.IsDappFork(c.GetHeight(), pty.CollateralizeX, pty.ForkCollateralizeTableUpdate) {
recordTable = pty.NewRecordTable(c.GetLocalDB())
}
err = recordTable.Replace(&pty.ReceiptCollateralize{CollateralizeId: collateralizeLog.CollateralizeId, Status: collateralizeLog.Status,
RecordId: collateralizeLog.RecordId, AccountAddr: collateralizeLog.AccountAddr})
if err != nil {
......
......@@ -26,6 +26,7 @@ func init() {
func InitFork(cfg *types.Chain33Config) {
cfg.RegisterDappFork(CollateralizeX, "Enable", 0)
cfg.RegisterDappFork(CollateralizeX, ForkCollateralizeTableUpdate, 0)
}
func InitExecutor(cfg *types.Chain33Config) {
......
......@@ -51,3 +51,7 @@ const (
CollateralizeUserStatusExpireLiquidate
CollateralizeUserStatusClose
)
var (
ForkCollateralizeTableUpdate = "ForkCollateralizeTableUpdate"
)
\ No newline at end of file
......@@ -14,6 +14,13 @@ import (
func (c *Issuance) execLocal(tx *types.Transaction, receipt *types.ReceiptData) (*types.LocalDBSet, error) {
set := &types.LocalDBSet{}
var IDtable, recordTable *table.Table
cfg := c.GetAPI().GetConfig()
if cfg.IsDappFork(c.GetHeight(), pty.IssuanceX, pty.ForkIssuanceTableUpdate) {
recordTable = pty.NewRecordTable(c.GetLocalDB())
IDtable = pty.NewIssuanceTable(c.GetLocalDB())
}
for _, item := range receipt.Logs {
if item.Ty >= pty.TyLogIssuanceCreate && item.Ty <= pty.TyLogIssuanceClose {
var issuanceLog pty.ReceiptIssuance
......@@ -23,13 +30,17 @@ func (c *Issuance) execLocal(tx *types.Transaction, receipt *types.ReceiptData)
}
if item.Ty == pty.TyLogIssuanceCreate || item.Ty == pty.TyLogIssuanceClose {
IDtable = pty.NewIssuanceTable(c.GetLocalDB())
if !cfg.IsDappFork(c.GetHeight(), pty.IssuanceX, pty.ForkIssuanceTableUpdate) {
IDtable = pty.NewIssuanceTable(c.GetLocalDB())
}
err = IDtable.Replace(&pty.ReceiptIssuanceID{IssuanceId: issuanceLog.IssuanceId, Status: issuanceLog.Status})
if err != nil {
return nil, err
}
} else {
recordTable = pty.NewRecordTable(c.GetLocalDB())
if !cfg.IsDappFork(c.GetHeight(), pty.IssuanceX, pty.ForkIssuanceTableUpdate) {
recordTable = pty.NewRecordTable(c.GetLocalDB())
}
err = recordTable.Replace(&pty.ReceiptIssuance{IssuanceId: issuanceLog.IssuanceId, Status: issuanceLog.Status,
DebtId: issuanceLog.DebtId, AccountAddr: issuanceLog.AccountAddr})
if err != nil {
......
......@@ -64,6 +64,7 @@ func manageKeySet(key string, value string, db dbm.KV) {
func initEnv() *execEnv {
cfg := types.NewChain33Config(types.GetDefaultCfgstring())
cfg.SetTitleOnlyForTest("chain33")
cfg.RegisterDappFork(pkt.IssuanceX, pkt.ForkIssuanceTableUpdate, 0)
Init(pkt.IssuanceX, cfg, nil)
_, ldb, kvdb := util.CreateTestDB()
......@@ -483,12 +484,12 @@ func TestIssuance(t *testing.T) {
assert.NotNil(t, set)
util.SaveKVList(env.ldb, set.KV)
// query issuance by status
res, err = exec.Query("IssuanceRecordsByStatus",
types.Encode(&pkt.ReqIssuanceRecords{Status: 3}))
res, err = exec.Query("IssuanceRecordsByStatus", types.Encode(&pkt.ReqIssuanceRecords{Status: 3}))
assert.Nil(t, err)
assert.NotNil(t, res)
res, err = exec.Query("IssuanceRecordsByStatus",
types.Encode(&pkt.ReqIssuanceRecords{Status: 4}))
res, err = exec.Query("IssuanceRecordsByStatus", types.Encode(&pkt.ReqIssuanceRecords{Status: 4}))
assert.Nil(t, res)
res, err = exec.Query("IssuanceRecordsByStatus", types.Encode(&pkt.ReqIssuanceRecords{Status: 1}))
assert.Nil(t, res)
// expire liquidate
......@@ -545,8 +546,7 @@ func TestIssuance(t *testing.T) {
assert.NotNil(t, set)
util.SaveKVList(env.ldb, set.KV)
// query issuance by status
res, err = exec.Query("IssuanceRecordsByStatus",
types.Encode(&pkt.ReqIssuanceRecords{Status: 5}))
res, err = exec.Query("IssuanceRecordsByStatus", types.Encode(&pkt.ReqIssuanceRecords{Status: 5}))
assert.Nil(t, err)
assert.NotNil(t, res)
......@@ -584,7 +584,7 @@ func TestIssuance(t *testing.T) {
// issuance create
p12 := &pkt.IssuanceCreateTx{
TotalBalance: 200,
DebtCeiling: 200,
DebtCeiling: 100,
LiquidationRatio: 0.25,
Period: 5,
}
......
......@@ -26,6 +26,7 @@ func init() {
func InitFork(cfg *types.Chain33Config) {
cfg.RegisterDappFork(IssuanceX, "Enable", 0)
cfg.RegisterDappFork(IssuanceX, ForkIssuanceTableUpdate, 0)
}
func InitExecutor(cfg *types.Chain33Config) {
......
......@@ -49,3 +49,7 @@ const (
ManageKey = "issuance-manage"
FundKey = "issuance-fund"
)
var (
ForkIssuanceTableUpdate = "ForkIssuanceTableUpdate"
)
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