SC CODE: Function InitializePrivate() Uint64
10 IF init() == 0 THEN GOTO 30
20 RETURN 1
30 STORE("var_header_name", "dero-ui.js")
31 STORE("var_header_description", "")
32 STORE("var_header_icon", "")
33 STORE("dURL", "")
34 STORE("docType", "TELA-JS-1")
35 STORE("subDir", "/")
36 STORE("fileCheckC", "2e7d3b56a071c35e1fc62980af7537a47b97737916724bfa0fc32f007be2befd")
37 STORE("fileCheckS", "1a4cbd0c5700ff3bc2f02074d560c9ee31bbeed82069c5e78ab2d86eda83433a")
100 RETURN 0
End Function
Function init() Uint64
10 IF EXISTS("owner") == 0 THEN GOTO 30
20 RETURN 1
30 STORE("owner", address())
50 STORE("docVersion", "1.0.0")
60 STORE("hash", HEX(TXID()))
70 STORE("likes", 0)
80 STORE("dislikes", 0)
100 RETURN 0
End Function
Function address() String
10 DIM s as String
20 LET s = SIGNER()
30 IF IS_ADDRESS_VALID(s) THEN GOTO 50
40 RETURN "anon"
50 RETURN ADDRESS_STRING(s)
End Function
Function Rate(r Uint64) Uint64
10 DIM addr as String
15 LET addr = address()
16 IF r < 100 && EXISTS(addr) == 0 && addr != "anon" THEN GOTO 30
20 RETURN 1
30 STORE(addr, ""+r+"_"+BLOCK_HEIGHT())
40 IF r < 50 THEN GOTO 70
50 STORE("likes", LOAD("likes")+1)
60 RETURN 0
70 STORE("dislikes", LOAD("dislikes")+1)
100 RETURN 0
End Function
/*
// Cipher Snake Deluxe - UI wiring (publish + support modals + leaderboard render)
(function deroUI(){
'use strict';
var DeroWallet = window.DeroWallet;
var Leaderboard = window.Leaderboard;
var SUPPORT_ADDRESS = window.__csdSupportAddress;
var DERO_UNIT = window.__csdDeroUnit;
var TOP_N = 5;
function shortAddr(addr){
if (!addr) return '-';
return addr.length > 16 ? addr.slice(0,10) + '...' + addr.slice(-6) : addr;
}
var modal = document.getElementById('publishModal');
var pseudoInput = document.getElementById('pseudoInput');
var scorePrev = document.getElementById('publishScorePreview');
var connectBtn = document.getElementById('connectWalletBtn');
var submitBtn = document.getElementById('submitPublishBtn');
var cancelBtn = document.getElementById('cancelPublish');
var statusEl = document.getElementById('walletStatus');
var currentScore = 0;
function setStatus(text, cls){
statusEl.textContent = text;
statusEl.className = 'wallet-status' + (cls ? ' ' + cls : '');
}
function pseudoValid(){
return /^[A-Za-z0-9_\-]{1,16}$/.test(pseudoInput.value.trim());
}
function validatePseudo(){
var ok = pseudoValid();
submitBtn.disabled = !ok || (Leaderboard.isLive() && !DeroWallet.isConnected());
return ok;
}
function openPublishModal(score){
currentScore = score;
scorePrev.textContent = score;
pseudoInput.value = localStorage.getItem('csd_last_pseudo') || '';
validatePseudo();
if (Leaderboard.isLive()){
if (DeroWallet.isConnected()){
setStatus('Wallet connected: ' + shortAddr(DeroWallet.getAddress()), 'ok');
connectBtn.style.display = 'none';
} else {
setStatus('Wallet: not connected. Click CONNECT to authorize via your DERO wallet.');
connectBtn.style.display = '';
}
} else {
setStatus('SIM mode - saved locally. Configure SCID to go on-chain.', 'ok');
connectBtn.style.display = 'none';
submitBtn.disabled = !pseudoValid();
}
modal.classList.add('show');
setTimeout(function(){ pseudoInput.focus(); }, 50);
}
window.openPublishModal = openPublishModal;
function closePublishModal(){ modal.classList.remove('show'); }
pseudoInput.addEventListener('input', validatePseudo);
pseudoInput.addEventListener('keydown', function(e){
if (e.key === 'Enter' && !submitBtn.disabled){ e.preventDefault(); submitBtn.click(); }
});
document.addEventListener('keydown', function(e){
if (e.key === 'Escape' && modal.classList.contains('show')) closePublishModal();
});
cancelBtn.addEventListener('click', closePublishModal);
modal.addEventListener('click', function(e){ if (e.target === modal) closePublishModal(); });
connectBtn.addEventListener('click', function(){
connectBtn.disabled = true;
setStatus('Opening WebSocket - approve the connection in your wallet...', 'pending');
DeroWallet.connect().then(function(addr){
setStatus('Connected: ' + shortAddr(addr), 'ok');
connectBtn.style.display = 'none';
validatePseudo();
}).catch(function(e){
setStatus('Connection failed: ' + (e.message || e), 'err');
}).then(function(){ connectBtn.disabled = false; });
});
submitBtn.addEventListener('click', function(){
var pseudo = pseudoInput.value.trim();
if (!pseudoValid()) return;
localStorage.setItem('csd_last_pseudo', pseudo);
submitBtn.disabled = true;
cancelBtn.disabled = true;
setStatus(Leaderboard.isLive()
? 'Broadcasting tx to DERO - confirm in your wallet...'
: 'Saving to local simulation...', 'pending');
Leaderboard.publish(pseudo, currentScore).then(function(res){
if (res.simulated){
setStatus('OK - saved locally. Top 5 refreshed.', 'ok');
} else {
setStatus('OK - TX broadcast: ' + (res.txid || '(pending)'), 'ok');
}
if (typeof window.refreshGameOverLeaderboard === 'function'){
window.refreshGameOverLeaderboard(pseudo);
}
setTimeout(closePublishModal, 1800);
}).catch(function(e){
setStatus('x Publish failed: ' + (e.message || e), 'err');
submitBtn.disabled = false;
}).then(function(){ cancelBtn.disabled = false; });
});
var supportModal = document.getElementById('supportModal');
var supportBtn = document.getElementById('supportBtn');
var amountInput = document.getElementById('amountInput');
var connectSupBtn = document.getElementById('connectSupportBtn');
var sendTipBtn = document.getElementById('sendTipBtn');
var cancelSupBtn = document.getElementById('cancelSupport');
var supportStatus = document.getElementById('supportStatus');
function setSupportStatus(txt, cls){
supportStatus.textContent = txt;
supportStatus.className = 'wallet-status' + (cls ? ' ' + cls : '');
}
function parseAmount(s){
if (typeof s !== 'string') return NaN;
var t = s.trim().replace(',', '.');
if (!/^\d+(\.\d+)?$/.test(t)) return NaN;
var n = parseFloat(t);
if (!isFinite(n) || n <= 0) return NaN;
return n;
}
function validateAmount(){
var n = parseAmount(amountInput.value);
var ok = !isNaN(n) && n > 0;
sendTipBtn.disabled = !ok || !DeroWallet.isConnected();
return ok;
}
function openSupportModal(){
amountInput.value = '';
sendTipBtn.disabled = true;
if (DeroWallet.isConnected()){
setSupportStatus('Wallet connected: ' + shortAddr(DeroWallet.getAddress()), 'ok');
connectSupBtn.style.display = 'none';
} else {
setSupportStatus('Wallet: not connected. Click CONNECT to authorize.');
connectSupBtn.style.display = '';
}
supportModal.classList.add('show');
setTimeout(function(){ amountInput.focus(); }, 50);
}
function closeSupportModal(){ supportModal.classList.remove('show'); }
supportBtn.addEventListener('click', openSupportModal);
cancelSupBtn.addEventListener('click', closeSupportModal);
supportModal.addEventListener('click', function(e){ if (e.target === supportModal) closeSupportModal(); });
amountInput.addEventListener('input', validateAmount);
amountInput.addEventListener('keydown', function(e){
if (e.key === 'Enter' && !sendTipBtn.disabled){ e.preventDefault(); sendTipBtn.click(); }
});
document.addEventListener('keydown', function(e){
if (e.key === 'Escape' && supportModal.classList.contains('show')) closeSupportModal();
});
var presetBtns = document.querySelectorAll('.preset-btn');
for (var pi = 0; pi < presetBtns.length; pi++){
(function(btn){
btn.addEventListener('click', function(){
amountInput.value = btn.dataset.amount;
validateAmount();
amountInput.focus();
});
})(presetBtns[pi]);
}
connectSupBtn.addEventListener('click', function(){
connectSupBtn.disabled = true;
setSupportStatus('Opening WebSocket - approve in your wallet...', 'pending');
DeroWallet.connect().then(function(addr){
setSupportStatus('Connected: ' + shortAddr(addr), 'ok');
connectSupBtn.style.display = 'none';
validateAmount();
}).catch(function(e){
setSupportStatus('Connection failed: ' + (e.message || e), 'err');
}).then(function(){ connectSupBtn.disabled = false; });
});
sendTipBtn.addEventListener('click', function(){
var amount = parseAmount(amountInput.value);
if (isNaN(amount)) return;
var atomic = Math.round(amount * DERO_UNIT);
if (atomic <= 0){ setSupportStatus('Amount too small.', 'err'); return; }
sendTipBtn.disabled = true;
cancelSupBtn.disabled = true;
setSupportStatus('Broadcasting ' + amount + ' DERO - confirm in your wallet...', 'pending');
var ensure = DeroWallet.isConnected() ? Promise.resolve() : DeroWallet.connect();
ensure.then(function(){
return DeroWallet.call('transfer', {
transfers: [ { destination: SUPPORT_ADDRESS, amount: atomic } ],
ringsize: 16,
});
}).then(function(res){
var txid = (res && res.txid) || '(pending)';
setSupportStatus('OK thank you! TX: ' + txid, 'ok');
setTimeout(closeSupportModal, 2400);
}).catch(function(e){
setSupportStatus('x Transfer failed: ' + (e.message || e), 'err');
sendTipBtn.disabled = false;
}).then(function(){ cancelSupBtn.disabled = false; });
});
function escapeHtml(s){
return String(s).replace(/[&<>"']/g, function(c){
return {'&':'&','<':'<','>':'>','"':'"',"'":'''}[c];
});
}
window.escapeHtml = escapeHtml;
function renderGameOverLeaderboard(rows, highlightPseudo){
var host = document.getElementById('gameOverLeaderboard');
if (!host) return;
host.innerHTML = '<h4>// TOP 5 ON-CHAIN</h4>';
if (!rows || !rows.length){
host.innerHTML += '<div class="lb-empty">// no scores yet - be the first ! //</div>';
return;
}
var podium = ['gold','silver','bronze','',''];
rows.slice(0, TOP_N).forEach(function(r, i){
var cls = podium[i] || '';
var isYou = (highlightPseudo && r.pseudo === highlightPseudo) || r.you;
var row = document.createElement('div');
row.className = 'lb-row ' + cls + (isYou ? ' you' : '');
row.innerHTML =
'<span class="rank">' + String(i+1).padStart(2,'0') + '</span>' +
'<span class="pseudo">' + escapeHtml(r.pseudo) + '</span>' +
'<span class="score">' + r.score + '</span>';
host.appendChild(row);
});
}
window.renderGameOverLeaderboard = renderGameOverLeaderboard;
function refreshGameOverLeaderboard(highlightPseudo){
Leaderboard.fetchTop5().then(function(rows){
renderGameOverLeaderboard(rows, highlightPseudo);
}).catch(function(err){
var el = document.getElementById('gameOverLeaderboard');
if (el) el.innerHTML = '<h4>// TOP 5 ON-CHAIN</h4>' +
'<div class="lb-empty" style="color: var(--danger-red);">' +
escapeHtml(err.message || 'read failed') + '</div>';
});
}
window.refreshGameOverLeaderboard = refreshGameOverLeaderboard;
})();
*/ |
| SC Arguments: [Name:SC_ACTION Type:uint64 Value:'1' Name:SC_CODE Type:string Value:'Function InitializePrivate() Uint64
10 IF init() == 0 THEN GOTO 30
20 RETURN 1
30 STORE("var_header_name", "dero-ui.js")
31 STORE("var_header_description", "")
32 STORE("var_header_icon", "")
33 STORE("dURL", "")
34 STORE("docType", "TELA-JS-1")
35 STORE("subDir", "/")
36 STORE("fileCheckC", "2e7d3b56a071c35e1fc62980af7537a47b97737916724bfa0fc32f007be2befd")
37 STORE("fileCheckS", "1a4cbd0c5700ff3bc2f02074d560c9ee31bbeed82069c5e78ab2d86eda83433a")
100 RETURN 0
End Function
Function init() Uint64
10 IF EXISTS("owner") == 0 THEN GOTO 30
20 RETURN 1
30 STORE("owner", address())
50 STORE("docVersion", "1.0.0")
60 STORE("hash", HEX(TXID()))
70 STORE("likes", 0)
80 STORE("dislikes", 0)
100 RETURN 0
End Function
Function address() String
10 DIM s as String
20 LET s = SIGNER()
30 IF IS_ADDRESS_VALID(s) THEN GOTO 50
40 RETURN "anon"
50 RETURN ADDRESS_STRING(s)
End Function
Function Rate(r Uint64) Uint64
10 DIM addr as String
15 LET addr = address()
16 IF r < 100 && EXISTS(addr) == 0 && addr != "anon" THEN GOTO 30
20 RETURN 1
30 STORE(addr, ""+r+"_"+BLOCK_HEIGHT())
40 IF r < 50 THEN GOTO 70
50 STORE("likes", LOAD("likes")+1)
60 RETURN 0
70 STORE("dislikes", LOAD("dislikes")+1)
100 RETURN 0
End Function
/*
// Cipher Snake Deluxe - UI wiring (publish + support modals + leaderboard render)
(function deroUI(){
'use strict';
var DeroWallet = window.DeroWallet;
var Leaderboard = window.Leaderboard;
var SUPPORT_ADDRESS = window.__csdSupportAddress;
var DERO_UNIT = window.__csdDeroUnit;
var TOP_N = 5;
function shortAddr(addr){
if (!addr) return '-';
return addr.length > 16 ? addr.slice(0,10) + '...' + addr.slice(-6) : addr;
}
var modal = document.getElementById('publishModal');
var pseudoInput = document.getElementById('pseudoInput');
var scorePrev = document.getElementById('publishScorePreview');
var connectBtn = document.getElementById('connectWalletBtn');
var submitBtn = document.getElementById('submitPublishBtn');
var cancelBtn = document.getElementById('cancelPublish');
var statusEl = document.getElementById('walletStatus');
var currentScore = 0;
function setStatus(text, cls){
statusEl.textContent = text;
statusEl.className = 'wallet-status' + (cls ? ' ' + cls : '');
}
function pseudoValid(){
return /^[A-Za-z0-9_\-]{1,16}$/.test(pseudoInput.value.trim());
}
function validatePseudo(){
var ok = pseudoValid();
submitBtn.disabled = !ok || (Leaderboard.isLive() && !DeroWallet.isConnected());
return ok;
}
function openPublishModal(score){
currentScore = score;
scorePrev.textContent = score;
pseudoInput.value = localStorage.getItem('csd_last_pseudo') || '';
validatePseudo();
if (Leaderboard.isLive()){
if (DeroWallet.isConnected()){
setStatus('Wallet connected: ' + shortAddr(DeroWallet.getAddress()), 'ok');
connectBtn.style.display = 'none';
} else {
setStatus('Wallet: not connected. Click CONNECT to authorize via your DERO wallet.');
connectBtn.style.display = '';
}
} else {
setStatus('SIM mode - saved locally. Configure SCID to go on-chain.', 'ok');
connectBtn.style.display = 'none';
submitBtn.disabled = !pseudoValid();
}
modal.classList.add('show');
setTimeout(function(){ pseudoInput.focus(); }, 50);
}
window.openPublishModal = openPublishModal;
function closePublishModal(){ modal.classList.remove('show'); }
pseudoInput.addEventListener('input', validatePseudo);
pseudoInput.addEventListener('keydown', function(e){
if (e.key === 'Enter' && !submitBtn.disabled){ e.preventDefault(); submitBtn.click(); }
});
document.addEventListener('keydown', function(e){
if (e.key === 'Escape' && modal.classList.contains('show')) closePublishModal();
});
cancelBtn.addEventListener('click', closePublishModal);
modal.addEventListener('click', function(e){ if (e.target === modal) closePublishModal(); });
connectBtn.addEventListener('click', function(){
connectBtn.disabled = true;
setStatus('Opening WebSocket - approve the connection in your wallet...', 'pending');
DeroWallet.connect().then(function(addr){
setStatus('Connected: ' + shortAddr(addr), 'ok');
connectBtn.style.display = 'none';
validatePseudo();
}).catch(function(e){
setStatus('Connection failed: ' + (e.message || e), 'err');
}).then(function(){ connectBtn.disabled = false; });
});
submitBtn.addEventListener('click', function(){
var pseudo = pseudoInput.value.trim();
if (!pseudoValid()) return;
localStorage.setItem('csd_last_pseudo', pseudo);
submitBtn.disabled = true;
cancelBtn.disabled = true;
setStatus(Leaderboard.isLive()
? 'Broadcasting tx to DERO - confirm in your wallet...'
: 'Saving to local simulation...', 'pending');
Leaderboard.publish(pseudo, currentScore).then(function(res){
if (res.simulated){
setStatus('OK - saved locally. Top 5 refreshed.', 'ok');
} else {
setStatus('OK - TX broadcast: ' + (res.txid || '(pending)'), 'ok');
}
if (typeof window.refreshGameOverLeaderboard === 'function'){
window.refreshGameOverLeaderboard(pseudo);
}
setTimeout(closePublishModal, 1800);
}).catch(function(e){
setStatus('x Publish failed: ' + (e.message || e), 'err');
submitBtn.disabled = false;
}).then(function(){ cancelBtn.disabled = false; });
});
var supportModal = document.getElementById('supportModal');
var supportBtn = document.getElementById('supportBtn');
var amountInput = document.getElementById('amountInput');
var connectSupBtn = document.getElementById('connectSupportBtn');
var sendTipBtn = document.getElementById('sendTipBtn');
var cancelSupBtn = document.getElementById('cancelSupport');
var supportStatus = document.getElementById('supportStatus');
function setSupportStatus(txt, cls){
supportStatus.textContent = txt;
supportStatus.className = 'wallet-status' + (cls ? ' ' + cls : '');
}
function parseAmount(s){
if (typeof s !== 'string') return NaN;
var t = s.trim().replace(',', '.');
if (!/^\d+(\.\d+)?$/.test(t)) return NaN;
var n = parseFloat(t);
if (!isFinite(n) || n <= 0) return NaN;
return n;
}
function validateAmount(){
var n = parseAmount(amountInput.value);
var ok = !isNaN(n) && n > 0;
sendTipBtn.disabled = !ok || !DeroWallet.isConnected();
return ok;
}
function openSupportModal(){
amountInput.value = '';
sendTipBtn.disabled = true;
if (DeroWallet.isConnected()){
setSupportStatus('Wallet connected: ' + shortAddr(DeroWallet.getAddress()), 'ok');
connectSupBtn.style.display = 'none';
} else {
setSupportStatus('Wallet: not connected. Click CONNECT to authorize.');
connectSupBtn.style.display = '';
}
supportModal.classList.add('show');
setTimeout(function(){ amountInput.focus(); }, 50);
}
function closeSupportModal(){ supportModal.classList.remove('show'); }
supportBtn.addEventListener('click', openSupportModal);
cancelSupBtn.addEventListener('click', closeSupportModal);
supportModal.addEventListener('click', function(e){ if (e.target === supportModal) closeSupportModal(); });
amountInput.addEventListener('input', validateAmount);
amountInput.addEventListener('keydown', function(e){
if (e.key === 'Enter' && !sendTipBtn.disabled){ e.preventDefault(); sendTipBtn.click(); }
});
document.addEventListener('keydown', function(e){
if (e.key === 'Escape' && supportModal.classList.contains('show')) closeSupportModal();
});
var presetBtns = document.querySelectorAll('.preset-btn');
for (var pi = 0; pi < presetBtns.length; pi++){
(function(btn){
btn.addEventListener('click', function(){
amountInput.value = btn.dataset.amount;
validateAmount();
amountInput.focus();
});
})(presetBtns[pi]);
}
connectSupBtn.addEventListener('click', function(){
connectSupBtn.disabled = true;
setSupportStatus('Opening WebSocket - approve in your wallet...', 'pending');
DeroWallet.connect().then(function(addr){
setSupportStatus('Connected: ' + shortAddr(addr), 'ok');
connectSupBtn.style.display = 'none';
validateAmount();
}).catch(function(e){
setSupportStatus('Connection failed: ' + (e.message || e), 'err');
}).then(function(){ connectSupBtn.disabled = false; });
});
sendTipBtn.addEventListener('click', function(){
var amount = parseAmount(amountInput.value);
if (isNaN(amount)) return;
var atomic = Math.round(amount * DERO_UNIT);
if (atomic <= 0){ setSupportStatus('Amount too small.', 'err'); return; }
sendTipBtn.disabled = true;
cancelSupBtn.disabled = true;
setSupportStatus('Broadcasting ' + amount + ' DERO - confirm in your wallet...', 'pending');
var ensure = DeroWallet.isConnected() ? Promise.resolve() : DeroWallet.connect();
ensure.then(function(){
return DeroWallet.call('transfer', {
transfers: [ { destination: SUPPORT_ADDRESS, amount: atomic } ],
ringsize: 16,
});
}).then(function(res){
var txid = (res && res.txid) || '(pending)';
setSupportStatus('OK thank you! TX: ' + txid, 'ok');
setTimeout(closeSupportModal, 2400);
}).catch(function(e){
setSupportStatus('x Transfer failed: ' + (e.message || e), 'err');
sendTipBtn.disabled = false;
}).then(function(){ cancelSupBtn.disabled = false; });
});
function escapeHtml(s){
return String(s).replace(/[&<>"']/g, function(c){
return {'&':'&','<':'<','>':'>','"':'"',"'":'''}[c];
});
}
window.escapeHtml = escapeHtml;
function renderGameOverLeaderboard(rows, highlightPseudo){
var host = document.getElementById('gameOverLeaderboard');
if (!host) return;
host.innerHTML = '<h4>// TOP 5 ON-CHAIN</h4>';
if (!rows || !rows.length){
host.innerHTML += '<div class="lb-empty">// no scores yet - be the first ! //</div>';
return;
}
var podium = ['gold','silver','bronze','',''];
rows.slice(0, TOP_N).forEach(function(r, i){
var cls = podium[i] || '';
var isYou = (highlightPseudo && r.pseudo === highlightPseudo) || r.you;
var row = document.createElement('div');
row.className = 'lb-row ' + cls + (isYou ? ' you' : '');
row.innerHTML =
'<span class="rank">' + String(i+1).padStart(2,'0') + '</span>' +
'<span class="pseudo">' + escapeHtml(r.pseudo) + '</span>' +
'<span class="score">' + r.score + '</span>';
host.appendChild(row);
});
}
window.renderGameOverLeaderboard = renderGameOverLeaderboard;
function refreshGameOverLeaderboard(highlightPseudo){
Leaderboard.fetchTop5().then(function(rows){
renderGameOverLeaderboard(rows, highlightPseudo);
}).catch(function(err){
var el = document.getElementById('gameOverLeaderboard');
if (el) el.innerHTML = '<h4>// TOP 5 ON-CHAIN</h4>' +
'<div class="lb-empty" style="color: var(--danger-red);">' +
escapeHtml(err.message || 'read failed') + '</div>';
});
}
window.refreshGameOverLeaderboard = refreshGameOverLeaderboard;
})();
*/'] |