fixes and plaintext support aware

This commit is contained in:
Kevin Froman 2020-10-12 09:23:20 +00:00
parent 14c8aac76b
commit 760f99d864
5 changed files with 41 additions and 33 deletions

View File

@ -17,13 +17,15 @@
*/
var findMessageIntervalTime = 5000
var publicNodes = [
"ty3rq3kub6gvzpngnrvfsk5emhoh2ltkti62u4ophca6ijciajotqqid",
"aekulizc7lsl4bh3ainlnnbfqtboavitfxuvanqq3eyposdifzzeddqd"
"ueawiiskhaxdhkqjvgz6drrlf7srvaifrewnb6rxf6tro3welajvlgyd",
"csb2thc5yzv2gbhoozbqrzv747irs5z2lbpd7eiyh6eivvltok76qrqd"
]
var initialNodes = JSON.parse(JSON.stringify(publicNodes))
publicNodes = []
var messageHashes = []
var blocks = []
var basicTextEncoder = new TextEncoder()
var difficulty = "0000"
var difficulty = "00000"
var maxBlockAge = 2678400
var postTopic = 'kic' // we use block types as the topic with 'kic' as the prefix
var lastLookup = Math.floor((Date.now() / 1000)) - maxBlockAge
@ -36,7 +38,7 @@ function shuffleArray(array) {
[array[i], array[j]] = [array[j], array[i]];
}
}
shuffleArray(publicNodes)
shuffleArray(initialNodes)
//https://stackoverflow.com/q/10420352
function getReadableFileSizeString(fileSizeInBytes) {
@ -50,20 +52,9 @@ function getReadableFileSizeString(fileSizeInBytes) {
return Math.max(fileSizeInBytes, 0.1).toFixed(1) + byteUnits[i];
};
setInterval(function(){shuffleArray(publicNodes)}, 5000)
// Make Tor connect to each node to reduce future connection time
publicNodes.forEach(node => {
let doPing = async function(){
let res = await(await fetch("http://" + node + ".onion/ping")).text()
if (res !== "pong!"){
console.debug(node)
}
}
doPing()
})
function getCurrentNode(){
// Very basic round-robin use of nodes
let current = publicNodes.shift()
@ -132,6 +123,7 @@ async function apiGET(path, queryString, raw=false){
}
async function findMessages(){
findMessageIntervalTime = 5000
if (document.hidden){
findMessageIntervalTime = 10000

View File

@ -30,7 +30,7 @@ document.getElementById("createMessageBtn").onclick = async function(){
'meta': JSON.stringify({'type': postTopic})
},
"data": postMessage,
"difficulty": difficulty.length / 2
"difficulty": 5
}
powWorker.postMessage(JSON.stringify(payload))

View File

@ -15,12 +15,12 @@
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
importScripts("jspow/index.js")
importScripts("sha3.js")
importScripts("/jspow/index.js")
importScripts("/js/sha3.js")
self.addEventListener('message', function(e) {
var data = JSON.parse(e.data)
console.debug(data.metadata)
self.postMessage(
doPow(
data.metadata,

View File

@ -15,19 +15,31 @@
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
var lookupWorker = new Worker('peer-lookup.js');
var powWorker = new Worker("powworker.js")
var lookupWorker = new Worker('/js/peer-lookup.js')
var powWorker = new Worker("/js/powworker.js")
lookupWorker.addEventListener('message', function(e) {
if (publicNodes.includes(e.data)){
return
let addPeer = async function(p){
if (await (await fetch("http://" + p + ".onion/plaintext")).text() != "true")
{
console.debug("cannot add " + p)
return
}
if (publicNodes.includes(p) || initialNodes.includes(p)){
return
}
publicNodes.push(p)
}
publicNodes.push(e.data)
addPeer(e.data)
}, false);
setInterval(function(){
lookupWorker.postMessage(JSON.stringify({"node": getCurrentNode()}))
let n = getCurrentNode()
if (typeof n == "undefined"){
n = initialNodes[0]
}
lookupWorker.postMessage(JSON.stringify({"node": n}))
}, 60000)
lookupWorker.postMessage(JSON.stringify({"node": getCurrentNode()}))
lookupWorker.postMessage(JSON.stringify({"node": initialNodes[0]}))

View File

@ -46,19 +46,20 @@ function doPow(metadata, data, difficulty){
data = encoder.encode(data)
}
metadata['c'] = 0
metadata['n'] = Math.floor(Math.random() * Math.floor(10000)) + Math.floor(Math.random() * Math.floor(10000))
metadata['c'] = -9999999
metadata['n'] = Math.floor(Math.random() * Math.floor(10000)) + Math.floor(Math.random() * Math.floor(10000))
var difficultyCounter = 0
while (true){
var difficultyCounter = 0
difficultyCounter = 0
let metadataString = encoder.encode(JSON.stringify(metadata) + "\n")
let arr = new Uint8Array(metadataString.length + data.length)
arr.set(metadataString)
arr.set(data, metadataString.length)
hash = doHash(arr)
hash = doHashHex(arr)
for (var i = 0; i < hash.length; i++){
if (hash[i] == 0){
for (var i = 0; i < difficulty; i++){
if (hash[i] == '0'){
difficultyCounter += 1
if (difficultyCounter === difficulty){
return arr
@ -69,6 +70,9 @@ function doPow(metadata, data, difficulty){
}
}
metadata['c'] += 1
if (metadata['c'] % 10000 == 0){
console.debug(metadata['c'])
}
}
}