Wie kann ich einem Konto erlauben, von einem anderen Konto abzuheben?

Das Ziel ist es, einen Vertrag zu erstellen, der es Partei B ermöglicht, nach einer bestimmten Formel vom Konto von Partei A abzuheben. Ich möchte kein Escrow-Modell verwenden, sondern nur:

  1. Lassen Sie A bestätigen, dass sie damit einverstanden sind, dass B sich zu einem späteren Zeitpunkt zurückzieht.
  2. Legen Sie eine Schwelle fest, wie viel/lange B abheben kann.

Gibt es dafür Beispiele oder Best Practices?

Antworten (3)

Sie können nicht direkt vom Konto einer anderen Person abheben. Sie können jedoch Smart Contracts erstellen, in denen A das Geld einzahlen kann. Dann darf B das Geld für einen bestimmten Zeitraum aus dem Smart Contract abheben. Wenn B das Geld nicht abgehoben hat und die Frist abgelaufen ist, kann A das Geld aus dem Smart Contract abheben

Ich empfehle die Verwendung eines Tresors. Sie können OpenZeppelin RefundVault überprüfen. Benutzer senden einige Gelder an diesen Tresor und abhängig von Ihrer Geschäftslogik können Benutzer eine Rückerstattung anfordern und Geld abheben.

https://github.com/OpenZeppelin/openzeppelin-solidity/blob/v1.10.0/contracts/crowdsale/distribution/utils/RefundVault.sol

Für ERC20-Token können Sie die approveFunktion verwenden, um jemand anderem zu erlauben, sich von Ihrem Token-Bestand abzuheben:

https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md#approve

Ermöglicht _spenderdie mehrfache Abhebung von Ihrem Konto bis zum _valueBetrag. Wird diese Funktion erneut aufgerufen, überschreibt sie das aktuelle Aufmaß mit _value.

Für Ether können Sie so etwas wie eine Brieftasche mit mehreren Signaturen einrichten, in der Einzelpersonen Zugriff auf dieselben Gelder haben, die in diesem Vertrag gespeichert sind. Dieser Vertrag funktioniert möglicherweise nicht sofort so, wie Sie es beabsichtigen, sollte aber ein guter Anfang sein:

https://github.com/ConsenSys/MultiSigWallet

Cool, danke! Ich nehme an, ich könnte auch WETH anstelle der Multisig-Wallet verwenden?
Ich bin mit WETH nicht sehr vertraut, aber ich gehe davon aus, dass Sie Ihre Frage selbst beantworten können, da Sie derjenige sind, der nach einer bestimmten Funktionalität sucht.