龙空技术网

solidity基本数据类型使用、主要关键字学习、address使用

益达骚年 108

前言:

目前小伙伴们对“无符号整型有负数吗”都比较重视,小伙伴们都需要分析一些“无符号整型有负数吗”的相关知识。那么小编也在网上搜集了一些有关“无符号整型有负数吗””的相关资讯,希望兄弟们能喜欢,你们一起来学习一下吧!

solidity数据类型0. 状态变量vs局部变量

定义在合约之内,但是在函数之外的变量,我们叫做状态变量,这些变量是会上传到区块链上保存的。

下面这个合约中的message就是状态变量。

solidity语言没有main函数,只要合约部署到区块链上,就会永不停歇地执行。

// SPDX-License-Identifier: GPL-3.0pragma solidity >=0.7.0 <0.9.0;contract Inbox{    //状态变量    string public message;     function setMessage(string memory newMessage) public {        //局部变量        string memory tmp = "hello";        message = newMessage;    }    function getMessage() public view returns(string memory){        return message;    }}
1. 布尔

go语言: var flag bool , flag = true

bool flag1 ;bool flag2 = false;
2. 整型int(有符号整型,有正有负)uint(无符号整型,无负数)以8位为区间,支持int8,int16,int24 至 int256,uint同理。 int默认为int256,uint默认为uint2563. 函数类型

函数类型也就是我们所说的函数,本身也是一个特殊的变量,它可以当做变量赋值,当做函数参数传递,当做返回值。

- 函数声明

函数名,函数签名(返回值,参数类型,修饰符)

- 几个非常非常非常重要的关键字

修饰符

说明

public

公有,任何人(拥有以太坊账户的)都可以调用

private

私有, 只有智能合约内部才可以调用

external

仅合约外部可以调用,合约内部需使用this调用

internal

仅合约内部和继承的合约可以调用

view/constant

函数会读取但是不会修改任何contract的状态变量

pure(纯净的)

函数不使用任何智能合约的状态变量

payable

调用函数需要付钱,钱付给了智能合约的账户

returns

返回值函数声明中使用

- 访问可见性- public、private

修饰为public的状态变量会默认生成一个同名的public函数

- view,constant,pure讲解如果一个函数里面,访问了状态变量,但是没有修改,我们使用view或者constant修饰。如果访问了状态变量,而且修改了,那么就不能constant和view,否则会报错,不修饰即可。如果没有使用过状态变量,我们要修饰为pure。如果你修饰为constant,但是你在函数中修改了,效果是:不会报错,正常执行,但是值不会改变。- payable任何函数,只要修饰为payable,那么就可以在调用这个方法的时候,对value字段赋值,然后将价值value的钱转给合约。若这个函数没有指定payable,但是对value赋值了,那么本次调用会报错。- 匿名函数用于转账

一个合约可以有且只有一个匿名函数,此函数不能有参数,也不能有任何返回值,当我们企图去执行一个合约上没有的函数时,那么合约就会执行这个匿名函数。

当合约在只收到以太币的时候,也会调用这个匿名函数,而且一般情况下会消耗很少的gas,所以当你接收到以太币后,想要执行一些操作的话,你尽可以把你想要的操作写到这个匿名函数里,因为这样做成本非常便宜。

//如果想向合约转账,在合约中添加如下函数即可function() payable {    //函数体什么都不填}
用于处理不存在的函数合约之间调用,非js调用
contract Test {  function() { x = 1; }  uint x;}contract Caller {  function callTest(address testAddress) {    Test(testAddress).call('0xabcdefgh'); // hash does not exist    // results in Test(testAddress).x becoming == 1.  }}
4. 地址(Address)- 概述

以太坊地址的长度,大小为20个字节,20 * 8 = 160位,所以可以用一个uint160编码。地址是所有合约的基础,所有的合约都会继承地址对象,通过合约的地址串,调用合约内的函数。

- 余额(balance)

返回指定地址的余额

// SPDX-License-Identifier: GPL-3.0pragma solidity >=0.7.0 <0.9.0;contract Test {    address public addr1 = 0x4B20993Bc481177ec7E8f571ceCaE8A9e22C02db;    address public addr2 = 0x617F2E2fD72FD9D5503197092aC168c91465E7f2;    receive() external payable {}    // 向合约账户转账     function transderToContract() payable public {        payable(address(this)).transfer(msg.value);    }    // 获取当前合约的余额     function getBalance1()public view returns(uint256){        return address(this).balance;    }    // 获取指定地址的余额    function getbalance(address addr) public view returns(uint256){        return addr.balance;    }    // 由合约向addr1地址转10 eth    function transfer() public {        payable(addr1).transfer(10*10**18);    }}
5. 枚举类型(Enums)枚举类型是在Solidity中的一种用户自定义类型。枚举可以将显示的与整数进行转换,但不能进行隐式转换。显示的转换会在运行时检查数值范围,如果不匹配,将会引起异常。枚举类型应至少有一名成员,枚举元素默认为uint8,当元素数量足够多时,会自动变为uint16,第一个元素默认为0,使用超出范围的数值时会报错。
// SPDX-License-Identifier: GPL-3.0pragma solidity >=0.7.0 <0.9.0;contract test {    enum WeekDays {        Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday    }    WeekDays currentDay;    WeekDays defaultday = WeekDays.Sunday;    function setDay(WeekDays _day) public {        currentDay = _day;    }    function getDay() public view returns(uint256) {        return uint256(currentDay);    }    function getDefaultDay() public view returns(uint256) {        return uint256(defaultday);       }}
6. 字节数组

[]byte go -> bytes

- 定长的字节数组

solidity内置了一些数组的数据类型:(和go语言做一下对比, var b8 [8]byte),完全只读

bytes1, ... ,bytes32,允许值以步长1递增。==byte默认表示bytes1,byte是类型,bytes是类型,bytes1是内置数组==bytes1只能存储1个字节,即8位的内容,bytes2最多只能存储2个字节,即16位的内容。以此类推...长度可以读取 length(返回bytes5类型的长度,而不是赋值的长度)长度不可以修改可以通过下标访问内容不可修改

内置成员:length,返回数组长度

存储方式:16进制ascii码

标签: #无符号整型有负数吗