java 单机接口限流处理方案
388
2022-10-24
区块链学习(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是由在网络上的矿工决定的,可以参考反馈的数据。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在线编译器网址:、Linux等各种操作系统。
11、Geth的全称是Go-ethereum,是一个以太坊客户端,也是目前最常用的客户端,使用Geth进行开发调试也是比较好用的,Geth客户端具有完备的操作指令,在我们刚刚接触以太坊开发时,使用Geth进行简单的私链调试是非常好的学习环境。geth命令用法:
geth [选项] 命令 [命令选项] [参数…]
命令:
account 管理账户attach 启动交互式JavaScript环境(连接到节点)bug 上报bug Issuesconsole 启动交互式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:secret@host: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:
12、Truffle是针对基于以太坊的Solidity语言的一套开发框架。可以利用他开发去中心化应用(Dapps)
13、testrpc是在本地使用内存模拟的一个以太坊环境,对于开发调试来说,更为方便快捷,当合约在testrpc中测试通过后,再部署到geth中去。testrpc不同于geth,geth是真正的以太坊环境。
14、hash概念: hash算法是一种加密算法,是把任意长度的输入通过散列函数变换为固定散列长度的输出算法。这类算法是公开的,且是一种单向密码体制,即一个从明文到密文的不可逆映射,只有加密过程,没有解密过程。如:MD5和SHA-1可以说是应用最广泛的Hash算法。具有五个特性:(1)易计算,任意给定输入容易计算;(2)易压缩,输入任意长度输出长度固定;(3)单向性,没有可逆算法解密;(4)输入敏感,任何微小改变会造成输出很大的变化;(5)抗碰撞性,很难找到输入不同输出结果相同的hash对
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
评论列表