web3.js neue Konten ohne lokalen Knoten!

Ich versuche, eine Dapp zu entwickeln, aber da ich einen kleinen Server (Windows Sever 2012 R2) mit begrenztem Speicherplatz betreibe, möchte ich keinen Ethereum-Knoten hosten/installieren oder auf meinem Server aufbauen, da viele von Ihnen wissen Es dauert viele GB Festplatte.

Meine "dapp" ist jedoch eine einfache HTML-Seite zur Registrierung. Im Wesentlichen ermöglicht diese Seite Benutzern, sich zu registrieren, und jedes Mal, wenn eine Registrierung erfolgt; Ich muss eine neue öffentliche Ethereum-Adresse mit entsprechenden privaten Schlüsseln für den Benutzer benennen/erstellen. Ich plane, diese Informationen in meiner Datenbank zu speichern (urteilen Sie nicht). Da ich keinen Knoten auf meinem Server hoste, weiß ich, dass ich einen Drittanbieter brauche, um mich mit dem Mainnet in der Blockchain zu verbinden, deshalb verwende ich infura! Ich weiß, dass einige Entwickler sagen, dass Sie Wallets erstellen können mit: web3.eth.accounts.create()aber Tatsache ist, dass ich diesen Code in node.js manuell verwenden kann und ich kann mit dem folgenden Code problemlos neue Wallets erstellen:

var Web3 = require('web3');     
var infura = "ws://mainnet.infura.io/v3/xxxxxxxxxxxxxxxxxxxxxx";   
var web3 = new Web3(Web3.givenProvider || infura);  
web3.eth.accounts.create(["this is my seed phrase"]);

aber wenn ich versuche, den gleichen Ansatz in HTML zu implementieren, funktioniert es nicht. Ich versuche auch keythereum.js, um Brieftaschen mit dem folgenden Code zu erstellen:

var keythereum = require("keythereum");
var dk = keythereum.create();
var readableAddress = keythereum.privateKeyToAddress(dk.privateKey);
console.log("public address:" + readableAddress);
console.log("private key in hex:" + dk.privateKey.toString('hex')

aber kein Glück. Ich vermute, dass ich möglicherweise andere Abhängigkeiten benötige, damit es funktioniert. Kann mich bitte jemand anleiten?

Das ist der Code meiner Seite!

    <!DOCTYPE html>
    <html>
        <head>  
    <title>Test</title>                   
    <script src="js/web3.min.js" type="text/javascript"></script>
    <script src="js/keythereum.min.js" type="text/javascript"></script>

<scrip> <!-- keythereum.js code -->
var keythereum = require("keythereum");
var dk = keythereum.create();
var readableAddress = keythereum.privateKeyToAddress(dk.privateKey);
console.log("public address:" + readableAddress);
console.log("private key in hex:" + dk.privateKey.toString('hex')
</script>

<script> <!-- web3.js code -->
var Web3 = require('web3');      
var infura = "ws://mainnet.infura.io/v3/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";   
var web3 = new Web3(Web3.givenProvider || infura);  
web3.eth.accounts.create(["this is my seed phrase"]);   
</script>
    </head>
<body>
<h1>Registration</h1>
</body>
</html>

Fehler, den ich bekomme:

Fehler: Angegebene Adresse "undefiniert" ist ungültig, der Groß-/Kleinschreibungstest ist fehlgeschlagen oder es handelt sich um eine indirekte IBAN-Adresse, die nicht konvertiert werden kann. web3.min.js:1:349717

Der Fehler scheint nichts mit Ihrem Code zu tun zu haben. Können Sie die genaue Zeile bestimmen, die diesen Fehler erzeugt?
Es zeigt web3.min.js:1:349717
Ich habe diese Zeile in der ersten Fehlermeldung gesehen, weil Sie die minimierten Versionen von web3 verwenden. Können Sie es mit unminifizierten Versionen versuchen? Auch welche Zeile Ihres Codes erzeugt diese Fehlermeldung? (Versuchen Sie, Zeilen auszukommentieren, bis Sie es finden).
Ich habe web3.min.js in web3.js geändert, wie Sie es empfohlen haben, ich habe auch die Beta 36-Version auf 34 heruntergestuft, weil es in der letzten Version keine web3.js-Datei gibt. Jetzt mit dem gleichen Code habe ich den folgenden Fehler: " ReferenceError: require is not defined "
Sie müssen require nicht von einer Webseite verwenden, wenn web3.js geladen wird, wird ein Web3-Objekt erstellt (dasselbe gilt für keythereum).
Wenn ich diese Variable aus dem Code nehme, funktioniert es nicht. Können Sie ein echtes Beispiel nennen, um zu sehen, wie sie es tun?
Hier ist ein Artikel mit einem Beispiel für den Zugriff auf web3 von einer HTML-Seite medium.com/@yangnana11/…

Antworten (2)

Ich würde vorschlagen, das web3-eth-accountsPaket für die Kontoerstellung zu verwenden

const Accounts = require('web3-eth-accounts');
const accounts = new Accounts();

const { address, privateKey } = accounts.create();
Adler. Der Code, den Sie teilen, kann in HTML ohne Node oder Geth implementiert werden?
@Mula ja, das kannst du
Ich schätze Ihre Eingabe, aber Ihr Code funktioniert nicht.
höchstwahrscheinlich haben Sie Ihrer Seite kein Skript hinzugefügt, es gibt CDN, das Sie verwenden können jsdelivr.com/package/npm/web3-eth-accounts

Die Bibliothek erstellt automatisch ein Keythereum-Objekt. Versuchen Sie diesen Code:

var dk = keythereum.create();
var readableAddress = keythereum.privateKeyToAddress(dk.privateKey);
console.log("public address:" + readableAddress);
console.log("private key in hex:" + dk.privateKey.toString('hex'));