IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 区块链 -> 智能合约学习笔记一 、——{Solidity语言详解——(1)智能合约介绍} -> 正文阅读

[区块链]智能合约学习笔记一 、——{Solidity语言详解——(1)智能合约介绍}

目录

先导内容

1.1 智能合约

1.2 以太坊智能合约

1.3 .sol文件样例 。

1.4 pragma 指令

1.5 合约(contract)定义

???

1.6 function

????

1.7 保留关键字

1.8 代码注释

??????

后续内容

?代码示例编译


先导内容

remix安装以及使用

  1. 浏览器端配置

在浏览器端有俩个选择,分别为英文版与中文版(有些许差别)

下面都以英文版为例子介绍

1、浏览器输入?https://remix.ethereum.org/

如果出现加载慢,加载不完全的情况,刷新几次即可

2、左侧可以看到我们所有的文件,下面是我们的remix控制台

?

上图小图标从左到右依次为:

  • 创建新文件
  • 创建新文件夹
  • Github代码片段分享
  • 表示打开一个本地文件

控制台图片如下:

?

  • 1 从左至右表示隐藏控制台、清除控制台输出、pending的交易数量
  • 2 表示监听所有交易
  • 3 表示搜索框
  • 4 表示输出区域
  • 5 表示使用JavaScript与以太坊交互的区域,可以使用Web3对象

3、点击文件样式图标输入我们的文件名即可(以.sol为后缀)

?

4、安装必要的插件

点击插件管理器,页面中为这个图标

?

  • 安装compiler
    搜索关键字compiler

?

1.1 智能合约

? ? ? ? ·智能合约(英语:Smart Contract )是一种旨在以信息化方式传播、验证或执行合同的计算机协议。

????????智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。

?

????????怎么理解智能合约的概念呢?

???????? 举个例子:微信和支付宝的信用卡自动还款,这也类似于 智能合约。 当还款日到了,还款条件也满足(在线钱包或者银行储蓄 卡中余额充足),系统会自动进行还款,无需人为干涉。

???????? 当然这类程序依赖于中心化平台,依然可以被人为修改。 所以在防篡改的区块链平台出现前,智能合约并没有真正落地。

1.2 以太坊智能合约

????????以太坊是第一个开源的支持智能合约的 区块链平台。由于以太坊区块链被普遍 接受,因此多数区块链的智能合约采取 与以太坊相似的设计。以太坊借鉴了比 特币区块链的技术,对它的应用范围进 行了扩展。

????????如果说比特币是利用区块链 技术的专用计算器,那么以太坊就是利 用区块链技术的通用计算机

????????与比特币相比,以太坊最大的不同点是:它可以支持图灵完备的开发语言,允许 开发者在上面实现智能合约,开发应用,这也是以太坊的最强大之处。 而solidity语言就是以太坊平台上使用最广泛的语言之一。

?? ? ? ?

????????以太坊的智能合约被广泛应用的一个用途是创建通证,通证可以对应以太坊区块链平 台之上或之外的资产。

????????下图为某咨询公司使用以太坊智能合 约从事业务的一个图示。图示是一个 典型的 ERC20 通证(一种以太坊智 能合约)发行过程:

????????一个项目通过智 能合约创建通证,这个通证是实体资 产或线上资产的价值表示物。投资者 (用户)发起交易,向智能合约转入 以太币(ETH),满足规则的智能合 约就一定会向投资者账户转入相应数 量的通证

?

?1.3 .sol文件样例 。

?????????编写智能合约的语言一般用solidity,编写的内容会保存在后缀名为.sol的文件中。一 个 solidity 文件可以包含任意数量的合约(contract)定义、import指令和pragma指令。 下面是一个.sol文件的样例:

?

?

1.4 pragma 指令

????????接下来我们对该智能合约文件中的一些基础语法进行讲解。 第一行是 pragma 指令,它告诉我们源代码是为solidity 0.6.0 及以上版本编写的, 但不超过0.7.0。

????????换句话说源文件不能用低于0.6.0版本的编译器编译,也不能用 0.7.0版本及以上版本的编译器编译。

????????pragma一般用在整个程序的第一行:

pragma solidity ^0.6.0;

同样含义的另外一种表述方法可以写成:

pragma solidity >=0.6.0 < 0.7.0;

1.5 合约(contract)定义

????????合约(contract)是位于以太坊区块链上特定地址的代码和数据的集合。

???????? 如下所示,定义一个合约需要声明contract 关键字,随后跟上合约的名字 (SimpleStorage)。

????????contract SimpleStorage {

}

????????合约是一个程序的主体,出现的位置一般紧随 pragma 之后。

???????? 注意:一个程序可以有多个 contract 定义。

1.6 function

????????函数在所有的语言中都是一种常见类型。

????????solidity中的函数关键字是function,之前的 智能合约文件定义的合约下,包含了如下两个函数: 函数可以分为内外两个部分:

???????? 1.第一行 { } 之前的内容是对该函数的描述。

????????2.{ } 里面的部分被称为函数内容,是函数实现其功能的代码。

function set(uint x) public {

storedData = x;

}

function get() public view returns (uint) {

return storedData;

}

1.7 保留关键字

????????保留关键字是系统内部自带的、已被赋予特殊用途的字词,例如 function,不可以 被定义为变量来使用,下面是solidity中一部分的保留关键字:

????????下面的 pragma、 solidity、contract、function、uint、public、return 都是被 使用的关键字。

pragma solidity ^0.6.0;

contract SimpleStorage {

uint storedData; function set(uint x) public {

storedData = x;

}

function get() public view returns (uint) {

return storedData;

}

}

1.8 代码注释

???????? solidity 支持c风格和c++风格的注释:

???????? // 之后到行尾的文本,都被看作注释,编译器不会编译此内容。 /* 与 */ 之间的文本被看作注释, 编译器不会编译此内容。 注释示例:

???????? function getResult() public view returns(uint){ // 这是一行注释,类似于c++中的注释 /* * 这是多行注释 * 类似于c语言中的注释 */

????????uint result = 1 + 2;

????????return result;

}

后续内容

编译组件说明:

  • Compiler可以选择Solidity的编译器版本
  • Language可以选择编程语言
  • EVM Version可以选择EVM虚拟机版本
  • Auto compile可以设置自动编译,修改完代码后自动执行编译操作
  • Enable optimization可以设置对编译进行优化
  • Hide warnings可以设置隐藏警告信息。
  • Contract选择需要编译的合约
  • Publish on SwarmPublish on Ipfs分别将合约上传到Swarm和Ipfs这两个分布式文件系统上去
  • Compilation Details很重要,可以查看编译的信息,包括ABI、字节码、函数Hash等
  • ABIBytecode分别复制ABI和字节码。
  • 再下面的部分空白用来显示编译的Warnings和Errors。

我们点击Compilation Details就能看到编译之后的一些信息,如下图所示(部分)

  • NAME:合约名
  • METADATA:一些编译相关的信息,比如版本、所用的语言、设置等
  • BYTECODE:写入区块的字节码
  • ABI:此智能合约对应的 ABI ,也就是我们合约里面定义的一些接口
  • WEB3DEPLOY:智能合约编译之后的发布命令,这个就是比较重要的,之后的web3就是调用这段命令来部署合约的
  • METADATAHASH:数据的一个哈希值
  • SWARMLOCATION:Swarm网络的一个地址
  • FUNCTIONHASHES:合约定义的方法的hash,其实我们执行合约的时候就是通过这个hash去找到对应的方法进行执行的
  • GASESTIMATES:关于矿工费的一个预算,在ETH上进行合约的部署,执行等都是需要矿工费的。一般合约代码越多矿工费越高。

点击下面的run图标,可以看到部署,以及账户信息,环境等等

点击deploy之后天可以看到自己的合约已经部署完成,打开之后可以看见我们写的函数set,get了,给set函数输入一个值,点击get会得到相应的值

  • Environment?表示合约部署的环境。Javascript VM是虚拟了一个节点,而Injected Web3Web3 Provider则真正连接一个节点。
  • Account代表不同的虚拟账户,每个虚拟账户每个有 100 ETH
  • Deploy表示合约部署按钮
  • Deployed Contracts表示已经部署的合约

?代码示例编译

solidity代码示例编译

  区块链 最新文章
盘点具备盈利潜力的几大加密板块,以及潜在
阅读笔记|让区块空间成为商品,打造Web3云
区块链1.0-比特币的数据结构
Team Finance被黑分析|黑客自建Token“瞒天
区块链≠绿色?波卡或成 Web3“生态环保”标
期货从入门到高深之手动交易系列D1课
以太坊基础---区块验证
进入以太坊合并的五个数字
经典同态加密算法Paillier解读 - 原理、实现
IPFS/Filecoin学习知识科普(四)
上一篇文章      下一篇文章      查看所有文章
加:2022-09-30 00:58:05  更:2022-09-30 00:59:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 20:48:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码