区块链学习(2)--以太坊中基本概念

1、以太币单位换算。以太坊的单位,沿袭了科学界的传统,用做过杰出贡献的数学、密码学专家的名字命名。以太坊的最小单位是 Wei。

Kwei(Babbage)= 10 的 3 次方 Wei

Mwei(Lovelace)= 10 的 6 次方 Wei

Gwei(Shannon)= 10 的 9 次方 Wei

MicroEther(Szabo)= 10 的 12 次方 Wei

MilliEther(Finney)= 10 的 15 次方 Wei

Ether = 10 的 18 次方 Wei

2、以太坊账户不同于比特币中UTXO。 账户分两类: 外部拥有账户(EOA)(普通账户),还有合约账户。
普通账户:存放以太币的账户,可以随意生成,特性如下:

  • 拥有以太币余额(以太币存放的地方,与比特币的UTXO模式不同)的balance。
  • 用于确定每笔交易只能被处理一次的计数器(nonce)。
  • 发送交易(以太币转账、发布合约、调用智能合约)
  • 通过私钥控制
  • 没有相关联的代码

合约 账户:是功能和数据的集合,存在于以太坊的特定地址(合约地址),特性如下:

  • 可以拥有代币余额
  • 有相关联的代码
  • 通过交易或消息调用的方式触发并由以太坊虚拟机(EVM)解释执行

3、以太坊交易:以太坊中一个账户向另一个账户发送被签名消息数据包的过程,区块链会记录并存储相关数据。以太坊智能合约改变一个合约账户的数据状态也是一笔交易,同样要花费手续费。

交易的要素包含以下几点:

  • 消息的发送者
  • 消息的接收者
  • 签名信息,用来证明发送者有意向通过区块链向接收者发送消息
  • 价值域,从发送方转移到接受方的以太币的数量
  • 可选的数据域,用来储存智能合约或调用智能合约的代码
  • gasLimit,该交易的执行时使用gas的上限
  • gasPrice,交易发送者愿意支付的gas费用的价格。
  • 一个单位的gas表示了执行一个基本指令,例如一个计算步骤。

4、区块gas limit是单个区块允许的最多gas总量,以此可以用来决定单个区块中能打包多少笔交易。区块的gas limit是由在网络上的矿工决定的,可以参考https://stats.ethfans.org/ 反馈的数据。Gas Price 燃料价格,GasUsed:该交易消耗的总gas数量。交易费 = gasUsed gasPrice,最高交易成本=Gas Price Gas Limit 。

5、交易发出后,会向全网广播,途径很多个矿工节点,这些节点又会帮你转发给下一个节点,直到你的交易被矿工打包进区块中。每一次转发都会消耗一部分Gas,如果被打包之前燃料耗尽,达到Gas Limit设置的上限,那这交易就一定会失败。ETH会退回,但燃料费还是要扣除。

6、智能合约,以太坊中创新在于它首次提出smart contract(智能合约)的概念和底层实现。所谓合约是指代码(功能)和数据(状态)的集合,存在于以太坊区块链的特定地址。智能合约是通过交易或消息调用的方式触发并由以太坊虚拟机(EVM)解释执行。

7、EVM是Ethereum Virtual Machine的简写,称为以太坊虚拟机,EVM是以太坊平台最核心的组件,所有的智能合约二进制字节码都依赖EVM来执行。EVM是一个运行环境,支持任意复杂的代码,在科学术语中称为“图灵完备的”。

8、Solidity是以太坊官方推荐的以太坊应用的高级编程语言,它的语法类似JavaScript,它被设计成以编译的方式生成以太坊虚拟机代码。所以如果我们要创建自己的合约代码,使用Solidity是非常容易上手的。

9、Browser-solidity是一个官方提供的基于浏览器的合约编译器,使用它进行一些简单的合约开发测试是非常好用的,另外它的编译器版本会及时更新。Solidity在线编译器网址:https://ethereum.github.io/browser-solidity

10、Mist是以太坊官方发布的图形客户端,它兼具钱包、开发调试于一体的图形化工具,方便我们创建、开发、测试和部署智能合约。Mist支持Windows、Mac 、Linux等各种操作系统。

11、Geth的全称是Go-ethereum,是一个以太坊客户端,也是目前最常用的客户端,使用Geth进行开发调试也是比较好用的,Geth客户端具有完备的操作指令,在我们刚刚接触以太坊开发时,使用Geth进行简单的私链调试是非常好的学习环境。
geth命令用法:

geth [选项] 命令 [命令选项] [参数…]

命令:

account 管理账户
attach 启动交互式JavaScript环境(连接到节点)
bug 上报bug Issues
console 启动交互式JavaScript环境
copydb 从文件夹创建本地链
dump Dump(分析)一个特定的块存储
dumpconfig 显示配置值
export 导出区块链到文件
import 导入一个区块链文件
init 启动并初始化一个新的创世纪块
js 执行指定的JavaScript文件(多个)
license 显示许可信息
makecache 生成ethash验证缓存(用于测试)
makedag 生成ethash 挖矿DAG(用于测试)
monitor 监控和可视化节点指标
removedb 删除区块链和状态数据库
version 打印版本号
wallet 管理Ethereum预售钱包
help,h 显示一个命令或帮助一个命令列表

ETHEREUM选项:

--config value TOML 配置文件
--datadir “xxx” 数据库和keystore密钥的数据目录
--keystore keystore存放目录(默认在datadir内)
--nousb 禁用监控和管理USB硬件钱包
--networkid value 网络标识符(整型, 1=Frontier, 2=Morden (弃用), 3=Ropsten, 4=Rinkeby) (默认: 1)
--testnet Ropsten网络:预先配置的POW(proof-of-work)测试网络
--rinkeby Rinkeby网络: 预先配置的POA(proof-of-authority)测试网络
--syncmode "fast" 同步模式 ("fast", "full", or "light")
--ethstats value 上报ethstats service URL (nodename:[email protected]:port)
--identity value 自定义节点名
--lightserv value 允许LES请求时间最大百分比(0 – 90)(默认值:0)
--lightpeers value 最大LES client peers数量(默认值:20)
--lightkdf 在KDF强度消费时降低key-derivation RAM&CPU使用

开发者(模式)选项

--dev 使用POA共识网络,默认预分配一个开发者账户并且会自动开启挖矿。
--dev.period value 开发者模式下挖矿周期 (0 = 仅在交易时) (默认: 0)

ETHASH 选项:

--ethash.cachedir ethash验证缓存目录(默认 = datadir目录内)
--ethash.cachesinmem value 在内存保存的最近的ethash缓存个数 (每个缓存16MB ) (默认: 2)
--ethash.cachesondisk value 在磁盘保存的最近的ethash缓存个数 (每个缓存16MB) (默认: 3)
--ethash.dagdir "" 存ethash DAGs目录 (默认 = 用户hom目录)
--ethash.dagsinmem value 在内存保存的最近的ethash DAGs 个数 (每个1GB以上) (默认: 1)
--ethash.dagsondisk value 在磁盘保存的最近的ethash DAGs 个数 (每个1GB以上) (默认: 2)

交易池选项:

--txpool.nolocals 为本地提交交易禁用价格豁免
--txpool.journal value 本地交易的磁盘日志:用于节点重启 (默认: "transactions.rlp")
--txpool.rejournal value 重新生成本地交易日志的时间间隔 (默认: 1小时)
--txpool.pricelimit value 加入交易池的最小的gas价格限制(默认: 1)
--txpool.pricebump value 价格波动百分比(相对之前已有交易) (默认: 10)
--txpool.accountslots value 每个帐户保证可执行的最少交易槽数量 (默认: 16)
--txpool.globalslots value 所有帐户可执行的最大交易槽数量 (默认: 4096)
--txpool.accountqueue value 每个帐户允许的最多非可执行交易槽数量 (默认: 64)
--txpool.globalqueue value 所有帐户非可执行交易最大槽数量 (默认: 1024)
--txpool.lifetime value 非可执行交易最大入队时间(默认: 3小时)

API和控制台选项:

--rpc 启用HTTP-RPC服务器
--rpcaddr value HTTP-RPC服务器接口地址(默认值:“localhost”)
--rpcport value HTTP-RPC服务器监听端口(默认值:8545)
--rpcapi value 基于HTTP-RPC接口提供的API
--ws 启用WS-RPC服务器
--wsaddr value WS-RPC服务器监听接口地址(默认值:“localhost”)
--wsport value WS-RPC服务器监听端口(默认值:8546)
--wsapi value 基于WS-RPC的接口提供的API
--wsorigins value websockets请求允许的源
--ipcdisable 禁用IPC-RPC服务器
--ipcpath 包含在datadir里的IPC socket/pipe文件名(转义过的显式路径)
--rpccorsdomain value 允许跨域请求的域名列表(逗号分隔)(浏览器强制)
--jspath loadScript JavaScript加载脚本的根路径(默认值:“.”)
--exec value 执行JavaScript语句(只能结合console/attach使用)
--preload value 预加载到控制台的JavaScript文件列表(逗号分隔)

网络选项:

--bootnodes value 用于P2P发现引导的enode urls(逗号分隔)(对于light servers用v4+v5代替)
--bootnodesv4 value 用于P2P v4发现引导的enode urls(逗号分隔) (light server, 全节点)
--bootnodesv5 value 用于P2P v5发现引导的enode urls(逗号分隔) (light server, 轻节点)
--port value 网卡监听端口(默认值:30303)
--maxpeers value 最大的网络节点数量(如果设置为0,网络将被禁用)(默认值:25)
--maxpendpeers value 最大尝试连接的数量(如果设置为0,则将使用默认值)(默认值:0)
--nat value NAT端口映射机制 (any|none|upnp|pmp|extip:<IP>) (默认: “any”)
--nodiscover 禁用节点发现机制(手动添加节点)
--v5disc 启用实验性的RLPx V5(Topic发现)机制
--nodekey value P2P节点密钥文件
--nodekeyhex value 十六进制的P2P节点密钥(用于测试)

12、Truffle是针对基于以太坊的Solidity语言的一套开发框架。可以利用他开发去中心化应用(Dapps)

13、testrpc是在本地使用内存模拟的一个以太坊环境,对于开发调试来说,更为方便快捷,当合约在testrpc中测试通过后,再部署到geth中去。testrpc不同于geth,geth是真正的以太坊环境。

原文地址:http://blog.51cto.com/13238147/2118533

时间: 2024-11-10 00:18:09

区块链学习(2)--以太坊中基本概念的相关文章

区块链学习(3)--以太坊Dapp开发

DApp是Decentralized Application的缩写,译为:分散式的应用程序.App我们都知道,我们在智能手机上安装的应用程序也就是App.而DApp比App多了一个'D','D'的意思是分散式的.意思是 分散式的应用程序/去中心化的应用程序.与传统的App最大的区别是:DApp运行在去中心化的网络上,也就是区块链网络中.这里的DApp开发用以太坊智能合约为例,智能合约是记录在链上的一段能够控制链行为事件的一段协议,如:合约下关联账户转币.查账.投票.购买等等,合约里涉及的变量.常

区块链开发:以太坊网络

区块链开发:以太坊网络 一.geth Geth 又名Go Ethereum. 是以太坊协议的三种实现之一,由Go语言开发,完全开源的项目.Geth 可以被安装在很多操作系统上,包括Windows.Linux.Mac的OSX.Android或者IOS系统 Geth官网:https://geth.ethereum.org/ Geth的Github地址:https://github.com/ethereum/go-ethereum Ubuntu安装geth客户端: 官方教程:https://githu

区块链入门教程以太坊源码分析fast sync算法一

区块链入门教程以太坊源码分析fast sync算法一,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁.回归理性,表面上看相关人才需求与身价似乎正在回落.但事实上,正是初期泡沫的渐退,让人们更多的关注点放在了区块链真正的技术之上.this PR aggregates a lot of small modifications to core, trie, eth and other packages to collectively implement the eth/63 fast synch

针对网站漏洞怎么修复区块链漏洞之以太坊

前段时间以太坊升级架构,君士坦丁堡的硬分叉一个升级代号,被爆出含有高危的网站漏洞,该漏洞产生的原因是由于开启了新的协议模式eip1283导致的,也是区块链漏洞当中危害较为严重的,可以让一些交易进行重入,一个转账可以导致写入2次,但该漏洞并不是确实的可以进行重入漏洞.以太坊区块链在发现该漏洞之后,紧急的停止了以太坊的硬分叉升级,并与上个星期五召开了内部会议对其漏洞进行修复,延期对以太坊的硬分叉升级. 区块链当中,以太坊属于比较大的虚拟币,位列于比特币,第二.关于该漏洞的详情我们来分析一下,关于这次

币圈Telegram ICO筹8.5亿美元, 拟建第三代区块链网络, 目标以太坊

据国外媒体报道,币圈核心即时通讯工具Telegram本周(至2月17日当周)稍早递交给美国证券交易委员会(SEC)的一份文件显示,该公司已经通过ICO筹集到8.5亿美元资金,用于开发TON开源网络.研发和维护Telegram Messenger以及其他目的. 一.关于Telegram Telegram是一款开源且跨平台的IM工具(类似 Whatsapp.Messenger.微信),Telegram也叫电报,于2013年推出,目前拥有1.8亿用户,每天发送700亿条信息.被称为"俄罗斯版'微信'&

区块链开发_以太坊多重签名

假想这么一个场景: 有一天,你的朋友A来找你开公司,但是钱不够,希望你能在找一个人入伙. 然后,你就找了你另一个朋友C. 你们三个人分别出了500W开公司.但是由于公司资金流动性大,每次拿钱都要三个人分别拿钱,很不方便. 经过你们协商,就让你的朋友A管理公司财政. 结果,不久你的朋友A就带着公司的钱跑路了. 估计,你的朋友C会把你点天灯. 所以,以太坊上有一个很重要的功能,就是多重签名. 就是,建立一个合约钱包,这个钱包可以有多个账户(假定为三位).每次通过这个钱包转出超过额定限度(这里假定为2

创建自己的区块链游戏SLOT——以太坊代币(三)

一个以太坊合约版本的轮盘游戏,向合约转账ETH,有几率获得3,5,10,100倍奖励 合约地址:0x53DA598E70a1505Ad95cBF17fc5DCA0d2c51174b 捐赠ETH地址:0xdc834D429b3098f0568Af873c2d73b08790BF677 github地址:https://github.com/lxr1907/slot-on-ethereum pragma solidity ^0.4.18; contract LxrContract{ //18 dec

区块链入门教程以太坊源码分析p2p-rlpx节点之间的加密链路二

// Sign known message: static-shared-secret ^ nonce // 这个地方应该是直接使用了静态的共享秘密. 使用自己的私钥和对方的公钥生成的一个共享秘密. token, err = h.staticSharedSecret(prv) if err != nil { return nil, err } //这里我理解用共享秘密来加密这个initNonce. signed := xor(token, h.initNonce) // 使用随机的私钥来加密这个

区块链-如何在以太坊上制作自己的数字货币

copy from https://www.ethereum.org/token Create your own CRYPTO-CURRENCY with Ethereum The Coin We are going to create a digital token. Tokens in the Ethereum ecosystem can represent any fungible tradable good: coins, loyalty points, gold certificate