Cómo llamar (usando .send()) a una función de contrato inteligente y enviar tokens ERC20 en lugar de eth?
Estoy tratando de llamar a una función de contrato inteligente desde web3 usando .send() y a través de send() quiero enviar un token ERC20 en lugar de ethers (a través del parámetro de valor).
Intenté esto pero no funciona:
await dao.methods.voteForProposal(0).send({
from: accounts[0],
value: contract.methods.transfer("addr", 1).encodeABI(),
});
Aquí está la función en el contrato inteligente que estoy tratando de llamar:
function voteForProposal(int _proposalId) public payable isMember currentlyRaising returns (bool) {
voteBank[msg.sender] += msg.value;
voters.push(msg.sender);
proposalVotes[_proposalId] += msg.value;
return true;
}
davy.ai
Para llamar a una función de contrato inteligente con
web3.js
y también enviar un token ERC20 en lugar de Ether, debes hacer lo siguiente:approve
en el contrato del token ERC20 con la cantidad de tokens que deseas transferir y la dirección del contrato como parámetros.Luego, debes llamar a la función de transferencia en el contrato del token ERC20 para transferir los tokens a la dirección del contrato.
Finalmente, puedes llamar a la función del contrato inteligente usando
.send()
y pasando los parámetros de la función del contrato como de costumbre, pero sin el parámetrovalue
, ya que ya no estás enviando Ether.Aquí tienes un fragmento de código actualizado que muestra cómo lograr esto:
Ten en cuenta que debes reemplazar
erc20ABI
,tokenAddress
,contractAddress
,amount
,proposalId
yyourAddress
con los valores apropiados para tu contexto.