Как указать плательщика газа

как я могу указать учетную запись, которая будет платить за газ, скажем, 0x1 отправляет токены на 0x2, но я хочу, чтобы 0x3 (у меня есть закрытый ключ) платил за газ tx?

Ответы (3)

Я полагаю, вы не можете. Платить за потраченный газ должен тот, кто отправляет транзакцию.

Что вы можете сделать, так это рассчитать цену потраченного газа, преобразовать ее в эфир и отправить это значение обратно в 0x1/0x2 из 0x3.

Позвольте мне объяснить это более подробно:

Если вы хотите сделать это автоматически (чтобы возместить комиссию за транзакцию), вы можете написать простой скрипт для этого. Я предлагаю вам проверить Web3.js, потому что он намного удобнее для решения таких задач. Итак, ваш алгоритм должен работать следующим образом:

  1. Настройте какой-нибудь наблюдатель баланса для первой учетной записи (0x1). (проверьте соответствующий ответ о том, как это сделать). Поэтому, когда баланс вашей учетной записи 0x1 изменяется, вы должны проверить, была ли транзакция отправлена ​​​​на 0x2 .

  2. Если вы видите успешную новую транзакцию передачи эфира, используйте Web3, чтобы получить хэш транзакции, а затем получить комиссию за транзакцию (израсходованный газ) и конвертировать ее в Wei.

  3. Отправьте преобразованную сумму из 0x3 в 0x1 , используя Web3 снова.

Это довольно простой и простой способ решения такой проблемы. Но обратите внимание, что вы потратите больше, потому что 0x3 также должны платить комиссию за возврат.

спасибо, так что он всегда будет заряжаться с адреса?
Someart, кстати, вы, пожалуйста, объясните свое последнее утверждение? заключается в том, чтобы рассчитать цену затраченного газа, преобразовать ее в эфир и отправить это значение обратно в 0x1/0x2 из 0x3. ??? Спасибо
Да, но для этого нужно написать простой алгоритм. Проверьте веб3. Или вы можете написать такую ​​логику через смарт-контракты, я думаю.
Я понимаю, я просто не понимаю, что вы предложили
я обновил ответ
Я думаю о небольшом различном решении. Я получу количество газа после отправки с 0x3 на 0x1 необходимое количество, чтобы он мог отправить на 0x2.
Мои инструкции не строгие, я просто укажу вам, как это реализовать. На самом деле, вы можете адаптировать его по своему усмотрению.

Это возможно, только если 0x1 является контрактом. Затем 0x3 может вызвать метод для 0x1, который отправляет токены на 0x2.

Если 0x1 не может быть контрактом, посмотрите чей-то ответ

Я отвечаю на свой вопрос, я смог указать from_address для всех транзакций, например

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

В этом сценарии я мог отправлять и получать токены, не имея эфира в кошельке. Надеюсь, поможет