Mi pregunta es similar a ¿Cómo usar sendTransaction para enviar tokens ERC20 a través de Metamask? . Tengo un contrato y actualmente envío una transacción a este contrato a través de Metamask con este código:
var abiInterface = new ethers.utils.Interface(this.abi);
var functionData = abiInterface.encodeFunctionData('myFunction', [type, level]);
const transactionParameters = {
nonce: '0x00', // ignored by MetaMask
gasPrice: ethers.utils.hexlify(ethers.utils.parseEther(GlobalConstants.gasPrice)), // customizable by user during MetaMask confirmation.
gas: GlobalConstants.gas, // customizable by user during MetaMask confirmation.
to: this.contractAddress, // Required except during contract publications.
from: ethereum.selectedAddress, // must match user's active address.
value: ethers.utils.hexlify(ethers.utils.parseEther(price.toString())), // Only required to send ether to the recipient from the initiating external account.
data: functionData, // Optional, but used for defining smart contract creation and interaction.
chainId: GlobalConstants.chain, // Used to prevent transaction reuse across blockchains. Auto-filled by MetaMask.
}
const txHash = await ethereum.request({
method: 'eth_sendTransaction',
params: [transactionParameters],
});
Ahora quiero enviar la transacción desde un token personalizado y, de acuerdo con la respuesta de Hamza Ahmed en el enlace de la pregunta anterior, para hacerlo necesito eliminar el parámetro 'valor' y enviar algunos como este
contractInstance.transfer.getData(address, amount);
en el parámetro 'datos'.
El problema es que necesito enviar esto.
abiInterface.encodeFunctionData('myPayableFunction', [type, level]);
en el parámetro de datos, para interactuar con una función en mi contrato.
Entonces, la pregunta es, ¿cómo puedo enviar tokens junto con los datos personalizados para interactuar con la función de contrato?
ERC-20 no admite el envío de tokens con datos personalizados. Para eso, necesita un estándar de token diferente .
Lo que ofrece ERC-20 es un patrón de dos transacciones
approve()
para permitir que un contrato inteligente gaste tokenstransferFrom()
desde la cuenta de usuario
roberto silva
mikko ohtamaa