So geben Sie den Gaszahler an

Wie kann ich das Konto angeben, das für Gas bezahlt, sagen wir, 0x1 sendet Token an 0x2, aber ich möchte, dass 0x3 (ich habe einen privaten Schlüssel) für TX-Gas bezahlt?

Antworten (3)

Ich nehme an, das kannst du nicht. Derjenige, der die Transaktion sendet, sollte für das verbrauchte Gas bezahlen.

Was Sie tun können, ist, den Preis des verbrauchten Gases zu berechnen, es in Ether umzuwandeln und diesen Wert von 0x3 an 0x1/0x2 zurückzusenden.

Lassen Sie mich das näher erläutern:

Wenn Sie dies automatisch tun möchten (um die Sendegebühr zu erstatten), können Sie dafür ein einfaches Skript schreiben. Ich werde Ihnen vorschlagen, die Web3.js zu überprüfen, da sie für die Lösung solcher Probleme viel bequemer ist. Ihr Algorithmus sollte also so funktionieren:

  1. Richten Sie eine Art Balance Watcher für das erste Konto (0x1) ein. (überprüfen Sie die zugehörige Antwort , wie das geht). Wenn sich also Ihr 0x1- Kontostand ändert, sollten Sie überprüfen, ob die Transaktion an 0x2 gesendet wurde

  2. Wenn Sie sehen, dass die erfolgreiche neue Ether-Transfertransaktion angezeigt wird, verwenden Sie Web3, um den Transaktions-Hash abzurufen, und holen Sie sich dann die TX-Gebühr (verbrauchtes Gas) und wandeln Sie sie in Wei um.

  3. Senden Sie den umgerechneten Betrag von 0x3 nach 0x1 erneut mit Web3.

Das ist die ziemlich direkte und einfache Art, ein solches Problem zu lösen. Beachten Sie jedoch, dass Sie mehr ausgeben, da 0x3 auch eine Gebühr für Rückerstattungen zahlen muss.

danke, also wird es immer von - Adresse abgerechnet?
Irgendwie erklärst du bitte deine letzte Aussage? ist, den Preis des verbrauchten Gases zu berechnen, es in Ether umzuwandeln und diesen Wert von 0x3 an 0x1/0x2 zurückzusenden. ??? Danke
Ja, aber dazu muss man einen einfachen Algorithmus schreiben. Überprüfen Sie web3. Oder Sie können eine solche Logik über Smart Contracts schreiben, denke ich.
Ich verstehe, dass ich einfach nicht verstehe, was Sie vorgeschlagen haben
Ich habe die Antwort aktualisiert
Ich denke an eine kleine Diff-Lösung. Ich bekomme die Gasmenge nach dem Senden von 0x3 bis 0x1 benötigte Menge, damit es an 0x2 senden kann
Meine Anweisungen sind nicht streng, ich zeige Ihnen nur die Idee, wie Sie das umsetzen können. In der Tat können Sie es anpassen, wie Sie möchten.

Es ist nur möglich, wenn 0x1 ein Vertrag ist. 0x3 kann dann eine Methode auf 0x1 aufrufen, die die Tokens an 0x2 sendet.

Wenn 0x1 kein Vertrag sein kann, sehen Sie sich die Antwort von someart an

Ich beantworte meine eigene Frage. Ich konnte from_address für alle Transaktionen so angeben

exports.getContract = function (token_name,private_key,owner_address,contract_address,owner_private) { 
       let cont_address=token_name+"_address";
       //read ABI dynamically 
       const abi = fs.readFileSync('erc20_'+token_name+'Abi.json', 'utf-8');
       // tricky part add user private key to interact with his/her wallet
       web3.eth.accounts.wallet.add(private_key);
       // This line helps to add general wallet which will pay for gas
      web3.eth.accounts.wallet.add(owner_private);
      const contract = new web3.eth.Contract(JSON.parse(abi), contract_address,{from: owner_address, gas: 1000000}); 
      return contract

In diesen Szenarien konnte ich Token senden und empfangen, ohne dass ich ehter in meiner Brieftasche hatte. Ich hoffe es hilft