Cómo hacer transacciones sin metamask

Mi cuenta tiene suficiente éter para realizar una transacción. ¿Cómo llamo a una función pagadera que está escrita en solidez? Lo intenté llamando así

    const Web3 = require('web3');

const HDWalletProvider = require('truffle-hdwallet-provider');
const campaign = require('./build/CampaignFactory');



const provider = new HDWalletProvider(
  '12 word mnemonic',
  'https://rinkeby.infura.io/authid',
);
const web3 = new Web3(provider);
const accounts = await web3.eth.getAccounts();
      await campaign.methods.contribute().send({
        from: accounts[0],
        value: web3.utils.toWei(this.state.value, 'ether')
      });

Pero recibo este error "gas intrínseco demasiado bajo". Anteriormente, con la extensión metamask, solía pedir confirmación si hacía clic en enviar desde metamask y luego la transacción solía tener éxito. Ahora, desde que eliminé la extensión de metamask, recibo este error. Quiero hacer esta transacción sin metamask. Es posible de hacer?

Verifique el precio y el límite de gas predeterminados, ya que metamask podría estar poniendo el límite y el precio de gas predeterminados para usted. var Preciogasolina = web3.eth.Preciogasolina; consola.log(gasPrecio.toString(10));
Kherwa impresionante gracias por la respuesta. Ahora puedo realizar transacciones sin metamask.

Respuestas (2)

también puede pasar gasLimit y gasPrice explícitamente.

await campaign.methods.contribute().send({
            from: accounts[0],
            value: web3.utils.toWei(this.state.value, 'ether'),
            gas: 'gasLimit',
            gasPrice: 'gasPriceInWei'
          });

Lo resolví simplemente pasando gas así.

const accounts = await web3.eth.getAccounts();
  await campaign.methods.contribute().send({
    from: accounts[0],
    value: web3.utils.toWei(this.state.value, 'ether'),
    gas: '1000000'
  });