21世纪技术官导读:在本篇文章中,我们将向各位介绍开放源代码区块链以太坊背后的主要概念,以及它是如何确保我们的交易安全的。
一、什么是以太坊?
以太坊(Ethereum)是一个开源的区块链平台,它可以构建和运行分布式的应用程序。以太坊是一个“单例(Singleton)”模式可缩放的计算机网络,我们可以理解成一台可供所有人用的单台电脑。也是一个几乎为零的公共区块链基础设施平台。
任何一个加入以太坊区块链的人都可以把程序上传到该平台上,并可以请求执行上传的程序。
二、以太坊虚拟机(Ethereum Virtual Machine)
EVM是以太坊的核心,它是一个可编程的区块链。开发者可以用它创建任何复杂的操作。EVM侧重于提供安全性,可以防止Dos(拒绝服务)等常见的网络攻击。
它可以用于加密数字货币,例如区块注册,银行交易等。它支持一个P2P网络,并确保通信可以毫无干扰的进行传输。
简而言之,开发者可以理解成一个智能合约的运行时环境,这与Java中的Java虚拟机原理一致。
三、以太坊客户端
以太坊客户端支持如下开发语言:
四、什么是矿工
它为用户提供计算处理能力。一旦你加入到网络,你就会在以太坊网络中拥有一个节点,节点可以接收事务,传播,验证事务并执行。它可以接收名为“Ether”(以太币)的小型加密货币,这是验证网络的交易费用。
我们来了解一些关于矿工的重要事项。
Ether(以太币):这是一个加密货币,用于折算区块链网络的计算贡献,可以兑换成比特币与美元。
工作量证明(Proof of Work):解决一个复杂的数学问题,以便成功的“挖掘”出一片街区被称为“工作量证明”。
五、以太坊如何工作?
以太坊的一切都是基于帐户的。在以太坊状态下有两种类型的帐户,并且都有一个帐户余额。
1)外部帐号(EOA)- 这些是用户控制的帐号。他们可以进行交易(转账或触发合约代码)。这通常由私钥控制,它不带有任何相关代码。
比如,钱包地址看起像这样:
0x2easdf8745dfgszxcvkhsdf543sfg5shhhkjha (公共密钥的版本)。
2)合约 - 这是一个系统或内部代码。它维护着一个存储数据,以来调用其它的合约。合约存储着多个用户之间正在进行的合约或关系。例如,合约的钱包地址如下代码所示:
0x9812dfgfdskjhgfgszxcvkhsdf543swg5shskkmh
以太坊内的每一项行为都是通过EOA发起的交易产生的,EOA可以触发与另一个EOA或合约的交易。合约代码由参与以太坊网络的每个节点的EVM执行。 合约可以执行交易/调用其它合约。
账户交互可以理解为如下图:
智能合约
智能合约是一种代码(使用协约账户),执行毫无风险的透明交易。可以通过下面的图例来理解。
以太坊密钥文件
私钥:这是一个包含64个字符的字符串。64位之外的字符串都是有效的密钥。
公钥或钱包地址:散列私钥的最后40个字符,前面以'ox'表示是十六进制格式。
让我们看看下面的密钥转换图(私有到公共)
现在在让我们再看一下以太坊的一些工具,这些工具可以用来代替以太坊。
etherscan.io
这是一个块浏览器。图中箭头指向的是一些重要的元素。
ethstats.net
以下是以太坊的仪表盘,用来显示以太坊的统计数据。
区块链交易
“一个签名数据包,用于存储从外部账号(EOA)发送到区块链上另一个账户的消息。
——Jameson”
想在区块链中做任何事情都须经过交易。在交易中包含以下属性:
1)To(收件人):收件人或合约地址
2)From(发件人):启动交易的发件人(帐号或合约地址)
3)Gas价格:EVM中的每个OpCode(我们希望执行的任何计算步骤都具有相同的OpCode)都有固定的价格。Gas是交易发件人需要为以太坊区块链上的每一项操作支付的执行费用。由于它是一种“加密燃料”,因此被命名为'Gas'。
4)Gas限制:最大可计算步骤交易被执行;这意味着每个事务都有限制数量的允许计算步骤。
5)Gas使用数:所有OpCodes执行的所有Gas的总和。
6)Value:已交易的Ether以太币Wei(乙太币的基本单位称为Wei )。
7)签名:用以识别发件人,以便可以验证发件人的意图。
8)Nonce:发送账户的交易顺序号码; 这有助于以正确的顺序对交易进行索引和处理。
9)块高度 :此处为唯一的块编号。
10)数据:有效载荷; 原始数据或合约。
如果你指定的gas过少,如果交易开始执行,但可能会用尽gas,并且会因“燃气”异常而停止。
说明:以太坊加密算法并不是基于RSA加密。 相反它采用了Elliptic Curve Cryptography(ECC)算法。
什么是OpCode?
这是一个机器语言指令,指示机器执行特定的操作。 因此,OpCode可以被理解为汇编语言。
无论我们将哪些代码编写为智能合约或交易的一部分,它都会被EVM(以太坊虚拟机)编译和解释,并生成等效的OpCode,以便EVM可以执行。
这些操作中的每一个都有一些成本,会以“gas”为单位来衡量。任何交易中所有OpCode的累计总和就是该交易的总成本。
一些以太坊操作码及其意义如下。
停止和算术操作:
0x00 STOP Halts execution
0x01 ADD Addition operation
0x02 MUL Multiplication operation
0x03 SUB Subtraction operation
0x04 DIV Integer division operation
0x05 SDIV Signed integer
0x06 MOD Modulo
0x07 SMOD Signed modulo
0x08 ADDMOD Modulo
0x09 MULMOD Modulo
0x0a EXP Exponential operation
0x0b SIGNEXTEND Extend length of two's complement signed integer
比较和按位逻辑操作:
0x10 LT Lesser-than comparison
0x11 GT Greater-than comparison
0x12 SLT Signed less-than comparison
0x13 SGT Signed greater-than comparison
0x14 EQ Equality comparison
0x15 ISZERO Simple not operator
0x16 AND Bitwise AND operation
0x17 OR Bitwise OR operation
0x18 XOR Bitwise XOR operation
0x19 NOT Bitwise NOT operation
0x1a BYTE Retrieve single byte from word
SHA3:
0x20 SHA3 Compute Keccak-256 hash
环境信息:
0x30 ADDRESS Get address of currently executing account
0x31 BALANCE Get balance of the given account
0x32 ORIGIN Get execution origination address
0x33 CALLER Get caller address. This is the address of the account that is directly responsible for this execution
0x34 CALLVALUE Get deposited value by the instruction/transaction responsible for this execution
0x35 CALLDATALOAD Get input data of current environment
0x36 CALLDATASIZE Get size of input data in current environment
0x37 CALLDATACOPY Copy input data in current environment to memory This pertains to the input data passed with the message call instruction or transaction
0x38 CODESIZE Get size of code running in current environment
0x39 CODECOPY Copy code running in current environment to memory
0x3a GASPRICE Get price of gas in current environment
0x3b EXTCODESIZE Get size of an account's code
0x3c EXTCODECOPY Copy an account's code to memory
块信息:
0x40 BLOCKHASH Get the hash of one of the 256 most recent complete blocks
0x41 COINBASE Get the block's beneficiary address
0x42 TIMESTAMP Get the block's timestamp
0x43 NUMBER Get the block's number
0x44 DIFFICULTY Get the block's difficulty
0x45 GASLIMIT Get the block's gas limit
堆栈,内存,存储和流程操作:
0x50 POP Remove item from stack
0x51 MLOAD Load word from memory
0x52 MSTORE Save word to memory
0x53 MSTORE8 Save byte to memory
0x54 SLOAD Load word from storage
0x55 SSTORE Save word to storage
0x56 JUMP Alter the program counter
0x57 JUMPI Conditionally alter the program counter
0x58 PC Get the value of the program counter prior to the increment
0x59 MSIZE Get the size of active memory in bytes
0x5a GAS Get the amount of available gas, including the corresponding reduction
0x5b JUMPDEST Mark a valid destination for jumps
系统操作:
0xf0 CREATE Create a new account with associated code
0xf1 CALL Message-call into an account
0xf2 CALLCODE Message-call into this account with alternative account's code
0xf3 RETURN Halt execution returning output data
0xf4 DELEGATECALL Message-call into this account with an alternative account's code, but persisting the current values for `sender` and `value`
我们不需要编写低级程序(使用OpCode),因为设计智能合约时有高级语言开发。
掌握交易成本
预计交易成本
If the GasLimit = 2100 and GasPrice =23.089 gWei
上面表达式的解释为 - “我们想以23.089gWei的价格买最多2100个天然气”
所以,估计的最大交易成本
= GasLimit * GasPrice = 2100 * 23.089
= 53104.7 gWei
实际交易成本
If the GasUsed = 2040 and GasPrice = 23.089gWei
上面表达式的解释为 -“我们花了2040Gas,价格为23.089gWei。”
所以,实际交易成本= GasUsed * GasPrice
= 2040 * 23.089
= 47101.56 gWei
我们希望本篇让大家更好地了解区块链和以太坊交易流程。
愉快地学习吧!
作者:志刚
来源:21世纪技术官编译
领取专属 10元无门槛券
私享最新 技术干货