[Eternauta] 2-Fallout

Lista de temas

fuente:

pragma solidity ^0.4.18;

import 'zeppelin-solidity/contracts/ownership/Ownable.sol';
import 'openzeppelin-solidity/contracts/math/SafeMath.sol';

contract Fallout is Ownable {
  
  using SafeMath for uint256;
  mapping (address => uint) allocations;

  /* constructor */
  function Fal1out() public payable {
    owner = msg.sender;
    allocations[owner] = msg.value;
  }

  function allocate() public payable {
    allocations[msg.sender] = allocations[msg.sender].add(msg.value);
  }

  function sendAllocation(address allocator) public {
    require(allocations[allocator] > 0);
    allocator.transfer(allocations[allocator]);
  }

  function collectAllocations() public onlyOwner {
    msg.sender.transfer(this.balance);
  }

  function allocatorBalance(address allocator) public view returns (uint) {
    return allocations[allocator];
  }
}

requisitos de espacio libre:

reclamar la propiedad del contrato de abajo para completar este nivel. convertirá en el propietario del contrato.

Análisis y resolución de

Esta pregunta en realidad ...... primero en aprender acerca de los constructores y destructores Solidez ella.

De hecho, algo similar y Java, un constructor de la clase inicializa el tiempo de ejecución, cuando el destructor se recupera la destrucción realizada.

Características del constructor que contrato y el nombre ( "nombre de la clase") de la misma

Por ejemplo, el siguiente ejemplo:

pragma solidity ^0.4.13;
contract MyCoin{
    uint amount;
    address owner;
    
    function MyCoin() public{ //构造函数,和合约同名
        amount=90;
        owner=msg.sender;
    }
    
    function getBalance() public constant returns (uint){
        
        return amount;
        
    }
    
    function kill() public{  //析构函数,销毁时候执行
        if(owner==msg.sender){
            selfdestruct(owner);
        }
    }
}

Así que busque en esta pregunta:

contract Fallout is Ownable {
  
  using SafeMath for uint256;
  mapping (address => uint) allocations;

  /* constructor */
  function Fal1out() public payable {
    owner = msg.sender;
    allocations[owner] = msg.value;
  }

Esta función anotada, la función ejecutiva es permitir que el propietario del contrato.

Se puede encontrar, nombre de contrato Fallout, y el nombre de la función Fal1out.

Así que no lo hace un constructor, el contrato utiliza el constructor por defecto (sentimiento es java)

Y porque modificador Shi public, un individuo puede sintonizar ...... así:

imagen-20200403204230740

Podemos ver ya el propietario:

imagen-20200403204409467

Presentación, el despacho:

imagen-20200403205718855

Después de la liquidación dio un poco de historia, el original realmente han cometido este error desarrollado, cambió el contrato no cambió el nombre del constructor:

imagen-20200403205755166

Supongo que te gusta

Origin www.cnblogs.com/keelongz/p/12628929.html
Recomendado
Clasificación