Skip to content

Commit e52c31a

Browse files
authored
Persist buffer size in the metadata (#1880)
* persist buffer size in the metadata * add chanelog * fix comment * fix another comment
1 parent 01f1cc6 commit e52c31a

File tree

4 files changed

+63
-23
lines changed

4 files changed

+63
-23
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
88
- Stabilize `call_runtime`[#1749](https://github.com/paritytech/ink/pull/1749)
99
- Make E2E testcases generic over `E2EBackend` trait - [#1867](https://github.com/paritytech/ink/pull/1867)
1010
- Modify static buffer size via environmental variables - [#1869](https://github.com/paritytech/ink/pull/1869)
11+
- Persist static buffer size in metadata - [#1880](https://github.com/paritytech/ink/pull/1880)
1112

1213
### Added
1314
- Schema generation - [#1765](https://github.com/paritytech/ink/pull/1765)

crates/ink/codegen/src/generator/metadata.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -387,6 +387,7 @@ impl Metadata<'_> {
387387
let timestamp = Self::generate_type_spec(&timestamp);
388388
let block_number = Self::generate_type_spec(&block_number);
389389
let chain_extension = Self::generate_type_spec(&chain_extension);
390+
let buffer_size_const = quote!(::ink::env::BUFFER_SIZE);
390391
quote_spanned!(span=>
391392
::ink::metadata::EnvironmentSpec::new()
392393
.account_id(#account_id)
@@ -396,6 +397,7 @@ impl Metadata<'_> {
396397
.block_number(#block_number)
397398
.chain_extension(#chain_extension)
398399
.max_event_topics(MAX_EVENT_TOPICS)
400+
.static_buffer_size(#buffer_size_const)
399401
.done()
400402
)
401403
}

crates/metadata/src/specs.rs

Lines changed: 52 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -661,6 +661,8 @@ mod state {
661661
pub struct ChainExtension;
662662
/// Type state for the max number of topics specified in the environment.
663663
pub struct MaxEventTopics;
664+
/// Type state for the size of the static buffer configured via environment variable.`
665+
pub struct BufferSize;
664666
}
665667

666668
impl<F> MessageSpec<F>
@@ -1551,6 +1553,7 @@ where
15511553
block_number: TypeSpec<F>,
15521554
chain_extension: TypeSpec<F>,
15531555
max_event_topics: usize,
1556+
static_buffer_size: usize,
15541557
}
15551558

15561559
impl<F> Default for EnvironmentSpec<F>
@@ -1567,6 +1570,7 @@ where
15671570
block_number: Default::default(),
15681571
chain_extension: Default::default(),
15691572
max_event_topics: Default::default(),
1573+
static_buffer_size: Default::default(),
15701574
}
15711575
}
15721576
}
@@ -1583,6 +1587,7 @@ impl IntoPortable for EnvironmentSpec {
15831587
block_number: self.block_number.into_portable(registry),
15841588
chain_extension: self.chain_extension.into_portable(registry),
15851589
max_event_topics: self.max_event_topics,
1590+
static_buffer_size: self.static_buffer_size,
15861591
}
15871592
}
15881593
}
@@ -1638,6 +1643,7 @@ where
16381643
Missing<state::BlockNumber>,
16391644
Missing<state::ChainExtension>,
16401645
Missing<state::MaxEventTopics>,
1646+
Missing<state::BufferSize>,
16411647
> {
16421648
EnvironmentSpecBuilder {
16431649
spec: Default::default(),
@@ -1649,18 +1655,18 @@ where
16491655
/// An environment specification builder.
16501656
#[allow(clippy::type_complexity)]
16511657
#[must_use]
1652-
pub struct EnvironmentSpecBuilder<F, A, B, H, T, BN, C, M>
1658+
pub struct EnvironmentSpecBuilder<F, A, B, H, T, BN, C, M, BS>
16531659
where
16541660
F: Form,
16551661
TypeSpec<F>: Default,
16561662
EnvironmentSpec<F>: Default,
16571663
{
16581664
spec: EnvironmentSpec<F>,
1659-
marker: PhantomData<fn() -> (A, B, H, T, BN, C, M)>,
1665+
marker: PhantomData<fn() -> (A, B, H, T, BN, C, M, BS)>,
16601666
}
16611667

1662-
impl<F, B, H, T, BN, C, M>
1663-
EnvironmentSpecBuilder<F, Missing<state::AccountId>, B, H, T, BN, C, M>
1668+
impl<F, B, H, T, BN, C, M, BS>
1669+
EnvironmentSpecBuilder<F, Missing<state::AccountId>, B, H, T, BN, C, M, BS>
16641670
where
16651671
F: Form,
16661672
TypeSpec<F>: Default,
@@ -1670,7 +1676,7 @@ where
16701676
pub fn account_id(
16711677
self,
16721678
account_id: TypeSpec<F>,
1673-
) -> EnvironmentSpecBuilder<F, state::AccountId, B, H, T, BN, C, M> {
1679+
) -> EnvironmentSpecBuilder<F, state::AccountId, B, H, T, BN, C, M, BS> {
16741680
EnvironmentSpecBuilder {
16751681
spec: EnvironmentSpec {
16761682
account_id,
@@ -1681,8 +1687,8 @@ where
16811687
}
16821688
}
16831689

1684-
impl<F, A, H, T, BN, C, M>
1685-
EnvironmentSpecBuilder<F, A, Missing<state::Balance>, H, T, BN, C, M>
1690+
impl<F, A, H, T, BN, C, M, BS>
1691+
EnvironmentSpecBuilder<F, A, Missing<state::Balance>, H, T, BN, C, M, BS>
16861692
where
16871693
F: Form,
16881694
TypeSpec<F>: Default,
@@ -1692,7 +1698,7 @@ where
16921698
pub fn balance(
16931699
self,
16941700
balance: TypeSpec<F>,
1695-
) -> EnvironmentSpecBuilder<F, A, state::Balance, H, T, BN, C, M> {
1701+
) -> EnvironmentSpecBuilder<F, A, state::Balance, H, T, BN, C, M, BS> {
16961702
EnvironmentSpecBuilder {
16971703
spec: EnvironmentSpec {
16981704
balance,
@@ -1703,8 +1709,8 @@ where
17031709
}
17041710
}
17051711

1706-
impl<F, A, B, T, BN, C, M>
1707-
EnvironmentSpecBuilder<F, A, B, Missing<state::Hash>, T, BN, C, M>
1712+
impl<F, A, B, T, BN, C, M, BS>
1713+
EnvironmentSpecBuilder<F, A, B, Missing<state::Hash>, T, BN, C, M, BS>
17081714
where
17091715
F: Form,
17101716
TypeSpec<F>: Default,
@@ -1714,16 +1720,16 @@ where
17141720
pub fn hash(
17151721
self,
17161722
hash: TypeSpec<F>,
1717-
) -> EnvironmentSpecBuilder<F, A, B, state::Hash, T, BN, C, M> {
1723+
) -> EnvironmentSpecBuilder<F, A, B, state::Hash, T, BN, C, M, BS> {
17181724
EnvironmentSpecBuilder {
17191725
spec: EnvironmentSpec { hash, ..self.spec },
17201726
marker: PhantomData,
17211727
}
17221728
}
17231729
}
17241730

1725-
impl<F, A, B, H, BN, C, M>
1726-
EnvironmentSpecBuilder<F, A, B, H, Missing<state::Timestamp>, BN, C, M>
1731+
impl<F, A, B, H, BN, C, M, BS>
1732+
EnvironmentSpecBuilder<F, A, B, H, Missing<state::Timestamp>, BN, C, M, BS>
17271733
where
17281734
F: Form,
17291735
TypeSpec<F>: Default,
@@ -1733,7 +1739,7 @@ where
17331739
pub fn timestamp(
17341740
self,
17351741
timestamp: TypeSpec<F>,
1736-
) -> EnvironmentSpecBuilder<F, A, B, H, state::Timestamp, BN, C, M> {
1742+
) -> EnvironmentSpecBuilder<F, A, B, H, state::Timestamp, BN, C, M, BS> {
17371743
EnvironmentSpecBuilder {
17381744
spec: EnvironmentSpec {
17391745
timestamp,
@@ -1744,8 +1750,8 @@ where
17441750
}
17451751
}
17461752

1747-
impl<F, A, B, H, T, C, M>
1748-
EnvironmentSpecBuilder<F, A, B, H, T, Missing<state::BlockNumber>, C, M>
1753+
impl<F, A, B, H, T, C, M, BS>
1754+
EnvironmentSpecBuilder<F, A, B, H, T, Missing<state::BlockNumber>, C, M, BS>
17491755
where
17501756
F: Form,
17511757
TypeSpec<F>: Default,
@@ -1755,7 +1761,7 @@ where
17551761
pub fn block_number(
17561762
self,
17571763
block_number: TypeSpec<F>,
1758-
) -> EnvironmentSpecBuilder<F, A, B, H, T, state::BlockNumber, C, M> {
1764+
) -> EnvironmentSpecBuilder<F, A, B, H, T, state::BlockNumber, C, M, BS> {
17591765
EnvironmentSpecBuilder {
17601766
spec: EnvironmentSpec {
17611767
block_number,
@@ -1766,8 +1772,8 @@ where
17661772
}
17671773
}
17681774

1769-
impl<F, A, B, H, T, BN, M>
1770-
EnvironmentSpecBuilder<F, A, B, H, T, BN, Missing<state::ChainExtension>, M>
1775+
impl<F, A, B, H, T, BN, M, BS>
1776+
EnvironmentSpecBuilder<F, A, B, H, T, BN, Missing<state::ChainExtension>, M, BS>
17711777
where
17721778
F: Form,
17731779
TypeSpec<F>: Default,
@@ -1777,7 +1783,7 @@ where
17771783
pub fn chain_extension(
17781784
self,
17791785
chain_extension: TypeSpec<F>,
1780-
) -> EnvironmentSpecBuilder<F, A, B, H, T, BN, state::ChainExtension, M> {
1786+
) -> EnvironmentSpecBuilder<F, A, B, H, T, BN, state::ChainExtension, M, BS> {
17811787
EnvironmentSpecBuilder {
17821788
spec: EnvironmentSpec {
17831789
chain_extension,
@@ -1788,8 +1794,8 @@ where
17881794
}
17891795
}
17901796

1791-
impl<F, A, B, H, T, BN, C>
1792-
EnvironmentSpecBuilder<F, A, B, H, T, BN, C, Missing<state::MaxEventTopics>>
1797+
impl<F, A, B, H, T, BN, C, BS>
1798+
EnvironmentSpecBuilder<F, A, B, H, T, BN, C, Missing<state::MaxEventTopics>, BS>
17931799
where
17941800
F: Form,
17951801
TypeSpec<F>: Default,
@@ -1799,7 +1805,7 @@ where
17991805
pub fn max_event_topics(
18001806
self,
18011807
max_event_topics: usize,
1802-
) -> EnvironmentSpecBuilder<F, A, B, H, T, BN, C, state::MaxEventTopics> {
1808+
) -> EnvironmentSpecBuilder<F, A, B, H, T, BN, C, state::MaxEventTopics, BS> {
18031809
EnvironmentSpecBuilder {
18041810
spec: EnvironmentSpec {
18051811
max_event_topics,
@@ -1810,6 +1816,28 @@ where
18101816
}
18111817
}
18121818

1819+
impl<F, A, B, H, T, BN, C, M>
1820+
EnvironmentSpecBuilder<F, A, B, H, T, BN, C, M, Missing<state::BufferSize>>
1821+
where
1822+
F: Form,
1823+
TypeSpec<F>: Default,
1824+
EnvironmentSpec<F>: Default,
1825+
{
1826+
/// Sets the size of the static buffer configured via environment variable.`
1827+
pub fn static_buffer_size(
1828+
self,
1829+
static_buffer_size: usize,
1830+
) -> EnvironmentSpecBuilder<F, A, B, H, T, BN, C, M, state::BufferSize> {
1831+
EnvironmentSpecBuilder {
1832+
spec: EnvironmentSpec {
1833+
static_buffer_size,
1834+
..self.spec
1835+
},
1836+
marker: PhantomData,
1837+
}
1838+
}
1839+
}
1840+
18131841
impl<F>
18141842
EnvironmentSpecBuilder<
18151843
F,
@@ -1820,6 +1848,7 @@ impl<F>
18201848
state::BlockNumber,
18211849
state::ChainExtension,
18221850
state::MaxEventTopics,
1851+
state::BufferSize,
18231852
>
18241853
where
18251854
F: Form,

crates/metadata/src/tests.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ fn spec_contract_only_one_default_constructor_allowed() {
157157
)]
158158
fn spec_contract_event_definition_exceeds_environment_topics_limit() {
159159
const MAX_EVENT_TOPICS: usize = 2;
160+
const BUFFER_SIZE: usize = 1 << 14;
160161

161162
ContractSpec::new()
162163
.constructors(vec![ConstructorSpec::from_label("new")
@@ -238,6 +239,7 @@ fn spec_contract_event_definition_exceeds_environment_topics_limit() {
238239
.block_number(TypeSpec::of_type::<u128>())
239240
.chain_extension(TypeSpec::of_type::<()>())
240241
.max_event_topics(MAX_EVENT_TOPICS)
242+
.static_buffer_size(BUFFER_SIZE)
241243
.done(),
242244
)
243245
.done();
@@ -249,6 +251,7 @@ fn spec_contract_event_definition_exceeds_environment_topics_limit() {
249251
)]
250252
fn spec_contract_event_definition_signature_topic_collision() {
251253
const SIGNATURE_TOPIC: Option<[u8; 32]> = Some([42u8; 32]);
254+
const BUFFER_SIZE: usize = 1 << 14;
252255

253256
ContractSpec::new()
254257
.constructors(vec![ConstructorSpec::from_label("new")
@@ -303,6 +306,7 @@ fn spec_contract_event_definition_signature_topic_collision() {
303306
.block_number(TypeSpec::of_type::<u128>())
304307
.chain_extension(TypeSpec::of_type::<()>())
305308
.max_event_topics(2)
309+
.static_buffer_size(BUFFER_SIZE)
306310
.done(),
307311
)
308312
.done();
@@ -320,6 +324,7 @@ fn spec_contract_json() {
320324
type BlockNumber = u128;
321325
type ChainExtension = NoChainExtension;
322326
const MAX_EVENT_TOPICS: usize = 4;
327+
const BUFFER_SIZE: usize = 1 << 14;
323328

324329
// given
325330
let contract: ContractSpec = ContractSpec::new()
@@ -424,6 +429,7 @@ fn spec_contract_json() {
424429
),
425430
))
426431
.max_event_topics(MAX_EVENT_TOPICS)
432+
.static_buffer_size(BUFFER_SIZE)
427433
.done(),
428434
)
429435
.done();
@@ -503,6 +509,7 @@ fn spec_contract_json() {
503509
],
504510
"type": 9,
505511
},
512+
"staticBufferSize": 16384,
506513
"chainExtension": {
507514
"displayName": [
508515
"ChainExtension",
@@ -714,6 +721,7 @@ fn environment_spec() -> EnvironmentSpec<PortableForm> {
714721
.block_number(Default::default())
715722
.chain_extension(Default::default())
716723
.max_event_topics(4)
724+
.static_buffer_size(16384)
717725
.done()
718726
}
719727

0 commit comments

Comments
 (0)