区块链技术六大算法

2023-10-30

拜占庭协定

拜占庭的故事大概是这么说的:拜占庭帝国拥有巨大的财富,周围10个邻邦垂诞已久,但拜占庭高墙耸立,固若金汤,没有一个单独的邻邦能够成功入侵。任何单个邻邦入侵的都会失败,同时也有可能自身被其他9个邻邦入侵。拜占庭帝国防御能力如此之强,至少要有十个邻邦中的一半以上同时进攻,才有可能攻破。然而,如果其中的一个或者几个邻邦本身答应好一起进攻,但实际过程出现背叛,那么入侵者可能都会被歼灭。于是每一方都小心行事,不敢轻易相信邻国。这就是拜占庭将军问题。 在这个分布式网络里:每个将军都有一份实时与其他将军同步的消息账本。账本里有每个将军的签名都是可以验证身份的。如果有哪些消息不一致,可以知道消息不一致的是哪些将军。尽管有消息不一致的,只要超过半数同意进攻,少数服从多数,共识达成。 由此,在一个分布式的系统中,尽管有坏人,坏人可以做任意事情(不受protocol限制),比如不响应、发送错误信息、对不同节点发送不同决定、不同错误节点联合起来干坏事等等。但是,只要大多数人是好人,就完全有可能去中心化地实现共识。

本文阐述了拜占庭协议共识需要满足的条件、对拜占庭问题中的一些约束(如n>t3n>t3)做了证明,有助于读者理解这些约束条件的产生、随后提出了一个满足拜占庭共识达成条件的协议。分别由净化协议(PP)与拜占庭协议(BG)(中译非官方)组成。
值得注意的是,本文提出的这个协议严重依赖于网络整体拓扑,由于每条路线都被记录,可能会造成更大的通信开销。且由于依赖拓扑结构,网络动态变化时,该协议可能无法很好发挥作用。
对于动态的区块链网络,很明显该协议并不适用。不过可以有一些启发,比如是否可以加入Purify的过程?是否有其他文章类似采用了类似Purify过程。答案肯定是有的。

fault VS Byzantine fault

一般来说,fault就是指一个replica在运行中因为各种原因发生了错误,无法参与接下来的消息交换。fault之后这个replica就退出消息传递过程。byzantine fault是指这个发生了错误的replica不仅不为系统安全性做贡献,反而恶意传递假消息来试图掌控系统中最后达成一致的value。
能忍受byzantine fault的系统一定可以忍受普通的crash,反之不成立。

两种协议

十字军协议(The Crusade Agreement)

达成十字军共识的条件是:

  • 如果transmitter是可靠的,那么所有可靠的processor都应该就transmitter发送的值达成一致
  • 如果transmitter是不可靠的,那么所有知道transmitter不可靠的processor都应该对同一个值达成一致(只要求是同一个值,并不指定具体的值)

拜占庭协议(The Byzantine Agreement)

达成拜占庭共识的条件是:

  • 无论transmitter是否可靠,所有可靠的processor都应该就同一个值达成一致
  • 如果transmitter可靠,可靠的processor们应该对transmitter发出的值达成一致

假设

  1. 所有processor组成一个k-顶点连通图(k-connected bidirectional network);——意味着任意去掉k-1个processor,也能保持联通;也意味着两个顶点之间至少有k个定点不相交。
  2. 每一个processor都知道整个网络的拓扑结构;
  3. processor们传递消息是通过连接(而非广播)传播;通过Link能捕捉到包吗,应该是(和xh确认了,是可以捕捉到的
  4. 每一个processor都可以确定传给自己消息的邻居的身份;
  5. 每一条消息都包含着自己的确定的传递路径;
  6. 一个可靠的processor只会在看到这条消息的既定的传输路径中,自己将要发送给的邻居在自己之后,才会中继这条消息;
  7. 一个可靠的processor只会在看到这条消息的既定传输路径中,自己在自己收到包的邻居之后,才会中继这条消息;——也就是说,一个faulty processor如果想把自己的消息传给可靠的processor,一定要在后继者的身份之前加上自己的identity;尽管接下来可能有新的faulty processor抹去了前一个faulty processor的identity,这个新的faulty processor的identity将会在消息路径中;——即,一个经过了faulty的,现在在可靠的processor手中的消息,消息路径中至少包含一个faulty的identity;
  8. 可靠的processor收到消息后,不篡改、不窃听地将消息中继出去;
  9. 可靠的processor传递消息时间有上界;
  10. 系统中faulty processor数目有上界。

可疑的processor(Suspicious processors)

Va=a1,a2,...,arVa=a1,a2,...,ar是某一个processor收到的所有的value。(这些value可能由于各种原因可能并不相等)。可疑的processor集合定义为UxUx,其中不包括transmitter,如果去掉了VaVa中经过了UxUx中的所有的processor的value,那么VV中所有的值都相同。

恶意节点的上限

Theorem 1:如果一个网络中的恶意节点不少于(大于等于)n3n3,那么十字军一致不可能满足。

Lemma 1:如果一个包含三个网络节点的网络中有一个节点是faulty节点,那么该网络中不可能达到十字军一致。
Lemma 1 Proof:如图所示,其中处理器X是诚实的,而发送器T以及处理器Y未知是否诚实。该假设一定成立,因为在此网络中只有一个faulty节点,这意味着一定有一个处理器节点是诚实的。假设有一个有效的公式算法,能够达成十字军一致,那么这个协议应该在任何情况下都能满足十字军一致。
proofthereom1
现在,T和Y中间一定有一个是恶意的。对X来说,它所能看到的只有自己收到的消息[a:T,b:Y][a:T,b:Y],如果这个恶意节点干坏事了,那么a≠ba≠b。
现在有两种情况:T是faulty或者Y是faulty。X清楚地知道某一个消息的传递路径,但是X无法通过路径来分辨究竟是T在发送消息的时候就作弊了,即a≠m′a≠m′ && b=m′b=m′还是Y中途修改了T原本的消息,即a=m′a=m′ && b≠m′b≠m′。因此X只能去猜谁是faulty。
从共识设计的角度而非实际情况的角度考虑:

  • 如果X无条件选择T的值。因为如果T是可靠的,X必须接受T的值。
    • 如果T确实是可靠的,则Y不可靠。那么所有诚实的节点在transmitter诚实的时候都一致到transmitter的值√
    • 如果T不可靠,则Y可靠。那么X最终选择了aa。而可靠的Y运行同样的共识算法,无条件选择T的值,此时Y选择了bb,这违反了十字军一致的第二条。
    • 这样的策略不可行。
  • 如果X无条件选择Y的值。
    • 如果Y确实可靠,则T不可靠。那么X发送给Y的aa将会被Y选择,Y发送给X的bb将会被X选择。这样,可靠的两个processor仍然选择了不同的值。这违反了十字军一致的第二条。
    • 如果Y不可靠,则T可靠。此时X选择了错误的bb而非T发送的aa,违反了十字军一致的第一条。
    • 这样的策略更不可行。
  • 随机选择aa或bb。
    • 不用脑子就知道这个肯定不行。

归根究底,还是因为恶意节点给出的干扰信息超过了一定比例,导致诚实的节点无法根据网络中传递的信息来判断究竟哪个信息才是正确的信息。

现在使用Lemma1来证明Theorem1。
Theorem 1 proof:假设一个网络GG中包含有t个恶意节点,且t≥n/3t≥n/3。
我们证明了,如果存在一个有效的共识算法A使得网络GG中能够达成十字军共识,那么也就意味着一定存在一个算法B可以在Lemma1所述网络中达成十字军共识。因为Lemma1说明了算法B不可能存在,因此算法A不可能存在。
现在我们把GG中的节点分为三部分,每一部分⌈n/3⌉⌈n/3⌉。如果不为整,则可能会存在某个set少一两个。每一个set模拟lemma1中提到的T、X、Y。也就是说,由于t≥n/3t≥n/3,每一个lemma1中的processor模拟不到t个GG中的processor。
//剩下的证明有点奇怪...
如果模拟X的processors选择了X选择的内容,那么就等同于需要在Lemma1所述的情况下达成共识。这是不可能的。

Theorem 2:如果网络中的恶意节点不少于该网络连通性(network connectivity)的一半,则十字军共识不可能达成。
Theorem 2 Proof:假设某一个网络GG连通性为k,且t≥k/2t≥k/2。所有k个节点将网络分为三个部分,G1G1、G2G2、bottleneckbottleneck,其中bottleneckbottleneck是这k个瓶颈节点,在bottleneckbottleneck中有至少k/2k/2个恶意节点。如下图所示:
theorem2proof
其中,G1G1与G2G2以及bottleneckbottleneck分别连通,而G1G1与G2G2之间只能通过bottleneckbottleneck连通,连通道路并不只有一条。这是可能的,因为假设GG是一个k-顶点连通图。
如果在G1G1中存在一个诚实的transmitter,它发送了值aa,G1G1中大部分可能选择aa,但是反观G2G2,它们至少会接收到k/2k/2个b≠ab≠a以及至多k/2k/2个aa,他们无法辨别出究竟哪个才是transmitter发出的那个值,不可能确定地选择transmitter给出的值。这违反了十字军一致的第一条。

注:ceil:⌈e⌉⌈e⌉,取不小于表达式e的最小整数。如e=0.25,则取1。

净化算法(The Purifying Algorithm)

净化算法原文
输入:(t,a1,a2,...,ar,x)(t,a1,a2,...,ar,x),其中tt时faulty的数目,a1,...,ara1,...,ar是某一个正确节点收到的所有消息,xx是这个节点。
算法过程

如果 UxUx存在,则净化后的值pv=valuepv=value,valuevalue即为不经过UxUx的消息确定的值。由UxUx的定义,这个值是唯一的。
如果UxUx不存在,则净化后的值不存在,pv=∅pv=∅。

Theorem 3:假设GG是一个(2t+1)-顶点连通图网络,至多有t个恶意节点,如果一个诚实的transmitter将自己选择的值通过2t+1个不相交的路径传播出去,那么每一个诚实的processor节点都能收到transmitter的值。
Theorem 3 Proof:如果诚实的消息通过了2t+1个不相交的路径,也就是说t个恶意节点每个至多只能经过一条传输路径,这其中最坏的情况是,每一条传输路径中都只包含一个恶意节点,这样,有t条传输路径被恶意节点扰乱,可能产生错误的信息。但是仍然有t+1路径是诚实的,包含了transmitter原有的值。因此receiver可以辨别出哪个是诚实的transmitter发送的值,并同意这个值。
另外,由于每一个被恶意节点扰乱的路径都至少包含一个恶意节点的信息,因此可以通过UxUx找出所有未被恶意节点扰乱过的信息。

Remarks 1:如果transmitter是恶意的,那么仅凭净化算法不能使所有诚实的processor达成共识的。

恶意的transmitter

定义:如果一个processor无法找到可能可疑的t个processors集合UxUx,那么这个processor知道explicit knows),transmitter是恶意的。

Lemma 2:如果恶意的processor最多只有t个,只有transmitter确实是faulty的时候,一个processor才会知道transmitter是faulty的。
Lemma 2 Proof:根据定义,只有一个processor找不到UxUx的时候,他才会知道transmitter是faulty的。但是我们已经知道,如果transmitter是诚实的,那么根据净化算法一定能够找出UxUx。

十字军算法 (CR Algorithm)

十字军算法原文
输入:\boldCR(G,z,V,t)\boldCR(G,z,V,t),其中GG是网络拓扑图,VV是所有网络节点,zz是transmitter,tt是网络中存在的恶意节点的上限。
算法过程

  1. transmitter z通过2t+12t+1条不相交的路径向每一个receiver发送自己的消息。(偏个题,这个communication开销挺大哈?)
  2. 每一个receiver u∈Vu∈V运行净化算法,得到自己接受的那个值auau
  3. u把自己拿到的值通过2t+12t+1个不相交路径发送给V∖{u}V∖{u}
  4. 假设MuMu是u在步骤2、3中收到的所有的消息值,∅∅代表在步骤3中miss掉的消息值。每一个receiver都能根据MuMu在V∖{z}V∖{z}中找到UxUx,以及那个自己接受的值。如果找不到这样的UxUx,那么transmitter是恶意的,大家都选择value:faultytransmitterfaultytransmitter。

Theorem 4:算法CRCR可以在一个恶意节点t≤n/3t≤n/3,且连通性c≥2t+1c≥2t+1的网络中达成十字军共识。
Theorem 4 Proof:假设两个诚实的processor xx和yy分别找到了可疑的processor集合UxUx以及UyUy,假设实际上TT是恶意节点的集合,则:|T|,|Ux|,|Uy|≤t|T|,|Ux|,|Uy|≤t,则一定存在一个节点不在所有的这三个集合中,假设该节点为ww。
由于ww不在TT中,那么ww实际上是一个诚实的节点。而且由于连通性至少为2t+12t+1,一定存在一条路不经过UxUx和TT,从ww到达xx。存在一条路不经过UyUy和TT,从ww到达yy。
这样xx接收到的a(w)=awa(w)=aw并且选择这个值,同样的,yy接收到的a(w)=awa(w)=aw并且选择这个值。因此xx与yy接受同一个值。(?为啥都会选择这个值?因为不在UxUx和UyUy中吗?
如果transmitter是可靠的,那么每一个可靠的processor都能接收到这个诚实的值,而不会得出结论“transmitter faulty”(根据Lemma 2),当然,他们同意接收器的值,因为z就是上述的w。

拜占庭算法(BG Algorithm)

拜占庭算法原文
输入:BGG,v,U,t,mBGG,v,U,t,m,其中GG是整个网络的拓扑图,UU是节点们的子集,vv是transmitter,tt是faulty的数量,mm是一个整型参数。
算法过程

  1. vv向UU中的所有节点发送消息,通过2t+12t+1条disjoint path
  2. 每个节点都运行净化算法,净化收到的消息,假设净化后的值为auau,其中uu为这个节点
  3. 如果m>0m>0,则继续运行下面的:
    (a. uu作为transmitter,运行BG(G,u,U∖u,t,m−1)BG(G,u,U∖u,t,m−1),发出的消息是auau
    (b. 对任意UU中不包括uu的节点ww,使用aw(u)aw(u)表示他收到的上一步中uu发出的消息的值,ww将使用它们确定zz的值,zz是下一集合中大多数的值:z=majority(aw(u)|x∈U)z=majority(aw(u)|x∈U)

Lemma 3:GG为一个网络,UU是一个包含基数至少为2r+m2r+m、恶意节点至多rr个的GG的子集,假设vv是不在UU中的一个processor,那么算法\boldBG(G,v,U,t,m)\boldBG(G,v,U,t,m)关于UU满足拜占庭一致的第二条要求:transmitter reliable时。
Lemma 3 Proof:在transmitter诚实的情况下,对m进行归纳。

  • m=0m=0时:根据定理3。一共至少1+2r+m=2r+11+2r+m=2r+1个节点,其中最多rr个恶意节点。当transmitter reliable的时候,通过2r+12r+1个不相交路径发送自己的值,诚实节点一定能一致到transmitter的值。
  • 假如m−1≥0m−1≥0的时候成立。根据定理3,诚实的transmitter把自己的值经过2r+12r+1个不相交路径发送给所有UU中的节点,则每一个UU中的节点都能确认拿到这个正确的值。每一个receiver u都执行算法BG(G,u,U∖{u},t,m−1)BG(G,u,U∖{u},t,m−1),由于UU包含至少2r+m2r+m个节点,那么U∖{u}U∖{u}包含2r+m−12r+m−1个节点。通过归纳,每一个UU中的诚实的节点都能确认收到同为UU中诚实节点发出的诚实的值,假设为aa。大多数receiver接收到2r+m2r+m个值,其中有一个值是本receiver自己发出的值。由于m>0m>0,且至多rr个恶意节点,则拿到的正确值aa一定占大多数。
    //诚实节点变多,为啥会不成立呢?

Theorem 5:GG为一个网络,UU是一个包含基数至少为3m3m的GG的子集,假设vv是不在UU中的一个processor,如果U∖{v}U∖{v}包含至多mm个faulty processors,那么算法\boldBG(G,v,U,t,m)\boldBG(G,v,U,t,m)关于UU满足拜占庭一致的两个条件。
Theorem 5 Proof:对m进行归纳。

  • m=0m=0时:此时没有恶意节点在U∖{v}U∖{v}(接收者集合)中,根据定理3。
  • 假如m−1≥0m−1≥0的时候成立。
    • 如果vv诚实,那么根据Lemma 3。
    • 如果vv不诚实,那么U∖{u}U∖{u}(其中uu是一个接收者)中包含至少3m−13m−1个processor,其中至多m−1m−1个恶意节点(?),少于1/31/3的总节点个数。如果uu诚实,那么所有的U∖{u}U∖{u}会一致到同一个值(3a,根据Lemma 3),如果uu不诚实,他们会一致到某一个值,于是,每一个可靠的processor在3b在同一个set上计算大多数值,最终得到同样的值。

Theorem 5 Proof原文
Theorem 5 Proof 原文

Corollary 1(推论):如果一个有n个节点的网络GG中恶意节点t<n/3t<n/3且连通性c≥2t+1c≥2t+1,那么算法BGBG满足拜占庭共识的要求。

参考文献

references

 

非对称加密技术

在上述拜占庭协定中,如果10个将军中的几个同时发起消息,势必会造成系统的混乱,造成各说各的攻击时间方案,行动难以一致。谁都可以发起进攻的信息,但由谁来发出呢?其实这只要加入一个成本就可以了,即:一段时间内只有一个节点可以传播信息。当某个节点发出统一进攻的消息后,各个节点收到发起者的消息必须签名盖章,确认各自的身份。 在如今看来,非对称加密技术完全可以解决这个签名问题。非对称加密算法的加密和解密使用不同的两个密钥,这两个密钥就是我们经常听到的“公钥”和“私钥”。公钥和私钥一般成对出现,如果消息使用公钥加密,那么需要该公钥对应的私钥才能解密;同样,如果消息使用私钥加密,那么需要该私钥对应的公钥才能解密。

容错问题

我们假设在此网络中,消息可能会丢失、损坏、延迟、重复发送,并且接受的顺序与发送的顺序不一致。此外,节点的行为可以是任意的:可以随时加入、退出网络,可以丢弃消息、伪造消息、停止工作等,还可能发生各种人为或非人为的故障。我们的算法对由共识节点组成的共识系统,提供的容错能力,这种容错能力同时包含安全性和可用性,并适用于任何网络环境。

 

Paxos 算法(一致性算法)

Paxos算法解决的问题是一个分布式系统如何就某个值(决议)达成一致。一个典型的场景是,在一个分布式数据库系统中,如果各节点的初始状态一致,每个节点都执行相同的操作序列,那么他们最后能得到一个一致的状态。为保证每个节点执行相同的命令序列,需要在每一条指令上执行一个“一致性算法”以保证每个节点看到的指令一致。一个通用的一致性算法可以应用在许多场景中,是分布式计算中的重要问题。 节点通信存在两种模型:共享内存和消息传递。Paxos算法就是一种基于消息传递模型的一致性算法。

共识机制

区块链共识算法主要是工作量证明和权益证明。拿比特币来说,其实从技术角度来看可以把PoW看做重复使用的Hashcash,生成工作量证明在概率上来说是一个随机的过程。开采新的机密货币,生成区块时,必须得到所有参与者的同意,那矿工必须得到区块中所有数据的PoW工作证明。与此同时矿工还要时时观察调整这项工作的难度,因为对网络要求是平均每10分钟生成一个区块。

分布式存储

分布式存储是一种数据存储技术,通过网络使用每台机器上的磁盘空间,并将这些分散的存储资源构成一个虚拟的存储设备,数据分散的存储在网络中的各个角落。所以,分布式存储技术并不是每台电脑都存放完整的数据,而是把数据切割后存放在不同的电脑里。就像存放100个鸡蛋,不是放在同一个篮子里,而是分开放在不同的地方,加起来的总和是100个。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

区块链技术六大算法 的相关文章

  • BTC txid与vote的关系

    当我通过BTC的listtransactions接口获取查询最近发生的钱包交易时 需要将用户的充值记录写到数据库时 发现了一些令人巨大的误解 例如 txid字段并不是唯一的 所以写到数据库时 会有交易哈希重复的可能性 有可能你的两个用户在币
  • 以太坊交易信息及event、input、logs、topics等概念机制

    文章目录 一 交易信息获取 1 1 合约事件例子定义 1 2 以太坊交易获取 二 input解析 2 1 input内容解析 2 2 input处理逻辑 三 logs解析 3 1 logs解析代码 四 topics 4 1 概念 4 2 i
  • 共识算法1--工作量证明机制简介及算法实现

    共识算法1 工作量证明机制简介及算法实现 所谓 共识机制 是通过特殊节点的投票 在很短的时间内完成对交易的验证和确认 对一笔交易 如果利益不相干的若干个节点能够达成共识 我们就可以认为全网对此也能够达成共识 1 当前 已有多种常见的共识机制
  • 世界经济论坛区块链报告阅读笔记

    文章目录 世界经济论坛区块链报告阅读笔记 DLT应用落地需要什么 报告案例 Global Payments 报告案例 P C Claims Processing 世界经济论坛区块链报告阅读笔记 该报告主要谈及DLT distributed
  • ubuntu 搭建hyperledger-fabric开发环境

    GO环境 建议方式2 版本较新 方式 sudo apt get install golang 方式 wget https storage googleapis com golang go1 9 linux amd64 tar gz sudo
  • 区块链基本概念学习笔记

    文章目录 区块链产生与发展历史 区块链的场景属性 区块链定义 区块链的特点 区块链加密货币的特点 区块链核心技术 区块链的核心概念 区块链分类 区块链架构特点 区块链产生与发展历史 区块链的场景属性 区块链定义 区块链是一种点对点传输协议
  • Omni Core v0.11.0 rpc-api

    JSON RPC API Omni Core 是 Bitcoin Core 的一个分支 在上面添加了 Omni 协议功能支持作为一个新的功能层 因此 与 API 的交互以与比特币核心相同的方式 JSON RPC 完成 只需使用额外的 RPC
  • 这篇文章,让你了解ERC-1155 多代币标准协议

    文章目录 ERC1155 介绍 多代币标准 前提条件 代币标准 ERC 20 ERC 721 构建 ERC1155 代币合约 ERC 1155 的功能和特点 批量传输 批量余额 批量审批 接收钩子 支持非同质化代币 安全转账规则 ERC11
  • rippled节点配置文件详解

    文章目录 一 简介 二 配置文件示例 三 配置项说明 server port rpc admin local port peer port ws admin local node size node db ledger history da
  • Hyperledger Fabric笔记2--运行fabric测试网络

    Hyperledger Fabric笔记2 运行fabric测试网络 1 获取fabric相关源代码 首先 需要在 opt gopath中新建目录 mkdir p opt gopath src github com hyperledger
  • 【译】A gentle introduction to self-sovereign identity

    2017年5月17日 ANTONYLEWIS2015 2017年5月 印度互联网和社会智库中心发布了一份报告 详细说明了印度国家身份数据库 Aadhaar 泄漏可能会泄露个人信息的方式 该信息涉及超过1 3亿印度国民 泄密事件为财务欺诈创造
  • 以太坊公链节点连接节点超时问题排查

    2020年4月1日晚上8点 zabbix报警 以太坊公链三分钟内没有检测到区块数据同步 立即登录到服务器 查看以太坊公链节点数据同步情况 docker logs f public eth tail 10 INFO 04 01 20 17 3
  • 在同一 Composer Rest 服务器配置中使用两张名片

    我完成了部署到多组织结构网络的教程 并且成功运行 现在我有两张管理卡 alice trade network bob trade network 以及他们发行的两张身份证 卡 jdoe trade network dlowe trade n
  • IBM BLUEMIX BLOCKCHAIN SDK-DEMO 失败

    我一直在使用 Node js 的 HFC SDK 它曾经可以工作 但从昨晚开始我遇到了一些问题 当运行 hello Blockchain is 时 只有几次有效 大多数时候 当它尝试注册新用户时 我会收到此错误 E0113 11 56 05
  • 在 Hyperledger Fabric V1.0 的本地开发环境中使用 REST API 支持

    我已经设置了一个HyperLedger Fabric V1 0网络 with 4个组织 每个都有 1 个对等点按照以下步骤操作建立您的第一个网络 我现在有 org1 example com with peer peer0 org1 exam
  • Fabric 网络 - 当宕机的对等点连接回网络时会发生什么?

    我最近使用 Docker compose 部署了结构网络 我试图模拟一个宕机的对等点 本质上是这样的 使用运行结构网络的 docker compose 将 4 个对等点联机 1 个对等点 即第 4 个对等点出现故障 通过 docker st
  • Solidity:ParserError:预期的编译指示、导入指令或合约/接口/库定义

    当我编写简单合约时 我也遇到了最新的 solc 0 5 2 版本 和 0 4 25 的错误 我尝试过以下步骤 已卸载的 Solc npm uninstall solc 安装的目标版本 npm install save 电子邮件受保护 cdn
  • Hyperledger Composer:尚未为此连接指定业务网络

    我已经在本地安装了 hyperledger 作曲家 但在本地主机上它给出错误 错误 尝试 ping 时出错 错误 没有业务网络 为此连接指定 我也无法添加模型和脚本文件 这是终端中显示的错误 error Hyperledger Compos
  • 区块链是分布式数据库吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 大多数文章都将区块链视为分布式数据库 这是否意味着我们可以在区块链中存储任何类型的数据 例如音频 视频 pdf 将区块链视为相对较慢
  • 构建链代码时 ltdl.h 未找到错误

    我正在尝试使用构建链码go build 当我运行 Go build 命令时它的报告 hyperledger fabric vendor github com miekg pkcs11 pkcs11 g o 29 18 fatal error

随机推荐

  • 面试题:什么是跨域?出现的原因?如何解决跨域问题?

    跨域 浏览器不能执行其他网页的脚步 由浏览器的同源策略造成的 是浏览器对javascript实施的安全限制 无法跨域是浏览器对用户安全的考虑 如果自己写个没有同源策略的浏览器 完全不用考虑跨域问题 同源策略限制 Cookie localSt
  • 文件操作与IO

    目录 一 什么是文件 二 文件的分类 三 Java中的文件操作 四 文件操作案例 一 什么是文件 平时我们锁说到的文件一般指的都是存储在硬盘上的普通文件 形如txt png jpg 等等这些都是普通文件 都存储在硬盘上 而在计算机中 文件可
  • Apifox 生成接口文档 教程与操作步骤

    接口文档自动生成 本文主要介绍使用 apifox 如何生成接口文档 附上详细的使用教程和操作步骤 使用Apifox 的可以自动生成接口文档 本文会给大家介绍下如何使用Apifox 来自动生成所需的接口文档 Apifox 是一款接口设计 调试
  • C# 在VS里开发Android应用 Xamarin(一)(刚开始接触的菜鸡,有没说好的地方请指出,学习中!!)

    去年寒假把之前做的大大小小所有C 程序项目都重新看了一遍 发现都是些管理系统啥的 想想也没啥桌面程序可做了 有好点子的可以跟我说说 就想去找找还有啥可做的 于是就百度了一番 发现可以写Android的应用 欣喜若狂 赶紧看看若何进行下一步
  • Python3,一篇搞定Numpy与Pandas的差异点及应用场景,妥妥的学到了。

    Numpy 与Pandas的差异比较 1 引言 2 Numpy与Pandas比较 2 1 相同点 2 2 差异点 2 3 应用场景 2 3 1 Numpy应用场景 2 3 2 Pandas 应用场景 2 4 代码示例 2 4 1 Numpy
  • easyexcel导出100w条数据,使用分页查询批量导入

    昨天公司的数据那边的人导出操作日志 一次性导出30w 让服务直接挂掉了 所有有了这篇文章 正常从数据库导出少量数据到execl 直接将符合条件的数据全部查询放到一个List中然后写到execl里即可 但是数据量过大时会导致内存兜不住的情况
  • TPR、FPR、TNR、FNR的理解

    转自 https blog csdn net zhq9695 article details 82909967 TPR True Positive Rate 可以理解为所有正类中 有多少被预测成正类 正类预测正确 即召回率 给出定义如下 F
  • Java 巧妙将音频amr格式转换成MP3(linux 以及windows)

    作为一名技术宅男 没事就上掘金来淘宝 在这学习了很多东西 也一直想开个博客 写写自己的东西 一方面就当是笔记 另一方面也可以作为他人学习的前进的一种参考 本着这样的想法今天来开启我的第一篇博客之路 俗话说前人栽树后人乘凉 我们受益于前人 亦
  • 关于构造广义线性回归模型的glmfit函数

    MATLAB中有glmfit 函数用于构建一个广义的线性回归模型 glmfit 函数属于统计工具箱 如何去使用glmfit 参考help hlmfit中的discription b glmfit X y distr b glmfit X y
  • 【Linux】Nacos 2.1 单机安装

    目录 Nacos 2 1 单机安装 1 从GitHub下载2 1 0的压缩包 2 解压与配置 3 数据库配置 4 单机启动nacos 遇到的一些错误 ErrMsg jmenv tbsite net libstdc so 6 cannot o
  • 文件IO(一.系统IO)

    1 系统IO 1 用户操作寄存器或者操作系统来让计算机反馈不同的现象 在大学期间大家都学过51单片机 我们要利用51单片机去点LED灯 直接去操控单片机内部的寄存器 硬件 这种直接操控单片机的 硬件的方式称之为 裸奔 就是说用户与芯片 硬件
  • golang练手项目监控系统资源项目(二)

    介绍项目 仿写监控系统资源项目 主要功能 监控服务资源可视化 开发环境 windows idea influxdb granfa 主要技术 时序性数据库influxdb 和可视化平台granfa 项目描述 实时监控本机资源 展示成可视化页面
  • 在shell脚本里面调用conda创建的环境

    事情源于 我在写脚本的时候 在脚本里面插入了一句 conda activate 环境名 然后出现如下的报错提示 CommandNotFoundError Your shell has not been properly configured
  • IDEA 2020导入Eclipse项目并运行实战篇

    在刚开始做Java项目的时候 很多人用的IDE都是Eclipse 这就导致了一个问题 那就是后面学习IDEA后 想用IDEA打开以前做的项目时 一时无法下手 现在 我们通过实战来学习如何在IDEA 2020 中导入Eclipse项目并运行
  • 机智的Open3D学习生活(第二集):从pcb文件中读取并可视化展示点云数据

    只作为一个从项目需求衍生的例子进行演示 代码么 从其他处获取并简单修改 import numpy as np import open3d as o3d from pathlib import Path from traceback impo
  • 编程能力训练、常见编程面试题

    编程能力训练 常见编程面试题 案例一 买飞机票 案例二 找素数 案例三 开发验证码 案例四 数组元素的复制 案例五 评委打分 案例六 数字加密 案例七 模拟双色球 练习一 飞机票 需求 机票价格按照淡季旺季 头等舱和经济舱收费 输入机票原价
  • FISCO BCOS 搭建区块链,在SpringBoot中调用合约

    一 搭建区块链 使用的是FISCO BCOS 和 WeBASE Front来搭建区块链 详细教程 https blog csdn net yueyue763184 article details 128924144 spm 1001 201
  • SSRF中利用到的协议

    一dict协议 定义 词典网络协议 在RFC 2009中进行描述 他的目标是超越Webster protocol 并允许客户端在使用过程中访问更多字典 Dict服务器和客户机使用TCP端口2628 dict协议在ssrf中的利用 dict协
  • 10000+ppt免费下载领取(python爬取全站ppt)

    1 缘由 前几天参加一个活动 需要制作ppt 制作完之后ppt模板死活不能让人满意 然后就去网上找模板 有些比较适合ppt模板还是收费的 这 有点恶心 哈哈哈 今天教大家如何使用python爬虫爬取1万份 ppt模板 以后制作ppt再也不怕
  • 区块链技术六大算法

    拜占庭协定 拜占庭的故事大概是这么说的 拜占庭帝国拥有巨大的财富 周围10个邻邦垂诞已久 但拜占庭高墙耸立 固若金汤 没有一个单独的邻邦能够成功入侵 任何单个邻邦入侵的都会失败 同时也有可能自身被其他9个邻邦入侵 拜占庭帝国防御能力如此之强