block chain 会整理一些关于区块链,web3, 智能合约的一些基础性知识。方便大家理解和记忆。
1.区块链
区块链是一种分布式的、去中心化的数据库技术,用于记录和验证交易和数据。它由一系列被称为区块的数据记录组成,每个区块包含了一定数量的交易信息和一个与之相关联的唯一标识符,称为哈希值。每个区块还包含前一个区块的哈希值,形成了一个由区块链串联而成的链式结构。
用一句话概括就是区块链就是一个去中心化的链式分布式账本。
BTC 就是一个典型的代表
2.区块链有哪些特点
区块链具有以下几个主要特点:
去中心化
:区块链不依赖于中心机构或第三方信任,而是由网络中的多个节点共同维护和验证数据,消除了单点故障和单一控制权安全可信
: 区块链使用加密算法和共识机制确保数据的安全性和完整性,一旦被写入区块链,数据很难被篡改或删除。不可篡改
: 区块链中的数据记录是按照时间顺序链接在一起,每个区块都包含前一个区块的哈希值,形成了一个不可篡改的链式结构。透明和可验证
: 区块链的交易和数据记录对所有参与者都可见,任何人都可以验证交易的有效性,增加了透明度和信任度匿名和隐私保护
: 虽然区块链本身是透明的,但参与者的身份可以是匿名的,可以通过使用加密技术保护用户的隐私
3.什么是智能合约
智能合约简介
智能合约是以太坊应用程序
的基石。 它们是存储在区块链上的计算机程序,让我们能够将传统合约转换成数字化合约。 智能合约完全符合逻辑 — 遵循 IFTTT (if this then that)逻辑结构。这意味着它们完全按照程序设定执行并且不能更改。
Nick Szabo 创造了“智能合约”这一术语。 1994 年,他撰写了概念简介(opens in a new tab)↗,1996 年又撰写了探索智能合约的功能(opens in a new tab)↗。
Nick Szabo 设想了一个建立在这些自动化、加密安全流程上的数字化市场。 在这种数字化市场中,交易和业务功能可以在无需信任的情况下进行,无需中间人。 以太坊上的智能合约将这一设想付诸实践。
4.智能合约与Solidity语言
智能合约
是运行在链上的程序,合约开发者可以通过智能合约实现与链上资产/数据进行交互,用户可以通过自己的链上账户来调用合约,访问资产与数据。因为区块链保留区块历史记录的链式结构、去中心化、不可篡改等特征,智能合约相比传统应用来说能更公正、透明。
Solidity
是一门面向合约的、为实现智能合约而创建的高级编程语言,在 EVM 虚拟机上运行,语法整体类似于 Javascript,是目前最流行的智能合约语言,也是入门区块链与 Web3 所必须掌握的语言。
Solidity 合约是以.sol
为后缀的文件,无法直接执行,需要编译为 EVM(Ethereum Virtual Machine)可识别的字节码才能在链上运行。
编译完成后,由合约账户进行部署到链上,其他账户可通过钱包与合约进行交互,实现链上业务逻辑。
5.以太坊账户
一个以太坊帐户是一个具有以太币 (ETH) 余额的实体,可以在以太坊上发送交易。 帐户可以由用户控制,也可以作为智能合约部署。
以太坊有两种帐户类型:
- 外部所有的帐户 (EOA) – 由任何拥有私钥的人控制
- 合约帐户 — 部署到网络上的智能合约,由代码控制。
具体查看第20页 EVM 这两种帐户类型都能:接收、持有和发送 ETH 和 token
, 与已部署的智能合约进行交互
。
EOA 账户
(外部账户):
- 创建帐户是免费的
- 可以发起交易
- 外部所有的帐户之间只能进行以太币和代币交易
- 由一对加密密钥组成:控制帐户活动的公钥和私钥
合约 账户
:
- 创建合约存在成本,因为需要使用网络存储空间
- 只能在收到交易时发送交易
- 从外部帐户向合约帐户发起的交易能触发可执行多种操作的代码,例如转移代币甚至创建新合约
- 合约帐户没有私钥。 相反,它们由智能合约代码逻辑控制
合约账户有两种操作,一种是写操作,一种是读操作。写操作
是向链上写入数据,需要使用网络存储空间。所以写操作需要消耗 Gas费。 读操作
链上读取数据,不需要消耗Gas费。
6.字节
我们知道以太坊账户是一个 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266
20个字节十六位的地址。一个字节是8位。能表示最大的数是255.
1111 1111 //一个8位的字节
= 1 1 1 1 1 1 1 1
2^7 + 2^6 + 2^5 + 2^4 + 2^3 + 2^2 + 2^1 + 2^0
= 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1
= 255
我们取其中一个字节比如0xf3
0xf3 //16进制
f 3
\ \
1111 0011 //二进制