Si alguien crea un contrato inteligente (y es el propietario de ese contrato), ¿es posible que esa persona recopile ETH y otros tokens que se envían a la dirección del contrato inteligente?
Esto solo es posible si el creador de un contrato inteligente lo hace posible. Si un contrato no implementa ninguna función de retiro(), es posible que el propietario no pueda recuperar los fondos.
Esto es una característica, no un error. ¿Le gustaría que el creador del contrato inteligente ether delta retirara todo el ether y los tokens del contrato a su antojo? No.
Un contrato inteligente no tiene ningún propietario o mecanismo de retiro a menos que hayan sido codificados en el contrato. Esto le da a los contratos inteligentes el poder de no confiar: es posible usar contratos sin confiar en el propietario, al comprender cuidadosamente el código del contrato.
Si es autor de un contrato inteligente y desea poder retirar tokens ERC-20, debe realizar 2 pasos.
Paso 1: Agregue esta interfaz (subconjunto de ERC-20) arriba de su contrato
contract Token {
function transfer(address _to, uint _value) returns (bool success);
function balanceOf(address _owner) constant returns (uint balance);
}
Paso 2: Aquí hay una función que puede agregar dentro de su contrato
function withdrawTokens(address tokenContract) external onlyOwner {
Token tc = Token(tokenContract);
tc.transfer(owner, tc.balanceOf(this));
}
Esto supone que se ha escrito y configurado correctamente como owner
. Dado que su contrato puede recibir muchos tipos diferentes de tokens, debe hacerlo withdrawTokens
de cada uno tokenContract
. Si owner
es otro contrato, también debe tener una withdrawTokens
función para evitar que los tokens se atasquen en el owner
contrato.
El código es más simple:
function withdrawEther() external onlyOwner {
owner.transfer(this.balance);
}
Nuevamente, si owner
es otro contrato, también debe tener una withdrawEther
función para evitar que ether se atasque en el owner
contrato.
Otra referencia: Cómo retirar Ether de un contrato
Richard Horrocks
ética