主页 > imtoken注册 > 区块链开发货币兑换开发知识码

区块链开发货币兑换开发知识码

imtoken注册 2023-07-31 05:12:20

这几天比较忙,没时间整理、分享和写这些文章,所以发的不多。 现在我终于有点自由了。 我再给大家讲讲这方面的一些知识。 今天,我将谈谈挖矿脚本账户消息和交易。 我会早点说。 一共八篇,都是从区块链开发和货币兑换开发入手。 你可以自己阅读。 因为平台不同,你可能不会全部看完。 后面我会继续讲。 这个的开发需要综合开发涉及到的开发语言的知识很多,一时半会也学不完。 言归正传,让我从第一个开始。

1.先看挖矿图

主链侧链开发交易所发行交易系统钱包浏览器网站白皮书溯源系统宠物系统130--9888--0981

一个区块,每个区块包含时间戳、随机数、对前一个区块的引用(即哈希),以及自前一个区块生成以来发生的所有交易的列表。 随着时间的推移,这会创建一个不断增长的区块链,不断更新以代表比特币分类账的最新状态。

按照这种范式,检查区块是否有效的算法如下:

1. 检查该块引用的前一个块是否存在且有效。

比特币价值比特币最新_比特币脚本模式_比特币怎么比特币钱包

2.检查该块的时间戳是否晚于前一个块的时间戳,并且早于未来2小时[2]。

3. 检查区块的工作量证明是否有效。

4. 将前一个块的最终状态赋值给S[0]。

5、假设TX为该区块的交易列表,包括n笔交易。 对于所有属于 0...n-1 的 i,执行状态转换 S[i+1] = APPLY(S[i],TX[i])。 如果任何事务 i 在状态转换中出错,则退出程序并返回错误。

比特币价值比特币最新_比特币怎么比特币钱包_比特币脚本模式

6. 返回正确,状态S[n]是这个块的最终状态。

本质上,区块中的每笔交易都必须提供正确的状态转换,需要注意的是“状态”并未编码到区块中。 它纯粹是校验节点记住的抽象概念。 对于任何一个区块,它都可以从创世状态开始,依次添加每个区块的每笔交易,并(适当地)计算当前状态。 另外,需要注意矿工将交易写入区块的顺序。 如果一个区块中有A和B的两笔交易,并且B花费了A创建的UTXO,如果A在B之前,那么这个区块是有效的,否则,这个区块是无效的。

区块验证算法中有趣的部分是“工作量证明”的概念:对每个区块进行 SHA256 散列,并将得到的散列视为一个长度为 256 位的值,该值必须小于连续动态调整后的目标值,写这本书时的目标值大概是2^190。 工作量证明的目的是使区块的创建变得困难,从而防止女巫攻击者恶意重新生成区块链。 因为 SHA256 是一个完全不可预测的伪随机函数,所以创建有效块的唯一方法就是简单地不断试错,不断增加 nonce 的值,看看新的哈希值是否小于目标值。 如果当前目标值为 2^192,则意味着平均需要 2^64 次尝试才能生成有效块。 一般来说,比特币网络每2016个区块重置一次目标值,以确保平均每十分钟产生一个区块。 为了奖励矿工的计算工作,每个成功生成区块的矿工都有权在区块中包含一笔凭空向他们发送 25 BTC 的交易。 此外,如果交易的输入大于输出比特币脚本模式,则将差额作为“交易费”支付给矿工。 顺便说一句,对矿工的奖励是比特币发行的唯一机制,创世状态下没有比特币。

为了更好地理解挖矿的目的,让我们分析一下当恶意攻击者出现在比特币网络上时会发生什么。 由于比特币的密码学基础非常安全,攻击者会选择攻击不受密码学直接保护的部分:交易顺序。 攻击者的策略非常简单:

比特币价值比特币最新_比特币怎么比特币钱包_比特币脚本模式

1、送100BTC给卖家购买商品(尤其是不需要邮寄的电子商品)。

2. 等待商品发货。

3. 创建另一笔交易,将同样的 100BTC 发送到您自己的账户。

4. 让比特币网络相信发送到你自己账户的交易是先发送的。

比特币价值比特币最新_比特币怎么比特币钱包_比特币脚本模式

一旦第 (1) 步发生,矿工将在几分钟后将此交易包含在一个区块中,比如说第 270,000 个区块。 大约一个小时后,这个区块之后会有五个区块,每个区块都间接指向这个交易,从而确认交易。 此时,卖家收到货款并发货给买家。 由于我们假设这是一种数字商品,攻击者可以立即收到商品。 现在,攻击者创建了另一笔交易,将同样的 100BTC 发送到他自己的账户。 如果攻击者只是将这条消息广播到全网,这笔交易将不会被处理。 矿工将运行状态转换函数 APPLY(S,TX) 并发现该交易将花费不再处于该状态的 UTXO。 因此,攻击者会分叉区块链,以第 269,999 个区块为父区块重新生成第 270,000 个区块,并在该区块中用新交易替换旧交易。 因为区块数据不同,这就需要新的工作量证明。 另外,由于攻击者新生成的第270,000个区块的哈希值不同,原来的第270,001到第270,005个区块并不指向它,所以原区块链和攻击者的新区块是完全一致的。 分离。 当区块链发生分叉时,该区块链的长分支被认为是一条诚实的区块链,合法矿工会沿着原来的第270005个区块进行挖矿,只有攻击者才会在新的区块进行挖矿。 区块 270,000 后挖矿。 攻击者为了让他的区块链最长,他需要拥有比除他之外的整个网络更多的算力才能追上(即51%攻击)。

2.脚本

即使不扩展比特币协议,它也可以在一定程度上实现“智能合约”。 比特币 UTXO 不仅可以由公钥拥有,还可以由以基于堆栈的编程语言编写的更复杂的脚本拥有。 在这种模式下,要花费这样的 UTXO,必须提供满足脚本的数据。 事实上,基本的公钥所有权机制也是通过脚本实现的:脚本以椭圆曲线签名为输入,验证交易和拥有UTXO的地址,验证成功返回1,否则返回0。 在其他不同的应用案例中使用更复杂的脚本。 例如,可以创建需要三个私钥中的两个来进行交易确认(多重签名)的脚本,这对公司账户、储蓄账户和某些商业代理很有用。 脚本还可用于向解决计算问题的用户发送奖励。 人们甚至可以创建脚本,比如“如果你能提供一个简化的确认支付证明,证明你已经向我发送了一定数量的狗狗币,这个比特币 UTXO 就是你的了”,本质上,比特币系统允许不同密码的学习货币进行去中心化交换。

然而,比特币系统的脚本语言有一些严重的局限性:

比特币怎么比特币钱包_比特币脚本模式_比特币价值比特币最新

缺乏图灵完备性——这意味着虽然比特币脚本语言可以支持多种计算,但它不能支持所有的计算。 缺少的主要内容是循环语句。 不支持循环语句的目的是为了避免在确认交易时无限循环。 理论上,这对脚本程序员来说是一个可以克服的障碍,因为任何循环都可以通过多次重复 if 语句来模拟,但这样做会导致脚本空间的低效使用,例如,实现一个替代的椭圆曲线签名算法可能需要256 次重复乘法,每一次都单独编码。

· 价值盲目。 UTXO 脚本不提供对帐户提款的细粒度控制。 例如,预言机合约的一个强大应用是对冲合约。 A 和 B 各自向对冲合约发送价值 1,000 美元的比特币。 30 天后,脚本将价值 1,000 美元的比特币发送给 B。发送剩余的比特币。 尽管实施对冲合约需要预言机来确定比特币的美元价值,但与当今完全中心化的解决方案相比,这种机制在减少信任和基础设施方面取得了巨大进步。 然而,因为 UTXO 是不可分割的,所以实现这个合约的唯一方法是非常低效地获取许多不同面额的 UTXO(例如比特币脚本模式,每个 k 有一个 2^k 个 UTXO,直到 30)并且让 oracle 挑选出正确的 UTXO 来发送给A和B。

缺乏状态——UTXO 只能处于花费或未花费状态,没有为需要任何其他内部状态的多阶段合约或脚本留下空间。 这使得实施多阶段期权合约、去中心化交易报价或两阶段加密承诺协议(确保计算奖励所必需)变得非常困难。 这也意味着 UTXO 只能用于构建简单的一次性合约,而不是具有更复杂状态的合约,例如去中心化组织,这使得元协议难以实施。 二元状态与价值盲目相结合意味着另一个重要的应用 - 提款限制 - 是不可能的。

区块链失明——UTXO 看不到区块链数据,例如先前区块的随机数和哈希值。 这一缺陷剥夺了脚本语言基于随机性的潜在价值,严重限制了其在博彩等其他领域的应用。

我们已经研究了在加密货币之上构建高级应用程序的三种方法:构建新的区块链、在比特币区块链上使用脚本以及在比特币区块链上构建元币协议。 构建新区块链的方法可以以开发时间和孵化工作为代价免费实现任意功能。 脚本方法很容易实现和标准化,但它的功能有限。 虽然元币协议非常容易实现,但它存在可扩展性差的缺陷。 在以太坊系统中,我们的目标是建立一个通用的框架,可以同时拥有这三种模式的所有优点。

前面的文章就先说到这里吧,大家可以自己看