Skip to content

Commit

Permalink
Update e2e for hedera native tokens
Browse files Browse the repository at this point in the history
  • Loading branch information
vlady-kotsev committed Jun 27, 2024
1 parent cd86074 commit d9e3e8e
Show file tree
Hide file tree
Showing 7 changed files with 578 additions and 539 deletions.
914 changes: 455 additions & 459 deletions e2e/e2e_test.go

Large diffs are not rendered by default.

8 changes: 4 additions & 4 deletions e2e/helper/expected/fee.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,15 @@ import (
"github.com/limechain/hedera-eth-bridge-validator/app/domain/service"
)

func ReceiverAndFeeAmounts(feeCalc service.Fee, distributor service.Distributor, token string, amount int64) (receiverAmount, fee int64) {
func ReceiverAndFeeAmounts(feeCalc service.Fee, distributor service.Distributor, token string, amount int64) (receiverAmount, valdiatorsFee, treasuryFee int64) {
fee, remainder := feeCalc.CalculateFee(token, amount)
validTreasuryFee, validValidatorFee := distributor.ValidAmounts(fee)
validFee := validTreasuryFee + validValidatorFee
validTreasuryFee, validValidatorsFee := distributor.ValidAmounts(fee)
validFee := validTreasuryFee + validValidatorsFee
if validFee != fee {
remainder += fee - validFee
}

return remainder, validFee
return remainder, validValidatorsFee, validTreasuryFee
}

func EvmAmoundAndFee(router *router.Router, token string, amount int64, t *testing.T) (*big.Int, *big.Int) {
Expand Down
32 changes: 27 additions & 5 deletions e2e/helper/expected/mirror-node.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@ import (
"github.com/limechain/hedera-eth-bridge-validator/constants"
)

func MirrorNodeExpectedTransfersForBurnEvent(members []hedera.AccountID, hederaClient *hedera.Client, bridgeAccount hedera.AccountID, asset string, amount, fee int64) []transaction.Transfer {
total := amount + fee
feePerMember := fee / int64(len(members))
func MirrorNodeExpectedTransfersForBurnEvent(members []hedera.AccountID, treasury hedera.AccountID, hederaClient *hedera.Client, bridgeAccount hedera.AccountID, asset string, amount, validatorFee, treasuryFee int64) []transaction.Transfer {
total := amount + validatorFee + treasuryFee
feePerMember := validatorFee / int64(len(members))

var expectedTransfers []transaction.Transfer
expectedTransfers = append(expectedTransfers, transaction.Transfer{
Expand All @@ -48,6 +48,16 @@ func MirrorNodeExpectedTransfersForBurnEvent(members []hedera.AccountID, hederaC
expectedTransfers[i].Token = asset
}
}
treasuryTransfer := transaction.Transfer{
Account: treasury.String(),
Amount: treasuryFee,
}

if asset != constants.Hbar {

treasuryTransfer.Token = asset
}
expectedTransfers = append(expectedTransfers, treasuryTransfer)

return expectedTransfers
}
Expand All @@ -69,9 +79,10 @@ func MirrorNodeExpectedTransfersForLockEvent(hederaClient *hedera.Client, bridge
return expectedTransfers
}

func MirrorNodeExpectedTransfersForHederaTransfer(members []hedera.AccountID, bridgeAccount hedera.AccountID, asset string, fee int64) []transaction.Transfer {
feePerMember := fee / int64(len(members))
func MirrorNodeExpectedTransfersForHederaTransfer(members []hedera.AccountID, treasury hedera.AccountID, bridgeAccount hedera.AccountID, asset string, validatorsFee, treasuryFee int64) []transaction.Transfer {

feePerMember := validatorsFee / int64(len(members))
fee := validatorsFee + treasuryFee
var expectedTransfers []transaction.Transfer
expectedTransfers = append(expectedTransfers, transaction.Transfer{
Account: bridgeAccount.String(),
Expand All @@ -91,5 +102,16 @@ func MirrorNodeExpectedTransfersForHederaTransfer(members []hedera.AccountID, br
}
}

treasuryTransfer := transaction.Transfer{
Account: treasury.String(),
Amount: treasuryFee,
}

if asset != constants.Hbar {
treasuryTransfer.Token = asset
}

expectedTransfers = append(expectedTransfers, treasuryTransfer)

return expectedTransfers
}
8 changes: 4 additions & 4 deletions e2e/helper/verify/db.go
Original file line number Diff line number Diff line change
Expand Up @@ -236,7 +236,7 @@ func (s *Service) getMessageListByTransactionId(expectedTransferRecord *entity.T
return result, err
}

time.Sleep(s.DatabaseRetryTimeout * time.Second)
time.Sleep(s.DatabaseRetryTimeout * time.Minute)
s.logger.Infof("Database Message records [%s] retry %d", expectedTransferRecord.TransactionID, currentCount)
}

Expand All @@ -262,7 +262,7 @@ func (s *Service) getTransactionById(verifier dbVerifier, expectedTransferRecord
return result, err
}

time.Sleep(s.DatabaseRetryTimeout * time.Second)
time.Sleep(s.DatabaseRetryTimeout * time.Minute)
s.logger.Infof("Database Transaction record [%s] retry %d", expectedTransferRecord.TransactionID, currentCount)
}

Expand All @@ -288,7 +288,7 @@ func (s *Service) getScheduleByTransactionId(verifier dbVerifier, expectedRecord
return result, err
}

time.Sleep(s.DatabaseRetryTimeout * time.Second)
time.Sleep(s.DatabaseRetryTimeout * time.Minute)
s.logger.Infof("Database Schedule record [%s] retry %d", expectedRecord.TransactionID, currentCount)
}

Expand All @@ -314,7 +314,7 @@ func (s *Service) getFeeByTransactionId(verifier dbVerifier, expectedRecord *ent
return result, err
}

time.Sleep(s.DatabaseRetryTimeout * time.Second)
time.Sleep(s.DatabaseRetryTimeout * time.Minute)
s.logger.Infof("Database Fee record [%s] retry %d", expectedRecord.TransactionID, currentCount)
}

Expand Down
25 changes: 13 additions & 12 deletions e2e/helper/verify/hedera.go
Original file line number Diff line number Diff line change
Expand Up @@ -194,11 +194,11 @@ func AccountBalance(t *testing.T, hederaClient *hedera.Client, hederaID hedera.A
}
}

func SubmittedScheduledTx(t *testing.T, hederaClient *hedera.Client, mirrorNodeClient *mirror_node.Client, members []hedera.AccountID, asset string, expectedTransfers []transaction.Transfer, now time.Time) (transactionID, scheduleID string) {
func SubmittedScheduledTx(t *testing.T, hederaClient *hedera.Client, mirrorNodeClient *mirror_node.Client, members []hedera.AccountID, treasury hedera.AccountID, asset string, expectedTransfers []transaction.Transfer, now time.Time) (transactionID, scheduleID string) {
t.Helper()
receiverTransactionID, receiverScheduleID := ScheduledTx(t, hederaClient, mirrorNodeClient, hederaClient.GetOperatorAccountID(), asset, expectedTransfers, now)

membersTransactionID, membersScheduleID := MembersScheduledTxs(t, hederaClient, mirrorNodeClient, members, asset, expectedTransfers, now)
membersTransactionID, membersScheduleID := ScheduledTxs(t, hederaClient, mirrorNodeClient, members, treasury, asset, expectedTransfers, now)

if receiverTransactionID != membersTransactionID {
t.Fatalf("Scheduled Transactions between members are different. Receiver [%s], Member [%s]", receiverTransactionID, membersTransactionID)
Expand Down Expand Up @@ -319,7 +319,7 @@ func ScheduledNftTransfer(t *testing.T, hederaClient *hedera.Client, mirrorNodeC

func ScheduledTx(t *testing.T, hederaClient *hedera.Client, mirrorNodeClient *mirror_node.Client, account hedera.AccountID, asset string, expectedTransfers []transaction.Transfer, now time.Time) (transactionID, scheduleID string) {
t.Helper()
timeLeft := 180
timeLeft := 20
for {
response, err := mirrorNodeClient.GetAccountCreditTransactionsAfterTimestamp(account, now.UnixNano())
if err != nil {
Expand All @@ -336,9 +336,9 @@ func ScheduledTx(t *testing.T, hederaClient *hedera.Client, mirrorNodeClient *mi
}

if timeLeft > 0 {
fmt.Printf("Could not find any scheduled transactions for account [%s]. Trying again. Time left: ~[%d] seconds\n", hederaClient.GetOperatorAccountID(), timeLeft)
timeLeft -= 10
time.Sleep(10 * time.Second)
fmt.Printf("Could not find any scheduled transactions for account [%s]. Trying again. Time left: ~[%d] minutes\n", hederaClient.GetOperatorAccountID(), timeLeft)
timeLeft--
time.Sleep(time.Minute)
continue
}
break
Expand All @@ -348,16 +348,18 @@ func ScheduledTx(t *testing.T, hederaClient *hedera.Client, mirrorNodeClient *mi
return "", ""
}

func MembersScheduledTxs(t *testing.T, hederaClient *hedera.Client, mirrorNodeClient *mirror_node.Client, members []hedera.AccountID, asset string, expectedTransfers []transaction.Transfer, now time.Time) (transactionID, scheduleID string) {
func ScheduledTxs(t *testing.T, hederaClient *hedera.Client, mirrorNodeClient *mirror_node.Client, members []hedera.AccountID, treasury hedera.AccountID, asset string, expectedTransfers []transaction.Transfer, now time.Time) (transactionID, scheduleID string) {
t.Helper()
if len(members) == 0 {
return "", ""
}

var transactions []string
var scheduleIDs []string
for _, member := range members {
txID, scheduleID := ScheduledTx(t, hederaClient, mirrorNodeClient, member, asset, expectedTransfers, now)
var accountIDs []hedera.AccountID
accountIDs = append(accountIDs, append(members, treasury)...)
for _, accountID := range accountIDs {
txID, scheduleID := ScheduledTx(t, hederaClient, mirrorNodeClient, accountID, asset, expectedTransfers, now)
transactions = append(transactions, txID)

if !utilities.AllSame(transactions) {
Expand Down Expand Up @@ -467,7 +469,6 @@ func TopicMessagesWithStartTime(t *testing.T, hederaClient *hedera.Client, topic
message := msg.GetFungibleSignatureMessage()
transferID = message.TransferID
signature = message.Signature
break
case *model.TopicMessage_NftSignatureMessage:
message := msg.GetNftSignatureMessage()
transferID = message.TransferID
Expand All @@ -484,10 +485,10 @@ func TopicMessagesWithStartTime(t *testing.T, hederaClient *hedera.Client, topic
},
)
if err != nil {
t.Fatalf("Unable to subscribe to Topic [%s]", topicId)
t.Fatalf("Unable to subscribe to Topic [%s]: [%s]", topicId, err)
}

timeoutTimer := time.NewTimer(480 * time.Second)
timeoutTimer := time.NewTimer(15 * time.Minute)

signatureLoop:
for ethSignaturesCollected < expectedValidatorsCount {
Expand Down
111 changes: 64 additions & 47 deletions e2e/setup/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,14 +67,17 @@ func Load() *Setup {

configuration := Config{
Hedera: Hedera{
NetworkType: e2eConfig.Hedera.NetworkType,
BridgeAccount: e2eConfig.Hedera.BridgeAccount,
PayerAccount: e2eConfig.Hedera.PayerAccount,
Members: e2eConfig.Hedera.Members,
TopicID: e2eConfig.Hedera.TopicID,
Sender: Sender(e2eConfig.Hedera.Sender),
DbValidationProps: make([]config.Database, len(e2eConfig.Hedera.DbValidationProps)),
MirrorNode: *new(config.MirrorNode).DefaultOrConfig(&e2eConfig.Hedera.MirrorNode),
NetworkType: e2eConfig.Hedera.NetworkType,
BridgeAccount: e2eConfig.Hedera.BridgeAccount,
PayerAccount: e2eConfig.Hedera.PayerAccount,
Members: e2eConfig.Hedera.Members,
TopicID: e2eConfig.Hedera.TopicID,
Treasury: e2eConfig.Hedera.Treasury,
ValidatorRewardPercentage: e2eConfig.Hedera.ValidatorRewardPercentage,
TreasuryRewardPercentage: e2eConfig.Hedera.TreasuryRewardPercentage,
Sender: Sender(e2eConfig.Hedera.Sender),
DbValidationProps: make([]config.Database, len(e2eConfig.Hedera.DbValidationProps)),
MirrorNode: *new(config.MirrorNode).DefaultOrConfig(&e2eConfig.Hedera.MirrorNode),
},
EVM: make(map[uint64]config.Evm),
Tokens: e2eConfig.Tokens,
Expand Down Expand Up @@ -114,21 +117,24 @@ func Load() *Setup {

// Setup used by the e2e tests. Preloaded with all necessary dependencies
type Setup struct {
BridgeAccount hederaSDK.AccountID
PayerAccount hederaSDK.AccountID
TopicID hederaSDK.TopicID
TokenID hederaSDK.TokenID
NativeEvmToken string
NftTokenID hederaSDK.TokenID
NftSerialNumber int64
NftConstantFees map[string]int64
NftDynamicFees map[string]decimal.Decimal
FeePercentages map[string]int64
Members []hederaSDK.AccountID
Clients *clients
DbValidator *verify.Service
AssetMappings service.Assets
Scenario *ScenarioConfig
BridgeAccount hederaSDK.AccountID
PayerAccount hederaSDK.AccountID
Treasury hederaSDK.AccountID
ValidatorRewardPercentage int
TreasuryRewardPercentage int
TopicID hederaSDK.TopicID
TokenID hederaSDK.TokenID
NativeEvmToken string
NftTokenID hederaSDK.TokenID
NftSerialNumber int64
NftConstantFees map[string]int64
NftDynamicFees map[string]decimal.Decimal
FeePercentages map[string]int64
Members []hederaSDK.AccountID
Clients *clients
DbValidator *verify.Service
AssetMappings service.Assets
Scenario *ScenarioConfig
}

// newSetup instantiates new Setup struct
Expand All @@ -148,6 +154,11 @@ func newSetup(config Config) (*Setup, error) {
return nil, err
}

treasuryID, err := hederaSDK.AccountIDFromString(config.Hedera.Treasury)
if err != nil {
return nil, err
}

tokenID, err := hederaSDK.TokenIDFromString(config.Tokens.WToken)
if err != nil {
return nil, err
Expand Down Expand Up @@ -197,21 +208,24 @@ func newSetup(config Config) (*Setup, error) {
dbValidator.ExpectedValidatorsCount = scenario.ExpectedValidatorsCount

return &Setup{
BridgeAccount: bridgeAccount,
PayerAccount: payerAccount,
TopicID: topicID,
TokenID: tokenID,
NftTokenID: nftTokenID,
NftSerialNumber: config.Tokens.NftSerialNumber,
NativeEvmToken: config.Tokens.EvmNativeToken,
NftConstantFees: config.NftConstantFees,
NftDynamicFees: config.NftDynamicFees,
FeePercentages: config.FeePercentages,
Members: members,
Clients: clients,
DbValidator: dbValidator,
AssetMappings: config.AssetMappings,
Scenario: scenario,
BridgeAccount: bridgeAccount,
PayerAccount: payerAccount,
TopicID: topicID,
TokenID: tokenID,
Treasury: treasuryID,
ValidatorRewardPercentage: config.Hedera.ValidatorRewardPercentage,
TreasuryRewardPercentage: config.Hedera.TreasuryRewardPercentage,
NftTokenID: nftTokenID,
NftSerialNumber: config.Tokens.NftSerialNumber,
NativeEvmToken: config.Tokens.EvmNativeToken,
NftConstantFees: config.NftConstantFees,
NftDynamicFees: config.NftDynamicFees,
FeePercentages: config.FeePercentages,
Members: members,
Clients: clients,
DbValidator: dbValidator,
AssetMappings: config.AssetMappings,
Scenario: scenario,
}, nil
}

Expand Down Expand Up @@ -300,7 +314,7 @@ func newClients(config Config) (*clients, error) {
ValidatorClient: validatorClient,
MirrorNode: mirrorNode,
FeeCalculator: fee.New(config.FeePercentages),
Distributor: distributor.New(config.Hedera.Members),
Distributor: distributor.New(config.Hedera.Members, config.Hedera.Treasury, config.Hedera.TreasuryRewardPercentage, config.Hedera.ValidatorRewardPercentage),
}, nil
}

Expand Down Expand Up @@ -405,14 +419,17 @@ type Config struct {

// Hedera props from the application.yml
type Hedera struct {
NetworkType string
BridgeAccount string
PayerAccount string
Members []string
TopicID string
Sender Sender
DbValidationProps []config.Database
MirrorNode config.MirrorNode
NetworkType string
BridgeAccount string
PayerAccount string
Members []string
Treasury string
ValidatorRewardPercentage int
TreasuryRewardPercentage int
TopicID string
Sender Sender
DbValidationProps []config.Database
MirrorNode config.MirrorNode
}

// Sender props from the application.yml
Expand Down
19 changes: 11 additions & 8 deletions e2e/setup/parser/parser.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,17 @@ type Config struct {
}

type HederaParser struct {
NetworkType string `yaml:"network_type"`
BridgeAccount string `yaml:"bridge_account"`
PayerAccount string `yaml:"payer_account"`
Members []string `yaml:"members"`
TopicID string `yaml:"topic_id"`
Sender Sender `yaml:"sender"`
DbValidationProps []parser.Database `yaml:"dbs"`
MirrorNode parser.MirrorNode `yaml:"mirror_node"`
NetworkType string `yaml:"network_type"`
BridgeAccount string `yaml:"bridge_account"`
PayerAccount string `yaml:"payer_account"`
Members []string `yaml:"members"`
TopicID string `yaml:"topic_id"`
Treasury string `yaml:"treasury"`
ValidatorRewardPercentage int `yaml:"validator_reward_percentage"`
TreasuryRewardPercentage int `yaml:"treasury_reward_percentage"`
Sender Sender `yaml:"sender"`
DbValidationProps []parser.Database `yaml:"dbs"`
MirrorNode parser.MirrorNode `yaml:"mirror_node"`
}

type ScenarioParser struct {
Expand Down

0 comments on commit d9e3e8e

Please sign in to comment.