当前位置: 首页 > 工具软件 > dapps > 使用案例 >

DApps和Ethereum

司马飞鸿
2023-12-01

DApps(decentralized applications):分布式应用程序

DApps没有中心服务去控制和决定节点的错或者对,所以用共识机制来解决这一难题,比特币使用的是工作量证明的共识机制(proof of work)。

每个DApps需要一个客户端供用户使用DApp。使用DApp,我们首先需要通过运行我们自己的DApp节点服务拥有网络上的一个节点,然后将客户机链接到节点服务上。DApp提供一个
API仅允许开发人员使用该工具开发各种客户端
API。

  • DApp的优点
    (1)Dapps容错性好,因为没有单点故障,并且它们是默认分配的。
    (2)(因为没有中央权威中心可以向政府施压以删除一些内容,所以DApps阻止网络审查的违反????。) 政府甚至不能阻止应用程序的域或IP地址,因为DApps不是通过特定的IP地址或域访问的。 很显然,政府可以通过IP地址跟踪网络中的各个节点并关闭它们,但是如果网络规模巨大,则几乎不可能关闭该应用,特别是如果节点分布在不同的国家。
    (3)用户可以信任的应用,因为没有中心可以因为自己的利益控制或者作假。

  • DApps的缺点
    (1)修复或者更新麻烦,因为每个节点都要更新
    (2)一些应用需要身份确认
    (3)共识算法
    (4)耦合

DAO(decentralized autonomous organization):去中心化自治组织,可以说是DApps的子类。

  • DApps中用户身份
    为了确认用户身份,采用数字签名。

  • DApps用户账户
    使用私钥对账户进行更改或操作。

  • 访问集中apps

在某些情况下,DApp需要从集中式应用程序中获取数据。 但是,主要的问题是,DApp如何知道从域中获取的数据没有被中间服务/人篡改,并且是实际的响应。 那么,根据DApp体系结构,有很多方法可以解决这个问题。 例如,在以太坊,智能合同访问集中式API时,可以使用Oraclize服务作为中间人,因为智能合约不能直接发出HTTP请求。 Oraclize为从集中式服务中获取智能合约的数据提供TLSNotary证明。

  • DApps内部货币
    对于一个集中的应用程序来维持很长时间,应用程序的所有者需要赚取利润,以保持运行。 DApps没有所有者,但是像其他任何集中的应用程序一样,DApp的节点需要硬件和网络资源来保持运行。 所以DApp的节点需要一些有用的东西来保持DApp的运行。 这就是内部货币发挥作用的地方。 大多数DApps都有一个内置的内部货币,或者我们可以说最成功的DApps有一个内置的内部货币。

共识协议决定节点接收多少货币。 根据协商一致的协议,只有某些节点才能获得货币。 我们也可以说,有助于保持DApp安全和运行的节点是赚取货币的节点。 只读取数据的节点没有任何奖励。 例如,在比特币中,只有矿工才能获得比特币才能成功开采矿块。

最大的问题是,因为这是一个数字货币,为什么有人会重视它呢? 那么,根据经济学,任何有需求,供不应求的东西都是有价值的。

让用户用内部货币支付使用DApp解决了需求问题。 随着越来越多的用户使用DApp,需求也增加,因此内部货币的价值也增加。

设定可以生产的固定数量的货币会使货币稀缺,从而使货币价值更高。

货币随时间而供应,而不是随时提供所有货币。 这样做是为了使进入网络的新节点保持安全并正常运行,也可以赚取货币。

  • 内部货币的缺点

在DApps中拥有内部货币的唯一缺点是DApps不再是免费使用的。 这是集中应用程序占据上风的地方之一,因为集中式应用程序可以通过广告获利,为第三方应用程序提供高级API,所以用户可以免费使用。

在DApps中,我们不能展示广告,因为没有人去检查广告标准; 客户不得展示广告,因为他们在展示广告方面没有任何好处。

  • DApps的许可
    要加入一个许可的DApp,你需要权限,所以没有权限的DApps的共识协议可能在许可的DApps中不能很好地工作;因此,对于不受限的DApps他们有不同的共识协议。 许可的DApps没有内部货币。

  • 流行的DApps
    比特币

以太坊

hyperledger
Fabric是一个许可的分散平台,允许我们在其上运行许可的DApps(称为链接代码)。 我们需要部署我们自己的结构实例,然后在其上部署我们许可的DApp。 网络中的每个节点都运行一个结构实例。 Fabric是一个即插即用的系统,您可以轻松地插入和播放各种一致的协议和功能。

IPFS
IPFS(InterPlanetary文件系统)是一个分散的文件系统。 IPFS使用DHT(分布式散列表)和Merkle DAG(有向无环图)数据结构。 它使用类似于BitTorrent的协议来决定如何在网络上移动数据。 IPFS的高级功能之一是它支持文件版本控制。 为了实现文件版本控制,它使用类似于Git的数据结构。
尽管它称为分散式文件系统,但并不遵循文件系统的主要属性; 也就是说,当我们在文件系统中存储某些东西的时候,保证会一直存在,直到被删除。 但是IPFS不这样工作。 每个节点不保存所有文件; 它存储它需要的文件。 因此,如果一个文件不太流行,那么显然很多节点都不会有这个文件; 因此,文件从网络中消失的机会很大。 由于这个原因,许多人更喜欢称IPFS是一个分散的点对点文件共享应用程序。 否则,你可以把IPFS看作是完全分散的BitTorrent; 也就是说,它没有跟踪器,并具有一些高级功能。







  • 以太坊
    以太坊是一个分散的平台,可以让我们在其上部署DApps。 智能合约是用solidity编程语言编写的。 DApps是使用一个或多个智能合约创建的。 智能合约是程序完全按照程序运行,不存在停机,审查,欺诈或第三方界面的可能性。 在以太坊,智能合约可以用几种编程语言编写,包括Solidity,LLL和Serpent。 Solidity是这些语言中最受欢迎的。 以太坊有一个叫做ether的内部货币。 要部署智能合约或调用他们的方法都需要ether。 像任何其他DApp一样,以太坊可以有多个智能合约实例,每个实例都由其唯一地址标识。 用户帐户和智能合约都可以拥有以太网。
    以太坊使用区块链数据结构和工作证明共识协议。 智能合约的方法可以通过交易或通过其他方法来调用。 网络中有两种节点:普通节点和矿工。 普通节点只是区块链的副本,而矿工通过挖掘块建立区块链。

  • 以太坊账户
    要创建一个以太坊账户,我们只需要一个非对称密钥对。 有各种算法,如RSA,ECC等,用于生成非对称加密密钥。 以太坊使用椭圆曲线密码(ECC)。 ECC具有各种参数。 这些参数用于调整速度和安全性。 以太坊使用secp256k1参数。 要深入了解ECC及其参数将需要数学知识,但使用以太坊构建DApps不需要深入理解。
    Ethereum使用256位加密。Ethereum私有/公钥是256位号码。由于处理器不能代表如此大的数字,它被编码为十六进制字符串长度为64。
    每个帐户由一个地址表示。一旦我们拥有了我们需要的钥匙生成地址,这里是从公共密钥生成地址的过程:
    (1)生成公钥的keccak-256哈希,将会得到256bit的数字。
    (2)删除前96bit,也就是12字节。即就是剩下二进制:160bits,也就是20字节。
    (3)现在将地址编码为十六进制字符串,你将会有一个40个字符的字符串,这个就是账户地址。

现在任何人都可以发送ether到这个地址。

  • 交易(事务)
    交易是一个签署的数据包,用于将以太帐从一个账户转移到另一个账户或合同,调用合同的方法或部署新的合同。 ECDSA(椭圆曲线数字签名算法)是一种基于ECC的数字签名算法。交易包含消息的接收者,标识发送者并证明其意图的签名,要传输的以太数量,允许交易执行的最大计算步骤数量(称为gas限制)以及成本交易的发送者愿意为每个计算步骤(称为gas价格)付费。如果事务的意图是调用一个合同的方法,它也包含输入数据,或者如果它的意图是部署一个合同,那么它可以包含初始化代码。gas和gas价格的产品被称为交易费用。要发送以太网或执行合同方法,您需要将事务广播到网络。发件人需要使用其私钥签署交易。

  • 共识
    以太坊网络中的每个节点都拥有区块链的副本。 我们需要确保节点不能篡改区块链,并且还需要一种机制来检查区块是否有效。 而且,如果我们遇到两个不同的有效区块链,我们需要找到一个方法来找出哪一个选择。
    以太坊使用工作证明共识协议来保持区块链防篡改。 工作证明系统涉及解决一个复杂的难题来创建一个新的块。 解决这个难题应该需要大量的计算能力,因此难以创建块。 在工作证明系统中创建块的过程称为挖掘。 矿工是矿区网络中的节点。 所有使用工作证明的DApp都不会实现完全相同的一组算法。 他们可能在矿工需要解决的难题,难题有多困难,需要多少时间来解决问题等方面有所不同。 我们将学习关于以太坊的工作证明。
    任何人都可以成为网络中的矿工。 每个矿工都能单独解决这个难题。 解决这一难题的第一位矿工是赢家,并且在该区块的所有交易中得到五个乙醚和交易费用。 如果你有一个比网络中任何其他节点更强大的处理器,这并不意味着你将永远成功,因为这个谜题的参数对于所有的矿工来说并不完全相同。 但是相反,如果你有一个比网络中任何其他节点更强大的处理器,它给你一个更高的成功机会。 工作证明就像一个彩票系统,处理能力可以被认为是一个人拥有的彩票数量。 网络安全不是由矿工总人数来衡量的; 相反,它是由网络的总处理能力来衡量的。
    区块链可以拥有的块数没有限制,并且对于可以产生的总ether没有限制。 一旦矿工成功地开采了矿块,它就会将矿块广播给网络中的所有其他节点。 一个块有一个头和一组事务。 每个块保存前一个块的散列,从而创建一个连接链。
    让我们看看矿工们需要解决的难题以及如何在高水平上解决这个难题。 要挖掘一个区块,首先,一个矿工收集广播的新的未开采交易,然后过滤出不合法的交易。 一个有效的交易必须使用私钥进行正确的签名,该帐户必须有足够的余额进行交易,等等。 现在矿工创建一个块,它有一个头和内容。 内容是块包含的事务的列表。 标题包含前面块的散列,块号,随机数,目标,时间戳,矿工的难度,地址等等。 时间戳表示块开始时的时间。 然后随机数是一个无意义的值,这是调整,以找到解决难题。难题主要是找到这样的随机数值,当块被散列时,散列小于或等于目标。 以太坊使用ethash哈希算法。 找到随机数的唯一方法是枚举所有的可能性。 目标是一个256位的数字,根据各种因素计算。 标题中的难度值是目标的不同表示,以便于处理。 目标越低,找到随机数所需的时间越多,目标越高,找到随机数所用的时间就越少。

现在,网络中的任何节点都可以通过首先检查区块链中的事务是否有效,时间戳验证,然后检查所有区块的目标和现时是否有效,检查矿工是否有效 一个有效的奖励本身,等等。

如果网络中的一个节点接收到两个不同的有效区块链,则所有区块组合难度较高的区块链被认为是有效的区块链。

现在,例如,如果网络中的节点改变块中的一些事务,则节点需要计算所有后续块的随机数。 当重新发现后续块的随机数时,网络将挖掘更多的块,因此拒绝这个区块链,因为它的组合难度会降低。

-时间戳
计算块目标的公式需要当前时间戳,并且每个块都具有附加到其头的当前时间戳。 在挖掘新块时,没有任何东西可以阻止矿工使用其他时间戳来代替当前时间戳,但通常不会因为时间戳验证失败而其他节点不接受块,而且会浪费矿工的资源 。 当矿工广播新挖掘的块时,通过检查时间戳是否大于前一个块的时间戳来验证其时间戳。 如果矿工使用大于当前时间戳的时间戳,则难度与当前时间戳成反比; 因此,其阻挡时间戳是当前时间戳的矿工将被网络接受,因为它将具有较高的难度。如果矿工使用的时间戳大于前一个时间戳并且小于当前时间戳,则难度会更高,因此挖掘该块需要更多的时间。 到块开始的时候,网络会产生更多的块,因此,这个块将被拒绝,因为恶意矿工的区块链比区块链具有更低的难度。 由于这些原因,矿工总是使用准确的时间戳,否则一无所获。

  • Nonce
    该随机数是一个64位无符号整数。 随机数是解决难题的方法。 矿工不断增加nonce,直到找到解决方案。 现在你一定在想,如果有一个矿工在网络中拥有比其他任何一个矿工更强的散列能力,矿工是否会首先发现nonce? 当然,它不会。对于每个矿工而言,矿工所挖掘的矿块的哈希值是不同的,因为哈希值取决于诸如时间戳,矿工地址等等,对于所有的矿工而言,这是不太可能的。 因此,解决这个难题不是一场竞赛。 相反,这是一个彩票系统。 但是,当然,一个矿工很可能会因为散列能力而幸运,但这并不意味着矿工总能找到下一个块。

  • Whisper and Swarm
    Whisper和Swarm分别是由Ethereum开发人员开发的分布式通信协议和分布式存储平台。 Whisper是一个分散的通信协议,而Swarm是一个分散的文件系统。

  • geth

  • JSON-RPC and Javascript

  • 连接到主网络
    以太坊网络中的节点默认使用30303端口进行通信。 但是节点也可以自由地监听其他一些端口号。
    要连接到主网络,只需要运行geth命令。 下面是一个如何明确指定网络ID的例子,并指定geth将存储下载区块链的自定义目录:

geth --datadir "/users/packt/ethereum" --networkid 1

要创建一个专用网络,你只需要给一个随机的网络ID。 专用网络通常是为了开发目的而创建的。 Geth还提供了与日志和调试相关的各种标志,这在开发过程中很有用。 因此,我们可以简单地使用–dev标志,而不是给一个随机的网络标识,并且运行一个专用网络,并启用各种调试和记录标志。

  • Proof-of-stake and casper
    在我们进入casper共识协议之前,我们需要了解如何证明利益共识协议的工作原理。
 类似资料: