Estoy usando ethers para interactuar con contratos en Ethereum. Así es como se ve mi método:
const tx = await signer .sendTransaction({ to: contractAddress, value: ethers.utils.parseEther(price), data: hex, gasPrice: ethers.utils.parseUnits(gas, 9), }) Y funciona bien. Pero cada vez que tengo que buscar en Etherscan para encontrar el hexadecimal de transacción y pasarlo al parámetro de data . ¿Es posible simplemente pasar el nombre del método del contrato y los parámetros en lugar de pasar este valor hex ?
¿Tal vez hay algún método en ethers para codificar ese método con parámetros en valor hexadecimal?
Lo que necesitas es el contrato ABI. Por lo general, está escrito como un objeto json que puede importar en su secuencia de comandos js, o puede escribirse así (human-readable-ABI):
const contractABI = [ "function foo(uint256 bar) external", // other functions or events ... ]El ABI contiene todos (o algunos) métodos de un contrato y cómo codificarlos/descifrarlos.
Con la ABI puede crear un objeto de contrato como este:
const contract = new ethers.Contract(contractAddress, contractABI, provider);que se puede utilizar para enviar transacciones como esta:
const my_bar = 123 // example const tx = await contract.connect(signer).foo(my_bar, { value: ethers.utils.parseEther(price), gasPrice: ethers.utils.parseUnits(gas, 9), })