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.

Probando una función pagable en Solidity

Así que estoy tratando de probar una función pagable en el siguiente contrato inteligente aquí utilizando el marco de trabajo truffle:

pragma solidity ^0.6.6 
contract FundMe {
    using SafeMathChainlink for uint256;
mapping(address => uint256) public addressToAmountFunded;
address[] public funders;
address public owner;
AggregatorV3Interface public priceFeed;

constructor(address _priceFeed) public {
    priceFeed = AggregatorV3Interface(_priceFeed);
    owner = msg.sender;
}

function fund() public payable {
    uint256 mimimumUSD = 50 * 10**18;
    require(
        getConversionRate(msg.value) >= mimimumUSD,
        "¡Necesitas gastar más ETH!"
    );
    addressToAmountFunded[msg.sender] += msg.value;
    funders.push(msg.sender);
}
Específicamente quiero probar la función pagable, y he visto algunas cosas en internet donde las personas crean otros contratos con saldos iniciales y luego envían algo de eth a su contrato de prueba. Pero me gustaría simplemente tomar una billetera local de ganache, enviar algo de eth al contrato y luego probar eso. Si alguien pudiera mostrarme algún código de prueba en JavaScript para entender esto sería muy apreciado!
Tags:  ,

Answer

  1. Avatar for davy.ai

    Para probar la función payable en el contrato FundMe proporcionado utilizando el framework Truffle, puedes seguir los siguientes pasos:

    1. Instala Truffle y Ganache si aún no lo has hecho.
    2. En tu archivo truffle-config.js, asegúrate de que la red de desarrollo está configurada para usar tu instancia local de Ganache:

      module.exports = {
       networks: {
         development: {
           host: "127.0.0.1",
           port: 8545,
           network_id: "*"
         }
       }
      };
      

    3. En tu archivo de prueba, puedes crear una nueva instancia del contrato FundMe y llamar a la función fund con una cierta cantidad de ether:
      const FundMe = artifacts.require("FundMe");
      
      contract("FundMe", async accounts => {
       it("should allow funding with minimum USD value", async () => {
         const fundMeInstance = await FundMe.deployed();
         const minimumUSD = 50 * 10**18;
         const ethAmount = web3.utils.toWei("1", "ether"); // o cualquier otra cantidad que desees probar
         const conversionRate = await fundMeInstance.getConversionRate(ethAmount);
         assert(conversionRate >= minimumUSD, "La tasa de conversión está por debajo del valor mínimo en USD");
         await fundMeInstance.fund({ from: accounts[0], value: ethAmount });
         const amountFunded = await fundMeInstance.addressToAmountFunded(accounts[0]);
         assert(amountFunded.eq(ethAmount), "La cantidad financiada es incorrecta");
       });
      });
      

      Esta prueba crea una nueva instancia del contrato FundMe, verifica que la tasa de conversión esté por encima del valor mínimo requerido en USD, financia el contrato con una cierta cantidad de ether utilizando la función fund, y verifica que la cantidad financiada sea correcta para la dirección del sender.

    4. Ejecuta la prueba con truffle test. Ganache debería iniciar automáticamente y crear un nuevo conjunto de cuentas de prueba que puedes usar. La función fund enviará ether desde la primera cuenta del arreglo accounts, así que asegúrate de que esa cuenta tenga suficiente ether para realizar la prueba.

    ¡Espero que esto te ayude! Avísame si tienes alguna otra pregunta.

Comments are closed.