**Hola, chicos ! Solo trato de hacer un contrato para crear un contrato.
Se suponía que era la interfaz ERC-20, así que mi primer contrato para esto.
Pero no sé cómo puedo hacer las funciones _mint y createContract
Tengo errores asi que alguien me puede ayudar? Estaré agradecido** pragma solidez ^0.5.0;
library SafeMath {
function add(uint a, uint b) internal pure returns (uint c) {
c = a + b;
require(c >= a);
}
function sub(uint a, uint b) internal pure returns (uint c) {
require(b <= a);
c = a - b;
}
function mul(uint a, uint b) internal pure returns (uint c) {
c = a * b;
require(a == 0 || c / a == b);
}
function div(uint a, uint b) internal pure returns (uint c) {
require(b > 0);
c = a / b;
}
}
contract SubToken {
function totalSupply() public view returns (uint);
function balanceOf(address tokenOwner) public view returns (uint balance);
function allowance(address tokenOwner, address spender) public view returns (uint remaining);
function transfer(address to, uint tokens) public returns (bool success);
function approve(address spender, uint tokens) public returns (bool success);
function transferFrom(address from, address to, uint tokens) public returns (bool success);
function mint(address from, uint amount) public returns(bool success);
constructor(string memory name,string memory symbol,uint8 decimals,uint256 initialSupply)
public{
mint(msg.sender, initialSupply);
}
event Transfer(address indexed from, address indexed to, uint tokens);
event Approval(address indexed tokenOwner, address indexed spender, uint tokens);
}
contract MainContrat{
mapping(address => uint) _balances;
mapping(address => mapping(address => uint)) allowed;
mapping(address => SubToken) public tokenlist;
address[] public contracts;
address owner = msg.sender;
using SafeMath for uint;
string public symbol;
string public name;
uint8 public decimals;
uint _totalSupply;
constructor(string memory name,string memory symbol,uint8 decimals,uint256 initialSupply) public{
_mint(msg.sender, initialSupply);
}
function _mint(address account, uint256 amount) internal {
//require(account != address(0), "ERC20: mint to the zero address");
_totalSupply = _totalSupply.add(amount);
_balances[account] = _balances[account].add(amount);
//emit Transfer(address(0), account, amount);
}
function createNewContract(string memory name,string memory symbol,uint8 decimals,uint256 initialSupply) public returns(address newContract){
SubToken st = new SubToken(name,symbol,decimals,initialSupply);
contracts.push(st);
return st;
}
}
los errores están aquí: browser/crtcont2.sol:49:19: TypeError: Intentando crear una instancia de un contrato abstracto. Subtoken st = nuevo Subtoken(); ^----------^ browser/crtcont2.sol:14:5: Falta implementación: asignación de función (tokenOwner de dirección, gastador de dirección) devoluciones de vista pública (uint restante); ^------------------------------------------------- ------------------------------------------^ navegador/crtcont2.sol:16 :5: Implementación faltante: función de aprobación (dirección de gasto, tokens uint) devoluciones públicas (bool éxito); ^------------------------------------------------- --------------------------^ navegador/crtcont2.sol:13:5: Falta implementación: función balanceOf(dirección tokenOwner) vista pública devuelve ( saldo de unidad); ^------------------------------------------------- --------------^ browser/crtcont2.sol:18:5: Falta implementación: function mint(dirección de, uint cantidad) public return(bool éxito); ^------------------------------------------------- ------------------^ browser/crtcont2.sol:12:5: Falta implementación: función totalSupply() vista pública devuelve (uint); ^------------------------------------------------^ browser/crtcont2.sol:15:5: Implementación faltante: transferencia de función (dirección a, tokens uint) devoluciones públicas (bool éxito); ^------------------------------------------------- ----------------------^ browser/crtcont2.sol:17:5: Falta implementación: function transferFrom(dirección de, dirección a, uint tokens) retornos públicos (éxito bool); ^------------------------------------------------- ----------------------------------------^ ^------------------------------------------------- ------------------^ browser/crtcont2.sol:12:5: Falta implementación: función totalSupply() vista pública devuelve (uint); ^------------------------------------------------^ browser/crtcont2.sol:15:5: Implementación faltante: transferencia de función (dirección a, tokens uint) devoluciones públicas (bool éxito); ^------------------------------------------------- ----------------------^ browser/crtcont2.sol:17:5: Falta implementación: function transferFrom(dirección de, dirección a, uint tokens) retornos públicos (éxito bool); ^------------------------------------------------- ----------------------------------------^ ^------------------------------------------------- ------------------^ browser/crtcont2.sol:12:5: Falta implementación: función totalSupply() vista pública devuelve (uint); ^------------------------------------------------^ browser/crtcont2.sol:15:5: Implementación faltante: transferencia de función (dirección a, tokens uint) devoluciones públicas (bool éxito); ^------------------------------------------------- ----------------------^ browser/crtcont2.sol:17:5: Falta implementación: function transferFrom(dirección de, dirección a, uint tokens) retornos públicos (éxito bool); ^------------------------------------------------- ----------------------------------------^ Implementación faltante: transferencia de función (dirección a, tokens uint) devoluciones públicas (éxito bool); ^------------------------------------------------- ----------------------^ browser/crtcont2.sol:17:5: Falta implementación: function transferFrom(dirección de, dirección a, uint tokens) retornos públicos (éxito bool); ^------------------------------------------------- ----------------------------------------^ Implementación faltante: transferencia de función (dirección a, tokens uint) devoluciones públicas (éxito bool); ^------------------------------------------------- ----------------------^ browser/crtcont2.sol:17:5: Falta implementación: function transferFrom(dirección de, dirección a, uint tokens) retornos públicos (éxito bool); ^------------------------------------------------- ----------------------------------------^
browser/crtcont2.sol:50:20: TypeError: tipo no válido para el argumento en la llamada de función. Conversión implícita no válida del subtoken del contrato a la dirección solicitada. contratos.push(st); ^^ browser/crtcont2.sol:51:12: TypeError: el contrato de tipo de argumento de retorno SubToken no se puede convertir implícitamente a la dirección del tipo esperado (tipo de la primera variable de retorno). vuelta st; ^^
se supondrá que es mi constructor, pero no sé cómo puedo solucionarlo :(
Parece que para corregir sus errores tendrá que hacer algunas cosas:
Primero, para cada función en SubContract, deberá definirlas. Por ejemplo,
totalSupply()
necesita algo de código que lo acompañe, por lo que el compilador sabe qué hacer cuando llama a esa función. Todos los errores de "interfaz faltante" van con eso. necesitas definir
function totalSupply() public view returns (uint);
function balanceOf(address tokenOwner) public view returns (uint balance);
function allowance(address tokenOwner, address spender) public view returns (uint remaining);
function transfer(address to, uint tokens) public returns (bool success);
function approve(address spender, uint tokens) public returns (bool success);
function transferFrom(address from, address to, uint tokens) public returns (bool success);
function mint(address from, uint amount) public returns(bool success);
A continuación, deberá enviar "st" a una dirección usando "address(st)" en la parte inferior de su código. Donde tu código dice:
contracts.push(st);
return st;
el compilador espera una dirección, así que use esto en lugar de "st"
address(st)
Demirel Furkan
Demirel Furkan