Skip to content

Commit aa34f26

Browse files
authored
Payment api v2 (#1468)
* Add support of payment api v2 * Fix runtime dispatch info encoding * Add wrappers to specify integer encoding - Fixed and Compact
1 parent 5b40254 commit aa34f26

33 files changed

+482
-114
lines changed

core/api/jrpc/value_converter.hpp

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,9 @@ namespace kagome::api {
6060
inline jsonrpc::Value makeValue(const common::Buffer &);
6161
inline jsonrpc::Value makeValue(common::BufferView);
6262
inline jsonrpc::Value makeValue(const primitives::Extrinsic &);
63-
inline jsonrpc::Value makeValue(const primitives::RuntimeDispatchInfo &v);
63+
template <typename Weight>
64+
inline jsonrpc::Value makeValue(
65+
const primitives::RuntimeDispatchInfo<Weight> &v);
6466
inline jsonrpc::Value makeValue(const primitives::DigestItem &);
6567
inline jsonrpc::Value makeValue(const primitives::BlockData &);
6668
inline jsonrpc::Value makeValue(const primitives::BlockHeader &);
@@ -90,6 +92,17 @@ namespace kagome::api {
9092
return ret;
9193
}
9294

95+
// TODO(Harrm): refactor to work specifically with Balance type
96+
inline jsonrpc::Value makeValue(const primitives::Balance &val) {
97+
jsonrpc::Value ret((*val).str());
98+
return ret;
99+
}
100+
101+
inline jsonrpc::Value makeValue(const primitives::OldWeight &val) {
102+
jsonrpc::Value ret(static_cast<int64_t>(*val));
103+
return ret;
104+
}
105+
93106
template <typename T>
94107
inline jsonrpc::Value makeValue(std::remove_reference_t<T> &&val) {
95108
return makeValue(val);
@@ -233,11 +246,13 @@ namespace kagome::api {
233246
return data;
234247
}
235248

236-
inline jsonrpc::Value makeValue(const primitives::RuntimeDispatchInfo &v) {
249+
template <typename Weight>
250+
inline jsonrpc::Value makeValue(
251+
const primitives::RuntimeDispatchInfo<Weight> &v) {
237252
jStruct res;
238253
res["weight"] = makeValue(v.weight);
239254
res["partialFee"] = makeValue(v.partial_fee);
240-
using Class = primitives::RuntimeDispatchInfo::DispatchClass;
255+
using Class = primitives::DispatchClass;
241256
switch (v.dispatch_class) {
242257
case Class::Normal:
243258
res["class"] = "normal";

core/api/service/author/author_api.hpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ namespace kagome::api {
2626
using Hash256 = common::Hash256;
2727
using Buffer = common::Buffer;
2828
using Extrinsic = primitives::Extrinsic;
29-
using Metadata = primitives::Metadata;
3029
using SubscriptionId = primitives::SubscriptionId;
3130
using ExtrinsicKey = primitives::ExtrinsicKey;
3231
using TransactionSource = primitives::TransactionSource;

core/api/service/payment/impl/payment_api_impl.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@ namespace kagome::api {
1919
BOOST_ASSERT(block_tree_);
2020
}
2121

22-
outcome::result<primitives::RuntimeDispatchInfo> PaymentApiImpl::queryInfo(
23-
const primitives::Extrinsic &extrinsic,
24-
uint32_t len,
25-
OptionalHashRef at) const {
22+
outcome::result<primitives::RuntimeDispatchInfo<primitives::OldWeight>>
23+
PaymentApiImpl::queryInfo(const primitives::Extrinsic &extrinsic,
24+
uint32_t len,
25+
OptionalHashRef at) const {
2626
if (at.has_value()) {
2727
return api_->query_info(at.value(), extrinsic, len);
2828
}

core/api/service/payment/impl/payment_api_impl.hpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,10 @@ namespace kagome::api {
2424
std::shared_ptr<const blockchain::BlockTree> block_tree);
2525
~PaymentApiImpl() override = default;
2626

27-
outcome::result<primitives::RuntimeDispatchInfo> queryInfo(
28-
const primitives::Extrinsic &extrinsic,
29-
uint32_t len,
30-
OptionalHashRef at) const override;
27+
outcome::result<primitives::RuntimeDispatchInfo<primitives::OldWeight>>
28+
queryInfo(const primitives::Extrinsic &extrinsic,
29+
uint32_t len,
30+
OptionalHashRef at) const override;
3131

3232
private:
3333
std::shared_ptr<runtime::TransactionPaymentApi> api_;

core/api/service/payment/payment_api.hpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,11 @@ namespace kagome::api {
2222

2323
virtual ~PaymentApi() = default;
2424

25-
virtual outcome::result<primitives::RuntimeDispatchInfo> queryInfo(
26-
const primitives::Extrinsic &extrinsic,
27-
uint32_t len,
28-
OptionalHashRef at) const = 0;
25+
virtual outcome::result<
26+
primitives::RuntimeDispatchInfo<primitives::OldWeight>>
27+
queryInfo(const primitives::Extrinsic &extrinsic,
28+
uint32_t len,
29+
OptionalHashRef at) const = 0;
2930
};
3031

3132
} // namespace kagome::api

core/api/service/payment/requests/query_info.hpp

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,29 +16,31 @@
1616
namespace kagome::api::payment::request {
1717

1818
class QueryInfo final
19-
: public details::RequestType<primitives::RuntimeDispatchInfo,
20-
std::string,
21-
std::string> {
19+
: public details::RequestType<
20+
primitives::RuntimeDispatchInfo<primitives::OldWeight>,
21+
std::string,
22+
std::string> {
2223
public:
2324
explicit QueryInfo(std::shared_ptr<PaymentApi> api) : api_(std::move(api)) {
2425
BOOST_ASSERT(api_);
2526
};
2627

27-
outcome::result<primitives::RuntimeDispatchInfo> execute() override {
28+
outcome::result<primitives::RuntimeDispatchInfo<primitives::OldWeight>>
29+
execute() override {
2830
auto ext_hex = getParam<0>();
2931
OUTCOME_TRY(ext_bytes, common::unhexWith0x(ext_hex));
30-
auto len = ext_bytes.size();
32+
3133
OUTCOME_TRY(extrinsic, scale::decode<primitives::Extrinsic>(ext_bytes));
3234

3335
auto at_hex = getParam<1>();
3436
if (at_hex.empty()) {
35-
return api_->queryInfo(extrinsic, len, std::nullopt);
37+
return api_->queryInfo(extrinsic, ext_bytes.size(), std::nullopt);
3638
}
3739
common::Hash256 at_hash;
3840
OUTCOME_TRY(at, common::unhexWith0x(at_hex));
3941
BOOST_ASSERT(at.size() == common::Hash256::size());
4042
std::copy_n(at.cbegin(), common::Hash256::size(), at_hash.begin());
41-
return api_->queryInfo(extrinsic, len, std::cref(at_hash));
43+
return api_->queryInfo(extrinsic, ext_bytes.size(), std::cref(at_hash));
4244
}
4345

4446
private:

core/common/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ target_link_libraries(fd_limit
3232
)
3333

3434
add_library(mp_utils
35-
mp_utils.cpp
36-
mp_utils.hpp
35+
int_serialization.cpp
36+
int_serialization.hpp
3737
)
3838
target_link_libraries(mp_utils
3939
Boost::boost
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* SPDX-License-Identifier: Apache-2.0
44
*/
55

6-
#include "common/mp_utils.hpp"
6+
#include "common/int_serialization.hpp"
77

88
#include <gsl/gsl_util>
99

core/crypto/sr25519_types.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ extern "C" {
1313
#include <gsl/span>
1414

1515
#include "common/blob.hpp"
16-
#include "common/mp_utils.hpp"
16+
#include "common/int_serialization.hpp"
1717
#include "scale/tie.hpp"
1818

1919
namespace kagome::crypto {

0 commit comments

Comments
 (0)