solidity学习笔记(一)
0x01 前言
学习solidity最好的教程就是官方手册,这里我在知乎找到了一篇问答:https://www.zhihu.com/question/266048727,将学到的知识点都归纳总结。
官方文档:https://solidity-cn.readthedocs.io/zh/develop/introduction-to-smart-contracts.html https://docs.soliditylang.org/en/latest/
其他手册:https://learnblockchain.cn/docs/solidity/solidity-in-depth.html
token:https://learnblockchain.cn/2018/01/12/create_token/ https://learnblockchain.cn/2018/03/23/token-erc721/
其他资料:https://github.com/yippee-ki-yay/eth-dev-reading-list
靶场 :https://cryptozombies.io/en/course https://ethernaut.openzeppelin.com/ https://capturetheether.com/challenges/
0x02 基本概念
一. 智能合约
1.基本概念:一个智能合约是一套以数字形式的承诺,包括合约参与者可在中间执行这些承诺的协议。通俗点来说,智能合约就是写在区块链上的代码,一旦某个时间触发合约上的条款和规则,
代码便自动执行。“智能”理解为不需要人为操纵,满足条件自动执行。因为你在区块链上不会提前消费,这时你有10元,自动扣费/交易支付时,就会触发智能合约,然后自动扣费。
以太坊网络上运行程序就称之为智能合约, 它和其他的程序一样,也是代码和数据(状态)的集合。
2.语言:智能合约现在的主要编程语言是 Solidity 和 Vyper ,Solidity
更为成熟一些,Solidity
合约文件扩展名是 .sol
3.运行环境和编译:EVM(Ethereum Virtual Machine)以太坊虚拟机 用来执行以太坊上的交易,提供智能合约的运行环境。以太坊上运行的时合约的
字节码形式,需要我们在部署之前先对合约进行编译。编译器有:remix、solc
4.钱包:以太坊客户端,可以理解为开发者工具,提供账户管理、挖矿、转账等功能。Geth客户端基于GO语言开发, Geth
提供了一个交互式命令控制台,通过命令控制台中包含了以太坊的各种功能(API)。
5.部署:将合约字节码发布到区块链上,并用一个特定的地址来标示这个合约,这个地址称为合约账户。
账户分为两种:外部账户(被四要控制,不关联任何代码);合约账户(有合约代码且与之关联)。
与比特币中的UTXO不一样,以太坊使用的是“账户“概念,比特币没有账户概念。一个外部账户到合约账户会激活这些代码,从而使合约进行一系列操作。
我们可以将外部账户理解为指令发出者。执行流程图:
EVM中的每条指令称为一个opcode,占一个字节,由于stack(执行堆栈)列宽为256bits,最大深度为1024,所以所有的OpCode指令集最多不超过256.
首先PC会从合约代码中读取一个OpCode,然后从JumpTable中检索出对应的operation(与其相关的函数集合)。通过操作,计算所需要的油费,如果邮费耗光则为失败,
返回ErrOutOfGas错误。如果油费充足,则调用execute()执行该指令,根据指令类型的不同,会分别对Stack、Memory或者StateDB进行读写操作。
下面这篇文章还讲到了如何调用智能合约函数,跟合约代码一起送到解释器里的还有一个Input,而这个Input数据是由交易提供的,就是通过压栈的规则、input格式来的,。
链接:https://learnblockchain.cn/2019/04/09/easy-evm/
6. Token(代币)
代币标准:这里列举了以太坊代币的标准:https://www.jianshu.com/p/998ebfa05098
代币分类:https://juejin.cn/post/6844903747601039368
剖析ERC721:https://learnblockchain.cn/2018/03/23/token-erc721/
创建自己的数字货币(ERC20 代币):https://learnblockchain.cn/2018/01/12/create_token/