SC CODE: // Copyright 2024. Civilware. All rights reserved.
// TELA Decentralized Web Document (TELA-DOC-1)
Function InitializePrivate() Uint64
10 IF init() == 0 THEN GOTO 30
20 RETURN 1
30 STORE("nameHdr", "xswd.js")
31 STORE("descrHdr", "Connection JS")
32 STORE("iconURLHdr", "")
33 STORE("dURL", "xswd.js")
34 STORE("docType", "TELA-JS-1")
35 STORE("subDir", "js")
36 STORE("fileCheckC", "2983ba8fa9a0414398db5887bbd12cda3373b3fddd65f4500f69c86a706924b")
37 STORE("fileCheckS", "c0eff5040ed538d8d196810a119168dd563200685490fd6b1e4204e4d864ae3")
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
/*let app_name="Tela Site Installer by WebGuy"
let app_id=""
applicationData={}
async function setAppSettings(){
app_id = await generateSHA256Hash(app_name)
applicationData={
"id":app_id,
"name":app_name,
"description":"Deploy a Tela site",
"url":window.location.protocol+'//'+window.location.host
}
}
setAppSettings()
async function generateSHA256Hash(data){
const encoder=new TextEncoder()
const dataBuffer=encoder.encode(data)
const hashBuffer=await crypto.subtle.digest('SHA-256',dataBuffer)
const hashArray=Array.from(new Uint8Array(hashBuffer))
const hashHex=hashArray.map(byte=>byte.toString(16).padStart(2,'0')).join('')
return hashHex;
}
let socket
let connected_dero_account=''
function sendData(d){
if (socket&&socket.readyState===WebSocket.OPEN) {
try {
socket.send(JSON.stringify(d))
if (d.method){
console.log(d.method,"request sent")
}else{
console.log("Connection request sent")
}
} catch (error) {
console.error("Failed to send:",error)
}
} else {
console.log("Socket is not open. State:",socket ? socket.readyState : "N/A")
}
}
function connectWebSocket(){
if (document.getElementById("connectButton").textContent==="Disconnect"){
if (socket)socket.close(),socket=null
return
}
socket = new WebSocket("ws://localhost:44326/xswd")
socket.addEventListener("open",function(event){
console.log("Web socket connection established:",event)
sendData(applicationData)
})
let connecting=true
let initializing=true
socket.addEventListener("message",function(event){
const response=JSON.parse(event.data)
if (response.accepted){
console.log("Connected message received:",response.message)
sendData({"jsonrpc": "2.0","id":"0","method":"GetAddress"})
} else if (response.result){
const res = response.result
if (res.address&&connecting){
toggleButton("green")
connecting=false
if(connected_dero_account != res.address){
//reset
}
connected_dero_account=res.address
socket.addEventListener("message",listener)
}else if(typeof res.address==='undefined'&&connecting){
alert("Wallet is not connected.")
}
} else if(response.error&&connecting){
console.error("Error:",response.error.message)
alert(response.error.message)
toggleButton("red")
}
})
socket.addEventListener("error",function(event){
console.error("Web socket error:",event)
})
socket.addEventListener("close",function (event){
console.log("Web socket connection closed:",event.code,event.reason);
toggleButton('red')
})
}
window.connectWebSocket=connectWebSocket
function toggleButton(color){
let button_text="Disconnect"
if (color=="red"){
button_text="Connect Dero"
}
document.getElementById("connectButton").innerText=button_text
document.getElementById("connectButton").style.color=color
CStatusChange()
}
document.getElementById("connectButton").addEventListener("click",connectWebSocket)
function CStatusChange(){
let derook=false
if(document.getElementById("connectButton").innerText=="Disconnect"){
derook=true
}
if(!derook){
if(install_docs.length != 0){
deployDocsButton.removeAttribute("disabled")
}
}
}
let call_id=1
let globalResolutions=[]
let callStack=[]
let subbed=false
async function listener(event){
let JSONresult = JSON.parse(event.data)
if(JSONresult.id==0&&JSONresult.result.event=="anyvalue"){
//should error out here... with wallet socket drop
return
}
let currentResolver = globalResolutions[JSONresult.id][0]
callStack[JSONresult.id]=JSONresult
let highest_sent=Math.max(...[...globalResolutions.keys()])
if(highest_sent==JSONresult.id){
delete globalResolutions[JSONresult.id]
delete callStack[JSONresult.id]
currentResolver(JSONresult)
}else{
for(i in callStack){
let currentResolver=globalResolutions[i][0]
let call=callStack[i]
delete globalResolutions[i]
delete callStack[i]
currentResolver(call)
}
}
}
async function socketSend(data){
return new Promise(function(resolve){
data.jsonrpc="2.0"
data.id=call_id++
globalResolutions[data.id]=[resolve,0];
sendData(data)
})
}
document.body.addEventListener("click",function(e){
if(e.target&&e.target.closest('a')){
let url = e.target.closest('a').getAttribute('href')
if(!e.target.closest('a').getAttribute('download')){
e.preventDefault()
}else{
return
}
let hname = getHost(url)
if(url.split(':',2)[0]==="tela"){
socketSend({"jsonrpc": "2.0","id": "1","method":"HandleTELALinks","params":{"telaLink":url}})
}else if(hname!='localhost'&&hname!=null){
let result=confirm("You are leaving Tela and visiting a www site. OK?")
if(result){
window.open(url,'_blank')
}
}
}
})
function getHost(url){
try{
let urlO=new URL(url)
return urlO.host
}catch(e){
return null
}
}*/ |
SC Arguments: [Name:SC_ACTION Type:uint64 Value:'1' Name:SC_CODE Type:string Value:'// Copyright 2024. Civilware. All rights reserved.
// TELA Decentralized Web Document (TELA-DOC-1)
Function InitializePrivate() Uint64
10 IF init() == 0 THEN GOTO 30
20 RETURN 1
30 STORE("nameHdr", "xswd.js")
31 STORE("descrHdr", "Connection JS")
32 STORE("iconURLHdr", "")
33 STORE("dURL", "xswd.js")
34 STORE("docType", "TELA-JS-1")
35 STORE("subDir", "js")
36 STORE("fileCheckC", "2983ba8fa9a0414398db5887bbd12cda3373b3fddd65f4500f69c86a706924b")
37 STORE("fileCheckS", "c0eff5040ed538d8d196810a119168dd563200685490fd6b1e4204e4d864ae3")
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
/*let app_name="Tela Site Installer by WebGuy"
let app_id=""
applicationData={}
async function setAppSettings(){
app_id = await generateSHA256Hash(app_name)
applicationData={
"id":app_id,
"name":app_name,
"description":"Deploy a Tela site",
"url":window.location.protocol+'//'+window.location.host
}
}
setAppSettings()
async function generateSHA256Hash(data){
const encoder=new TextEncoder()
const dataBuffer=encoder.encode(data)
const hashBuffer=await crypto.subtle.digest('SHA-256',dataBuffer)
const hashArray=Array.from(new Uint8Array(hashBuffer))
const hashHex=hashArray.map(byte=>byte.toString(16).padStart(2,'0')).join('')
return hashHex;
}
let socket
let connected_dero_account=''
function sendData(d){
if (socket&&socket.readyState===WebSocket.OPEN) {
try {
socket.send(JSON.stringify(d))
if (d.method){
console.log(d.method,"request sent")
}else{
console.log("Connection request sent")
}
} catch (error) {
console.error("Failed to send:",error)
}
} else {
console.log("Socket is not open. State:",socket ? socket.readyState : "N/A")
}
}
function connectWebSocket(){
if (document.getElementById("connectButton").textContent==="Disconnect"){
if (socket)socket.close(),socket=null
return
}
socket = new WebSocket("ws://localhost:44326/xswd")
socket.addEventListener("open",function(event){
console.log("Web socket connection established:",event)
sendData(applicationData)
})
let connecting=true
let initializing=true
socket.addEventListener("message",function(event){
const response=JSON.parse(event.data)
if (response.accepted){
console.log("Connected message received:",response.message)
sendData({"jsonrpc": "2.0","id":"0","method":"GetAddress"})
} else if (response.result){
const res = response.result
if (res.address&&connecting){
toggleButton("green")
connecting=false
if(connected_dero_account != res.address){
//reset
}
connected_dero_account=res.address
socket.addEventListener("message",listener)
}else if(typeof res.address==='undefined'&&connecting){
alert("Wallet is not connected.")
}
} else if(response.error&&connecting){
console.error("Error:",response.error.message)
alert(response.error.message)
toggleButton("red")
}
})
socket.addEventListener("error",function(event){
console.error("Web socket error:",event)
})
socket.addEventListener("close",function (event){
console.log("Web socket connection closed:",event.code,event.reason);
toggleButton('red')
})
}
window.connectWebSocket=connectWebSocket
function toggleButton(color){
let button_text="Disconnect"
if (color=="red"){
button_text="Connect Dero"
}
document.getElementById("connectButton").innerText=button_text
document.getElementById("connectButton").style.color=color
CStatusChange()
}
document.getElementById("connectButton").addEventListener("click",connectWebSocket)
function CStatusChange(){
let derook=false
if(document.getElementById("connectButton").innerText=="Disconnect"){
derook=true
}
if(!derook){
if(install_docs.length != 0){
deployDocsButton.removeAttribute("disabled")
}
}
}
let call_id=1
let globalResolutions=[]
let callStack=[]
let subbed=false
async function listener(event){
let JSONresult = JSON.parse(event.data)
if(JSONresult.id==0&&JSONresult.result.event=="anyvalue"){
//should error out here... with wallet socket drop
return
}
let currentResolver = globalResolutions[JSONresult.id][0]
callStack[JSONresult.id]=JSONresult
let highest_sent=Math.max(...[...globalResolutions.keys()])
if(highest_sent==JSONresult.id){
delete globalResolutions[JSONresult.id]
delete callStack[JSONresult.id]
currentResolver(JSONresult)
}else{
for(i in callStack){
let currentResolver=globalResolutions[i][0]
let call=callStack[i]
delete globalResolutions[i]
delete callStack[i]
currentResolver(call)
}
}
}
async function socketSend(data){
return new Promise(function(resolve){
data.jsonrpc="2.0"
data.id=call_id++
globalResolutions[data.id]=[resolve,0];
sendData(data)
})
}
document.body.addEventListener("click",function(e){
if(e.target&&e.target.closest('a')){
let url = e.target.closest('a').getAttribute('href')
if(!e.target.closest('a').getAttribute('download')){
e.preventDefault()
}else{
return
}
let hname = getHost(url)
if(url.split(':',2)[0]==="tela"){
socketSend({"jsonrpc": "2.0","id": "1","method":"HandleTELALinks","params":{"telaLink":url}})
}else if(hname!='localhost'&&hname!=null){
let result=confirm("You are leaving Tela and visiting a www site. OK?")
if(result){
window.open(url,'_blank')
}
}
}
})
function getHost(url){
try{
let urlO=new URL(url)
return urlO.host
}catch(e){
return null
}
}*/'] |