欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > 区块链知识点5-Solidity编程基础

区块链知识点5-Solidity编程基础

2025/4/21 6:16:04 来源:https://blog.csdn.net/2202_75502796/article/details/147099198  浏览:    关键词:区块链知识点5-Solidity编程基础

1.  全局变量名                具体描述

     msg.sender        返回当前调用函数的调用者的地址

     msg.value            当前消息所附带的以太币,单位为wei

2.变量的用法                默认存储位置修饰符

   函数的返回值                        memory

   函数内部的局部变量             memory

   函数的参数                            memory

   全局变量/状态变量                storage

   外部函数的参数                     calldata

3.Solidity中的状态变量存储在storage中,其值会被永久记录在区块链上,并消耗Gas

4.在Solidity中,如果你希望一个变量只能被当前合约内部以及继承该合约的子合约访问,应该使用internal可见性修饰符

5.基本数据类型:字符串。

如 string s   定义一个字符串型s

bytes(s).length将字符串数据转换为字节数组bytes类型,然后再通过length属性获取其长度

6.字符串比较:先比较字符串的长度,再比较字符串的哈希值。减少Gas的消耗

7.字符串的拼接:string 类型内置了concat方法,如string.concat(_a,_b);

8.有符号整数分为int8,int6,int32...int256

无符号整数分为uint8,uint16,uint32...uint256

9.算术操作符中**乘法,例如4**2的结果是16

10.地址类型的Solidity语言特有的数据类型,用于表示一个以太坊账户的地址,地址类型数据的长度为20个字节

11.特殊地址类型:

智能合约地址:this

调用者的账号地址:msg.sender

12.举例代码:

contract Demo {address owner; //合约的拥有者
//声明了一个类型为address的变量_owner,用于存储合约的拥有者的地址。constructor() public{_owner = msg.sender;
//_owner被赋值为msg.sender,即部署合约的账户地址。}function GetOwner() public view returns(address){return owner;}
}

13.复合数据类型:映射

mapping(<键>=><值>)<变量名>;

14.举例代码

contract movieVote {mapping (uint => uint) public VoteCount; // 存储每个电影ID对应的投票数mapping (address => uint) public voteRecord; // 存储每个地址对应的已投票电影IDfunction vote(uint _movieId) public returns(string memory) {if (voteRecord[msg.sender] == 0) { // 如果该地址尚未投票voteRecord[msg.sender] = _movieId; // 记录该地址已投票的电影IDVoteCount[_movieId] = VoteCount[_movieId] + 1; // 增加对应电影ID的投票数return "投票成功"; // 返回投票成功的消息}}
}
contract SimpleBank {mapping(address => uint256) public balances; // 存储每个地址对应的余额function deposit() public payable {balances[msg.sender] += msg.value; // 将发送者的以太币金额添加到其余额中}
}
function getBalance() public view returns (uint256) {return balances[msg.sender]; // 通过映射获取余额
}
function withdraw(uint256 amount) public {// 安全检查:余额是否足够require(balances[msg.sender] >= amount, "Insufficient funds"); // 转账操作:向用户发送ETH(单位:wei)payable(msg.sender).transfer(amount); // 更新状态:扣减链上记录余额balances[msg.sender] -= amount; 
}

15.复合数据类型:数组

数组分为定长数组和变长数组

例如:uint[5] arr;      uint[] arr;    uint[5] arr=[0,1,2,3,4];

变长数组而言,可以通过push()函数和pop()函数追加和弹出元素。

push()函数在数组的尾部追加一个元素

pop()函数在数组的尾部删除一个元素

16.在以太坊智能合约的执行过程中,Gas主要用于计算和存储的资源消耗费用

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词