es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo añadir una cuenta al objeto web3?

Tengo una clave privada y así es como accedo a la cuenta (red de Binance Smart Chain):

const web3 = new Web3('https://bsc-dataseed1.binance.org:443')
const account = await web3.eth.accounts.privateKeyToAccount(pk)

Entonces, tengo un objeto de cuenta:

{ 
  address: '0x...',
  privateKey: '0x...',
  signTransaction: [Function: signTransaction],
  sign: [Function: sign],
  encrypt: [Function: encrypt] 
}

Quiero usar el método send() en la dirección del token BEP-20:

const contract = new web3.eth.Contract(ABI, address)
const tx = await contract.methods.transfer(address, amount).send({
    from: account.address
})

Pero estoy obteniendo un error Error: Returned error: unknown account.

¿Debo firmar cada transacción y luego enviarla?

¿Quizás hay alguna forma en la que el proveedor firme la transacción por mí?

¿Cómo se hace? ¿Cómo agrego un objeto de cuenta a web3.eth.accounts?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, debes firmar cada transacción con tu clave privada antes de enviarla, incluso si tienes el objeto de cuenta.

    Para firmar una transacción con tu objeto de cuenta, puedes usar la función signTransaction:

    const rawTx = {
        to: contractAddress,
        value: amount,
        gas: gasLimit,
        gasPrice: gasPrice,
        nonce: await web3.eth.getTransactionCount(account.address, 'pending')
    }
    
    const signedTx = await account.signTransaction(rawTx)
    const txHash = await web3.eth.sendSignedTransaction(signedTx.rawTransaction)
    

    Este ejemplo crea un objeto de transacción en bruto con los parámetros necesarios, luego lo firma con la función signTransaction de tu objeto de cuenta. Finalmente, la transacción firmada se envía a la red con la función sendSignedTransaction.

    No es necesario agregar tu objeto de cuenta a web3.eth.accounts ya que ya existe dentro de tu código.

Comments are closed.