Meine Idee ist, Benutzer zu fragen, welchen Betrag sie einem anderen Benutzer geben möchten. Ich möchte jedoch 5% dieses Betrags nehmen und an eine andere Adresse senden (als Provision für den Website-Betreiber).
Ich weiß, dass der Benutzer zwei Transaktionen bestätigen müsste, aber hat Metamask oder Web3 eine Möglichkeit, Massentransaktionen oder eine Transaktion durchzuführen, die von der anderen abhängig ist?
Wenn ein Benutzer 1 US-Dollar Trinkgeld geben möchte, gehen 95 Cent an den Empfänger und 5 Cent an den Website-Betreiber.
Ich möchte sicherstellen, dass sie beide Transaktionen genehmigen müssen, damit sie durchlaufen werden (dh: sie daran hindern, die Provisionstransaktion nicht zu senden).
Ist dies nur mit Standard-Web3-Transaktionen möglich oder benötige ich einen Smart Contract, der die Provisionstransaktion abwickelt und den Rest an den beabsichtigten Empfänger zahlt?
Am einfachsten ist es wahrscheinlich mit einem Smart Contract dafür. Eine einzelne Transaktion zielt immer nur auf eine Adresse ab, und es gibt keine native Möglichkeit, Batch-Transaktionen durchzuführen.
Einige Wallet-Clients bieten möglicherweise eine Art Batch-Transaktionen an, aber wahrscheinlich sind diese auch nicht das, was Sie brauchen.
Sie können den Benutzer bitten, zuerst die Provisionstransaktionen zu senden und ihm erst danach zu erlauben, die eigentliche Transaktion zu senden. Aber meiner Meinung nach ist dies eine Verschwendung von Transaktionen (und Geld), da Sie dies mit einem Smart Contract und einer einzigen Transaktion problemlos tun können.
Beispiel für eine einfache Provisionsfunktion (wird wahrscheinlich nicht einmal kompiliert, veranschaulicht aber hoffentlich den Punkt):
function pay() payable public {
uint mainPart = msg.value * 95 / 100;
uint commission = msg.value - mainPart;
address(0x123).transfer(mainPart);
address(0x345).transfer(commission);
}
Sie sollten den Payment Splitter-Vertrag von OpenZeppelin einsetzen .
Hier ist der Vertragscode: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.4.0/contracts/finance/PaymentSplitter.sol
Chovy
Lauri Peltonen
Chovy