solana-studio 0.4.3 → 0.4.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 309578396b9717148d416026b43b3e8c6ac485e76620680dd3e0e382b1c1600a
4
- data.tar.gz: b5ae8dbb553d4941343bf30da034f890effad52b0c0b1d45639c6d51d0b384cf
3
+ metadata.gz: c2ffb18603f4ee37c57d42d010090922d657450172cf5d6623e9d637f1650eb5
4
+ data.tar.gz: 1e50dff5950f8dd69dae20590c899930f0e6c4342173cbac93d36b8828554307
5
5
  SHA512:
6
- metadata.gz: c6d84c1fe7e7ddabf243522864fcbd520325419c373e65e0245dbfc28925bf0d9d70adad1a3ad225fca51c263404309e0b0fc6b08425164592f8495d3ece2d2e
7
- data.tar.gz: 074a079e4d03ad0ef6ed1d4fb4376788adc5f3a212428c227b88fff2416a23d3ec7d91996989cebc2f7980fa710de9a24b69536ff7a1ace31b78e691f6ed1388
6
+ metadata.gz: 41cba2106cced3ae803cb268ed5a5b94d46052ba20045ec50004b40e6f4745443515a015244417d0ab65558d79ff274ceffcaa1a43398d6c11bcdfc7256a3eb6
7
+ data.tar.gz: 444c36f828dcc16865f48cd749b5490cf541298f470b8c8f1628875f3d05df33f23e4c1295170772e6f9adb92d9aad3064bd31104b2e5b1c065b06cad4cdf8b0
@@ -110,7 +110,10 @@ module Solana
110
110
  # additional_signers: array of pubkey bytes (32-byte strings) that will sign later.
111
111
  def serialize_partial(additional_signers: [])
112
112
  raise "No blockhash set" unless @recent_blockhash
113
- raise "No signers" if @signers.empty?
113
+ # A fully KEYLESS build (zero local signers, all slots filled by external
114
+ # additional_signers) is legitimate for multi-party coordination where the
115
+ # server never holds a key — only require SOME signer is accounted for.
116
+ raise "No signers" if @signers.empty? && additional_signers.empty?
114
117
  raise "No instructions" if @instructions.empty?
115
118
 
116
119
  # OPSEC-043: keep additional signers in a local — never an instance ivar.
@@ -169,12 +172,15 @@ module Solana
169
172
  def collect_account_keys(additional_signers = [])
170
173
  keys = {}
171
174
 
172
- # Fee payer (first signer) is always first
173
- fee_payer = @signers.first.public_key_bytes
175
+ # Fee payer (first signer) is always first. In a fully-keyless build there
176
+ # are no local @signers, so fall back to the first ADDITIONAL signer
177
+ # (callers order additional_signers with the fee payer first). The
178
+ # serialize/serialize_partial guards guarantee at least one is present.
179
+ fee_payer = @signers.first&.public_key_bytes || additional_signers.first
174
180
  keys[fee_payer] = { is_signer: true, is_writable: true }
175
181
 
176
- # Other signers
177
- @signers[1..].each do |signer|
182
+ # Other signers (drop(1) is nil-safe when @signers is empty — keyless build)
183
+ @signers.drop(1).each do |signer|
178
184
  pk = signer.public_key_bytes
179
185
  keys[pk] ||= { is_signer: true, is_writable: false }
180
186
  keys[pk][:is_signer] = true
data/lib/solana_studio.rb CHANGED
@@ -6,5 +6,5 @@ require_relative "solana/spl_token"
6
6
  require_relative "solana/auth_verifier"
7
7
 
8
8
  module SolanaStudio
9
- VERSION = "0.4.3"
9
+ VERSION = "0.4.5"
10
10
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: solana-studio
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.3
4
+ version: 0.4.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex McRitchie
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-05-28 00:00:00.000000000 Z
11
+ date: 2026-06-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ed25519