Solidaty学习笔记(一)

Solidaty学习笔记(一)

简单语法提示代码:

        //创建合约contract ZombieFactory {uint dnaDigits = 16;uint dnaModulus = 10 ** dnaDigits;struct Zombie {string name;uint dna;}//定义Person类型的数组Person[] public people;`//定义Person类型的数组Person[] public people;`完整代码: (僵尸工厂第一课)pragma solidity ^0.4.25;contract ZombieFactory {event NewZombie(uint zombieId, string name, uint dna);uint dnaDigits = 16;uint dnaModulus = 10 ** dnaDigits;struct Zombie {string name;uint dna;}Zombie[] public zombies;function _createZombie(string _name, uint _dna) private {uint id = zombies.push(Zombie(_name, _dna)) - 1;emit NewZombie(id, _name, _dna);}function _generateRandomDna(string _str) private view returns (uint) {uint rand = uint(keccak256(abi.encodePacked(_str)));return rand % dnaModulus;}function createRandomZombie(string _name) public {uint randDna = _generateRandomDna(_name);_createZombie(_name, randDna);}}

映射(Mapping)和地址(Address):

Address:每个账户都有一个地址,这是账户唯一的标识符。如:

0x0cE446255506E92DF41614C46F1d6df9Cc969183

Mapping:映射本质上是存储和查找数据所用的键值对。例如:

mapping (address => uint) public accountBalance;
此处,address是键,uint是值。

msg.sender

msg.sender指的是当前调用者(或者智能合约)的address。在solidaty中,功能执行需要从外部开始,有人调用合约里的函数才会起作用,所以msg.sender总是存在的。msg.sender很安全,因为它具有以太坊区块链的安全保障————除非窃取与以太坊地址相关的私钥,否则无法修改其他人的数据。

1. 以太坊中有三个可以存储项目的区域:

存储Storage:
是指永远存储在区块链中的变量。
Memory
当外部函数对某合约调用完成时,内存型变量即被移除。

internal和external
两个修饰词军事用于描述函数可见性

- internal:如果被修饰的函数继承自其父合约,那么父合约里面的函数也可以被此函数调用。

- external:被修饰的函数只能在合约之外被调用,它不能被合约内的函数调用。
view与pure的理解:

在Solidity v4.17之前,只有constant,后来有人嫌constant这个词本身代表变量中的常量,不适合用来修饰函数,所以将constant拆成了view和pure。view的作用和constant一模一样,可以读取状态变量但是不能改;pure则更为严格,pure修饰的函数不能改也不能读状态变量,否则编译通不过。

Others:

1. solidaty支持单继承和多继承;

2. 在solidity 0.6.x 版本之后,接口类似于抽象合约,可以使用interface关键字创建

   interface Calculator {   function getResult() external view returns(uint);}

基本数据类型:

  • uint
  • bool
  • address
  • int

常量:

常量是无法修改的变量。

address public constant MY_ADDRESS = 0x777788889999AaAAbBbbCcccddDdeeeEfFFfCcCc;

Immutable:

不可变变量的值可以在构造函数中修改,但不能随后修改。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;contract Immutable {// coding convention to uppercase constant variablesaddress public immutable MY_ADDRESS;uint public immutable MY_UINT;constructor(uint _myUint) {MY_ADDRESS = msg.sender;MY_UINT = _myUint;}
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部