Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Relayer: Sending of the coreum originated token from the coreum to XRPL. #50

Merged
merged 5 commits into from
Nov 24, 2023

Conversation

dzmitryhil
Copy link
Contributor

@dzmitryhil dzmitryhil commented Nov 22, 2023

Description

Relayer: Sending of the coreum originated token from the coreum to XRPL.

  • Add contract client integration tests
  • Implement relayer part for the sending

Reviewers checklist:

  • Try to write more meaningful comments with clear actions to be taken.
  • Nit-picking should be unblocking. Focus on core issues.

Authors checklist

  • Provide a concise and meaningful description
  • Review the code yourself first, before making the PR.
  • Annotate your PR in places that require explanation.
  • Think and try to split the PR to smaller PR if it is big.

This change is Reviewable

* Add contract client integration tests
* Implement relayer part for the sending
@dzmitryhil dzmitryhil requested a review from a team as a code owner November 22, 2023 06:26
@dzmitryhil dzmitryhil requested review from miladz68, ysv and wojtek-coreum and removed request for a team November 22, 2023 06:26
Copy link
Collaborator

@wojtek-coreum wojtek-coreum left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed 19 of 19 files at r1, all commit messages.
Reviewable status: all files reviewed, 2 unresolved discussions (waiting on @dzmitryhil, @miladz68, and @ysv)


relayer/processes/amount.go line 66 at r1 (raw file):

// ConvertCoreumOriginatedTokenCoreumAmountToXRPLAmount converts the coreum originated token amount to XRPL amount based on decimals.
func ConvertCoreumOriginatedTokenCoreumAmountToXRPLAmount(coreumAmount sdkmath.Int, decimals uint32, issuerString, currencyString string) (rippledata.Amount, error) {

What's the point of this function? Can't convertCoreumAmountToXRPLAmountWithDecimals be exported?


relayer/processes/xrpl_tx_observer.go line 63 at r1 (raw file):

	if cfg.BridgeXRPLAddress != o.cfg.BridgeXRPLAddress.String() {
		return errors.Errorf(
			"observer bridge XRPL address in config is different form the contract %s!=%s",

form -> from

Copy link
Contributor Author

@dzmitryhil dzmitryhil left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewable status: all files reviewed, 2 unresolved discussions (waiting on @miladz68, @wojtek-coreum, and @ysv)


relayer/processes/amount.go line 66 at r1 (raw file):

Previously, wojtek-coreum (Wojtek) wrote…

What's the point of this function? Can't convertCoreumAmountToXRPLAmountWithDecimals be exported?

The convertCoreumAmountToXRPLAmountWithDecimals is reused for this func and ConvertXRPLOriginatedTokenCoreumAmountToXRPLAmount. In order to keep the naming clear I use the unexported function.


relayer/processes/xrpl_tx_observer.go line 63 at r1 (raw file):

Previously, wojtek-coreum (Wojtek) wrote…

form -> from

Done.

Copy link
Collaborator

@ysv ysv left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed 15 of 19 files at r1, 7 of 7 files at r2, all commit messages.
Reviewable status: all files reviewed, 9 unresolved discussions (waiting on @dzmitryhil, @miladz68, and @wojtek-coreum)


integration-tests/coreum/contract_client_test.go line 120 at r2 (raw file):

		Currency:         xrpCurrency,
		CoreumDenom:      coreumDenom,
		SendingPrecision: xrpSendingPrecision,

is it XRP sending precision ? or xrplOriginatedToken ?
Maybe we should rename it on contract side also ?


integration-tests/coreum/contract_client_test.go line 320 at r2 (raw file):

	maxHoldingAmount := sdk.NewIntFromUint64(10000)

	// recover tickets to be able to create operations form coreum to XRPL

typo

Also check other same places

Code quote:

form

integration-tests/coreum/contract_client_test.go line 1325 at r2 (raw file):

}

func TestSendFromCoreumToXRPLCoreumOriginatedToken(t *testing.T) {

nit:
Maybe we can improve readability of tests names by using _ ?
E.g here could be Test_SendFromCoreumToXRPL_CoreumOriginatedToken or smth else.
Because names are too long and complicated to read


integration-tests/coreum/contract_client_test.go line 1436 at r2 (raw file):

	operationType := operation.OperationType.CoreumToXRPLTransfer
	require.NotNil(t, operationType)
	require.NotNil(t, operationType.Issuer, bridgeXRPLAddress)

nit: are 3rd params expected to be here ? (they will be used as error message)


relayer/processes/xrpl_tx_submitter.go line 95 at r2 (raw file):

	if cfg.BridgeXRPLAddress != s.cfg.BridgeXRPLAddress.String() {
		return errors.Errorf(
			"submitter bridge XRPL address in config is different from the contract %s!=%s",

we do we need to have it in 2 places ? Can't we have a single source of truth - contract ?


relayer/processes/xrpl_tx_submitter_test.go line 351 at r2 (raw file):

}

func getContractRelayers(relayersCount int) ([]coreum.Relayer, []*xrpl.PrivKeyTxSigner, xrpl.AccountInfoResult) {

nit: maybe it should be genContractRelayers ?
Since you generate all the keys etc


relayer/processes/xrpl_tx_submitter_test.go line 393 at r2 (raw file):

}

func buildAllocateTicketsTestData(

I didn't get the logic you are trying to achieve in this func

Also in usage I can see this allocateTicketOperationValidSigners := buildAllocateTicketsTestData(t, xrplTxSigners, bridgeXRPLAddress, contractRelayers)

But you have 3 params returned from func

Copy link
Contributor Author

@dzmitryhil dzmitryhil left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewable status: all files reviewed, 8 unresolved discussions (waiting on @miladz68, @wojtek-coreum, and @ysv)


integration-tests/coreum/contract_client_test.go line 120 at r2 (raw file):

Previously, ysv (Yaroslav Savchuk) wrote…

is it XRP sending precision ? or xrplOriginatedToken ?
Maybe we should rename it on contract side also ?

XRP sending precision


integration-tests/coreum/contract_client_test.go line 320 at r2 (raw file):

Previously, ysv (Yaroslav Savchuk) wrote…

typo

Also check other same places

Done


integration-tests/coreum/contract_client_test.go line 1325 at r2 (raw file):

Previously, ysv (Yaroslav Savchuk) wrote…

nit:
Maybe we can improve readability of tests names by using _ ?
E.g here could be Test_SendFromCoreumToXRPL_CoreumOriginatedToken or smth else.
Because names are too long and complicated to read

I'm ok with improving it, but don't see a big difference between snake-case and camel-case


integration-tests/coreum/contract_client_test.go line 1436 at r2 (raw file):

Previously, ysv (Yaroslav Savchuk) wrote…

nit: are 3rd params expected to be here ? (they will be used as error message)

Did't get the question.


relayer/processes/xrpl_tx_submitter.go line 95 at r2 (raw file):

Previously, ysv (Yaroslav Savchuk) wrote…

we do we need to have it in 2 places ? Can't we have a single source of truth - contract ?

We have it here and in another place since we decided to have independent processes. For both those processes it is important to have the correct bridge address, that's why we validate them in both.


relayer/processes/xrpl_tx_submitter_test.go line 351 at r2 (raw file):

Previously, ysv (Yaroslav Savchuk) wrote…

nit: maybe it should be genContractRelayers ?
Since you generate all the keys etc

You are right, updated.


relayer/processes/xrpl_tx_submitter_test.go line 393 at r2 (raw file):

Previously, ysv (Yaroslav Savchuk) wrote…

I didn't get the logic you are trying to achieve in this func

Also in usage I can see this allocateTicketOperationValidSigners := buildAllocateTicketsTestData(t, xrplTxSigners, bridgeXRPLAddress, contractRelayers)

But you have 3 params returned from func

I have 4 params returned from it and I use all of them. All of the build**TestData functions are responsible for building the transaction arguments required for the test, and most of them are built with the same strategy.

Copy link
Collaborator

@ysv ysv left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed 4 of 4 files at r3, all commit messages.
Reviewable status: all files reviewed, 5 unresolved discussions (waiting on @dzmitryhil, @miladz68, and @wojtek-coreum)


integration-tests/coreum/contract_client_test.go line 120 at r2 (raw file):

Previously, dzmitryhil (Dzmitry Hil) wrote…

XRP sending precision

ok
Shall we rename it ? not it this task but during the next refactoring to XRPSendingPrecision ?
Because I thought that it is precission which will be used for all xrpl tokens


integration-tests/coreum/contract_client_test.go line 1436 at r2 (raw file):

Previously, dzmitryhil (Dzmitry Hil) wrote…

Did't get the question.

if this check fails bridgeXRPLAddress will be shown as error.
Is it what you wanted here ?
Screenshot 2023-11-22 at 16.56.42.png
Screenshot 2023-11-22 at 16.56.42


relayer/processes/xrpl_tx_submitter.go line 95 at r2 (raw file):

Previously, dzmitryhil (Dzmitry Hil) wrote…

We have it here and in another place since we decided to have independent processes. For both those processes it is important to have the correct bridge address, that's why we validate them in both.

this is gonna be configured on relayer level (via flag or config file)
But I mean that we don't need it since it can only be equal to the value stored inside contract so it means we should fetch it from there for initialization. WDYT ?

Copy link
Contributor Author

@dzmitryhil dzmitryhil left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewable status: 18 of 24 files reviewed, 5 unresolved discussions (waiting on @miladz68, @wojtek-coreum, and @ysv)


integration-tests/coreum/contract_client_test.go line 120 at r2 (raw file):

Previously, ysv (Yaroslav Savchuk) wrote…

ok
Shall we rename it ? not it this task but during the next refactoring to XRPSendingPrecision ?
Because I thought that it is precission which will be used for all xrpl tokens

This is the default precision we set in the contract for the XRP token which we issue at the instantiation time. It will be possible to change it later by admin.


integration-tests/coreum/contract_client_test.go line 1436 at r2 (raw file):

Previously, ysv (Yaroslav Savchuk) wrote…

if this check fails bridgeXRPLAddress will be shown as error.
Is it what you wanted here ?
Screenshot 2023-11-22 at 16.56.42.png
Screenshot 2023-11-22 at 16.56.42

Got you, fixed.


relayer/processes/xrpl_tx_submitter.go line 95 at r2 (raw file):

Previously, ysv (Yaroslav Savchuk) wrote…

this is gonna be configured on relayer level (via flag or config file)
But I mean that we don't need it since it can only be equal to the value stored inside contract so it means we should fetch it from there for initialization. WDYT ?

Right, got you. Updated to fetch the address from the contract in the runner. And removed that check from the init.

@dzmitryhil dzmitryhil requested a review from ysv November 23, 2023 08:25
Copy link
Collaborator

@ysv ysv left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed 7 of 7 files at r4, all commit messages.
Reviewable status: all files reviewed, 2 unresolved discussions (waiting on @miladz68 and @wojtek-coreum)

Copy link
Collaborator

@wojtek-coreum wojtek-coreum left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed 1 of 7 files at r4, all commit messages.
Reviewable status: :shipit: complete! all files reviewed, all discussions resolved (waiting on @miladz68)

Copy link
Collaborator

@wojtek-coreum wojtek-coreum left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed 3 of 7 files at r2, 3 of 4 files at r3, 6 of 7 files at r4.
Reviewable status: :shipit: complete! all files reviewed, all discussions resolved (waiting on @miladz68)

@dzmitryhil dzmitryhil merged commit 52558e7 into master Nov 24, 2023
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants