区块链
文章平均质量分 90
Unicorn_snow
这个作者很懒,什么都没留下…
展开
-
北大肖臻老师《区块链技术与应用》系列课程学习笔记[29]总结
在互不信任的实体之间建立共识,有些人认为这是一个伪命题,因为互不信任的实体之间是无法交易的,比如说网上购物,不信任对方,给了钱不发货怎么办?国外有人提出将保险理赔业务放在区块链上,因为现在的保险理赔业务太慢了(大约需要几个星期),如果把保险理赔业务用比特币系统实现的话,等待6个确认区块(也就是大约1h的时间),理赔速度和理赔效率会快很多。还有说区块链可以防伪溯源的,如将有机蔬菜的生产到销售的全过程都写在区块链上,利用区块链的不可篡改性,使区块链生产销售的全过程透明。(4)支付方式的效率相关问题。原创 2022-09-03 14:00:00 · 563 阅读 · 0 评论 -
北大肖臻老师《区块链技术与应用》系列课程学习笔记[28]以太坊-美链
美链(Beauty Chain)是一个部署在以太坊上的智能合约,有自己的代币BEC。IPO,Initial Public Offering(首次公开募股);ICO,Initial Coin Offering(首次代币发行)。这些发行的代币没有自己的区块链,而是以智能合约的形式运行在以太坊的EVM平台上。发行代币的智能合约对应的是以太坊状态树中的一个节点。原创 2022-09-02 13:00:00 · 626 阅读 · 0 评论 -
北大肖臻老师《区块链技术与应用》系列课程学习笔记[27]以太坊-反思
智能合约真的智能吗?首先智能合约没有用到任何人工智能的技术,所以有人认为应该将其称为自动合约:按照写好的代码,自动执行某些操作,ATM取款机可以看作是物理世界中的自动合约。 一般我们认为不可篡改性是区块链的一个优点,有很多区块链的应用都利用了不可篡改性,如用它进行防伪、溯源等操作,但是通过The DAO的盗币事件其实已经能够意识到:不可篡改性实际上是一把双刃剑。(1)优点:不可篡改性增加了合约的公信力,所有人都只能按照合约中的规则来,没有人能够篡改这个规则。......原创 2022-09-01 12:44:57 · 2568 阅读 · 0 评论 -
北大肖臻老师《区块链技术与应用》系列课程学习笔记[26]以太坊-TheDao
拆分过程,就是split DAO(拆分DAO),这个拆分的方法并不仅仅是取回收益,还是建立子资金(chlid DAO)的方法。如果有一小部分人和其他人的投资理念不一样,这种情况下,这一小部分人可以用拆分的方法成立自己的子资金,拆分的时候手中的代币是要被收回的,换成相应数量的以太币,然后就可以投想投的项目。极端情况下,单个投资者成立一个子资金,在子资金里就能把所有的钱投给自己,这是投资者取回投资和收益的唯一途经。并没有withdraw()函数,竞拍不成直接取回,这里不行,只能用拆分的方法。原创 2022-08-31 14:14:35 · 1665 阅读 · 0 评论 -
北大肖臻老师《区块链技术与应用》系列课程学习笔记[25]以太坊-智能合约-5
在区块链上,任何未知的合约都可能使有恶意的,所以每次你向对方转账或者使调用对方某个函数的时候,都要提醒下自己,这个合约,这个函数有可能反过来调用你当前的这个合约,并且修改状态,小心一点总是好的。......原创 2022-08-31 09:30:11 · 1940 阅读 · 0 评论 -
北大肖臻老师《区块链技术与应用》系列课程学习笔记[24]以太坊-智能合约-4
now是当前区块的时间戳,这个跟这个block.timestamp是一个意思,智能合约里没有办法获得很精确的时间,只能获得跟当前区块信息的一些时间,如图1-2所示。智能合约的执行必须是确定性的,这也就导致了智能合约不能像通用的编程语言那样通过系统调用来得到一些环境信息,因为每个全节点的执行环境不是完全一样的,所以他只有通过一些固定的一些变量的值得到一些状态信息,下图1-1所示的表格就是智能合约能够得到的区块链的一些信息。这个合约发起的,而tx.origin是A这个账户,因为整个交易的发起者是A账户。....原创 2022-08-29 19:30:18 · 534 阅读 · 0 评论 -
北大肖臻老师《区块链技术与应用》系列课程学习笔记[23]以太坊-智能合约-3
全节点收到一个对合约的调用的时候,要一次性的先把这个调用,可能花掉的最大汽油费从发起这个调用的账户上扣掉,这个具体是怎么操作的,一个全节点可能用于验证交易,后面可能跟了一大堆矿工,光是进行挖矿,比特币中有些矿工光是算哈希值,就有一个ASIC矿机不停的算哈希值,没有全节点的其他功能,像验证交易,监听交易,验证发布的区块,他可能都是outsource给那个全节点做,我们说的时候不是很区分这两个概念,全节点和矿工。这个汽油费是怎么扣的?如果智能合约执行过程中出现了错误,要不要也发布到区块链上去。......原创 2022-08-28 16:30:15 · 1376 阅读 · 0 评论 -
北大肖臻老师《区块链技术与应用》系列课程学习笔记[22]以太坊-智能合约-2
智能合约由一个外部账户发起一个转账交易,转给0x0这个地址,然后把这个要发布合约的代码放到data域里面。创建一个合约,要发起一个转账交易,给0这个地址转账,转账的金额都是0,实际上并非真的要转帐,而是想发布一个智能合约。发布的这个智能合约的代码放到数据域就行了,合约的代码要编译成bytecode,然后在EVM上运行。JVM,Java Virtual Machine,目的是增强可移植性。EVM类似这种设计思想,通过加一层虚拟机,对智能合约的运行提供一个一致性平台。EVM有时叫做Worldwide Compu原创 2022-08-27 19:59:14 · 1096 阅读 · 0 评论 -
北大肖臻老师《区块链技术与应用》系列课程学习笔记[21]以太坊-智能合约-1
1.智能合约的本质是运行在区块链上的一段代码,代码的逻辑定义了智能合约的内容。2.智能合约的账户保存了合约当前的运行状态(1)balance:当前余额;(2)nonce:交易次数;(3)code:合约代码;(4)storage:存储,数据结构一是一颗MPT;3.Solidity是智能合约最常用的语言,语法上与JavaScript很接近。......原创 2022-08-26 18:22:00 · 1869 阅读 · 0 评论 -
北大肖臻老师《区块链技术与应用》系列课程学习笔记[20]以太坊-权益证明
基于工作量证明的共识系统从某种意义上来说,维护区块链安全的资源不是一个闭环,Block chain is secured by mining,用美元可以购买矿机,然后参与挖矿,资源是可以从加密货币系统的外面得到的。虽然近几年加密货币的市值有了很大的增长,但无论怎么说,跟世界经济总量相比,仍微乎其微。所以,如果有某个组织想要发动恶意攻击,只需用足够的资金购买挖矿设备,然后聚集到加密货币总算力一半以上的算力即可。外部的资源都可以转化成挖矿的算力,转换成对这个加密货币攻击的这种能力。像比特币这样比较主流的加密货.原创 2022-08-25 18:22:17 · 1443 阅读 · 0 评论 -
北大肖臻老师《区块链技术与应用》系列课程学习笔记[19]以太坊-难度调整
判断一下是不是有叔父区块,有的话,是用2减去前面这个数x,没有的话用1减去前面这个数x,然后接下来跟负的99相比,往下调有一个节限,不能比-99还要小,接下来算的是难度调整的力度,父区块的难度除以这个DifficultyBoundDivisor实际上就是2048,然后跟前面算出的系数相乘,加到父区块的难度上面去,基础部分的难度调整有一个下限,难度再小也不能小于那个D0,这个MinimumDifficulty就是那个D0=131072。输入是父区块的时间戳和父区块的难度,计算出当前挖的这个区块的难度。原创 2022-08-24 16:30:00 · 906 阅读 · 0 评论 -
北大肖臻老师《区块链技术与应用》系列课程学习笔记[18]以太坊-Mining算法
比特币的Mining算法也有一些值得改进得地方,其中有一个饱受争议得问题就是Mining设备得专业化,有普通的计算机挖不倒矿,只能用专门的设备,专用的ASIC芯片来Mining,那么很多人认为这种做法与去中心化的理念是背道而驰的,也跟比特币的设计初衷相违背。中本聪最早的一篇论文,提出One CPU,one vote,理想状况下,应该让普通老百姓也能参与Mining过程,这样也更安全,因为算力分散之后,有恶意的攻击者想要聚集到51%的算力发动攻击,难度就会大得多原创 2022-08-23 17:30:00 · 2091 阅读 · 0 评论 -
北大肖臻老师《区块链技术与应用》系列课程学习笔记[17]以太坊-GHOST协议
挖到矿的矿工发布一个区块,即便这个区块最后作废了,也会给予一些奖励,这个时候也能得到一些出块奖励,将作废的区块(上图1-1中的Orphan Block或Stale Block)称为Uncle Block。相对于最长合法链的当前区块来说,是他的叔父区块,最长合法链的下一个区块在发布的时候可以把叔父区块包含进来,如图2-1所示。原创 2022-08-22 14:00:00 · 1854 阅读 · 0 评论 -
北大肖臻老师《区块链技术与应用》系列课程学习笔记[16]以太坊-交易树与收据树2
假设存在一个转账交易A→B(10ETH),要检查A账户里是不是真的有10ETH,但是当前区块和最近一个区块对应的那个状态树可能没有这个账户,那么需要往前一直找,直到找到最近的一个包含A账户的区块,才能知道A的账户余额是多少。如果A有较长的一段时间没有发生交易,可能要从后往前,扫描很多个区块,才能找到最近一次的账户状态。以太坊系统和比特币系统类似,创建账户时不需要通知其他人的,只有这个账户第一次收到钱的时候,其他的节点才会知道这个账户的存在,这个时候因为新插入了一个账户,所以要在状态树中新插入的一个节点。原创 2022-08-21 15:00:00 · 487 阅读 · 0 评论 -
北大肖臻老师《区块链技术与应用》系列课程学习笔记[15]以太坊-交易树和收据树
假设有一个元素d,想知道这个d是否在某集合里,但集合本身不一定能保存下来,可以用这个哈希函数H对d取哈希值,比如说,取完哈希值之后,映射到向量中某个是0的位置,则说明该元素一定不在该集合里,如图3-2所示;若取完哈希值之后,映射到向量中某个是1的位置,则不能说明该元素在该集合里,有可能确实是集合中的元素,d=a,也有可能d不在该集合里,但出现了。原创 2022-08-20 14:30:00 · 1337 阅读 · 0 评论 -
北大肖臻老师《区块链技术与应用》系列课程学习笔记[14]以太坊-状态树2
字典树又称前缀树,也是一种(key,value)的树,一般来说key用字符串用的比较多,如将一些单词排成一个trie的数据结构。比如将general,genesis,god,go,good排列成trie的数据结构如下图3-1所示。图3-1。原创 2022-08-19 21:01:35 · 1070 阅读 · 0 评论 -
北大肖臻老师《区块链技术与应用》系列课程学习笔记[13]以太坊-状态树
以太坊中采用的是一种基于账户的模式,系统中显示地维护每个账户上有多少余额,接下来我们了解一下这种基于账户的模式是如何实现的?想要实现这种模式需要完成从账户地址(Address)到账户状态(State)的映射。以太坊中的账户地址是160位的,也就是20字节,一般将其表示为40个十六进制的数。状态是指外部账户和合约账户的状态,包括余额,交易次数Nonce,对于合约账户还包括代码和存储。rie结构。原创 2022-08-19 13:21:18 · 852 阅读 · 0 评论 -
北大肖臻老师《区块链技术与应用》系列课程学习笔记[12]以太坊-账户
以太坊中,解决重放攻击的方法也非常简单,在每笔交易中添加一个Nonce,记录该账户有史以来一共发布多少交易,转账时,Nonce作为交易的一部分,同时受到签名的保护,从而防止本地篡改余额或进行重放攻击。如下图1-4所示,A给B转账10个ETH,转账次数是21,所有全结点会维护这样一个状态数,假设过了一段时间之后,B重放了这个交易,其他结点查到A账户的转账数已经到23了,那么自然会发现这个被重放的交易是不合法的。此外,比特币账户中,在前面一笔交易中收到的比特币,在花的时候必须一次性全部花出去,不能只花一部分。.原创 2022-08-18 10:29:35 · 762 阅读 · 0 评论 -
北大肖臻老师《区块链技术与应用》系列课程学习笔记[11]以太坊-概述
货币本来是由政府发行的,货币的价值建立在政府公信力的基础上,政府通过司法手段维护货币体系的正常运行,比特币的出现用技术手段把政府这些职能取代,通过密码学的加密机制和共识机制来维护这个加密货币体系的正常运行。:比特币的Mining Puzzle是计算密集型,比拼计算哈希值的算力,这样造成的结果是挖矿设备的专业化,多年以前用桌面机挖矿就是无利可图了,现在大家用的都是ASIC芯片,很多人认为这与区块链去中心化的理念相悖,以太坊设计的Mining Puzzle对内存要求高,在一定程度上。以太坊的一个特性就是。...原创 2022-08-17 12:02:10 · 550 阅读 · 0 评论 -
北大肖臻老师《区块链技术与应用》系列课程学习笔记[10]BTC思考
比特币在设计的过程中很多地方用到了哈希指针,如块头就包含指向前一个区块的哈希指针,指针保存的是本地内存的地址,只在这台计算机上才有意义,发送到其他计算机上就没有意义了,那么在发布区块的时候哈希指针是如何通过网络传输的呢?理论上,分布式共识是不可能的,为什么它能绕过分布式系统理论上证明的那些不可能结论?原创 2022-08-16 15:49:35 · 478 阅读 · 0 评论 -
北大肖臻老师《区块链技术与应用》系列课程学习笔记[9]BTC匿名性
零知识证明是指一方(证明者)向另一方(验证者)证明某一个陈述是正确的,而不需要透露除该陈述是正确的之外的任何信息。如,A是比特币账户时他的。该比特币账户属于A,说明A知道该账户的私钥,但是A又不能把私钥告诉别人,这就可以用签名的方法:A使用这个私钥进行的签名,假设对方知道公钥,就可以用公钥验证这个私钥的正确性。这个证明是不是零知识证明其实是有争议的,因为A虽然没有直接透露这个私钥,但是他透露了由该私钥进行的签名,这与“不需要透露除该陈述是正确的之外的任何信息”有一定出入。这个在实际生活中要根据实际的应用场景原创 2022-08-15 18:09:01 · 567 阅读 · 0 评论 -
北大肖臻老师《区块链技术与应用》系列课程学习笔记[8]BTC课堂问答
其实是没有办法的,账户上的钱就变成了死钱,是没有办法取出来的。比特币系统是去中心化的系统,是没有人可以帮你重置密码的。有些加密货币是有交易所的,交易所是一个中心化的机构,一般来说,在交易所注册账户时,需要提供身份证。这种情况下,将比特币保存在交易所里,私钥实际上是由交易所保管的。登录交易所跟登录银行账户的操作类似,一般需要用户名、口令和二次验证消息(如Google身份验证器生成的一次性密码),在这种情况下,如果登录口令丢失,可以联系交易所,通过身份验证后重原创 2022-08-14 22:10:34 · 350 阅读 · 0 评论 -
北大肖臻老师《区块链技术与应用》系列课程学习笔记[7]比特币-分叉
软分叉特点:只要系统中半数以上算力的结点更新了软件,就不会出现永久性的分叉。硬分叉特点:只有当系统中所有算力的结点都更新了软件,才不会出现永久性的分叉,如果有少部分结点不愿意更新,系统则会分成两条链。.........原创 2022-08-13 14:48:36 · 455 阅读 · 0 评论 -
北大肖臻老师《区块链技术与应用》系列课程学习笔记[6]BTC脚本
从用户的角度来看,采用这种P2SH的支付方式,和P2PKH支付方式没有多大区别,只不过输出脚本中的是赎回脚本的哈希值而不是公钥的哈希值,当然,输出脚本的写法上也有一些细微的区别。输入脚本就是电商要把这笔比特币转出去时候用的,这种方式下输入脚本要包含让赎回脚本验证通过的M个签名,以及赎回脚本的序列化版本。如果电商平台将来改变了采用的多重签名规则,就只需要改变一下赎回脚本的内容和输入脚本中的内容,然后把新的赎回脚本的哈希值公布出去就可以了。对用户而言也只是付款时候输出脚本中要包含的哈希值发生了变化,其他的变化是原创 2022-08-12 19:48:22 · 612 阅读 · 0 评论 -
北大肖臻老师《区块链技术与应用》系列课程学习笔记[5]BTC挖矿
如果继续挖之前的区块,一方面这个刚发布的区块中的交易可能和刚刚在挖的那个区块有重复,另一个本质的原因就是候选区块的块头有指向前一个区块的哈希指针,而最新的区块已经变了,所以这个哈希指针也要跟着改变。比特币系统中的安全性由密码学保证以及由共识机制保证,即没有私钥就无法转走比特币。这个安全性得以保证的前提是系统中的大多数算力掌握在诚实节点手中。原创 2022-08-11 12:36:36 · 1020 阅读 · 0 评论 -
北大肖臻老师《区块链技术与应用》系列课程学习笔记[4]BTC的工作原理
BTC工作在应用层(Application Layer),其底层是一个P2P网络。也就是说比特币系统中是在应用层运行比特币协议,其底层也就是网络层运行的是P2P Overlay Network。比特币系统的网络层中的P2P网络是相对简单的,所有节点之间都是相对平等的,没有超级节点(Super Node或Master Node)。想要加入这个网络,至少需要一个种子节点(Seed Node),和种子节点联系,它会将它所知道的网络中的其它节点告知你。各个节点之间通过TCP来通信,这样有利于穿透防火墙。当你需要离原创 2022-08-10 15:45:16 · 643 阅读 · 0 评论 -
北大肖臻老师《区块链技术与应用》系列课程学习笔记[3]BTC的具体实现
区块链是去中心化的账本,BTC采用的是基于交易的账本模式(Transaction-based Ledger),每个区块里记录的是交易信息,所以,我们并不能直接得到每个账户上有多少钱,而是需要根据区块链中的交易记录来推算。原创 2022-08-09 17:59:30 · 1452 阅读 · 0 评论 -
北大肖臻老师《区块链技术与应用》系列课程学习笔记[2]Bitcoin的共识协议
将央行的职能改成由所有用户来共同承担,也就是去中心化的方案。比特币等数字货币需要解决的问题有:如何决定数字货币的发行量以及如何验证交易的合法性等。数字货币的发行及发行量在比特币系统中是由挖矿决定的,而验证交易合法性则需要要维护一个数据结构,由所有用户来共同维护,这个数据结构就是区块链。 假设用户A获得了铸币权,所谓铸币权就是发行货币的权利。假定用户A发行了10个比特币。然后A将这10个比特币分别转给用户B和用户C,每个人分得5个比特币。接下来用户B给用户C分2个比特币,给用户D分3个比特币原创 2022-08-08 18:30:08 · 1231 阅读 · 0 评论 -
北大肖臻老师《区块链技术与应用》系列课程学习笔记[1]Bitcoin中用到的密码学原理和数据结构
密码学中用到的哈希函数(Cryptographic Hash Function)需要具备抗碰撞性(Collision Resistance)、单向性(Hiding),除此之外,比特币中的哈希函数还需要满足不可预测性(Puzzle Friendly)。比特币中用的哈希函数是SHA-256,SHA为Secure Hash Algorithm的简称,它是同时满足上述三种性质的哈希函数。原创 2022-08-07 20:25:19 · 890 阅读 · 0 评论