智能合约介绍
区块链基础概念
区块链可以当作一个数据库,只是保存数据的原理和mysql,Oracle 等传统web2 数据库不同。
交易
区块链是个任意地方共享的数据库,所有人用户都可以通过网络从这个数据库读取数据。
如果用户需要改变这个数据库里的数据,需要通过发起交易。
举个例子,如果发起了一个转账,这笔转账确保了相同的数量从发起方被减少,而这笔转账的数量被加到了收取方。
区块
基于区块链的交易有一个问题就是 "双花攻击“ , 如果同时发起两笔交易,只能有一笔是有效的,也就是首先被接受的那笔。
以太坊虚拟机(Ethereum Virtual Machine)
概述
以太坊虚拟机是以太坊合约的运行环境。不仅是沙河,而且还是完全隔离的,意味着EVM无法访问网络,文件系统或者其他途径。智能合约甚至可以限制其他智能合约。
账号
以太坊有两种账号,外部账号和合约账号。外部账号-通过公私钥控制(比如用户),合约账号由代码控制。
1、外部账号的地址由公钥在合约创建的时候就决定了。
2、每个账号都有一个永久键值对,将256字节映射256个字节,称之为 storage 。
3、每个账号都有 以太坊余额,可以通过发送交易修改包括以太坊的数量。
交易
交易是一种从一个账号发送到另外一个账号的信息。这个信息包括 二进制数据 和 以太坊。
汽油费 (gas)
每笔交易都会被收取一笔汽油费(gas), 该笔汽油费由交易发起方支付。
这笔 gas 补偿了 EVM 执行者,即矿工,用来激励EVM 执行者的工作。
汽油价格 由发起方设定。预先支付给EVM执行者,如果没用完,则退还。
存储,内存和栈
EVM 有三个可以存储数据的区域 ---- 存储,内存和堆栈。
存储---每个账号都有一个 storage 的数据区域,在函数调用和事务之间是持久的。storage 是 256 字节映射 256 字节的键值对。
内存--合约为每个消息调用获取一个新清除的实例。内存是线性的,可以实现字节级别寻址。读的宽度是256字节,写的宽度是 8 和 256字节。访问未读过的地址就要gas费用。
EVM 是堆栈机,所有计算都在堆栈上运行。
指令集
EVM 指令集 有算术、位、逻辑和比较操作。
对基本数据类型、256 位字或内存片(或其他字节数组)进行操作。
--------------------------------------------------------------------------------------------
引用:https://docs.soliditylang.org/en/v0.8.13/introduction-to-smart-contracts.html#blockchain-basics