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!!!!
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.
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 .
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 wallet
Konto und Sie können von dort aus weitermachen.
Ich hoffe es hilft.
F_IVI_L
Rob Hitchens
Sabine