智能合约学习笔记一 、——{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代码示例编译

猜你喜欢

转载自blog.csdn.net/qq_62238860/article/details/127091729