Solidity Minimalist # 11. Constructores y decoradores

En esta lección, usaremos el ejemplo del control de autoridad de contrato (Ownable) para presentar el constructor (constructor) y el modificador único (modificador) en el lenguaje solidity.

Constructor

Un constructor es una función especial que se puede definir para cada contrato y ejecutarse automáticamente una vez que se implementa el contrato. Se puede utilizar para inicializar algunos parámetros del contrato, como inicializar la dirección del propietario del contrato:

address owner; // 定义owner变量

// 构造函数
constructor() {
 owner = msg.sender; // 在部署合约的时候,将owner设置为部署者的地址
}

Nota ⚠️: La sintaxis de los constructores en diferentes versiones de solidity no es consistente. Antes de Solidity 0.4.22, el constructor no usaba constructor sino una función con el mismo nombre que el nombre del contrato como constructor. Debido a esta forma antigua de escribir, es fácil para los desarrolladores hacer omisiones al escribir (por ejemplo, el nombre del contrato es Padres, y el nombre del constructor se escribe como padres), haciendo que el constructor se convierta en una función ordinaria y causando lagunas. Por lo tanto, la versión 0.4.22 y posteriores adoptan una nueva forma de escribir constructor.

Ejemplo de código de la forma antigua de escribir el constructor:

pragma solidity =0.4.21;
contract Parents {
  // 与合约名Parents同名的函数就是构造函数
  function Parents () public {
  }
}

decorador

Modifier es una sintaxis específica de solidity, similar al decorador en la programación orientada a objetos, que declara las características de las funciones y reduce la redundancia del código. Es como la armadura inteligente de Iron Man, y las funciones que la usan tendrán ciertos comportamientos. El principal escenario de uso del modificador es verificar antes de ejecutar la función, como dirección, variable, saldo, etc.

Definamos un modificador llamado onlyOwner:

// 定义modifier
modifier onlyOwner {
 require(msg.sender == owner); // 检查调用者是否为owner地址
 _; // 如果是的话,继续运行函数主体;否则报错并revert交易
}

Una función con el modificador onlyOwner solo puede ser llamada por la dirección del propietario, como en el siguiente ejemplo:

function changeOwner(address _newOwner) external onlyOwner{
  owner = _newOwner; // 只有owner地址运行这个函数,并改变owner
}

Definimos una función changeOwner, ejecutarla puede cambiar el propietario del contrato, pero debido a la existencia del modificador onlyOwner, solo el propietario original puede llamarlo y otros informarán un error. Este es también el método más utilizado para controlar los permisos de contratos inteligentes.

Implementación estándar propia de OppenZepplin:

OppenZeppelin es una organización que mantiene una sólida base de código estandarizado. Su estándar Ownable se implementa de la siguiente manera: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol

Ejemplo de demostración de remezcla

Tome Owner.sol como ejemplo.

1. Compile e implemente el código en Remix.

2. Haga clic en el botón de propietario para ver la variable de propietario actual.

3. Llame a la función changeOwner como el usuario de la dirección del propietario, y la transacción es exitosa

4. Llame a la función changeOwner como un usuario con una dirección que no es de propietario, pero la transacción falla porque la declaración de verificación del modificador onlyOwner no se cumple.

 

Resumir

En esta lección, presentamos los constructores y modificadores en solidity, y proporcionamos un contrato Ownable que controla los permisos del contrato.

 

 

Supongo que te gusta

Origin blog.csdn.net/u010359479/article/details/128972801
Recomendado
Clasificación