diff --git a/Cargo.toml b/Cargo.toml
index fe15af623..a246ea3fb 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -16,6 +16,7 @@ members = [
"nekoton-abi",
"nekoton-contracts",
"nekoton-derive",
+ "nekoton-jetton",
"nekoton-proto",
"nekoton-transport",
"nekoton-utils",
@@ -40,7 +41,7 @@ once_cell = "1.12.0"
parking_lot = "0.12.0"
pbkdf2 = { version = "0.12.2", optional = true }
quick_cache = "0.4.1"
-rand = { version = "0.8", features = ["getrandom"] , optional = true }
+rand = { version = "0.8", features = ["getrandom"], optional = true }
secstr = { version = "0.5.0", features = ["serde"], optional = true }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
diff --git a/nekoton-abi/Cargo.toml b/nekoton-abi/Cargo.toml
index 70208fab6..92d512c56 100644
--- a/nekoton-abi/Cargo.toml
+++ b/nekoton-abi/Cargo.toml
@@ -29,7 +29,7 @@ ton_abi = { git = "https://github.com/broxus/ton-labs-abi" }
ton_block = { git = "https://github.com/broxus/ton-labs-block.git" }
ton_executor = { git = "https://github.com/broxus/ton-labs-executor.git" }
ton_types = { git = "https://github.com/broxus/ton-labs-types.git" }
-ton_vm = { git = "https://github.com/broxus/ton-labs-vm.git" }
+ton_vm = { git = "https://github.com/broxus/ton-labs-vm.git", branch = "feature/jetton" }
nekoton-derive = { path = "../nekoton-derive", optional = true }
nekoton-utils = { path = "../nekoton-utils" }
diff --git a/nekoton-contracts/Cargo.toml b/nekoton-contracts/Cargo.toml
index 0192d8d41..35de2e683 100644
--- a/nekoton-contracts/Cargo.toml
+++ b/nekoton-contracts/Cargo.toml
@@ -20,7 +20,11 @@ ton_types = { git = "https://github.com/broxus/ton-labs-types.git" }
ton_abi = { git = "https://github.com/broxus/ton-labs-abi" }
nekoton-abi = { path = "../nekoton-abi", features = ["derive"] }
+nekoton-jetton = { path = "../nekoton-jetton" }
nekoton-utils = { path = "../nekoton-utils" }
+[dev-dependencies]
+base64 = "0.13"
+
[features]
web = ["ton_abi/web"]
diff --git a/nekoton-contracts/src/jetton/mod.rs b/nekoton-contracts/src/jetton/mod.rs
new file mode 100644
index 000000000..5d88c323a
--- /dev/null
+++ b/nekoton-contracts/src/jetton/mod.rs
@@ -0,0 +1,106 @@
+use nekoton_abi::num_bigint::BigUint;
+use nekoton_abi::{ExecutionContext, StackItem};
+use ton_block::Serializable;
+use ton_types::SliceData;
+
+pub use root_token_contract::{JettonRootData, JettonRootMeta};
+pub use token_wallet_contract::JettonWalletData;
+
+mod root_token_contract;
+mod token_wallet_contract;
+
+#[derive(Copy, Clone)]
+pub struct RootTokenContract<'a>(pub ExecutionContext<'a>);
+
+pub const GET_JETTON_DATA: &str = "get_jetton_data";
+pub const GET_JETTON_META: &str = "get_jetton_meta";
+pub const GET_WALLET_DATA: &str = "get_wallet_data";
+pub const GET_WALLET_ADDRESS: &str = "get_wallet_address";
+
+impl RootTokenContract<'_> {
+ pub fn name(&self) -> anyhow::Result