Acceso a direcciones testrpc desde pruebas de solidez

Estoy consultando los documentos de truffle sobre cómo probar contratos directamente en solidez.

http://truffleframework.com/docs/getting_started/solidity-tests

Me gustaría encontrar una forma de referirme a las cuentas testrpc existentes en mis pruebas. Algo como:

pragma solidity ^0.4.11;

import "truffle/Assert.sol";
import "truffle/DeployedAddresses.sol";
import "../contracts/BAToken.sol";

contract TestBAToken {
  function testNewBATokenNotFinalized() {
    address companyFundAddress = addresses[1];  // <-- I'd like this to be a predefined testrpc account
    address userFundAddress = addresses[2];
    uint256 startBlock = block.number - 100;
    uint256 endBlock = block.number + 100;
    BAToken ba = new BAToken(companyFundAddress, userFundAddress, startBlock, endBlock);
    Assert.equal(ba.isFinalized, false, "Token sale shouldn't be finalized upon initialization.");
  }
}

es posible? Si no es así, ¿alguien tiene buenas recomendaciones sobre cómo hacer referencia a las cuentas existentes durante la prueba?

Respuestas (1)

Puede agregar directamente las direcciones en el contrato de solidez en lugar de addresses[1]y addresses[2]. Si no desea hacer eso, puede declarar algunas variables en el contrato para las direcciones e inicializarlas como parte del constructor como se muestra a continuación.

contract TestBAToken {
  address companyFundAddress;
  address userFundAddress;
  function TestBAToken(address address1, address address2) {
    companyFundAddress = address1;
    userFundAddress = address2;
  }
  function testNewBATokenNotFinalized() {
    uint256 startBlock = block.number - 100;
    uint256 endBlock = block.number + 100;
    BAToken ba = new BAToken(companyFundAddress, userFundAddress, startBlock, endBlock);
    Assert.equal(ba.isFinalized, false, "Token sale shouldn't be finalized upon initialization.");
  }
}

Si desea declarar las direcciones dentro de esa función solo en lugar del contrato completo. Puede pasarlos como argumentos para la testNewBATokenNotFinalizedfunción.

La forma de implementar depende de cómo le gustaría que fuera el contrato y qué debería hacer.

Gracias, pero ¿qué direcciones usaría la persona que llama? ¿Algún valor codificado de forma rígida?
Depende de qué companyFundAddress y userFundAddress desee configurar para el nuevo BAToken que está creando.
La razón por la que pregunto es que mis pruebas generalmente se ejecutan en el contexto de la red testrpc, que genera un conjunto de diez cuentas con ETH para probar. De alguna manera necesito inyectar este contexto en muchas de mis pruebas no triviales para que funcionen. ¿Cómo hago esto cuando la solidez no tiene conocimiento de las cuentas de testrpc?
Puede pasar las direcciones de cuenta como parte del constructor del contrato. Como puede ver, el constructor aquí tiene 2 parámetros dirección1 y dirección2 que se pueden inicializar. Puede consultar esto para saber cómo implementar contratos en truffle con parámetros de constructor. ethereum.stackexchange.com/questions/10830/…