Skip to content

Commit

Permalink
VRF-1014: refactoring VRF e2e tests (#12798)
Browse files Browse the repository at this point in the history
* VRF-1014: refactoring VRF e2e tests

* VRF-1014: fixing lint

* VRF-1014: fixing lint

* VRF-1014: fixing VRF v2 test

* VRF-1014: making logging more DRY

* VRF-1014: fixing lint

* VRF-1014: fixing lint

* VRF-1014: fixing sonar

* VRF-1014: fixing tests

* VRF-1014: fixing tests
  • Loading branch information
iljapavlovs authored Apr 19, 2024
1 parent e87b83c commit e848ae9
Show file tree
Hide file tree
Showing 17 changed files with 1,220 additions and 897 deletions.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ vrf_v2_consumer_wrapper: ../../contracts/solc/v0.8.6/VRFv2Consumer/VRFv2Consumer
vrf_v2plus_load_test_with_metrics: ../../contracts/solc/v0.8.19/VRFV2PlusLoadTestWithMetrics/VRFV2PlusLoadTestWithMetrics.abi ../../contracts/solc/v0.8.19/VRFV2PlusLoadTestWithMetrics/VRFV2PlusLoadTestWithMetrics.bin 593dbcdcc212fc9ec69fe71684711d112433cc31218fe21305ace9229ac29289
vrf_v2plus_single_consumer: ../../contracts/solc/v0.8.19/VRFV2PlusSingleConsumerExample/VRFV2PlusSingleConsumerExample.abi ../../contracts/solc/v0.8.19/VRFV2PlusSingleConsumerExample/VRFV2PlusSingleConsumerExample.bin cfdfb97b1b0801ee778410d54b1f6541395ac01ab592ffd6c3feaf4a3ac3eca2
vrf_v2plus_sub_owner: ../../contracts/solc/v0.8.19/VRFV2PlusExternalSubOwnerExample/VRFV2PlusExternalSubOwnerExample.abi ../../contracts/solc/v0.8.19/VRFV2PlusExternalSubOwnerExample/VRFV2PlusExternalSubOwnerExample.bin 6032a081ad15453e52af1cf37c74a9f77f2a30bc14b2cb35f564eabc4b0b4c2e
vrf_v2plus_upgraded_version: ../../contracts/solc/v0.8.19/VRFCoordinatorV2PlusUpgradedVersion/VRFCoordinatorV2PlusUpgradedVersion.abi ../../contracts/solc/v0.8.19/VRFCoordinatorV2PlusUpgradedVersion/VRFCoordinatorV2PlusUpgradedVersion.bin 4a7df5b066bc3944622009659828fae35bc39d15cf4d218c1560dbdf39b10de2
vrf_v2plus_upgraded_version: ../../contracts/solc/v0.8.19/VRFCoordinatorV2PlusUpgradedVersion/VRFCoordinatorV2PlusUpgradedVersion.abi ../../contracts/solc/v0.8.19/VRFCoordinatorV2PlusUpgradedVersion/VRFCoordinatorV2PlusUpgradedVersion.bin 50429c68bc9e4edcddc4b15d65867bff9ae308314b52ed997e7d5665f0703148
vrfv2_proxy_admin: ../../contracts/solc/v0.8.6/VRFV2ProxyAdmin/VRFV2ProxyAdmin.abi ../../contracts/solc/v0.8.6/VRFV2ProxyAdmin/VRFV2ProxyAdmin.bin 402b1103087ffe1aa598854a8f8b38f8cd3de2e3aaa86369e28017a9157f4980
vrfv2_reverting_example: ../../contracts/solc/v0.8.6/VRFV2RevertingExample/VRFV2RevertingExample.abi ../../contracts/solc/v0.8.6/VRFV2RevertingExample/VRFV2RevertingExample.bin 1ae46f80351d428bd85ba58b9041b2a608a1845300d79a8fed83edf96606de87
vrfv2_transparent_upgradeable_proxy: ../../contracts/solc/v0.8.6/VRFV2TransparentUpgradeableProxy/VRFV2TransparentUpgradeableProxy.abi ../../contracts/solc/v0.8.6/VRFV2TransparentUpgradeableProxy/VRFV2TransparentUpgradeableProxy.bin fe1a8e6852fbd06d91f64315c5cede86d340891f5b5cc981fb5b86563f7eac3f
Expand Down
129 changes: 129 additions & 0 deletions integration-tests/actions/vrf/common/logging_helpers.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
package common

import (
"fmt"
"math/big"

"github.com/rs/zerolog"

commonassets "github.com/smartcontractkit/chainlink-common/pkg/assets"
"github.com/smartcontractkit/chainlink/integration-tests/contracts"
"github.com/smartcontractkit/chainlink/v2/core/chains/evm/assets"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated/vrf_owner"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated/vrfv2plus_wrapper_load_test_consumer"
)

func LogSubDetails(
l zerolog.Logger,
subscription contracts.Subscription,
subID string,
coordinator contracts.Coordinator,
) {
log := l.Info().
Str("Coordinator", coordinator.Address()).
Str("Link Balance", (*commonassets.Link)(subscription.Balance).Link()).
Str("Subscription ID", subID).
Str("Subscription Owner", subscription.SubOwner.String()).
Interface("Subscription Consumers", subscription.Consumers)
if subscription.NativeBalance != nil {
log = log.Str("Native Token Balance", assets.FormatWei(subscription.NativeBalance))
}
log.Msg("Subscription Data")
}

func LogRandomnessRequestedEvent(
l zerolog.Logger,
coordinator contracts.Coordinator,
randomWordsRequestedEvent *contracts.CoordinatorRandomWordsRequested,
isNativeBilling bool,
) {
l.Info().
Str("Coordinator", coordinator.Address()).
Bool("Native Billing", isNativeBilling).
Str("Request ID", randomWordsRequestedEvent.RequestId.String()).
Str("Subscription ID", randomWordsRequestedEvent.SubId).
Str("Sender Address", randomWordsRequestedEvent.Sender.String()).
Str("Keyhash", fmt.Sprintf("0x%x", randomWordsRequestedEvent.KeyHash)).
Uint32("Callback Gas Limit", randomWordsRequestedEvent.CallbackGasLimit).
Uint32("Number of Words", randomWordsRequestedEvent.NumWords).
Uint16("Minimum Request Confirmations", randomWordsRequestedEvent.MinimumRequestConfirmations).
Str("TX Hash", randomWordsRequestedEvent.Raw.TxHash.String()).
Uint64("BlockNumber", randomWordsRequestedEvent.Raw.BlockNumber).
Str("BlockHash", randomWordsRequestedEvent.Raw.BlockHash.String()).
Msg("RandomnessRequested Event")
}

func LogRandomWordsFulfilledEvent(
l zerolog.Logger,
coordinator contracts.Coordinator,
randomWordsFulfilledEvent *contracts.CoordinatorRandomWordsFulfilled,
isNativeBilling bool,
) {
l.Info().
Bool("Native Billing", isNativeBilling).
Str("Coordinator", coordinator.Address()).
Str("Total Payment", randomWordsFulfilledEvent.Payment.String()).
Str("TX Hash", randomWordsFulfilledEvent.Raw.TxHash.String()).
Str("Subscription ID", randomWordsFulfilledEvent.SubId).
Str("Request ID", randomWordsFulfilledEvent.RequestId.String()).
Bool("Success", randomWordsFulfilledEvent.Success).
Uint64("BlockNumber", randomWordsFulfilledEvent.Raw.BlockNumber).
Str("BlockHash", randomWordsFulfilledEvent.Raw.BlockHash.String()).
Msg("RandomWordsFulfilled Event (TX metadata)")
}

func LogFulfillmentDetailsLinkBilling(
l zerolog.Logger,
wrapperConsumerJuelsBalanceBeforeRequest *big.Int,
wrapperConsumerJuelsBalanceAfterRequest *big.Int,
consumerStatus vrfv2plus_wrapper_load_test_consumer.GetRequestStatus,
randomWordsFulfilledEvent *contracts.CoordinatorRandomWordsFulfilled,
) {
l.Info().
Str("Consumer Balance Before Request (Link)", (*commonassets.Link)(wrapperConsumerJuelsBalanceBeforeRequest).Link()).
Str("Consumer Balance After Request (Link)", (*commonassets.Link)(wrapperConsumerJuelsBalanceAfterRequest).Link()).
Bool("Fulfilment Status", consumerStatus.Fulfilled).
Str("Paid by Consumer Contract (Link)", (*commonassets.Link)(consumerStatus.Paid).Link()).
Str("Paid by Coordinator Sub (Link)", (*commonassets.Link)(randomWordsFulfilledEvent.Payment).Link()).
Str("RequestTimestamp", consumerStatus.RequestTimestamp.String()).
Str("FulfilmentTimestamp", consumerStatus.FulfilmentTimestamp.String()).
Str("RequestBlockNumber", consumerStatus.RequestBlockNumber.String()).
Str("FulfilmentBlockNumber", consumerStatus.FulfilmentBlockNumber.String()).
Str("TX Hash", randomWordsFulfilledEvent.Raw.TxHash.String()).
Msg("Random Words Fulfilment Details For Link Billing")
}

func LogFulfillmentDetailsNativeBilling(
l zerolog.Logger,
wrapperConsumerBalanceBeforeRequestWei *big.Int,
wrapperConsumerBalanceAfterRequestWei *big.Int,
consumerStatus vrfv2plus_wrapper_load_test_consumer.GetRequestStatus,
randomWordsFulfilledEvent *contracts.CoordinatorRandomWordsFulfilled,
) {
l.Info().
Str("Consumer Balance Before Request", assets.FormatWei(wrapperConsumerBalanceBeforeRequestWei)).
Str("Consumer Balance After Request", assets.FormatWei(wrapperConsumerBalanceAfterRequestWei)).
Bool("Fulfilment Status", consumerStatus.Fulfilled).
Str("Paid by Consumer Contract", assets.FormatWei(consumerStatus.Paid)).
Str("Paid by Coordinator Sub", assets.FormatWei(randomWordsFulfilledEvent.Payment)).
Str("RequestTimestamp", consumerStatus.RequestTimestamp.String()).
Str("FulfilmentTimestamp", consumerStatus.FulfilmentTimestamp.String()).
Str("RequestBlockNumber", consumerStatus.RequestBlockNumber.String()).
Str("FulfilmentBlockNumber", consumerStatus.FulfilmentBlockNumber.String()).
Str("TX Hash", randomWordsFulfilledEvent.Raw.TxHash.String()).
Msg("Random Words Request Fulfilment Details For Native Billing")
}

func LogRandomWordsForcedEvent(
l zerolog.Logger,
vrfOwner contracts.VRFOwner,
randomWordsForcedEvent *vrf_owner.VRFOwnerRandomWordsForced,
) {
l.Debug().
Str("VRFOwner", vrfOwner.Address()).
Uint64("Sub ID", randomWordsForcedEvent.SubId).
Str("TX Hash", randomWordsForcedEvent.Raw.TxHash.String()).
Str("Request ID", randomWordsForcedEvent.RequestId.String()).
Str("Sender", randomWordsForcedEvent.Sender.String()).
Msg("RandomWordsForced Event (TX metadata)")
}
62 changes: 29 additions & 33 deletions integration-tests/actions/vrf/vrfv2/contract_steps.go
Original file line number Diff line number Diff line change
Expand Up @@ -452,7 +452,7 @@ func FundVRFCoordinatorV2Subscription(
func DirectFundingRequestRandomnessAndWaitForFulfillment(
l zerolog.Logger,
consumer contracts.VRFv2WrapperLoadTestConsumer,
coordinator contracts.VRFCoordinatorV2,
coordinator contracts.Coordinator,
subID uint64,
vrfv2KeyData *vrfcommon.VRFKeyData,
minimumConfirmations uint16,
Expand All @@ -461,7 +461,7 @@ func DirectFundingRequestRandomnessAndWaitForFulfillment(
randomnessRequestCountPerRequest uint16,
randomnessRequestCountPerRequestDeviation uint16,
randomWordsFulfilledEventTimeout time.Duration,
) (*vrf_coordinator_v2.VRFCoordinatorV2RandomWordsFulfilled, error) {
) (*contracts.CoordinatorRandomWordsFulfilled, error) {
logRandRequest(
l,
consumer.Address(),
Expand Down Expand Up @@ -496,7 +496,7 @@ func DirectFundingRequestRandomnessAndWaitForFulfillment(
func RequestRandomnessAndWaitForFulfillment(
l zerolog.Logger,
consumer contracts.VRFv2LoadTestConsumer,
coordinator contracts.VRFCoordinatorV2,
coordinator contracts.Coordinator,
subID uint64,
vrfKeyData *vrfcommon.VRFKeyData,
minimumConfirmations uint16,
Expand All @@ -505,7 +505,7 @@ func RequestRandomnessAndWaitForFulfillment(
randomnessRequestCountPerRequest uint16,
randomnessRequestCountPerRequestDeviation uint16,
randomWordsFulfilledEventTimeout time.Duration,
) (*vrf_coordinator_v2.VRFCoordinatorV2RandomWordsFulfilled, error) {
) (*contracts.CoordinatorRandomWordsFulfilled, error) {
randomWordsRequestedEvent, err := RequestRandomness(
l,
consumer,
Expand Down Expand Up @@ -536,15 +536,15 @@ func RequestRandomnessAndWaitForFulfillment(
func RequestRandomness(
l zerolog.Logger,
consumer contracts.VRFv2LoadTestConsumer,
coordinator contracts.VRFCoordinatorV2,
coordinator contracts.Coordinator,
subID uint64,
vrfKeyData *vrfcommon.VRFKeyData,
minimumConfirmations uint16,
callbackGasLimit uint32,
numberOfWords uint32,
randomnessRequestCountPerRequest uint16,
randomnessRequestCountPerRequestDeviation uint16,
) (*vrf_coordinator_v2.VRFCoordinatorV2RandomWordsRequested, error) {
) (*contracts.CoordinatorRandomWordsRequested, error) {
logRandRequest(
l,
consumer.Address(),
Expand All @@ -569,15 +569,15 @@ func RequestRandomness(
if err != nil {
return nil, fmt.Errorf("%s, err %w", vrfcommon.ErrRequestRandomness, err)
}
LogRandomnessRequestedEvent(l, coordinator, randomWordsRequestedEvent)
vrfcommon.LogRandomnessRequestedEvent(l, coordinator, randomWordsRequestedEvent, false)

return randomWordsRequestedEvent, err
}

func RequestRandomnessWithForceFulfillAndWaitForFulfillment(
l zerolog.Logger,
consumer contracts.VRFv2LoadTestConsumer,
coordinator contracts.VRFCoordinatorV2,
coordinator contracts.Coordinator,
vrfOwner contracts.VRFOwner,
vrfv2KeyData *vrfcommon.VRFKeyData,
minimumConfirmations uint16,
Expand All @@ -588,9 +588,10 @@ func RequestRandomnessWithForceFulfillAndWaitForFulfillment(
subTopUpAmount *big.Int,
linkAddress common.Address,
randomWordsFulfilledEventTimeout time.Duration,
) (*vrf_coordinator_v2.VRFCoordinatorV2ConfigSet, *vrf_coordinator_v2.VRFCoordinatorV2RandomWordsFulfilled, *vrf_owner.VRFOwnerRandomWordsForced, error) {
) (*contracts.CoordinatorConfigSet, *contracts.CoordinatorRandomWordsFulfilled, *vrf_owner.VRFOwnerRandomWordsForced, error) {
logRandRequest(l, consumer.Address(), coordinator.Address(), 0, minimumConfirmations, callbackGasLimit, numberOfWords, randomnessRequestCountPerRequest, randomnessRequestCountPerRequestDeviation, vrfv2KeyData.KeyHash)
_, err := consumer.RequestRandomWordsWithForceFulfill(
randomWordsRequestedEvent, err := consumer.RequestRandomWordsWithForceFulfill(
coordinator,
vrfv2KeyData.KeyHash,
minimumConfirmations,
callbackGasLimit,
Expand All @@ -603,20 +604,11 @@ func RequestRandomnessWithForceFulfillAndWaitForFulfillment(
return nil, nil, nil, fmt.Errorf("%s, err %w", vrfcommon.ErrRequestRandomness, err)
}

randomWordsRequestedEvent, err := coordinator.WaitForRandomWordsRequestedEvent(
[][32]byte{vrfv2KeyData.KeyHash},
nil,
[]common.Address{common.HexToAddress(consumer.Address())},
time.Minute*1,
)
if err != nil {
return nil, nil, nil, fmt.Errorf("%s, err %w", vrfcommon.ErrWaitRandomWordsRequestedEvent, err)
}
LogRandomnessRequestedEvent(l, coordinator, randomWordsRequestedEvent)
vrfcommon.LogRandomnessRequestedEvent(l, coordinator, randomWordsRequestedEvent, false)

errorChannel := make(chan error)
configSetEventChannel := make(chan *vrf_coordinator_v2.VRFCoordinatorV2ConfigSet)
randWordsFulfilledEventChannel := make(chan *vrf_coordinator_v2.VRFCoordinatorV2RandomWordsFulfilled)
configSetEventChannel := make(chan *contracts.CoordinatorConfigSet)
randWordsFulfilledEventChannel := make(chan *contracts.CoordinatorRandomWordsFulfilled)
randWordsForcedEventChannel := make(chan *vrf_owner.VRFOwnerRandomWordsForced)

go func() {
Expand All @@ -632,8 +624,10 @@ func RequestRandomnessWithForceFulfillAndWaitForFulfillment(

go func() {
randomWordsFulfilledEvent, err := coordinator.WaitForRandomWordsFulfilledEvent(
[]*big.Int{randomWordsRequestedEvent.RequestId},
randomWordsFulfilledEventTimeout,
contracts.RandomWordsFulfilledEventFilter{
RequestIds: []*big.Int{randomWordsRequestedEvent.RequestId},
Timeout: randomWordsFulfilledEventTimeout,
},
)
if err != nil {
l.Error().Err(err).Msg("error waiting for RandomWordsFulfilledEvent")
Expand All @@ -656,18 +650,18 @@ func RequestRandomnessWithForceFulfillAndWaitForFulfillment(
randWordsForcedEventChannel <- randomWordsForcedEvent
}()

var configSetEvent *vrf_coordinator_v2.VRFCoordinatorV2ConfigSet
var randomWordsFulfilledEvent *vrf_coordinator_v2.VRFCoordinatorV2RandomWordsFulfilled
var configSetEvent *contracts.CoordinatorConfigSet
var randomWordsFulfilledEvent *contracts.CoordinatorRandomWordsFulfilled
var randomWordsForcedEvent *vrf_owner.VRFOwnerRandomWordsForced
for i := 0; i < 3; i++ {
select {
case err = <-errorChannel:
return nil, nil, nil, err
case configSetEvent = <-configSetEventChannel:
case randomWordsFulfilledEvent = <-randWordsFulfilledEventChannel:
LogRandomWordsFulfilledEvent(l, coordinator, randomWordsFulfilledEvent)
vrfcommon.LogRandomWordsFulfilledEvent(l, coordinator, randomWordsFulfilledEvent, false)
case randomWordsForcedEvent = <-randWordsForcedEventChannel:
LogRandomWordsForcedEvent(l, vrfOwner, randomWordsForcedEvent)
vrfcommon.LogRandomWordsForcedEvent(l, vrfOwner, randomWordsForcedEvent)
case <-time.After(randomWordsFulfilledEventTimeout):
err = fmt.Errorf("timeout waiting for ConfigSet, RandomWordsFulfilled and RandomWordsForced events")
}
Expand All @@ -676,19 +670,21 @@ func RequestRandomnessWithForceFulfillAndWaitForFulfillment(
}

func WaitRandomWordsFulfilledEvent(
coordinator contracts.VRFCoordinatorV2,
coordinator contracts.Coordinator,
requestId *big.Int,
randomWordsFulfilledEventTimeout time.Duration,
l zerolog.Logger,
) (*vrf_coordinator_v2.VRFCoordinatorV2RandomWordsFulfilled, error) {
) (*contracts.CoordinatorRandomWordsFulfilled, error) {
randomWordsFulfilledEvent, err := coordinator.WaitForRandomWordsFulfilledEvent(
[]*big.Int{requestId},
randomWordsFulfilledEventTimeout,
contracts.RandomWordsFulfilledEventFilter{
RequestIds: []*big.Int{requestId},
Timeout: randomWordsFulfilledEventTimeout,
},
)
if err != nil {
return nil, fmt.Errorf("%s, err %w", vrfcommon.ErrWaitRandomWordsFulfilledEvent, err)
}
LogRandomWordsFulfilledEvent(l, coordinator, randomWordsFulfilledEvent)
vrfcommon.LogRandomWordsFulfilledEvent(l, coordinator, randomWordsFulfilledEvent, false)
return randomWordsFulfilledEvent, err
}

Expand Down
65 changes: 0 additions & 65 deletions integration-tests/actions/vrf/vrfv2/logging_helpers.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,73 +4,8 @@ import (
"fmt"

"github.com/rs/zerolog"

commonassets "github.com/smartcontractkit/chainlink-common/pkg/assets"
"github.com/smartcontractkit/chainlink/integration-tests/contracts"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated/vrf_coordinator_v2"
"github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated/vrf_owner"
)

func LogSubDetails(l zerolog.Logger, subscription vrf_coordinator_v2.GetSubscription, subID uint64, coordinator contracts.VRFCoordinatorV2) {
l.Debug().
Str("Coordinator", coordinator.Address()).
Str("Link Balance", (*commonassets.Link)(subscription.Balance).Link()).
Uint64("Subscription ID", subID).
Str("Subscription Owner", subscription.Owner.String()).
Interface("Subscription Consumers", subscription.Consumers).
Msg("Subscription Data")
}

func LogRandomnessRequestedEvent(
l zerolog.Logger,
coordinator contracts.VRFCoordinatorV2,
randomWordsRequestedEvent *vrf_coordinator_v2.VRFCoordinatorV2RandomWordsRequested,
) {
l.Info().
Str("Coordinator", coordinator.Address()).
Str("Request ID", randomWordsRequestedEvent.RequestId.String()).
Uint64("Subscription ID", randomWordsRequestedEvent.SubId).
Str("Sender Address", randomWordsRequestedEvent.Sender.String()).
Str("Keyhash", fmt.Sprintf("0x%x", randomWordsRequestedEvent.KeyHash)).
Uint32("Callback Gas Limit", randomWordsRequestedEvent.CallbackGasLimit).
Uint32("Number of Words", randomWordsRequestedEvent.NumWords).
Uint16("Minimum Request Confirmations", randomWordsRequestedEvent.MinimumRequestConfirmations).
Str("TX Hash", randomWordsRequestedEvent.Raw.TxHash.String()).
Uint64("BlockNumber", randomWordsRequestedEvent.Raw.BlockNumber).
Str("BlockHash", randomWordsRequestedEvent.Raw.BlockHash.String()).
Msg("RandomnessRequested Event")
}

func LogRandomWordsFulfilledEvent(
l zerolog.Logger,
coordinator contracts.VRFCoordinatorV2,
randomWordsFulfilledEvent *vrf_coordinator_v2.VRFCoordinatorV2RandomWordsFulfilled,
) {
l.Info().
Str("Coordinator", coordinator.Address()).
Str("Total Payment", randomWordsFulfilledEvent.Payment.String()).
Str("TX Hash", randomWordsFulfilledEvent.Raw.TxHash.String()).
Str("Request ID", randomWordsFulfilledEvent.RequestId.String()).
Bool("Success", randomWordsFulfilledEvent.Success).
Uint64("BlockNumber", randomWordsFulfilledEvent.Raw.BlockNumber).
Str("BlockHash", randomWordsFulfilledEvent.Raw.BlockHash.String()).
Msg("RandomWordsFulfilled Event (TX metadata)")
}

func LogRandomWordsForcedEvent(
l zerolog.Logger,
vrfOwner contracts.VRFOwner,
randomWordsForcedEvent *vrf_owner.VRFOwnerRandomWordsForced,
) {
l.Debug().
Str("VRFOwner", vrfOwner.Address()).
Uint64("Sub ID", randomWordsForcedEvent.SubId).
Str("TX Hash", randomWordsForcedEvent.Raw.TxHash.String()).
Str("Request ID", randomWordsForcedEvent.RequestId.String()).
Str("Sender", randomWordsForcedEvent.Sender.String()).
Msg("RandomWordsForced Event (TX metadata)")
}

func logRandRequest(
l zerolog.Logger,
consumer string,
Expand Down
Loading

0 comments on commit e848ae9

Please sign in to comment.