以太坊

目的是让开发者可以在此之上开发Dapp

账户Account

state:

  • account: 是个对象,有20字节的地址
{
  nonce:  序号,
  balance: 剩下的钱
  contract code :代码的hash ,合约账户有,外部账户就没有
  storage : 默尔树的根hash,默认空的
}
  • 状态转换: 二个账户之间转移价值和信息

账号有2类

  • externally owned accounts
    私钥控制, 没有代码. 通过创建交易从它发送消息, 是最初的发起者
  • contract accounts
    合约代码控制.收到消息后,代码激活, 它就可以
    • 对内部存储读写
    • 发送消息
    • 创建合约

交易transaction

存着externally owned account发送的消息(message) 的 签名数据包 , 叫交易
里面的数据是:

{
接受者
发送者签名
一定数额用于发送的以太币
 data: 可选
STARTGAS : 数字,代码交易执行的最多计算步骤 相当于gas limit
GASPRICE:数字,代表每个计算步骤的自己愿意给的价格
}

gas: 就是俗称的燃料

为了防止代码无限循环, 规定交易必须写计数步数限制STARTGAS. 计算的基础单位是gas.一般来说,计算一步是一gas.但是计算复杂的或者占空间大的会更高.另外 一个byte 算5gas的费用

gasprice 会影响到该笔交易被打包所需等待的时间。
如果该交易的操作所使用的gas数量小于或等于所设置的gas limit,交易会被处理。但如果gas总消耗超过gas limit,所有的操作都会被重置,但手续费依旧会被收取。
区块链会显示这笔交易完成尝试,但因为没有提供足够的gas导致所有的合约命令都被复原。
交易完成之后没有被使用的gas会以以太币的形式返还给发起者。gas消耗只是一个预估值,所以许多用户会超额支付gas来保证他们的交易会被接受。
原文:https://blog.csdn.net/wo541075754/article/details/79042558

消息调用 Messages

合约产生的 交易
和交易很像,就少了一个gas价格字段
区别是 它由合约产生的,而不是外部账号
它是一个虚拟的对象,不会被系列化, 只有执行环境存在,合约执行CALL码时产生.这样,合约可以和合约接触, 就好像外部账户和合约接触一样
gas 可以被交易或者合约 分配

例子

交易:

{
接受者:是一个合约账户,
发送者签名: 一个外部账户的签名,
一定数额用于发送的以太币: 10 ether value,
 data: (2,"CHARLIE"),
STARTGAS : 2000 gas
GASPRICE:0.001 ether gasprice
}
  • 检查
  • 2000 * 0.001 = 2 ether.从发送者账户 减掉2个 变成2000gas
  • 假设交易有170直接, 2000-170*5=1150
  • 从发送者账户-10ether, 合约账户+10ether
  • 运行代码, 把合约存储器index2设为"CHARLIE", 假设这消耗了187gas,1150-187=963, 之前在发送账户扣掉的2000gas 还剩963gas
  • 963 gas还给发送者

以太坊区块

和比特币区块的区别在于, 以太坊区块不止保存了交易, 还保存了最近的状态
另外, 以太坊区块 把区块数量也记入了区块

你可能感兴趣的:(以太坊)