Por favor, ¿cómo puedo eliminar el éter que está atascado en un contrato? Si es imposible hacer eso, ¿cuál es la función que me permitirá eliminar ether de un contrato que creé?
Una vez que se ha publicado un contrato, no hay forma de modificarlo, por lo que si no se incluyeron funciones de retiro o autodestrucción, entonces no hay forma de agregarlas al contrato en una fecha posterior, y los fondos quedan efectivamente atrapados en ese contrato para siempre.
Mirando el contrato en el enlace que proporcionó, el contrato 'HashnodeTestCoin' define lo siguiente:
address public fundsWallet; // Where should the raised ETH go?
y en la función constructora esta dirección se asigna al creador del contrato (última línea):
// This is a constructor function
// which means the following function name has to match the contract name declared above
function HashnodeTestCoin() {
balances[msg.sender] = 1000000000000000000000; // Give the creator all initial tokens. This is set to 1000 for example. If you want your initial tokens to be X and your decimal is 5, set this value to X * 100000. (CHANGE THIS)
totalSupply = 1000000000000000000000; // Update total supply (1000 for example) (CHANGE THIS)
name = "HashnodeTestCoin"; // Set the name for display purposes (CHANGE THIS)
decimals = 18; // Amount of decimals for display purposes (CHANGE THIS)
symbol = "HTCN"; // Set the symbol for display purposes (CHANGE THIS)
unitsOneEthCanBuy = 10; // Set the price of your token for the ICO (CHANGE THIS)
fundsWallet = msg.sender; // The owner of the contract gets ETH
}
el contrato parece estar estructurado, por lo que cualquier eth que reciba debe enviarse a la dirección de FundsWallet; no es la mejor manera de hacer las cosas, ¡pero debería haber funcionado!
¿Cambió el nombre del contrato de 'HashnodeTestCoin' y, de ser así, también cambió el nombre de la función constructora para que coincida?
No ha declarado qué Contrato implementó, ni los argumentos que lo aprobó. Si no implementó HashnodeTestCoin (o el nombre que le dio), es posible que la dirección del propietario no se haya asignado correctamente. Si cambió el nombre del contrato pero no actualizó el nombre del Constructor, nunca habría ejecutado el constructor y, por lo tanto, nunca habría asignado su dirección como FundWallet.
Un medio más convencional de asignar propiedad es crear primero un contrato 'Ownable', luego definir 'HashnodeTestCoin' como 'Ownable'; esto aseguraría que su dirección esté asignada al contrato cuando se implementó. el contrato Ownable se vería así:
contract Ownable {
address public owner;
function Ownable() {owner = msg.sender;}
modifier onlyOwner {
if (msg.sender != owner) throw;
_;
}
function transferOwnership(address newOwner) onlyOwner {
if (newOwner != address(0)) {
owner = newOwner;
}
}
Entonces HashnodeTestCoin se declararía de la siguiente manera:
contract HashnodeTestCoin is StandardToken, Ownable {
Todo lo Ether
enviado a su contrato se reenvía inmediatamente al propietario del contrato. Está en el código, compruébalo.
TC8
marica
Victoria