Generieren mehrerer Einzahlungsadressen für ein Konto

Ich möchte so etwas wie eine Crypto-Börse erstellen, bei der ich für jeden Benutzer unterschiedliche eindeutige Einzahlungsadressen generieren muss, damit sie Geld auf ihre Konten senden können, während ich verfolgen kann, wie viel jeder Benutzer eingezahlt hat. Dies ist in anderen Kryptos wie Bitcoin ziemlich einfach. Es scheint jedoch, dass dies in Ethereum unmöglich ist (oder vielleicht irre ich mich).

Das Hauptproblem hier ist, dass, wenn ich mehrere private Schlüssel generiere oder eine HD-Brieftasche verwende und mehrere private Schlüssel daraus speichere, Gelder, die an jede dieser Brieftaschen gesendet werden, mit unterschiedlichen Schlüsseln signiert werden müssen, um ausgegeben zu werden, also muss ich bezahlen eine enorme Transaktionsgebühr (einmal pro Konto), wenn ich versuche, alle Gelder zur Wartung an eine große Brieftasche zu senden.

Also habe ich mich gefragt, ob ich mehrere Einzahlungsadressen generieren kann, die alle einem Konto in Ethereum entsprechen, sodass jeder Benutzer Geld an eine andere Adresse senden kann. Daher kann ich nachverfolgen, welcher Benutzer wie viel gesendet hat und wann ich diese Gelder ausgeben möchte, kann ich unterschreiben die Transaktion mit einem privaten Schlüssel und nur einmal Transaktionsgebühr bezahlen (alle Ether zusammen ausgeben)? Und wenn es völlig unmöglich ist, mehrere Einzahlungsadressen zu haben, die einem Konto entsprechen, was kann ich dann tun?


PS: Ich habe mehrere Fragen wie diese in diesem StackExchange gesehen, aber keine der Antworten hat meine Frage tatsächlich beantwortet. Zögern Sie also bitte, bevor Sie dies als Duplikat markieren

PS2: Ich suche keine Lösung mit intelligenten Verträgen, da dies erfordern würde, dass meine Benutzer Einzahlungen mit speziellen Wallets vornehmen, die Web3 wie Metamask unterstützen. Ich bin mehr daran interessiert zu wissen, wie andere Börsen wie Binance damit umgehen, damit Benutzer einzahlen können aus jeder Art von Brieftasche!!!!

Antworten (1)

Sie versuchen, ein Modell anzuwenden, das hauptsächlich aufgrund seiner Einschränkungen für Bitcoin geeignet ist. Es wird eine umständliche Strategie für Ethereum sein, die seine Stärken übersieht.

Bitcoin: Nicht besonders programmierbar, aber einfach Gelder von mehreren Konten zu fegen. Ethereum: Besonders programmierbar, aber nicht so einfach, Gelder von mehreren Konten zu fegen.

Ethereum hat auch einzigartige Sicherheitsüberlegungen und es ist wichtig zu bestätigen, dass Ihr Kunde über alle Fähigkeiten verfügt, die Ihr Vertrag voraussetzt, wie z. B. die Fähigkeit, eine Transaktion zu bilden und eine Auszahlungsanfrage zu unterzeichnen. Dies ist NICHT der Fall, wenn sie von einer anderen Vermittlungsstelle aus senden, also müssen Sie dies verhindern. Sie benötigen wahrscheinlich in jedem Fall eine Registrierung/KYC, also bestätigen Sie, dass sie die volle Kontrolle über die Konten haben, die sie verwenden werden, und informieren Sie dann den Vertrag, dass sie „genehmigt“ sind, Geld zu senden.

  1. Sie können ein einziges Einzahlungskonto verwenden – alle Gelder zusammen, also müssen Sie nicht fegen.
  2. Sie können wissen, wer es gesendet hat, und Ereignisse ausgeben, aufzeichnen usw. - alles Anforderungen an die Buchhaltung.
  3. Es ist programmierbar - was auch immer als nächstes passiert.

Sie sollten bestätigen, dass Ihre Benutzer eine Transaktion signieren können. Dadurch wird sichergestellt, dass sie in Zukunft mit jeder Vertragsschnittstelle arbeiten können, die Sie ihnen zeigen .

  1. Lassen Sie sie eine Nachricht signieren und senden Sie sie Ihnen außerhalb der Kette (kostenlos). Bestätigen Sie ihre Adresse mit ecrecover.
  2. Jetzt wissen Sie, wer wer ist. Nicht von wo das Geld kam. Woher es kam. Kein Grund, warum ein Benutzer nicht mehrere Konten bestätigen kann (Schritt 1), aber es ist unklug, Gelder von unbekannten Absendern anzunehmen.

Der Kürze halber überspringe ich die Abhebungsfunktion, da Sie die Gelder wahrscheinlich sofort nach Erhalt auf Betriebskonten überweisen werden und Sie möglicherweise einen völlig anderen Vertrag haben, bei dem Sie Gelder zum Abheben senden - oder auf der Grundlage eines Webs an den Benutzer senden Site-Interaktion.

Dies wird nicht als kampfbereiter Produktionsvertrag präsentiert, sondern eher als einfaches Beispiel, um die Vorgehensweise zu zeigen.

pragma solidity 0.5.16;

contract Deposit {

    address payable public wallet;

    mapping(address => bool) public approved;

    event LogApproved(address approver, address approved);
    event LogDeposit(address sender, uint amount);

    function authorize(address allowed) public {
        require(msg.sender == wallet, "Only the owner can do this, e.g. from their admin server.");
        emit LogApproved(msg.sender, allowed);
        approved[allowed] = true;
    }

    function deposit() public payable {
        require(approved[msg.sender], "Unauthorized sender. Please register.");
        emit LogDeposit(msg.sender, msg.value);  // <=== there's your accounting
        wallet.transfer(msg.value);
    }
}

Der Buchhaltungskonzern wird auf der Blockchain verewigt und ist von einem externen Client, zB nodejs, einsehbar. Das Geld geht auf Ihr walletKonto und Sie können von dort aus weitermachen.

Ich hoffe es hilft.

Vielen Dank für Ihre ausführliche Antwort. Obwohl dies ein guter Ansatz zu sein scheint, glaube ich, dass Krypto-Börsen wie Binance diesen Ansatz nicht verwenden. da das Senden von Ether an Binance so abläuft wie das Senden von BTC an Binance. Also, eigentlich habe ich mich gefragt, wie sie dieses Problem für Äther lösen.
Sie können dies sicherlich tun, indem Sie 1) ein Konto erstellen, 2) nach Geld Ausschau halten und 3) das Geld weiterleiten. Der Server verfügt über die Signaturschlüssel für die von ihm erstellten Konten. Der Server sendet von "Mein Konto", Kontostand und zahlt für Benzin.
@RobHitchens. Der von Ihnen zuletzt beschriebene Ansatz entspricht meinen Bedürfnissen. Ich sehe jedoch ein Problem, die Weiterleitung kostet Benzin. Es funktioniert, wenn ETH an Einzahlungsadressen gesendet wird. Was ist, wenn ERC20-Token gesendet werden und die Hinterlegungsadresse keine ETH hat, um mit Gas für die Weiterleitung zu bezahlen?