Wie kann ich Ether in der Wallet-Adresse erhalten und bei erfolgreicher Einzahlung an eine andere Adresse weiterleiten?

Ich möchte eine Funktion implementieren, bei der Benutzer Ether an die Brieftaschenadresse (0x123) senden und bei erfolgreicher Einzahlung automatisch an meine kalte Brieftasche (0x983) übertragen werden müssen.

Ich kann diese Funktionen mit Hilfe von Smart Contracts erreichen, aber wie kann ich dies mit einer einzigen Wallet-Adresse erreichen, ohne Smart Contracts einzubeziehen?

Abgesehen von intelligenten Verträgen könnte es einfacher sein, ein Skript zu schreiben, das web3 aufruft, um den Kontostand zu überwachen, den Überweisungsbetrag (abzüglich der Benzinkosten) zu berechnen und die Überweisungstransaktion zu senden.
Wie kann man mit web3 den Kontostand einer Adresse kontinuierlich überwachen?

Antworten (3)

Nach Diskussionen in den Kommentaren habe ich zufällig ein Bash-Testskript geschrieben, das fast genau dasselbe tut. Beachten Sie, dass dies ein schneller Hack ist und die folgenden Probleme aufweist

  • es ist sehr unsicher (z. B. es lässt die persönlichen Konten für immer entsperrt). Ich habe es nur zum Testen ausgeführt, daher kein Problem für mich. Aber bitte nicht unverändert in der Produktion verwenden.
  • Die TO_ADDR darf nicht von geth verwaltet werden (dh nicht unter den Ergebnissen von "geth account list"), sonst wird es eine tote Schleife sein. Wieder war es ein schneller Hack.
  • Überhaupt keine Leistungsüberlegung: eine dumme Schleife, die alle 60 Sekunden die Überprüfung durchführt.

Code:

GETH=<your geth path>
TO_ADDR=<destination addr>
for ADDR in $(${GETH} account list | grep -o -e'\{[^}]\+\}' | tr -d '}' | tr -d '{');do
    echo "unlocking '$ADDR'"
    echo "web3.personal.unlockAccount('$ADDR', '<your password>', null);" | ${GETH} attach http://localhost:8545
done

SRC=$(cat <<EOF
addrs = web3.eth.accounts;
to_addr = '$TO_ADDR';
gasPrc=web3.eth.gasPrice;
cost = 21000 * gasPrc;
for (i = 0; i < addrs.length; i++) {
    balance = web3.eth.getBalance(addrs[i]);
    send_val = balance - cost;
    if (send_val > 0) {
        val=web3.fromWei(send_val, "ether");
        web3.eth.sendTransaction({from: addrs[i], to: to_addr, value: web3.toWei(val, "ether"), gasPrice: gasPrc, gas: 21000});
        console.log("Transferring ", web3.toWei(val, "ether"), " wei from ", addrs[i], " to ", to_addr, " gas price ", gasPrc);
    } else {
        console.log("Cannot Transfer ", send_val, " wei from ", addrs[i], " to ", to_addr);
    }
}
EOF
)

while true; do
    if echo "${SRC}" | ${GETH} attach http://localhost:8545 | tee monitor.log | grep -e'Transferring ';then
        date | mail -s 'ether automatically transferred' <your email>
    fi
    sleep 60
done

Du kannst nicht. Wallets enthalten keine Funktionalität ohne Smart Contracts. Ich sehe auch keinen Grund , Smart Contracts nicht einzubeziehen.

Bei Krypto-Börsen hinterlegen wir den Ether oder Bitcoin in der Wallet-Adresse. Nach erfolgreicher Einzahlung wird er in die Cold-Wallet der Börse übertragen. Das möchte ich auch erreichen.
Das ist keine Funktionalität, die in den Brieftaschen vorhanden ist. Es wird alles außerhalb der Blockchain erledigt – es sei denn, es gibt einen Smart Contract. Wann immer also ein System eine Zahlung an eine Brieftasche erkennt, wird diese an eine andere (kalte) Brieftasche übertragen. Das ist natürlich alles spekulativ, die Börsen teilen nicht wirklich Details darüber, wie ihre Systeme funktionieren.

Könnten Sie mir das ein wenig mehr erklären, wie man dieses Skript in einer Cold Wallet wie Atomic Wallet ausführt, ist das möglich? Ich könnte sicherlich die Hilfe gebrauchen, 2 meiner Brieftaschen wurden irgendwie gehackt und in einer davon hatte ich 800 Uni-Token von ihnen und sie wurden ab heute abgehoben, das sind ungefähr 25.000 um ihn zu fangen und hoffentlich, wenn ich es tue, ist es eine Menge Ethereum, er schuldet mir 25.000, bitte, wenn Sie das mit mir teilen könnten apple ones comadores hey ich würde mich über deine hilfe freuen wenn du könntest danke kev