Skip to main content

Web3 provider — window.ombra

OmbraChain are o extensie Chrome / Edge (similar MetaMask) care injectează window.ombra în orice pagină web, permițând dApp-urilor să interacționeze cu wallet-ul user-ului.

Detectare

if (typeof window.ombra === "undefined") {
alert("Te rog instalează Ombra Wallet extension");
return;
}
const provider = window.ombra;

API style

Similar EIP-1193 (Ethereum) — toate metodele prin provider.request({ method, params }).

const result = await window.ombra.request({
method: "ombra_address",
params: {}
});
// → "5bb5c50f185363cf913f93a18c6837c20d720a69"

Metode disponibile

ombra_chainId

Returnează ID-ul chain-ului ("mainnet" sau "testnet").

const chainId = await window.ombra.request({ method: "ombra_chainId" });
// → "mainnet"

ombra_address

Adresa wallet-ului activ.

const addr = await window.ombra.request({ method: "ombra_address" });
// → "5bb5c50f185363cf913f93a18c6837c20d720a69"

ombra_balance

Balance în micro-OMBRA (string pentru BigInt safety).

const balance = await window.ombra.request({ method: "ombra_balance" });
// → "1500000000" (= 1500 OMBRA)

ombra_publicKey

Cheia publică Ed25519 hex.

const pubkey = await window.ombra.request({ method: "ombra_publicKey" });
// → "1a2b3c..." (64 hex chars)

ombra_signTransfer

Semnează tx fără broadcast (returnează raw signed tx).

const signed = await window.ombra.request({
method: "ombra_signTransfer",
params: { to: "abc...", amount: "1000000", fee: "10000" }
});
// → { tx: {...}, signature: "..." }

ombra_submitTransfer

Semnează ȘI broadcast la mainnet (one-shot).

const { txHash } = await window.ombra.request({
method: "ombra_submitTransfer",
params: { to: "abc...", amount: "1000000", fee: "10000" }
});
// → { txHash: "def..." }

ombra_submitTask

Submitează task AI on-chain (pentru dApp care vor să folosească compute miners).

const { taskId } = await window.ombra.request({
method: "ombra_submitTask",
params: {
prompt: "Explică PoATU în 100 cuvinte",
taskType: "chat", // chat | code | analysis
fee: "500000", // micro-OMBRA (0.5 OMBRA min)
maxTokens: 1000
}
});
// → { taskId: "..." }
// Poll cu ombra_getTask pentru rezultat

ombra_getTask

Status + rezultat al unui task.

const task = await window.ombra.request({
method: "ombra_getTask",
params: { taskId: "..." }
});
// → { status: "completed", result: "...", tokensOut: 856, ... }

ombra_connect

Cere permisiune user-ului să conecteze wallet-ul la dApp-ul tău.

const { accounts } = await window.ombra.request({ method: "ombra_connect" });
// → { accounts: ["5bb..."] } sau throw dacă user respinge

Events

window.ombra.on("accountsChanged", (accounts) => {
console.log("Wallet schimbat:", accounts[0]);
});

window.ombra.on("chainChanged", (chainId) => {
console.log("Chain schimbat:", chainId);
window.location.reload();
});

window.ombra.on("connect", () => console.log("Conectat"));
window.ombra.on("disconnect", () => console.log("Deconectat"));

Securitate

  • Extensia NU expune cheia privată dApp-urilor — toate semnăturile sunt în extension popup
  • User trebuie să confirme manual fiecare tx în popup
  • DApp-ul vede DOAR adresa publică + balance
  • Permisiunea connect poate fi revocată din extension settings

Exemplu complet — buton "Send tip"

<button id="tip">Send 1 OMBRA tip</button>
<script>
document.getElementById("tip").onclick = async () => {
if (!window.ombra) return alert("Install Ombra Wallet ext.");

await window.ombra.request({ method: "ombra_connect" });

const { txHash } = await window.ombra.request({
method: "ombra_submitTransfer",
params: { to: "5bb5c50f185363cf913f93a18c6837c20d720a69", amount: "1000000", fee: "10000" }
});

alert(`Tip trimis! TX: ${txHash}`);
};
</script>

Vezi și