From dee430c0d974285d94f1127e43da3186602a37d4 Mon Sep 17 00:00:00 2001 From: Kapten boneng Date: Sun, 18 Jan 2026 17:26:40 +0700 Subject: [PATCH 01/13] Create soroban-sdk-nexus --- soroban-sdk-nexus | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 soroban-sdk-nexus diff --git a/soroban-sdk-nexus b/soroban-sdk-nexus new file mode 100644 index 000000000..c5a0ab5d3 --- /dev/null +++ b/soroban-sdk-nexus @@ -0,0 +1,27 @@ +soroban-sdk-nexus/ +├── README.md +├── translations/ +│ └── id-ID.md +├── examples/ +│ ├── defi-staking/ +│ ├── dao-governance/ +│ ├── escrow/ +│ └── nft-market/ +├── nexus-interop/ +│ ├── message-format.rs +│ ├── signature-verify.rs +│ └── stellar-bridge.rs +├── secure-patterns/ +│ ├── access-control.rs +│ ├── reentrancy-guard.rs +│ └── pausable.rs +├── tools/ +│ ├── gas-analyzer.rs +│ └── contract-risk-score.rs +├── docs/ +│ └── tutorials/ +│ ├── 01-hello-soroban.md +│ ├── 02-token.md +│ └── 03-dao.md +└── .github/workflows/ + └── ci.yml From 6ce197f2c4c855ca6490ee57432500cb2937c514 Mon Sep 17 00:00:00 2001 From: Kapten boneng Date: Sun, 18 Jan 2026 17:27:24 +0700 Subject: [PATCH 02/13] Create README --- README | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 README diff --git a/README b/README new file mode 100644 index 000000000..945e9db58 --- /dev/null +++ b/README @@ -0,0 +1,22 @@ +# soroban-sdk-nexus 🚀 + +Soroban SDK Nexus adalah fork dari rs-soroban-sdk yang difokuskan pada: +- 🔗 Interoperabilitas lintas jaringan +- 🛡️ Pola keamanan kontrak pintar +- 🧠 Tooling analisis kontrak +- 📚 Edukasi & contoh siap pakai + +Cocok untuk developer yang ingin membangun DeFi, DAO, dan aplikasi terdesentralisasi di Soroban dengan standar enterprise. + +## Fitur Utama +- Nexus Interop Layer +- Secure Smart Contract Patterns +- DeFi & DAO Examples +- Gas Optimizer & Risk Scorer +- Dokumentasi Bahasa Indonesia 🇮🇩 + +## Quick Start +```bash +git clone https://github.com/USERNAME/soroban-sdk-nexus +cd soroban-sdk-nexus +cargo test From 97cda18b090cf467a930a07496f12c098cf19245 Mon Sep 17 00:00:00 2001 From: Kapten boneng Date: Sun, 18 Jan 2026 17:29:02 +0700 Subject: [PATCH 03/13] Create access-control.rs --- secure-patterns/access-control.rs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 secure-patterns/access-control.rs diff --git a/secure-patterns/access-control.rs b/secure-patterns/access-control.rs new file mode 100644 index 000000000..464c6eb02 --- /dev/null +++ b/secure-patterns/access-control.rs @@ -0,0 +1,20 @@ +use soroban_sdk::{contracttype, Address, Env, Map}; + +#[contracttype] +#[derive(Clone)] +pub struct Roles { + pub admin: Address, + pub operators: Map, +} + +pub fn only_admin(e: &Env, roles: &Roles, caller: &Address) { + if &roles.admin != caller { + panic!("Not authorized: Admin only"); + } +} + +pub fn only_operator(e: &Env, roles: &Roles, caller: &Address) { + if roles.operators.get(caller.clone()).unwrap_or(false) != true { + panic!("Not authorized: Operator only"); + } +} From 8220b51de0c594339e61cbada01fd00ac0921eb7 Mon Sep 17 00:00:00 2001 From: Kapten boneng Date: Sun, 18 Jan 2026 17:29:58 +0700 Subject: [PATCH 04/13] Create reentrancy-guard.rs --- secure-patterns/reentrancy-guard.rs | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 secure-patterns/reentrancy-guard.rs diff --git a/secure-patterns/reentrancy-guard.rs b/secure-patterns/reentrancy-guard.rs new file mode 100644 index 000000000..ac9ef2d17 --- /dev/null +++ b/secure-patterns/reentrancy-guard.rs @@ -0,0 +1,24 @@ +use soroban_sdk::{contracttype, Env}; + +#[contracttype] +#[derive(Clone)] +pub struct ReentrancyGuard { + locked: bool, +} + +impl ReentrancyGuard { + pub fn new() -> Self { + Self { locked: false } + } + + pub fn enter(&mut self) { + if self.locked { + panic!("Reentrancy detected"); + } + self.locked = true; + } + + pub fn exit(&mut self) { + self.locked = false; + } +} From 2e6802281eb3ec8861bf0e57dc2b1cb0e9165102 Mon Sep 17 00:00:00 2001 From: Kapten boneng Date: Sun, 18 Jan 2026 17:30:40 +0700 Subject: [PATCH 05/13] Create pausable.rs --- secure-patterns/secure-patterns/pausable.rs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 secure-patterns/secure-patterns/pausable.rs diff --git a/secure-patterns/secure-patterns/pausable.rs b/secure-patterns/secure-patterns/pausable.rs new file mode 100644 index 000000000..5315f21c8 --- /dev/null +++ b/secure-patterns/secure-patterns/pausable.rs @@ -0,0 +1,15 @@ +use soroban_sdk::{contracttype, Env}; + +#[contracttype] +#[derive(Clone)] +pub struct PauseState { + pub paused: bool, +} + +impl PauseState { + pub fn require_not_paused(&self) { + if self.paused { + panic!("Contract is paused"); + } + } +} From 9ec26349f4bdcfa42c7d05a344dee6a4d884fa2b Mon Sep 17 00:00:00 2001 From: Kapten boneng Date: Sun, 18 Jan 2026 17:31:16 +0700 Subject: [PATCH 06/13] Create message-format.rs --- .../secure-patterns/nexus-interop/message-format.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 secure-patterns/secure-patterns/nexus-interop/message-format.rs diff --git a/secure-patterns/secure-patterns/nexus-interop/message-format.rs b/secure-patterns/secure-patterns/nexus-interop/message-format.rs new file mode 100644 index 000000000..92355764a --- /dev/null +++ b/secure-patterns/secure-patterns/nexus-interop/message-format.rs @@ -0,0 +1,10 @@ +use soroban_sdk::{contracttype, Bytes, BytesN}; + +#[contracttype] +#[derive(Clone)] +pub struct NexusMessage { + pub src_chain: Bytes, + pub dst_chain: Bytes, + pub sender: BytesN<32>, + pub payload: Bytes, +} From 24cb4179d4081f0f146d1e365d4a5fa6c66114e1 Mon Sep 17 00:00:00 2001 From: Kapten boneng Date: Sun, 18 Jan 2026 17:31:50 +0700 Subject: [PATCH 07/13] Create signature-verify.rs --- .../nexus-interop/nexus-interop/signature-verify.rs | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 secure-patterns/secure-patterns/nexus-interop/nexus-interop/signature-verify.rs diff --git a/secure-patterns/secure-patterns/nexus-interop/nexus-interop/signature-verify.rs b/secure-patterns/secure-patterns/nexus-interop/nexus-interop/signature-verify.rs new file mode 100644 index 000000000..7a0eb37c7 --- /dev/null +++ b/secure-patterns/secure-patterns/nexus-interop/nexus-interop/signature-verify.rs @@ -0,0 +1,5 @@ +use soroban_sdk::{Env, BytesN, Bytes}; + +pub fn verify_signature(e: &Env, msg: &Bytes, sig: &BytesN<64>, pubkey: &BytesN<32>) -> bool { + e.crypto().ed25519_verify(pubkey, msg, sig) +} From 58e11ea8de4c1d6c25d20b5704bb0673b3655c86 Mon Sep 17 00:00:00 2001 From: Kapten boneng Date: Sun, 18 Jan 2026 17:32:26 +0700 Subject: [PATCH 08/13] Create stellar-bridge.rs --- .../nexus-interop/nexus-interop/stellar-bridge.rs | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 secure-patterns/secure-patterns/nexus-interop/nexus-interop/nexus-interop/stellar-bridge.rs diff --git a/secure-patterns/secure-patterns/nexus-interop/nexus-interop/nexus-interop/stellar-bridge.rs b/secure-patterns/secure-patterns/nexus-interop/nexus-interop/nexus-interop/stellar-bridge.rs new file mode 100644 index 000000000..352f12503 --- /dev/null +++ b/secure-patterns/secure-patterns/nexus-interop/nexus-interop/nexus-interop/stellar-bridge.rs @@ -0,0 +1,8 @@ +use soroban_sdk::{Env, Address, Bytes}; + +pub fn emit_bridge_event(e: &Env, from: Address, to_chain: Bytes, payload: Bytes) { + e.events().publish( + (from, to_chain), + payload, + ); +} From 0016c15ef900d0cc7414aee59377f54c10435a97 Mon Sep 17 00:00:00 2001 From: Kapten boneng Date: Sun, 18 Jan 2026 17:33:03 +0700 Subject: [PATCH 09/13] Create gas-analyzer.rs --- .../nexus-interop/nexus-interop/tools/gas-analyzer.rs | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 secure-patterns/secure-patterns/nexus-interop/nexus-interop/nexus-interop/tools/gas-analyzer.rs diff --git a/secure-patterns/secure-patterns/nexus-interop/nexus-interop/nexus-interop/tools/gas-analyzer.rs b/secure-patterns/secure-patterns/nexus-interop/nexus-interop/nexus-interop/tools/gas-analyzer.rs new file mode 100644 index 000000000..a55da77ff --- /dev/null +++ b/secure-patterns/secure-patterns/nexus-interop/nexus-interop/nexus-interop/tools/gas-analyzer.rs @@ -0,0 +1,7 @@ +use soroban_sdk::{Env, Symbol}; + +pub fn log_gas_usage(e: &Env, tag: Symbol) { + let cpu = e.cost_estimate().cpu_insns; + let mem = e.cost_estimate().mem_bytes; + e.events().publish(tag, (cpu, mem)); +} From c0baa86ca75028d8eb3a04f9081513934b736128 Mon Sep 17 00:00:00 2001 From: Kapten boneng Date: Sun, 18 Jan 2026 17:33:35 +0700 Subject: [PATCH 10/13] Create contract-risk-score.rs --- .../nexus-interop/tools/tools/contract-risk-score.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 secure-patterns/secure-patterns/nexus-interop/nexus-interop/nexus-interop/tools/tools/contract-risk-score.rs diff --git a/secure-patterns/secure-patterns/nexus-interop/nexus-interop/nexus-interop/tools/tools/contract-risk-score.rs b/secure-patterns/secure-patterns/nexus-interop/nexus-interop/nexus-interop/tools/tools/contract-risk-score.rs new file mode 100644 index 000000000..838e5ab5d --- /dev/null +++ b/secure-patterns/secure-patterns/nexus-interop/nexus-interop/nexus-interop/tools/tools/contract-risk-score.rs @@ -0,0 +1,12 @@ +use soroban_sdk::{Env, Symbol}; + +pub fn risk_score(storage_writes: u32, external_calls: u32) -> u32 { + let mut score = 0; + score += storage_writes * 2; + score += external_calls * 5; + score +} + +pub fn emit_risk(e: &Env, tag: Symbol, score: u32) { + e.events().publish(tag, score); +} From 211410a1097a95e6f30e274d7a5dc058a062dc0c Mon Sep 17 00:00:00 2001 From: Kapten boneng Date: Sun, 18 Jan 2026 17:34:06 +0700 Subject: [PATCH 11/13] Create lib.rs --- .../tools/tools/examples/defi-staking/lib.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 secure-patterns/secure-patterns/nexus-interop/nexus-interop/nexus-interop/tools/tools/examples/defi-staking/lib.rs diff --git a/secure-patterns/secure-patterns/nexus-interop/nexus-interop/nexus-interop/tools/tools/examples/defi-staking/lib.rs b/secure-patterns/secure-patterns/nexus-interop/nexus-interop/nexus-interop/tools/tools/examples/defi-staking/lib.rs new file mode 100644 index 000000000..84b1221c1 --- /dev/null +++ b/secure-patterns/secure-patterns/nexus-interop/nexus-interop/nexus-interop/tools/tools/examples/defi-staking/lib.rs @@ -0,0 +1,12 @@ +use soroban_sdk::{contract, contractimpl, Env, Address}; + +#[contract] +pub struct StakingContract; + +#[contractimpl] +impl StakingContract { + pub fn stake(e: Env, user: Address, amount: i128) { + user.require_auth(); + e.events().publish(("stake", user), amount); + } +} From a07caf3b2df32026c8c2dffb7742b156d4dbf92d Mon Sep 17 00:00:00 2001 From: Kapten boneng Date: Sun, 18 Jan 2026 17:34:40 +0700 Subject: [PATCH 12/13] Create lib.rs --- .../defi-staking/examples/dao-governance/lib.rs | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 secure-patterns/secure-patterns/nexus-interop/nexus-interop/nexus-interop/tools/tools/examples/defi-staking/examples/dao-governance/lib.rs diff --git a/secure-patterns/secure-patterns/nexus-interop/nexus-interop/nexus-interop/tools/tools/examples/defi-staking/examples/dao-governance/lib.rs b/secure-patterns/secure-patterns/nexus-interop/nexus-interop/nexus-interop/tools/tools/examples/defi-staking/examples/dao-governance/lib.rs new file mode 100644 index 000000000..02bd51c2c --- /dev/null +++ b/secure-patterns/secure-patterns/nexus-interop/nexus-interop/nexus-interop/tools/tools/examples/defi-staking/examples/dao-governance/lib.rs @@ -0,0 +1,12 @@ +use soroban_sdk::{contract, contractimpl, Env, Address, Symbol}; + +#[contract] +pub struct DaoContract; + +#[contractimpl] +impl DaoContract { + pub fn vote(e: Env, voter: Address, proposal: Symbol, support: bool) { + voter.require_auth(); + e.events().publish((proposal, voter), support); + } +} From 2f18f6eed6329598fbdde97ea04f610d84d0beee Mon Sep 17 00:00:00 2001 From: Kapten boneng Date: Sun, 18 Jan 2026 17:35:53 +0700 Subject: [PATCH 13/13] Create 01-hello-soroban.md --- .../docs/tutorials/01-hello-soroban.md | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 secure-patterns/secure-patterns/nexus-interop/nexus-interop/nexus-interop/tools/tools/examples/defi-staking/examples/dao-governance/docs/tutorials/01-hello-soroban.md diff --git a/secure-patterns/secure-patterns/nexus-interop/nexus-interop/nexus-interop/tools/tools/examples/defi-staking/examples/dao-governance/docs/tutorials/01-hello-soroban.md b/secure-patterns/secure-patterns/nexus-interop/nexus-interop/nexus-interop/tools/tools/examples/defi-staking/examples/dao-governance/docs/tutorials/01-hello-soroban.md new file mode 100644 index 000000000..f5478c06c --- /dev/null +++ b/secure-patterns/secure-patterns/nexus-interop/nexus-interop/nexus-interop/tools/tools/examples/defi-staking/examples/dao-governance/docs/tutorials/01-hello-soroban.md @@ -0,0 +1,39 @@ +# Hello Soroban 👋 + +Contoh kontrak sederhana: + +```rust +#[contract] +pub struct Hello; + +#[contractimpl] +impl Hello { + pub fn hi(env: Env) -> Symbol { + Symbol::short("hello") + } +} + +cargo build --target wasm32-unknown-unknown --release + +--- + +## 🤖 `.github/workflows/ci.yml` + +```yaml +name: Soroban Nexus CI + +on: [push, pull_request] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Install Rust + uses: dtolnay/rust-toolchain@stable + with: + targets: wasm32-unknown-unknown + - name: Build + run: cargo build --all --release + - name: Test + run: cargo test