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

Accept all valid currency codes in API #4566

Merged
merged 4 commits into from
Sep 22, 2023
Merged

Conversation

thejohnfreeman
Copy link
Collaborator

A few methods, including book_offers, take currency codes as parameters. The XRPL doesn't care if the letters in those codes are lowercase or uppercase, as long as they come from an alphabet defined internally. rippled doesn't care either, when they are submitted in a hex representation. When they are submitted in an ASCII string representation, rippled, but not XRPL, is more restrictive, preventing clients from interacting with some currencies already in the XRPL.

This change gets rippled out of the way and lets clients submit currency codes in ASCII using the full alphabet.

Fixes #4112

A few methods, including `book_offers`, take currency codes as
parameters. The XRPL doesn't care if the letters in those codes are
lowercase or uppercase, as long as they come from an alphabet defined
internally. rippled doesn't care either, when they are submitted in
a hex representation. When they are submitted in an ASCII string
representation, rippled, but not XRPL, is more restrictive, preventing
clients from interacting with some currencies already in the XRPL.

This change gets rippled out of the way and lets clients submit currency
codes in ASCII using the full alphabet.

Fixes XRPLF#4112
@intelliot
Copy link
Collaborator

note: @ximinez is planning to review.

@nixer89 will you review this?

Copy link
Collaborator

@nixer89 nixer89 left a comment

Choose a reason for hiding this comment

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

lgtm

@intelliot intelliot added this to the 1.12 milestone Jul 12, 2023
@intelliot intelliot requested review from ckeshava and removed request for ximinez August 7, 2023 18:37
@@ -121,7 +121,8 @@ class RPCParser
static Json::Value
jvParseCurrencyIssuer(std::string const& strCurrencyIssuer)
{
static boost::regex reCurIss("\\`([[:alpha:]]{3})(?:/(.+))?\\'");
static boost::regex reCurIss(
"\\`([][:alnum:]<>(){}[|?!@#$%^&*]{3})(?:/(.+))?\\'");
Copy link
Collaborator

Choose a reason for hiding this comment

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

How is this regex working correctly? Is the tilde character (third character from the beginning) replaceable with the single-quote (last but one character) inside the regex?

can we include a comment referring to full alphabet or reuse the detail::isoCharSet variable? [I was thinking: "\`((detail::isoCharSet){3})(?:/(.+))?\'", but I'm not sure]

also, I've used regex libraries in other languages, but this one baffles me. what is the purpose of the suffix of this regular expression? [?:/(.+))?]

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

This is a boost::regex. It uses Perl syntax, which the library documents online. Look at the section "Buffer boundaries". (The character ` is called a backtick; tilde is ~.) \` matches the start of a buffer and \' matches the end of a buffer, so no, they cannot be replaced.

You could try to construct a regex string where detail::isoCharSet sits in a character class, but you would have to change the order within detail::isoCharSet because ] cannot appear in the middle of a character class; it can only appear as the first character in the class. I don't think that factoring is worth it, though.

(?:...) is a non-capturing group. It groups subatoms into a larger atom without creating a capture group. So (?:/(.+))? optionally matches a forward slash and a non-empty sequence of characters, capturing the characters after the slash into a group.

Copy link
Collaborator

Choose a reason for hiding this comment

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

ok, this is helpful. thank you

Copy link
Collaborator

Choose a reason for hiding this comment

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

I still feel adding a comment would be helpful for future readers of the code, but it's upto you.

On that note, how do you include suggested patches in github comments? I remember you did something like that for me a while ago.

Copy link
Collaborator

Choose a reason for hiding this comment

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

Suggested change
"\\`([][:alnum:]<>(){}[|?!@#$%^&*]{3})(?:/(.+))?\\'");
// The below regex matches the pattern as specified in UIntTypes.cpp:detail::isoCharSet. It is utilizes boost::regex and adheres to the Perl syntax for regular expressions.
"\\`([][:alnum:]<>(){}[|?!@#$%^&*]{3})(?:/(.+))?\\'");

Copy link
Collaborator

Choose a reason for hiding this comment

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

@thejohnfreeman to accept, modify, or decline suggested comment

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

I've pushed an alternative comment.

Copy link
Collaborator

Choose a reason for hiding this comment

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

ok 👍

@ckeshava
Copy link
Collaborator

lgtm

@thejohnfreeman thejohnfreeman added the Passed Passed code review & PR owner thinks it's ready to merge. Perf sign-off may still be required. label Aug 15, 2023
@intelliot intelliot modified the milestones: 1.12, 1.13 Aug 23, 2023
@intelliot
Copy link
Collaborator

@thejohnfreeman at your convenience, please bring this branch up-to-date with develop (or give me permission to do so)

@intelliot intelliot merged commit 6b61505 into XRPLF:develop Sep 22, 2023
15 checks passed
@intelliot intelliot mentioned this pull request Sep 22, 2023
1 task
sophiax851 pushed a commit to sophiax851/rippled that referenced this pull request Jun 12, 2024
A few methods, including `book_offers`, take currency codes as
parameters. The XRPL doesn't care if the letters in those codes are
lowercase or uppercase, as long as they come from an alphabet defined
internally. rippled doesn't care either, when they are submitted in a
hex representation. When they are submitted in an ASCII string
representation, rippled, but not XRPL, is more restrictive, preventing
clients from interacting with some currencies already in the XRPL.

This change gets rippled out of the way and lets clients submit currency
codes in ASCII using the full alphabet.

Fixes XRPLF#4112
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
API Change Bug Clio Reviewed Passed Passed code review & PR owner thinks it's ready to merge. Perf sign-off may still be required.
Projects
Archived in project
5 participants