Solidity极简入门#8. 变量初始值

变量初始值

在solidity中,声明但没赋值的变量都有它的初始值或默认值。这一讲,我们将介绍常用变量的初始值。

值类型初始值

  • boolean: false
  • string: ""
  • int: 0
  • uint: 0
  • enum: 枚举中的第一个元素
  • address: 0x0000000000000000000000000000000000000000 (或 address(0))
  • function
  • internal: 空白方程
  • external: 空白方程

可以用public变量的getter函数验证上面写的初始值是否正确:

bool public _bool; // false
string public _string; // ""
int public _int; // 0
uint public _uint; // 0
address public _address; // 0x0000000000000000000000000000000000000000

enum ActionSet { Buy, Hold, Sell}
ActionSet public _enum; // 第1个内容Buy的索引0

function fi() internal{} // internal空白方程 
function fe() external{} // external空白方程

引用类型初始值

  • 映射mapping: 所有元素都为其默认值的mapping
  • 结构体struct: 所有成员设为其默认值的结构体
  • 数组array
  • 动态数组: []
  • 静态数组(定长): 所有成员设为其默认值的静态数组

可以用public变量的getter函数验证上面写的初始值是否正确:

// Reference Types
uint[8] public _staticArray; // 所有成员设为其默认值的静态数组[0,0,0,0,0,0,0,0]
uint[] public _dynamicArray; // `[]`
mapping(uint => address) public _mapping; // 所有元素都为其默认值的mapping
// 所有成员设为其默认值的结构体 0, 0
struct Student{
  uint256 id;
  uint256 score; 
}
Student public student;

delete操作符

delete a会让变量a的值变为初始值。

// delete操作符
bool public _bool2 = true; 
function d() external {
  delete _bool2; // delete 会让_bool2变为默认值,false
}

在remix上验证

  • 部署合约查看值类型、引用类型的初始值
  • 值类型、引用类型delete操作后的默认值

总结

这一讲,我们介绍了solidity中变量的初始值。变量被声明但没有赋值的时候,它的值默认为初始值。不同类型的变量初始值不同,delete操作符可以删除一个变量的值并代替为初始值。

以下是一个简单的示例代码,用于使用 Solidity 合约和 Web3.js 实现基本的身份验证和权限管理: Solidity 合约: ``` pragma solidity ^0.8.0; contract Auth { address public owner; mapping(address => bool) public authorized; constructor() { owner = msg.sender; authorized[msg.sender] = true; } modifier onlyOwner() { require(msg.sender == owner, "Only owner can perform this action"); _; } function authorize(address _user) public onlyOwner { authorized[_user] = true; } function revoke(address _user) public onlyOwner { authorized[_user] = false; } function isAuthorized(address _user) public view returns (bool) { return authorized[_user]; } } ``` Web3.js 前端代码: ``` const web3 = new Web3(Web3.givenProvider); const authContractAddress = 'PUT YOUR CONTRACT ADDRESS HERE'; const authAbi = [PUT YOUR CONTRACT ABI HERE]; const authContract = new web3.eth.Contract(authAbi, authContractAddress); async function login() { const accounts = await web3.eth.requestAccounts(); const currentUser = accounts[0]; const isAuthorized = await authContract.methods.isAuthorized(currentUser).call(); if (isAuthorized) { // User is authorized, redirect to dashboard window.location.href = '/dashboard'; } else { // User is not authorized, display error message alert('You are not authorized to access this page'); } } async function register() { const accounts = await web3.eth.requestAccounts(); const currentUser = accounts[0]; await authContract.methods.authorize(currentUser).send({ from: currentUser }); // User successfully registered, redirect to dashboard window.location.href = '/dashboard'; } ``` 在此示例中,我们创建了一个名为 Auth 的 Solidity 合约,它具有以下功能: - 只有合约的所有者才能执行某些操作。 - 合约的所有者可以授权其他用户。 - 授权的用户可以使用 Web3.js 前端代码中的 `isAuthorized` 函数检查他们是否已获得授权。 我们还创建了两个前端函数 `login` 和 `register`。当用户尝试登录时,我们检查他们是否已获得授权。如果是,则重定向到仪表板页面。否则,我们显示错误消息。当用户尝试注册时,我们使用 `authorize` 函数将其添加到授权用户列表中,并将其重定向到仪表板页面。 请注意,这只是一个简单的示例,您需要根据自己的要求进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值