DLC原理解析及其优化思考

1. 引言

Discreet Log Contract (DLC) 是由麻省理工学院的Tadge Dryja在2018年提出的一套基于预言机的合约执行方案。DLC 允许两方根据预定义的条件进行有条件付款。各方确定可能的结果并进行预签名,并在预言机签署结果时使用这些预签名来执行支付。 因此,DLC可实现新的去中心化金融应用,同时保证比特币存款的安全。
与闪电网络相比,DLC具有以下显著优势:

  • 隐私性:DLC在隐私保护方面优于闪电网络,合约细节仅在参与方之间分享,而不会在区块链上存储。相比之下,闪电网络交易通过公开的通道和节点路由,其信息公开且透明;
  • 财务合约的复杂性和灵活性:DLC能够直接在比特币网络上创建和执行复杂的金融合约,如衍生品、保险和赌约等,而闪电网络主要用于快速的小额支付,无法支持复杂应用;
  • 降低对手方风险:DLC资金被锁定在多签合约中,只有在预定义事件的结果出现时才会释放,减少了任一方不遵守合约的风险。尽管闪电网络减少了信任需求,但在通道管理和流动性提供方面仍存在一定的对手方风险;
  • 无需管理支付通道:DLC操作无需创建或维护支付通道,而这是闪电网络的核心组成部分,通道管理既复杂又耗资源;
  • 特定用例的可扩展性:闪电网络在一定程度上提高了比特币的交易吞吐量,而DLC在比特币上的复杂合约方面提供了较好的可扩展性。

虽然DLC在比特币生态应用中极具优势,但是仍存在一些风险和问题,如:

  • 密钥风险:预言机的私钥和承诺的随机数具有泄露或丢失风险,导致用户资产损失;
  • 中心化信任风险:预言机中心化问题,容易导致拒绝服务攻击;
  • 去中心化无法密钥派生:如果预言机去中心化,则预言机节点仅拥有私钥分片。但是,去中心化的预言机节点无法基于私钥分片直接使用BIP32进行密钥派生;
  • 串谋风险:如果预言机节点之间串谋、或与参与方串谋,则仍没解决预言机的信任问题。需要一个可靠的监督机制,使得预言机信任最小化;
  • 固定面额找零问题:条件签名需要在构建合约之前有确定性的可枚举事件集合来构建交易。因此,DLC用于资产重新分配会有最小金额的限制,导致存在固定面额的找零问题。
    为此,本文提出一些方案和优化思路,解决DLC的风险和问题,提高比特币生态系统的安全性。

2. DLC原理

Alice和Bob签署一个对赌协议:投注第n+k个区块的哈希值是奇数或偶数。如果是奇数,则Alice赢得游戏,可在t时间内提取资产;如果是偶数,则Bob赢得游戏,可在t时间内提取资产。使用DLC,通过预言机传递第n+k的区块信息来构造条件签名使得正确的获胜方赢得所有资产。

  • 1)初始化:椭圆曲线生成元为 G G G,阶为 q q q
  • 2)密钥生成:预言机、Alice和Bob独立生成各自的私钥和公钥。
    • 预言机的私钥为 z z z,公钥为 Z Z Z,满足关系 Z = z ⋅ G Z=z\cdot G Z=zG
    • Alice的私钥为 x x x,公钥为 X X X,满足关系 X = x ⋅ G X=x\cdot G X=xG
    • Bob的私钥为 y y y,公钥为 Y Y Y,满足关系 Y = y ⋅ G Y=y\cdot G Y=yG
  • 3)注资交易: Alice和Bob一起创建一笔注资交易,各自将1BTC锁在一个2-of-2的多签输出(一个公钥 X X X属于Alice,一个公钥 Y Y Y属于Bob)。
  • 4)合约执行交易:Alice和Bob创建两笔合约执行交易(Contract Execution Transaction, CET),用于花费注资交易。
    预言机计算承诺
    R : = k ⋅ G R:=k\cdot G R:=kG
    然后,计算 S S S S ′ S' S
    S : = R − h a s h ( O d d N u m b e r , R ) ⋅ Z , S ′ : = R − h a s h ( E v e n N u m b e r , R ) ⋅ Z S:=R-hash(OddNumber,R)\cdot Z,\\ S':=R-hash(EvenNumber,R)\cdot Z S:=Rhash(OddNumber,R)Z,S:=Rhash(EvenNumber,R)Z
    广播 ( R , S , S ′ ) (R,S,S') (R,S,S)
    Alice和Bob各自计算对应的新公钥
    P K A l i c e : = X + S , P K B o b : = Y + S ′ . PK^{Alice}:=X+ S,\\ PK^{Bob}:=Y+ S'. PKAlice:=X+S,PKBob:=Y+S.
  • 5)结算:当第n+k个区块出现后,预言机根据该区块的哈希值,生成对应的 s s s s ′ s' s
    • 如果第n+k个区块的哈希值为奇数,则预言机计算并广播 s s s
      s : = k − h a s h ( O d d N u m b e r , R ) ⋅ z s:=k-hash(OddNumber,R)\cdot z s:=khash(OddNumber,R)z
    • 如果第n+k个区块的哈希值为偶数,则预言机计算并广播 s ′ s' s
      s ′ : = k − h a s h ( E v e n N u m b e r , R ) ⋅ z s':=k-hash(EvenNumber,R)\cdot z s:=khash(EvenNumber,R)z
  • 6)提币:Alice或Bob其中一个参与方能根据预言机广播的 s s s s ′ s' s,提取资产。
    • 如果预言机广播 s s s,则Alice可以计算出新私钥 s k A l i c e sk^{Alice} skAlice,并提取锁定的2个BTC
      s k A l i c e : = x + s . sk^{Alice}:= x + s. skAlice:=x+s.
    • 如果预言机广播 s ′ s' s,则Bob可以计算出新私钥 s k B o b sk^{Bob} skBob,并提取锁定的2个BTC
      s k B o b : = y + s ′ . sk^{Bob}:= y + s'. skBob:=y+s.

分析:

  • Alice计算的新私钥 s k A l i c e sk^{Alice} skAlice与新公钥 P K A l i c e PK^{Alice} PKAlice满足离散对数关系
    s k A l i c e ⋅ G = ( x + s ) ⋅ G = X + S = P K A l i c e sk^{Alice}\cdot G= (x+s)\cdot G=X+S=PK^{Alice} skAliceG=(x+s)G=X+S=PKAlice
    该情况下,Alice提币会成功。
  • 同理,Bob计算的新私钥 s k B o b sk^{Bob} skBob与新公钥 P K B o b PK^{Bob} PKBob满足离散对数关系
    s k B o b ⋅ G = ( y + s ′ ) ⋅ G = Y + S ′ = P K B o b sk^{Bob}\cdot G= (y+s')\cdot G=Y+S'=PK^{Bob} skBobG=(y+s)G=Y+S=PKBob
    该情况下,Bob提币会成功。

此外,如果预言机广播 s s s,对Alice有用,但是对Bob没用。因为,Bob无法用于计算出对应的新私钥 s k B o b sk^{Bob} skBob。同理,如果预言机广播 s ′ s' s,对Bob有用,但是对Alice没用。因为,Alice无法用于计算出对应的新私钥 s k A l i c e sk^{Alice} skAlice
最后,上述描述省略了时间锁。需要添加时间锁,使得一方计算出新私钥,在t时间内提币。否则,如果超出t时间,则另一方使用原私钥就能提走资产。

3. DLC优化

3.1 密钥管理

在DLC协议中,预言机的私钥和承诺的随机数至关重要。如果预言机的私钥和承诺的随机数泄露或丢失,则容易导致以下4种安全问题:

  • (1)预言机丢失私钥 z z z
    如果预言机丢失私钥,则DLC 无法结算,导致需要执行 DLC 退款合约。因此,DLC协议中设置了退款交易,以防止预言机丢失私钥。
  • (2)预言机泄露私钥 z z z
    如果预言机的私钥泄露,则所有基于该私钥的 DLC 都面临欺诈结算风险。窃取私钥的攻击者可以签署想要的任何消息,实现对未来所有合约结果的完全控制。此外,攻击者不仅限于发布单个签名消息,还可以发布冲突的消息,如同时签署第n+k个区块的哈希值为奇数和偶数。
  • (3)预言机泄露或重用随机数 k k k
    如果预言机泄露随机数 k k k,则在结算阶段,不管预言机广播 s s s s ′ s' s,攻击者均可如下计算出预言机的私钥 z z z
    z : = ( k − s ) / h a s h ( O d d N u m b e r , R ) z:=(k-s)/hash(OddNumber,R) z:=(ks)/hash(OddNumber,R)
    z : = ( k − s ′ ) / h a s h ( E v e n N u m b e r , R ) z:=(k-s')/hash(EvenNumber,R) z:=(ks)/hash(EvenNumber,R)
    如果预言机重用随机数 k k k,则经过2次结算,攻击者可以根据预言机广播的签名,根据以下四种情况之一解方程组,求出预言机的私钥 z z z
    情况1:
    s 1 = k − h a s h ( O d d N u m b e r 1 , R ) ⋅ z s_1=k-hash(OddNumber_1,R)\cdot z s1=khash(OddNumber1,R)z
    s 2 = k − h a s h ( O d d N u m b e r 2 , R ) ⋅ z s_2=k-hash(OddNumber_2,R)\cdot z s2=khash(OddNumber2,R)z
    情况2:
    s 1 ′ = k − h a s h ( E v e n N u m b e r 1 , R ) ⋅ z s_1'=k-hash(EvenNumber_1,R)\cdot z s1=khash(EvenNumber1,R)z
    s 2 ′ = k − h a s h ( E v e n N u m b e r 2 , R ) ⋅ z s_2'=k-hash(EvenNumber_2,R)\cdot z s2=khash(EvenNumber2,R)z
    情况3:
    s 1 = k − h a s h ( O d d N u m b e r 1 , R ) ⋅ z s_1=k-hash(OddNumber_1,R)\cdot z s1=khash(OddNumber1,R)z
    s 2 ′ = k − h a s h ( E v e n N u m b e r 2 , R ) ⋅ z s_2'=k-hash(EvenNumber_2,R)\cdot z s2=khash(EvenNumber2,R)z
    情况4:
    s 1 ′ = k − h a s h ( E v e n N u m b e r 1 , R ) ⋅ z s_1'=k-hash(EvenNumber_1,R)\cdot z s1=khash(EvenNumber1,R)z
    s 2 = k − h a s h ( O d d N u m b e r 2 , R ) ⋅ z s_2=k-hash(OddNumber_2,R)\cdot z s2=khash(OddNumber2,R)z
  • (4)预言机丢失随机数 k k k
    如果预言机丢失随机数 k k k,则对应的DLC 无法结算,需要执行 DLC 退款合约。
    因此,为提高预言机私钥的安全性,应使用BIP32派生出子秘钥或孙密钥,用于签名。此外,为提高随机数的安全性,应使用私钥和计数器的哈希值 k : = h a s h ( z , c o u n t e r ) k:=hash(z,counter) k:=hash(z,counter),作为随机数 k k k,以防随机数重复或丢失。

3.2 去中心化预言机

DLC中,预言机的作用至关重要,提供了决定合约结果的关键外部数据。为提高这些合约的安全性,则需要去中心化预言机。与中心化预言机不同,去中心化预言机将提供准确和防篡改数据的责任分散到多个独立节点上,可以减少依赖单一故障点的风险,并降低操纵或针对性攻击的可能性。通过去中心化预言机,DLC可以实现更高程度的无需信任和可靠性,确保合约执行完全依赖于预定条件的客观性。
Schnorr门限签名可以实现去中心化预言机。Schnorr门限签名具有以下优势:

  • 1)增强安全性:通过分散密钥的管理,门限签名减少了单点故障的风险。即使部分参与方的密钥被泄露或受到攻击,只要不超过设定的阈值,整个系统仍然安全。
  • 2)分布式控制:门限签名实现了对密钥管理的分布式控制,无单一实体掌握全部签名权力,从而降低了权力过于集中带来的风险。
  • 3)提高可用性:只需达到一定数量的预言机节点同意即可完成签名,提高了系统的灵活性和可用性。即使部分节点不可用,也不会影响整体系统的可靠运行。
  • 4)灵活性与可扩展性:门限签名协议可以根据需要设置不同的阈值,适应各种不同的安全需求和场景。此外,它也适用于大规模网络,具有良好的可扩展性。
  • 5)可追责性:每个预言机节点基于私钥分片对消息生成签名分片,其他参与方均可使用对应的公钥分片验证该签名分片的正确性,实现追责。如果正确,则累加签名分片,生成完整签名。

因此,Schnorr门限签名协议在提高安全性、可靠性、灵活性、可扩展性和可追责性等的去中心化预言机中具有显著优势。

3.3 去中心化与密钥管理耦合

在密钥管理技术中,预言机拥有一个完整密钥 z z z,基于完整密钥 z z z和增量 ω \omega ω,使用BIP32,能够派出大量的子密钥 z + ω ( 1 ) z+{{\omega }^{(1)}} z+ω(1)和孙密钥 z + ω ( 1 ) + ω ( 2 ) z+{{\omega }^{(1)}}+{{\omega }^{(2)}} z+ω(1)+ω(2)。对于不同的事件,预言机能够使用不同的孙私钥 z + ω ( 1 ) + ω ( 2 ) z+{{\omega }^{(1)}}+{{\omega }^{(2)}} z+ω(1)+ω(2)对对应的事件 m s g msg msg生成对应的签名 σ \sigma σ
在去中心化预言机应用场景下,有 n n n个参与方,需要 t + 1 t+1 t+1个参与方进行门限签名。其中, t < n t<n t<n n n n个预言机节点各自拥有一个私钥分片 z i , i = 1 , . . . , n {{z}_{i}},i=1,...,n zi,i=1,...,n。这 n n n个私钥分片 z i {{z}_{i}} zi对应一个完整私钥 z z z,但是完整私钥 z z z从始至终不出现。在完整私钥 z z z不出现的前提下, t + 1 t+1 t+1个预言机节点使用私钥分片 z i , i = 1 , . . . , t + 1 {{z}_{i}},i=1,...,t+1 zi,i=1,...,t+1对消息 m s g ′ msg' msg生成签名分片 σ i ′ \sigma_i' σi,签名分片 σ i ′ \sigma_i' σi合并为完整的签名 σ ′ \sigma ' σ。验证方使用完整公钥 Z Z Z能够校验消息签名对 ( m s g ′ , σ ′ ) (msg',\sigma ') (msg,σ)的正确性。由于需要 t + 1 t+1 t+1个预言机节点联合生成门限签名,所以具有较高的安全性。
但是,在去中心化预言机应用场景下,完整私钥 z z z不出现,无法直接使用BIP32进行密钥派生。换言之,预言机去中心化技术与密钥管理技术无法直接耦合。
论文Distributed Key Derivation for Multi-Party Management of Blockchain Digital Assets提出门限签名场景下的分布式密钥派生方法。该论文的核心思想是根据拉格朗日插值多项式,私钥分片 z i z_i zi与完整私钥 z z z满足如下插值关系
z i = ∑ j = 1 n f j ( i ) = z + ∑ j = 1 n a 0 , j + a 1 , j i + . . . + a t , j i t z_i = \sum\limits_{j = 1}^n {{f_j}(i)} =z+\sum\limits_{j = 1}^n {a_{0,j}+a_{1,j}i+...+a_{t,j}i^t} zi=j=1nfj(i)=z+j=1na0,j+a1,ji+...+at,jit
上式两边均加上增量 ω \omega ω,则得到以下等式
z i + ω = z + ω + ∑ j = 1 n a 0 , j + a 1 , j i + . . . + a t , j i t z_i +\omega =z+\omega +\sum\limits_{j = 1}^n {a_{0,j}+a_{1,j}i+...+a_{t,j}i^t} zi+ω=z+ω+j=1na0,j+a1,ji+...+at,jit
该等式表明:私钥分片 z i z_i zi加上增量 ω \omega ω,与完整私钥 z z z加上增量 ω \omega ω仍满足插值关系。换言之,子私钥分片 z i + ω z_i+\omega zi+ω与子密钥 z + ω z+\omega z+ω满足插值关系。因此,各个参与方能够使用私钥分片 z i z_i zi加上增量 ω \omega ω派生出子私钥分片 z i + ω z_i+\omega zi+ω,用于生成子签名分片,且使用对应的子公钥 Z + ω ⋅ G Z+\omega\cdot G Z+ωG能够进行有效性验证。
但是,需要考虑增强型与非增强型BIP32。增强型BIP32以私钥、链码和路径为输入,计算SHA512,输出增量和子链码。而非增强型BIP32以公钥、链码和路径为输入,计算SHA512,输出增量和子链码。门限签名情况下,私钥不存在,所以只能使用非增强型BIP32。或使用同态哈希函数,则有增强型BIP32。但是,同态哈希函数与SHA512不同,与原BIP32不兼容。

3.4 OP-DLC:预言机信任最小化

DLC中,Alice和Bob之间的合约是根据预言机签名的结果来执行的,因此需在一定程度上信任预言机。所以,预言机的行为正确,是DLC运行的一大前提。
为预言机去信任化,已有研究根据n个预言机的结果执行DLC,减少对单个预言机的依赖。

  • "n-of-n"模型表示使用n个预言机签订合约,并根据n个预言机的结果执行合约。该模型要求n个预言机均在线签名。如果有预言机离线或对结果有分歧,则影响DLC合约执行。信任假设为n个预言机均为诚实的。
  • "k-of-n"模型表示使用n个预言机签订合约,根据其中k个预言机的结果执行合约。如果有超过k个预言机串谋,则影响合约的公正执行。此外,使用"k-of-n"模型时,需要准备的CET数量,是单个预言机或"n-of-n"模型的 C n k C_n^k Cnk倍。信任假设为n个预言机中至少有k个预言机是诚实的。

增加预言机数量,并没有实现对预言机的去信任化。因为当预言机作恶后,合约受损方没有链上申诉通道。

因此,本节提出OP-DLC,在DLC中引入乐观挑战机制。n个预言机在参与设置DLC之前,需提前质押构建permisssionless 链上OP游戏,承诺不作恶。如果有任何一个预言机作恶,则Alice或Bob或任何其它诚实预言机或其它第三方诚实观察者,均可发起挑战。如果挑战方赢得游戏,则链上惩罚作恶预言机,罚没其押金。此外,OP-DLC也可采用"k-of-n"模型来签名。其中,k值甚至可为1。因此,信任假设降为只要网络中有一个诚实的参与方就可发起OP挑战,惩罚作恶的预言机节点。
当根据Layer2计算结果,对OP-DLC结算时:

  • 如果预言机使用错误的结果签名,使得Alice利益受损,则Alice可使用Layer2正确计算结果,对预言机提前质押的permisssionless 链上OP游戏发起挑战。Alice赢得游戏,惩罚作恶预言机,弥补损失;
  • 同理,Bob、其它诚实预言机节点、第三方诚实观察者均可发起挑战。但是,为防止恶意挑战,挑战方也需要质押。

因此,OP-DLC使得预言机节点之间互相监督,使得预言机信任最小化。该机制仅需要一个诚实参与方,容错率99%,较好地解决了预言机串谋风险。

3.5 OP-DLC + BitVM双桥

当DLC用于跨链桥,DLC合约结算时需要进行资金分配:

  • 需要通过CET预先设置。这意味着DLC的资金结算粒度是有限的,如Bison网络以0.1 BTC为粒度。存在问题:用户在Layer2的资产交互不应受限于DLC CET的资金粒度。
  • 当Alice想要对其Layer2资产结算时,会强制将用户Bob的Layer2资产也结算到Layer1。存在问题:每个Layer2用户应可自由选择出入金,而不受其它用户出入金影响。
  • Alice和Bob协商花费。存在问题:要求二者愿意配合。

因此,为解决上述问题,本节提出OP-DLC + BitVM双桥。该方案使得用户即可通过BitVM的permissionless bridge进行入金和出金,也可以通过 OP-DLC 机制入金和出金,实现任意粒度找零,且提高资金流动性。
在OP-DLC中,预言机为BitVM联盟,Alice为普通用户,Bob为BitVM联盟。在设置OP-DLC时,所构建的CET中,给用户Alice的output可在Layer1上立即花费,给Bob的output中构建一个“Alice能参与挑战的DLC游戏”并设置timelock锁定期。当Alice想要出金时:

  • 如果BitVM联盟作为预言机,正确签名,则Alice可在Layer1取款。但是,Bob等待锁定期过后可在Layer1提款。
  • 如果BitVM联盟作为预言机,作弊,导致Alice利益受损。但是,Alice可对Bob的UTXO发起挑战。如果挑战成功,则可罚没Bob的金额。注意:其它BitVM联盟成员之一也可发起挑战,但Alice利益受损,最有动机发起挑战。
  • 如果BitVM联盟作为预言机,作弊,导致Bob利益受损。但是,BitVM联盟中的一个诚实成员可对“BitVM 游戏”发起挑战,惩罚作弊的预言机节点。

此外,当用户Alice想要从Layer2出金,但是OP-DLC合约内预设的CET没有匹配的金额,则Alice可选择以下方式:

  • 通过BitVM出金,由BitVM operator在Layer1垫付。BitVM bridge假设为BitVM联盟中有一个诚实参与方。
  • 通过OP-DLC中的某个CET出金,同时剩余的找零由BitVM operator在Layer1垫付。OP-DLC出金会关闭DLC通道,但DLC通道中剩余的资金会转向BitVM Layer1资金池,而不会强迫其他Layer2用户出金。OP-DLC bridge信任假设为通道内有一个诚实参与方。
  • Alice和Bob协商花费,无需预言机参与,要求Bob配合。

因此,OP-DLC + BitVM双桥具有以下优势:

  • 使用BitVM解决了DLC通道资金找零问题,降低CET的设置数量,且不受CET资金粒度影响;
  • 将OP-DLC bridge和BitVM bridge结合,为用户提供多种出金入金通道,任意粒度找零;
  • 将BitVM联盟设置为Bob和预言机,通过OP机制,使得预言机信任最小化;
  • 将DLC通道的出金余量引入到BitVM bridge资金池,提升资金利用率。

4. 结论

DLC出现在Segwit v1(Taproot)激活之前,且已实现DLC通道与闪电网络的集成,并将DLC扩展为可在同一DLC通道内更新执行连续合约。借助Taproot和BitVM等技术,将可在DLC内实现更复杂的链下合约验证结算,同时结合OP挑战机制,实现预言机信任最小化。

参考文献

[1] Bitlayer团队博客 Bitlayer Core Technology: DLC and Its Optimization Considerations

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/792746.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国产数据库Oracle兼容性测试(一)

一个国产数据库Oracle兼容性测试用例&#xff1a; -- TestPoint : function return record type create table emp(empno number,sal number); insert into emp values(1234,3000);CREATE or replace PACKAGE emp_mgmt ASTYPE EmpRecTyp IS RECORD (empno NUMBER, sal NUMBER)…

HarmonyOS应用开发ArkUI(TS)电商项目实战

项目介绍 本项目基于 HarmonyOS 的ArkUI框架TS扩展的声明式开发范式&#xff0c;关于语法和概念直接看官网官方文档地址&#xff1a;基于TS扩展的声明式开发范式&#xff0c; 工具版本&#xff1a; DevEco Studio 3.1 Canary1 SDK版本&#xff1a; 3.1.9.7&#xff08;API V…

春招3月面试题的总结--南京,山东,西安,东莞四家公司总结。

1.南京某公司 1.Java的几种基本数据类型&#xff1f;分别是多少字节&#xff1f; byte&#xff0c;8bit 1字节 char&#xff0c;16bit 2字节 short&#xff0c;16bit 2字节 int&#xff0c;32bit 4字节 float&#xff0c;32bit 4字节 long&#xff0c;64bit 8字节 doubl…

睿尔曼-具身智能双臂主从手项目方案

具身智能双臂主从手项目方案 一、公司介绍 成立于2018年&#xff0c;是一家专注于超轻量仿人机械臂研发、生产及销售的国家级高新技术企业。总部位于北京石景山区首特产业园&#xff0c;工厂坐落于江苏省常州科教城智能数字产业园&#xff0c;团队的核心成员毕业于北京航空航…

前端验证码

一、基础验证码 gVerify.js&#xff1a; !(function (window, document) {function GVerify(options) { //创建一个图形验证码对象&#xff0c;接收options对象为参数this.options { //默认options参数值id: "", //容器IdcanvasId: "verifyCanvas", //ca…

springboot实现七牛云的文件上传下载

一&#xff1a;依赖包 <dependency><groupId>com.qiniu</groupId><artifactId>qiniu-java-sdk</artifactId><qiniu-java-sdk.version>7.7.0</qiniu-java-sdk.version></dependency>二:具体实现 RestController RequestMapping…

c++11 标准模板(STL)本地化库 - 平面类别 - (std::ctype) 定义字符分类表(三)

本地化库 本地环境设施包含字符分类和字符串校对、数值、货币及日期/时间格式化和分析&#xff0c;以及消息取得的国际化支持。本地环境设置控制流 I/O 、正则表达式库和 C 标准库的其他组件的行为。 平面类别 定义字符分类表 std::ctype template< class CharT > clas…

【办公软件】开发常用网站

文章目录 一、开发社区二、开发学习三、视图工具四、开发工具五、前端web开发工具六、开发接口官网 备用产看。 https://www.webhub123.com https://www.webhub123.com/#/home/detail?projectHashid59183272&ownerUserid22053727 java全栈只是体系&#xff1a;https://www…

嵌入式软件面试---编程基础篇

嵌入式软件工程师面试中&#xff0c;编程基础部分通常涵盖以下几个核心主题&#xff1a; C/C基础知识 语法和语义&#xff1a;包括但不限于变量定义、数据类型、运算符、流程控制语句&#xff08;if-else、switch-case、for、while、do-while循环&#xff09;、函数定义及调用…

Java中常见的线程同步方式

在Java中&#xff0c;当多个线程同时访问共享资源时&#xff0c;为了防止数据不一致或损坏的问题&#xff0c;需要进行线程同步。Java提供了多种线程同步的方式&#xff0c;以下是一些常见的方法&#xff1a; 1. 使用synchronized关键字 synchronized关键字可以修饰方法或代码…

【nc工具信息传输】

nc&#xff0c;全名叫 netcat&#xff0c;它可以用来完成很多的网络功能&#xff0c;譬如端口扫描、建立TCP/UDP连接&#xff0c;数据传输、网络调试等等&#xff0c;因此&#xff0c;它也常被称为网络工具的 瑞士军刀 。 nc [-46DdhklnrStUuvzC] [-i interval] [-p source_po…

Linux系统Docker搭建Wiki.Js应用程序并结合cpolar实现公网访问内网知识库

文章目录 1. 安装Docker2. 获取Wiki.js镜像3. 本地服务器打开Wiki.js并添加知识库内容4. 实现公网访问Wiki.js5. 固定Wiki.js公网地址 不管是在企业中还是在自己的个人知识整理上&#xff0c;我们都需要通过某种方式来有条理的组织相应的知识架构&#xff0c;那么一个好的知识整…

zookeeper之基本命令

1、创建节点: create [-s] [-e] [-c] [-t ttl] path [data] [acl] -s: 创建一个顺序节点。顺序节点会在其路径名后加上一个递增的数字&#xff0c;这个数字反映了节点被创建的顺序。-e: 创建一个临时节点。临时节点在客户端会话结束时会自动被删除。-c: 创建一个容器节点。容器…

腾讯云4核8G12M服务器和标准型S5服务器配置价格表

2024年腾讯云4核8G服务器租用优惠价格&#xff1a;轻量应用服务器4核8G12M带宽646元15个月&#xff0c;CVM云服务器S5实例优惠价格1437.24元买一年送3个月&#xff0c;腾讯云4核8G服务器活动页面 txybk.com/go/txy 活动链接打开如下图&#xff1a; 腾讯云4核8G服务器优惠价格 轻…

数据结构和算法:十大排序

排序算法 排序算法用于对一组数据按照特定顺序进行排列。排序算法有着广泛的应用&#xff0c;因为有序数据通常能够被更高效地查找、分析和处理。 排序算法中的数据类型可以是整数、浮点数、字符或字符串等。排序的判断规则可根据需求设定&#xff0c;如数字大小、字符 ASCII…

关于时区一致性设置

服务器部署海外&#xff0c;这时候&#xff0c;需要考虑时区问题&#xff0c;很多程序地方不能写死&#xff0c;需要调整中间件或者服务器时区&#xff0c;代码使用localTime。 1、服务器 Linux CentOS7 # 设置时区 timedatectl set-timezone Europe/London# 列出伦敦 时区设置…

基于注意力整合的超声图像分割信息在乳腺肿瘤分类中的应用

基于注意力整合的超声图像分割信息在乳腺肿瘤分类中的应用 摘要引言方法 Segmentation information with attention integration for classification of breast tumor in ultrasound image 摘要 乳腺癌是世界范围内女性最常见的癌症之一。基于超声成像的计算机辅助诊断&#x…

【DevOps工具篇】使用Ansible部署Keycloak oauth2proxy 和 单点登录(SSO)设置

【DevOps工具篇】使用Ansible部署Keycloak oauth2proxy 和 单点登录(SSO)设置 目录 【DevOps工具篇】使用Ansible部署Keycloak oauth2proxy 和 单点登录(SSO)设置Ansible 基础知识部署 Keycloak创建 OIDC-客户端创建 oauth2proxy 部署顶级 Ansible PlaybookHost.iniplayboo…

prompt 工程案例

目录 prompt 工程是什么&#xff1f; 案例 vllm 推理加速框架 prompt 工程是什么&#xff1f; prompt&#xff1a;提示词&#xff0c;也就是我们使用网页版输入给大模型的内容就叫 prompt&#xff0c;那什么是 prompt 工程呢&#xff1f; 简单理解其实就是利用编写的 prom…

.NET 5种线程安全集合

在.NET中&#xff0c;有许多种线程安全的集合类&#xff0c;下面介绍五种我们常用的线程安全集合以及他们的基本用法。 ConcurrentBag ConcurrentBag 是一个线程安全的无序包。它适用于在多线程环境中频繁添加和移除元素的情况。 ConcurrentBag<int> concurrentBag n…