赞
踩
1.什么是UTXO?
2.UTXO如何构建用户余额?
3.以太坊的做法?
交易即签名的数据包,由EOA发送到另一个账户。
合约可以向其他合约发送“消息”
消息是不会被序列化的虚拟对象,只存在于以太坊执行环境(EVM)中
可以看作函数调用
从proof of work(工作量证明机制) -> proof of stake(股份证明机制)
增加了对去中心化合约的支持,即smart contract。注意:不是所有的合同都能够写成智能合约的形式的,只有逻辑相对来说比较简单的合同才行。
智能合约是运行在区块链上的一段代码,代码的逻辑定义了合约的内容
智能合约的账户保存了合约当前的运行状态
solidity:是智能合约最常用的语言,语法上与JavaScript很接近
balance:当前余额
nonce:交易次数
code:合约代码
storage:存储,数据结构是一棵MPT(默克尔压缩前缀树)
注意: 只有bid()函数有payable,因为规定了如果你的合约是能够接收外部转账的话,则标注payable。
fallback:智能合约中的一个特殊的函数(编写智能合约时可以写也可以不写)。
作用:当一个账户data域是空的,即什么也不说就往这里转一笔钱,则会调用fallback()函数。
智能合约是一个Turing-complete Programming Model(图灵完备的计算模型)
若智能合约时一个死循环代码肿么办?
执行合约中的指令要收取汽油费,汽油费由发起交易的人来支付
EVM中不同指令消耗的汽油费是不一样的
Tip:回滚(Rollback)指的是程序或数据处理错误,将程序或数据恢复到上一次正确状态的行为。回滚包括程序回滚和数据回滚等类型。
交易只有执行和不执行两种,没有执行到一半这种情况。为了防止有人每次发起复杂的合约,却又不提供足够的汽油费,白白浪费矿工的算力,故使用矿工算力的这部分gas是不进行退回的。
BTC的出块速度是十分钟一个,以太坊的出块速度是几十秒一个。
BTC中区块是有限制的,规定了每个区块不超过1M(1024KB)。为了防止矿工将大量的交易都存储在一个区块中进行存储,这样会消耗大量的资源。
以太坊的GasLimit是可以进行调整的,每个获得记账权(即出块)的矿工可以将GasLimit上调或下降1/1024。最后的结果是GasLimit便趋向于所有矿工的总体意见。
问题1:先挖矿还是先执行?
回答:现执行。
问题2:没有获得记账权的节点有补偿么?
回答:实际情况是没有补偿的,汽油费全给了有记账权的全节点。因为目前汽油费和出块奖励相比而言是很少的,所以目前问题没有很严重。
问题3:会不会有节点不对新挖出的区块进行验证,然后继续挖?因为验证也没有奖励。
回答:不会,因为对新产生的区块进行验证了之后才会更新本地的三棵树。才能够继续进行挖矿,否则当之后你自己挖到了区块了之后便无法进行发布了,因为跟其他区块数据不同步。
问题4:智能合约执行的过程中出现了错误,还需要发布到区块链上么?
回答:需要的,因为需要扣除汽油费。
问题5:智能合约支持多线程吗?
回答:不支持。因为以太坊是一个交易支持的状态机,需要足够的稳定性。多线程问题在于多个核对内存访问顺序不同的话,执行的结果也可能不同。
1.状态树、交易树、数据树均在全节点,由全节点在本地进行维护的数据结构。
2.当一个账户A发布一个智能合约之后,每个全节点都在它的本地账户将账户A的汽油费扣除,若汽油费不够的话则根本不会执行智能合约;若汽油费过多的话,则会将多出的汽油费返回账户A。
3.当其中一个全节点获得记账权之后,它将本地的交易记录在新产生的区块中。而其他全节点的三棵状态树会进行回滚,再将新产生的区块的交易信息更新到本地三棵树的数据结构中。
addr.balance:某个地址的余额
addr.transfer(12345):向addr这个地址转入12345wei。
如果智能合约设计的不好的话,可能会导致投入的所有以太币均被锁死在合约账户里,永远取不出来。
transfer(12345):向addr这个地址转入12345wei。
如果智能合约设计的不好的话,可能会导致投入的所有以太币均被锁死在合约账户里,永远取不出来。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。