智能合约地址是什么意思,智能合约地址什么意思

  

  固体数据类型0。状态变量vs局部变量在契约中定义,但是函数之外的变量称为状态变量,它将被上传到区块链并保存。   

  

  以下协定中的消息是状态变量。   

  

  Solidity language没有主函数,只要契约部署在区块链上,就会不间断地执行。   

  

  //SPDX-License-identifier : GPL-3.0 pragma solidity=0.7 . 0 0.9 . 0;合同收件箱{ //状态变量字符串公共消息;Set message(字符串内存新消息)public {//局部变量字符串内存tmp=' hellomessage=newMessage}函数getMessage()公共视图返回(字符串内存){ return message}}1.布尔go语言:var标志bool,flag=true   

  

  布尔标志1;bool flag2=false2.Integer int(有符号整数,正负)uint(无符号整数,无负)以8位为区间,支持int8,int16,int24到int256,uint也一样。Int默认为int256,uint默认为uint2563。函数类型函数类型,也就是我们所说的函数,也是一个特殊的变量。它可以作为变量赋值,作为函数参数传递,作为值返回。   

  

  -函数声明函数名、函数签名(返回值、参数类型、修饰符)   

  

  -几个非常非常重要的关键词,修饰符.   

  

  说明   

  

  公众的   

  

  Public,任何人(有以太坊账号的)都可以调用。   

  

  私人的   

  

  Private,只能在智能合约内部调用。   

  

  外部   

  

  它只能在契约外部调用,但在契约内部需要这个调用。   

  

  内部的   

  

  只能调用内部协定和继承的协定。   

  

  视图/常量   

  

  该函数读取但不修改任何合约的状态变量。   

  

  纯(纯)   

  

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

  

  应付的   

  

  调用函数需要付费,钱打到智能合约的账户上。   

  

  返回   

  

  用于返回值声明。   

  

  -访问可见性-用public和private修饰的状态变量,默认情况下会生成一个同名的公共函数。   

  

  -view,constant,pure解释了如果一个状态变量在一个函数中被访问,但是没有被修改,我们用view或者constant来修饰它。如果状态变量被访问和修改,那么它就不能是常量和视图,否则会报错,可以不加修饰。如果状态变量没有被使用过,我们应该把它修饰成pure。如果修改为常量,但是在函数中修改,效果是:不会报错,会正常执行,但是值不会变。-payable任何函数,只要装饰成payable,都可以在调用这个方法的时候给value字段赋一个值,然后把money worth值传递给契约。如果这个函数没有指定payable,而是赋值,那么这个调用将报告一个错误。-匿名功能用于转账。一个协定只能有一个匿名函数。该函数不能有参数或任何返回值。当我们试图执行一个不在契约中的函数时,那么契约就会执行这个匿名函数。   

  

  当契约只接收以太坊的时候,也会调用这个匿名函数,一般情况下会消耗很少的气。所以,如果你想在收到以太坊后进行一些操作,你可以把你想要的操作写入这个匿名函数,因为它非常便宜。   

  

  //如果要给契约转账,可以在契约中添加以下函数:function() payable {//函数体空无一物}处理不存在的函数契约之间的调用,非js调用契约测试{ function(){ x=1;} uint x;}契约调用方{函数callTest(地址testAddress) { Test(testAddress)。调用('0x abcdefgh ');//哈希不存在//测试中的结果(测试地址)。x变成==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码

  



相关文章