一、你怎么知道买的比特币是真的呢
我大脑中一直有这样一个问题:如果拿比特币当钱的话,我们怎么知道这个比特币是真实的呢?就像如何鉴别钞票的真伪一样。
虽然说,比特币从技术上解决了最重要的两个问题,让大家对其信任度非常高,如下:
如果确实回忆不起这两个特点的人可以好好去回顾下之前的课程了,课程链接可通过关注上方公众号,在菜单“基础课程”那里可以找到。
但是,这里有个非常关键的问题很多人没搞清楚:鉴别钞票真伪的时候我们已经拿到这个钞票了,但是我们在提“比特币是否为真的?”这个问题的时候,我们有拿到这个比特币吗?
毕竟比特币是一种虚拟货币,是个看不太懂又摸不着的玩意儿,所以把很多人绕得云里雾里的,甚至都不知道自己买的是不是比特币,到底有多少比特币。我没说错吧?
比如我在某交易所买了一点比特币,大家看下交易流水:
这些是比特币吗?虽然我们基本知道比特币是一个采用数学加密算法产生的虚拟货币,是一串字符或者说是一个utxo结构(参考前期utxo课程),那么上面这“一串字符”是否是我的比特币呢?
好,仔细想了想,这么多条记录可能是交易明细之类的东西,这能理解。但是,我的比特币交易数量在哪里?我有多少比特币怎么看?
我有时候也被交易所给搞糊涂了,比如我只能通过卖出时的数值才知道自己拥有多少比特币:
看见红色框框没,只有在卖出时我才大概知道我有多少比特币,大部分情况下都是一脸懵逼的表情。
通过上面的截图,大家可以发现一个很严重的问题:
当然,这是我很久前的一个困惑,后来光顾着学习,有些忘记了。在我的处女课《如何从零入门区块链技术》里,当然有个人提了这么一个问题:我怎么知道自己买的比特币是真的?
当然只能草草作答,直到今天才得空进行全面展开。
这个问题的关键在于:
在上周数字货币投资小密圈里我对交易所的内容进行了一个阐述,举一个简单的例子:
假设你在某交易所的账号里有5000美元和3个比特币。你相用580美元/比特币的价格买两个比特币,这时交易所帮你找到交易对手并促成交易。现在,你的账号里有5个比特币和3840美元。
值得注意的是,当你在交易所完成上述交易的时候,区块链上并不会记任何交易。交易所不需要在区块链里把比特币从一个地址转到另一个地址。交易所只是修改了和你的合约,交易前,它说“我们日后会还给你5000美元和3个比特币。”交易完成后,它说“我们日后会还给你3840美元和5个比特币。”所以,交易前后,比特币并没有真正在区块链中移动,只是你和银行的合约变化了而已。对于你的交易对手而言,也是如此。
就是说,在我们通过交易所买卖比特币时,其实我们手里还什么都没有,交易所只是给我们用“笔”记录了一笔账而已。
那么,要想确保自己买到的比特币没问题,首要的也是最重要的一点:
如何正规,这里不深入阐述了,在数字货币小密圈里我会深入展开。
但是,购买还只是第一步。而我们绝大部分人,目前也仅停留在这一步,毕竟我们购买的比特币数目不太多,没那么兴师动众的。所以,就这样把“比特币”扔在交易所的账户里躺着,其实,那些我们能看到的字符只有交易记录和明文数字,与我们理解的比特币还差很远。
由于放得太久,或许有一天,我们都有点遗忘了:这玩意儿是我的比特币?
如果我们持有“比特币”数据较多,或者是喜欢钻研的人,我们就要进行到第二步:提取比特币。因为只有提取比特币,交易所才会把刚才第一步记录的账进行兑现,将真实的比特币给你。就如同,平时我们在银行存的钱只是数字,只有提取的时候,银行才会把真正的钞票给我们一样。
所以为了提取,要么你自己有一个钱包,要么你在另外一个交易所有一个收款地址。为了演示,我在OkCoin上注册了一个,并将比特币转到了对应的收款地址上。
虽然,在转账完成后,本文第二个图显示可用BTC为零了,大致可以确定交易发生后,交易所已经兑现了承诺,将比特币转到了我指定的收款地址上。但是,仍然一脸懵逼:比特币去哪里了?我怎么确认转账真的发生了?
同样地,在OKCoin上我依然只能通过卖出时的可用BTC来确认此次转账的发生,仅此而已。前文提的问题,如果验证它的真伪,这个问题还是没解决。
到这里,就进入了本文要介绍的关键所在,在验证真伪之前,先要问自己一个问题:
什么是真的?什么是假的?
回顾一下,比特币解决的第一个关键问题“货币伪造”,是如何做到的?这里需要大家回顾一下以前的基础课程细节,在关于 utxo那节课中,提到了比特币里非常重要的数据结构utxo。
仔细学习后,我们应该知道,“1个比特币”的概念是不存在的,utxo结构将货币从诞生(铸币)到花费的所有记录都连接了起来,从而保证了货币无法伪造。关于确认货币真伪的问题,最后归结为:
如何查询这些信息呢?讲了这么多,卖了这么多关子,神秘的面纱就要揭开,也是本文要告诉大家的:
比如,我在提取所有比特币到OKCoin上后,当时使用的收款地址时:1Q8hMqVeq85PeiqHKHPPNSAJUurS4qsu9K。
于是,我通过blockchain.info进行了查询,结果如图:
上面有多笔交易的转账记录,基本展现了一个utxo的面貌,在这里可以查到很多信息,比如:
刚开始进去搜索的时候,可能有些迷茫,但是慢慢结合自己之前的学习,你能发现很多有意思的现象,也能理解得更深入。如果你能看懂一些规律,你或许就能明白了,我之前在一个课程里为什么说“比特币其实不是匿名的”。
比如上图,转给我收款地址的一个地址是:1Lsqcv4cg5zUctNi2qwNxMkrv1GeBboSUJ。这个地址我理解应该是交易所的地址,就是说我在提币的时候,交易所通过这个地址将指定数目的比特币转了出去。
但是,这个地址有故事:
更多信息,请大家自行搜索。
通过本文详尽的介绍,大家应该知道如何辨别你比特币的真伪了吧?
如果没有,请赶紧复习前期基础课程,来我千聊课程里听听我的语音解答也是不错的选择哟:
二、什么是utxo区块链
区块链的核心技术是什么?
简单来说,区块链是一个提供了拜占庭容错、并保证了最终一致性的分布式数据库;从数据结构上看,它是基于时间序列的链式数据块结构;从节点拓扑上看,它所有的节点互为冗余备份;从操作上看,它提供了基于密码学的公私钥管理体系来管理账户。
或许以上概念过于抽象,我来举个例子,你就好理解了。
你可以想象有100台计算机分布在世界各地,这100台机器之间的网络是广域网,并且,这100台机器的拥有者互相不信任。
那么,我们采用什么样的算法(共识机制)才能够为它提供一个可信任的环境,并且使得:
节点之间的数据交换过程不可篡改,并且已生成的历史记录不可被篡改;
每个节点的数据会同步到最新数据,并且会验证最新数据的有效性;
基于少数服从多数的原则,整体节点维护的数据可以客观反映交换历史。
区块链就是为了解决上述问题而产生的技术方案。
二、区块链的核心技术组成
无论是公链还是联盟链,至少需要四个模块组成:P2P网络协议、分布式一致性算法(共识机制)、加密签名算法、账户与存储模型。
1、P2P网络协议
P2P网络协议是所有区块链的最底层模块,负责交易数据的网络传输和广播、节点发现和维护。
通常我们所用的都是比特币P2P网络协议模块,它遵循一定的交互原则。比如:初次连接到其他节点会被要求按照握手协议来确认状态,在握手之后开始请求Peer节点的地址数据以及区块数据。
这套P2P交互协议也具有自己的指令集合,指令体现在在消息头(MessageHeader)的命令(command)域中,这些命令为上层提供了节点发现、节点获取、区块头获取、区块获取等功能,这些功能都是非常底层、非常基础的功能。如果你想要深入了解,可以参考比特币开发者指南中的PeerDiscovery的章节。
2、分布式一致性算法
在经典分布式计算领域,我们有Raft和Paxos算法家族代表的非拜占庭容错算法,以及具有拜占庭容错特性的PBFT共识算法。
如果从技术演化的角度来看,我们可以得出一个图,其中,区块链技术把原来的分布式算法进行了经济学上的拓展。
在图中我们可以看到,计算机应用在最开始多为单点应用,高可用方便采用的是冷灾备,后来发展到异地多活,这些异地多活可能采用的是负载均衡和路由技术,随着分布式系统技术的发展,我们过渡到了Paxos和Raft为主的分布式系统。
而在区块链领域,多采用PoW工作量证明算法、PoS权益证明算法,以及DPoS代理权益证明算法,以上三种是业界主流的共识算法,这些算法与经典分布式一致性算法不同的是,它们融入了经济学博弈的概念,下面我分别简单介绍这三种共识算法。
PoW:通常是指在给定的约束下,求解一个特定难度的数学问题,谁解的速度快,谁就能获得记账权(出块)权利。这个求解过程往往会转换成计算问题,所以在比拼速度的情况下,也就变成了谁的计算方法更优,以及谁的设备性能更好。
PoS:这是一种股权证明机制,它的基本概念是你产生区块的难度应该与你在网络里所占的股权(所有权占比)成比例,它实现的核心思路是:使用你所锁定代币的币龄(CoinAge)以及一个小的工作量证明,去计算一个目标值,当满足目标值时,你将可能获取记账权。
DPoS:简单来理解就是将PoS共识算法中的记账者转换为指定节点数组成的小圈子,而不是所有人都可以参与记账。这个圈子可能是21个节点,也有可能是101个节点,这一点取决于设计,只有这个圈子中的节点才能获得记账权。这将会极大地提高系统的吞吐量,因为更少的节点也就意味着网络和节点的可控。
3、加密签名算法
在区块链领域,应用得最多的是哈希算法。哈希算法具有抗碰撞性、原像不可逆、难题友好性等特征。
其中,难题友好性正是众多PoW币种赖以存在的基础,在比特币中,SHA256算法被用作工作量证明的计算方法,也就是我们所说的挖矿算法。
而在莱特币身上,我们也会看到Scrypt算法,该算法与SHA256不同的是,需要大内存支持。而在其他一些币种身上,我们也能看到基于SHA3算法的挖矿算法。以太坊使用了Dagger-Hashimoto算法的改良版本,并命名为Ethash,这是一个IO难解性的算法。
当然,除了挖矿算法,我们还会使用到RIPEMD160算法,主要用于生成地址,众多的比特币衍生代码中,绝大部分都采用了比特币的地址设计。
除了地址,我们还会使用到最核心的,也是区块链Token系统的基石:公私钥密码算法。
在比特币大类的代码中,基本上使用的都是ECDSA。ECDSA是ECC与DSA的结合,整个签名过程与DSA类似,所不一样的是签名中采取的算法为ECC(椭圆曲线函数)。
从技术上看,我们先从生成私钥开始,其次从私钥生成公钥,最后从公钥生成地址,以上每一步都是不可逆过程,也就是说无法从地址推导出公钥,从公钥推导到私钥。
4、账户与交易模型
从一开始的定义我们知道,仅从技术角度可以认为区块链是一种分布式数据库,那么,多数区块链到底使用了什么类型的数据库呢?
我在设计元界区块链时,参考了多种数据库,有NoSQL的BerkelyDB、LevelDB,也有一些币种采用基于SQL的SQLite。这些作为底层的存储设施,多以轻量级嵌入式数据库为主,由于并不涉及区块链的账本特性,这些存储技术与其他场合下的使用并没有什么不同。
区块链的账本特性,通常分为UTXO结构以及基于Accout-Balance结构的账本结构,我们也称为账本模型。UTXO是“unspenttransactioninput/output”的缩写,翻译过来就是指“未花费的交易输入输出”。
这个区块链中Token转移的一种记账模式,每次转移均以输入输出的形式出现;而在Balance结构中,是没有这个模式的。
数字货币里的UTXO什么意思?UTXO的中文意思叫作:未花费的交易输出。
UTXO是数字货币中的账户模型,这个模型和我们现在银行的账户模型是不一样的。
拿转账来说,现在的情况是:
我要给依依转2000块钱,我要从我的招商银行卡里面给她转账,我的卡里面有5000块钱,转给她2000块钱以后,我的招商银行账户就被扣除了2000块钱,还剩下3000块钱。
那么如果是基于比特币的UTXO,情况是这样的:
我有5000比特币,我给依依转2000比特币,2000比特币消耗掉了对不对?注意!这2000不是从我这5000总数里面扣除的,而是:我的比特币总额会分成两份(一份
2000,一份3000),这就是所谓“生成两个新的UTXO”:依依收下2000比特币,我自己收下3000比特币,3000算是给我的找零。
转账成功以后,我给依依的2000比特币目前已经使用过了,被消耗掉了,就不能再叫UTXO了,而找零给我的3000比特币目前我还没有使用,所以它还能称作UTXO,也就是未花费的交易输出。那么,如果我总共有5000比特币,我全部转给依依,那么就只需要生成一个新的
UTXO给依依就可以了,不需要找零了。
基于UTXO,每笔交易出现,都要确认比特币之前的情况,检验比特币是不是存在于我的UTXO中,如果不存在,那么系统就会拒绝你的交易行为。
这样一来,每笔交易的输入和输出都是有关系的,可以通过UTXO不断向前追溯,一直追溯到比特币诞生的时候,也就是挖矿的源头。
如果我想用同一笔UTXO发送给两个人,那么系统只确认先接受到的那一笔,一旦确认UTXO已经被消耗了,那么你就不可以再把它转给下一个人,这样就避免了双重支付的问题。
既然系统只确认先接受到的那一笔,那么问题来了,系统怎么知道谁先谁后呢?系统当然知道,因为系统有一个叫“时间戳”的东西。
什么是区块链?不是比特币进化慢,而是我们进化慢
自从区块链(blockchain)这个词被从比特币中抽象出来之后,整个业内就弥漫着一种奇特的意识形态叙事(ideologicalnarrative)。这个叙事是这样的:比特币是一架又慢又旧的破马车,十几年了没有什么改进,什么炫酷的功能都没有。当然,从人类“无利不起早”的天然本性而言,给你讲这么一通破烂话的人,绝对不是吃饱了撑的无事生非,而通常都会在看到你对手里的大饼(BTC)起了半信半疑之心之后,趁机向你推销他正在兜售的拉风跑车项目。
北京时间11月14号下午13点15分27秒,随着区块高度709632的区块被挖出,比特币自2017年隔离见证升级之后最重要的升级之一,Taproot升级,宣告成功激活(今年6月份就已经获得超90%矿工投票lock-in了,本次激活属于明牌)。
该区块中包含了chainside联合创始人FedericoTenga的一笔V1_P2TR交易。在该笔交易中,Federico在OP_RETURNDATA中附加了一句话:gmtaproot。据信,这是历史上第一笔Taproot交易。为了抢到这个名次,Federico支付了2510sat/vB的矿工费(手续费),这大概是正常矿工费(不到10sat/vB)的5百多倍。[1]
Taproot升级为我们带来了区块扩容、更好的隐私性以及增强的扩展性等诸多好处。这些好处主要是由于两项技术的引入而带来的。其一就是Schnorr签名,而另一个就是MAST(默克尔化的抽象语法树)。
Schnorr签名能够压缩数字签名的尺寸。单签名比ECDSA节省约12%的尺寸,也就可以节省转账手续费。以及,它能够把多签名压缩成一个签名,这可以极大压缩多签地址的尺寸,并保护多签参与者的隐私。据说早在2012年MikeHearn就在bitcointalk论坛提出过类似想法。通过压缩签名尺寸,相当于扩大了区块容量,容纳更多交易量。
MAST则可以大大改善P2SH交易的交易尺寸、隐私性和灵活性。最早的BIP-114提案是由JohnsonLau于2016年提出的。早前的P2SH交易可以允许支付时不揭示script(比特币脚本代码)。但是,当花费UTXO(未花费的交易输出)时,便需要提供script且记录到链上,从而占据区块链的容量。如果script比较复杂,则会占据较多的空间。MAST的引入使得我们可以把包含很多条件的复杂脚本组织成默克尔树。在花费UTXO时,也只需要揭示默克尔证明和涉及的script,而不需要揭示整颗树。这就节省了区块容量,改善了脚本的隐私性。同时,由于打开了script尺寸的限制,这就为比特币的可编程性引入了更大的扩展性和灵活性。
应该说,上面几段话对一些只在中心化交易所炒炒币,甚至连私钥都不懂的朋友来说无异于天书。别说Taproot了,便是4年前的segwit(隔离见证),对很多所谓圈内的人来说都不知何物。这没有什么可耻的。我头一次看这些新技术、新名词也是脑袋爆炸。多学习,多研究,多琢磨琢磨,也就搞明白了。
相比于科技的进步,我们掌握知识的能力进化的实在是太慢了。时至今日,很多人还搞不清楚比特币究竟是存储在自己手机上的钱包里,还是在比特币网络上。自己手机或者电脑上的钱包软件又是起什么作用的。私钥是什么,助记词是什么,所谓的HD钱包又是什么。1开头的地址,3开头的地址,5开头的地址,bc1开头的地址都有啥分别。怎么把大饼从交易所提出来,放到所谓链上。怎么自己掌控自己的比特币。怎么签名转账比特币。怎么使用隔离见证地址。以及现在,如何构建Taproot交易呢?
有人于是说,那就不要让用户自己掌握私钥,远离这些技术细节好了。回到托管式的环境,回到互联网中心化的用户体验。这样一种用户体验的改善,就像中心化交易所一样,是以牺牲用户自主掌握资产为代价的。这直接抛弃了去中心化以来全部的价值观。这又是一种进化,还是一种退化呢?
如果只是为了发明一个噱头,让投机者去炒、去赌,那就尽可以不考虑这些。那就不仅不应该限制OP_RETURN的尺寸,甚至应该扩充script使之支持图灵完备的编程。这样就可以在比特币上发行各种空气币、土狗币,再搞出来各种为炒而生的应用出来,所谓繁荣的生态。但是比特币一路走来,似乎是走了相反的道路。不仅从一开始就极大限制了script的功能,而且主动缩短了OP_RETURN的数据尺寸,限制了在比特币链上玩各种花活儿的可能性。
比特币是审慎的。它清楚自己有更大的使命。Taproot的激活,可能会有利于二层的发展。但是,并不会给一层带来自限性的问题。相反的,它会因为压缩了数据尺寸,而扩大了一层的容量。
比特币是富有耐心的。它肩负着普及去中心化数字货币(而不是在中心化平台上进行投机)的历史任务。所以它必须耐心地等待,等待每一个人跟上技术发展的脚步。
UXTO与余额区块链入门从使用钱包开始,我们最关注的是钱包的账户余额。可看过很多区块链资料以后,一直存在一个疑问,钱包的余额信息存在区块链的什么位置?一直没有找到,只有一个相近的概念叫UTXO(UnspentTransactionOutput),但看完以后还是对应不上。直到翻遍网上所有关于UXTO的资料,才知道在中本聪设计的比特币系统中,并没有余额这个概念,“比特币余额”是由比特币等钱包应用派生出来的产物。钱包的余额是通过与账户相关的多个UXTO算出来的。下面且听我详细道来。
了解过一点点会计学,我们现在的会计系统绝大部分采用的是一种叫做“借贷记账法”的方法,账目分成借方和贷方,每发生一笔业务都要登记两个以上的科目。
简单来说,Alice转账给Bob1美元,使用借贷记账法至少要产生两条账目,Alice账户减少1美元,Bob账户增加1美元。这种记账法在企业经营、企业审计中有无数的好处。但是这种记账法也有一个最大的缺点,就是容易产生记账错误和记账误差。一笔交易需要登记两条以上的账目,本质上记录的是“交易的结果”,而不是“交易本身”。
中本聪发明了UTXO(UnspentTransactionOutput)交易模型,并将其应用到比特币当中。UTXO是“未花费的交易输出”,简单来说就是,每一笔比特币交易实际上都是由若干个交易输入和输出组成的。交易输入是资金来源,交易输出是资金去向,每一笔交易都要从交易输入中花费出去一部分,这一部分就是未花费的交易输出(UTXO)。每一次的交易输入都可以追溯到之前的UTXO,直至最初的挖矿所得。
由挖矿所得创建的比特币交易,是每个区块中的首个交易,又称之为coinbase交易,它由矿工创建,没有上一笔交易输出。
在比特币交易中UTXO就是基本单位,一个UTXO一旦被创建就不可被继续分割,它只能当作是下一笔交易的输入被花费掉,花费后产生新的UTXO,这样周而复始地实现货币的价值转移。所以我们在比特币钱包中所看到的账户余额,实际上是钱包通过扫描区块链并聚合所有属于该用户的UTXO计算得来的。
因此,当我们在说某人拥有1枚比特币的时候,我们实际上说的是,在当前的区块链记录中,有若干笔交易的UTXO收款地址写的是这个人的钱包地址,这些UTXO的总和是1个比特币。
比特币的UXTO系统遵守两个规则:
我们以以太账户为例,打开etherscan.io,选择BLOCKCHAIN-AllAccounts,这样可以看到所有地址与余额,可以选择其中一个查看详细信息。如果看不懂,没关系,把自己的以太地址输入到右上角的搜索框回车后,会显示地址的余额和详细交易记录,如下图。
至此,我能理解李笑来老师说为什么他的账户没有余额,只有UXTO了,O(∩_∩)O哈哈~,内行人不要说外行话嘛。
三、区块链如何核销,区块链销售怎么做
区块链技术
背景:比特币诞生之后,发现该技术很先进,才发现了区块链技术。比特币和区块链技术同时被发现。
1.1比特币诞生的目的:
①货币交易就有记录,即账本;
②中心化机构记账弊端——可篡改;易超发
比特币解决第一个问题:防篡改——hash函数
1.2hash函数(加密方式)
①作用:将任意长度的字符串,转换成固定长度(sha256)的输出。输出也被称为hash值。
②特点:很难找到两个不同的x和y,使得h(x)=h(y)。
③应用:md5文件加密
1.3区块链
①定义
区块:将总账本拆分成区块存储
区块链:在每个区块上,增加区块头。其中记录父区块的hash值。通过每个区块存储父区块的hash值,将所有的区块按照顺序连接起来,形成区块链。
②区块链如何防止交易记录被篡改
形成区块链后,篡改任一交易,会导致该交易区块hash值和其子区块中不同,发现篡改。
即使继续篡改子区块头中hash值,会导致子区块hash值和孙区块中不同,发现篡改。
1.4区块链本质
①比特币和区块链本质:一个人人可见的大账本,只记录交易。
②核心技术:通过密码学hash函数+数据结构,保证账本记录不可篡改。
③核心功能:创造信任。法币依靠政府公信力,比特币依靠技术。
1.5如何交易
①进行交易,需要有账号和密码,对应公钥和私钥
私钥:一串256位的二进制数字,获取不需要申请,甚至不需要电脑,自己抛硬币256次就生成了私钥
地址由私钥转化而成。地址不能反推私钥。
地址即身份,代表了在比特币世界的ID。
一个地址产生之后,只有进入区块链账本,才能被大家知道。
②数字签名技术
签名函数sign(张三的私钥,转账信息:张三转10元给李四)=本次转账签名
验证韩式verify(张三的地址,转账信息:张三转10元给李四,本次转账签名)=True
张三通过签名函数sign(),使用自己的私钥对本次交易进行签名。
任何人可以通过验证韩式vertify(),来验证此次签名是否有由持有张三私钥的张三本人发出。是返回true,反之为false。
sign()和verify()由密码学保证不被破解。·
③完成交易
张三将转账信息和签名在全网供内部。在账户有余额的前提下,验证签名是true后,即会记录到区块链账本中。一旦记录,张三的账户减少10元,李四增加10元。
支持一对一,一对多,多对已,多对多的交易方式。
比特币世界中,私钥就是一切!!!
1.6中心化记账
①中心化记账优点:
a.不管哪个中心记账,都不用太担心
b.中心化记账,效率高
②中心化记账缺点:
a拒绝服务攻击
b厌倦后停止服务
c中心机构易被攻击。比如破坏服务器、网络,监守自盗、法律终止、政府干预等
历史上所有有中心化机构的机密货币尝试都失败了。
比特币解决第二个问题:如何去中心化
1.7去中心化记账
①去中心化:人人都可以记账。每个人都可以保留完整的账本。
任何人都可以下载开源程序,参与P2P网络,监听全世界发送的交易,成为记账节点,参与记账。
②去中心化记账流程
某人发起一笔交易后,向全网广播。
每个记账节点,持续监听、持续全网交易。收到一笔新交易,验证准确性后,将其放入交易池并继续向其它节点传播。
因为网络传播,同一时间不同记账节点的交一次不一定相同。
每隔10分钟,从所有记账节点当中,按照某种方式抽取1名,将其交易池作为下一个区块,并向全网广播。
其它节点根据最新的区块中的交易,删除自己交易池中已经被记录的交易,继续记账,等待下一次被选中。
③去中心化记账特点
每隔10分钟产生一个区块,但不是所有在这10分钟之内的交易都能记录。
获得记账权的记账节点,将得到50个比特币的奖励。每21万个区块(约4年)后,奖励减半。总量约2100万枚,预计2040年开采完。
记录一个区块的奖励,也是比特币唯一的发行方式。
④如何分配记账权:POW(proofofwork)方式
记账几点通过计算一下数学题,来争夺记账权。
找到某随即数,使得一下不等式成立:
除了从0开始遍历随机数碰运气之外,没有其它解法,解题的过程,又叫做挖矿。
谁先解对,谁就得到记账权。
某记账节点率先找到解,即向全网公布。其他节点验证无误之后,在新区块之后重新开始新一轮的计算。这个方式被称为POW。
⑤难度调整
每个区块产生的时间并不是正好10分钟
随着比特币发展,全网算力不算提升。
为了应对算力的变化,每隔2016个区块(大约2周),会加大或者减少难度,使得每个区块产生的平均时间是10分钟。
#欧易OKEx##比特币[超话]##数字货币#
【转载】MimbleWimble和Grin简介本文摘自Grin官方github源码:
MimbleWimble是一个区块链格式和协议,依托于健壮的加密原语,提供非常好的可扩展性、隐私和可替代性。它解决了当前几乎所有实现的区块链(与现实需求之间)差距。MimbleWimble的白皮书在本项目的WiKi中可以找到,WiKi是开放的。
Grin是一个实现MimbleWimble区块链的开源软件项目,并填补了(MimbleWimble协议所缺失的)实现一个完整的区块链和加密货币必需的一些东西。
Grin项目的主要目的和特性如下:
备注:MimbleWimble出自《哈利波特》中的一句咒语,详见:Tongue-TyingCurse,这个标题的涵义应该是希望所有读到这篇介绍的人都可以来为这个开放社区做点贡献,真心希望如此。
本文针对的读者是已经了解过区块链并了解一些基本的密码学知识的人群。我们尝试解释MimbleWimble的技术构建,以及它如何应用于Grin。我们希望这篇介绍能够浅显易懂,我们的目的是鼓励您对Grin产生兴趣,并加入Grin的开放社区,以任何您可能的方式对其做出贡献。
为了实现这个目标,我们将介绍一个主要概念:Grin是一个MimbleWimble实现。我们将从椭圆曲线密码(ECC)的简短描述开始,这是Grin的重要基础。然后描述MimbleWimble区块链交易和区块的所有关键要素。
我们首先简要介绍一下椭圆曲线密码学(后面简称为:ECC),只是简单说明一下理解MimbleWimble如何工作所必需了解的ECC属性,这里并不深入研究和讨论ECC。对于想要更多一点了解ECC的读者,可以参考这个介绍:了解更多.
用于密码学目的的椭圆曲线只是一大组我们称之为C的点。这些点可以被加、减或乘以整数(也称为标量)。给定一个整数k并使用标量乘法运算,我们可以计算k*H,这也是曲线C上的一个点。给定另一个整数j,我们也可以计算(k+j)*H,它等于k*H+j*H。椭圆曲线上的加法和标量乘法运算保持加法和乘法的交换率和结合律:
在ECC中,如果我们选择一个非常大的数字k作为私钥,则k*H被作为相应的公钥。即使人们知道公钥k*H的值,推导k几乎不可能(或者换句话说,椭圆曲线点的乘法计算是微不足道的,然而曲线点的“除法”计算却极其困难。参见:椭圆曲线密码学。
先前的公式(k+j)*H=k*H+j*H中,k和j都是私钥,演示了从两个私钥的加和获取公钥(k+j)*H,等价于每个私钥的对应公钥加和(k*H+j*H)。在比特币区块链中,分层确定性钱包(HDWallets/BIP32)严重依赖于这个原则。MimbleWimble和Grin也是如此。
交易结构的设计显示了MimbleWimble的一个关键原则:强大的隐私性和保密性。
MimbleWimble的交易确认依赖于两个基本属性:
下面介绍账户余额、所有权、变更和证明,并借此说明上面的这两个基本属性是如何得以实现的。
基于上面描述的ECC的属性,可以在交易数据中掩盖实际交易值。
如果v是交易输入或输出的值,而H是椭圆曲线,我们可以简单地在交易中嵌入v*H而不是v。这是因为使用ECC操作,我们仍然可以验证交易的输出总和等于输入总和:
验证每笔交易的这个属性允许协议验证交易不会凭空创造出金钱,而无需了解实际的交易值是多少。但是,可用数值是有限的,攻击者可以尝试每一个可能的数值来猜测你的交易值。另外,知道v1(来自上面的交易示例)和v1*H,就等于在整个区块链中揭露了等于v1的交易。出于这些原因,我们引入了第二个椭圆曲线G(实际上G只是与H相同的曲线组上的另一个发生器点)和私钥r用作致盲因子。
交易中的输入或输出值可以表示为:
其中:
无论是v还是r都不能被推导出来,从而利用了椭圆曲线密码学的基本属性。r*G+v*H被称为PedersenCommitment。
作为一个例子,我们假设我们想用两个输入和一个输出创建一笔交易。我们有(忽略费用):
满足:
为每个输入值生成一个私钥作为致盲因子,将上面的等式替换每个值为他们各自的PedersenCommitments,我们获得:
并且要求:
这是MimbleWimble的第一个支柱:验证交易的算术运算可以在完全不知道任何实际交易值的情况下完成。
补充最后一点说明,这个想法实际上派生自GregMaxwell的机密交易,机密交易本身是从AdamBack提出的用于比特币的同态值提议中发展而来。
在前面的章节中,我们介绍了一个私钥作为致盲因子来掩盖实际交易值。MimbleWimble的第二个见解就是这个私钥可以用来证明值的所有权。
Alice给你发了3个币并且隐藏了这个数字,你选择了28作为你的致盲因子(请注意,在实践中,致盲因子是一个私钥,是一个非常大的数字)。区块链上的某处显示以下交易输出,并只能由你来用(做交易输入):
X,上述加法的输出值,是对所有人可见的。但是值3只有你和Alice知道,而28就只有你自己知道了。
为了再次转移这3个币,协议要求(交易者)以某种方式知道28。为了演示这是如何工作的,假设你想将这3个相同的币转移给Carol。您需要构建一个简单的交易,以便:
其中Xi是一个输入,它花掉你之前得到的输出值X,而Y是Carol的输出。如果不知道你的私钥28,就没有办法建立这笔交易。的确,如果Carol要平衡这个交易,她既需要知道发送的值,也需要知道你的私钥,以便:
通过检查一切已被清零,我们可以再次确认没有创造新的金钱。
等等!停一下!现在你知道了Carol的输出中的私钥(在上面的情况下,它必须与你的相同,为了让等式两边平衡),所以你可以把钱从Carol那里偷回来!
为了解决这个问题,我们允许Carol增加她选择的另一个值。113,最后在区块链上的结果变成了:
现在交易不会再归零了,我们在G上有一个excessvalue(85),这是所有致盲因子总和的结果。但是因为85*G是椭圆曲线G上的有效公钥,85,对于任何x和y,只有y=0是G上的x*G+y*H有效公钥。
因此,协议需要验证的其实就是:(Y-Xi)是G上的一个有效公钥,以及交易者知道私钥(我们与Carol的交易中的85)。最简单的方法就是要求使用excessvalue(85)进行签名,然后验证:
这个关联到每笔交易的签名,附加一些额外数据(比如交易费),被称为交易核(transactionkernel)。
本节阐述创建交易,通过讨论交易的找零机制和范围证明的要求以便所有值都被证明为非负。这些都不是了解MimbleWimble和Grin的必需内容,所以如果你想快速了解,随时可以直接跳过本节内容,直接到PuttingItAllTogether.
在上面的例子中,你必须分享你的私人密钥(致盲因子)给Carol。一般来说,即使私钥永远不会被重用,这也不是一个十分可取的方法。实际上,这不是问题,因为交易包括找零输出。
比方说,你只想从你收到的来自Alice的3个币里送出2个币给Carol。你简单地生成另一个私钥(比如12)作为一个致盲因子来保护你的找零输出,并告诉Carol你正在发送2个币给她。Carol像以前一样使用自己的私钥:
最终,链中发生的交易基本上就是上述这种过程。签名使用excessvalue,例如这个例子当中就是97。
在所有上述计算中,我们都依赖交易值始终为正值。如果可能的话,引入负值将是非常有问题的,由于可以在每笔交易中凭空捏造新的金钱。
例如,可以创建一个输入为2并且输出为5和-3的交易,并且依照前面章节中的定义仍然可以获得平衡的事务。这是不容易被检测到的,因为即使x是负数,ECDSA曲线上的对应点x.H看起来也是任何值。
为了解决这个问题,MimbleWimble利用了另一个加密概念(也来自机密交易),称为范围证明:一个数字落在给定范围内的证明,而不会泄露数字。我们不会详细说明范围证明,您只需要知道,对于任何r.G+v.H,我们都可以创建一个证明,证明v大于零且不会溢出。
同样重要的是要注意,为了从上面的示例中创建有效的范围证明,必须知道在创建和签署excessvalue时使用的值113和28。其原因以及范围证明的更详细描述在rangeproofpaper中进一步详述。
MimbleWimble交易包括以下内容:
我们已经在上面解释了MimbleWimble交易如何在保持有效区块链所需的属性的同时提供强大的匿名性保证,即交易不会凭空捏造出货币,并且通过私钥建立所有权证明。
MimbleWimble区块格式通过引入一个附加概念来构建:核销(cut-through)。有了这个补充,一个MimbleWimble链可获得:
回顾一下一笔交易的组成:
例如:
这个例子中使用的签名公钥是28*G。
任何一笔交易必须满足以下条件:(为了描述简便,这里忽略掉交易费部分)
这个条件同样适用于区块,因为区块只是一系列聚合的交易输入、交易输出和交易核。我们可以把所有的交易输出加起来,减去所有的交易输入,将结果与所有交易核中的kernelexcess之和做比较:
简单来说,(依然忽略交易费部分)我们可以认为,对MimbleWimble区块的处理方法和对MimbleWimble交易的处理方法是严格一致的。
上面描述的MimbleWimble区块和交易设计有一个小问题,有可能从一个区块中的数据来重建交易(即找出一笔或几笔完整的交易,分辨哪一笔交易输入对应哪一笔交易输出)。这个对于隐私而言当然是不好的事情。这个问题也被称为子集问题("subset"problem)-给定一系列交易输入、交易输出和交易核,有可能能够从中分辨出一个子集来重新拼出对应的完整的交易(很像拼图游戏)。
例如,假如有下面的两笔交易:
我们能够聚合它们并构建下面的区块(或一笔聚合交易(aggregatetransaction)):
很容易利用等式平衡关系用穷举法试验所有可能的组合,从而找出原始的交易关系:
只要找出了一笔交易,那么剩下的当然也是符合等式平衡关系的,于是很容易就拼凑出另一笔交易:
为了大幅降低这个拼凑的可能性,从而缓解这个问题的不利影响,我们设计一个交易核偏移因子(kerneloffset)给每一个交易核。这也是一个致盲因子(或者说一个私钥),它需要加到kernelexcess当中用于验证等式平衡关系:
当我们聚合这些交易到区块的时候,我们在区块头中存储一个(且仅一个)聚合偏移因子(aggregateoffset)(即所有交易核偏移因子的总和)。这样一来,因为我们一个区块只有一个偏移因子,再也不可能将其分拆对应到每一笔交易的交易核偏移因子了,从而也就不可能再从区块中拼凑出任何一笔交易了。
具体的实现方法就是,在创建交易时将k分割成k1+k2。对于交易核(k1+k2)*G,我们在交易核中发布出去的是k1*G(称之为:theexcess),以及k2(称为:theoffset),并跟以前一样使用k1*G作为公钥来对交易进行签名。在矿工构建区块的时候,我们对打包的所有交易的k2(theoffset)求和,以生成一个单个的聚合值(aggregatek2offset)用于该区块所打包的所有交易。一旦区块打包完成并发布和被链所接受,其原始的对应每笔交易的k2(theoffset)即成为不可恢复的。
区块让矿工将多个交易组合成一个单个集合添加到链中。在下面的区块表示中,包含3个交易,我们只显示交易的输入和输出。输入关联其花费的输出。前一个区块中包含的输出标记为小写字母x。
我们注意到以下两个属性:
与单个交易类似,所有需要在一个区块中进行检查的是所有权已经被证实(来自交易内核transactionkernels),并且整个区块没有增加任何货币供应(除了coinbase所允许的之外)。因此,匹配输入和输出可以被消除,因为它们对总和的贡献被抵消了。这导致了以下更紧凑的块:
请注意,所有的交易结构已被消除,输入和输出的顺序已不再成问题。但是,该块中所有输出的总和减去输入,仍然保证为零。
一个块的建立来自:
当区块以这种方式构建时,MimbleWimble区块提供了非常好的隐私保证:
然而,区块仍然可验证!
回到前面的示例块,I1和I2花费的输出x1和x2必须先前出现在区块链中。因此,在添加此区块后,这些输出以及I1和I2也可以从整体链中移除,因为它们不会影响整体总和。
总而言之,我们得出结论:任何时间点的链状态(不包括区块头)都可以通过这些信息来概括:
第一条信息可以使用块高度(与起始块的距离)推导出来。未使用的输出和交易内核都非常紧凑。这有两个重要的后果:
另外,未使用的交易输出(即UTXO)组成的完整集是不可篡改的,即使只是想去添加或删除一些交易输出。这样做会导致交易内核中所有致盲因因子的总和与输出中致盲因素的总和不同。
在本文中,我们介绍了基于MimbleWimble区块链的基本原则。通过使用椭圆曲线密码的附加属性,我们能够构建完全不透明但仍可以正确验证的交易。通过将这些属性,我们可以消除大量区块链数据,从而实现新对等点的大规模部署和快速同步。
浅谈区块链:如何利用区块链进行转账交易?生活中我们都有自己的银行账户,而转账是在银行账户之间进行的。同样,数字货币转账就是把比特币从一个比特币地址转移到另一个比特币地址上的过程。那如果你想转账给别人,你需要在比特币交易平台,比特币钱包或者比特币客户端中输入你的比特币地址、接受方地址、转账金额和手续费金额。确定支付后,交易信息会在比特币网络进行全网广播,矿工每隔10分钟会将比特币网络中未被记账的交易打包进一个区块,这就完成了一次确认,此时比特币已转到接收方账户,一般情况需要经过6次确认,确保交易记录不能被任何人篡改,转账才算能真正完成。
上面我们有说到转账手续费的问题,那转账一次需要多少手续费呢?
比特币转账手续费是交易者付给矿工的一笔费用,用于激励矿工竞争记账,为比特币提供足够的算力从而确保比特币网络的安全,有的时候我们也管这笔费用叫矿工费。用户在比特币网络发起一笔转账时,手续费是不可避免的,一般情况为0.001-0.0015个比特币,由于区块能容纳的交易记录的容量有限,矿工会优先打包手续费高的交易记录,所以多一点手续费可以更快被记账。
本文由汇新云我整理发布,我将持续更新《浅谈区块链》系列,该系列会介绍一些区块链以及数字货币的基础知识,敬请关注!
(汇新云——IT协同产业生态链平台,平台上有钻研区块链技术应用的产品经理和区块链技术应用的成熟产品解决方案,期待光临!)
如何在新零售中运用区块链?首先,利用区块链技术将不同商品流通的参与主体的供应链和区块链存储系统相连接。其中包括原产地、生产商、渠道商、零售商、品牌商和消费者。使每一个参与者信息在区块链的系统中可查可看。
其次在区块链联盟链的运营商,大致分为以下几项:联盟链、自动化、可视化、数据效率、跨链桥接,每一个环节都一整套的运行机制,数据链信息具有全面性、自动化、公开化、高效性、合理性和联动性。
这种运行管理机制更加具有科学性和合理性。尤其是在食品行业,以牛肉为例,通过所购买牛肉的惟一溯源编码,消费者清楚地了解所购牛肉的真伪、全程追溯信息,极大提升信任。同时,通过大数据舆情帮助企业开展品牌文化宣传等智慧营销活动,实现企业和消费者收益最大化。
最后,基于零售行业天然具有交易数据碎片化、交易节点多样化、交易网络复杂化的显著特点,商品生产、流通、交付等信息的采集、存储和整合是端到端的零售供应链管理的核心命题。
宏桥科技运用区块链取代现有跨境贸易流程中的纸质模式,通过可信交易数据的完整性和关联性,形成链上数据的闭环自证能力。提升跨境贸易中的审单速度和流程运转效率。海关可直接管理跨境贸易全流程,实时审阅交易过程,可快速、准确分析与管控风险。
本站所有软件信息均由用户上传发布,版权归原著所有。如有侵权/违规内容,敬请来信告知邮箱:764327034@qq.com,我们将及时撤销! 转载请注明出处:https://czxurui.com/jys/155063.html
发表回复
评论列表(0条)