Cómo eliminar el éter de los contratos

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é?

¿Podrías poner un enlace al contrato? ¿Incluyó alguna función de retiro o autodestrucción en el contrato cuando lo escribió?
TC8, no lo incluí porque no sé cómo hacerlo. Este es el enlace al contrato que copié hashnode.com/post/…
Si pudieras, pega la dirección del contrato?

Respuestas (2)

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 {
TC8, muchas gracias. No he verificado mi contrato, pero es exactamente así, pero por supuesto cambié el nombre y otras cosas. Pero cuando se compraron todos los tokens y envié ether a la dirección del contrato, dejó de ether. No envió tokens porque terminó, pero detuvo el éter que se envió. Así que estoy buscando una manera de agregar una función de retiro que pueda usar para retirar el éter atascado en el próximo contrato que planeo implementar... Exactamente así.
Esta página puede ser útil para su próximo contrato: ¡hay algunas trampas importantes que debe evitar cuando se trata de funciones de retiro!
TC8 No soy bueno con los códigos de solidez y todo eso. Por favor, ¿me puede dar el código de función de retiro que puedo poner en el contrato para retirar el éter atascado? Leí en alguna parte que para retirar, puedes ir a MEW e interactuar con él allí.
Por mucho que me gustaría ayudar a @sissy, me temo que sería contraproducente para mí enviarle la función para que la copie y la pegue en su contrato; si está desarrollando contratos públicos de venta colectiva, ¡Manejaré el dinero de otras personas y recomendaría aprender a codificar correctamente antes de implementar cualquier cosa en la red principal!

Todo lo Etherenviado a su contrato se reenvía inmediatamente al propietario del contrato. Está en el código, compruébalo.