【区块链学习笔记】以太坊、智能合约

imtoken官网地址 admin 2024-09-01 17:09 20 0

imToken 是一款全球领先的区块链数字资产管理工具[ZB],帮助你安全管理BTC, ETH, ATOM, EOS, TRX, CKB, BCH, LTC, DOT, KSM, FIL, XTZ 资产,同时支持去中心化币币兑换功能 ...

目录

比特币钱包和以太坊钱包

1. 以太坊

区块链比特币以太坊

以太坊是区块链2.0时代的代表,也是全球第一个ICO项目。

1.定义

以太坊()是一个具备智能合约功能的开源公有区块链平台,通过其专用加密货币以太币(Ether)提供去中心化的以太坊虚拟机( )来处理点对点合约,属于区块链2.0架构。

从上面的定义我们可以看出,以太坊与比特币类似,都是基于区块链技术的分布式计算平台。但它强调的是它是一个智能合约系统。其实它的本质和比特币是一样的。只不过在这个平台上可以任意生成多个不同的比特币系统。

以太坊涉及三个基本概念:

2. 以太坊与比特币的关系

比特币的缺点:

以太坊优化:

建立了图灵完备的底层体系,可以通过简单的程序实现各类数字资产的生产,可编程的、图灵完备的区块链网络可以实现更多的非资产功能性产品。

以太坊技术=区块链技术+智能合约

在这里插入图片描述

3. 以太坊共识

以太坊后续三个版本的共识机制均采用PoW,目前正在向混合共识机制过渡,以太坊的混合共识机制为PoW+POS,平衡了矿工和持币者的利益。

二、智能合约 1、智能合约的定义

智能合约:是指通过计算机程序定义、可以自动执行的承诺和协议。

以太坊智能合约:存在于以太坊区块链上的特定地址的代码(即合约函数)和数据(即合约状态)的集合。合约账户之间可以传递信息,并执行图灵完备的操作。合约依靠以太坊虚拟机(EVM)以二进制字节码格式在区块链上运行。

以太坊智能合约可以分为五类:

2. 智能合约的工作原理 3. 智能合约的优势

优势:

4. 编译智能合约并修改智能合约源代码

在这里插入图片描述

在部署智能合约之前,您需要两样东西:编译后的代码和应用程​​序二进制接口,后者是定义如何与合约交互的参考模板。

安装智能合约编译工具

安装智能合约编译工具solc,solc是一个命令行编译器,是编译方式之一。

在系统终端中输入命令行即可安装成功。

在Ubuntu系统
在终端中执行以下命令: 
sudo add-apt-repository ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install solc
which solc

在MAC OSX上,您也可以在终端中输入命令行。

在Mac OSX系统中
在终端中执行以下命令:
brew tap ethereum/ethereum
brew install solidity
which solc

在系统中,需要安装,该工具可以管理其上的软件,然后执行命令行。

在Windosw系统中
需要安装chocolatey (https/chocolsteyorg/),该工具可以在windows上管理软件。
在终端中执行以下命令:
cinst -pre solC-stable

最后,从源代码安装 solc。

在终端中执行以下命令:。
git clone https://github.com/ethereum/cpp-ethereum.git
mkdir cpp-ethereum/build
cd cpp-ethereum/build
cmake -DISONRPC=OFF -DMINER=OFF -DETHKEY=OFF -DSERPENT=OFF-DGUI=OFF -DTESTS=OFF -DJSCONSOLE=OFF
make -j4
make install
which solc

在命令行中输入如下bin命令,编译智能合约代码solc:

solc --bin HelloWorld.sol

除了字节码数据之外,还需要一个abi接口,通过执行abi命令:

solc --bin HelloWorld.sol

获取abi信息,后续测试部署可能会用到。

5.智能合约测试

以下是智能合约的示例

pragma solidity ^0.4.20;
contract Simplestorage {
	uint storedData;
	function set(uint x){
		storedData= x;
	}
	function get() constant returns(uint){
		return storedData;
	}
}

测试智能合约的三种方法:

混音+

+

智能合约测试工具的安装和使用

混音+

Remix 是浏览器版的开发 IDE(集成开发环境),可以在线使用,也可以本地安装。它是一个充当轻量级以太坊钱包的浏览器插件,可以配合谷歌或火狐浏览器使用。安装方式是直接在浏览器应用商店搜索,或者在官网下载安装。

以太坊钱包安装完成后,首先使用Remix发布智能合约,发布成功后右侧会展示成功发布的智能合约及合约相关信息,包括合约地址以及对外暴露的接口。 +

如果已经安装好了那么直接打开以太坊钱包官网(首先需要自己安装node环境和cnpm)

(1)安装:

cnpm ig

(2)创建项目:

mkdir && cd

初始化

(3)项目结构:

该目录中存放的是合约代码imToken官网下载,该目录中存放的是js脚本,该目录中存放的是测试用例。

(4)编写代码、部署和调试

新建Hello.sol文件;

注意:

类名Hello需要与文件名Hello.sol保存一致

.sol 文件无法被删除。

在目录下添加对应的js脚本.js

添加代码后,打开终端,切换到项目路径,执行代码。

传统虚拟机

虚拟机:其实并不是物理计算机,而是模拟物理计算机的软件环境,但虚拟机可以像物理计算机一样运行程序。用于承载虚拟机的物理计算机通常可以支持多台虚拟机。另外,虚拟机的概念不仅存在于系统层面,也存在于编程语言中。

虚拟机用来解决什么问题?

为了抽象出底层硬件,从系统层面来看,硬件和操作系统变得越来越多样化。

能够自动兼容所有硬件,综上所述,虚拟机技术的实现基本上就是将硬件层或者系统层抽象出来,使得应用层屏蔽了底层的实现细节,有利于应用程序的快速实现和部署。

1、虚拟机的分类

根据级别可分为三类:

然而,级别越低,实施起来就越困难。

2.区块链虚拟机

传统精简指令集计算机:这种类型的计算机CPU只提供有限的执行指令和内存,但是各类应用程序都可以在这种计算机上运行。

原理:因为系统中有一个“虚拟机”,把高级语言的执行转换成CPU的相关执行指令。高级语言提供语法,人们利用高级语言开发相关的应用程序。

其层次结构从低到高依次为:硬件指令、虚拟机、高级语言、应用层。

如果要在区块链中支持各种应用,也需要这样的分层结构。因此,区块链需要提供一套指令,区块链中的虚拟机可以解释这些指令。另外,高级语言的实现需要编译器将实现编译成虚拟机支持的指令。这样,区块链就完美地支持了语言与业务的分离,从而可以在区块链中开发各种业务应用。

虚拟机架构的组成部分:

有两个重要组成部分:

当所有部分都准备好之后,我们就可以使用高级语言和 API 来编写符合业务逻辑的智能合约,然后使用相关的编译器将智能合约编译成字节码,同时生成相关的 ABI 描述。经过严格的测试之后,智能合约的字节码和 ABI 就可以以交易的形式发布到区块链上。

矿工会验证你的交易的合法性,如果成功打包进区块,会返回智能合约地址。用户会调用这个合约地址获取ABI,然后根据ABI中功能接口的描述,发起交易去调用功能接口,从而实现相关功能或者获取相关结果。矿工也会验证这笔交易的合法性以太坊和比特币区块链钱包,并处理成区块。

将经过严格测试的智能合约代码发布到区块链上,可以理解为一笔特殊的交易——包含可执行代码的交易,随后会被矿工记录到区块中。当需要调用这个智能合约时,只需要向这个智能合约的地址发送一笔交易即可。因为每个节点都需要安装以太坊客户端,而每个客户端都自带一个 EVM(以太坊虚拟机)。当交易触发智能合约后,智能合约的代码就可以在 EVM 上执行。

这种方式相当于把程序部署在很多台计算机上,随时可以通过交易来触发这些智能合约的执行,从而完成去中心化程序的部署与调用。

DAPP是运行在以太坊上的去中心化应用程序,涉及到传统行业的各个环节。

四、以太坊的共识机制及挖矿原理 1.共识机制

以太坊为什么需要共识机制?

在分布式系统中,多台主机通过异步通信组成网络集群。在这样的异步系统中,主机之间需要进行状态复制,以保证各主机达成一致的状态共识。在运行过程中,主机故障可能造成通信失败、主机性能下降、网络拥塞等,从而导致错误信息在系统内传播。因此需要在不可靠的异步网络中定义一个容错协议,以保证各主机达成安全可靠的状态共识。

以太坊共识机制版本

在这里插入图片描述

如果单纯根据 token 余额来决定记账人,必然是富人获胜,导致记账权中心化,降低共识的公平性。那么如何解决记账权中心化的问题呢?不同的 PoS 机制采用不同的方式,在权益证明的基础上增加记账权的随机性,避免中心化。

2. 以太坊挖矿原理

采矿过程

共识机制:PoW(工作量证明)

算法:(-算法的改进版本)

对于每个区块,首先计算一个种子,这个种子只和当前区块的信息相关,然后根据这个种子生成一个32M的随机数据集,再根据这个随机数据集生成一个1G的DAG(有向无环图)。

在这里插入图片描述

挖矿的过程是从DAG中随机选取元素(类似比特币挖矿找一个合适的Nonce),然后进行hash运算,从缓存中快速计算出DAG指定位置的元素,然后进行hash计算和验证。

挖矿步骤

评论区