mirror of
https://github.com/stjet/bns.git
synced 2025-12-29 03:09:24 +00:00
browser_test -> wallet
This commit is contained in:
File diff suppressed because one or more lines are too long
@@ -1,344 +1,11 @@
|
||||
<!doctype html>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>BNS demo</title>
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
||||
<script src="../bns-browser.js"></script>
|
||||
<style>
|
||||
#main {
|
||||
grid-template-columns: auto auto;
|
||||
}
|
||||
#main div {
|
||||
max-width: 50vw;
|
||||
}
|
||||
.danger {
|
||||
color: red;
|
||||
}
|
||||
@media only screen and (max-width: 900px) {
|
||||
#main {
|
||||
grid-template-columns: auto;
|
||||
}
|
||||
#main div {
|
||||
max-width: 100vw;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<title>BNS demo redirect</title>
|
||||
<meta http-equiv="refresh" content="0; url=/wallet" />
|
||||
</head>
|
||||
<body>
|
||||
<a id="address" target="_blank"></a>
|
||||
<div id="start">
|
||||
<p>Click 'Create TLD Account' if you want to issue domain names, and click 'Create Domain Account' if you want to own a domain.</p>
|
||||
<button onclick="create('tld')">Create TLD Account</button>
|
||||
<button onclick="create('domain')">Create Domain Account</button>
|
||||
<p>Enter an existing seed here (accepts both BNS Seed Format and regular seeds):</p>
|
||||
<input id="alt-seed" type="text" placeholder="Then click the button above"/>
|
||||
<br><br>
|
||||
<h2>Quick Guide</h2>
|
||||
<ol>
|
||||
<li>Open this site in a second tab</li>
|
||||
<li>In this tab (Domain tab), click "Create Domain Account". Note down the seed and address</li>
|
||||
<li>In the second tab (TLD tab), click "Create TLD Account". Note down the seed and address.</li>
|
||||
<li>Send a Banano to your TLD Account's address</li>
|
||||
<li>On TLD tab, click "Receive"</li>
|
||||
<li>On TLD tab, fill in the "Name (no '.', '"', max 32 chars [32 bytes]):" field with "helloworld", fill in the Domain tab's address in the "Send to address:" field and click "Issue domain"</li>
|
||||
<li>Wait until it sends, and open the block explorer link in a new tab, noting the block hash</li>
|
||||
<li>Back to the Domain tab, fill in that block hash into the "Block hash of Domain Transfer:" input</li>
|
||||
<li>Then, in the right hand "Domain Resolver" panel add the TLD tab's address to the "TLD Mapping". Call it "demo"</li>
|
||||
<li>In "TLD name (no dot):", write "demo" and then click "Detect held domain name"</li>
|
||||
<li>It should now say "Name: helloworld" right below "Domain Account Manager". Congratulations! You own a Banano domain name now</li>
|
||||
<li>Fill in your actual main Banano address in "Resolve to address:", and click "Declare address to resolve to", and anyone using your TLD can now turn "helloworld.demo" (or whatever they name your TLD) into your address</li>
|
||||
</ol>
|
||||
<p>Special thanks to airtune and yusuf. <a href="https://github.com/stjet/bns/blob/master/bns_protocol.md">Protocol Specification</a></p>
|
||||
</div>
|
||||
<div id="start-2" style="display: none;">
|
||||
<p><span id="seed-display"></span> (in BNS Seed Format)</p>
|
||||
<button onclick="seed_proceed()">I have saved the seed (or haven't and don't care if I lose it)</button>
|
||||
</div>
|
||||
<div id="main" style="display: none;">
|
||||
<div id="tld">
|
||||
<h2>TLD Account Manager</h2>
|
||||
<p>Add this address to the mapping (right panel) with whatever name you want. <b>Before issuing, make sure to CHECK what domain names you have already issued (right panel).</b> If you try to issue a domain name you have already issued, it will not work!!! <small>Or, it should not. Please report if it does; that is a bug.</small></p>
|
||||
<p>Oh, also, obviously <b>make sure you've sent some Banano to the address (and clicked the receive button below).</b></p>
|
||||
<button onclick="tld_account.receive()">Receive</button>
|
||||
<br>
|
||||
<label for="issue-name">Name (no '.', '"', max 32 chars [32 bytes]):</label>
|
||||
<input id="issue-name" type="text" maxlength="32"/>
|
||||
<br>
|
||||
<label for="issue-to">Send to address:</label>
|
||||
<input id="issue-to" placeholder="ban_abc..." type="text"/>
|
||||
<br>
|
||||
<button onclick="issue()">Issue domain</button>
|
||||
<a id="issue-link"></a>
|
||||
<br><br>
|
||||
<button class="danger" onclick="freeze(true)">Freeze TLD</button>
|
||||
</div>
|
||||
<div id="domain">
|
||||
<h2>Domain Account Manager</h2>
|
||||
<div id="domain-start">
|
||||
<label for="rc-d">Block hash of Domain Transfer:</label>
|
||||
<input id="rc-d" type="text"/>
|
||||
<br>
|
||||
<button onclick="domain_account.receive_domain(d.g('rc-d').value)">Receive domain</button>
|
||||
<br>
|
||||
<label for="rc-tld">TLD name (no dot):</label>
|
||||
<input id="rc-tld" type="text"/>
|
||||
<br>
|
||||
<button onclick="get_domain_account_domain()">Detect held domain name</button>
|
||||
</div>
|
||||
<div id="domain-actions" style="display: none;">
|
||||
<p>
|
||||
Name: <span id="found-name"></span>
|
||||
<br>
|
||||
Resolves to address: <span id="found-address"></span>
|
||||
<br>
|
||||
Metadata hash: <span id="found-metadata"></span>
|
||||
</p>
|
||||
<label for="d-mh">IPFS Cid v0:</label>
|
||||
<input id="d-mh" type="text"/>
|
||||
<br>
|
||||
<button onclick="declare_metadata_hash()">Declare metadata hash</button>
|
||||
<br>
|
||||
<label for="d-a">Resolve to address:</label>
|
||||
<input id="d-a" type="text"/>
|
||||
<br>
|
||||
<button onclick="domain_account.declare_domain_resolve_to(d.g('d-a').value)">Declare address to resolved to</button>
|
||||
<br>
|
||||
<label for="transfer-to">Transfer domain to:</label>
|
||||
<input id="transfer-to" placeholder="ban_abc..." type="text"/>
|
||||
<br>
|
||||
<button onclick="transfer()">Transfer domain</button>
|
||||
<a id="transfer-link"></a>
|
||||
<br><br>
|
||||
<button class="danger" onclick="freeze(false)">Freeze domain</button>
|
||||
</div>
|
||||
</div>
|
||||
<div id="resolver">
|
||||
<h2>Domain Resolver</h2>
|
||||
<label for="resolve">Name:</label>
|
||||
<input id="resolve" type="text" placeholder="nishina247.mictest"/>
|
||||
<br>
|
||||
<button onclick="resolve()">Resolve domain</button>
|
||||
<br>
|
||||
<div>
|
||||
<span>Domain name: <span id="r-name"></span></span>
|
||||
<br>
|
||||
<span>TLD: <span id="r-tld"></span></span>
|
||||
<br>
|
||||
<span>Burned: <span id="r-burned"></span></span>
|
||||
<br>
|
||||
<span>Resolved Address: <span id="r-addr"></span></span>
|
||||
<br>
|
||||
<span>Metadata Hash: <span id="r-meta"></span></span>
|
||||
<br>
|
||||
<span>History:</span>
|
||||
<br>
|
||||
<textarea id="r-hist" disabled></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<h3>TLD Mapping</h3>
|
||||
<ul id="tld-mapping">
|
||||
</ul>
|
||||
<label for="add-tld">TLD Name (no dot):</label>
|
||||
<input id="add-tld" type="text" placeholder="example"/>
|
||||
<br>
|
||||
<label for="tld-addr">TLD Address:</label>
|
||||
<input id="tld-addr" type="text" placeholder="ban_abcd..."/>
|
||||
<br>
|
||||
<button onclick="add_tld()">Add TLD to mapping</button> <!--no type="button" today-->
|
||||
<br><br>
|
||||
<label for="rem-tld">TLD Name (no dot):</label>
|
||||
<input id="rem-tld" type="text" placeholder="example"/>
|
||||
<br>
|
||||
<button onclick="rem_tld()">Remove TLD from mapping</button>
|
||||
</div>
|
||||
<div>
|
||||
<h3>Issued by TLD</h3>
|
||||
<label for="issue-tld">TLD Name (no dot):</label>
|
||||
<input id="issue-tld" type="text" placeholder="test"/>
|
||||
<br>
|
||||
<button onclick="all_issued()">Find all issued by TLD</button>
|
||||
<ul id="all-issued">
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
//I don't like how const works in js. I wish it prevented property mutation
|
||||
let d = document;
|
||||
d.g = d.getElementById; //I am lazy and this is a demo
|
||||
const bns = window.bns;
|
||||
|
||||
const rpc = new bns.banani.RPC("https://kaliumapi.appditto.com/api"); //for sending cause it does work
|
||||
//const rpc2 = new bns.banani.RPC("https://api.banano.trade/proxy", true); //for resolver cause it supports raw account history
|
||||
//const rpc2 = new bns.banani.RPC("https://booster.dev-ptera.com/banano-rpc"); //for resolver cause it supports raw account history
|
||||
const rpc2 = rpc;
|
||||
|
||||
let wallet = bns.banani.Wallet.gen_random_wallet(rpc);
|
||||
|
||||
let mode = false; //true if tld mode
|
||||
let tld_account;
|
||||
let domain_account;
|
||||
let domain_account_domain;
|
||||
|
||||
let tld_mapping = {
|
||||
"test": "ban_3634i9z9m5zj9tmjj4rsn9dtzed1oce3wtphr75o3jsq45739cgwr33kemb7",
|
||||
"mictest": "ban_1dzpfrgi8t4byzmdeidh57p14h5jwbursf1t3ztbmeqnqqdcbpgp9x8j3cw6",
|
||||
"jtv": "ban_3gipeswotbnyemcc1dejyhy5a1zfgj35kw356dommbx4rdochiteajcsay56",
|
||||
"ban": "ban_1fdo6b4bqm6pp1w55duuqw5ebz455975o4qcp8of85fjcdw9qhuzxsd3tjb9",
|
||||
//
|
||||
};
|
||||
|
||||
function gen_tld_mapping_list() {
|
||||
let ul = d.g("tld-mapping");
|
||||
ul.innerHTML = "";
|
||||
for (const tld of Object.keys(tld_mapping)) {
|
||||
let li = d.createElement("LI");
|
||||
li.textContent = `.${tld}: ${tld_mapping[tld]}`;
|
||||
ul.appendChild(li);
|
||||
}
|
||||
}
|
||||
|
||||
gen_tld_mapping_list();
|
||||
|
||||
function create(type) {
|
||||
const alt_seed = d.g("alt-seed").value;
|
||||
if (alt_seed) {
|
||||
if (bns.is_bns_seed_format(alt_seed)) {
|
||||
wallet = new bns.banani.Wallet(rpc, bns.bns_seed_format_to_hex(alt_seed));
|
||||
} else {
|
||||
wallet = new bns.banani.Wallet(rpc, alt_seed);
|
||||
}
|
||||
}
|
||||
d.g("seed-display").textContent = bns.hex_to_bns_seed_format(wallet.seed);
|
||||
if (type === "tld") {
|
||||
document.title = "TLD Account - BNS demo";
|
||||
tld_account = new bns.TLDAccountManager(rpc, wallet);
|
||||
mode = true;
|
||||
d.g("domain").style.display = "none";
|
||||
} else {
|
||||
document.title = "Domain Account - BNS demo";
|
||||
domain_account = new bns.DomainAccountManager(rpc, wallet);
|
||||
d.g("tld").style.display = "none";
|
||||
}
|
||||
d.g("start").style.display = "none";
|
||||
d.g("start-2").style.display = "block";
|
||||
d.g("address").textContent = wallet.address;
|
||||
d.g("address").href = `https://creeper.banano.cc/account/${d.g("address").textContent}`;
|
||||
}
|
||||
|
||||
function add_tld() {
|
||||
let at = d.g("add-tld");
|
||||
let ta = d.g("tld-addr");
|
||||
const tv = ta.value.trim();
|
||||
if (!at.value || !tv || !tv.startsWith("ban_") || tv.length !== 64) return;
|
||||
tld_mapping[at.value] = tv;
|
||||
at.value = "";
|
||||
ta.value = "";
|
||||
gen_tld_mapping_list();
|
||||
}
|
||||
|
||||
function rem_tld() {
|
||||
let rt = d.g("rem-tld");
|
||||
delete tld_mapping[rt.value];
|
||||
rt.value = "";
|
||||
gen_tld_mapping_list();
|
||||
}
|
||||
|
||||
function get_cid_v0_from_public_key(public_key) {
|
||||
return bns.address_to_cid_v0(bns.banani.get_address_from_public_key(public_key));
|
||||
}
|
||||
|
||||
async function resolve() {
|
||||
let parts = d.g("resolve").value.split(".");
|
||||
if (parts.length !== 2) return;
|
||||
const name = parts[0];
|
||||
const tld = parts[1];
|
||||
if (!tld_mapping[tld]) return;
|
||||
const resolver = new bns.Resolver(rpc2, tld_mapping);
|
||||
const resolved = await resolver.resolve(name, tld);
|
||||
d.g("r-name").textContent = resolved.name;
|
||||
console.log(resolved.tld)
|
||||
d.g("r-tld").textContent = `${resolved.tld} (.${tld})`;
|
||||
d.g("r-burned").textContent = resolved.burned;
|
||||
d.g("r-addr").textContent = resolved.resolved_address;
|
||||
const cid_v0 = resolved.metadata_hash ? get_cid_v0_from_public_key(resolved.metadata_hash) : "none";
|
||||
d.g("r-meta").innerHTML = `${resolved.metadata_hash} (IPFS translation: <a href="https://ipfs.oversas.org/ipfs/${cid_v0}" target="_blank">${cid_v0}</a>)`;
|
||||
d.g("r-hist").value = JSON.stringify(resolved.history, null, 2);
|
||||
}
|
||||
|
||||
async function all_issued() {
|
||||
let ul = d.g("all-issued");
|
||||
ul.innerHTML = "";
|
||||
const n = d.g("issue-tld").value;
|
||||
if (!tld_mapping[n]) return;
|
||||
const all = await (new bns.TLDAccount(rpc2, tld_mapping[n])).get_all_issued();
|
||||
for (const domain of all) {
|
||||
let li = d.createElement("LI");
|
||||
let a = d.createElement("A");
|
||||
a.href = `https://creeper.banano.cc/hash/${domain.history[0].block.hash}`;
|
||||
a.textContent = domain.name;
|
||||
li.appendChild(a);
|
||||
ul.appendChild(li);
|
||||
}
|
||||
}
|
||||
|
||||
async function issue() {
|
||||
const issue_hash = await tld_account.issue_domain_name(d.g("issue-name").value.trim(), d.g("issue-to").value.trim());
|
||||
d.g("issue-link").textContent = "Issued! See explorer.";
|
||||
d.g("issue-link").href = `https://creeper.banano.cc/hash/${issue_hash}`;
|
||||
}
|
||||
|
||||
async function get_domain_account_domain() {
|
||||
const resolver = new bns.Resolver(rpc2, tld_mapping);
|
||||
domain_account_domain = await resolver.resolve_backwards_ish(wallet.address, d.g("rc-tld").value);
|
||||
let frozen = false;
|
||||
if (domain_account_domain.history[domain_account_domain.history.length - 1].type === "freeze") {
|
||||
alert("This domain is frozen! That means you can't do anything with it.");
|
||||
frozen = true;
|
||||
}
|
||||
const { name, resolved_address, metadata_hash } = domain_account_domain;
|
||||
console.log(domain_account_domain);
|
||||
d.g("found-name").textContent = name;
|
||||
if (frozen) d.g("found-name").classList.add("danger");
|
||||
d.g("found-address").textContent = resolved_address;
|
||||
const cid_v0 = metadata_hash ? get_cid_v0_from_public_key(metadata_hash) : "none";
|
||||
d.g("found-metadata").innerHTML = `${metadata_hash} (IPFS translation: <a href="https://ipfs.oversas.org/ipfs/${cid_v0}" target="_blank">${cid_v0}</a>)`;
|
||||
d.g("domain-start").style.display = "none";
|
||||
d.g("domain-actions").style.display = "block";
|
||||
}
|
||||
|
||||
async function declare_metadata_hash() {
|
||||
const cid_v0 = d.g('d-mh').value.trim();
|
||||
const cid_address = bns.cid_v0_to_address(cid_v0);
|
||||
console.log(cid_v0, cid_address);
|
||||
console.log(bns.address_to_cid_v0(cid_address))
|
||||
const metadata_hash = bns.banani.get_public_key_from_address(cid_address);
|
||||
await domain_account.declare_domain_metadata(metadata_hash);
|
||||
}
|
||||
|
||||
async function transfer() {
|
||||
if (!domain_account_domain) return;
|
||||
console.log(domain_account_domain.name, d.g("transfer-to").value.trim())
|
||||
const transfer_hash = await domain_account.transfer_domain(domain_account_domain.name, d.g("transfer-to").value.trim());
|
||||
d.g("transfer-link").textContent = "Transferred! See explorer.";
|
||||
d.g("transfer-link").href = `https://creeper.banano.cc/hash/${transfer_hash}`;
|
||||
}
|
||||
|
||||
async function freeze(is_tld) {
|
||||
if (await prompt(`Are you sure you want to freeze the ${ is_tld ? "TLD" : "domain" }? This will mean you can no longer transfer it, change the resolved address, or the metadata hash. Respond 'I am super sure' to proceed.`).trim() === "I am super sure") {
|
||||
is_tld ? await tld_account.freeze() : await domain_account.freeze();
|
||||
alert(`The ${ is_tld ? "TLD" : "domain" } should now be frozen`);
|
||||
}
|
||||
}
|
||||
|
||||
function seed_proceed() {
|
||||
d.g("start-2").style.display = "none";
|
||||
d.g("main").style.display = "grid";
|
||||
}
|
||||
|
||||
//
|
||||
</script>
|
||||
<a href="/wallet">Click here if not redirected</a>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,2 +1,2 @@
|
||||
<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>address_to_cid_v0 | bns</title><meta name="description" content="Documentation for bns"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget tsd-toolbar-icon search no-caption"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><use href="../assets/icons.svg#icon-search"></use></svg></label><input type="text" id="tsd-search-field" aria-label="Search"/></div><div class="field"><div id="tsd-toolbar-links"></div></div><ul class="results"><li class="state loading">Preparing search index...</li><li class="state failure">The search index is not available</li></ul><a href="../index.html" class="title">bns</a></div><div class="table-cell" id="tsd-widgets"><a href="#" class="tsd-widget tsd-toolbar-icon menu no-caption" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb"><li><a href="../modules.html">bns</a></li><li><a href="address_to_cid_v0.html">address_to_cid_v0</a></li></ul><h1>Function address_to_cid_v0</h1></div><section class="tsd-panel"><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="address_to_cid_v0" class="tsd-anchor"></a><span class="tsd-kind-call-signature">address_<wbr/>to_<wbr/>cid_<wbr/>v0</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">address</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><span class="tsd-signature-type">string</span><a href="#address_to_cid_v0" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></li><li class="tsd-description"><div class="tsd-comment tsd-typography"><p>Banano address to IPFS CID v0</p>
|
||||
</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">address</span>: <span class="tsd-signature-symbol">`</span><span class="tsd-signature-type">ban_</span><span class="tsd-signature-symbol">${</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">`</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-symbol">`</span><span class="tsd-signature-type">nano_</span><span class="tsd-signature-symbol">${</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">`</span></span></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">string</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/stjet/bns/blob/327a80c8c8cf356965f8f9d5d9286864d2ebbd2f/util.ts#L80">util.ts:80</a></li></ul></aside></li></ul></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-index-accordion"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><h4 class="uppercase">Member Visibility</h4><form><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-private" name="private"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Private</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></form></div><div class="tsd-theme-toggle"><h4 class="uppercase">Theme</h4><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-1"></use></svg><span>bns</span></a><ul class="tsd-small-nested-navigation" id="tsd-nav-container" data-base=".."><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>
|
||||
</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">address</span>: <span class="tsd-signature-symbol">`</span><span class="tsd-signature-type">ban_</span><span class="tsd-signature-symbol">${</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">`</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-symbol">`</span><span class="tsd-signature-type">nano_</span><span class="tsd-signature-symbol">${</span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">}</span><span class="tsd-signature-symbol">`</span></span></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">string</span></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/stjet/bns/blob/0c806142b0cb4b0dd746d8088af9b2fba0aed2a9/util.ts#L80">util.ts:80</a></li></ul></aside></li></ul></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-index-accordion"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><h4 class="uppercase">Member Visibility</h4><form><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-private" name="private"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Private</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></form></div><div class="tsd-theme-toggle"><h4 class="uppercase">Theme</h4><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-1"></use></svg><span>bns</span></a><ul class="tsd-small-nested-navigation" id="tsd-nav-container" data-base=".."><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,2 +1,2 @@
|
||||
<!DOCTYPE html><html class="default" lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>cid_v0_to_address | bns</title><meta name="description" content="Documentation for bns"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><div class="table-cell" id="tsd-search" data-base=".."><div class="field"><label for="tsd-search-field" class="tsd-widget tsd-toolbar-icon search no-caption"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><use href="../assets/icons.svg#icon-search"></use></svg></label><input type="text" id="tsd-search-field" aria-label="Search"/></div><div class="field"><div id="tsd-toolbar-links"></div></div><ul class="results"><li class="state loading">Preparing search index...</li><li class="state failure">The search index is not available</li></ul><a href="../index.html" class="title">bns</a></div><div class="table-cell" id="tsd-widgets"><a href="#" class="tsd-widget tsd-toolbar-icon menu no-caption" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb"><li><a href="../modules.html">bns</a></li><li><a href="cid_v0_to_address.html">cid_v0_to_address</a></li></ul><h1>Function cid_v0_to_address</h1></div><section class="tsd-panel"><ul class="tsd-signatures"><li class="tsd-signature tsd-anchor-link"><a id="cid_v0_to_address" class="tsd-anchor"></a><span class="tsd-kind-call-signature">cid_<wbr/>v0_<wbr/>to_<wbr/>address</span><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">cid_v0</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">: </span><a href="../types/banani.Address.html" class="tsd-signature-type tsd-kind-type-alias">Address</a><a href="#cid_v0_to_address" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></li><li class="tsd-description"><div class="tsd-comment tsd-typography"><p>IPFS CID v0 to Banano address</p>
|
||||
</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">cid_v0</span>: <span class="tsd-signature-type">string</span></span></li></ul></div><h4 class="tsd-returns-title">Returns <a href="../types/banani.Address.html" class="tsd-signature-type tsd-kind-type-alias">Address</a></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/stjet/bns/blob/327a80c8c8cf356965f8f9d5d9286864d2ebbd2f/util.ts#L75">util.ts:75</a></li></ul></aside></li></ul></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-index-accordion"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><h4 class="uppercase">Member Visibility</h4><form><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-private" name="private"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Private</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></form></div><div class="tsd-theme-toggle"><h4 class="uppercase">Theme</h4><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-1"></use></svg><span>bns</span></a><ul class="tsd-small-nested-navigation" id="tsd-nav-container" data-base=".."><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>
|
||||
</div><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">cid_v0</span>: <span class="tsd-signature-type">string</span></span></li></ul></div><h4 class="tsd-returns-title">Returns <a href="../types/banani.Address.html" class="tsd-signature-type tsd-kind-type-alias">Address</a></h4><div class="tsd-comment tsd-typography"></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/stjet/bns/blob/0c806142b0cb4b0dd746d8088af9b2fba0aed2a9/util.ts#L75">util.ts:75</a></li></ul></aside></li></ul></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-index-accordion"><summary class="tsd-accordion-summary"><h3><svg width="20" height="20" viewBox="0 0 24 24" fill="none"><use href="../assets/icons.svg#icon-chevronDown"></use></svg>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><h4 class="uppercase">Member Visibility</h4><form><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-private" name="private"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Private</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></form></div><div class="tsd-theme-toggle"><h4 class="uppercase">Theme</h4><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html"><svg class="tsd-kind-icon" viewBox="0 0 24 24"><use href="../assets/icons.svg#icon-1"></use></svg><span>bns</span></a><ul class="tsd-small-nested-navigation" id="tsd-nav-container" data-base=".."><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
344
docs/wallet/index.html
Normal file
344
docs/wallet/index.html
Normal file
@@ -0,0 +1,344 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>BNS demo</title>
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
||||
<script src="../bns-browser.js"></script>
|
||||
<style>
|
||||
#main {
|
||||
grid-template-columns: auto auto;
|
||||
}
|
||||
#main div {
|
||||
max-width: 50vw;
|
||||
}
|
||||
.danger {
|
||||
color: red;
|
||||
}
|
||||
@media only screen and (max-width: 900px) {
|
||||
#main {
|
||||
grid-template-columns: auto;
|
||||
}
|
||||
#main div {
|
||||
max-width: 100vw;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<a id="address" target="_blank"></a>
|
||||
<div id="start">
|
||||
<p>Click 'Create TLD Account' if you want to issue domain names, and click 'Create Domain Account' if you want to own a domain.</p>
|
||||
<button onclick="create('tld')">Create TLD Account</button>
|
||||
<button onclick="create('domain')">Create Domain Account</button>
|
||||
<p>Enter an existing seed here (accepts both BNS Seed Format and regular seeds):</p>
|
||||
<input id="alt-seed" type="text" placeholder="Then click the button above"/>
|
||||
<br><br>
|
||||
<h2>Quick Guide</h2>
|
||||
<ol>
|
||||
<li>Open this site in a second tab</li>
|
||||
<li>In this tab (Domain tab), click "Create Domain Account". Note down the seed and address</li>
|
||||
<li>In the second tab (TLD tab), click "Create TLD Account". Note down the seed and address.</li>
|
||||
<li>Send a Banano to your TLD Account's address</li>
|
||||
<li>On TLD tab, click "Receive"</li>
|
||||
<li>On TLD tab, fill in the "Name (no '.', '"', max 32 chars [32 bytes]):" field with "helloworld", fill in the Domain tab's address in the "Send to address:" field and click "Issue domain"</li>
|
||||
<li>Wait until it sends, and open the block explorer link in a new tab, noting the block hash</li>
|
||||
<li>Back to the Domain tab, fill in that block hash into the "Block hash of Domain Transfer:" input</li>
|
||||
<li>Then, in the right hand "Domain Resolver" panel add the TLD tab's address to the "TLD Mapping". Call it "demo"</li>
|
||||
<li>In "TLD name (no dot):", write "demo" and then click "Detect held domain name"</li>
|
||||
<li>It should now say "Name: helloworld" right below "Domain Account Manager". Congratulations! You own a Banano domain name now</li>
|
||||
<li>Fill in your actual main Banano address in "Resolve to address:", and click "Declare address to resolve to", and anyone using your TLD can now turn "helloworld.demo" (or whatever they name your TLD) into your address</li>
|
||||
</ol>
|
||||
<p>Special thanks to airtune and yusuf. <a href="https://github.com/stjet/bns/blob/master/bns_protocol.md">Protocol Specification</a></p>
|
||||
</div>
|
||||
<div id="start-2" style="display: none;">
|
||||
<p><span id="seed-display"></span> (in BNS Seed Format)</p>
|
||||
<button onclick="seed_proceed()">I have saved the seed (or haven't and don't care if I lose it)</button>
|
||||
</div>
|
||||
<div id="main" style="display: none;">
|
||||
<div id="tld">
|
||||
<h2>TLD Account Manager</h2>
|
||||
<p>Add this address to the mapping (right panel) with whatever name you want. <b>Before issuing, make sure to CHECK what domain names you have already issued (right panel).</b> If you try to issue a domain name you have already issued, it will not work!!! <small>Or, it should not. Please report if it does; that is a bug.</small></p>
|
||||
<p>Oh, also, obviously <b>make sure you've sent some Banano to the address (and clicked the receive button below).</b></p>
|
||||
<button onclick="tld_account.receive()">Receive</button>
|
||||
<br>
|
||||
<label for="issue-name">Name (no '.', '"', max 32 chars [32 bytes]):</label>
|
||||
<input id="issue-name" type="text" maxlength="32"/>
|
||||
<br>
|
||||
<label for="issue-to">Send to address:</label>
|
||||
<input id="issue-to" placeholder="ban_abc..." type="text"/>
|
||||
<br>
|
||||
<button onclick="issue()">Issue domain</button>
|
||||
<a id="issue-link"></a>
|
||||
<br><br>
|
||||
<button class="danger" onclick="freeze(true)">Freeze TLD</button>
|
||||
</div>
|
||||
<div id="domain">
|
||||
<h2>Domain Account Manager</h2>
|
||||
<div id="domain-start">
|
||||
<label for="rc-d">Block hash of Domain Transfer:</label>
|
||||
<input id="rc-d" type="text"/>
|
||||
<br>
|
||||
<button onclick="domain_account.receive_domain(d.g('rc-d').value)">Receive domain</button>
|
||||
<br>
|
||||
<label for="rc-tld">TLD name (no dot):</label>
|
||||
<input id="rc-tld" type="text"/>
|
||||
<br>
|
||||
<button onclick="get_domain_account_domain()">Detect held domain name</button>
|
||||
</div>
|
||||
<div id="domain-actions" style="display: none;">
|
||||
<p>
|
||||
Name: <span id="found-name"></span>
|
||||
<br>
|
||||
Resolves to address: <span id="found-address"></span>
|
||||
<br>
|
||||
Metadata hash: <span id="found-metadata"></span>
|
||||
</p>
|
||||
<label for="d-mh">IPFS Cid v0:</label>
|
||||
<input id="d-mh" type="text"/>
|
||||
<br>
|
||||
<button onclick="declare_metadata_hash()">Declare metadata hash</button>
|
||||
<br>
|
||||
<label for="d-a">Resolve to address:</label>
|
||||
<input id="d-a" type="text"/>
|
||||
<br>
|
||||
<button onclick="domain_account.declare_domain_resolve_to(d.g('d-a').value)">Declare address to resolved to</button>
|
||||
<br>
|
||||
<label for="transfer-to">Transfer domain to:</label>
|
||||
<input id="transfer-to" placeholder="ban_abc..." type="text"/>
|
||||
<br>
|
||||
<button onclick="transfer()">Transfer domain</button>
|
||||
<a id="transfer-link"></a>
|
||||
<br><br>
|
||||
<button class="danger" onclick="freeze(false)">Freeze domain</button>
|
||||
</div>
|
||||
</div>
|
||||
<div id="resolver">
|
||||
<h2>Domain Resolver</h2>
|
||||
<label for="resolve">Name:</label>
|
||||
<input id="resolve" type="text" placeholder="nishina247.mictest"/>
|
||||
<br>
|
||||
<button onclick="resolve()">Resolve domain</button>
|
||||
<br>
|
||||
<div>
|
||||
<span>Domain name: <span id="r-name"></span></span>
|
||||
<br>
|
||||
<span>TLD: <span id="r-tld"></span></span>
|
||||
<br>
|
||||
<span>Burned: <span id="r-burned"></span></span>
|
||||
<br>
|
||||
<span>Resolved Address: <span id="r-addr"></span></span>
|
||||
<br>
|
||||
<span>Metadata Hash: <span id="r-meta"></span></span>
|
||||
<br>
|
||||
<span>History:</span>
|
||||
<br>
|
||||
<textarea id="r-hist" disabled></textarea>
|
||||
</div>
|
||||
<div>
|
||||
<h3>TLD Mapping</h3>
|
||||
<ul id="tld-mapping">
|
||||
</ul>
|
||||
<label for="add-tld">TLD Name (no dot):</label>
|
||||
<input id="add-tld" type="text" placeholder="example"/>
|
||||
<br>
|
||||
<label for="tld-addr">TLD Address:</label>
|
||||
<input id="tld-addr" type="text" placeholder="ban_abcd..."/>
|
||||
<br>
|
||||
<button onclick="add_tld()">Add TLD to mapping</button> <!--no type="button" today-->
|
||||
<br><br>
|
||||
<label for="rem-tld">TLD Name (no dot):</label>
|
||||
<input id="rem-tld" type="text" placeholder="example"/>
|
||||
<br>
|
||||
<button onclick="rem_tld()">Remove TLD from mapping</button>
|
||||
</div>
|
||||
<div>
|
||||
<h3>Issued by TLD</h3>
|
||||
<label for="issue-tld">TLD Name (no dot):</label>
|
||||
<input id="issue-tld" type="text" placeholder="test"/>
|
||||
<br>
|
||||
<button onclick="all_issued()">Find all issued by TLD</button>
|
||||
<ul id="all-issued">
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
//I don't like how const works in js. I wish it prevented property mutation
|
||||
let d = document;
|
||||
d.g = d.getElementById; //I am lazy and this is a demo
|
||||
const bns = window.bns;
|
||||
|
||||
const rpc = new bns.banani.RPC("https://kaliumapi.appditto.com/api"); //for sending cause it does work
|
||||
//const rpc2 = new bns.banani.RPC("https://api.banano.trade/proxy", true); //for resolver cause it supports raw account history
|
||||
//const rpc2 = new bns.banani.RPC("https://booster.dev-ptera.com/banano-rpc"); //for resolver cause it supports raw account history
|
||||
const rpc2 = rpc;
|
||||
|
||||
let wallet = bns.banani.Wallet.gen_random_wallet(rpc);
|
||||
|
||||
let mode = false; //true if tld mode
|
||||
let tld_account;
|
||||
let domain_account;
|
||||
let domain_account_domain;
|
||||
|
||||
let tld_mapping = {
|
||||
"test": "ban_3634i9z9m5zj9tmjj4rsn9dtzed1oce3wtphr75o3jsq45739cgwr33kemb7",
|
||||
"mictest": "ban_1dzpfrgi8t4byzmdeidh57p14h5jwbursf1t3ztbmeqnqqdcbpgp9x8j3cw6",
|
||||
"jtv": "ban_3gipeswotbnyemcc1dejyhy5a1zfgj35kw356dommbx4rdochiteajcsay56",
|
||||
"ban": "ban_1fdo6b4bqm6pp1w55duuqw5ebz455975o4qcp8of85fjcdw9qhuzxsd3tjb9",
|
||||
//
|
||||
};
|
||||
|
||||
function gen_tld_mapping_list() {
|
||||
let ul = d.g("tld-mapping");
|
||||
ul.innerHTML = "";
|
||||
for (const tld of Object.keys(tld_mapping)) {
|
||||
let li = d.createElement("LI");
|
||||
li.textContent = `.${tld}: ${tld_mapping[tld]}`;
|
||||
ul.appendChild(li);
|
||||
}
|
||||
}
|
||||
|
||||
gen_tld_mapping_list();
|
||||
|
||||
function create(type) {
|
||||
const alt_seed = d.g("alt-seed").value;
|
||||
if (alt_seed) {
|
||||
if (bns.is_bns_seed_format(alt_seed)) {
|
||||
wallet = new bns.banani.Wallet(rpc, bns.bns_seed_format_to_hex(alt_seed));
|
||||
} else {
|
||||
wallet = new bns.banani.Wallet(rpc, alt_seed);
|
||||
}
|
||||
}
|
||||
d.g("seed-display").textContent = bns.hex_to_bns_seed_format(wallet.seed);
|
||||
if (type === "tld") {
|
||||
document.title = "TLD Account - BNS demo";
|
||||
tld_account = new bns.TLDAccountManager(rpc, wallet);
|
||||
mode = true;
|
||||
d.g("domain").style.display = "none";
|
||||
} else {
|
||||
document.title = "Domain Account - BNS demo";
|
||||
domain_account = new bns.DomainAccountManager(rpc, wallet);
|
||||
d.g("tld").style.display = "none";
|
||||
}
|
||||
d.g("start").style.display = "none";
|
||||
d.g("start-2").style.display = "block";
|
||||
d.g("address").textContent = wallet.address;
|
||||
d.g("address").href = `https://creeper.banano.cc/account/${d.g("address").textContent}`;
|
||||
}
|
||||
|
||||
function add_tld() {
|
||||
let at = d.g("add-tld");
|
||||
let ta = d.g("tld-addr");
|
||||
const tv = ta.value.trim();
|
||||
if (!at.value || !tv || !tv.startsWith("ban_") || tv.length !== 64) return;
|
||||
tld_mapping[at.value] = tv;
|
||||
at.value = "";
|
||||
ta.value = "";
|
||||
gen_tld_mapping_list();
|
||||
}
|
||||
|
||||
function rem_tld() {
|
||||
let rt = d.g("rem-tld");
|
||||
delete tld_mapping[rt.value];
|
||||
rt.value = "";
|
||||
gen_tld_mapping_list();
|
||||
}
|
||||
|
||||
function get_cid_v0_from_public_key(public_key) {
|
||||
return bns.address_to_cid_v0(bns.banani.get_address_from_public_key(public_key));
|
||||
}
|
||||
|
||||
async function resolve() {
|
||||
let parts = d.g("resolve").value.split(".");
|
||||
if (parts.length !== 2) return;
|
||||
const name = parts[0];
|
||||
const tld = parts[1];
|
||||
if (!tld_mapping[tld]) return;
|
||||
const resolver = new bns.Resolver(rpc2, tld_mapping);
|
||||
const resolved = await resolver.resolve(name, tld);
|
||||
d.g("r-name").textContent = resolved.name;
|
||||
console.log(resolved.tld)
|
||||
d.g("r-tld").textContent = `${resolved.tld} (.${tld})`;
|
||||
d.g("r-burned").textContent = resolved.burned;
|
||||
d.g("r-addr").textContent = resolved.resolved_address;
|
||||
const cid_v0 = resolved.metadata_hash ? get_cid_v0_from_public_key(resolved.metadata_hash) : "none";
|
||||
d.g("r-meta").innerHTML = `${resolved.metadata_hash} (IPFS translation: <a href="https://ipfs.oversas.org/ipfs/${cid_v0}" target="_blank">${cid_v0}</a>)`;
|
||||
d.g("r-hist").value = JSON.stringify(resolved.history, null, 2);
|
||||
}
|
||||
|
||||
async function all_issued() {
|
||||
let ul = d.g("all-issued");
|
||||
ul.innerHTML = "";
|
||||
const n = d.g("issue-tld").value;
|
||||
if (!tld_mapping[n]) return;
|
||||
const all = await (new bns.TLDAccount(rpc2, tld_mapping[n])).get_all_issued();
|
||||
for (const domain of all) {
|
||||
let li = d.createElement("LI");
|
||||
let a = d.createElement("A");
|
||||
a.href = `https://creeper.banano.cc/hash/${domain.history[0].block.hash}`;
|
||||
a.textContent = domain.name;
|
||||
li.appendChild(a);
|
||||
ul.appendChild(li);
|
||||
}
|
||||
}
|
||||
|
||||
async function issue() {
|
||||
const issue_hash = await tld_account.issue_domain_name(d.g("issue-name").value.trim(), d.g("issue-to").value.trim());
|
||||
d.g("issue-link").textContent = "Issued! See explorer.";
|
||||
d.g("issue-link").href = `https://creeper.banano.cc/hash/${issue_hash}`;
|
||||
}
|
||||
|
||||
async function get_domain_account_domain() {
|
||||
const resolver = new bns.Resolver(rpc2, tld_mapping);
|
||||
domain_account_domain = await resolver.resolve_backwards_ish(wallet.address, d.g("rc-tld").value);
|
||||
let frozen = false;
|
||||
if (domain_account_domain.history[domain_account_domain.history.length - 1].type === "freeze") {
|
||||
alert("This domain is frozen! That means you can't do anything with it.");
|
||||
frozen = true;
|
||||
}
|
||||
const { name, resolved_address, metadata_hash } = domain_account_domain;
|
||||
console.log(domain_account_domain);
|
||||
d.g("found-name").textContent = name;
|
||||
if (frozen) d.g("found-name").classList.add("danger");
|
||||
d.g("found-address").textContent = resolved_address;
|
||||
const cid_v0 = metadata_hash ? get_cid_v0_from_public_key(metadata_hash) : "none";
|
||||
d.g("found-metadata").innerHTML = `${metadata_hash} (IPFS translation: <a href="https://ipfs.oversas.org/ipfs/${cid_v0}" target="_blank">${cid_v0}</a>)`;
|
||||
d.g("domain-start").style.display = "none";
|
||||
d.g("domain-actions").style.display = "block";
|
||||
}
|
||||
|
||||
async function declare_metadata_hash() {
|
||||
const cid_v0 = d.g('d-mh').value.trim();
|
||||
const cid_address = bns.cid_v0_to_address(cid_v0);
|
||||
console.log(cid_v0, cid_address);
|
||||
console.log(bns.address_to_cid_v0(cid_address))
|
||||
const metadata_hash = bns.banani.get_public_key_from_address(cid_address);
|
||||
await domain_account.declare_domain_metadata(metadata_hash);
|
||||
}
|
||||
|
||||
async function transfer() {
|
||||
if (!domain_account_domain) return;
|
||||
console.log(domain_account_domain.name, d.g("transfer-to").value.trim())
|
||||
const transfer_hash = await domain_account.transfer_domain(domain_account_domain.name, d.g("transfer-to").value.trim());
|
||||
d.g("transfer-link").textContent = "Transferred! See explorer.";
|
||||
d.g("transfer-link").href = `https://creeper.banano.cc/hash/${transfer_hash}`;
|
||||
}
|
||||
|
||||
async function freeze(is_tld) {
|
||||
if (await prompt(`Are you sure you want to freeze the ${ is_tld ? "TLD" : "domain" }? This will mean you can no longer transfer it, change the resolved address, or the metadata hash. Respond 'I am super sure' to proceed.`).trim() === "I am super sure") {
|
||||
is_tld ? await tld_account.freeze() : await domain_account.freeze();
|
||||
alert(`The ${ is_tld ? "TLD" : "domain" } should now be frozen`);
|
||||
}
|
||||
}
|
||||
|
||||
function seed_proceed() {
|
||||
d.g("start-2").style.display = "none";
|
||||
d.g("main").style.display = "grid";
|
||||
}
|
||||
|
||||
//
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user