From f6b5323846b1769682348c701725519049168f2c Mon Sep 17 00:00:00 2001 From: Pragati Date: Tue, 17 Mar 2026 16:53:29 +0530 Subject: [PATCH 1/5] refactor: route Djed tx builders through adapter layer --- djed-sdk/src/adapters/djedAdapter.js | 15 +++++++++++++++ djed-sdk/src/djed/djed.js | 15 ++++++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 djed-sdk/src/adapters/djedAdapter.js diff --git a/djed-sdk/src/adapters/djedAdapter.js b/djed-sdk/src/adapters/djedAdapter.js new file mode 100644 index 0000000..63c9926 --- /dev/null +++ b/djed-sdk/src/adapters/djedAdapter.js @@ -0,0 +1,15 @@ +import { FEE_UI_UNSCALED } from "../djed/tradeUtils"; + +export const createDjedAdapter = (djedContract) => { + if (!djedContract || !djedContract.methods) { + throw new Error("Djed contract instance is required"); + } + + return { + buyStableCoins: (receiver, UI) => + djedContract.methods.buyStableCoins(receiver, FEE_UI_UNSCALED, UI), + + sellStableCoins: (amount, account, UI) => + djedContract.methods.sellStableCoins(amount, account, FEE_UI_UNSCALED, UI), + }; +}; \ No newline at end of file diff --git a/djed-sdk/src/djed/djed.js b/djed-sdk/src/djed/djed.js index 443c313..7a6a9fc 100644 --- a/djed-sdk/src/djed/djed.js +++ b/djed-sdk/src/djed/djed.js @@ -1,6 +1,7 @@ import djedArtifact from "../artifacts/DjedABI.json"; import coinArtifact from "../artifacts/CoinABI.json"; -import { convertInt, web3Promise } from "../helpers"; +import { convertInt, web3Promise, buildTx } from "../helpers"; +import { createDjedAdapter } from "../adapters/djedAdapter"; //setting up djed export const getDjedContract = (web3, DJED_ADDRESS) => { @@ -27,3 +28,15 @@ export const getDecimals = async (stableCoin, reserveCoin) => { ]); return { scDecimals, rcDecimals }; }; + +const buyScTx = (djed, payer, receiver, value, UI, DJED_ADDRESS) => { + const adapter = createDjedAdapter(djed); + const data = adapter.buyStableCoins(receiver, UI).encodeABI(); + return buildTx(payer, DJED_ADDRESS, value, data); +}; + +const sellScTx = (djed, account, amount, UI, DJED_ADDRESS) => { + const adapter = createDjedAdapter(djed); + const data = adapter.sellStableCoins(amount, account, UI).encodeABI(); + return buildTx(account, DJED_ADDRESS, 0, data); +}; From cd23797aa939ed04911f45912a7bde75915f95d0 Mon Sep 17 00:00:00 2001 From: Pragati Date: Wed, 18 Mar 2026 11:49:29 +0530 Subject: [PATCH 2/5] refactor: improve djed adapter abstraction --- djed-sdk/src/adapters/djedAdapter.js | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/djed-sdk/src/adapters/djedAdapter.js b/djed-sdk/src/adapters/djedAdapter.js index 63c9926..6f2a206 100644 --- a/djed-sdk/src/adapters/djedAdapter.js +++ b/djed-sdk/src/adapters/djedAdapter.js @@ -1,15 +1,24 @@ import { FEE_UI_UNSCALED } from "../djed/tradeUtils"; export const createDjedAdapter = (djedContract) => { - if (!djedContract || !djedContract.methods) { - throw new Error("Djed contract instance is required"); + const methods = djedContract?.methods; + + // Fail fast if required methods are missing + if ( + !methods || + typeof methods.buyStableCoins !== "function" || + typeof methods.sellStableCoins !== "function" + ) { + throw new Error( + "Invalid Djed contract instance: missing required methods (buyStableCoins, sellStableCoins)" + ); } return { buyStableCoins: (receiver, UI) => - djedContract.methods.buyStableCoins(receiver, FEE_UI_UNSCALED, UI), + methods.buyStableCoins(receiver, FEE_UI_UNSCALED, UI), sellStableCoins: (amount, account, UI) => - djedContract.methods.sellStableCoins(amount, account, FEE_UI_UNSCALED, UI), + methods.sellStableCoins(amount, account, FEE_UI_UNSCALED, UI), }; }; \ No newline at end of file From ce1187dd12fd1f1c5a9e8289a573b148dee6c660 Mon Sep 17 00:00:00 2001 From: Pragati Date: Sun, 22 Mar 2026 21:30:06 +0530 Subject: [PATCH 3/5] feat(adapter): fail-fast validation for required Djed contract methods with clear error messages --- djed-sdk/src/adapters/djedAdapter.js | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/djed-sdk/src/adapters/djedAdapter.js b/djed-sdk/src/adapters/djedAdapter.js index 6f2a206..38b63e6 100644 --- a/djed-sdk/src/adapters/djedAdapter.js +++ b/djed-sdk/src/adapters/djedAdapter.js @@ -3,14 +3,23 @@ import { FEE_UI_UNSCALED } from "../djed/tradeUtils"; export const createDjedAdapter = (djedContract) => { const methods = djedContract?.methods; - // Fail fast if required methods are missing - if ( - !methods || - typeof methods.buyStableCoins !== "function" || - typeof methods.sellStableCoins !== "function" - ) { + const missingMethods = []; + + if (!methods) { + throw new Error("Invalid Djed contract instance: methods object is missing"); + } + + if (typeof methods.buyStableCoins !== "function") { + missingMethods.push("buyStableCoins"); + } + + if (typeof methods.sellStableCoins !== "function") { + missingMethods.push("sellStableCoins"); + } + + if (missingMethods.length > 0) { throw new Error( - "Invalid Djed contract instance: missing required methods (buyStableCoins, sellStableCoins)" + `Djed contract is missing required methods: ${missingMethods.join(", ")}` ); } From f24b61d8817a24bf50ce7916bcade63112fb0796 Mon Sep 17 00:00:00 2001 From: Pragati Date: Sun, 22 Mar 2026 21:32:37 +0530 Subject: [PATCH 4/5] chore: add .gitignore for local config files --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f223ef1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +djed-sdk/.npmrc +package-lock.json From 0108b79862043201c0e1045457f6d320474c8653 Mon Sep 17 00:00:00 2001 From: Pragati Date: Sun, 22 Mar 2026 21:42:29 +0530 Subject: [PATCH 5/5] refactor(adapter): optimize adapter usage and fix parameter naming - Avoid recreating adapter on each call - Rename UI to ui for consistency and clarity --- djed-sdk/src/adapters/djedAdapter.js | 8 ++++---- djed-sdk/src/djed/djed.js | 11 +++++------ 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/djed-sdk/src/adapters/djedAdapter.js b/djed-sdk/src/adapters/djedAdapter.js index 38b63e6..825a808 100644 --- a/djed-sdk/src/adapters/djedAdapter.js +++ b/djed-sdk/src/adapters/djedAdapter.js @@ -24,10 +24,10 @@ export const createDjedAdapter = (djedContract) => { } return { - buyStableCoins: (receiver, UI) => - methods.buyStableCoins(receiver, FEE_UI_UNSCALED, UI), + buyStableCoins: (receiver, ui) => + methods.buyStableCoins(receiver, FEE_UI_UNSCALED, ui), - sellStableCoins: (amount, account, UI) => - methods.sellStableCoins(amount, account, FEE_UI_UNSCALED, UI), + sellStableCoins: (amount, account, ui) => + methods.sellStableCoins(amount, account, FEE_UI_UNSCALED, ui), }; }; \ No newline at end of file diff --git a/djed-sdk/src/djed/djed.js b/djed-sdk/src/djed/djed.js index 7a6a9fc..4842436 100644 --- a/djed-sdk/src/djed/djed.js +++ b/djed-sdk/src/djed/djed.js @@ -29,14 +29,13 @@ export const getDecimals = async (stableCoin, reserveCoin) => { return { scDecimals, rcDecimals }; }; -const buyScTx = (djed, payer, receiver, value, UI, DJED_ADDRESS) => { - const adapter = createDjedAdapter(djed); - const data = adapter.buyStableCoins(receiver, UI).encodeABI(); +// Adapter should be created once and passed in (dependency injection) +const buyScTx = (adapter, payer, receiver, value, ui, DJED_ADDRESS) => { + const data = adapter.buyStableCoins(receiver, ui).encodeABI(); return buildTx(payer, DJED_ADDRESS, value, data); }; -const sellScTx = (djed, account, amount, UI, DJED_ADDRESS) => { - const adapter = createDjedAdapter(djed); - const data = adapter.sellStableCoins(amount, account, UI).encodeABI(); +const sellScTx = (adapter, account, amount, ui, DJED_ADDRESS) => { + const data = adapter.sellStableCoins(amount, account, ui).encodeABI(); return buildTx(account, DJED_ADDRESS, 0, data); };