首页 > 其他分享 >Solidity基础介绍

Solidity基础介绍

时间:2022-11-30 10:35:27浏览次数:64  
标签:count SPDX function Solidity 基础 number 介绍 public MIT

solidty 跟javascript有一定的相似

认识一个最简单的存储合约

让我们先看一下最基本的例子。现在就算你都不理解也不要紧,后面我们会有更深入的讲解。

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;

contract Storage {
uint256 number;
function set(uint256 _num) public {
number = _num;
}
function get() public view returns (uint256) {
return number;
}
}
  • 第一行是说明源代码是根据GPL 3.0版本授权的。默认情况下,在发布源代码时加入机器可读许可证说明是很重要的。由于提供源代码总是涉及版权方面的法律问题,Solidity 编译器鼓励使用机器可读的 SPDX 许可证标识符,比如:​​// SPDX-License-Identifier: MIT​

至于什么是SPDX 大家可以参考如下资料:

首先是SPDX,这是个组织名,其网站为:
​SPDX 许可证列表 |软件包数据交换 (SPDX)​​SPDX-License-Identifier 组合起来就是在指SPDX的许可证列表
后面的格式为 :+ SPDX的许可证列表中的某个许可证

比如上面例子中的MIT 许可:

MIT 基本信息
全名:MIT License ​​麻省理工学院许可证​​ 标志符:​​MIT​​MIT的具体内容
特此免费授予获得(“软件”)副本的任何人不受限制地处理本软件的许可,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售本软件副本的权利

  • 第二行是告诉编译器源代码所适用的Solidity版本为>=0.7.0 及 <0.9.0 。这样的说明是为了确保合约不会在新的编译器版本中发生异常的行为。关键字 ​​pragma​​ 是告知编译器如何处理源代码的通用指令
  • ​uint256 number;​​这一行代码声明了一个名为 number 的状态变量,其类型为 uint256 (256位无符号整数)。 你也可以认为它是数据库里的一个插槽,并且可以通过调用管理数据库代码的函数进行查询和更改。在这个例子中,上述的合约定义了​​set​​和​​get​​ 函数,可以用来修改或检索变量的值。
  • 当然,任何人都可以再次调用 ​​set​​ ,传入不同的值,覆盖你的数字,这个数字仍会被存储在区块链的历史记录中。后面我们会讲到怎样施加访问限制,以确保只有你才能改变这个数字。

执行原理

在一个去中心化的世界,我们的程序并不紧紧活一台机器的CPU 上, 在一个去中心化的世界是由很多节点组成的P2P 网络。合约代码会在各节点上[​​Full Node​​]单独运行,而事实上P2P的各节点相互之间都不信任的,所以每个节点都会存一份自己的状态(Distributed Ledger,分布式账本),在该示例就是number,当调用store()的时候,大家都改变了number,此时需要一种共识机制(PoS),如果PoS认为number合法,此次调用完成。 否则回滚上一个number的值,因此每一次改变状态变量的调用都是以一个事务Transcation来执行。

第二个例子

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

contract Counter {
uint public count;

// Function to get the current count
function get() public view returns (uint) {
return count;
}

// Function to increment count by 1
function inc() public {
count += 1;
}

// Function to decrement count by 1
function dec() public {
// This function will fail if count = 0
count -= 1;
}
}

标签:count,SPDX,function,Solidity,基础,number,介绍,public,MIT
From: https://blog.51cto.com/u_1540468/5897725

相关文章

  • Solidity智能合约结构介绍
    变量局部变量在函数内部声明不存储到链上状态变量在函数外部声明状态变量是永久地存储在链上的值。全局变量提供有关区块链的信息//SPDX-License-Identifier:MITpragmas......
  • Solidity中view和pure的用法
    getter类型的函数可以被view或者pure修饰。view修饰的函数不能改变状态变量。pure则既不能改变状态变量,也不取读取状态变量。//SPDX-License-Identifier:MITpragma......
  • JavaScript基础(一)
    JavaScript基础第01天1-编程语言1.1编程编程:就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果的过程。计算机程序:就是计算机所......
  • ArcGIS基础:属性连接注意事项_YuanYWRS的博客
    【1】连接条件,字段类型必须相同,出现连接找不到字段的情况,这个原因就是其中之一,不能将字符串与数字的字段进行连接的。【2】其次,要保证数值完全相同,比如1.0与1就是不同的,河......
  • 链表基础知识
    1.什么是链表   链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空......
  • Kubernetes(K8S) Controller - Deployment 介绍
    什么是controller实际存在的,管理和运行容器的对象Pod和Controller关系Pod是通过Controller实现应用的运维,比如伸缩、滚动升级等等Pod和Controller之间通过la......
  • DelayQueue的简单介绍
    DelayQueue按照延迟时间从小到大出队列的队列,延迟时间表示的是未来将要执行的时间减去当前的时间,对于加入DelayQueue的元素,需要实现Delayed接口  当getDelay()的返回......
  • 每天一点基础K8S--K8S中的调度策略---pod亲和性和反亲和性
    pod亲和性和反亲和性上面实验了pod的资源调度可以通过nodeName、nodeSelector完成,以及node节点亲和性,都是根据依赖关系完成node与pod之间的调度。在实际的需求中,还需要对p......
  • Java基础语法(5)变量
           ......
  • .Net【基础回顾】并行编程Parallel
    Parallel三种用法Parallel.InvokeParallel.forParallel.forEachParallel.InvokeclassProgram{staticvoidMain(string[]args){var......