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

Fix u128 jsonrpc serialization/deserialization issue #238

Merged
merged 5 commits into from
Sep 17, 2020

Conversation

koushiro
Copy link
Contributor

Signed-off-by: koushiro koushiro.cqx@gmail.com

JSON serialization/deserialization of i128/u128 can only be supported when the arbitrary_precision feature enabled.

But arbitrary_precision numbers don't work with serde(tag = ..) and serde(flatten) syntax (serde-rs/json#505), as a result, the deserialization of structures in jsonrpc-core will be error.

Fortunately, the crate jsonrpc-core provides a workround(paritytech/jsonrpc#521).
Although this workround will cause more extra serialization/deserialization work, but I think it's worth it.

Signed-off-by: koushiro <koushiro.cqx@gmail.com>
Signed-off-by: koushiro <koushiro.cqx@gmail.com>
@koushiro koushiro requested review from liuchengxu and atenjin and removed request for liuchengxu September 17, 2020 02:55
Signed-off-by: koushiro <koushiro.cqx@gmail.com>
Signed-off-by: koushiro <koushiro.cqx@gmail.com>
Copy link
Contributor

@liuchengxu liuchengxu left a comment

Choose a reason for hiding this comment

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

Nice! Just a few nits.

xpallets/mining/staking/rpc/Cargo.toml Outdated Show resolved Hide resolved
Signed-off-by: koushiro <koushiro.cqx@gmail.com>
@koushiro koushiro merged commit 33adc40 into develop-2.0 Sep 17, 2020
@koushiro koushiro deleted the koushiro/fix-json-128-issue branch September 17, 2020 06:23
koushiro added a commit that referenced this pull request Oct 23, 2020
Previously, the `Balance`, `Price` and `Weight` were serialized directly into u128 numbers
in #238, but polkadot.js could not parse them successfully.

Therefore, it is necessary to serialize `Balance`, `Price`, and `Weight` back to String.
Unlike before, the serialization conversion of `Balance` and `Price` only occurs at the RPC layer
and does not involve the types in the pallet (because the `Weight` is an alias of u128,
so we use serde derive directly on the type to complete the serialization conversion).

Signed-off-by: koushiro <koushiro.cqx@gmail.com>
koushiro added a commit that referenced this pull request Oct 23, 2020
Previously, the `Balance`, `Price` and `Weight` were serialized directly into u128 numbers
in #238, but polkadot.js could not parse them successfully.

Therefore, it is necessary to serialize `Balance`, `Price`, and `Weight` back to String.
Unlike before, the serialization conversion of `Balance` and `Price` only occurs at the RPC layer 
and does not involve the types in the pallet (because the `Weight` is an alias of u128,
so we use serde derive directly on the type to complete the serialization conversion).

Signed-off-by: koushiro <koushiro.cqx@gmail.com>
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.

2 participants