Meine Frage ähnelt der von How to use sendTransaction to send ERC20 tokens through Metamask? . Ich habe einen Vertrag und sende derzeit eine Transaktion an diesen Vertrag über Metamask mit diesem Code:
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],
});
Jetzt möchte ich die Transaktion von einem benutzerdefinierten Token senden, und gemäß der Antwort von Hamza Ahmed im obigen Link muss ich dazu den Parameter „value“ entfernen und einige davon senden
contractInstance.transfer.getData(address, amount);
im 'data'-Parameter.
Das Problem ist, dass ich das senden muss
abiInterface.encodeFunctionData('myPayableFunction', [type, level]);
im Datenparameter, um mit einer Funktion in meinem Vertrag zu interagieren.
Die Frage ist also, wie kann ich Token zusammen mit den benutzerdefinierten Daten senden, um mit der Vertragsfunktion zu interagieren?
ERC-20 unterstützt das Senden von Token mit benutzerdefinierten Daten nicht. Dafür benötigen Sie einen anderen Token-Standard .
Was ERC-20 bietet, sind zwei Transaktionsmuster
approve()
einem Smart Contract, Token auszugebentransferFrom()
vom Benutzerkonto ausgeführt
Robson Silva
Mikko Ohtamaa