比特币bip141
自从区块链(blockchain)这个词被从比特币中抽象出来之后,整个业内就弥漫着一种奇特的意识形态叙事(ideological narrative)。这个叙事是这样的:比特币是一架又慢又旧的破马车,十几年了没有什么改进,什么炫酷的功能都没有。当然,从人类“无利不起早”的天然本性而言,给你讲这么一通破烂话的人,绝对不是吃饱了撑的无事生非,而通常都会在看到你对手里的大饼(BTC)起了半信半疑之心之后,趁机向你推销他正在兜售的拉风跑车项目。
北京时间11月14号下午13点15分27秒,随着区块高度709632的区块被挖出,比特币自2017年隔离见证升级之后最重要的升级之一,Taproot升级,宣告成功激活(今年6月份就已经获得超90%矿工投票lock-in了,本次激活属于明牌)。
该区块中包含了chainside联合创始人Federico Tenga的一笔V1_P2TR交易。在该笔交易中,Federico在OP_RETURNDATA中附加了一句话:gm taproot 。据信,这是 历史 上第一笔Taproot交易。为了抢到这个名次,Federico支付了2510 sat/vB的矿工费(手续费),这大概是正常矿工费(不到10 sat/vB)的5百多倍。[1]
Taproot升级为我们带来了区块扩容、更好的隐私性以及增强的扩展性等诸多好处。这些好处主要是由于两项技术的引入而带来的。其一就是Schnorr签名,而另一个就是MAST(默克尔化的抽象语法树)。
Schnorr签名能够压缩数字签名的尺寸。单签名比ECDSA节省约12%的尺寸,也就可以节省转账手续费。以及,它能够把多签名压缩成一个签名,这可以极大压缩多签地址的尺寸,并保护多签参与者的隐私。据说早在2012年Mike Hearn就在bitcointalk论坛提出过类似想法。通过压缩签名尺寸,相当于扩大了区块容量,容纳更多交易量。
MAST则可以大大改善P2SH交易的交易尺寸、隐私性和灵活性。最早的BIP-114提案是由Johnson Lau于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的激活,可能会有利于二层的发展。但是,并不会给一层带来自限性的问题。相反的,它会因为压缩了数据尺寸,而扩大了一层的容量。
比特币是富有耐心的。它肩负着普及去中心化数字货币(而不是在中心化平台上进行投机)的 历史 任务。所以它必须耐心地等待,等待每一个人跟上技术发展的脚步。
⑵ 助记词为什么只需要记住前面四位
因为助记词不用区分大小写,都是较为常见的单词。
数字钱包在使用过程中为了大家便于记住私钥,通常是由助记词来记。当时你建立钱包的时候就会用12个单词或者12个字生成助记词,这样你就不需要记住私钥了,只需要记住助记词。
助记词本质也是一串随机数,不过因为随机数形式和私钥形式都不方便使用,所以比特币社区通过了BIP39协议,来允许将随机数通过特定编码转化为词库中的单词。
⑶ 比特币-助记词
助记词是明文私钥的另一种表现形式, 最早是由 BIP39 提案提出, 其目的是为了帮助用户记忆复杂的私钥 (64位的哈希值)。
助记词一般由12、15、18、21个单词构成, 这些单词都取自一个固定词库, 其生成顺序也是按照一定算法而来, 所以用户没必要担心随便输入 12 个单词就会生成一个地址。助记词是私钥的另一种表现形式, 助记词是未经加密的私钥, 没有任何安全性可言, 任何人得到了你的助记词, 可以不费吹灰之力的夺走你的资产。
备份助记词注意事项:
1. 尽可能采用物理介质备份, 例如用笔抄在纸上等, 尽可能不要采用截屏或者拍照之后放在联网的设备里, 以防被黑客窃取
2. 多次验证备份的助记词是否正确, 一旦抄错一两个单词, 那么将对后续找回正确的助记词带来巨大的困难;
3. 将备份后的助记词妥善保管, 做好防盗防丢措施。
⑷ 比特币VS比特币现金,究竟应该选哪个
比特币现金
英文名:Bitcoin Cash(BCC)/BCH
发行时间:2017-07-24
上架交易所:93家
比特币现金简单介绍:
2017年7月21日,比特币分叉方案BIP91已经获得全网算力支持,一致同意先进行隔离见证升级,并在之后的6个月内把底层区块链的区块大小升级至2M。然而“搅局者”出现了——挖矿巨头比特币大陆旗下的矿池ViaBTC准备了一套硬分叉的体系,基于比特币的原链推出“比特币现金”。
2017年8月1日20时20分,比特币现金开始挖矿,这是比特币的新的分支还是另外一种“山寨币”,业内论调不一,但是此前BCC提前报价已经达到2000元,也就是已经超过比特币价格的十分之一。
比特币现金修改了比特币的代码,支持大区块(将区块大小提升至8M),不包含SegWit功能,是BitcoinABC方案产生的区块链资产。
比特币现金是比特币的一个分叉币,比特币的分叉币是在2017年走红,当时分叉出了很多币种,这些分叉币确实在性能等方面优于比特币,但是毕竟是“比特币的儿子”行业内专业人士普遍认为分叉币具有中心化的特性,故不看好。比特币作为数字货币领域的币王的地位是很难被撼动的,至少现阶段还是如此。
⑸ 如何构建区块链服务
区块链服务是指根据公链提供的基础设施开发公链应用,并运行应用提供服务。如在以太坊上使用智能合约开发公链应用,并在以太坊节点上运行对公众提供有效服务。在比特币上,利用比特币有限的功能,提供一些存证服务。
区块链开发者应当建立有效的渠道,能够收集当前区块链的不足,并进行针对性的改进,这种过程我们称之为Improvement Proposals (改进提案):比特币隔离见证(由一系列BIP组成)就是一个很好的例子。应用层的开发者利用IP过程可以将在使用过程中发现的问题反馈给开发者,形成一个良性循环。且IP过程不应当仅限在技术领域,而应当深入Business Layer。
链乔教育在线旗下学硕创新区块链技术工作站是中国教育部学校规划建设发展中心开展的“智慧学习工场2020-学硕创新工作站 ”唯一获准的“区块链技术专业”试点工作站。专业站立足为学生提供多样化成长路径,推进专业学位研究生产学研结合培养模式改革,构建应用型、复合型人才培养体系。
⑹ 比特币究竟会不会分裂及币行应对比特币分叉方案
如果你一直在关注比特币社区的消息,你会知道在大约两周内,最快可能2天内,比特币网络可能会面临协议上的一些改变。
为了改进比特币的交易能力,解决比特币网络拥堵问题,各方一直争论不休,并且提出了多种解决方案。未来多则几周内短则几天比特币社区,可能会是迎来一次平滑的升级,也可能会出现链分裂,又或者只是简单地维持现状。
但最终哪种方案将会落地实施,还要看最终的投票结果。
截止到发稿前,已有88.2%的矿工投票支持SegWit2x(比特币分叉投票结果查询网址:coin.dance/blocks)
OKCoin币行作为一家致力于比特币应用的公司,我们的崇旨是服务好每一位客户,OKCoin币行并没有权力帮助用户选择哪一种比特币技术,因此OKCoin币行将支持所有了比特币技术发展路线,把选择权交给市场和客户。
OKCoin币行将在比特币出现分叉可能性的期间采取如下措施:
1?在可能出现分叉的时间点,2017-07-30 - 2017-08-02 ,为了防止比特币充值或提现被回滚和重放攻击,我们将停止比特币的充值和提现。
具体的停止提现的时间点,我们会另行通知。为了您分叉期间的交易便捷,建议您提前进行比特币的充值,以防止遇到突发行情无法交易。
2?如果没有出现分叉,网络稳定以后,我们将恢复充值和提现。
3?如果比特币分裂为一种或多种比特币,OKCoin币行将会把分裂出来的各种比特币按拥有权提供给所有客户,并且逐步上线所有新种类的比特币的交易。
4?对于用户来讲,最简单的方法提前充值比特币,我们会为您处理好分叉过程中的各种技术问题。
5?如果分叉过程出现了价格异常,OKCoin币行可能会临时中止交易。
我们相信,很多年后,经过长期的市场竞争,一个或多个版本的比特币将被广泛采用,让我们一起为比特币的未来努力。
⑺ 4. 比特币的密钥、地址和钱包 - 精通比特币笔记
比特币的所有权是通过密钥、比特币地址和数字签名共同确定的。密钥不存在于比特币网络中,而是用户自己保存,或者利用管理私钥的软件-钱包来生成及管理。
比特币的交易必须有有效签名才会被存储在区块中,因此拥有密钥就拥有对应账户中的比特币。密钥都是成对出现的,由一个公钥和一个私钥组成。公钥相当于银行账号,私钥就相当于银行卡密码。通常情况下密钥由钱包软件管理,用户不直接使用密钥。
比特币地址通常是由公钥计算得来,也可以由比特币脚本得来。
比特币私钥通常是数字,由比特币系统随机( 因为算法的可靠性与随机性正相关,所以随机性必须是真随机,不是伪随机,因此比特币系统可以作为随机源来使用 )生成,然后将私钥作为输入,使用椭圆曲线算法这个单向加密函数生成对应的公钥,再将公钥作为输入,使用单向加密哈希函数生成地址。例如,通过公钥K得到地址A的计算方式为:
其中SHA256和PIPEMD160被称为双哈希或者HASH160,Base58Check是带有验证功能的Base58编码,验证方式为先计算原始数据(编码前)的验证码,再比较编码后数据的验证码,相同则地址有效,否则无效。而在使用Base58Check编码前,需要对数据做处理。
处理方式为: 版本前缀 + 双哈希后的数据 + 校验码
其中版本前缀是自定义的,如比特币私钥的前缀是0x80,校验码是把版本前缀和双哈希后的数据拼接起来,进行两次SHA256计算,取前4字节。得到处理的数据后,再进行Base58编码,得到最终的结果。
下图是Base58Check版本前缀和Base58编码后的结果
密钥可以采用不同的编码格式,得到的编码后结果虽然不同,但密钥本身没有任何变化,采用哪种编码格式,就看情况而论了,最终目的都是方便人们准确无误的使用和识别密钥。
下图是相同私钥采用不同编码方式的结果:
公钥也有很多种格式,不过最重要的是公钥被分为压缩格式和非压缩格式,带04前缀的公钥为非压缩格式的公钥,而03,02开头的标识压缩格式的公钥。
前面说过,公钥是椭圆曲线上的一个点,由一对坐标(x, y)表示,再加上前缀,公钥可以表示为:前缀 x y。
比如一个公钥的坐标为:
以非压缩格式为例,公钥为(略长):
压缩格式的公钥可以节省一定的存储,对于每天成千上万的比特币交易记录来说,这一点点的节省能起到很大效果。
因为椭圆曲线实际上是一个方程(y2 mod p = (x3 + 7)mod P, y2是y的平方,x3是x的立方),而公钥是椭圆曲线上的一个点,那么公钥即为方程的一个解,如果公钥中只保留x,那么可以通过解方程得到y,而压缩公钥格式有两个前缀是因为对y2开方,会得到正负两个解,在素数p阶的有限域上使用二进制算术计算椭圆曲线的时候,y坐标或奇或偶,所以用02表示y为奇数,03表示y为偶数。
所以压缩格式的公钥可以表示为:前缀x
以上述公钥的坐标为准,y为奇数为例,公钥K为:
不知道大家发现没有,这种压缩方式存在一个问题,即一个私钥可以得出两个公钥,压缩和非压缩公钥,而这两个公钥都对应同一个私钥,都合法,但生成的比特币地址却不相同,这就涉及到钱包软件的实现方式,是使用压缩公钥还是非压缩公钥,或者二者皆用,这个问题后面来介绍。
比特币钱包最主要的功能就是替用户保管比特币私钥,比特币钱包有很多种,比如非确定性(随机)钱包,确定性(种子)钱包。所谓的非确定性是指钱包运行时会生成足够的私钥(比如100个私钥),每个私钥仅会使用一次,这样私钥管理就很麻烦。确定性钱包拥有一个公共种子,单向离散方程使用种子生成私钥,种子足够回收所有私钥,所以在钱包创建时,简单备份下,就可以在钱包之间转移输入。
这里要特别介绍下助记码词汇。助记码词汇是英文单词序列,在BIP0039中提出。这些序列对应着钱包中的种子,种子可以生成随机数,随机数生成私钥,私钥生成公钥,便有了你需要的一切。所以单词的顺序就是钱包的备份,通过助记码词汇能重建钱包,这比记下一串随机数要强的多。
BIP0039定义助记码和种子的创建过程如下:
另外一种重要的钱包叫做HD钱包。HD钱包提供了随机(不确定性) 钥匙有两个主要的优势。
第一,树状结构可以被用来表达额外的组织含义。比如当一个特定分支的子密钥被用来接收交易收入并且有另一个分支的子密钥用来负责支付花费。不同分支的密钥都可以被用在企业环境中,这就可以支配不同的分支部门,子公司,具体功能以及会计类别。
第二,它可以允许让使用者去建立一个公共密钥的序列而不需要访问相对应的私钥。这可允许HD钱包在不安全的服务器中使用或者在每笔交易中发行不同的公共钥匙。公共钥匙不需要被预先加载或者提前衍生,但是在服务器中不具有可用来支付的私钥。
BIP0038提出了一个通用标准,使用一个口令加密私钥并使用Base58Check对加密的私钥进行编码,这样加密的私钥就可以安全地保存在备份介质里,安全地在钱包间传输,保持密钥在任何可能被暴露情况下的安全性。这个加密标准使用了AES,这个标准由NIST建立,并广泛应用于商业和军事应用的数据加密。
BIP0038加密方案是: 输入一个比特币私钥,通常使用WIF编码过,base58chek字符串的前缀“5”。此外BIP0038加密方案需要一个长密码作为口令,通常由多个单词或一段复杂的数字字母字符串组成。BIP0038加密方案的结果是一个由base58check编码过的加密私钥,前缀为6P。如果你看到一个6P开头的的密钥,这就意味着该密钥是被加密过,并需个口令来转换(解码) 该密钥回到可被用在任何钱包WIF格式的私钥(前缀为5)。许多钱包APP现在能够识别BIP0038加密过的私钥,会要求用户提供口令解码并导入密钥。
最通常使用BIP0038加密的密钥用例是纸钱包一一张纸张上备份私钥。只要用户选择了强口令,使用BIP0038加密的私钥的纸钱包就无比的安全,这也是一种很棒的比特币离线存储方式(也被称作“冷存储”)。
P2SH函数最常见的实现时用于多重签名地址脚本。顾名思义,底层脚本需要多个签名来证明所有权,然后才能消费资金。这类似在银行开设一个联合账户。
你可以通过计算,生成特殊的比特币地址,例如我需要一个Hello开头的地址,你可以通过脚本来生成这样一个地址。但是每增加一个字符,计算量会增加58倍,超过7个字符,需要专门的硬件或者矿机来生成,如果是8~10个字符,那么计算量将无法想象。
⑻ 一文看懂钱包助记词和根私钥的关系
在最近的《区块链核心成员》的课程答疑中,讲师讲的最多的还是加密货币的密码机制。其中有好几个问题是关于私钥和助记词的。比如:
简单地说,私钥就是一个256位的随机数。这个随机数的产生是钱包功能之一。也就是说,钱包内置了密码级别的随机数产生器,保证产生的随机数是没有规律可循的,也就是说不易破解的。注意钱包是在用户终端运行的,产生的私钥就保存在用户终端,不会也不应该上传给钱包公司。这一点非常重要。大家尽量要使用开源的,被公开考验过的钱包软件,保证安全。
进一步说,现在的绝大多数钱包都是确定性钱包,它首先产生一个根私钥,而后根据这个根私钥可以产生无数的派生私钥,我们的钱包地址就是这些派生私钥所对应的公钥经过运算得到的地址。算法是固定的,因此地址也就是固定的。那么,这里,最重要的就是根私钥了。因为有了根私钥,根据固定的算法,就可以求出派生私钥,一切都可以简单地计算出来。
这里注意,根私钥不一定要是256位的。可以是128位,或196位或其他位数,只要强度足够大(一般要求至少128位)就行,而由其计算出来的派生私钥则一定是256位的。
根私钥与助记词是一一对应的关系。也就是说一个根私钥就对应一组助记词,一组助记词也对应一个根私钥。两者可以简单运算出来。
根私钥与助记词之间的对应关系可以查看 BIP39 (BIP的意思是比特币的改进建议,BIP39是正式发布的第39号建议)。BIP39是一部字典,这个字典有各种语言版本,我们最感兴趣的就是中文版了。当然还有英文,韩文,德文,法文,日文等等。这个字典什么样呢?很简单,每本字典都是一个模子,都包含2048个常用字(比如中文版)或单词(比如英文版),不多不少,就是2048个。每个字都有一个编号,从0到2047,就这么多。其他啥也没有。
那么这个字典表示什么呢?就是表示一个对应关系,也就是说通过字可以查编号,或者通过编号可以查到字。
好了,学过计算机或者了解2进制的朋友,当然知道2048(0~2047)意味着什么,很简单,就是2的11次方,也就是说11位2进制数可以表示0到2047。其实这就是助记词和根私钥的关系。
也就是说每一个字表示一个11位2进制数,或者说一个11位2进制数通过查字典就知道它表示哪个字。举个例子来说,我们产生了一个128位的根私钥,这样从头开始,每11位11位地分开,这样我们就有了11个11位二进制码,还剩下7位,咋办?好办。把最后7位也凑成11位就行了,差4位就补上。这4位正好可以为128为做校验来保证正确性。整个过程是这样:
那助记词回推私钥也就简单了,这样:
更多细节可以参看我的文章:
数字货币入门 之 钱包原理及钱包安全
⑼ 关于钱包助记词
昨天发生了用户在eostea注册账号后私钥被盗的事件,原因据说是eostea为用户提供了助记词功能,用户可以自己选择助记词,如果用户不输入助记词,就会生成一个默认的私钥。这样的私钥谁都算得出来,用户的账号当然就很容易被控制了。
如果这事属实,说明eostea干的活太不专业了:助记词不该由用户输入。实际上,钱包提供助记词功能是有一套标准的,那就是比特币的BIP39。让用户输入助记词,很容易产生碰撞,就是说不同的账号使用同样的私钥,这是必须避免的。解决的方法是,助记词必须来自一个标准的2048个单词的词库( https://github.com/bitcoin/bips/blob/master/bip-0039/english.txt ),给用户提供的12个助记词(也可以是24个)是系统用强随机函数生成,以保证每个账户取得的助记词都不相同。当用户导入助记词时,钱包要检查用户输入的12个单词是否来自2048词库,不是则拒绝生成私钥。
对于人类来说,记住那一长串私钥太难了,记助记词相对简单些,很多人喜欢用助记词。从 助记词 到 种子 再到 最终的私钥 也是有一套标准的,那就是BIP44(HD钱包)。简单点说,BIP44的关键是私钥的推导路径(derived path),不同币种按照不同的路径生成自己的私钥,BIP44规定比特币的路径是m/44'/0'/0'/0,以太币是m/44'/60'/0'/0,EOS是m/44'/194'/0'/0。只要钱包遵守BIP44,那么相同的助记词在不同的钱包APP里会算出相同的私钥,保证了钱包的兼容性。而且如果用户有多个币种的话,记住一套助记词就可以了,钱包随时随地能为用户生成相应的私钥。
GREATWALLET钱包严格遵循BIP44、BIP39标准为用户生成助记词,记住一套助记词,省去记多个币种私钥的麻烦,非常方便实用。欢迎使用GREATWALLET钱包,访问 http://greatwallet.io 或者 https://greatwallet.io .目前它对手机浏览器支持得还不够好,请使用桌面浏览器。
关于GREATWALLET钱包, 这里 有一篇简单的介绍。
(文中如有错误请同行指正)