Skip to content

Commit 440c453

Browse files
Enable spec shaking v2 by default (#1812)
### What Add `experimental_spec_shaking_v2` to the default feature set in `soroban-sdk`, enabling the feature by default. ### Why So far feedback is either neutral or positive. The feature significantly improves the spec shaking process of the sdk. Spec shaking v2 has been available as an experimental feature last month. The v26 release candidate will be created soon, and then it will become stable in 1 month. In total that provides approx 50 days for the experimental feature to be available for developers to provide feedback. The feature name with its `experimental_` prefix is preserved for backwards compatibility and will be removed in v27 when v2 becomes the only spec shaking implementation supported. If negative feedback arises while v26 is in release candidate we can revisit the roll out. While v26 is in stable people can still disable v2 if needed if edge cases are discovered, and the final roll out targeting v27 can be delayed if needed. --------- Co-authored-by: mootz12 <mootz12@protonmail.com>
1 parent 0b4bb28 commit 440c453

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+997
-60
lines changed

.github/workflows/test-with-openzeppelin-stellar-contracts.yml

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ jobs:
3636
fail-fast: false
3737
matrix:
3838
working-directory: ${{ fromJSON(needs.collect-crates.outputs.dirs) }}
39-
experimental_spec_shaking_v2: [true, false]
4039
defaults:
4140
run:
4241
working-directory: stellar-contracts/${{ matrix.working-directory }}
@@ -77,15 +76,6 @@ jobs:
7776
sed -i 's|'"$crate"' = { \(.*\)version = "[^"]*"\(.*\)|'"$crate"' = { \1path = "'"$rel_path"'" \2|g' Cargo.toml
7877
done
7978
80-
- name: Enable experimental_spec_shaking_v2 feature
81-
if: matrix.experimental_spec_shaking_v2
82-
working-directory: stellar-contracts
83-
run: |
84-
# Add feature to path-patched entries with existing features
85-
sed -i '/soroban-sdk = {.*path = /s|features = \[|features = ["experimental_spec_shaking_v2", |' Cargo.toml
86-
# Add features field to path-patched entries without features
87-
sed -i '/soroban-sdk = {.*path = /{/features/!s| }|, features = ["experimental_spec_shaking_v2"] }|}' Cargo.toml
88-
8979
- name: Diff
9080
run: (! git diff --exit-code) || (echo 'A diff is expected'; exit 1)
9181

@@ -99,7 +89,7 @@ jobs:
9989
- name: Set artifact name
10090
if: steps.check-if-contract.outputs.is-a-contract == 'true'
10191
id: artifact-name
102-
run: echo "name=wasm-$(echo ${{ matrix.working-directory }} | sed 's/\//-/g')${{ matrix.experimental_spec_shaking_v2 && '-spec-shaking-v2' || '' }}" | tee -a $GITHUB_OUTPUT
92+
run: echo "name=wasm-$(echo ${{ matrix.working-directory }} | sed 's/\//-/g')" | tee -a $GITHUB_OUTPUT
10393

10494
- name: Upload WASM artifacts
10595
if: steps.check-if-contract.outputs.is-a-contract == 'true'

.github/workflows/test-with-soroban-examples.yml

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ jobs:
4141
fail-fast: false
4242
matrix:
4343
working-directory: ${{ fromJSON(needs.collect-examples.outputs.dirs) }}
44-
experimental_spec_shaking_v2: [true, false]
4544
# Exclude examples that depend on crates.io packages that transitively
4645
# depend on soroban-sdk (e.g. soroban-poseidon). Cargo does not provide
4746
# a way to override the version of soroban-sdk required as a transitive
@@ -103,17 +102,6 @@ jobs:
103102
done
104103
done
105104
106-
- name: Enable experimental_spec_shaking_v2 feature
107-
if: matrix.experimental_spec_shaking_v2
108-
working-directory: soroban-examples
109-
run: |
110-
find . -name Cargo.toml | while read -r file; do
111-
# Add feature to path-patched entries with existing features
112-
sed -i '/soroban-sdk = {.*path = /s|features = \[|features = ["experimental_spec_shaking_v2", |' "$file"
113-
# Add features field to path-patched entries without features
114-
sed -i '/soroban-sdk = {.*path = /{/features/!s| }|, features = ["experimental_spec_shaking_v2"] }|}' "$file"
115-
done
116-
117105
- name: Diff
118106
run: (! git diff --exit-code) || (echo 'A diff is expected'; exit 1)
119107

@@ -125,7 +113,7 @@ jobs:
125113

126114
- name: Set artifact name
127115
id: artifact-name
128-
run: echo "name=wasm-$(echo ${{ matrix.working-directory }} | sed 's/\//-/g')${{ matrix.experimental_spec_shaking_v2 && '-spec-shaking-v2' || '' }}" | tee -a $GITHUB_OUTPUT
116+
run: echo "name=wasm-$(echo ${{ matrix.working-directory }} | sed 's/\//-/g')" | tee -a $GITHUB_OUTPUT
129117

130118
- name: Upload WASM artifacts
131119
uses: actions/upload-artifact@v4

soroban-meta/src/tests.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ fn test_from_wasm() {
1212
ScMetaEntry::ScMetaV0(v0) => v0.key.to_string(),
1313
})
1414
.collect::<Vec<_>>();
15-
assert_eq!(keys, ["rsver"]);
15+
assert_eq!(keys, ["rsver", "rssdk_spec_shaking"]);
1616
}
1717

1818
#[test]
@@ -58,5 +58,5 @@ fn test_multiple_metadata_sections() {
5858
ScMetaEntry::ScMetaV0(v0) => v0.key.to_string(),
5959
})
6060
.collect::<Vec<_>>();
61-
assert_eq!(keys, ["rsver", "mykey"]);
61+
assert_eq!(keys, ["rsver", "rssdk_spec_shaking", "mykey"]);
6262
}

soroban-sdk/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ ark-bls12-381 = { version = "0.5", default-features = false, features = ["curve"
6464
ark-ff = { version = "0.5", default-features = false }
6565

6666
[features]
67+
default = ["experimental_spec_shaking_v2"]
6768
alloc = []
6869
testutils = ["soroban-sdk-macros/testutils", "soroban-env-host/testutils", "soroban-ledger-snapshot/testutils", "dep:ed25519-dalek", "dep:arbitrary", "dep:derive_arbitrary", "dep:ctor", "dep:soroban-ledger-snapshot"]
6970
experimental_spec_shaking_v2 = ["soroban-sdk-macros/experimental_spec_shaking_v2"]

soroban-sdk/src/_features.rs

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,19 @@
2626
//! [`Address::from_payload`][crate::Address::from_payload]) that are easy to
2727
//! misuse. Use with care.
2828
//!
29-
//! ## `experimental_spec_shaking_v2`
29+
//! ## `experimental_spec_shaking_v2` (default)
3030
//!
3131
//! Enables v2 spec shaking, an improved mechanism for controlling which type,
32-
//! event, and function definitions appear in a contract's spec.
32+
//! event, and function definitions appear in a contract's spec. This feature is
33+
//! enabled by default.
3334
//!
34-
//! ### Spec Shaking v1 (default, no feature flag)
35+
//! This feature is no longer experimental. It was previously introduced as an
36+
//! experimental opt-in feature and is now being rolled out as the default. The
37+
//! original feature name `experimental_spec_shaking_v2` is preserved for
38+
//! backwards compatibility. The feature is expected to be removed in v27, at
39+
//! which point spec shaking v2 will be always on.
40+
//!
41+
//! ### Spec Shaking v1 (disabled by default, use `default-features = false`)
3542
//!
3643
//! - Lib imports (via `contractimport!`): exported
3744
//! - Wasm imports (via `contractimport!`): not exported
@@ -40,7 +47,7 @@
4047
//! - All events: exported
4148
//! - All functions: exported
4249
//!
43-
//! ### Spec Shaking v2 (this feature)
50+
//! ### Spec Shaking v2 (default)
4451
//!
4552
//! - Everything exported (types, events, functions, imports)
4653
//! - Unused entries shaken out using dead code / spec elimination

soroban-sdk/test_snapshots/tests/address/test_get_existing_contract_address_executable_wasm.1.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
"val": {
4848
"contract_instance": {
4949
"executable": {
50-
"wasm": "082ef6678547237e331161a8487a2eb11aa037114fde60f36dae3455ad72b4d3"
50+
"wasm": "d31850fea406e46577bb137d5fbe2e78a574caf8b868eec8eac690449b06e9ec"
5151
},
5252
"storage": null
5353
}
@@ -68,7 +68,7 @@
6868
"ext": "v0",
6969
"cost_inputs": {
7070
"ext": "v0",
71-
"n_instructions": 801,
71+
"n_instructions": 831,
7272
"n_functions": 8,
7373
"n_globals": 4,
7474
"n_table_entries": 0,
@@ -77,12 +77,12 @@
7777
"n_elem_segments": 0,
7878
"n_imports": 7,
7979
"n_exports": 5,
80-
"n_data_segment_bytes": 76
80+
"n_data_segment_bytes": 132
8181
}
8282
}
8383
},
84-
"hash": "082ef6678547237e331161a8487a2eb11aa037114fde60f36dae3455ad72b4d3",
85-
"code": "0061736d01000000012e0860017e017e60037e7e7e017e60047e7e7e7e017e60027e7e017e60027f7e0060027f7f0060027f7f017f600000022b070176013300000162016d0001016d01610002017601680001016901320000017601310003016901310000030908040506040503070705030100110621047f01418080c0000b7f0041cc80c0000b7f0041cc80c0000b7f0041d080c0000b072f05066d656d6f7279020003616464000c015f03010a5f5f646174615f656e6403020b5f5f686561705f6261736503030ad90d08d30604017f017e027f017e23808080800041c0006b220224808080800002400240200142ff018342cb00510d00200041043a00000c010b200110808080800021032002410036021020022001370308200220034220883e0214200241186a200241086a1088808080000240024002400240200229031822014202510d002001a74101710d00024020022903202201a741ff0171220441ca00460d002004410e470d010b02400240024002402001419080c08000ad4220864204844284808080c000108180808000422088a70e0400010203050b200228021020022802141089808080000d04410021050c050b2002280210200228021410898080800041014b0d03200241186a200241086a108880808000200229031822014202510d032001a74101710d0320022903202101410021040240034020044118460d01200241186a20046a4202370300200441086a21040c000b0b200142ff018342cc00520d03200141b480c08000ad422086420484200241186aad4220864204844284808080301082808080001a200241306a2002290318108a8080800020022802300d0320022903382103200241306a2002290320108a8080800020022802300d032002290328220642ff018342cb00520d0320022903382101410121050c040b2002280210200228021410898080800041014b0d02200241186a200241086a108880808000200229031822014202510d022001a74101710d022002290320220142ff01834204520d02410a410f41092001422088a72204410f461b2004410a461b22044109460d02410221050c040b2002280210200228021410898080800041014b0d01200241186a200241086a108880808000200229031822014202510d012001a74101710d012002290320220142ff018342cb00520d01410021040240034020044110460d01200241306a20046a4202370300200441086a21040c000b0b2001200241306aad4220864204844284808080201083808080001a200241186a2002290330108a8080800020022802184101460d012002290338220142ff018342cb00520d0120022903202103410321050c020b200041043a00000c030b200041043a00000c020b0b200020063703182000200137031020002003370308200020043a0001200020053a00000b200241c0006a2480808080000b4a02017e017f42022102024020012802082203200128020c4f0d00200020012903002003ad4220864204841085808080003703082001200341016a360208420021020b200020023703000b1900024020012000490d00200120006b0f0b108d80808000000b5d02017f017e024002402001a741ff0171220241c100460d00024020024107460d00420121034283908080800121010c020b20014208872101420021030c010b42002103200110848080800021010b20002003370300200020013703080b7803017f017e017f23808080800041106b220224808080800042022103024020012802082204200128020c4f0d00200220012903002004ad422086420484108580808000108a8080800020022903002103200020022903083703082001200441016a3602080b20002003370300200241106a2480808080000bb70404027f027e017f057e23808080800041306b22022480808080002002200010878080800002400240024020022d000022034104460d002002290310210020022903082104200231000121052002200110878080800020022d000022064104460d002002290310210720022903082108200231000121094200210a4200210b024002400240024020030e0405020100050b200010808080800021012002410036022820022000370320200220014220883e022c4200210003402002200241206a108b80808000200229030022014202510d032001a74101710d0620022903082201420053200020017c2201200053470d06200121000c000b0b2005210b0c030b2000420053200420007c220b20045373450d020c030b2000420053200420007c220b20045373450d010c020b000b0240024002400240024020060e0404020100040b200710808080800021002002410036022820022007370320200220004220883e022c4200210003402002200241206a108b80808000200229030022014202510d032001a74101710d0520022903082201420053200020017c2201200053470d05200121000c000b0b2009210a0c020b2007420053200820077c220a200853730d020c010b2000420053200820007c220a200853730d010b200a420053200b200a7c2200200b53730d000240024020004280808080808080c0007c42ffffffffffffffff00560d00200042088642078421000c010b200010868080800021000b200241306a24808080800020000f0b108d80808000000b0900108e80808000000b0300000b0b550100418080c0000b4c556474415564744255647443556474440000100004000000040010000400000008001000040000000c001000040000006162630030001000010000003100100001000000320010000100000000cf030e636f6e74726163747370656376300000000000000000000000036164640000000002000000000000000161000000000007d000000007556474456e756d00000000000000000162000000000007d000000007556474456e756d00000000010000000700000002000000000000000000000007556474456e756d0000000004000000000000000000000004556474410000000100000000000000045564744200000001000007d0000000095564745374727563740000000000000100000000000000045564744300000001000007d000000008556474456e756d320000000100000000000000045564744400000001000007d0000000085564745475706c6500000003000000000000000000000008556474456e756d32000000020000000000000001410000000000000a0000000000000001420000000000000f000000010000000000000000000000085564745475706c650000000200000000000000013000000000000007000000000000000131000000000003ea0000000700000001000000000000000000000009556474537472756374000000000000030000000000000001610000000000000700000000000000016200000000000007000000000000000163000000000003ea00000007001e11636f6e7472616374656e766d6574617630000000000000001a00000000002b0e636f6e74726163746d65746176300000000000000005727376657200000000000006312e39312e300000"
84+
"hash": "d31850fea406e46577bb137d5fbe2e78a574caf8b868eec8eac690449b06e9ec",
85+
"code": "0061736d01000000012e0860017e017e60037e7e7e017e60047e7e7e7e017e60027e7e017e60027f7f0060027f7f017f60027f7e00600000022b070176013300000162016d0001016d01610002017601680001016901320000017601310003016901310000030908040405060403070705030100110621047f01418080c0000b7f00418481c0000b7f00418481c0000b7f00419081c0000b072f05066d656d6f7279020003616464000c015f03010a5f5f646174615f656e6403020b5f5f686561705f6261736503030aa50e08800704017f027e017f017e23808080800041c0006b220224808080800041002d00aa80c080001a41002d008e80c080001a41002d009c80c080001a41002d008080c080001a024002402001290300220342ff018342cb00510d00200041043a00000c010b200310808080800021042002410036021020022003370308200220044220883e0214200241186a200241086a1088808080000240024002400240200229031822034202510d002003a74101710d00024020022903202203a741ff0171220141ca00460d002001410e470d010b0240024002400240200341c880c08000ad4220864204844284808080c000108180808000422088a70e0400010203050b200228021020022802141089808080000d04410021050c050b2002280210200228021410898080800041014b0d03200241186a200241086a108880808000200229031822034202510d032003a74101710d0320022903202103410021010240034020014118460d01200241186a20016a4202370300200141086a21010c000b0b200342ff018342cc00520d03200341ec80c08000ad422086420484200241186aad4220864204844284808080301082808080001a200241306a2002290318108a8080800020022802300d0320022903382104200241306a2002290320108a8080800020022802300d032002290328220642ff018342cb00520d0320022903382103410121050c040b2002280210200228021410898080800041014b0d02200241186a200241086a108880808000200229031822034202510d022003a74101710d022002290320220342ff01834204520d02410a410f41092003422088a72201410f461b2001410a461b22014109460d02410221050c040b2002280210200228021410898080800041014b0d01200241186a200241086a108880808000200229031822034202510d012003a74101710d012002290320220342ff018342cb00520d01410021010240034020014110460d01200241306a20016a4202370300200141086a21010c000b0b2003200241306aad4220864204844284808080201083808080001a200241186a2002290330108a8080800020022802184101460d012002290338220342ff018342cb00520d0120022903202104410321050c020b200041043a00000c030b200041043a00000c020b0b200020063703182000200337031020002004370308200020013a0001200020053a00000b200241c0006a2480808080000b4a02017e017f42022102024020012802082203200128020c4f0d00200020012903002003ad4220864204841085808080003703082001200341016a360208420021020b200020023703000b1900024020012000490d00200120006b0f0b108d80808000000b5d02017f017e024002402001a741ff0171220241c100460d00024020024107460d00420121034283908080800121010c020b20014208872101420021030c010b42002103200110848080800021010b20002003370300200020013703080b7803017f017e017f23808080800041106b220224808080800042022103024020012802082204200128020c4f0d00200220012903002004ad422086420484108580808000108a8080800020022903002103200020022903083703082001200441016a3602080b20002003370300200241106a2480808080000bd60404027f017e017f057e23808080800041c0006b22022480808080002002200137030820022000370300200241106a200210878080800002400240024020022d001022034104460d00200229032021012002290318210420023100112100200241106a200241086a10878080800020022d001022054104460d00200229032021062002290318210720023100112108420021094200210a024002400240024020030e0405020100050b200110808080800021002002410036023820022001370330200220004220883e023c420021010340200241106a200241306a108b80808000200229031022004202510d032000a74101710d0620022903182200420053200120007c2200200153470d06200021010c000b0b2000210a0c030b2001420053200420017c220a20045373450d020c030b2001420053200420017c220a20045373450d010c020b000b0240024002400240024020050e0404020100040b200610808080800021012002410036023820022006370330200220014220883e023c420021010340200241106a200241306a108b80808000200229031022004202510d032000a74101710d0520022903182200420053200120007c2200200153470d05200021010c000b0b200821090c020b2006420053200720067c2209200753730d020c010b2001420053200720017c2209200753730d010b2009420053200a20097c2201200a53730d000240024020014280808080808080c0007c42ffffffffffffffff00560d00200142088642078421010c010b200110868080800021010b200241c0006a24808080800020010f0b108d80808000000b0900108e80808000000b0300000b0b8e010100418080c0000b8401537045635631f3b0ab40690d48b4537045635631aff793ba9e4dde9a537045635631eb9f12269a76282a53704563563116276438ffc9b1f85564744155647442556474435564744438001000040000003c001000040000004000100004000000440010000400000061626300680010000100000069001000010000006a0010000100000000cf030e636f6e74726163747370656376300000000000000000000000036164640000000002000000000000000161000000000007d000000007556474456e756d00000000000000000162000000000007d000000007556474456e756d00000000010000000700000002000000000000000000000007556474456e756d0000000004000000000000000000000004556474410000000100000000000000045564744200000001000007d0000000095564745374727563740000000000000100000000000000045564744300000001000007d000000008556474456e756d320000000100000000000000045564744400000001000007d0000000085564745475706c6500000003000000000000000000000008556474456e756d32000000020000000000000001410000000000000a0000000000000001420000000000000f000000010000000000000000000000085564745475706c650000000200000000000000013000000000000007000000000000000131000000000003ea0000000700000001000000000000000000000009556474537472756374000000000000030000000000000001610000000000000700000000000000016200000000000007000000000000000163000000000003ea00000007001e11636f6e7472616374656e766d6574617630000000000000001a00000000004f0e636f6e74726163746d65746176300000000000000005727376657200000000000006312e39312e3000000000000000000012727373646b5f737065635f7368616b696e6700000000000132000000"
8686
}
8787
},
8888
"ext": "v0"

0 commit comments

Comments
 (0)