Encontré el siguiente código para fines de propiedad de contratos inteligentes de solidez.
contract owned {
address public owner;
function owned() public {
owner = msg.sender;
}
modifier onlyOwner {
require(msg.sender == owner);
_;
}
function transferOwnership(address newOwner) onlyOwner public {
owner = newOwner;
}
}
Me gustaría saber si es posible rechazar la propiedad de un contrato que es transferido por el propietario de ese contrato a la dirección de su contrato (o su EOA)
La razón por la que hago esta pregunta es para evitar el siguiente escenario
No es posible que una dirección rechace ser utilizada como titular en otro contrato.
Además, el "ataque" que describió no funcionará, ya que un contrato no puede tomar éter o tokens mágicamente de otro contrato o cuenta de propiedad externa.
En el caso de ether, un contrato nunca puede tomar ether de una cuenta de propiedad externa, a menos que la cuenta transfiera ether al contrato (lo que requiere una transacción regular). En caso de otro contrato, un contrato sólo podrá retirar ether de otro si el segundo contrato expone una función o algún método para hacerlo. En un contrato bien escrito, este método estaría protegido contra direcciones aleatorias que lo invoquen.
Para tokens, la approve
función dentro de ERC20 (o funciones equivalentes en otras implementaciones) debe usarse para autorizar a una dirección a retirar del saldo de otra. Siempre que Alice no lo haya llamado, Bob no puede simplemente establecer a Alice como propietaria de un contrato y hacer que ese contrato comience a retirar los tokens de Alice.
Cualquier contrato inteligente no puede retirar automáticamente ETHER del EOA del usuario. Debido a que las funciones de contrato necesitan que la transacción se firme desde el EOA del usuario, de lo contrario, esa transacción no será válida en la red. Por lo tanto, nadie puede dejar de convertirlo en propietario de ningún contrato, pero no hay ninguna API que permita que el contrato inteligente retire ether de la cuenta EOA de nadie.