From bb00387fdfa568eb0e16aed38aeb7cd7499a2357 Mon Sep 17 00:00:00 2001
From: Lucas
Date: Fri, 11 Apr 2025 16:05:47 -0300
Subject: [PATCH 01/18] Create program-wasm crate
---
Cargo.lock | 16 +++++++++--
Cargo.toml | 1 +
{program => program-wasm}/.gitignore | 0
program-wasm/Cargo.toml | 28 +++++++++++++++++++
{program => program-wasm}/package.json | 0
.../wasm/mod.rs => program-wasm/src/lib.rs | 5 +++-
{program => program-wasm}/tests/hash.mjs | 0
{program => program-wasm}/tests/pubkey.mjs | 0
program/Cargo.toml | 10 ++-----
program/src/lib.rs | 3 --
scripts/test-wasm.sh | 2 +-
sdk/package.json | 2 +-
12 files changed, 50 insertions(+), 17 deletions(-)
rename {program => program-wasm}/.gitignore (100%)
create mode 100644 program-wasm/Cargo.toml
rename {program => program-wasm}/package.json (100%)
rename program/src/wasm/mod.rs => program-wasm/src/lib.rs (88%)
rename {program => program-wasm}/tests/hash.mjs (100%)
rename {program => program-wasm}/tests/pubkey.mjs (100%)
diff --git a/Cargo.lock b/Cargo.lock
index 5ae0261d9..6cd870d27 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -3522,8 +3522,6 @@ dependencies = [
"borsh 0.10.4",
"borsh 1.5.5",
"bytemuck",
- "console_error_panic_hook",
- "console_log",
"getrandom 0.2.15",
"lazy_static",
"log",
@@ -3575,7 +3573,6 @@ dependencies = [
"solana-sysvar",
"solana-sysvar-id",
"thiserror 2.0.12",
- "wasm-bindgen",
]
[[package]]
@@ -3622,6 +3619,19 @@ dependencies = [
"solana-program-error",
]
+[[package]]
+name = "solana-program-wasm"
+version = "2.2.2"
+dependencies = [
+ "console_error_panic_hook",
+ "console_log",
+ "getrandom 0.2.15",
+ "log",
+ "solana-instruction",
+ "solana-program",
+ "wasm-bindgen",
+]
+
[[package]]
name = "solana-pubkey"
version = "2.4.0"
diff --git a/Cargo.toml b/Cargo.toml
index 4dcf9b4ca..fde00670c 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -61,6 +61,7 @@ members = [
"program-memory",
"program-option",
"program-pack",
+ "program-wasm",
"pubkey",
"quic-definitions",
"rent",
diff --git a/program/.gitignore b/program-wasm/.gitignore
similarity index 100%
rename from program/.gitignore
rename to program-wasm/.gitignore
diff --git a/program-wasm/Cargo.toml b/program-wasm/Cargo.toml
new file mode 100644
index 000000000..24119be5e
--- /dev/null
+++ b/program-wasm/Cargo.toml
@@ -0,0 +1,28 @@
+[package]
+name = "solana-program-wasm"
+description = "Solana Program Wasm"
+documentation = "https://docs.rs/solana-sdk"
+version = "2.2.2"
+authors = { workspace = true }
+repository = { workspace = true }
+homepage = { workspace = true }
+license = { workspace = true }
+edition = { workspace = true }
+
+[dependencies]
+solana-instruction = { workspace = true, features = ["std"] }
+solana-program = { workspace = true }
+
+[target.'cfg(target_arch = "wasm32")'.dependencies]
+console_error_panic_hook = { workspace = true }
+console_log = { workspace = true }
+getrandom = { workspace = true, features = ["js", "wasm-bindgen"] }
+wasm-bindgen = { workspace = true }
+log = { workspace = true }
+
+
+[lib]
+crate-type = ["cdylib", "rlib"]
+
+[lints]
+workspace = true
diff --git a/program/package.json b/program-wasm/package.json
similarity index 100%
rename from program/package.json
rename to program-wasm/package.json
diff --git a/program/src/wasm/mod.rs b/program-wasm/src/lib.rs
similarity index 88%
rename from program/src/wasm/mod.rs
rename to program-wasm/src/lib.rs
index 337dfb1db..52f133c3e 100644
--- a/program/src/wasm/mod.rs
+++ b/program-wasm/src/lib.rs
@@ -3,6 +3,9 @@
#[deprecated(since = "2.2.0", note = "Use solana_instruction::wasm instead.")]
pub use solana_instruction::wasm as instructions;
use wasm_bindgen::prelude::*;
+pub use solana_program::*;
+use ::log::Level;
+
// This module is intentionally left empty. The wasm system instruction impl can be
// found in the `solana-system-interface` crate.
pub mod system_instruction {}
@@ -15,7 +18,7 @@ pub fn solana_program_init() {
INIT.call_once(|| {
std::panic::set_hook(Box::new(console_error_panic_hook::hook));
- console_log::init_with_level(log::Level::Info).unwrap();
+ console_log::init_with_level(Level::Info).unwrap();
});
}
diff --git a/program/tests/hash.mjs b/program-wasm/tests/hash.mjs
similarity index 100%
rename from program/tests/hash.mjs
rename to program-wasm/tests/hash.mjs
diff --git a/program/tests/pubkey.mjs b/program-wasm/tests/pubkey.mjs
similarity index 100%
rename from program/tests/pubkey.mjs
rename to program-wasm/tests/pubkey.mjs
diff --git a/program/Cargo.toml b/program/Cargo.toml
index c99dc1bbc..79d9dfe2c 100644
--- a/program/Cargo.toml
+++ b/program/Cargo.toml
@@ -13,12 +13,12 @@ rust-version = "1.81.0" # solana platform-tools rust ve
include = ["src/**/*", "README.md"]
[package.metadata.docs.rs]
-targets = ["x86_64-unknown-linux-gnu", "wasm32-unknown-unknown"]
+targets = ["x86_64-unknown-linux-gnu"]
all-features = true
rustdoc-args = ["--cfg=docsrs"]
[lib]
-crate-type = ["cdylib", "rlib"]
+crate-type = ["rlib"]
[features]
default = ["borsh"]
@@ -113,12 +113,6 @@ thiserror = { workspace = true }
num-bigint = { workspace = true }
solana-example-mocks = { workspace = true }
-[target.'cfg(target_arch = "wasm32")'.dependencies]
-console_error_panic_hook = { workspace = true }
-console_log = { workspace = true }
-getrandom = { workspace = true, features = ["js", "wasm-bindgen"] }
-wasm-bindgen = { workspace = true }
-
# This is currently needed to build on-chain programs reliably.
# Borsh 0.10 may pull in hashbrown 0.13, which uses ahash 0.8, which uses
# getrandom 0.2 underneath. This explicit dependency allows for no-std if cargo
diff --git a/program/src/lib.rs b/program/src/lib.rs
index c148b4daf..55825aa7c 100644
--- a/program/src/lib.rs
+++ b/program/src/lib.rs
@@ -489,7 +489,6 @@ pub mod slot_hashes;
pub mod slot_history;
pub mod syscalls;
pub mod sysvar;
-pub mod wasm;
#[deprecated(since = "2.2.0", note = "Use `solana-big-mod-exp` crate instead")]
pub use solana_big_mod_exp as big_mod_exp;
@@ -528,8 +527,6 @@ pub use solana_short_vec as short_vec;
pub use solana_stable_layout as stable_layout;
#[cfg(not(target_os = "solana"))]
pub use solana_sysvar::program_stubs;
-#[cfg(target_arch = "wasm32")]
-pub use wasm_bindgen::prelude::wasm_bindgen;
pub use {
solana_account_info::{self as account_info, debug_account_data},
solana_clock as clock,
diff --git a/scripts/test-wasm.sh b/scripts/test-wasm.sh
index 12b224f86..fb5f43f4e 100755
--- a/scripts/test-wasm.sh
+++ b/scripts/test-wasm.sh
@@ -5,7 +5,7 @@ here="$(dirname "$0")"
src_root="$(readlink -f "${here}/..")"
cd "${src_root}"
-for dir in program sdk ; do
+for dir in program-wasm sdk ; do
(
cd "$dir"
npm install
diff --git a/sdk/package.json b/sdk/package.json
index 763b62f88..f397a1afc 120000
--- a/sdk/package.json
+++ b/sdk/package.json
@@ -1 +1 @@
-../program/package.json
\ No newline at end of file
+../program-wasm/package.json
\ No newline at end of file
From ff920591571decaa315f293a65e60d5b3a313f50 Mon Sep 17 00:00:00 2001
From: Lucas
Date: Fri, 11 Apr 2025 17:35:14 -0300
Subject: [PATCH 02/18] Bundle everything
---
Cargo.lock | 5 ++---
keypair/Cargo.toml | 5 ++++-
program-wasm/Cargo.toml | 3 ++-
program-wasm/src/lib.rs | 14 +++++++++++---
{sdk => program-wasm}/tests/keypair.mjs | 0
{sdk => program-wasm}/tests/transaction.mjs | 0
sdk/.gitignore | 2 --
sdk/Cargo.toml | 5 -----
sdk/package.json | 1 -
sdk/src/lib.rs | 3 ---
sdk/src/wasm/keypair.rs | 3 ---
sdk/src/wasm/mod.rs | 5 -----
sdk/src/wasm/transaction.rs | 3 ---
13 files changed, 19 insertions(+), 30 deletions(-)
rename {sdk => program-wasm}/tests/keypair.mjs (100%)
rename {sdk => program-wasm}/tests/transaction.mjs (100%)
delete mode 120000 sdk/package.json
delete mode 100644 sdk/src/wasm/keypair.rs
delete mode 100644 sdk/src/wasm/mod.rs
delete mode 100644 sdk/src/wasm/transaction.rs
diff --git a/Cargo.lock b/Cargo.lock
index 6cd870d27..28b9141b8 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -3626,9 +3626,11 @@ dependencies = [
"console_error_panic_hook",
"console_log",
"getrandom 0.2.15",
+ "js-sys",
"log",
"solana-instruction",
"solana-program",
+ "solana-sdk",
"wasm-bindgen",
]
@@ -3735,8 +3737,6 @@ version = "2.3.0"
dependencies = [
"bincode",
"bs58",
- "getrandom 0.1.16",
- "js-sys",
"serde",
"solana-account",
"solana-derivation-path",
@@ -3770,7 +3770,6 @@ dependencies = [
"solana-transaction",
"solana-transaction-error",
"thiserror 2.0.12",
- "wasm-bindgen",
]
[[package]]
diff --git a/keypair/Cargo.toml b/keypair/Cargo.toml
index d70683b3f..6405d4668 100644
--- a/keypair/Cargo.toml
+++ b/keypair/Cargo.toml
@@ -25,7 +25,6 @@ seed-derivable = [
ed25519-dalek = { workspace = true }
ed25519-dalek-bip32 = { workspace = true, optional = true }
five8 = { workspace = true }
-rand0-7 = { workspace = true }
solana-derivation-path = { workspace = true, optional = true }
solana-pubkey = { workspace = true }
solana-seed-derivable = { workspace = true, optional = true }
@@ -35,6 +34,10 @@ solana-signer = { workspace = true }
[target.'cfg(target_arch = "wasm32")'.dependencies]
wasm-bindgen = { workspace = true }
+rand0-7 = { workspace = true, features = ["wasm-bindgen"] }
+
+[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
+rand0-7 = { workspace = true }
[dev-dependencies]
serde_json = { workspace = true }
diff --git a/program-wasm/Cargo.toml b/program-wasm/Cargo.toml
index 24119be5e..cf55c3113 100644
--- a/program-wasm/Cargo.toml
+++ b/program-wasm/Cargo.toml
@@ -12,6 +12,7 @@ edition = { workspace = true }
[dependencies]
solana-instruction = { workspace = true, features = ["std"] }
solana-program = { workspace = true }
+solana-sdk = { workspace = true }
[target.'cfg(target_arch = "wasm32")'.dependencies]
console_error_panic_hook = { workspace = true }
@@ -19,7 +20,7 @@ console_log = { workspace = true }
getrandom = { workspace = true, features = ["js", "wasm-bindgen"] }
wasm-bindgen = { workspace = true }
log = { workspace = true }
-
+js-sys = { workspace = true }
[lib]
crate-type = ["cdylib", "rlib"]
diff --git a/program-wasm/src/lib.rs b/program-wasm/src/lib.rs
index 52f133c3e..f93e23b5d 100644
--- a/program-wasm/src/lib.rs
+++ b/program-wasm/src/lib.rs
@@ -2,9 +2,17 @@
#![cfg(target_arch = "wasm32")]
#[deprecated(since = "2.2.0", note = "Use solana_instruction::wasm instead.")]
pub use solana_instruction::wasm as instructions;
-use wasm_bindgen::prelude::*;
-pub use solana_program::*;
-use ::log::Level;
+// These imports exist in both solana_sdk and solana_program, so we use
+// direct imports to suppress ambiguous re-export warnings.
+pub use solana_sdk::entrypoint_deprecated;
+use {::log::Level, wasm_bindgen::prelude::*};
+pub use {
+ solana_program::*,
+ solana_sdk::{
+ declare_deprecated_id, declare_id, entrypoint, example_mocks, feature, hash, program_utils,
+ pubkey, *,
+ },
+};
// This module is intentionally left empty. The wasm system instruction impl can be
// found in the `solana-system-interface` crate.
diff --git a/sdk/tests/keypair.mjs b/program-wasm/tests/keypair.mjs
similarity index 100%
rename from sdk/tests/keypair.mjs
rename to program-wasm/tests/keypair.mjs
diff --git a/sdk/tests/transaction.mjs b/program-wasm/tests/transaction.mjs
similarity index 100%
rename from sdk/tests/transaction.mjs
rename to program-wasm/tests/transaction.mjs
diff --git a/sdk/.gitignore b/sdk/.gitignore
index 14bd5d170..7809eb37b 100644
--- a/sdk/.gitignore
+++ b/sdk/.gitignore
@@ -1,4 +1,2 @@
/farf/
-/node_modules/
-/package-lock.json
/target/
diff --git a/sdk/Cargo.toml b/sdk/Cargo.toml
index 21be8b508..38fdd8537 100644
--- a/sdk/Cargo.toml
+++ b/sdk/Cargo.toml
@@ -108,11 +108,6 @@ solana-transaction-error = { workspace = true, features = [
], optional = true }
thiserror = { workspace = true }
-[target.'cfg(target_arch = "wasm32")'.dependencies]
-getrandom = { version = "0.1.1", features = ["wasm-bindgen"] }
-js-sys = { workspace = true }
-wasm-bindgen = { workspace = true }
-
[dev-dependencies]
solana-instructions-sysvar = { workspace = true, features = ["dev-context-only-utils"] }
solana-program = { workspace = true, features = ["dev-context-only-utils"] }
diff --git a/sdk/package.json b/sdk/package.json
deleted file mode 120000
index f397a1afc..000000000
--- a/sdk/package.json
+++ /dev/null
@@ -1 +0,0 @@
-../program-wasm/package.json
\ No newline at end of file
diff --git a/sdk/src/lib.rs b/sdk/src/lib.rs
index a4c77b479..afb5cfaa3 100644
--- a/sdk/src/lib.rs
+++ b/sdk/src/lib.rs
@@ -38,8 +38,6 @@ extern crate self as solana_sdk;
pub use solana_message as message;
#[cfg(not(target_os = "solana"))]
pub use solana_program::program_stubs;
-#[cfg(target_arch = "wasm32")]
-pub use solana_program::wasm_bindgen;
pub use solana_program::{
account_info, big_mod_exp, blake3, bpf_loader, bpf_loader_deprecated, clock, config,
custom_heap_default, custom_panic_default, debug_account_data, declare_deprecated_sysvar_id,
@@ -67,7 +65,6 @@ pub mod signature;
pub mod signer;
pub mod transaction;
pub mod transport;
-pub mod wasm;
#[deprecated(since = "2.1.0", note = "Use `solana-account` crate instead")]
pub use solana_account as account;
diff --git a/sdk/src/wasm/keypair.rs b/sdk/src/wasm/keypair.rs
deleted file mode 100644
index 5c5da471a..000000000
--- a/sdk/src/wasm/keypair.rs
+++ /dev/null
@@ -1,3 +0,0 @@
-//! This module is empty but has not yet been removed because that would
-//! technically be a breaking change. There was never anything to import
-//! from here.
diff --git a/sdk/src/wasm/mod.rs b/sdk/src/wasm/mod.rs
deleted file mode 100644
index 6946e730f..000000000
--- a/sdk/src/wasm/mod.rs
+++ /dev/null
@@ -1,5 +0,0 @@
-//! solana-sdk Javascript interface
-#![cfg(target_arch = "wasm32")]
-
-pub mod keypair;
-pub mod transaction;
diff --git a/sdk/src/wasm/transaction.rs b/sdk/src/wasm/transaction.rs
deleted file mode 100644
index 5c5da471a..000000000
--- a/sdk/src/wasm/transaction.rs
+++ /dev/null
@@ -1,3 +0,0 @@
-//! This module is empty but has not yet been removed because that would
-//! technically be a breaking change. There was never anything to import
-//! from here.
From 666e2636f1cd8a3cb9ace62203c3842b1cbb1062 Mon Sep 17 00:00:00 2001
From: Lucas
Date: Fri, 11 Apr 2025 17:38:36 -0300
Subject: [PATCH 03/18] Rename crate
---
Cargo.lock | 30 +++++++++----------
Cargo.toml | 2 +-
scripts/test-wasm.sh | 10 ++-----
{program-wasm => sdk-wasm}/.gitignore | 0
{program-wasm => sdk-wasm}/Cargo.toml | 4 +--
{program-wasm => sdk-wasm}/package.json | 0
{program-wasm => sdk-wasm}/src/lib.rs | 0
{program-wasm => sdk-wasm}/tests/hash.mjs | 0
{program-wasm => sdk-wasm}/tests/keypair.mjs | 0
{program-wasm => sdk-wasm}/tests/pubkey.mjs | 0
.../tests/transaction.mjs | 0
11 files changed, 21 insertions(+), 25 deletions(-)
rename {program-wasm => sdk-wasm}/.gitignore (100%)
rename {program-wasm => sdk-wasm}/Cargo.toml (91%)
rename {program-wasm => sdk-wasm}/package.json (100%)
rename {program-wasm => sdk-wasm}/src/lib.rs (100%)
rename {program-wasm => sdk-wasm}/tests/hash.mjs (100%)
rename {program-wasm => sdk-wasm}/tests/keypair.mjs (100%)
rename {program-wasm => sdk-wasm}/tests/pubkey.mjs (100%)
rename {program-wasm => sdk-wasm}/tests/transaction.mjs (100%)
diff --git a/Cargo.lock b/Cargo.lock
index 28b9141b8..b12b53f4b 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -3619,21 +3619,6 @@ dependencies = [
"solana-program-error",
]
-[[package]]
-name = "solana-program-wasm"
-version = "2.2.2"
-dependencies = [
- "console_error_panic_hook",
- "console_log",
- "getrandom 0.2.15",
- "js-sys",
- "log",
- "solana-instruction",
- "solana-program",
- "solana-sdk",
- "wasm-bindgen",
-]
-
[[package]]
name = "solana-pubkey"
version = "2.4.0"
@@ -3789,6 +3774,21 @@ dependencies = [
"syn 2.0.98",
]
+[[package]]
+name = "solana-sdk-wasm"
+version = "2.2.2"
+dependencies = [
+ "console_error_panic_hook",
+ "console_log",
+ "getrandom 0.2.15",
+ "js-sys",
+ "log",
+ "solana-instruction",
+ "solana-program",
+ "solana-sdk",
+ "wasm-bindgen",
+]
+
[[package]]
name = "solana-secp256k1-program"
version = "2.2.3"
diff --git a/Cargo.toml b/Cargo.toml
index fde00670c..1fa002c8f 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -61,7 +61,6 @@ members = [
"program-memory",
"program-option",
"program-pack",
- "program-wasm",
"pubkey",
"quic-definitions",
"rent",
@@ -72,6 +71,7 @@ members = [
"sdk",
"sdk-ids",
"sdk-macro",
+ "sdk-wasm",
"secp256k1-program",
"secp256k1-recover",
"secp256r1-program",
diff --git a/scripts/test-wasm.sh b/scripts/test-wasm.sh
index fb5f43f4e..e3a08623b 100755
--- a/scripts/test-wasm.sh
+++ b/scripts/test-wasm.sh
@@ -5,10 +5,6 @@ here="$(dirname "$0")"
src_root="$(readlink -f "${here}/..")"
cd "${src_root}"
-for dir in program-wasm sdk ; do
- (
- cd "$dir"
- npm install
- npm test
- )
-done
+cd sdk-wasm
+npm install
+npm test
diff --git a/program-wasm/.gitignore b/sdk-wasm/.gitignore
similarity index 100%
rename from program-wasm/.gitignore
rename to sdk-wasm/.gitignore
diff --git a/program-wasm/Cargo.toml b/sdk-wasm/Cargo.toml
similarity index 91%
rename from program-wasm/Cargo.toml
rename to sdk-wasm/Cargo.toml
index cf55c3113..6642d2451 100644
--- a/program-wasm/Cargo.toml
+++ b/sdk-wasm/Cargo.toml
@@ -1,6 +1,6 @@
[package]
-name = "solana-program-wasm"
-description = "Solana Program Wasm"
+name = "solana-sdk-wasm"
+description = "Solana SDK Wasm"
documentation = "https://docs.rs/solana-sdk"
version = "2.2.2"
authors = { workspace = true }
diff --git a/program-wasm/package.json b/sdk-wasm/package.json
similarity index 100%
rename from program-wasm/package.json
rename to sdk-wasm/package.json
diff --git a/program-wasm/src/lib.rs b/sdk-wasm/src/lib.rs
similarity index 100%
rename from program-wasm/src/lib.rs
rename to sdk-wasm/src/lib.rs
diff --git a/program-wasm/tests/hash.mjs b/sdk-wasm/tests/hash.mjs
similarity index 100%
rename from program-wasm/tests/hash.mjs
rename to sdk-wasm/tests/hash.mjs
diff --git a/program-wasm/tests/keypair.mjs b/sdk-wasm/tests/keypair.mjs
similarity index 100%
rename from program-wasm/tests/keypair.mjs
rename to sdk-wasm/tests/keypair.mjs
diff --git a/program-wasm/tests/pubkey.mjs b/sdk-wasm/tests/pubkey.mjs
similarity index 100%
rename from program-wasm/tests/pubkey.mjs
rename to sdk-wasm/tests/pubkey.mjs
diff --git a/program-wasm/tests/transaction.mjs b/sdk-wasm/tests/transaction.mjs
similarity index 100%
rename from program-wasm/tests/transaction.mjs
rename to sdk-wasm/tests/transaction.mjs
From 0f21b191f26741aef109d39017966f389784d009 Mon Sep 17 00:00:00 2001
From: Lucas
Date: Fri, 11 Apr 2025 17:40:07 -0300
Subject: [PATCH 04/18] Remove cdylib
---
Cargo.lock | 2 +-
keypair/Cargo.toml | 5 +----
sdk-wasm/Cargo.toml | 1 -
sdk-wasm/src/lib.rs | 17 ++++++++++++-----
sdk/Cargo.toml | 3 +++
5 files changed, 17 insertions(+), 11 deletions(-)
diff --git a/Cargo.lock b/Cargo.lock
index b12b53f4b..d478fb861 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -3722,6 +3722,7 @@ version = "2.3.0"
dependencies = [
"bincode",
"bs58",
+ "getrandom 0.1.16",
"serde",
"solana-account",
"solana-derivation-path",
@@ -3780,7 +3781,6 @@ version = "2.2.2"
dependencies = [
"console_error_panic_hook",
"console_log",
- "getrandom 0.2.15",
"js-sys",
"log",
"solana-instruction",
diff --git a/keypair/Cargo.toml b/keypair/Cargo.toml
index 6405d4668..d70683b3f 100644
--- a/keypair/Cargo.toml
+++ b/keypair/Cargo.toml
@@ -25,6 +25,7 @@ seed-derivable = [
ed25519-dalek = { workspace = true }
ed25519-dalek-bip32 = { workspace = true, optional = true }
five8 = { workspace = true }
+rand0-7 = { workspace = true }
solana-derivation-path = { workspace = true, optional = true }
solana-pubkey = { workspace = true }
solana-seed-derivable = { workspace = true, optional = true }
@@ -34,10 +35,6 @@ solana-signer = { workspace = true }
[target.'cfg(target_arch = "wasm32")'.dependencies]
wasm-bindgen = { workspace = true }
-rand0-7 = { workspace = true, features = ["wasm-bindgen"] }
-
-[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
-rand0-7 = { workspace = true }
[dev-dependencies]
serde_json = { workspace = true }
diff --git a/sdk-wasm/Cargo.toml b/sdk-wasm/Cargo.toml
index 6642d2451..83fd65d42 100644
--- a/sdk-wasm/Cargo.toml
+++ b/sdk-wasm/Cargo.toml
@@ -17,7 +17,6 @@ solana-sdk = { workspace = true }
[target.'cfg(target_arch = "wasm32")'.dependencies]
console_error_panic_hook = { workspace = true }
console_log = { workspace = true }
-getrandom = { workspace = true, features = ["js", "wasm-bindgen"] }
wasm-bindgen = { workspace = true }
log = { workspace = true }
js-sys = { workspace = true }
diff --git a/sdk-wasm/src/lib.rs b/sdk-wasm/src/lib.rs
index f93e23b5d..09d2dff55 100644
--- a/sdk-wasm/src/lib.rs
+++ b/sdk-wasm/src/lib.rs
@@ -2,15 +2,22 @@
#![cfg(target_arch = "wasm32")]
#[deprecated(since = "2.2.0", note = "Use solana_instruction::wasm instead.")]
pub use solana_instruction::wasm as instructions;
-// These imports exist in both solana_sdk and solana_program, so we use
-// direct imports to suppress ambiguous re-export warnings.
-pub use solana_sdk::entrypoint_deprecated;
use {::log::Level, wasm_bindgen::prelude::*};
pub use {
solana_program::*,
solana_sdk::{
- declare_deprecated_id, declare_id, entrypoint, example_mocks, feature, hash, program_utils,
- pubkey, *,
+ // These imports exist in both solana_sdk and solana_program, so we use
+ // direct imports to suppress ambiguous re-export warnings.
+ declare_deprecated_id,
+ declare_id,
+ entrypoint,
+ entrypoint_deprecated,
+ example_mocks,
+ feature,
+ hash,
+ program_utils,
+ pubkey,
+ *,
},
};
diff --git a/sdk/Cargo.toml b/sdk/Cargo.toml
index 38fdd8537..ab3e0ae2a 100644
--- a/sdk/Cargo.toml
+++ b/sdk/Cargo.toml
@@ -108,6 +108,9 @@ solana-transaction-error = { workspace = true, features = [
], optional = true }
thiserror = { workspace = true }
+[target.'cfg(target_arch = "wasm32")'.dependencies]
+getrandom = { version = "0.1.1", features = ["wasm-bindgen"] }
+
[dev-dependencies]
solana-instructions-sysvar = { workspace = true, features = ["dev-context-only-utils"] }
solana-program = { workspace = true, features = ["dev-context-only-utils"] }
From 56cf714af79cdf7caafdba25ea792b2b34c69e31 Mon Sep 17 00:00:00 2001
From: Lucas
Date: Tue, 15 Apr 2025 15:54:28 -0300
Subject: [PATCH 05/18] Do not build sdk-wasm for sbf
---
scripts/build-sbf.sh | 1 +
1 file changed, 1 insertion(+)
diff --git a/scripts/build-sbf.sh b/scripts/build-sbf.sh
index d73b55f83..7880c8505 100755
--- a/scripts/build-sbf.sh
+++ b/scripts/build-sbf.sh
@@ -19,6 +19,7 @@ exclude_list=(
"presigner"
"quic-definitions"
"rent-collector"
+ "sdk-wasm"
"secp256k1-program"
"secp256r1-program"
"system-transaction"
From ba587b8db1494fd4e8c8c81ad8f7c449a22e16d8 Mon Sep 17 00:00:00 2001
From: Lucas
Date: Tue, 15 Apr 2025 17:08:32 -0300
Subject: [PATCH 06/18] Add README
---
sdk-wasm/Cargo.toml | 5 +++++
sdk-wasm/README.md | 16 ++++++++++++++++
2 files changed, 21 insertions(+)
create mode 100644 sdk-wasm/README.md
diff --git a/sdk-wasm/Cargo.toml b/sdk-wasm/Cargo.toml
index 83fd65d42..64ca3824f 100644
--- a/sdk-wasm/Cargo.toml
+++ b/sdk-wasm/Cargo.toml
@@ -26,3 +26,8 @@ crate-type = ["cdylib", "rlib"]
[lints]
workspace = true
+
+[package.metadata.docs.rs]
+targets = ["wasm32-unknown-unknown"]
+all-features = true
+rustdoc-args = ["--cfg=docsrs"]
diff --git a/sdk-wasm/README.md b/sdk-wasm/README.md
new file mode 100644
index 000000000..6da8f7a26
--- /dev/null
+++ b/sdk-wasm/README.md
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+# Solana SDK
+
+Use the Solana SDK Crate to be consumed by Javascript libraries. Sse the [Solana Program Crate](https://crates.io/crates/solana-program) instead for
+on-chain programs, and, the [Solana SDK Crate](https://crates.io/crates/solana-sdk) for client-side applications.
+
+More information about Solana is available in the [Solana documentation](https://solana.com/docs).
+
+The [Solana Program Library](https://github.com/solana-labs/solana-program-library) provides examples of how to use this crate.
+
+Still have questions? Ask us on [Stack Exchange](https://sola.na/sse)
From 60c43674e5b2df9dc3fd8342816be5e499acb43d Mon Sep 17 00:00:00 2001
From: Lucas
Date: Tue, 15 Apr 2025 17:14:11 -0300
Subject: [PATCH 07/18] Update comments
---
program/src/lib.rs | 15 ++++++++++-----
1 file changed, 10 insertions(+), 5 deletions(-)
diff --git a/program/src/lib.rs b/program/src/lib.rs
index 55825aa7c..c505389ba 100644
--- a/program/src/lib.rs
+++ b/program/src/lib.rs
@@ -94,16 +94,21 @@
//!
//! ```toml
//! [lib]
-//! crate-type = ["cdylib", "rlib"]
+//! crate-type = ["cdylib"]
//!
//! [features]
//! no-entrypoint = []
//! ```
//!
-//! Note that a Solana program must specify its crate-type as "cdylib", and
-//! "cdylib" crates will automatically be discovered and built by the `cargo
-//! build-bpf` command. Solana programs also often have crate-type "rlib" so
-//! they can be linked to other Rust crates.
+//! Note that a Solana program must specify its crate-type as "cdylib", to
+//! be discovered and built by the `cargo-build-sbf` command as a deployable program.
+//! Solana programs also often have crate-type "rlib" so they can be linked to other Rust crates.
+//! Avoid using "rlib" and "cdylib" crates together, since their combined usage precludes
+//! compiler optimizations that may decrease program size and CU usage.
+//!
+//! Prefer writing a separate package if it is supposed to be used as a library for other Solana
+//! programs (i.e. a "rlib" only crate). When created a Rust project intended to be a program
+//! ready for deployment, ues only the "cdylib" crate type.
//!
//! # On-chain vs. off-chain compilation targets
//!
From 87493fa064e4b2d6ba8f67df0b828fcc56e5f1da Mon Sep 17 00:00:00 2001
From: Lucas
Date: Mon, 5 May 2025 18:38:14 -0300
Subject: [PATCH 08/18] Revert changes in the SDK crate
---
sdk/Cargo.toml | 2 +-
sdk/src/lib.rs | 1 +
sdk/src/wasm/keypair.rs | 3 +++
sdk/src/wasm/mod.rs | 5 +++++
sdk/src/wasm/transaction.rs | 3 +++
5 files changed, 13 insertions(+), 1 deletion(-)
create mode 100644 sdk/src/wasm/keypair.rs
create mode 100644 sdk/src/wasm/mod.rs
create mode 100644 sdk/src/wasm/transaction.rs
diff --git a/sdk/Cargo.toml b/sdk/Cargo.toml
index ab3e0ae2a..e58c640b2 100644
--- a/sdk/Cargo.toml
+++ b/sdk/Cargo.toml
@@ -17,7 +17,7 @@ all-features = true
rustdoc-args = ["--cfg=docsrs"]
[lib]
-crate-type = ["cdylib", "rlib"]
+crate-type = ["rlib"]
[features]
# "program" feature is a legacy feature retained to support v1.3 and older
diff --git a/sdk/src/lib.rs b/sdk/src/lib.rs
index afb5cfaa3..f9351bdf1 100644
--- a/sdk/src/lib.rs
+++ b/sdk/src/lib.rs
@@ -65,6 +65,7 @@ pub mod signature;
pub mod signer;
pub mod transaction;
pub mod transport;
+pub mod wasm;
#[deprecated(since = "2.1.0", note = "Use `solana-account` crate instead")]
pub use solana_account as account;
diff --git a/sdk/src/wasm/keypair.rs b/sdk/src/wasm/keypair.rs
new file mode 100644
index 000000000..5c5da471a
--- /dev/null
+++ b/sdk/src/wasm/keypair.rs
@@ -0,0 +1,3 @@
+//! This module is empty but has not yet been removed because that would
+//! technically be a breaking change. There was never anything to import
+//! from here.
diff --git a/sdk/src/wasm/mod.rs b/sdk/src/wasm/mod.rs
new file mode 100644
index 000000000..6946e730f
--- /dev/null
+++ b/sdk/src/wasm/mod.rs
@@ -0,0 +1,5 @@
+//! solana-sdk Javascript interface
+#![cfg(target_arch = "wasm32")]
+
+pub mod keypair;
+pub mod transaction;
diff --git a/sdk/src/wasm/transaction.rs b/sdk/src/wasm/transaction.rs
new file mode 100644
index 000000000..5c5da471a
--- /dev/null
+++ b/sdk/src/wasm/transaction.rs
@@ -0,0 +1,3 @@
+//! This module is empty but has not yet been removed because that would
+//! technically be a breaking change. There was never anything to import
+//! from here.
From cc8365bfe50cc98e7447510e5906b29e1bc3a877 Mon Sep 17 00:00:00 2001
From: Lucas
Date: Tue, 6 May 2025 12:23:23 -0300
Subject: [PATCH 09/18] Revert changes in the program crate
---
Cargo.lock | 26 --------------------------
program/Cargo.toml | 2 +-
program/src/lib.rs | 1 +
program/src/wasm/mod.rs | 24 ++++++++++++++++++++++++
sdk-wasm/Cargo.toml | 8 --------
sdk-wasm/src/lib.rs | 24 ------------------------
6 files changed, 26 insertions(+), 59 deletions(-)
create mode 100644 program/src/wasm/mod.rs
diff --git a/Cargo.lock b/Cargo.lock
index d478fb861..4f5df81c0 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -660,26 +660,6 @@ dependencies = [
"windows-sys 0.59.0",
]
-[[package]]
-name = "console_error_panic_hook"
-version = "0.1.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc"
-dependencies = [
- "cfg-if",
- "wasm-bindgen",
-]
-
-[[package]]
-name = "console_log"
-version = "0.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e89f72f65e8501878b8a004d5a1afb780987e2ce2b4532c562e367a72c57499f"
-dependencies = [
- "log",
- "web-sys",
-]
-
[[package]]
name = "constant_time_eq"
version = "0.3.1"
@@ -3779,14 +3759,8 @@ dependencies = [
name = "solana-sdk-wasm"
version = "2.2.2"
dependencies = [
- "console_error_panic_hook",
- "console_log",
- "js-sys",
- "log",
- "solana-instruction",
"solana-program",
"solana-sdk",
- "wasm-bindgen",
]
[[package]]
diff --git a/program/Cargo.toml b/program/Cargo.toml
index 79d9dfe2c..e6fe6f240 100644
--- a/program/Cargo.toml
+++ b/program/Cargo.toml
@@ -13,7 +13,7 @@ rust-version = "1.81.0" # solana platform-tools rust ve
include = ["src/**/*", "README.md"]
[package.metadata.docs.rs]
-targets = ["x86_64-unknown-linux-gnu"]
+targets = ["x86_64-unknown-linux-gnu", "wasm32-unknown-unknown"]
all-features = true
rustdoc-args = ["--cfg=docsrs"]
diff --git a/program/src/lib.rs b/program/src/lib.rs
index c505389ba..d3d0d06c9 100644
--- a/program/src/lib.rs
+++ b/program/src/lib.rs
@@ -494,6 +494,7 @@ pub mod slot_hashes;
pub mod slot_history;
pub mod syscalls;
pub mod sysvar;
+pub mod wasm;
#[deprecated(since = "2.2.0", note = "Use `solana-big-mod-exp` crate instead")]
pub use solana_big_mod_exp as big_mod_exp;
diff --git a/program/src/wasm/mod.rs b/program/src/wasm/mod.rs
new file mode 100644
index 000000000..337dfb1db
--- /dev/null
+++ b/program/src/wasm/mod.rs
@@ -0,0 +1,24 @@
+//! solana-program Javascript interface
+#![cfg(target_arch = "wasm32")]
+#[deprecated(since = "2.2.0", note = "Use solana_instruction::wasm instead.")]
+pub use solana_instruction::wasm as instructions;
+use wasm_bindgen::prelude::*;
+// This module is intentionally left empty. The wasm system instruction impl can be
+// found in the `solana-system-interface` crate.
+pub mod system_instruction {}
+
+/// Initialize Javascript logging and panic handler
+#[wasm_bindgen]
+pub fn solana_program_init() {
+ use std::sync::Once;
+ static INIT: Once = Once::new();
+
+ INIT.call_once(|| {
+ std::panic::set_hook(Box::new(console_error_panic_hook::hook));
+ console_log::init_with_level(log::Level::Info).unwrap();
+ });
+}
+
+pub fn display_to_jsvalue(display: T) -> JsValue {
+ display.to_string().into()
+}
diff --git a/sdk-wasm/Cargo.toml b/sdk-wasm/Cargo.toml
index 64ca3824f..ebebcb1b2 100644
--- a/sdk-wasm/Cargo.toml
+++ b/sdk-wasm/Cargo.toml
@@ -10,17 +10,9 @@ license = { workspace = true }
edition = { workspace = true }
[dependencies]
-solana-instruction = { workspace = true, features = ["std"] }
solana-program = { workspace = true }
solana-sdk = { workspace = true }
-[target.'cfg(target_arch = "wasm32")'.dependencies]
-console_error_panic_hook = { workspace = true }
-console_log = { workspace = true }
-wasm-bindgen = { workspace = true }
-log = { workspace = true }
-js-sys = { workspace = true }
-
[lib]
crate-type = ["cdylib", "rlib"]
diff --git a/sdk-wasm/src/lib.rs b/sdk-wasm/src/lib.rs
index 09d2dff55..3866fea92 100644
--- a/sdk-wasm/src/lib.rs
+++ b/sdk-wasm/src/lib.rs
@@ -1,8 +1,4 @@
-//! solana-program Javascript interface
#![cfg(target_arch = "wasm32")]
-#[deprecated(since = "2.2.0", note = "Use solana_instruction::wasm instead.")]
-pub use solana_instruction::wasm as instructions;
-use {::log::Level, wasm_bindgen::prelude::*};
pub use {
solana_program::*,
solana_sdk::{
@@ -20,23 +16,3 @@ pub use {
*,
},
};
-
-// This module is intentionally left empty. The wasm system instruction impl can be
-// found in the `solana-system-interface` crate.
-pub mod system_instruction {}
-
-/// Initialize Javascript logging and panic handler
-#[wasm_bindgen]
-pub fn solana_program_init() {
- use std::sync::Once;
- static INIT: Once = Once::new();
-
- INIT.call_once(|| {
- std::panic::set_hook(Box::new(console_error_panic_hook::hook));
- console_log::init_with_level(Level::Info).unwrap();
- });
-}
-
-pub fn display_to_jsvalue(display: T) -> JsValue {
- display.to_string().into()
-}
From a8348cfdd7964f891e6e5709cfd995e1d71a0318 Mon Sep 17 00:00:00 2001
From: Lucas
Date: Tue, 6 May 2025 15:22:19 -0300
Subject: [PATCH 10/18] Remove rlib from sdk-wasm crate
---
sdk-wasm/Cargo.toml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sdk-wasm/Cargo.toml b/sdk-wasm/Cargo.toml
index ebebcb1b2..de4a153fc 100644
--- a/sdk-wasm/Cargo.toml
+++ b/sdk-wasm/Cargo.toml
@@ -14,7 +14,7 @@ solana-program = { workspace = true }
solana-sdk = { workspace = true }
[lib]
-crate-type = ["cdylib", "rlib"]
+crate-type = ["cdylib"]
[lints]
workspace = true
From 67779122f96ada8782f3e0c12cdd35e8d756f7a7 Mon Sep 17 00:00:00 2001
From: Lucas
Date: Tue, 6 May 2025 15:27:45 -0300
Subject: [PATCH 11/18] Update README
---
sdk-wasm/README.md | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/sdk-wasm/README.md b/sdk-wasm/README.md
index 6da8f7a26..d496e1cee 100644
--- a/sdk-wasm/README.md
+++ b/sdk-wasm/README.md
@@ -4,13 +4,14 @@
-# Solana SDK
+# Solana SDK WASM JS
-Use the Solana SDK Crate to be consumed by Javascript libraries. Sse the [Solana Program Crate](https://crates.io/crates/solana-program) instead for
-on-chain programs, and, the [Solana SDK Crate](https://crates.io/crates/solana-sdk) for client-side applications.
+Use the Solana SDK WASM JS crate to build a JS package with `wasm-pack` usable in Node or browser environments.
+See the [Solana Program Crate](https://crates.io/crates/solana-program) instead for on-chain programs, and, the [Solana SDK Crate](https://crates.io/crates/solana-sdk) for client-side
+applications.
More information about Solana is available in the [Solana documentation](https://solana.com/docs).
-The [Solana Program Library](https://github.com/solana-labs/solana-program-library) provides examples of how to use this crate.
+The [Solana Program Organization](https://github.com/solana-program) provides examples of how to use this crate.
Still have questions? Ask us on [Stack Exchange](https://sola.na/sse)
From db59a6e1c734f5d42feaa82e3104f0364c3bbbc9 Mon Sep 17 00:00:00 2001
From: Lucas
Date: Tue, 6 May 2025 15:37:58 -0300
Subject: [PATCH 12/18] Change crate name
---
Cargo.lock | 2 +-
Cargo.toml | 2 +-
scripts/build-sbf.sh | 2 +-
scripts/test-wasm.sh | 2 +-
{sdk-wasm => sdk-wasm-js}/.gitignore | 0
{sdk-wasm => sdk-wasm-js}/Cargo.toml | 6 +++---
{sdk-wasm => sdk-wasm-js}/README.md | 0
{sdk-wasm => sdk-wasm-js}/package.json | 0
{sdk-wasm => sdk-wasm-js}/src/lib.rs | 0
{sdk-wasm => sdk-wasm-js}/tests/hash.mjs | 0
{sdk-wasm => sdk-wasm-js}/tests/keypair.mjs | 0
{sdk-wasm => sdk-wasm-js}/tests/pubkey.mjs | 0
{sdk-wasm => sdk-wasm-js}/tests/transaction.mjs | 0
13 files changed, 7 insertions(+), 7 deletions(-)
rename {sdk-wasm => sdk-wasm-js}/.gitignore (100%)
rename {sdk-wasm => sdk-wasm-js}/Cargo.toml (79%)
rename {sdk-wasm => sdk-wasm-js}/README.md (100%)
rename {sdk-wasm => sdk-wasm-js}/package.json (100%)
rename {sdk-wasm => sdk-wasm-js}/src/lib.rs (100%)
rename {sdk-wasm => sdk-wasm-js}/tests/hash.mjs (100%)
rename {sdk-wasm => sdk-wasm-js}/tests/keypair.mjs (100%)
rename {sdk-wasm => sdk-wasm-js}/tests/pubkey.mjs (100%)
rename {sdk-wasm => sdk-wasm-js}/tests/transaction.mjs (100%)
diff --git a/Cargo.lock b/Cargo.lock
index 4f5df81c0..29f801839 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -3756,7 +3756,7 @@ dependencies = [
]
[[package]]
-name = "solana-sdk-wasm"
+name = "solana-sdk-wasm-js"
version = "2.2.2"
dependencies = [
"solana-program",
diff --git a/Cargo.toml b/Cargo.toml
index 1fa002c8f..3c8476212 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -71,7 +71,7 @@ members = [
"sdk",
"sdk-ids",
"sdk-macro",
- "sdk-wasm",
+ "sdk-wasm-js",
"secp256k1-program",
"secp256k1-recover",
"secp256r1-program",
diff --git a/scripts/build-sbf.sh b/scripts/build-sbf.sh
index 7880c8505..d39654f80 100755
--- a/scripts/build-sbf.sh
+++ b/scripts/build-sbf.sh
@@ -19,7 +19,7 @@ exclude_list=(
"presigner"
"quic-definitions"
"rent-collector"
- "sdk-wasm"
+ "sdk-wasm-js"
"secp256k1-program"
"secp256r1-program"
"system-transaction"
diff --git a/scripts/test-wasm.sh b/scripts/test-wasm.sh
index e3a08623b..3f8fee394 100755
--- a/scripts/test-wasm.sh
+++ b/scripts/test-wasm.sh
@@ -5,6 +5,6 @@ here="$(dirname "$0")"
src_root="$(readlink -f "${here}/..")"
cd "${src_root}"
-cd sdk-wasm
+cd sdk-wasm-js
npm install
npm test
diff --git a/sdk-wasm/.gitignore b/sdk-wasm-js/.gitignore
similarity index 100%
rename from sdk-wasm/.gitignore
rename to sdk-wasm-js/.gitignore
diff --git a/sdk-wasm/Cargo.toml b/sdk-wasm-js/Cargo.toml
similarity index 79%
rename from sdk-wasm/Cargo.toml
rename to sdk-wasm-js/Cargo.toml
index de4a153fc..1f7ebb400 100644
--- a/sdk-wasm/Cargo.toml
+++ b/sdk-wasm-js/Cargo.toml
@@ -1,7 +1,7 @@
[package]
-name = "solana-sdk-wasm"
-description = "Solana SDK Wasm"
-documentation = "https://docs.rs/solana-sdk"
+name = "solana-sdk-wasm-js"
+description = "Solana SDK Wasm JS"
+documentation = "https://docs.rs/solana-sdk-wasm-js"
version = "2.2.2"
authors = { workspace = true }
repository = { workspace = true }
diff --git a/sdk-wasm/README.md b/sdk-wasm-js/README.md
similarity index 100%
rename from sdk-wasm/README.md
rename to sdk-wasm-js/README.md
diff --git a/sdk-wasm/package.json b/sdk-wasm-js/package.json
similarity index 100%
rename from sdk-wasm/package.json
rename to sdk-wasm-js/package.json
diff --git a/sdk-wasm/src/lib.rs b/sdk-wasm-js/src/lib.rs
similarity index 100%
rename from sdk-wasm/src/lib.rs
rename to sdk-wasm-js/src/lib.rs
diff --git a/sdk-wasm/tests/hash.mjs b/sdk-wasm-js/tests/hash.mjs
similarity index 100%
rename from sdk-wasm/tests/hash.mjs
rename to sdk-wasm-js/tests/hash.mjs
diff --git a/sdk-wasm/tests/keypair.mjs b/sdk-wasm-js/tests/keypair.mjs
similarity index 100%
rename from sdk-wasm/tests/keypair.mjs
rename to sdk-wasm-js/tests/keypair.mjs
diff --git a/sdk-wasm/tests/pubkey.mjs b/sdk-wasm-js/tests/pubkey.mjs
similarity index 100%
rename from sdk-wasm/tests/pubkey.mjs
rename to sdk-wasm-js/tests/pubkey.mjs
diff --git a/sdk-wasm/tests/transaction.mjs b/sdk-wasm-js/tests/transaction.mjs
similarity index 100%
rename from sdk-wasm/tests/transaction.mjs
rename to sdk-wasm-js/tests/transaction.mjs
From 9a86349c19cb5c1e2d2fed678ba30b9200650706 Mon Sep 17 00:00:00 2001
From: Lucas
Date: Mon, 12 May 2025 17:22:17 -0300
Subject: [PATCH 13/18] Fix typos and improve description
---
program/src/lib.rs | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/program/src/lib.rs b/program/src/lib.rs
index d3d0d06c9..d2bffe931 100644
--- a/program/src/lib.rs
+++ b/program/src/lib.rs
@@ -107,8 +107,9 @@
//! compiler optimizations that may decrease program size and CU usage.
//!
//! Prefer writing a separate package if it is supposed to be used as a library for other Solana
-//! programs (i.e. a "rlib" only crate). When created a Rust project intended to be a program
-//! ready for deployment, ues only the "cdylib" crate type.
+//! programs (i.e. a "rlib" only crate). This would be normally the case for defining account
+//! types and helpers that are used by both clients and program. When creating a Rust project
+//! intended to be a program ready for deployment, use only the "cdylib" crate type.
//!
//! # On-chain vs. off-chain compilation targets
//!
From b56961cf497655da233b812901c2ea0c1ea3d85d Mon Sep 17 00:00:00 2001
From: Lucas
Date: Mon, 12 May 2025 17:24:45 -0300
Subject: [PATCH 14/18] Revert "Revert changes in the program crate"
This reverts commit 854b07f13767478a684558c50dd9f577807ab4b6.
---
Cargo.lock | 28 +++++++++++++++++++++++++++-
program/Cargo.toml | 2 +-
program/src/lib.rs | 1 -
program/src/wasm/mod.rs | 24 ------------------------
sdk-wasm-js/Cargo.toml | 8 ++++++++
sdk-wasm-js/src/lib.rs | 24 ++++++++++++++++++++++++
6 files changed, 60 insertions(+), 27 deletions(-)
delete mode 100644 program/src/wasm/mod.rs
diff --git a/Cargo.lock b/Cargo.lock
index 29f801839..95d8252f5 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -660,6 +660,26 @@ dependencies = [
"windows-sys 0.59.0",
]
+[[package]]
+name = "console_error_panic_hook"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "console_log"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e89f72f65e8501878b8a004d5a1afb780987e2ce2b4532c562e367a72c57499f"
+dependencies = [
+ "log",
+ "web-sys",
+]
+
[[package]]
name = "constant_time_eq"
version = "0.3.1"
@@ -3759,8 +3779,14 @@ dependencies = [
name = "solana-sdk-wasm-js"
version = "2.2.2"
dependencies = [
+ "console_error_panic_hook",
+ "console_log",
+ "js-sys",
+ "log",
+ "solana-instruction",
"solana-program",
"solana-sdk",
+ "wasm-bindgen",
]
[[package]]
@@ -4754,7 +4780,7 @@ version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
dependencies = [
- "windows-sys 0.48.0",
+ "windows-sys 0.59.0",
]
[[package]]
diff --git a/program/Cargo.toml b/program/Cargo.toml
index e6fe6f240..79d9dfe2c 100644
--- a/program/Cargo.toml
+++ b/program/Cargo.toml
@@ -13,7 +13,7 @@ rust-version = "1.81.0" # solana platform-tools rust ve
include = ["src/**/*", "README.md"]
[package.metadata.docs.rs]
-targets = ["x86_64-unknown-linux-gnu", "wasm32-unknown-unknown"]
+targets = ["x86_64-unknown-linux-gnu"]
all-features = true
rustdoc-args = ["--cfg=docsrs"]
diff --git a/program/src/lib.rs b/program/src/lib.rs
index d2bffe931..36c35c3b5 100644
--- a/program/src/lib.rs
+++ b/program/src/lib.rs
@@ -495,7 +495,6 @@ pub mod slot_hashes;
pub mod slot_history;
pub mod syscalls;
pub mod sysvar;
-pub mod wasm;
#[deprecated(since = "2.2.0", note = "Use `solana-big-mod-exp` crate instead")]
pub use solana_big_mod_exp as big_mod_exp;
diff --git a/program/src/wasm/mod.rs b/program/src/wasm/mod.rs
deleted file mode 100644
index 337dfb1db..000000000
--- a/program/src/wasm/mod.rs
+++ /dev/null
@@ -1,24 +0,0 @@
-//! solana-program Javascript interface
-#![cfg(target_arch = "wasm32")]
-#[deprecated(since = "2.2.0", note = "Use solana_instruction::wasm instead.")]
-pub use solana_instruction::wasm as instructions;
-use wasm_bindgen::prelude::*;
-// This module is intentionally left empty. The wasm system instruction impl can be
-// found in the `solana-system-interface` crate.
-pub mod system_instruction {}
-
-/// Initialize Javascript logging and panic handler
-#[wasm_bindgen]
-pub fn solana_program_init() {
- use std::sync::Once;
- static INIT: Once = Once::new();
-
- INIT.call_once(|| {
- std::panic::set_hook(Box::new(console_error_panic_hook::hook));
- console_log::init_with_level(log::Level::Info).unwrap();
- });
-}
-
-pub fn display_to_jsvalue(display: T) -> JsValue {
- display.to_string().into()
-}
diff --git a/sdk-wasm-js/Cargo.toml b/sdk-wasm-js/Cargo.toml
index 1f7ebb400..ba8d1a838 100644
--- a/sdk-wasm-js/Cargo.toml
+++ b/sdk-wasm-js/Cargo.toml
@@ -10,9 +10,17 @@ license = { workspace = true }
edition = { workspace = true }
[dependencies]
+solana-instruction = { workspace = true, features = ["std"] }
solana-program = { workspace = true }
solana-sdk = { workspace = true }
+[target.'cfg(target_arch = "wasm32")'.dependencies]
+console_error_panic_hook = { workspace = true }
+console_log = { workspace = true }
+wasm-bindgen = { workspace = true }
+log = { workspace = true }
+js-sys = { workspace = true }
+
[lib]
crate-type = ["cdylib"]
diff --git a/sdk-wasm-js/src/lib.rs b/sdk-wasm-js/src/lib.rs
index 3866fea92..09d2dff55 100644
--- a/sdk-wasm-js/src/lib.rs
+++ b/sdk-wasm-js/src/lib.rs
@@ -1,4 +1,8 @@
+//! solana-program Javascript interface
#![cfg(target_arch = "wasm32")]
+#[deprecated(since = "2.2.0", note = "Use solana_instruction::wasm instead.")]
+pub use solana_instruction::wasm as instructions;
+use {::log::Level, wasm_bindgen::prelude::*};
pub use {
solana_program::*,
solana_sdk::{
@@ -16,3 +20,23 @@ pub use {
*,
},
};
+
+// This module is intentionally left empty. The wasm system instruction impl can be
+// found in the `solana-system-interface` crate.
+pub mod system_instruction {}
+
+/// Initialize Javascript logging and panic handler
+#[wasm_bindgen]
+pub fn solana_program_init() {
+ use std::sync::Once;
+ static INIT: Once = Once::new();
+
+ INIT.call_once(|| {
+ std::panic::set_hook(Box::new(console_error_panic_hook::hook));
+ console_log::init_with_level(Level::Info).unwrap();
+ });
+}
+
+pub fn display_to_jsvalue(display: T) -> JsValue {
+ display.to_string().into()
+}
From 069d9a179d2a5bc08cae8aff0e1250a69a81aaeb Mon Sep 17 00:00:00 2001
From: Lucas
Date: Mon, 12 May 2025 17:24:54 -0300
Subject: [PATCH 15/18] Revert "Revert changes in the SDK crate"
This reverts commit c66f7d70612e101816efaccd8d9693dc436b8813.
---
sdk/src/lib.rs | 1 -
sdk/src/wasm/keypair.rs | 3 ---
sdk/src/wasm/mod.rs | 5 -----
sdk/src/wasm/transaction.rs | 3 ---
4 files changed, 12 deletions(-)
delete mode 100644 sdk/src/wasm/keypair.rs
delete mode 100644 sdk/src/wasm/mod.rs
delete mode 100644 sdk/src/wasm/transaction.rs
diff --git a/sdk/src/lib.rs b/sdk/src/lib.rs
index f9351bdf1..afb5cfaa3 100644
--- a/sdk/src/lib.rs
+++ b/sdk/src/lib.rs
@@ -65,7 +65,6 @@ pub mod signature;
pub mod signer;
pub mod transaction;
pub mod transport;
-pub mod wasm;
#[deprecated(since = "2.1.0", note = "Use `solana-account` crate instead")]
pub use solana_account as account;
diff --git a/sdk/src/wasm/keypair.rs b/sdk/src/wasm/keypair.rs
deleted file mode 100644
index 5c5da471a..000000000
--- a/sdk/src/wasm/keypair.rs
+++ /dev/null
@@ -1,3 +0,0 @@
-//! This module is empty but has not yet been removed because that would
-//! technically be a breaking change. There was never anything to import
-//! from here.
diff --git a/sdk/src/wasm/mod.rs b/sdk/src/wasm/mod.rs
deleted file mode 100644
index 6946e730f..000000000
--- a/sdk/src/wasm/mod.rs
+++ /dev/null
@@ -1,5 +0,0 @@
-//! solana-sdk Javascript interface
-#![cfg(target_arch = "wasm32")]
-
-pub mod keypair;
-pub mod transaction;
diff --git a/sdk/src/wasm/transaction.rs b/sdk/src/wasm/transaction.rs
deleted file mode 100644
index 5c5da471a..000000000
--- a/sdk/src/wasm/transaction.rs
+++ /dev/null
@@ -1,3 +0,0 @@
-//! This module is empty but has not yet been removed because that would
-//! technically be a breaking change. There was never anything to import
-//! from here.
From 26f497f522959719789eb04fe14c76b07b1344b5 Mon Sep 17 00:00:00 2001
From: Lucas
Date: Mon, 12 May 2025 17:52:27 -0300
Subject: [PATCH 16/18] Build docs for wasm
---
program/Cargo.toml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/program/Cargo.toml b/program/Cargo.toml
index 79d9dfe2c..e6fe6f240 100644
--- a/program/Cargo.toml
+++ b/program/Cargo.toml
@@ -13,7 +13,7 @@ rust-version = "1.81.0" # solana platform-tools rust ve
include = ["src/**/*", "README.md"]
[package.metadata.docs.rs]
-targets = ["x86_64-unknown-linux-gnu"]
+targets = ["x86_64-unknown-linux-gnu", "wasm32-unknown-unknown"]
all-features = true
rustdoc-args = ["--cfg=docsrs"]
From 6299bf7e5ace67e57a6454721a56364b8d56d649 Mon Sep 17 00:00:00 2001
From: Lucas Steuernagel
Date: Mon, 16 Jun 2025 14:06:10 -0300
Subject: [PATCH 17/18] Remove dependency, rewrite readme and change version
---
Cargo.lock | 2 +-
sdk-wasm-js/Cargo.toml | 2 +-
sdk-wasm-js/README.md | 2 --
3 files changed, 2 insertions(+), 4 deletions(-)
diff --git a/Cargo.lock b/Cargo.lock
index 95d8252f5..ec635a6ea 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -3777,7 +3777,7 @@ dependencies = [
[[package]]
name = "solana-sdk-wasm-js"
-version = "2.2.2"
+version = "1.0.0"
dependencies = [
"console_error_panic_hook",
"console_log",
diff --git a/sdk-wasm-js/Cargo.toml b/sdk-wasm-js/Cargo.toml
index ba8d1a838..3d0a322ac 100644
--- a/sdk-wasm-js/Cargo.toml
+++ b/sdk-wasm-js/Cargo.toml
@@ -2,7 +2,7 @@
name = "solana-sdk-wasm-js"
description = "Solana SDK Wasm JS"
documentation = "https://docs.rs/solana-sdk-wasm-js"
-version = "2.2.2"
+version = "1.0.0"
authors = { workspace = true }
repository = { workspace = true }
homepage = { workspace = true }
diff --git a/sdk-wasm-js/README.md b/sdk-wasm-js/README.md
index d496e1cee..7d6f12cc1 100644
--- a/sdk-wasm-js/README.md
+++ b/sdk-wasm-js/README.md
@@ -12,6 +12,4 @@ applications.
More information about Solana is available in the [Solana documentation](https://solana.com/docs).
-The [Solana Program Organization](https://github.com/solana-program) provides examples of how to use this crate.
-
Still have questions? Ask us on [Stack Exchange](https://sola.na/sse)
From 3d44a7e5fc189e9f0c84330a535db3da2fc214ed Mon Sep 17 00:00:00 2001
From: Lucas Steuernagel
Date: Mon, 16 Jun 2025 15:26:24 -0300
Subject: [PATCH 18/18] Fix rebase conflicts
---
sdk-wasm-js/Cargo.toml | 20 ++++++++++----------
sdk-wasm-js/src/lib.rs | 3 +--
2 files changed, 11 insertions(+), 12 deletions(-)
diff --git a/sdk-wasm-js/Cargo.toml b/sdk-wasm-js/Cargo.toml
index 3d0a322ac..ed838d355 100644
--- a/sdk-wasm-js/Cargo.toml
+++ b/sdk-wasm-js/Cargo.toml
@@ -9,6 +9,14 @@ homepage = { workspace = true }
license = { workspace = true }
edition = { workspace = true }
+[package.metadata.docs.rs]
+targets = ["wasm32-unknown-unknown"]
+all-features = true
+rustdoc-args = ["--cfg=docsrs"]
+
+[lib]
+crate-type = ["cdylib"]
+
[dependencies]
solana-instruction = { workspace = true, features = ["std"] }
solana-program = { workspace = true }
@@ -17,17 +25,9 @@ solana-sdk = { workspace = true }
[target.'cfg(target_arch = "wasm32")'.dependencies]
console_error_panic_hook = { workspace = true }
console_log = { workspace = true }
-wasm-bindgen = { workspace = true }
-log = { workspace = true }
js-sys = { workspace = true }
-
-[lib]
-crate-type = ["cdylib"]
+log = { workspace = true }
+wasm-bindgen = { workspace = true }
[lints]
workspace = true
-
-[package.metadata.docs.rs]
-targets = ["wasm32-unknown-unknown"]
-all-features = true
-rustdoc-args = ["--cfg=docsrs"]
diff --git a/sdk-wasm-js/src/lib.rs b/sdk-wasm-js/src/lib.rs
index 09d2dff55..313f60573 100644
--- a/sdk-wasm-js/src/lib.rs
+++ b/sdk-wasm-js/src/lib.rs
@@ -13,9 +13,8 @@ pub use {
entrypoint,
entrypoint_deprecated,
example_mocks,
- feature,
hash,
- program_utils,
+ program_stubs,
pubkey,
*,
},