Skip to content

Commit

Permalink
Merge pull request #361 from bnb-chain/develop
Browse files Browse the repository at this point in the history
release: prepare release for v0.2.3-alpha.6
  • Loading branch information
KeefeL committed Jul 21, 2023
2 parents d3bebb2 + 20133a5 commit fc96aac
Show file tree
Hide file tree
Showing 89 changed files with 12,975 additions and 3,256 deletions.
4 changes: 4 additions & 0 deletions .github/workflows/buf.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,7 @@ jobs:
run: |
export PATH="$PATH:$(go env GOPATH)/bin"
make tools proto-gen-check
- name: Test protobuf swagger changes
run: |
export PATH="$PATH:$(go env GOPATH)/bin"
make tools proto-swagger-check
22 changes: 22 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,27 @@
# Changelog

## 0.2.3-alpha.6
This release includes 6 features and 5 bugfixes.

Features:
* [#346](https://github.com/bnb-chain/greenfield/pull/346) feat: Enable websocket client as a option in Greenfield sdk
* [#349](https://github.com/bnb-chain/greenfield/pull/349) feat: add UpdateChannelPermissions tx for crosschain module
* [#350](https://github.com/bnb-chain/greenfield/pull/350) feat: add create storage provider command
* [#357](https://github.com/bnb-chain/greenfield/pull/357) feat: add api to filter virtual group families qualification
* [#352](https://github.com/bnb-chain/greenfield/pull/352) feat: add query params for virtual group
* [#348](https://github.com/bnb-chain/greenfield/pull/348) feat: fix issues and add test cases for payment

Bugfixes:
* [#351](https://github.com/bnb-chain/greenfield/pull/351) fix: update local virtual group event
* [#353](https://github.com/bnb-chain/greenfield/pull/353) fix: panic when delete unsealed object from lvg
* [#354](https://github.com/bnb-chain/greenfield/pull/354) fix: incorrect authority for keepers
* [#342](https://github.com/bnb-chain/greenfield/pull/342) fix: remove primary sp id from bucket info
* [#356](https://github.com/bnb-chain/greenfield/pull/356) fix: add validation of extra field when creating group

Chores:
* [#359](https://github.com/bnb-chain/greenfield/pull/359) chore: add swagger check
* [#358](https://github.com/bnb-chain/greenfield/pull/358) chore: Refine event for sp exit and bucket migration

## v0.2.3-alpha.5
This release adds 6 new features and 2 bugfixes.

Expand Down
6 changes: 5 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,11 @@ proto-gen:
cd proto && buf generate && cp -r github.com/bnb-chain/greenfield/x/* ../x && cp -r github.com/bnb-chain/greenfield/types/* ../types && rm -rf github.com && go mod tidy

proto-swagger-gen:
sh ./scripts/protoc-swagger-gen.sh
bash ./scripts/protoc-swagger-gen.sh

proto-swagger-check:
bash ./scripts/protoc-swagger-gen.sh
git diff --exit-code

proto-format:
buf format -w
Expand Down
4 changes: 2 additions & 2 deletions app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -376,7 +376,7 @@ func New(
appCodec,
keys[crosschaintypes.StoreKey],
authtypes.FeeCollectorName,
authtypes.NewModuleAddress(oracletypes.ModuleName).String(),
authtypes.NewModuleAddress(govtypes.ModuleName).String(),
app.CrossChainKeeper,
app.BankKeeper,
app.StakingKeeper,
Expand Down Expand Up @@ -468,7 +468,7 @@ func New(
appCodec,
keys[virtualgroupmoduletypes.StoreKey],
tKeys[virtualgroupmoduletypes.TStoreKey],
authtypes.NewModuleAddress(virtualgroupmoduletypes.ModuleName).String(),
authtypes.NewModuleAddress(govtypes.ModuleName).String(),
app.SpKeeper,
app.AccountKeeper,
app.BankKeeper,
Expand Down
15 changes: 14 additions & 1 deletion app/reconciliation.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,15 @@ package app
import (
"bytes"
"encoding/binary"
"encoding/json"
"fmt"

"cosmossdk.io/math"
paymenttypes "github.com/bnb-chain/greenfield/x/payment/types"
"github.com/cosmos/cosmos-sdk/store/iavl"
sdk "github.com/cosmos/cosmos-sdk/types"
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"

paymenttypes "github.com/bnb-chain/greenfield/x/payment/types"
)

const reconStoreKey = "reconciliation"
Expand Down Expand Up @@ -124,6 +126,9 @@ func (app *App) reconPaymentChanges(ctx sdk.Context, paymentIavl *iavl.Store) bo
ctx.Logger().Error("fail to unmarshal stream record", "err", err.Error())
} else {
flowCurrent = flowCurrent.Add(sr.NetflowRate)
//TODO: impact performance, remove it later
j, _ := json.Marshal(sr)
ctx.Logger().Debug("stream_record_current", "stream record", j, "addr", parseAddressFromStreamRecordKey(kBz))
}
}

Expand All @@ -139,6 +144,9 @@ func (app *App) reconPaymentChanges(ctx sdk.Context, paymentIavl *iavl.Store) bo
ctx.Logger().Error("fail to unmarshal stream record", "err", err.Error())
} else {
flowPre = flowPre.Add(sr.NetflowRate)
//TODO: impact performance, remove it later
j, _ := json.Marshal(sr)
ctx.Logger().Debug("stream_record_previous", "stream record", j, "addr", parseAddressFromStreamRecordKey(kBz))
}
}
}
Expand Down Expand Up @@ -196,3 +204,8 @@ func parseAmountFromValue(value []byte) math.Int {
}
return amount
}

func parseAddressFromStreamRecordKey(key []byte) string {
start := len(StreamRecordKeyPrefix)
return sdk.AccAddress(key[start:]).String()
}
6 changes: 3 additions & 3 deletions deployment/localup/localup.sh
Original file line number Diff line number Diff line change
Expand Up @@ -150,10 +150,10 @@ function generate_genesis() {
sed -i -e "s/\"heartbeat_interval\": \"1000\"/\"heartbeat_interval\": \"100\"/g" ${workspace}/.local/validator${i}/config/genesis.json
sed -i -e "s/\"attestation_inturn_interval\": \"120\"/\"attestation_inturn_interval\": \"10\"/g" ${workspace}/.local/validator${i}/config/genesis.json
sed -i -e "s/\"discontinue_confirm_period\": \"604800\"/\"discontinue_confirm_period\": \"5\"/g" ${workspace}/.local/validator${i}/config/genesis.json
sed -i -e "s/\"discontinue_deletion_max\": \"10000\"/\"discontinue_deletion_max\": \"1\"/g" ${workspace}/.local/validator${i}/config/genesis.json
sed -i -e "s/\"voting_period\": \"30s\"/\"voting_period\": \"10s\"/g" ${workspace}/.local/validator${i}/config/genesis.json
sed -i -e "s/\"discontinue_deletion_max\": \"10000\"/\"discontinue_deletion_max\": \"2\"/g" ${workspace}/.local/validator${i}/config/genesis.json
sed -i -e "s/\"voting_period\": \"30s\"/\"voting_period\": \"5s\"/g" ${workspace}/.local/validator${i}/config/genesis.json
#sed -i -e "s/\"community_tax\": \"0.020000000000000000\"/\"community_tax\": \"0\"/g" ${workspace}/.local/validator${i}/config/genesis.json
#sed -i -e "s/log_level = \"info\"/\log_level= \"debug\"/g" ${workspace}/.local/validator${i}/config/config.toml
sed -i -e "s/log_level = \"info\"/\log_level= \"debug\"/g" ${workspace}/.local/validator${i}/config/config.toml
done

# enable swagger API for validator0
Expand Down
4 changes: 2 additions & 2 deletions e2e/client.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,5 @@ keyring-backend = "test"
output = "text"
# <host>:<port> to Tendermint RPC interface for this chain
node = "tcp://127.0.0.1:26750"
# Transaction broadcasting mode (sync|async|block)
broadcast-mode = "block"
# Transaction broadcasting mode (sync|async)
broadcast-mode = "sync"
114 changes: 77 additions & 37 deletions e2e/core/basesuite.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import (
sdkmath "cosmossdk.io/math"
"github.com/cometbft/cometbft/crypto/tmhash"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/query"
"github.com/cosmos/cosmos-sdk/types/tx"
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
"github.com/cosmos/cosmos-sdk/x/authz"
Expand Down Expand Up @@ -51,7 +52,7 @@ type BaseSuite struct {
ValidatorBLS keys.KeyManager
Relayer keys.KeyManager
Challenger keys.KeyManager
StorageProviders []StorageProvider
StorageProviders map[uint32]*StorageProvider
}

func (s *BaseSuite) SetupSuite() {
Expand All @@ -69,7 +70,7 @@ func (s *BaseSuite) SetupSuite() {
s.Challenger, err = keys.NewMnemonicKeyManager(s.Config.ChallengerMnemonic)
s.Require().NoError(err)

var spIDs []uint32
s.StorageProviders = make(map[uint32]*StorageProvider, 7)
for i, spMnemonics := range s.Config.SPMnemonics {
sp := StorageProvider{}
sp.OperatorKey, err = keys.NewMnemonicKeyManager(spMnemonics.OperatorMnemonic)
Expand All @@ -91,46 +92,50 @@ func (s *BaseSuite) SetupSuite() {
s.Require().NoError(err)
sp.Info = resp.StorageProvider
sp.GlobalVirtualGroupFamilies = make(map[uint32][]*virtualgroupmoduletypes.GlobalVirtualGroup)
s.StorageProviders = append(s.StorageProviders, sp)

spIDs = append(spIDs, sp.Info.Id)
s.StorageProviders[sp.Info.Id] = &sp
}

for i, sp := range s.StorageProviders {
var gvgFamilies []*virtualgroupmoduletypes.GlobalVirtualGroupFamily
resp1, err1 := s.Client.GlobalVirtualGroupFamilies(context.Background(), &virtualgroupmoduletypes.QueryGlobalVirtualGroupFamiliesRequest{StorageProviderId: sp.Info.Id})
s.Require().NoError(err1)
if len(resp1.GlobalVirtualGroupFamilies) == 0 {
s.RefreshGVGFamilies()
for _, sp := range s.StorageProviders {
if len(sp.GlobalVirtualGroupFamilies) == 0 {
// Create a GVG for each sp by default
deposit := sdk.Coin{
Denom: s.Config.Denom,
Amount: types.NewIntFromInt64WithDecimal(1, types.DecimalBNB),
}
secondaryIds := append(spIDs[:i], spIDs[i+1:]...)
var secondaryIDs []uint32
for _, ssp := range s.StorageProviders {
if ssp.Info.Id != sp.Info.Id {
secondaryIDs = append(secondaryIDs, ssp.Info.Id)
}
}
msgCreateGVG := &virtualgroupmoduletypes.MsgCreateGlobalVirtualGroup{
StorageProvider: sp.OperatorKey.GetAddr().String(),
SecondarySpIds: secondaryIds,
SecondarySpIds: secondaryIDs,
Deposit: deposit,
}
s.SendTxBlock(sp.OperatorKey, msgCreateGVG)
resp2, err2 := s.Client.GlobalVirtualGroupFamilies(context.Background(), &virtualgroupmoduletypes.QueryGlobalVirtualGroupFamiliesRequest{StorageProviderId: sp.Info.Id})
s.Require().NoError(err2)

gvgFamilies = resp2.GlobalVirtualGroupFamilies
} else {
gvgFamilies = resp1.GlobalVirtualGroupFamilies

}
}
s.RefreshGVGFamilies()
}

for _, family := range gvgFamilies {
gvgsResp, err3 := s.Client.GlobalVirtualGroupByFamilyID(context.Background(), &virtualgroupmoduletypes.QueryGlobalVirtualGroupByFamilyIDRequest{
StorageProviderId: sp.Info.Id,
GlobalVirtualGroupFamilyId: family.Id,
})
s.Require().NoError(err3)
sp.GlobalVirtualGroupFamilies[family.Id] = gvgsResp.GlobalVirtualGroups
s.StorageProviders[i] = sp
func (s *BaseSuite) RefreshGVGFamilies() {
resp1, err1 := s.Client.GlobalVirtualGroupFamilies(context.Background(), &virtualgroupmoduletypes.QueryGlobalVirtualGroupFamiliesRequest{Pagination: &query.PageRequest{Limit: math.MaxUint64}})
s.Require().NoError(err1)
for _, gvgFamily := range resp1.GvgFamilies {
sp, ok := s.StorageProviders[gvgFamily.PrimarySpId]
if !ok {
continue
}

gvgsResp, err3 := s.Client.GlobalVirtualGroupByFamilyID(context.Background(), &virtualgroupmoduletypes.QueryGlobalVirtualGroupByFamilyIDRequest{
StorageProviderId: sp.Info.Id,
GlobalVirtualGroupFamilyId: gvgFamily.Id,
})
s.Require().NoError(err3)
sp.GlobalVirtualGroupFamilies[gvgFamily.Id] = gvgsResp.GlobalVirtualGroups
s.StorageProviders[gvgFamily.PrimarySpId] = sp
}
}

Expand All @@ -150,7 +155,7 @@ func (s *BaseSuite) SendTxBlock(from keys.KeyManager, msg ...sdk.Msg) *sdk.TxRes
})
s.Require().NoError(err)

s.T().Logf("block_height: %d, tx_hash: 0x%s", getTxRes.TxResponse.Height, response.TxResponse.TxHash)
s.T().Logf("block_height: %d, tx_hash: 0x%s, GasUsed: %v", getTxRes.TxResponse.Height, response.TxResponse.TxHash, response.TxResponse.GasUsed)
return getTxRes.TxResponse
}

Expand Down Expand Up @@ -182,6 +187,11 @@ func (s *BaseSuite) SendTxBlockWithoutCheck(msg sdk.Msg, from keys.KeyManager) (
return s.Client.BroadcastTx(context.Background(), []sdk.Msg{msg}, txOpt)
}

func (s *BaseSuite) SendTxBlockWithoutCheckWithTxOpt(msg sdk.Msg, from keys.KeyManager, txOpt *types.TxOption) (*tx.BroadcastTxResponse, error) {
s.Client.SetKeyManager(from)
return s.Client.BroadcastTx(context.Background(), []sdk.Msg{msg}, txOpt)
}

func (s *BaseSuite) SendTxBlockWithExpectErrorString(msg sdk.Msg, from keys.KeyManager, expectErrorString string) {
mode := tx.BroadcastMode_BROADCAST_MODE_SYNC
txOpt := &types.TxOption{
Expand All @@ -190,7 +200,7 @@ func (s *BaseSuite) SendTxBlockWithExpectErrorString(msg sdk.Msg, from keys.KeyM
}
s.Client.SetKeyManager(from)
_, err := s.Client.BroadcastTx(context.Background(), []sdk.Msg{msg}, txOpt)
s.T().Logf("tx failed, err: %s, expect error string: %s", err, expectErrorString)
s.T().Logf("tx failed, err: %v, expect error string: %s", err, expectErrorString)
s.Require().Error(err)
s.Require().True(strings.Contains(err.Error(), expectErrorString))
}
Expand Down Expand Up @@ -342,8 +352,8 @@ func (s *BaseSuite) LatestHeight() (int64, error) {

func (sp *StorageProvider) GetFirstGlobalVirtualGroup() (*virtualgroupmoduletypes.GlobalVirtualGroup, bool) {
for _, family := range sp.GlobalVirtualGroupFamilies {
if len(family) != 0 {
return family[0], true
for _, gvg := range family {
return gvg, true
}
}
return nil, false
Expand Down Expand Up @@ -547,16 +557,16 @@ func (s *BaseSuite) CreateObject(user keys.KeyManager, primarySP *StorageProvide
secondarySPBlsPubKeys := make([]bls.PublicKey, 0)
blsSignHash := storagetypes.NewSecondarySpSealObjectSignDoc(s.GetChainID(), gvgId, queryHeadObjectResponse.ObjectInfo.Id, storagetypes.GenerateHash(queryHeadObjectResponse.ObjectInfo.Checksums[:])).GetBlsSignHash()
// every secondary sp signs the checksums
for i := 1; i < len(s.StorageProviders); i++ {
sig, err := BlsSignAndVerify(s.StorageProviders[i], blsSignHash)
for _, spID := range gvg.SecondarySpIds {
sig, err := BlsSignAndVerify(s.StorageProviders[spID], blsSignHash)
s.Require().NoError(err)
secondarySigs = append(secondarySigs, sig)
pk, err := bls.PublicKeyFromBytes(s.StorageProviders[i].BlsKey.PubKey().Bytes())
pk, err := bls.PublicKeyFromBytes(s.StorageProviders[spID].BlsKey.PubKey().Bytes())
s.Require().NoError(err)
secondarySPBlsPubKeys = append(secondarySPBlsPubKeys, pk)
if s.StorageProviders[i].Info.Id != primarySP.Info.Id {
ssp := s.StorageProviders[i]
secondarySps = append(secondarySps, &ssp)
if s.StorageProviders[spID].Info.Id != primarySP.Info.Id {
ssp := s.StorageProviders[spID]
secondarySps = append(secondarySps, ssp)
}
}
aggBlsSig, err := BlsAggregateAndVerify(secondarySPBlsPubKeys, blsSignHash, secondarySigs)
Expand Down Expand Up @@ -624,3 +634,33 @@ func (s *BaseSuite) CreateGlobalVirtualGroup(sp *StorageProvider, familyID uint3
func (s *BaseSuite) GetChainID() string {
return s.Config.ChainId
}

func (s *BaseSuite) PickStorageProvider() *StorageProvider {
for _, sp := range s.StorageProviders {
return sp
}
return nil
}

func (s *BaseSuite) PickDifferentStorageProvider(spId uint32) *StorageProvider {
for _, sp := range s.StorageProviders {
if sp.Info.Id != spId {
return sp
}
}
return nil
}

func (s *BaseSuite) PickStorageProviderByBucketName(bucketName string) *StorageProvider {
queryHeadBucketResponse, err := s.Client.HeadBucket(context.Background(), &storagetypes.QueryHeadBucketRequest{
BucketName: bucketName,
})
s.Require().NoError(err)

family, err := s.Client.GlobalVirtualGroupFamily(context.Background(), &virtualgroupmoduletypes.QueryGlobalVirtualGroupFamilyRequest{
FamilyId: queryHeadBucketResponse.BucketInfo.GlobalVirtualGroupFamilyId,
})
s.Require().NoError(err)

return s.StorageProviders[family.GlobalVirtualGroupFamily.PrimarySpId]
}
2 changes: 1 addition & 1 deletion e2e/core/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ func RandInt64(min, max int64) int64 {
return min + rand.Int63n(max-min)
}

func BlsSignAndVerify(sp StorageProvider, signBz [32]byte) ([]byte, error) {
func BlsSignAndVerify(sp *StorageProvider, signBz [32]byte) ([]byte, error) {
secondarySig, err := sp.BlsKey.Sign(signBz[:])
if err != nil {
return nil, err
Expand Down
Loading

0 comments on commit fc96aac

Please sign in to comment.