Patch xdr and spec crates to support long type names - #2674

Draft
leighmcculloch wants to merge 5 commits into
mainfrom
patch-xdr-and-spec-crates
Draft

Patch xdr and spec crates to support long type names#2674
leighmcculloch wants to merge 5 commits into
mainfrom
patch-xdr-and-spec-crates

Conversation

@leighmcculloch

@leighmccullochleighmcculloch commented Aug 7, 2026

Copy link
Copy Markdown
Member

Note

Part of a stack of PRs that must merge in this order.

A first group of PRs deliver const-encoded contract specs, so that contract specs are produced at compile time instead of at proc-macro execution time. This provides the foundation for the capability to construct the specs from information that is not known at proc-macro execution and only known at compile time, like the fully qualified name of a type:

  1. Add borrowed View variants of generated types rs-stellar-xdr#560
  2. Add const XDR serialization on View types rs-stellar-xdr#562
  3. Encode contract spec XDR at const evaluation time rs-soroban-sdk#1965

A second group of PRs deliver fully qualified type names in contract specs. Instead of a type having the name Context it will have the name soroban_sdk::auth::Context. Qualified type names make it possible to uniquely identify types in the spec, even when they have the same name. This resolves several problems with contract specs the type identify problem (stellar/rs-soroban-sdk#1570), type aliases limitations (stellar/rs-soroban-sdk#1857stellar/rs-soroban-sdk#1063), and optimise spec shaking data section size (stellar/rs-soroban-sdk#1978):

  1. Widen user-defined type name limit stellar-xdr#312
  2. Regenerate with widened UDT name limit rs-stellar-xdr#566
  3. Qualify user-defined type names rs-soroban-sdk#1970
  4. Update stellar-xdr to 28.0.0 rs-stellar-rpc-client#108
  5. Patch xdr and spec crates to support long type names #2674 ← this PR

What

Patch stellar-xdr to stellar/rs-stellar-xdr#566, the soroban spec crates to stellar/rs-soroban-sdk#1970, and stellar-rpc-client to stellar/rs-stellar-rpc-client#108, moving the workspace to stellar-xdr 28 and soroban-env-host 28.0.1, and adapt the CLI to the widened user-defined type name limit and the new ScVal::ExecutableTag and ContractExecutable::ExternalRef variants.

Why

Contract specs are moving to fully qualified user-defined type names, which need the widened name limit those PRs deliver, and the CLI has to be able to read and print specs produced by them.

Known limitations

The network-backed suites (RPC Tests, bindings typescript, Ledger Emulator Tests) fail because the test contracts now build against protocol 28 while the quickstart image still runs an older host, which rejects them with "contract protocol number is newer than host"; they stay red until a protocol 28 quickstart exists. Merging also depends on all three upstream PRs landing and releasing, with the [patch.crates-io] git revisions replaced by published versions.

@github-project-automationgithub-project-automationBot moved this to Backlog (Not Ready) in DevXAug 7, 2026
@leighmccullochleighmcculloch changed the title Patch xdr and spec crates to pending PRsPatch xdr and spec crates to support long type namesAug 7, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

1 participant

@leighmcculloch
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Patch xdr and spec crates to support long type names - #2674

Draft
leighmcculloch wants to merge 5 commits into
mainfrom
patch-xdr-and-spec-crates
Draft

Patch xdr and spec crates to support long type names#2674
leighmcculloch wants to merge 5 commits into
mainfrom
patch-xdr-and-spec-crates

Conversation

@leighmcculloch

@leighmccullochleighmcculloch commented Aug 7, 2026

Copy link
Copy Markdown
Member

Note

Part of a stack of PRs that must merge in this order.

A first group of PRs deliver const-encoded contract specs, so that contract specs are produced at compile time instead of at proc-macro execution time. This provides the foundation for the capability to construct the specs from information that is not known at proc-macro execution and only known at compile time, like the fully qualified name of a type:

  1. Add borrowed View variants of generated types rs-stellar-xdr#560
  2. Add const XDR serialization on View types rs-stellar-xdr#562
  3. Encode contract spec XDR at const evaluation time rs-soroban-sdk#1965

A second group of PRs deliver fully qualified type names in contract specs. Instead of a type having the name Context it will have the name soroban_sdk::auth::Context. Qualified type names make it possible to uniquely identify types in the spec, even when they have the same name. This resolves several problems with contract specs the type identify problem (stellar/rs-soroban-sdk#1570), type aliases limitations (stellar/rs-soroban-sdk#1857stellar/rs-soroban-sdk#1063), and optimise spec shaking data section size (stellar/rs-soroban-sdk#1978):

  1. Widen user-defined type name limit stellar-xdr#312
  2. Regenerate with widened UDT name limit rs-stellar-xdr#566
  3. Qualify user-defined type names rs-soroban-sdk#1970
  4. Update stellar-xdr to 28.0.0 rs-stellar-rpc-client#108
  5. Patch xdr and spec crates to support long type names #2674 ← this PR

What

Patch stellar-xdr to stellar/rs-stellar-xdr#566, the soroban spec crates to stellar/rs-soroban-sdk#1970, and stellar-rpc-client to stellar/rs-stellar-rpc-client#108, moving the workspace to stellar-xdr 28 and soroban-env-host 28.0.1, and adapt the CLI to the widened user-defined type name limit and the new ScVal::ExecutableTag and ContractExecutable::ExternalRef variants.

Why

Contract specs are moving to fully qualified user-defined type names, which need the widened name limit those PRs deliver, and the CLI has to be able to read and print specs produced by them.

Known limitations

The network-backed suites (RPC Tests, bindings typescript, Ledger Emulator Tests) fail because the test contracts now build against protocol 28 while the quickstart image still runs an older host, which rejects them with "contract protocol number is newer than host"; they stay red until a protocol 28 quickstart exists. Merging also depends on all three upstream PRs landing and releasing, with the [patch.crates-io] git revisions replaced by published versions.

@github-project-automationgithub-project-automationBot moved this to Backlog (Not Ready) in DevXAug 7, 2026
@leighmccullochleighmcculloch changed the title Patch xdr and spec crates to pending PRsPatch xdr and spec crates to support long type namesAug 7, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

1 participant

@leighmcculloch
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Patch xdr and spec crates to support long type names - #2674

Draft
leighmcculloch wants to merge 5 commits into
mainfrom
patch-xdr-and-spec-crates
Draft

Patch xdr and spec crates to support long type names#2674
leighmcculloch wants to merge 5 commits into
mainfrom
patch-xdr-and-spec-crates

Conversation

@leighmcculloch

@leighmccullochleighmcculloch commented Aug 7, 2026

Copy link
Copy Markdown
Member

Note

Part of a stack of PRs that must merge in this order.

A first group of PRs deliver const-encoded contract specs, so that contract specs are produced at compile time instead of at proc-macro execution time. This provides the foundation for the capability to construct the specs from information that is not known at proc-macro execution and only known at compile time, like the fully qualified name of a type:

  1. Add borrowed View variants of generated types rs-stellar-xdr#560
  2. Add const XDR serialization on View types rs-stellar-xdr#562
  3. Encode contract spec XDR at const evaluation time rs-soroban-sdk#1965

A second group of PRs deliver fully qualified type names in contract specs. Instead of a type having the name Context it will have the name soroban_sdk::auth::Context. Qualified type names make it possible to uniquely identify types in the spec, even when they have the same name. This resolves several problems with contract specs the type identify problem (stellar/rs-soroban-sdk#1570), type aliases limitations (stellar/rs-soroban-sdk#1857stellar/rs-soroban-sdk#1063), and optimise spec shaking data section size (stellar/rs-soroban-sdk#1978):

  1. Widen user-defined type name limit stellar-xdr#312
  2. Regenerate with widened UDT name limit rs-stellar-xdr#566
  3. Qualify user-defined type names rs-soroban-sdk#1970
  4. Update stellar-xdr to 28.0.0 rs-stellar-rpc-client#108
  5. Patch xdr and spec crates to support long type names #2674 ← this PR

What

Patch stellar-xdr to stellar/rs-stellar-xdr#566, the soroban spec crates to stellar/rs-soroban-sdk#1970, and stellar-rpc-client to stellar/rs-stellar-rpc-client#108, moving the workspace to stellar-xdr 28 and soroban-env-host 28.0.1, and adapt the CLI to the widened user-defined type name limit and the new ScVal::ExecutableTag and ContractExecutable::ExternalRef variants.

Why

Contract specs are moving to fully qualified user-defined type names, which need the widened name limit those PRs deliver, and the CLI has to be able to read and print specs produced by them.

Known limitations

The network-backed suites (RPC Tests, bindings typescript, Ledger Emulator Tests) fail because the test contracts now build against protocol 28 while the quickstart image still runs an older host, which rejects them with "contract protocol number is newer than host"; they stay red until a protocol 28 quickstart exists. Merging also depends on all three upstream PRs landing and releasing, with the [patch.crates-io] git revisions replaced by published versions.

@github-project-automationgithub-project-automationBot moved this to Backlog (Not Ready) in DevXAug 7, 2026
@leighmccullochleighmcculloch changed the title Patch xdr and spec crates to pending PRsPatch xdr and spec crates to support long type namesAug 7, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

1 participant

@leighmcculloch
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Patch xdr and spec crates to support long type names - #2674

Draft
leighmcculloch wants to merge 5 commits into
mainfrom
patch-xdr-and-spec-crates
Draft

Patch xdr and spec crates to support long type names#2674
leighmcculloch wants to merge 5 commits into
mainfrom
patch-xdr-and-spec-crates

Conversation

@leighmcculloch

@leighmccullochleighmcculloch commented Aug 7, 2026

Copy link
Copy Markdown
Member

Note

Part of a stack of PRs that must merge in this order.

A first group of PRs deliver const-encoded contract specs, so that contract specs are produced at compile time instead of at proc-macro execution time. This provides the foundation for the capability to construct the specs from information that is not known at proc-macro execution and only known at compile time, like the fully qualified name of a type:

  1. Add borrowed View variants of generated types rs-stellar-xdr#560
  2. Add const XDR serialization on View types rs-stellar-xdr#562
  3. Encode contract spec XDR at const evaluation time rs-soroban-sdk#1965

A second group of PRs deliver fully qualified type names in contract specs. Instead of a type having the name Context it will have the name soroban_sdk::auth::Context. Qualified type names make it possible to uniquely identify types in the spec, even when they have the same name. This resolves several problems with contract specs the type identify problem (stellar/rs-soroban-sdk#1570), type aliases limitations (stellar/rs-soroban-sdk#1857stellar/rs-soroban-sdk#1063), and optimise spec shaking data section size (stellar/rs-soroban-sdk#1978):

  1. Widen user-defined type name limit stellar-xdr#312
  2. Regenerate with widened UDT name limit rs-stellar-xdr#566
  3. Qualify user-defined type names rs-soroban-sdk#1970
  4. Update stellar-xdr to 28.0.0 rs-stellar-rpc-client#108
  5. Patch xdr and spec crates to support long type names #2674 ← this PR

What

Patch stellar-xdr to stellar/rs-stellar-xdr#566, the soroban spec crates to stellar/rs-soroban-sdk#1970, and stellar-rpc-client to stellar/rs-stellar-rpc-client#108, moving the workspace to stellar-xdr 28 and soroban-env-host 28.0.1, and adapt the CLI to the widened user-defined type name limit and the new ScVal::ExecutableTag and ContractExecutable::ExternalRef variants.

Why

Contract specs are moving to fully qualified user-defined type names, which need the widened name limit those PRs deliver, and the CLI has to be able to read and print specs produced by them.

Known limitations

The network-backed suites (RPC Tests, bindings typescript, Ledger Emulator Tests) fail because the test contracts now build against protocol 28 while the quickstart image still runs an older host, which rejects them with "contract protocol number is newer than host"; they stay red until a protocol 28 quickstart exists. Merging also depends on all three upstream PRs landing and releasing, with the [patch.crates-io] git revisions replaced by published versions.

@github-project-automationgithub-project-automationBot moved this to Backlog (Not Ready) in DevXAug 7, 2026
@leighmccullochleighmcculloch changed the title Patch xdr and spec crates to pending PRsPatch xdr and spec crates to support long type namesAug 7, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

1 participant

@leighmcculloch
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Patch xdr and spec crates to support long type names - #2674

Draft
leighmcculloch wants to merge 5 commits into
mainfrom
patch-xdr-and-spec-crates
Draft

Patch xdr and spec crates to support long type names#2674
leighmcculloch wants to merge 5 commits into
mainfrom
patch-xdr-and-spec-crates

Conversation

@leighmcculloch

@leighmccullochleighmcculloch commented Aug 7, 2026

Copy link
Copy Markdown
Member

Note

Part of a stack of PRs that must merge in this order.

A first group of PRs deliver const-encoded contract specs, so that contract specs are produced at compile time instead of at proc-macro execution time. This provides the foundation for the capability to construct the specs from information that is not known at proc-macro execution and only known at compile time, like the fully qualified name of a type:

  1. Add borrowed View variants of generated types rs-stellar-xdr#560
  2. Add const XDR serialization on View types rs-stellar-xdr#562
  3. Encode contract spec XDR at const evaluation time rs-soroban-sdk#1965

A second group of PRs deliver fully qualified type names in contract specs. Instead of a type having the name Context it will have the name soroban_sdk::auth::Context. Qualified type names make it possible to uniquely identify types in the spec, even when they have the same name. This resolves several problems with contract specs the type identify problem (stellar/rs-soroban-sdk#1570), type aliases limitations (stellar/rs-soroban-sdk#1857stellar/rs-soroban-sdk#1063), and optimise spec shaking data section size (stellar/rs-soroban-sdk#1978):

  1. Widen user-defined type name limit stellar-xdr#312
  2. Regenerate with widened UDT name limit rs-stellar-xdr#566
  3. Qualify user-defined type names rs-soroban-sdk#1970
  4. Update stellar-xdr to 28.0.0 rs-stellar-rpc-client#108
  5. Patch xdr and spec crates to support long type names #2674 ← this PR

What

Patch stellar-xdr to stellar/rs-stellar-xdr#566, the soroban spec crates to stellar/rs-soroban-sdk#1970, and stellar-rpc-client to stellar/rs-stellar-rpc-client#108, moving the workspace to stellar-xdr 28 and soroban-env-host 28.0.1, and adapt the CLI to the widened user-defined type name limit and the new ScVal::ExecutableTag and ContractExecutable::ExternalRef variants.

Why

Contract specs are moving to fully qualified user-defined type names, which need the widened name limit those PRs deliver, and the CLI has to be able to read and print specs produced by them.

Known limitations

The network-backed suites (RPC Tests, bindings typescript, Ledger Emulator Tests) fail because the test contracts now build against protocol 28 while the quickstart image still runs an older host, which rejects them with "contract protocol number is newer than host"; they stay red until a protocol 28 quickstart exists. Merging also depends on all three upstream PRs landing and releasing, with the [patch.crates-io] git revisions replaced by published versions.

@github-project-automationgithub-project-automationBot moved this to Backlog (Not Ready) in DevXAug 7, 2026
@leighmccullochleighmcculloch changed the title Patch xdr and spec crates to pending PRsPatch xdr and spec crates to support long type namesAug 7, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

1 participant

@leighmcculloch
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Patch xdr and spec crates to support long type names - #2674

Draft
leighmcculloch wants to merge 5 commits into
mainfrom
patch-xdr-and-spec-crates
Draft

Patch xdr and spec crates to support long type names#2674
leighmcculloch wants to merge 5 commits into
mainfrom
patch-xdr-and-spec-crates

Conversation

@leighmcculloch

@leighmccullochleighmcculloch commented Aug 7, 2026

Copy link
Copy Markdown
Member

Note

Part of a stack of PRs that must merge in this order.

A first group of PRs deliver const-encoded contract specs, so that contract specs are produced at compile time instead of at proc-macro execution time. This provides the foundation for the capability to construct the specs from information that is not known at proc-macro execution and only known at compile time, like the fully qualified name of a type:

  1. Add borrowed View variants of generated types rs-stellar-xdr#560
  2. Add const XDR serialization on View types rs-stellar-xdr#562
  3. Encode contract spec XDR at const evaluation time rs-soroban-sdk#1965

A second group of PRs deliver fully qualified type names in contract specs. Instead of a type having the name Context it will have the name soroban_sdk::auth::Context. Qualified type names make it possible to uniquely identify types in the spec, even when they have the same name. This resolves several problems with contract specs the type identify problem (stellar/rs-soroban-sdk#1570), type aliases limitations (stellar/rs-soroban-sdk#1857stellar/rs-soroban-sdk#1063), and optimise spec shaking data section size (stellar/rs-soroban-sdk#1978):

  1. Widen user-defined type name limit stellar-xdr#312
  2. Regenerate with widened UDT name limit rs-stellar-xdr#566
  3. Qualify user-defined type names rs-soroban-sdk#1970
  4. Update stellar-xdr to 28.0.0 rs-stellar-rpc-client#108
  5. Patch xdr and spec crates to support long type names #2674 ← this PR

What

Patch stellar-xdr to stellar/rs-stellar-xdr#566, the soroban spec crates to stellar/rs-soroban-sdk#1970, and stellar-rpc-client to stellar/rs-stellar-rpc-client#108, moving the workspace to stellar-xdr 28 and soroban-env-host 28.0.1, and adapt the CLI to the widened user-defined type name limit and the new ScVal::ExecutableTag and ContractExecutable::ExternalRef variants.

Why

Contract specs are moving to fully qualified user-defined type names, which need the widened name limit those PRs deliver, and the CLI has to be able to read and print specs produced by them.

Known limitations

The network-backed suites (RPC Tests, bindings typescript, Ledger Emulator Tests) fail because the test contracts now build against protocol 28 while the quickstart image still runs an older host, which rejects them with "contract protocol number is newer than host"; they stay red until a protocol 28 quickstart exists. Merging also depends on all three upstream PRs landing and releasing, with the [patch.crates-io] git revisions replaced by published versions.

@github-project-automationgithub-project-automationBot moved this to Backlog (Not Ready) in DevXAug 7, 2026
@leighmccullochleighmcculloch changed the title Patch xdr and spec crates to pending PRsPatch xdr and spec crates to support long type namesAug 7, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

1 participant

@leighmcculloch
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Patch xdr and spec crates to support long type names - #2674

Draft
leighmcculloch wants to merge 5 commits into
mainfrom
patch-xdr-and-spec-crates
Draft

Patch xdr and spec crates to support long type names#2674
leighmcculloch wants to merge 5 commits into
mainfrom
patch-xdr-and-spec-crates

Conversation

@leighmcculloch

@leighmccullochleighmcculloch commented Aug 7, 2026

Copy link
Copy Markdown
Member

Note

Part of a stack of PRs that must merge in this order.

A first group of PRs deliver const-encoded contract specs, so that contract specs are produced at compile time instead of at proc-macro execution time. This provides the foundation for the capability to construct the specs from information that is not known at proc-macro execution and only known at compile time, like the fully qualified name of a type:

  1. Add borrowed View variants of generated types rs-stellar-xdr#560
  2. Add const XDR serialization on View types rs-stellar-xdr#562
  3. Encode contract spec XDR at const evaluation time rs-soroban-sdk#1965

A second group of PRs deliver fully qualified type names in contract specs. Instead of a type having the name Context it will have the name soroban_sdk::auth::Context. Qualified type names make it possible to uniquely identify types in the spec, even when they have the same name. This resolves several problems with contract specs the type identify problem (stellar/rs-soroban-sdk#1570), type aliases limitations (stellar/rs-soroban-sdk#1857stellar/rs-soroban-sdk#1063), and optimise spec shaking data section size (stellar/rs-soroban-sdk#1978):

  1. Widen user-defined type name limit stellar-xdr#312
  2. Regenerate with widened UDT name limit rs-stellar-xdr#566
  3. Qualify user-defined type names rs-soroban-sdk#1970
  4. Update stellar-xdr to 28.0.0 rs-stellar-rpc-client#108
  5. Patch xdr and spec crates to support long type names #2674 ← this PR

What

Patch stellar-xdr to stellar/rs-stellar-xdr#566, the soroban spec crates to stellar/rs-soroban-sdk#1970, and stellar-rpc-client to stellar/rs-stellar-rpc-client#108, moving the workspace to stellar-xdr 28 and soroban-env-host 28.0.1, and adapt the CLI to the widened user-defined type name limit and the new ScVal::ExecutableTag and ContractExecutable::ExternalRef variants.

Why

Contract specs are moving to fully qualified user-defined type names, which need the widened name limit those PRs deliver, and the CLI has to be able to read and print specs produced by them.

Known limitations

The network-backed suites (RPC Tests, bindings typescript, Ledger Emulator Tests) fail because the test contracts now build against protocol 28 while the quickstart image still runs an older host, which rejects them with "contract protocol number is newer than host"; they stay red until a protocol 28 quickstart exists. Merging also depends on all three upstream PRs landing and releasing, with the [patch.crates-io] git revisions replaced by published versions.

@github-project-automationgithub-project-automationBot moved this to Backlog (Not Ready) in DevXAug 7, 2026
@leighmccullochleighmcculloch changed the title Patch xdr and spec crates to pending PRsPatch xdr and spec crates to support long type namesAug 7, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

1 participant

@leighmcculloch
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Patch xdr and spec crates to support long type names - #2674

Draft
leighmcculloch wants to merge 5 commits into
mainfrom
patch-xdr-and-spec-crates
Draft

Patch xdr and spec crates to support long type names#2674
leighmcculloch wants to merge 5 commits into
mainfrom
patch-xdr-and-spec-crates

Conversation

@leighmcculloch

@leighmccullochleighmcculloch commented Aug 7, 2026

Copy link
Copy Markdown
Member

Note

Part of a stack of PRs that must merge in this order.

A first group of PRs deliver const-encoded contract specs, so that contract specs are produced at compile time instead of at proc-macro execution time. This provides the foundation for the capability to construct the specs from information that is not known at proc-macro execution and only known at compile time, like the fully qualified name of a type:

  1. Add borrowed View variants of generated types rs-stellar-xdr#560
  2. Add const XDR serialization on View types rs-stellar-xdr#562
  3. Encode contract spec XDR at const evaluation time rs-soroban-sdk#1965

A second group of PRs deliver fully qualified type names in contract specs. Instead of a type having the name Context it will have the name soroban_sdk::auth::Context. Qualified type names make it possible to uniquely identify types in the spec, even when they have the same name. This resolves several problems with contract specs the type identify problem (stellar/rs-soroban-sdk#1570), type aliases limitations (stellar/rs-soroban-sdk#1857stellar/rs-soroban-sdk#1063), and optimise spec shaking data section size (stellar/rs-soroban-sdk#1978):

  1. Widen user-defined type name limit stellar-xdr#312
  2. Regenerate with widened UDT name limit rs-stellar-xdr#566
  3. Qualify user-defined type names rs-soroban-sdk#1970
  4. Update stellar-xdr to 28.0.0 rs-stellar-rpc-client#108
  5. Patch xdr and spec crates to support long type names #2674 ← this PR

What

Patch stellar-xdr to stellar/rs-stellar-xdr#566, the soroban spec crates to stellar/rs-soroban-sdk#1970, and stellar-rpc-client to stellar/rs-stellar-rpc-client#108, moving the workspace to stellar-xdr 28 and soroban-env-host 28.0.1, and adapt the CLI to the widened user-defined type name limit and the new ScVal::ExecutableTag and ContractExecutable::ExternalRef variants.

Why

Contract specs are moving to fully qualified user-defined type names, which need the widened name limit those PRs deliver, and the CLI has to be able to read and print specs produced by them.

Known limitations

The network-backed suites (RPC Tests, bindings typescript, Ledger Emulator Tests) fail because the test contracts now build against protocol 28 while the quickstart image still runs an older host, which rejects them with "contract protocol number is newer than host"; they stay red until a protocol 28 quickstart exists. Merging also depends on all three upstream PRs landing and releasing, with the [patch.crates-io] git revisions replaced by published versions.

@github-project-automationgithub-project-automationBot moved this to Backlog (Not Ready) in DevXAug 7, 2026
@leighmccullochleighmcculloch changed the title Patch xdr and spec crates to pending PRsPatch xdr and spec crates to support long type namesAug 7, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

1 participant

@leighmcculloch