以太坊(以太坊solidity合约)
- 1,以太坊
- 2,开发名词解释
- (1)钱包
- (2)Solidity
- (3)Ether(以太币)
- (4)Truffle
- (5)Web3.js
- 3,叔伯块矿工奖励计算
- 4,如何查询区块计算gas
- 5,第一个智能合约
- (1)语法格式
- (2)编译
- (3)部署
- (4)调用
1,以太坊
以太坊坊的钱包
Minist 是完整版的钱包,下载的是以太坊所有的数据,最终成为一个节点
数据太大,快一天才能下完
Metamask钱包
前面的是全节点同步
此开发人员只想借用钱包完成合约发布测试和部署
基于网页端的钱包,可以不用同步钱包所有信息,但可以实现合约测试和部署
一旦发布,代码开源和不可更改
天然是某些行业的解决方案
捐款、众筹、游戏等
比特币的区块只有交易信息,如下
https://cn.etherscan.com/blocks
此可以查看到从诞生之初到现在的以太坊的区块
每个区块除了交易信息外还有代码信息
智能合约可以发布和部署
一旦部署成功,每个合约会有一个地址,以后可以通过这个地址去调用合约中的函数,或修改合约中的状态
以太坊并没有
Solidity最大特点有地址类型变量,可以完成账户间的转账,而且也只有它对以太坊的分布式账本有读写和调用
前端的都是调用solidity,solidity访问底下的分布式账本
以太坊和其他区块链一样,也会有一个点对点的协议,完成转账和数据相关操作
智能合约只能通过虚拟机编译部署
以前服务器访问返回数据,基于区块链的分布式账本,全球的节点,写入数据操作昂贵,节点同步会消耗资源时间
开发了智能合约后要将合约部署到分布式账本以太坊需要花钱
部署完毕后,谁调用合约也要花钱,每次调用都花钱,若调用免费,会出现恶意写入数据的场景,geth优化分布式账本操作
Remix在线,有网,网速不快第一次打开会
如果网速不好,可以安装本地版,不暂
本地版门槛较高
专注编程
使用remix环境
练习时可以部署到本地,最后一层可以部署到远程
http://remix.ethereum.org
使用火狐可以打开此开发环境,谷歌浏览器暂时未打开
在中文文档中
https://learnblockchain.cn/docs/solidity/
2,开发名词解释
(1)钱包
想要玩以太坊相关的游戏,需要下载安装metamask在火狐浏览器
https://blog.csdn.net/lsqzedu/article/details/104727957
ETH Wallet
以太坊客户端,其实我们可以把它理解为一个智能合约运行环境,它提供账户管理、挖矿、转账、智能合约的部署和执行等等功能,而EVM是由以太坊客户端提供的
Remix类似钱包,偏向开发,账户部署调用
真正的钱包
插件形式的钱包metamask,转账,发送代币,不具备同步数据功能
(2)Solidity
一种语法类似JavaScript的高级语言。语法结构与JavaScript更为接近,支持结构体、面向对象 (封装、继承、多态、接口、抽象合约) 等特性,Solidity会被编译为用于EVM的代码。最大的优势在于可以直接与以太坊分布式账本进行交互。
只有此种语言可以完成与以太坊分布式账本的交互
Solidity被EVM虚拟机解析后,可以操作分布式账本,而在分布式账本里,
通常有两种交易
1,以太坊账号之间的转账交易
2,合约的部署和相应的调用
而java、python等都是间接的访问账本,通过solidity
Dapp (去中心化应用,即Decentralized application)
Dapp是可以让“终端用户间、终端用户和资源间、资源和资源间”在没有中间人的情况下直接进行互动、商定协议或通讯的应用程序
合约一旦部署到以太坊区块中,回合比特币的区块一样,永久存在此区块中不可篡改
一个一个的区块会分到全世界的终端
(3)Ether(以太币)
以太币是在以太坊中使用的货币的名称。以太币被用于支付在EVM(以太坊虚拟机)中进行计算所需的开销. Gas
公有链、联盟链、私有链
公有链:对所有人开放,任何人都可以参与,联盟链:Hyperledger Fabric.支持权限、多区块互联. 私有链:对单独的个人或公司内部开放
区块链权限掌控,联盟链,fabric最有名的,联盟链的开发框架
私有链,用于学习开发使用,使用remix部署本地私有链的操作,我们没有创建私有链,remix已经将所有工作开发好了,我们只需要开发即可
以后学习工作中很少、几乎不可能自己创建公链,而是将合约部署到以太坊公链
(4)Truffle
Truffle是针对基于以太坊的Solidity语言的一套开发框架,对开发,测试,部署实现了非常友好的支持. 让开发者专注智能合约本身
一门语言成熟不,有没有相应开发框架
Solidity,可以在百度搜索truffle框架,加速我们的开发应用
通过truffle生成模板,此处涉及到各种前端技术
可以使用JavaScript、vue、nodejs等间接调用solidity操作分布式账本
(5)Web3.js
Web3.js是以太坊提供的一个Javascript库,提供了一系列与区块链交互的Javascript对象和函数,包括查看网络状态,查看本地账户、查看交易和区块、发送交易、编译/部署智能合约、调用智能合约等 (提供了点对点网络交互的API)
Truffle本身使用JavaScript编写,web3.js
只需要有个钱包,就可以下载分布式账本里的区块信息,每个账本有区块数据,有合约部署调用,又称分布式数据库,只支持solidity的调用,为什么要学习solidity的原因
使用原生语言开发效率不高,维护也不方便
尽量使用truffle框架,
JavaScript、vue、nodejs等很方便的与Web3.js交互
https://learnblockchain.cn/2018/01/12/first-dapp/
3,叔伯块矿工奖励计算
两个矿工同时挖到一个区块
比特币出现孤块无奖励
以太坊有
https://blog.csdn.net/lsqzedu/article/details/104747369
以太坊的奖励机制和比特币不同
叔伯块的奖励机制,为了提高矿工积极性
叔块无交易手续费奖励的,且最后算的得到的奖励比较少
当时的固定报酬是5个以太币
发起的地址不同但都去往同一个智能合约(后面有文本标志的)
此合约完成的是众筹操作,前面的人是向此合约中打钱
上面的交易都打了感叹号,说明交易最后没成功,但尴尬的是交易手续费被扣了
交易失败和矿工无关
设置合约众筹金额
假设100个以太币,超过此则合约交易不再接受
众筹的以太币会原样返回,但扣的手续费就没了
4,如何查询区块计算gas
https://cn.etherscan.com/
https://cn.etherscan.com/blocks
https://www.yitaifang.com/blocks/
以上两个地址显示的区块都是一样的
高度每增加一个区块高度加1,时间不同
比特币10分钟出一个快
而以太坊9到10秒出一个块
出块时间缩短,处理能力强比比特币
单机block下的数字进入区块查看
单机进入65的智能合约交易
可以查看如下
上方有文本标记的就是智能合约
一旦整个合约部署成功就会生成唯一的哈希地址
可以查看合约代码
https://www.jianshu.com/p/a74afe1b171f
以太坊中的计量单位及相互转换
手续费= 本区块消耗的gas(14963259)*当前gas的价值(23.86)得到单位为以太坊
所有区块获得的手续费都独属于矿工
叔伯块也是有奖励的,就是双花、交叉时的出现的平行块
5,第一个智能合约
合约第一个字母大写
(1)语法格式
这一张主要是合约部署整个流程
https://learnblockchain.cn/docs/solidity/introduction-to-smart-contracts.html#subcurrency
勾选后,一旦编写程序,合约会自动编译
(2)编译
(3)部署
编译成功后就是合约部署,正常部署是本地合约部署到以太坊分布式账本
但此部署需要消耗以太币
Remix好处在于本地构建私有链,编译测试后再部署到远程就节省时间和经历
合约的部署和调用都会消耗ges,geth本身也是以太坊的一个货币单位,和以太坊换算
真实场景合约部署成功后,会有64位的地址,在下个视频可以根据这个地址调用其变量和其函数来进行智能合约的执行
上面的from就是部署合约的用户地址
所消耗的gas也能在上方看到
和比特币不同的是,合约的部署也是一笔交易,只要有交易就会生成64位的hash
(4)调用
一旦部署成功,使用另一个账户调用此合约会花钱
调用合约花费要少,水很深,调用不同的函数,函数的操作级别不同花费也是不同的
发现第3个用户,点击get函数的没有消耗以太坊gas,原因是其没有向变量写入东西,而是拿东西,分布式账本写东西代价很高,但读没问题
Remix开发工具的使用,智能合约编译、部署、调用
以太坊开发概念就好理解了