From f34d60eedccae0a5811521f9282f80ea87f368c4 Mon Sep 17 00:00:00 2001 From: Qi Xiao Date: Fri, 12 Apr 2019 15:59:20 +0800 Subject: [PATCH 1/4] Update provide service process handler --- blockproducer/chain_test.go | 49 +++++++++++++++++++++++++++++++++---- blockproducer/metastate.go | 11 +++++++++ 2 files changed, 55 insertions(+), 5 deletions(-) diff --git a/blockproducer/chain_test.go b/blockproducer/chain_test.go index fb560d7a2..840b7cb14 100644 --- a/blockproducer/chain_test.go +++ b/blockproducer/chain_test.go @@ -302,6 +302,45 @@ func TestChain(t *testing.T) { }) }) + Convey("Multiple provide service", func() { + var ( + nonce pi.AccountNonce + t1, t2 pi.Transaction + loaded bool + po1, po2 *types.ProviderProfile + bal1, bal2, bal3 uint64 + ) + + // Create transaction for testing + bal1, loaded = chain.headBranch.preview.loadAccountTokenBalance(addr1, types.Particle) + So(loaded, ShouldBeTrue) + nonce, err = chain.nextNonce(addr1) + So(err, ShouldBeNil) + So(nonce, ShouldEqual, 1) + t1, err = newProvideService(nonce, priv1, addr1) + So(err, ShouldBeNil) + t2, err = newProvideService(nonce+1, priv1, addr1) + So(err, ShouldBeNil) + err = chain.storeTx(t1) + So(err, ShouldBeNil) + err = chain.produceBlock(begin.Add(chain.period).UTC()) + So(err, ShouldBeNil) + bal2, loaded = chain.headBranch.preview.loadAccountTokenBalance(addr1, types.Particle) + So(loaded, ShouldBeTrue) + po1, loaded = chain.headBranch.preview.loadProviderObject(addr1) + So(loaded, ShouldBeTrue) + So(bal2-bal1, ShouldEqual, po1.Deposit) + err = chain.storeTx(t2) + So(err, ShouldBeNil) + err = chain.produceBlock(begin.Add(2 * chain.period).UTC()) + So(err, ShouldBeNil) + bal3, loaded = chain.headBranch.preview.loadAccountTokenBalance(addr1, types.Particle) + So(bal3, ShouldEqual, bal2) + po2, loaded = chain.headBranch.preview.loadProviderObject(addr1) + So(po2, ShouldResemble, po1) + So(po2 == po1, ShouldBeFalse) + }) + Convey("When transfer transactions are added", func() { var ( nonce pi.AccountNonce @@ -336,7 +375,7 @@ func TestChain(t *testing.T) { So(err, ShouldBeNil) // Create a sibling block from fork#0 and apply - _, bl, err = f0.produceBlock(2, begin.Add(2*chain.period).UTC(), addr2, priv2) + _, bl, err = f0.produceBlock(2, begin.Add(2 * chain.period).UTC(), addr2, priv2) So(err, ShouldBeNil) So(bl, ShouldNotBeNil) err = chain.pushBlock(bl) @@ -357,7 +396,7 @@ func TestChain(t *testing.T) { err = chain.produceBlock(begin.Add(3 * chain.period).UTC()) So(err, ShouldBeNil) // Create a sibling block from fork#1 and apply - f1, bl, err = f1.produceBlock(3, begin.Add(3*chain.period).UTC(), addr2, priv2) + f1, bl, err = f1.produceBlock(3, begin.Add(3 * chain.period).UTC(), addr2, priv2) So(err, ShouldBeNil) So(bl, ShouldNotBeNil) f1.preview.commit() @@ -370,7 +409,7 @@ func TestChain(t *testing.T) { So(err, ShouldBeNil) // Create a sibling block from fork#1 and apply f1, bl, err = f1.produceBlock( - i, begin.Add(time.Duration(i)*chain.period).UTC(), addr2, priv2) + i, begin.Add(time.Duration(i) * chain.period).UTC(), addr2, priv2) So(err, ShouldBeNil) So(bl, ShouldNotBeNil) f1.preview.commit() @@ -407,13 +446,13 @@ func TestChain(t *testing.T) { f1.addTx(t2) f1.addTx(t3) f1.addTx(t4) - f1, bl, err = f1.produceBlock(7, begin.Add(8*chain.period).UTC(), addr2, priv2) + f1, bl, err = f1.produceBlock(7, begin.Add(8 * chain.period).UTC(), addr2, priv2) So(err, ShouldBeNil) So(bl, ShouldNotBeNil) f1.preview.commit() err = chain.pushBlock(bl) So(err, ShouldBeNil) - f1, bl, err = f1.produceBlock(8, begin.Add(9*chain.period).UTC(), addr2, priv2) + f1, bl, err = f1.produceBlock(8, begin.Add(9 * chain.period).UTC(), addr2, priv2) So(err, ShouldBeNil) So(bl, ShouldNotBeNil) f1.preview.commit() diff --git a/blockproducer/metastate.go b/blockproducer/metastate.go index 43fcb8252..d2636543d 100644 --- a/blockproducer/metastate.go +++ b/blockproducer/metastate.go @@ -516,6 +516,17 @@ func (s *metaState) updateProviderList(tx *types.ProvideService) (err error) { return } + // load previous provider object + po, loaded := s.loadProviderObject(sender) + if loaded { + // refund + if err = s.increaseAccountStableBalance(sender, po.Deposit); err != nil { + return + } + + s.deleteProviderObject(sender) + } + // deposit var ( minDeposit = conf.GConf.MinProviderDeposit From 75dbfd59f60bfea8d8ecc4ccd01bd17eab8c79d7 Mon Sep 17 00:00:00 2001 From: Levente Liu Date: Fri, 12 Apr 2019 16:38:14 +0800 Subject: [PATCH 2/4] Fix test case --- blockproducer/chain_test.go | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/blockproducer/chain_test.go b/blockproducer/chain_test.go index 840b7cb14..393e75283 100644 --- a/blockproducer/chain_test.go +++ b/blockproducer/chain_test.go @@ -119,8 +119,10 @@ func TestChain(t *testing.T) { }, Transactions: []pi.Transaction{ types.NewBaseAccount(&types.Account{ - Address: addr1, - TokenBalance: [5]uint64{1000, 1000, 1000, 1000, 1000}, + Address: addr1, + TokenBalance: [5]uint64{ + 1000000, 1000000, 1000000, 1000000, 1000000, + }, }), }, } @@ -329,7 +331,7 @@ func TestChain(t *testing.T) { So(loaded, ShouldBeTrue) po1, loaded = chain.headBranch.preview.loadProviderObject(addr1) So(loaded, ShouldBeTrue) - So(bal2-bal1, ShouldEqual, po1.Deposit) + So(bal1-bal2, ShouldEqual, po1.Deposit) err = chain.storeTx(t2) So(err, ShouldBeNil) err = chain.produceBlock(begin.Add(2 * chain.period).UTC()) @@ -375,7 +377,7 @@ func TestChain(t *testing.T) { So(err, ShouldBeNil) // Create a sibling block from fork#0 and apply - _, bl, err = f0.produceBlock(2, begin.Add(2 * chain.period).UTC(), addr2, priv2) + _, bl, err = f0.produceBlock(2, begin.Add(2*chain.period).UTC(), addr2, priv2) So(err, ShouldBeNil) So(bl, ShouldNotBeNil) err = chain.pushBlock(bl) @@ -396,7 +398,7 @@ func TestChain(t *testing.T) { err = chain.produceBlock(begin.Add(3 * chain.period).UTC()) So(err, ShouldBeNil) // Create a sibling block from fork#1 and apply - f1, bl, err = f1.produceBlock(3, begin.Add(3 * chain.period).UTC(), addr2, priv2) + f1, bl, err = f1.produceBlock(3, begin.Add(3*chain.period).UTC(), addr2, priv2) So(err, ShouldBeNil) So(bl, ShouldNotBeNil) f1.preview.commit() @@ -409,7 +411,7 @@ func TestChain(t *testing.T) { So(err, ShouldBeNil) // Create a sibling block from fork#1 and apply f1, bl, err = f1.produceBlock( - i, begin.Add(time.Duration(i) * chain.period).UTC(), addr2, priv2) + i, begin.Add(time.Duration(i)*chain.period).UTC(), addr2, priv2) So(err, ShouldBeNil) So(bl, ShouldNotBeNil) f1.preview.commit() @@ -446,13 +448,13 @@ func TestChain(t *testing.T) { f1.addTx(t2) f1.addTx(t3) f1.addTx(t4) - f1, bl, err = f1.produceBlock(7, begin.Add(8 * chain.period).UTC(), addr2, priv2) + f1, bl, err = f1.produceBlock(7, begin.Add(8*chain.period).UTC(), addr2, priv2) So(err, ShouldBeNil) So(bl, ShouldNotBeNil) f1.preview.commit() err = chain.pushBlock(bl) So(err, ShouldBeNil) - f1, bl, err = f1.produceBlock(8, begin.Add(9 * chain.period).UTC(), addr2, priv2) + f1, bl, err = f1.produceBlock(8, begin.Add(9*chain.period).UTC(), addr2, priv2) So(err, ShouldBeNil) So(bl, ShouldNotBeNil) f1.preview.commit() From 7e2d7839dbdb1800533daf6410e73e5b84fd9f13 Mon Sep 17 00:00:00 2001 From: Qi Xiao Date: Wed, 15 May 2019 14:21:34 +0800 Subject: [PATCH 3/4] Add CIP compatibility block height switches --- blockproducer/branch.go | 6 +-- blockproducer/chain.go | 4 +- blockproducer/chain_test.go | 5 +- blockproducer/metastate.go | 30 ++++++----- blockproducer/metastate_test.go | 94 ++++++++++++++++----------------- conf/parameters.go | 5 ++ 6 files changed, 76 insertions(+), 68 deletions(-) diff --git a/blockproducer/branch.go b/blockproducer/branch.go index 6b9c0bf45..3b972b4c4 100644 --- a/blockproducer/branch.go +++ b/blockproducer/branch.go @@ -78,7 +78,7 @@ func newBranch( } inst.packed[k] = v // Apply to preview - if err = inst.preview.apply(v); err != nil { + if err = inst.preview.apply(v, bn.height); err != nil { return } } @@ -154,7 +154,7 @@ func (b *branch) applyBlock(n *blockNode) (br *branch, err error) { } cpy.packed[k] = v // Apply to preview - if err = cpy.preview.apply(v); err != nil { + if err = cpy.preview.apply(v, n.height); err != nil { return } } @@ -199,7 +199,7 @@ func (b *branch) produceBlock( out := make([]pi.Transaction, 0, packCount) for _, v := range txs { var k = v.Hash() - if ierr = cpy.preview.apply(v); ierr != nil { + if ierr = cpy.preview.apply(v, h); ierr != nil { continue } delete(cpy.unpacked, k) diff --git a/blockproducer/chain.go b/blockproducer/chain.go index 87db6075e..d6f26e9cc 100644 --- a/blockproducer/chain.go +++ b/blockproducer/chain.go @@ -168,7 +168,7 @@ func NewChainWithContext(ctx context.Context, cfg *Config) (c *Chain, err error) if !existed { var init = newMetaState() for _, v := range cfg.Genesis.Transactions { - if ierr = init.apply(v); ierr != nil { + if ierr = init.apply(v, 0); ierr != nil { err = errors.Wrap(ierr, "failed to initialize immutable state") return } @@ -723,7 +723,7 @@ func (c *Chain) replaceAndSwitchToBranch( for _, b := range newIrres { txCount += b.txCount for _, tx := range b.load().Transactions { - if err := c.immutable.apply(tx); err != nil { + if err := c.immutable.apply(tx, newBranch.head.height); err != nil { log.WithError(err).Fatal("failed to apply block to immutable database") } delete(resultTxPool, tx.Hash()) // Remove confirmed transaction diff --git a/blockproducer/chain_test.go b/blockproducer/chain_test.go index 393e75283..4803701cb 100644 --- a/blockproducer/chain_test.go +++ b/blockproducer/chain_test.go @@ -27,6 +27,7 @@ import ( . "github.com/smartystreets/goconvey/convey" pi "github.com/CovenantSQL/CovenantSQL/blockproducer/interfaces" + "github.com/CovenantSQL/CovenantSQL/conf" "github.com/CovenantSQL/CovenantSQL/crypto" "github.com/CovenantSQL/CovenantSQL/crypto/asymmetric" "github.com/CovenantSQL/CovenantSQL/crypto/hash" @@ -325,7 +326,7 @@ func TestChain(t *testing.T) { So(err, ShouldBeNil) err = chain.storeTx(t1) So(err, ShouldBeNil) - err = chain.produceBlock(begin.Add(chain.period).UTC()) + err = chain.produceBlock(begin.Add(chain.period * conf.BPHeightCIPFixProvideService).UTC()) So(err, ShouldBeNil) bal2, loaded = chain.headBranch.preview.loadAccountTokenBalance(addr1, types.Particle) So(loaded, ShouldBeTrue) @@ -334,7 +335,7 @@ func TestChain(t *testing.T) { So(bal1-bal2, ShouldEqual, po1.Deposit) err = chain.storeTx(t2) So(err, ShouldBeNil) - err = chain.produceBlock(begin.Add(2 * chain.period).UTC()) + err = chain.produceBlock(begin.Add(chain.period * (conf.BPHeightCIPFixProvideService + 1)).UTC()) So(err, ShouldBeNil) bal3, loaded = chain.headBranch.preview.loadAccountTokenBalance(addr1, types.Particle) So(bal3, ShouldEqual, bal2) diff --git a/blockproducer/metastate.go b/blockproducer/metastate.go index d2636543d..c625f06ec 100644 --- a/blockproducer/metastate.go +++ b/blockproducer/metastate.go @@ -509,22 +509,24 @@ func (s *metaState) increaseNonce(addr proto.AccountAddress) (err error) { return } -func (s *metaState) updateProviderList(tx *types.ProvideService) (err error) { +func (s *metaState) updateProviderList(tx *types.ProvideService, height uint32) (err error) { sender, err := crypto.PubKeyHash(tx.Signee) if err != nil { err = errors.Wrap(err, "updateProviderList failed") return } - // load previous provider object - po, loaded := s.loadProviderObject(sender) - if loaded { - // refund - if err = s.increaseAccountStableBalance(sender, po.Deposit); err != nil { - return - } + if height >= conf.BPHeightCIPFixProvideService { + // load previous provider object + po, loaded := s.loadProviderObject(sender) + if loaded { + // refund + if err = s.increaseAccountStableBalance(sender, po.Deposit); err != nil { + return + } - s.deleteProviderObject(sender) + s.deleteProviderObject(sender) + } } // deposit @@ -1124,7 +1126,7 @@ func (s *metaState) transferSQLChainTokenBalance(transfer *types.Transfer) (err return } -func (s *metaState) applyTransaction(tx pi.Transaction) (err error) { +func (s *metaState) applyTransaction(tx pi.Transaction, height uint32) (err error) { switch t := tx.(type) { case *types.Transfer: err = s.transferSQLChainTokenBalance(t) @@ -1135,7 +1137,7 @@ func (s *metaState) applyTransaction(tx pi.Transaction) (err error) { case *types.BaseAccount: err = s.storeBaseAccount(t.Address, &t.Account) case *types.ProvideService: - err = s.updateProviderList(t) + err = s.updateProviderList(t, height) case *types.CreateDatabase: err = s.matchProvidersWithUser(t) case *types.UpdatePermission: @@ -1146,7 +1148,7 @@ func (s *metaState) applyTransaction(tx pi.Transaction) (err error) { err = s.updateBilling(t) case *pi.TransactionWrapper: // call again using unwrapped transaction - err = s.applyTransaction(t.Unwrap()) + err = s.applyTransaction(t.Unwrap(), height) default: err = ErrUnknownTransactionType } @@ -1170,7 +1172,7 @@ func (s *metaState) generateGenesisBlock(dbID proto.DatabaseID, tx *types.Create return } -func (s *metaState) apply(t pi.Transaction) (err error) { +func (s *metaState) apply(t pi.Transaction, height uint32) (err error) { log.Infof("get tx: %s", t.GetTransactionType()) // NOTE(leventeliu): bypass pool in this method. var ( @@ -1195,7 +1197,7 @@ func (s *metaState) apply(t pi.Transaction) (err error) { return } // Try to apply transaction to metaState - if err = s.applyTransaction(t); err != nil { + if err = s.applyTransaction(t, height); err != nil { log.WithError(err).Debug("apply transaction failed") return } diff --git a/blockproducer/metastate_test.go b/blockproducer/metastate_test.go index 0978dc5f1..1e3a73fc9 100644 --- a/blockproducer/metastate_test.go +++ b/blockproducer/metastate_test.go @@ -502,20 +502,20 @@ func TestMetaState(t *testing.T) { So(err, ShouldBeNil) err = t2.Sign(privKey1) So(err, ShouldBeNil) - err = ms.apply(t0) + err = ms.apply(t0, 0) So(err, ShouldBeNil) ms.commit() - err = ms.apply(t1) + err = ms.apply(t1, 0) So(err, ShouldBeNil) ms.commit() - err = ms.apply(t2) + err = ms.apply(t2, 0) So(err, ShouldBeNil) Convey("The metaState should report error if tx fails verification", func() { t1.Nonce = pi.AccountNonce(10) err = t1.Sign(privKey1) So(err, ShouldBeNil) - err = ms.apply(t1) + err = ms.apply(t1, 0) So(err, ShouldEqual, ErrInvalidAccountNonce) t1.Nonce, err = ms.nextNonce(addr1) So(err, ShouldBeNil) @@ -528,7 +528,7 @@ func TestMetaState(t *testing.T) { So(n, ShouldEqual, 3) }) Convey("The metaState should report error on unknown transaction type", func() { - err = ms.applyTransaction(nil) + err = ms.applyTransaction(nil, 0) So(err, ShouldEqual, ErrUnknownTransactionType) }) }) @@ -598,7 +598,7 @@ func TestMetaState(t *testing.T) { txs[5].Sign(privKey2) txs[6].Sign(privKey2) for _, tx := range txs { - err = ms.apply(tx) + err = ms.apply(tx, 0) So(err, ShouldBeNil) } ms.commit() @@ -676,7 +676,7 @@ func TestMetaState(t *testing.T) { err = txs[3].Sign(privKey4) So(err, ShouldBeNil) for i := range txs { - err = ms.apply(txs[i]) + err = ms.apply(txs[i], 0) So(err, ShouldBeNil) ms.commit() } @@ -808,19 +808,19 @@ func TestMetaState(t *testing.T) { err = invalidCd8.Sign(privKey2) So(err, ShouldBeNil) - err = ms.apply(&invalidPs) + err = ms.apply(&invalidPs, 0) So(errors.Cause(err), ShouldEqual, ErrInsufficientBalance) - err = ms.apply(&invalidCd1) + err = ms.apply(&invalidCd1, 0) So(errors.Cause(err), ShouldEqual, ErrInvalidSender) - err = ms.apply(&invalidCd2) + err = ms.apply(&invalidCd2, 0) So(errors.Cause(err), ShouldEqual, ErrNoSuchMiner) - err = ms.apply(&invalidCd3) + err = ms.apply(&invalidCd3, 0) So(errors.Cause(err), ShouldEqual, ErrInsufficientAdvancePayment) - err = ms.apply(&invalidCd4) + err = ms.apply(&invalidCd4, 0) So(errors.Cause(err), ShouldEqual, ErrInvalidGasPrice) - err = ms.apply(&invalidCd5) + err = ms.apply(&invalidCd5, 0) So(errors.Cause(err), ShouldEqual, ErrNoEnoughMiner) - err = ms.apply(&invalidCd6) + err = ms.apply(&invalidCd6, 0) So(errors.Cause(err), ShouldEqual, ErrInvalidMinerCount) ms.dirty.provider[proto.AccountAddress(hash.HashH([]byte("1")))] = &types.ProviderProfile{ TargetUser: nil, @@ -869,7 +869,7 @@ func TestMetaState(t *testing.T) { TokenType: 0, NodeID: "", } - err = ms.apply(&invalidCd7) + err = ms.apply(&invalidCd7, 0) So(errors.Cause(err), ShouldEqual, ErrNoEnoughMiner) ms.readonly.provider[proto.AccountAddress(hash.HashH([]byte("9")))] = &types.ProviderProfile{ @@ -919,7 +919,7 @@ func TestMetaState(t *testing.T) { TokenType: 0, NodeID: "0000001", } - err = ms.apply(&invalidCd8) + err = ms.apply(&invalidCd8, 0) So(err, ShouldBeNil) dbID := proto.FromAccountAndNonce(addr2, uint32(invalidCd8.Nonce)) @@ -975,17 +975,17 @@ func TestMetaState(t *testing.T) { var b1, b2 uint64 b1, loaded = ms.loadAccountTokenBalance(addr2, types.Particle) - err = ms.apply(&ps) + err = ms.apply(&ps, 0) So(err, ShouldBeNil) ms.commit() b2, loaded = ms.loadAccountTokenBalance(addr2, types.Particle) So(loaded, ShouldBeTrue) So(b1-b2, ShouldEqual, conf.GConf.MinProviderDeposit) - err = ms.apply(&cd2) + err = ms.apply(&cd2, 0) So(errors.Cause(err), ShouldEqual, ErrMinerUserNotMatch) b1, loaded = ms.loadAccountTokenBalance(addr1, types.Particle) So(loaded, ShouldBeTrue) - err = ms.apply(&cd1) + err = ms.apply(&cd1, 0) So(err, ShouldBeNil) ms.commit() b2, loaded = ms.loadAccountTokenBalance(addr1, types.Particle) @@ -1009,13 +1009,13 @@ func TestMetaState(t *testing.T) { } err = up.Sign(privKey1) So(err, ShouldBeNil) - err = ms.apply(&up) + err = ms.apply(&up, 0) So(errors.Cause(err), ShouldEqual, ErrDatabaseNotFound) up.Permission = types.UserPermissionFromRole(types.Void) up.TargetSQLChain = dbAccount err = up.Sign(privKey1) So(err, ShouldBeNil) - err = ms.apply(&up) + err = ms.apply(&up, 0) So(err, ShouldBeNil) // test permission update // addr1(admin) update addr3 as admin @@ -1024,7 +1024,7 @@ func TestMetaState(t *testing.T) { up.Permission = types.UserPermissionFromRole(types.Admin) err = up.Sign(privKey1) So(err, ShouldBeNil) - err = ms.apply(&up) + err = ms.apply(&up, 0) So(err, ShouldBeNil) ms.commit() // addr3(admin) update addr4 as read @@ -1033,7 +1033,7 @@ func TestMetaState(t *testing.T) { up.Permission = types.UserPermissionFromRole(types.Read) err = up.Sign(privKey3) So(err, ShouldBeNil) - err = ms.apply(&up) + err = ms.apply(&up, 0) So(err, ShouldBeNil) ms.commit() // addr3(admin) update addr1(admin) as read @@ -1041,7 +1041,7 @@ func TestMetaState(t *testing.T) { up.Nonce = up.Nonce + 1 err = up.Sign(privKey3) So(err, ShouldBeNil) - err = ms.apply(&up) + err = ms.apply(&up, 0) So(err, ShouldBeNil) ms.commit() // addr3(admin) update addr3(admin) as read fail @@ -1050,13 +1050,13 @@ func TestMetaState(t *testing.T) { up.Nonce = up.Nonce + 1 err = up.Sign(privKey3) So(err, ShouldBeNil) - err = ms.apply(&up) + err = ms.apply(&up, 0) So(errors.Cause(err), ShouldEqual, ErrNoSuperUserLeft) // addr1(read) update addr3(admin) fail up.Nonce = cd1.Nonce + 3 err = up.Sign(privKey1) So(err, ShouldBeNil) - err = ms.apply(&up) + err = ms.apply(&up, 0) So(errors.Cause(err), ShouldEqual, ErrAccountPermissionDeny) co, loaded = ms.loadSQLChainObject(dbID) @@ -1093,7 +1093,7 @@ func TestMetaState(t *testing.T) { trans1.Nonce = nonce err = trans1.Sign(privKey1) So(err, ShouldBeNil) - err = ms.apply(trans1) + err = ms.apply(trans1, 0) So(err, ShouldBeNil) ms.commit() addr1B2, ok := ms.loadAccountTokenBalance(addr1, types.Particle) @@ -1123,21 +1123,21 @@ func TestMetaState(t *testing.T) { So(dbID, ShouldEqual, dbAccount.DatabaseID()) trans2.Nonce = nonce //no sign err - err = ms.apply(trans2) + err = ms.apply(trans2, 0) So(err, ShouldEqual, ErrInvalidSender) //wrong key sign err err = trans2.Sign(privKey2) So(err, ShouldBeNil) - err = ms.apply(trans2) + err = ms.apply(trans2, 0) So(err, ShouldNotBeNil) //invalid sign copy([]byte("invalid hash"), trans2.DataHash[:]) - err = ms.apply(trans2) + err = ms.apply(trans2, 0) So(err, ShouldNotBeNil) //correct transfer err = trans2.Sign(privKey3) So(err, ShouldBeNil) - err = ms.apply(trans2) + err = ms.apply(trans2, 0) So(err, ShouldBeNil) // ms.commit() profile, ok = ms.loadSQLChainObject(dbID) @@ -1175,7 +1175,7 @@ func TestMetaState(t *testing.T) { ub.Nonce = nonce err = ub.Sign(privKey2) So(err, ShouldBeNil) - err = ms.apply(ub) + err = ms.apply(ub, 0) So(err, ShouldBeNil) ms.commit() profile, ok = ms.loadSQLChainObject(dbID) @@ -1199,7 +1199,7 @@ func TestMetaState(t *testing.T) { trans3.Nonce = nonce err = trans3.Sign(privKey3) So(err, ShouldBeNil) - err = ms.apply(trans3) + err = ms.apply(trans3, 0) So(err, ShouldEqual, ErrInsufficientTransfer) profile, ok = ms.loadSQLChainObject(dbID) So(ok, ShouldBeTrue) @@ -1222,7 +1222,7 @@ func TestMetaState(t *testing.T) { trans5.Nonce = nonce err = trans5.Sign(privKey3) So(err, ShouldBeNil) - err = ms.apply(trans5) + err = ms.apply(trans5, 0) So(err, ShouldEqual, ErrInsufficientBalance) profile, ok = ms.loadSQLChainObject(dbID) So(ok, ShouldBeTrue) @@ -1245,7 +1245,7 @@ func TestMetaState(t *testing.T) { trans6.Nonce = nonce err = trans6.Sign(privKey3) So(err, ShouldBeNil) - err = ms.apply(trans6) + err = ms.apply(trans6, 0) So(err, ShouldEqual, ErrWrongTokenType) profile, ok = ms.loadSQLChainObject(dbID) So(ok, ShouldBeTrue) @@ -1268,7 +1268,7 @@ func TestMetaState(t *testing.T) { trans4.Nonce = nonce err = trans4.Sign(privKey3) So(err, ShouldBeNil) - err = ms.apply(trans4) + err = ms.apply(trans4, 0) ms.commit() profile, ok = ms.loadSQLChainObject(dbID) So(ok, ShouldBeTrue) @@ -1283,7 +1283,7 @@ func TestMetaState(t *testing.T) { invalidIk1 := &types.IssueKeys{} err = invalidIk1.Sign(privKey1) So(err, ShouldBeNil) - err = ms.apply(invalidIk1) + err = ms.apply(invalidIk1, 0) So(err, ShouldEqual, ErrInvalidAccountNonce) invalidIk2 := &types.IssueKeys{ IssueKeysHeader: types.IssueKeysHeader{ @@ -1293,7 +1293,7 @@ func TestMetaState(t *testing.T) { } err = invalidIk2.Sign(privKey3) So(err, ShouldBeNil) - err = ms.apply(invalidIk2) + err = ms.apply(invalidIk2, 0) So(err, ShouldEqual, ErrDatabaseNotFound) invalidIk3 := &types.IssueKeys{ IssueKeysHeader: types.IssueKeysHeader{ @@ -1303,7 +1303,7 @@ func TestMetaState(t *testing.T) { } err = invalidIk3.Sign(privKey1) So(err, ShouldBeNil) - err = ms.apply(invalidIk3) + err = ms.apply(invalidIk3, 0) So(err, ShouldEqual, ErrAccountPermissionDeny) ik1 := &types.IssueKeys{ IssueKeysHeader: types.IssueKeysHeader{ @@ -1313,7 +1313,7 @@ func TestMetaState(t *testing.T) { } err = ik1.Sign(privKey3) So(err, ShouldBeNil) - err = ms.apply(ik1) + err = ms.apply(ik1, 0) So(err, ShouldBeNil) ms.commit() encryptKey := "12345" @@ -1331,7 +1331,7 @@ func TestMetaState(t *testing.T) { } err = ik2.Sign(privKey3) So(err, ShouldBeNil) - err = ms.apply(ik2) + err = ms.apply(ik2, 0) So(err, ShouldBeNil) ms.commit() @@ -1356,7 +1356,7 @@ func TestMetaState(t *testing.T) { ub1.Version = int32(ub1.HSPDefaultVersion()) err = ub1.Sign(privKey1) So(err, ShouldBeNil) - err = ms.apply(ub1) + err = ms.apply(ub1, 0) So(errors.Cause(err), ShouldEqual, ErrDatabaseNotFound) trans1 := types.NewTransfer(&types.TransferHeader{ Sender: addr1, @@ -1369,7 +1369,7 @@ func TestMetaState(t *testing.T) { trans1.Nonce = nonce err = trans1.Sign(privKey1) So(err, ShouldBeNil) - err = ms.apply(trans1) + err = ms.apply(trans1, 0) So(err, ShouldBeNil) ms.commit() trans2 := types.NewTransfer(&types.TransferHeader{ @@ -1383,7 +1383,7 @@ func TestMetaState(t *testing.T) { trans2.Nonce = nonce err = trans2.Sign(privKey3) So(err, ShouldBeNil) - err = ms.apply(trans2) + err = ms.apply(trans2, 0) So(err, ShouldBeNil) ms.commit() trans3 := types.NewTransfer(&types.TransferHeader{ @@ -1397,7 +1397,7 @@ func TestMetaState(t *testing.T) { trans3.Nonce = nonce err = trans3.Sign(privKey4) So(err, ShouldBeNil) - err = ms.apply(trans3) + err = ms.apply(trans3, 0) So(err, ShouldBeNil) ms.commit() @@ -1447,7 +1447,7 @@ func TestMetaState(t *testing.T) { ub2.Version = int32(ub2.HSPDefaultVersion()) err = ub2.Sign(privKey2) So(err, ShouldBeNil) - err = ms.apply(ub2) + err = ms.apply(ub2, 0) ms.commit() sqlchain, loaded := ms.loadSQLChainObject(dbID) So(loaded, ShouldBeTrue) @@ -1499,7 +1499,7 @@ func TestMetaState(t *testing.T) { ub3.Version = int32(ub3.HSPDefaultVersion()) err = ub3.Sign(privKey2) So(err, ShouldBeNil) - err = ms.apply(ub3) + err = ms.apply(ub3, 0) So(err, ShouldBeNil) sqlchain, loaded = ms.loadSQLChainObject(dbID) So(loaded, ShouldBeTrue) diff --git a/conf/parameters.go b/conf/parameters.go index 0025fda57..84a7e0576 100644 --- a/conf/parameters.go +++ b/conf/parameters.go @@ -25,3 +25,8 @@ const ( const ( BPStartupRequiredReachableCount = 2 // NOTE: this includes myself ) + +// Block producer chain improvements proposal heights. +const ( + BPHeightCIPFixProvideService = 700000 // inclusive +) From ea69f9f18d1092dbab6a4e8568b398410cb8461d Mon Sep 17 00:00:00 2001 From: Qi Xiao Date: Wed, 15 May 2019 14:31:54 +0800 Subject: [PATCH 4/4] Update CIP take effect height --- conf/parameters.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/parameters.go b/conf/parameters.go index 84a7e0576..c6f9251f0 100644 --- a/conf/parameters.go +++ b/conf/parameters.go @@ -28,5 +28,5 @@ const ( // Block producer chain improvements proposal heights. const ( - BPHeightCIPFixProvideService = 700000 // inclusive + BPHeightCIPFixProvideService = 675550 // inclusive, in 2019-5-15 16:11:40 +08:00 )