Tengo un token creado con la biblioteca OpenZeppelin. Uso el contrato CappedToken.
mi código es:
pragma solidity ^0.4.18;
import 'openzeppelin-solidity/contracts/token/ERC20/CappedToken.sol';
contract YLBToken is CappedToken {
string public name = "My Token Beta";
string public symbol = "MTB";
uint8 public decimals = 18;
function YLBToken(uint256 cap) CappedToken(cap) {
}
}
Usando trufa lo compilo y pruebo. Emigré a Ropsten.
He creado una página web para ejecutarlo.
<html>
<head>
<script src="https://cdn.jsdelivr.net/gh/ethereum/web3.js/dist/web3.min.js"></script>
<script type='text/javascript'>
var deployedContract;
const ADDRESS = "0xcbcc819866a24a777b0c076d4922c127de9ecb06";
const ABI = MY_ABI;
// Init and detect metamask
window.addEventListener('load', function () {
if (typeof web3 !== 'undefined') {
web3 = new Web3(web3.currentProvider);
currentAccount = web3.eth.accounts[0];
} else {
// set the provider you want from Web3.providers
web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:7545"));
console.log("Metamask or similar not detected");
}
deployedContract = web3.eth.contract(ABI).at(ADDRESS);
deployedContract.mint(currentAccount, parseInt(1000) * 1000000000000000000, { from: currentAccount, gasPrice: web3.toWei(1, 'gwei') }, function (error, result) {
if (!error) {
console.log("Mint result = " + result);
}
else {
console.log(error);
}
});
})
</script>
</head>
<body>
</body>
</html>
Espero que Metamask se abra y después de hacer clic en enviar para acuñar 1000 tokens en la dirección del propietario, solo para probar funciona bien. Lo tengo ejecutándose en un servidor web.
Pero esto es lo que muestra Metamask:
No tengo idea de por qué Metamask muestra este mensaje. Usando la prueba de trufa, la función de menta funciona bien. Usar Metamask apuntando a localhost:8545 y ejecutar testrpc en una consola también funcionó bien.
¿Alguien puede señalarme una solución?
Respondiendo a mi propia pregunta:
El mensaje "Error de transacción. Excepción lanzada en el código del contrato" aparece cuando se activan algunos de los "requisitos" en su código de solidez.
En mi caso, estaba configurando un límite en el archivo de migración de trufa de 10.000 y al acuñar estaba usando:
parseInt(1000) * 1000000000000000000
debido a los 18 decimales.
Entonces 1000000000000000000000000 > cap y se arrojó el error