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 + +

+ +# 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, *, },