Blockchains & Distributed L week3 爱宝授课记录(2)

比特币与以太坊

相同点

比特币和以太坊都是成功的区块链技术应用,是最典型的代表。具体点是:有了比特币才有区块链技术,有了以太坊人们才认识到区块链还可以独立出来。不仅仅是比特币才能有区块链技术,还有以太坊为后面开启了区块链世界的思路、思想。因为都是区块链技术的应用,所以底层基础思路是一样的。都是点对点的网络节点、公开的账本、共识基础算法,都是通过挖矿来维护网络。

不同点

比特币是点对点数字化支付系统,类似的是一家可以全球结算的银行,而这个银行是没有中心化组织成员的,没有群主,没有管理员,只有代码和共识的基础原则。而这个银行的结算或者发行的货币就叫比特币,这家银行也叫比特币。最主要的是银行的账本完全公开的,任何人查看每笔交易和记录都可以,而且每笔交易都可以追溯到源头,通过加密及数学魅力也实现了账本不可更改等特性。

而且最大的特点,点对点价值传输,不需要其他第三方,或者信任机构。而以太坊是点对点的去中心化的虚拟机,虚拟机是干什么的,就有点像在阿里云买的服务器,各种环境已经配置好了,就等你按照开发框架和开发语言来编写自己的程序代码,把程序安装在这个虚拟机系统运行,如果是一台虚拟机和现在的也没太大区别,但是整个以太坊系统是可以由全球任何计算机加入到这个体系了,每台电脑只要安装了以太坊客户端就可以成为以太坊的一个节点一个虚拟机,所以整个以太坊系统未来规模再发展的话,可以说是全球超级计算机系统,人人都可以开发程序放在这个超级计算机运行。

现在的都是集中的云服务器,中心化的,可能有几个备份,但是一旦坏死,就不能运行,但是点对点的网络特点就是,就算几个节点下线了,或者被攻击了,有一部分在运行整个系统还是可以运行,抗风险抗错性很高。所以从最底层的定义来说,比特币解决的世界货币问题,没有能增发货币,没有能说取消或者没收你财产,直接真正存在网络上,你自己完全保管。以太坊则是,做全球的超级计算机,提供整个系统的底层,未来以太坊可能像现在电一样的底层基础资源。

以太坊的账户

比特币中是用的基于交易的账本,这种模式下,系统中并没有显示的记录每个账户上有多少钱,要根据UTXO里的信息推算,包括想知道这个人一共总资产有多少个比特币,就算一下这个人的所有账户,就他有私钥的那些账户在UTXO里面一共有多少个币就可以了,好处是隐私保护比较好,你有多少钱,可能连你自己都说不清楚,那别人就更不清楚了。

但是这样就带来一个问题,就他使用上比较别扭,跟我们的日常体验不太一样,像转帐的时候,A要转给B10BTC,A要说明这10个币的来源,其中七个币是前面这个交易中收到的,另外三个币是之前另外一个交易收到的,证明币的来源的合法性,和我们平时去银行的体验是不太一样的,银行是你存钱的时候要说明钱的来源,下次花钱的时候是不用说明每一笔钱是从哪儿来的。

基于账户的模型

以太坊采用的是基于账户的模型(account-based ledger),这种模型跟银行账户是比较相似的,系统中要显示的记录,每个账户上有多少个以太币。

比如A转给B10ETH,这个交易的合法性只要检查一下A账户上有没有足够的钱就行了,比如A账户上有一百个以太币,要转10个给B,这就没问题,不用说明这100个以太币中是具体把哪十个转给了B,不用说明币的来源,是来自之前哪个交易,将来B要转给C三个以太币也是可以的,不用把剩下的转给他自己,因为有显示的这种余额的概念,所以剩下的币就直接发到账户上就行了

在数据结构上,以太坊账户包含四个存储区域:

address,地址用来唯一表示以太坊账户(中文资料都不写address 但是你们老师写了,就当有吧)

Nonce:该区域用来存储账户已经发起的交易数量,可以防止重放攻击。(它是一个计数器,给出了这个账户到目前为止的交易次数) 智能合约:该区域用来存储智能合约的可执行代码。(只有合约账户才有代码) 账户余额:该区域用来存储账户中剩余代币数量,在以太坊中,就是以太币ether。 账户存储:该区域用来存储持久化数据,默认为空。 只有**合约账户才有 所以这个字段你们老师没展示。

 

UTXO vs Account based

 

两种类型的账户

用户账户 Personal accounts 也叫外部账户(externally owned accounts)由密钥控制

合约账户 Contract accounts 由智能合约的代码控制

合约约存在于数据库中。合约是存在于数据库中的程序。它还有一个与之关联的帐户。所以程序可以拥有一些钱。它可以做一些操作。它和用户的其他账户有一些区别,所以现在创建合约账户时,要引入两个新字段。

合约代码 :该区域用来存储智能合约的可执行代码。(只有合约账户才有代码

Storage:它是由程序处理的存储的一部分,当我在这里说存储时,我指的是字面上的存储,用来存储持久化数据

 

具体两种账户类型如下:

 

注意就是:用户账户也叫外部账户没有code和storage字段。

以太坊如何交易

以太坊交易图如下,一共四个字段。(和中文教材略有不同)

 

From :交易发送者的地址,必填;

Signiture : 由发送方私钥对新交易进行数字签名;

To :这笔钱要转到的账户地址; 如果为空则意味这是一个创建智能合约的交易;

Amount : 是交易额。这个简单,不用解释;

如果你想与智能合约进行交互会发生什么 ? 如果你想和程序或者其他工具交互在这种情况下,我们有另一个字段,也就是data;

 

data : 存在的数据字段,如果存在,则是表明该交易是一个创建或者调用智能合约交易;

比如说在调用中我们想要调用什么函数或者想要创建一个合约或者你想要给那个合约什么参数,就需要用data字段了。

如何创建合约

首先必须有人创建一个程序。总得有人把程序部署到分布式账本上。必须有人在数据库上发布程序的代码。要做到这一点,你需要创建一个交易。所以你是合约的创造者。因此,您创建了一个不指定任何收件人的交易。接收方只是一个数据库。在data字段中,要包含合约代码,这是要部署到数据库上的程序代码。如果你想在程序的内部状态中初始化一些值,可能还需要一些初始参数。

 

它通过虚拟机,将任何东西都放入到数据库中,现在这个程序存在于数据库中,假设。和另一个用户。他们所做的是创建一个新的交易。因此,为了与程序交互智能合约,你需要与它的交易进行交互。怎莫做呢?

首先,你必须定义你想和哪个账户互动。必须定义您想与之交互的合同的地址。这就是为什么它的合约有一个地址,因为你需要知道你想要交互的合约的标识符;后你定义多少钱,多少代币,要发送给合同。最后,定义要调用的函数、方法以及参数。因为合约最终只是一个程序,并定义了一个API。 一些带参数的函数。

 

现在我们有了一种新的交互类型,你可以创建一个交易,向另一个个人账户发送一些钱,也可以与合约账户交互,这意味着两者都可以。

合约部署好,被激活后就可以运行了,可以更改内部。所以你可以读这种代码,做任何程序要做的事情。它也可以发送一些交易给其他合同或它可以调用其他合同。合约作为一个账户不能做的是它不能自己发起交易,必须其他人调用。

智能合约可以简单的理解为一段可执行的程序片段,具体的代码由发布人使用特定的编程语言来编写,在本地编译成功后可以发布到区块链上。而以太坊的智能合约也可以理解为一个特殊的交易(包括可执行代码的),被发送出去后会被矿工打包记录在某一个区块中,当需要调用这个智能合约的方法时只需要向这个智能合约的地址发送一笔交易即可,通过交易触发智能合约后智能合约的代码就会在EVM中执行了。

当合约想要与另一个合约交互时,他们通过消息来实现。因此,消息类似于事务,只不过它们是通过合约重新创建的,而且是虚拟的。所以你看不到数据库本身的消息。它们不会被记录在数据库中。

因此个人账户可以把钱汇到个人账户。个人账户可以与智能合约交互,既可以创建它们,也可以通过调用函数与它们交互。

 

如上图,个人账户可以与智能合约交互,智能合约之间也可以相互调用通过message。

下图展示了 个人账户之间交易、创建合约、调用合约的字段。

 

合约销毁我没太懂,大致说的是一种情况能kill 一种不能kill 不过也没啥用感觉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值