diff --git "a/Backend (NestJS) \342\200\223 API Konversi Rupiah & Crypto" "b/Backend (NestJS) \342\200\223 API Konversi Rupiah & Crypto"
new file mode 100644
index 0000000..07fa08d
--- /dev/null
+++ "b/Backend (NestJS) \342\200\223 API Konversi Rupiah & Crypto"
@@ -0,0 +1,17 @@
+Struktur Folder
+
+backend-conversion/
+├── src/
+│ ├── auth/
+│ ├── users/
+│ ├── conversion/ # Modul utama untuk konversi Rupiah ↔ Crypto
+│ ├── blockchain/
+│ ├── config/
+│ ├── main.ts
+│ ├── app.module.ts
+├── package.json
+└── .env
+
+Instalasi Dependensi
+
+npm install @nestjs/common @nestjs/core @nestjs/config axios ethers web3
diff --git "a/Backend (NestJS) \342\200\223 API Pembayaran Merchant" "b/Backend (NestJS) \342\200\223 API Pembayaran Merchant"
new file mode 100644
index 0000000..1e27ab2
--- /dev/null
+++ "b/Backend (NestJS) \342\200\223 API Pembayaran Merchant"
@@ -0,0 +1,17 @@
+Struktur Folder:
+
+backend-payment/
+├── src/
+│ ├── auth/
+│ ├── users/
+│ ├── payments/ # Modul utama untuk pembayaran merchant
+│ ├── blockchain/
+│ ├── config/
+│ ├── main.ts
+│ ├── app.module.ts
+├── package.json
+└── .env
+
+Instalasi Dependensi
+
+npm install @nestjs/common @nestjs/core @nestjs/config axios ethers web3
diff --git "a/Frontend (React + Next.js) \342\200\223 Checkout Merchant" "b/Frontend (React + Next.js) \342\200\223 Checkout Merchant"
new file mode 100644
index 0000000..b701245
--- /dev/null
+++ "b/Frontend (React + Next.js) \342\200\223 Checkout Merchant"
@@ -0,0 +1,23 @@
+// pages/checkout.js
+import { useState } from "react";
+import { createPayment } from "../sdk/chainesia-sdk";
+
+export default function Checkout() {
+ const [amount, setAmount] = useState("");
+ const [currency, setCurrency] = useState("idr");
+ const [paymentData, setPaymentData] = useState(null);
+
+ const handlePayment = async () => {
+ const response = await createPayment("MERCHANT_123", amount, currency);
+ setPaymentData(response);
+ };
+
+ return (
+
+
Checkout Merchant
+
setAmount(e.target.value)} placeholder="Masukkan jumlah" />
+
+ {paymentData &&
Status: {paymentData.status}
}
+
+ );
+}
diff --git a/Implementasi Enkripsi AES-256 b/Implementasi Enkripsi AES-256
new file mode 100644
index 0000000..672e245
--- /dev/null
+++ b/Implementasi Enkripsi AES-256
@@ -0,0 +1,20 @@
+// src/utils/encryption.ts
+import * as crypto from 'crypto';
+
+const algorithm = 'aes-256-cbc';
+const key = Buffer.from(process.env.ENCRYPTION_KEY, 'hex');
+const iv = Buffer.from(process.env.ENCRYPTION_IV, 'hex');
+
+export function encryptData(data: string): string {
+ const cipher = crypto.createCipheriv(algorithm, key, iv);
+ let encrypted = cipher.update(data, 'utf-8', 'hex');
+ encrypted += cipher.final('hex');
+ return encrypted;
+}
+
+export function decryptData(encrypted: string): string {
+ const decipher = crypto.createDecipheriv(algorithm, key, iv);
+ let decrypted = decipher.update(encrypted, 'hex', 'utf-8');
+ decrypted += decipher.final('utf-8');
+ return decrypted;
+}
diff --git "a/Keamanan \342\200\223 Enkripsi & Proteksi Fraud" "b/Keamanan \342\200\223 Enkripsi & Proteksi Fraud"
new file mode 100644
index 0000000..672e245
--- /dev/null
+++ "b/Keamanan \342\200\223 Enkripsi & Proteksi Fraud"
@@ -0,0 +1,20 @@
+// src/utils/encryption.ts
+import * as crypto from 'crypto';
+
+const algorithm = 'aes-256-cbc';
+const key = Buffer.from(process.env.ENCRYPTION_KEY, 'hex');
+const iv = Buffer.from(process.env.ENCRYPTION_IV, 'hex');
+
+export function encryptData(data: string): string {
+ const cipher = crypto.createCipheriv(algorithm, key, iv);
+ let encrypted = cipher.update(data, 'utf-8', 'hex');
+ encrypted += cipher.final('hex');
+ return encrypted;
+}
+
+export function decryptData(encrypted: string): string {
+ const decipher = crypto.createDecipheriv(algorithm, key, iv);
+ let decrypted = decipher.update(encrypted, 'hex', 'utf-8');
+ decrypted += decipher.final('utf-8');
+ return decrypted;
+}
diff --git a/Kode Backend b/Kode Backend
new file mode 100644
index 0000000..fbbd84d
--- /dev/null
+++ b/Kode Backend
@@ -0,0 +1,27 @@
+// src/conversion/conversion.service.ts
+import { Injectable } from '@nestjs/common';
+import axios from 'axios';
+import { ethers } from 'ethers';
+
+@Injectable()
+export class ConversionService {
+ private provider = new ethers.JsonRpcProvider(process.env.BLOCKCHAIN_RPC);
+ private wallet = new ethers.Wallet(process.env.PRIVATE_KEY, this.provider);
+
+ async getExchangeRate(from: string, to: string): Promise {
+ const response = await axios.get(`https://api.coingecko.com/api/v3/simple/price?ids=${from}&vs_currencies=${to}`);
+ return response.data[from][to];
+ }
+
+ async convertAndSend(from: string, to: string, amount: number, recipient: string) {
+ const rate = await this.getExchangeRate(from, to);
+ const convertedAmount = amount * rate;
+
+ const tx = await this.wallet.sendTransaction({
+ to: recipient,
+ value: ethers.parseEther(convertedAmount.toString()),
+ });
+
+ return tx.wait();
+ }
+}
diff --git "a/Kode Backend \342\200\223 API Pembayaran Merchant" "b/Kode Backend \342\200\223 API Pembayaran Merchant"
new file mode 100644
index 0000000..96d02ee
--- /dev/null
+++ "b/Kode Backend \342\200\223 API Pembayaran Merchant"
@@ -0,0 +1,39 @@
+// src/payments/payments.service.ts
+import { Injectable } from '@nestjs/common';
+import axios from 'axios';
+import { ethers } from 'ethers';
+
+@Injectable()
+export class PaymentsService {
+ private provider = new ethers.JsonRpcProvider(process.env.BLOCKCHAIN_RPC);
+ private wallet = new ethers.Wallet(process.env.PRIVATE_KEY, this.provider);
+
+ async getExchangeRate(from: string, to: string): Promise {
+ const response = await axios.get(`https://api.coingecko.com/api/v3/simple/price?ids=${from}&vs_currencies=${to}`);
+ return response.data[from][to];
+ }
+
+ async createPayment(merchantId: string, amount: number, currency: string) {
+ const rate = await this.getExchangeRate(currency, 'idr');
+ const convertedAmount = amount * rate;
+
+ // Simpan ke database
+ return {
+ merchantId,
+ amount,
+ currency,
+ convertedAmount,
+ status: 'PENDING'
+ };
+ }
+
+ async processPayment(paymentId: string, sender: string) {
+ // Simpan transaksi ke blockchain
+ const tx = await this.wallet.sendTransaction({
+ to: sender,
+ value: ethers.parseEther("0.01"), // Nominal contoh
+ });
+
+ return tx.wait();
+ }
+}
diff --git a/Kode Frontend b/Kode Frontend
new file mode 100644
index 0000000..1049d69
--- /dev/null
+++ b/Kode Frontend
@@ -0,0 +1,24 @@
+// pages/convert.js
+import { useState } from "react";
+import axios from "axios";
+
+export default function ConvertPage() {
+ const [from, setFrom] = useState("idr");
+ const [to, setTo] = useState("ethereum");
+ const [amount, setAmount] = useState("");
+ const [convertedAmount, setConvertedAmount] = useState(null);
+
+ const handleConvert = async () => {
+ const response = await axios.post("/api/convert", { from, to, amount });
+ setConvertedAmount(response.data.convertedAmount);
+ };
+
+ return (
+
+
Konversi Rupiah ke Crypto
+
setAmount(e.target.value)} placeholder="Masukkan jumlah" />
+
+ {convertedAmount &&
Hasil: {convertedAmount} {to.toUpperCase()}
}
+
+ );
+}
diff --git a/Proteksi Slippage (Fluktuasi Harga) b/Proteksi Slippage (Fluktuasi Harga)
new file mode 100644
index 0000000..81710ff
--- /dev/null
+++ b/Proteksi Slippage (Fluktuasi Harga)
@@ -0,0 +1,19 @@
+// src/conversion/conversion.service.ts
+async convertAndSend(from: string, to: string, amount: number, recipient: string) {
+ const rate = await this.getExchangeRate(from, to);
+ const convertedAmount = amount * rate;
+
+ // Proteksi jika harga berubah lebih dari 1%
+ const maxSlippage = 0.01; // 1%
+ const currentRate = await this.getExchangeRate(from, to);
+ if (Math.abs((currentRate - rate) / rate) > maxSlippage) {
+ throw new Error("Harga berubah terlalu cepat, transaksi dibatalkan.");
+ }
+
+ const tx = await this.wallet.sendTransaction({
+ to: recipient,
+ value: ethers.parseEther(convertedAmount.toString()),
+ });
+
+ return tx.wait();
+}
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..4951bf8
--- /dev/null
+++ b/README.md
@@ -0,0 +1,191 @@
+CHAINESIA – Payment Gateway Blockchain & Rupiah
+
+📌 Deskripsi Proyek
+
+CHAINESIA adalah platform pembayaran digital berbasis blockchain yang memungkinkan transaksi antara mata uang digital (cryptocurrency) dan Rupiah (IDR) secara cepat, aman, dan transparan. Proyek ini menghubungkan sistem pembayaran blockchain dengan sistem keuangan tradisional, memungkinkan merchant dan pengguna melakukan transaksi tanpa konversi manual.
+
+
+---
+
+🚀 Fitur Utama
+
+✅ Dompet Digital Terintegrasi – Menyimpan Rupiah & berbagai cryptocurrency dalam satu aplikasi.
+✅ Konversi Otomatis Crypto-IDR – Harga real-time berdasarkan pasar dengan integrasi API Oracle.
+✅ Transaksi Cepat & Transparan – Biaya rendah dengan smart contract escrow untuk keamanan.
+✅ SDK Merchant & Payment Gateway – API dan library untuk integrasi e-commerce & POS.
+✅ Keamanan Tinggi – Menggunakan AES-256 untuk enkripsi data & tanda tangan digital.
+✅ Dukungan Multi-Blockchain – Ethereum, BSC, Stellar, Pi Network.
+
+
+---
+
+🛠️ Teknologi yang Digunakan
+
+
+---
+
+📂 Struktur Direktori
+
+CHAINESIA/
+├── backend/ # API backend menggunakan NestJS
+│ ├── src/
+│ │ ├── auth/ # Modul otentikasi pengguna
+│ │ ├── payments/ # Modul transaksi dan pembayaran
+│ │ ├── blockchain/ # Integrasi smart contract & konversi IDR
+│ │ ├── utils/ # Keamanan & enkripsi
+│ │ ├── main.ts
+│ │ ├── app.module.ts
+│ ├── package.json
+│ ├── .env
+│ ├── README.md
+│
+├── smart-contracts/ # Smart contract untuk escrow transaksi
+│ ├── ChainesiaEscrow.sol
+│ ├── ChainesiaToken.sol
+│
+├── sdk/ # SDK Merchant untuk integrasi
+│ ├── chainesia-sdk.js
+│
+├── frontend/ # Frontend aplikasi pengguna & merchant
+│ ├── pages/
+│ ├── components/
+│ ├── styles/
+│ ├── package.json
+│
+├── docs/ # Dokumentasi API & integrasi SDK
+│ ├── API_REFERENCE.md
+│ ├── SDK_INTEGRATION.md
+│
+└── README.md
+
+
+---
+
+🔧 Instalasi & Penggunaan
+
+1️⃣ Clone Repository
+
+git clone https://github.com/username/chainesia.git
+cd chainesia
+
+2️⃣ Instalasi Dependensi
+
+Backend
+
+cd backend
+npm install
+
+Frontend
+
+cd frontend
+npm install
+
+3️⃣ Jalankan Server
+
+Backend
+
+npm run start
+
+Frontend
+
+npm run dev
+
+4️⃣ Deploy Smart Contract
+
+cd smart-contracts
+npx hardhat run scripts/deploy.js --network testnet
+
+
+
+🔧 Cara Menjalankan Aplikasi
+
+1️⃣ Clone Repositori
+
+git clone https://github.com/username/chainesia.git
+cd chainesia
+
+2️⃣ Jalankan Backend
+
+cd backend
+npm run start
+
+3️⃣ Jalankan Frontend
+
+cd frontend
+npm run dev
+
+4️⃣ Deploy Smart Contract
+
+cd smart-contracts
+npx hardhat run scripts/deploy.js --network testnet
+
+
+---
+
+📖 Dokumentasi API
+
+Untuk detail lebih lanjut, lihat API_REFERENCE.md.
+
+
+---
+
+📦 Integrasi SDK Merchant
+
+Untuk integrasi pembayaran dengan e-commerce atau sistem POS, gunakan SDK CHAINESIA:
+
+import { createPayment } from "chainesia-sdk";
+
+const payment = await createPayment("MERCHANT_123", 100000, "idr");
+console.log(payment);
+
+Lihat panduan lengkap di SDK_INTEGRATION.md.
+
+
+---
+
+🔒 Keamanan
+
+✅ AES-256 – Semua data transaksi dienkripsi untuk mencegah kebocoran data.
+✅ Tanda Tangan Digital – Verifikasi transaksi menggunakan private key pengguna.
+✅ Smart Contract Escrow – Dana hanya akan dilepaskan ke merchant setelah transaksi selesai.
+
+
+---
+
+📌 Roadmap Pengembangan
+
+🔹 Tahap 1 – Pengembangan dompet digital & smart contract escrow ✅
+🔹 Tahap 2 – Integrasi dengan merchant, SDK Payment Gateway ✅
+🔹 Tahap 3 – Skalabilitas & ekspansi ke e-commerce nasional 🌍
+
+
+---
+
+👥 Kontribusi
+
+Kami terbuka untuk kontribusi! Ikuti langkah berikut:
+
+1. Fork repo ini
+
+
+2. Buat branch baru (feature-nama-fitur)
+
+
+3. Kirim pull request!
+
+
+
+
+---
+
+📧 Kontak & Support
+
+Jika ada pertanyaan atau ingin berkontribusi, hubungi:
+📩 Email: support@chainesia.com
+🌐 Website: chainesia.com
+
+
+---
+
+© 2025 CHAINESIA – Blockchain Payment for Indonesia 🚀
+
diff --git a/README.md (Dokumentasi & Petunjuk Integrasi) b/README.md (Dokumentasi & Petunjuk Integrasi)
new file mode 100644
index 0000000..34b9b3e
--- /dev/null
+++ b/README.md (Dokumentasi & Petunjuk Integrasi)
@@ -0,0 +1,75 @@
+# CHAINESIA Modular Integration
+
+Proyek ini menyediakan modul-modul yang dapat diintegrasikan ke dalam sistem Anda untuk mendapatkan fitur-fitur CHAINESIA, antara lain:
+
+- **Backend API Modul**
+ Berisi layanan untuk autentikasi, pembayaran, dan integrasi blockchain (menggunakan NestJS).
+ > Pastikan untuk mengonfigurasi file `.env` dengan variabel seperti `BLOCKCHAIN_RPC`, `PRIVATE_KEY`, `ENCRYPTION_KEY`, dan `ENCRYPTION_IV`.
+
+- **Smart Contract**
+ Terdiri dari kontrak `ChainesiaEscrow.sol` yang menyediakan fitur escrow untuk transaksi yang aman di blockchain.
+ > Gunakan Hardhat untuk menyusun dan mendistribusikan kontrak ke jaringan yang diinginkan.
+
+- **SDK Merchant**
+ Library JavaScript untuk membantu merchant mengintegrasikan sistem pembayaran CHAINESIA ke dalam aplikasi mereka.
+ > Sesuaikan `CHAINESIA_API_URL` dengan endpoint backend Anda.
+
+## Instalasi dan Penggunaan
+
+### Backend Modul
+1. Pindah ke folder `backend` dan instal dependensi:
+ ```bash
+ cd backend
+ npm install
+
+2. Sesuaikan file .env dengan konfigurasi Anda.
+
+
+3. Integrasikan modul ini ke dalam sistem back-end Anda (atau gunakan sebagai microservice).
+
+
+
+Smart Contracts
+
+1. Pindah ke folder smart-contracts dan instal dependensi:
+
+cd smart-contracts
+npm install
+
+
+2. Deploy kontrak menggunakan Hardhat:
+
+npx hardhat run scripts/deploy.js --network
+
+
+
+SDK Merchant
+
+1. Di dalam folder sdk, instal dependensi:
+
+cd sdk
+npm install
+
+
+2. Impor modul SDK ke dalam proyek front-end atau back-end merchant Anda:
+
+import { createPayment, checkPaymentStatus } from 'chainesia-sdk';
+
+
+
+
+---
+
+Catatan
+
+Proyek ini disusun secara modular sehingga Anda tidak diwajibkan untuk menjadikannya sebagai satu aplikasi utuh.
+
+Anda dapat mengintegrasikan modul-modul ini secara terpisah sesuai kebutuhan sistem Anda.
+
+Pastikan untuk melakukan pengujian dan penyesuaian konfigurasi agar modul dapat berjalan sesuai dengan lingkungan produksi atau pengembangan Anda.
+
+
+
+---
+
+© 2025 CHAINESIA – Solusi Pembayaran Digital Terintegrasi
diff --git a/SDK untuk Merchant b/SDK untuk Merchant
new file mode 100644
index 0000000..f0a0697
--- /dev/null
+++ b/SDK untuk Merchant
@@ -0,0 +1,19 @@
+// sdk/chainesia-sdk.js
+import axios from "axios";
+import { ethers } from "ethers";
+
+const API_URL = "https://api.chainesia.com";
+
+export async function createPayment(merchantId, amount, currency) {
+ const response = await axios.post(`${API_URL}/payments`, {
+ merchantId,
+ amount,
+ currency
+ });
+ return response.data;
+}
+
+export async function checkPaymentStatus(paymentId) {
+ const response = await axios.get(`${API_URL}/payments/${paymentId}`);
+ return response.data;
+}
diff --git a/Smart Contract Escrow untuk Pembayaran Aman b/Smart Contract Escrow untuk Pembayaran Aman
new file mode 100644
index 0000000..854763c
--- /dev/null
+++ b/Smart Contract Escrow untuk Pembayaran Aman
@@ -0,0 +1,49 @@
+// contracts/ChainesiaEscrow.sol
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.19;
+
+contract ChainesiaEscrow {
+ struct Payment {
+ address buyer;
+ address merchant;
+ uint256 amount;
+ bool completed;
+ }
+
+ mapping(uint256 => Payment) public payments;
+ uint256 public paymentCount;
+
+ event PaymentCreated(uint256 paymentId, address buyer, address merchant, uint256 amount);
+ event PaymentCompleted(uint256 paymentId);
+ event PaymentRefunded(uint256 paymentId);
+
+ function createPayment(address merchant) external payable {
+ require(msg.value > 0, "Payment must be greater than zero");
+
+ payments[paymentCount] = Payment(msg.sender, merchant, msg.value, false);
+ emit PaymentCreated(paymentCount, msg.sender, merchant, msg.value);
+
+ paymentCount++;
+ }
+
+ function completePayment(uint256 paymentId) external {
+ Payment storage payment = payments[paymentId];
+ require(msg.sender == payment.buyer, "Only buyer can confirm");
+ require(!payment.completed, "Already completed");
+
+ payable(payment.merchant).transfer(payment.amount);
+ payment.completed = true;
+
+ emit PaymentCompleted(paymentId);
+ }
+
+ function refundPayment(uint256 paymentId) external {
+ Payment storage payment = payments[paymentId];
+ require(!payment.completed, "Cannot refund completed payment");
+
+ payable(payment.buyer).transfer(payment.amount);
+ payment.completed = true;
+
+ emit PaymentRefunded(paymentId);
+ }
+}
diff --git a/Smart Contract untuk Konversi Otomatis (Solidity) b/Smart Contract untuk Konversi Otomatis (Solidity)
new file mode 100644
index 0000000..c13e99c
--- /dev/null
+++ b/Smart Contract untuk Konversi Otomatis (Solidity)
@@ -0,0 +1,27 @@
+// contracts/ChainesiaExchange.sol
+// SPDX-License-Identifier: MIT
+pragma solidity ^0.8.19;
+
+interface IPriceOracle {
+ function getRate(string memory from, string memory to) external view returns (uint256);
+}
+
+contract ChainesiaExchange {
+ IPriceOracle public priceOracle;
+
+ constructor(address _priceOracle) {
+ priceOracle = IPriceOracle(_priceOracle);
+ }
+
+ event Swap(address indexed user, string fromCurrency, string toCurrency, uint256 amount, uint256 convertedAmount);
+
+ function swap(string memory from, string memory to, uint256 amount) public payable {
+ uint256 rate = priceOracle.getRate(from, to);
+ require(rate > 0, "Harga tidak tersedia");
+
+ uint256 convertedAmount = amount * rate;
+ payable(msg.sender).transfer(convertedAmount);
+
+ emit Swap(msg.sender, from, to, amount, convertedAmount);
+ }
+}