Tengo un contrato de Token:
pragma solidity ^0.4.24;
import "openzeppelin-solidity/contracts/token/ERC20/StandardToken.sol";
contract MyToken is StandardToken{
string public name = "MyToken";
string public symbol = "MYT";
uint8 public decimals = 10;
uint public INITIAL_SUPPLY = 100000000000000000;
constructor() public {
totalSupply_ = INITIAL_SUPPLY;
balances[msg.sender] = INITIAL_SUPPLY;
}
}
Y las siguientes pruebas:
pragma solidity ^0.4.0;
import "truffle/Assert.sol";
import "truffle/DeployedAddresses.sol";
import "../contracts/MyToken.sol";
contract TestMyToken{
MyToken mytoken;
constructor() public{
mytoken = MyToken(DeployedAddresses.MyToken());
}
// Testing the adopt() function
function testTotalSupply() public {
uint returned = mytoken.totalSupply();
uint expected = 100000000000000000;
Assert.equal(returned, expected, "Total Supply should be 100000000000000000.");
}
function testTransferFrom() public {
address _to = 0x89EAB984AbB3E7Cc0f847dc321fCD9B95a538f05;
bool result = mytoken.transfer( _to, 1);
Assert.isTrue(result, "Transfer should succeed.");
}
}
Estoy usando trufa con Ganache. Cuando ejecuto las pruebas me sale:
truffle test
Using network 'development'.
Compiling ./test/TestMyToken.sol...
TestMyToken
✓ testTotalSupply (58ms)
1) testTransferFrom
> No events were emitted
1 passing (3s)
1 failing
1) TestMyToken
testTransferFrom:
Error: Returned error: VM Exception while processing transaction: revert
at Object.ErrorResponse (/usr/local/lib/node_modules/truffle/build/webpack:/~/web3-core-helpers/src/errors.js:29:1)
at /usr/local/lib/node_modules/truffle/build/webpack:/~/web3-core-requestmanager/src/index.js:140:1
at /usr/local/lib/node_modules/truffle/build/webpack:/packages/truffle-provider/wrapper.js:101:1
at XMLHttpRequest.request.onreadystatechange (/usr/local/lib/node_modules/truffle/build/webpack:/~/web3-providers-http/src/index.js:79:1)
at XMLHttpRequestEventTarget.dispatchEvent (/usr/local/lib/node_modules/truffle/build/webpack:/~/xhr2-cookies/dist/xml-http-request-event-target.js:34:1)
at XMLHttpRequest._setReadyState (/usr/local/lib/node_modules/truffle/build/webpack:/~/xhr2-cookies/dist/xml-http-request.js:208:1)
at XMLHttpRequest._onHttpResponseEnd (/usr/local/lib/node_modules/truffle/build/webpack:/~/xhr2-cookies/dist/xml-http-request.js:318:1)
at IncomingMessage.<anonymous> (/usr/local/lib/node_modules/truffle/build/webpack:/~/xhr2-cookies/dist/xml-http-request.js:289:47)
at endReadableNT (_stream_readable.js:1092:12)
at process._tickCallback (internal/process/next_tick.js:63:19
La dirección:
address _to = 0x89EAB984AbB3E7Cc0f847dc321fCD9B95a538f05;
es una de las direcciones de prueba que proporciona Ganache al inicio.
Por lo que he leído, creo que eso "Error: Returned error: VM Exception while processing transaction: revert"
indica que la dirección no es válida. ¿Está bien? ¿Es un problema con la dirección _to?
¿Cómo trabajo con las direcciones de prueba proporcionadas por Ganache en mis pruebas?
¿Cuál es la forma correcta de probar la transferencia de tokens MyToken (no ether) de una dirección a otra?
Actualizar:
Modifiqué MyToken para que sea Burnable. Luego agregué esta prueba:
function testBurn() public {
mytoken.burn(1000);
uint balance = mytoken.balanceOf(msg.sender);
uint expected = 100000000000000000 - 1000;
Assert.equal(balance, expected, "Balance should be reduced.");
}
Esa prueba también falla. Siento que me estoy perdiendo algo aquí. Las lecturas funcionan bien, pero si trato de modificar los datos, se está revirtiendo.
1) TestMyToken
testBurn:
Error: Returned error: VM Exception while processing transaction: revert
at Object.ErrorResponse (/usr/local/lib/node_modules/truffle/build/webpack:/~/web3-core-helpers/src/errors.js:29:1)
at /usr/local/lib/node_modules/truffle/build/webpack:/~/web3-core-requestmanager/src/index.js:140:1
at /usr/local/lib/node_modules/truffle/build/webpack:/packages/truffle-provider/wrapper.js:101:1
at XMLHttpRequest.request.onreadystatechange (/usr/local/lib/node_modules/truffle/build/webpack:/~/web3-providers-http/src/index.js:79:1)
at XMLHttpRequestEventTarget.dispatchEvent (/usr/local/lib/node_modules/truffle/build/webpack:/~/xhr2-cookies/dist/xml-http-request-event-target.js:34:1)
at XMLHttpRequest._setReadyState (/usr/local/lib/node_modules/truffle/build/webpack:/~/xhr2-cookies/dist/xml-http-request.js:208:1)
at XMLHttpRequest._onHttpResponseEnd (/usr/local/lib/node_modules/truffle/build/webpack:/~/xhr2-cookies/dist/xml-http-request.js:318:1)
at IncomingMessage.<anonymous> (/usr/local/lib/node_modules/truffle/build/webpack:/~/xhr2-cookies/dist/xml-http-request.js:289:47)
at endReadableNT (_stream_readable.js:1092:12)
at process._tickCallback (internal/process/next_tick.js:63:19)
El problema estaba en el constructor:
constructor() public{
mytoken = MyToken(DeployedAddresses.MyToken());
}
Debiera ser:
constructor() public{
mytoken = new MyToken();
}
Gracias a @dwarfu en ConsenSys gitter que encontró la solución.
AVATAR
marca irvine
AVATAR
marca irvine
marca irvine
AVATAR
marca irvine