以太坊源码分析
以太坊 启动流程 以太坊 命令行库 以太坊 RPC 以太坊 账户管理 以太坊 交易 以太坊 共识引擎 以太坊 stateObject 以太坊 挖矿 以太坊 MPT 以太坊 数据存储 以太坊 Ethash算法 以太坊 控制台 以太坊 EVM 以太坊 地址算法 以太坊 keystore 以太坊 go-bindata 以太坊 RLP编码 以太坊 Transaction 以太坊 区块存储 以太坊 清除交易 以太坊 txpool 以太坊 交易、存储 以太坊 难度计算 以太坊 每年产量 以太坊 共识算法 以太坊 新区块流程 以太坊 blockchain以太坊资料
以太坊 面试题 以太坊 撤销交易 以太坊 加速交易 以太坊 节点 以太坊 state 以太坊 搭建私链 以太坊 genesis 以太坊 genesis处理 以太坊 ChainId NetworkId 以太坊 区块存储和查找 以太坊 RLP编码 以太坊 区块大小 以太坊 空块 以太坊 挖矿奖励 以太坊 Basefee 以太坊 EIP-1559协议 以太坊 MEV 以太坊 gas 以太坊 指标测量与监控 以太坊 ABI是什么以太坊源码分析
以太坊 启动流程 以太坊 命令行库 以太坊 RPC 以太坊 账户管理 以太坊 交易 以太坊 共识引擎 以太坊 stateObject 以太坊 挖矿 以太坊 MPT 以太坊 数据存储 以太坊 Ethash算法 以太坊 控制台 以太坊 EVM 以太坊 地址算法 以太坊 keystore 以太坊 go-bindata 以太坊 RLP编码 以太坊 Transaction 以太坊 区块存储 以太坊 清除交易 以太坊 txpool 以太坊 交易、存储 以太坊 难度计算 以太坊 每年产量 以太坊 共识算法 以太坊 新区块流程 以太坊 blockchain以太坊资料
以太坊 面试题 以太坊 撤销交易 以太坊 加速交易 以太坊 节点 以太坊 state 以太坊 搭建私链 以太坊 genesis 以太坊 genesis处理 以太坊 ChainId NetworkId 以太坊 区块存储和查找 以太坊 RLP编码 以太坊 区块大小 以太坊 空块 以太坊 挖矿奖励 以太坊 Basefee 以太坊 EIP-1559协议 以太坊 MEV 以太坊 gas 以太坊 指标测量与监控 以太坊 ABI是什么以太坊(Ethereum) 智能合约
智能合约(Smart contract )是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约概念于1995年由 Nick Szabo 首次提出。
智能合约的目的是提供优于传统合约的安全方法,并减少与合约相关的其他交易成本。

简单地说,智能合约可以理解为一个自执行的协议。智能合约可以自动处理协议的履行、管理、以及支付。以太坊智能合约,是能在区块链上执行的代码。
例如,可以编写这样一个智能合约:本月底之前,老王转账给小张1个以太币,这个智能合约部署后,就会在月底之前,自动把老王的1个以太币转账给小张,无需人为干预。
以太坊虚拟币与智能合约是构成以太坊网络的基石。
1. 智能合约语言
- Solidity Solidity是和JavaScript相似的语言,你可以用它来开发合约并编译成以太坊虚拟机字节代码。它目前是以太坊最受欢迎的语言。
- Serpent Serpent是和Python类似的语言,可以用于开发合约编译成以太坊虚拟机字节代码。它力求简洁, 将低级语言在效率方面的优点和编程风格的操作简易相结合,同时合约编程增加了独特的领域特定功能。Serpent用LLL编译。
- Lisp Like Language (LLL) Lisp Like Language (LLL)是和Assembly类似的低级语言。它追求极简;本质上只是直接对以太坊虚拟机的一点包装。
- Mutan (弃用) Mutan是个静态类型,由Jeffrey Wilcke 开发设计的C类语言。它已经不再受到维护。
使用最广泛的 Solidity,我们这里用 Solidity作为合约开发语言进行讲解。
2. 智能合约的编译

如上图合约文件 Helloworld.sol,经过编译器编译生成 Helloworld.abi 和 Helloworld.bin 文件。
solc helloworld.sol --abi --bin -o ./
- ABI 文件可以简单看作是合约的接口描述文件。
- bin 文件可以看作是一个二进制文件,这二进制文件就是EVM指令的集合。
3. 智能合约的部署

如上图,合约的部署跟发送一笔交易是一样的操作,调用transaction函数,from为发布者的地址,to为0,data为合约的evm操作码。在矿工打包的时候会生成智能合约地址。智能合约地址的生成是由创建者的账号和发送的交易数作为随机数输入,通过Kecca-256加密算法重新创建一个地址作为账号。也就是说最后合约地址对应合约的代码会保存在区块链数据库。调用者只需要有合约地址和abi文件就可以调用合约的代码。
4. 智能合约的调用

- 要调用合约需要合约的地址和合约的方法。
- 智能合约是部署在区块链的代码,区块链本身不能执行代码,代码的执行是在本地的EVM中,实际上,部署在区块链上代码是能够在本地产生原智能合约代码的代码,可以理解区块链为一个数据库,而客户端从数据库中读取了存储的运行代码,并在本地运行后,将结果写入到了区块链这个数据库中。
下一章:以太坊 ETH GAS
以太坊(Ethereum) ETH、Gas:与比特币网络有比特币类似,以太坊也有自己的虚拟币 — 以太币(ETH)。以太币的主要作用有两个:应用程序执行任何操作都需要支付以太币,防范以太坊网络被滥用。与比特币类似,用于激励矿工。每次执行智能合约时,都需要消耗 “汽油/Gas” 即支付以太币。
AI 中文社