Поле отправки транзакций «от» должно быть определено с помощью Infura web3.

когда я пытаюсь отправить свою транзакцию с помощью инфуры, я получаю эту ошибку

      "The send transactions "from" field must be defined" 

Моя проблема - мой объект web3. Когда я использовал Metamask и свое приложение со страницы Google Chrome, у меня не было проблем

  App.web3Provider = web3.currentProvider
  web3 = new Web3(web3.currentProvider)

Теперь, используя Truffle, мне нужно взаимодействовать со своим смарт-контрактом без метамаски.

Я получаю свой web3 от инфуры.

    App.web3Provider = new Web3.providers.HttpProvider("https://ropsten.infura.io/v3/2a8xxxxxxxxxxxxxxx")
    web3 = new Web3(App.web3Provider)

(ОБНОВЛЕНИЕ) Итерация с моим смарт-контрактом

    const partecipazioneContest = await $.getJSON('File.json')
    App.contracts.PartecipazioneContest = TruffleContract(partecipazioneContest)
    App.contracts.PartecipazioneContest.setProvider(App.web3Provider)
    App.partecipazioneContest = await App.contracts.PartecipazioneContest.deployed()

Ошибка при совершении транзакции:

  await App.partecipazioneContest.addUser(parameters);

Я думаю, моя проблема в том, что он не загружает мою учетную запись, поэтому я создаю свою учетную запись из своего закрытого ключа и получаю правильный адрес, но когда я пытаюсь получить свою учетную запись с помощью функции getAccount(), учетные записи пусты.

    await web3.eth.accounts.privateKeyToAccount('0x33434XXXXXXXXXXX13');
    web3.eth.getAccounts().then(function(acc){ 
      accounts = acc 
      console.log(accounts)
      alert(" getAccounts " + accounts)

    })

Как загрузить мой web3, возвращенный из инфуры, с моими учетными записями и всей информацией, которая мне нужна для взаимодействия со смарт-контрактами?
Я хотел бы взаимодействовать со своим Смарт-контрактом с моим кошельком на Metamask, минуя инфуру

Вам необходимо разблокировать свою учетную запись на Infura, чтобы Truffle мог получить ее оттуда.
@goodvibration Это возможно? Я читаю: «Infura не поддерживает «разблокировку» учетных записей. Вместо этого пользователи должны отправлять уже подписанные необработанные транзакции с помощью eth_sendRawTransaction». infura.io/docs/ethereum/json-rpc/ratelimits
Нет, конечно, это невозможно, так как любой другой человек, подключенный к этому узлу Infura, сможет использовать вашу разблокированную учетную запись по своему усмотрению.
@goodvibration, так что у тебя есть какие-нибудь предложения? У меня не было обновления для взаимодействия с моим смарт-контрактом.
Конечно, точно так же, как вам было предложено в документации Infura, на которую вы ссылались выше, — подпишите транзакцию с помощью закрытого ключа вашей учетной записи, а затем вместо этого отправьте уже подписанную транзакцию.

Ответы (1)

Вы можете использовать провайдер Web3.js с Truffle HDWalletProvider .

HDWalletProvider является оболочкой базового провайдера и позволяет легко использовать send()транзакции ETH и смарт-контрактов с существующими API-интерфейсами web3.js и контрактов.

  • Оберните провайдера web3 с помощью HDWalletProvider
  • Импортируйте свои закрытые ключи в HDWalletProvider
  • Взаимодействовать со смарт-контрактами и т. д., установив send({from: ...})учетную запись, которая обрабатывает импортированные закрытые ключи.