Hi 游客

更多精彩,请登录!

比特池塘 区块链前沿 正文

比特币桥通道支付技术

123458513
164 0 0
比特币的巨大成功激发了替代区块链的发展,例如联盟链。已经提出了几种交叉链协议,通过分布式和安全的方式连接各个区块链的这些宇宙。在本文中,我们提出了一种新的交叉链协议Niji,该协议允许各方在联盟链上安全地执行虚拟比特币支付,而不需要任何可信任的第三方或调解员。我们的工作重点是联盟链的代币难以保持稳定的市场价值,而Niji使智能合约服务有可能在联盟链中获得支付方式。通过建立在联盟链上的比特币支付渠道,从支付到服务提供的过程自动运行,各方之间没有任何交互。Niji引入了交易模板的概念,以便在不同的区块链上有效地验证比特币支付,并且它允许服务提供商将其所有任务委托给验证联盟链上的智能合约的状态更新。我们还提出了一种适用于设计Niji协议的新型双向支付渠道,该渠道可以在各方之间以非交互方式更新支付。我们实施了Niji协议的原型,并进行了一项实验,测量计算成本和延迟,以证明协议在实际平台上的可行性。
( N8 q) W  J' ?/ Y
0 z5 N+ v' O9 f    一、导言1 Q7 u# ^, T, y. }0 M' e( ~

* T3 S$ t( _. a% o) ^* k    比特币是最受欢迎和最成功的加密货币。虽然比特币拥有最大的市值并且每天交易量很大,但与其作为一种投机工具的过热增长相比,它作为一种货币的增长是逐步的。比特币提供了大量的点对点支付机会,但其在大多数商业用例中的潜力尚未完全实现。另一方面,看看比特币的区块链,其技术引起了企业,政府和研究人员的极大关注。
! {# M0 y$ Q) ^# P
4 y1 u! c/ B* M    区块链是一种分散的数据管理机制,具有防篡改,高可用性和数据透明性,预计将成为除金融部门之外的各种商业服务的支柱。智能合约是一种自动执行业务流程及其客观验证的新方法,它加速了区块链向分布式应用程序平台的发展。智能合约使区块链适用于广泛的应用,如供应链,医疗记录,在线投票,物联网平台,运输系统和能源交易。% x: z3 O% K) `4 @

$ r/ `: O( V4 u    事实上,虽然区块链技术已经对社会和商业产生了重大影响,但仍有许多挑战需要解决。特别是,其工业应用具有局限性。尽管大多数企业1 c2 Y+ |9 [# o3 w" D
1 b" T3 [) p9 G9 }2 z
    应用程序需要数据隐私,事务可伸缩性,数据可逆性和协议更新能力,这些控件不在比特币和以太网等公共区块链上实现。: m, Z2 Y7 }! a# C- z
" s" V4 L( O; Q8 z, ]  ~9 o
    一个联合体区块链(此后称为“联合体链”),是一种区块链,其共识过程由预定的权威机构控制,已经开发用于解决上述挑战。特别是,一些金融机构和企业集团(例如,Hyperledger项目,以太坊企业联盟和R3)专注于为联盟开发区块链平台和模块的实施。许多公司已经展示了利用这些平台进行企业用例的概念验证项目,以了解该技术及其在其市场中的潜在影响。
  N' ^5 ~$ T7 a( Y' o5 i/ }
& w# v9 h/ M. B+ T0 B    然而,在联盟链达到大众市场渗透水平之前,仍然需要克服重大挑战。也就是说,联盟链中的“支付”是一个不透明的过程,它会导致影响联盟治理的问题。这与公共区块链明显不同,公共区块链具有使用加密货币的结算功能。公共区块链对任何人开放都是开放的,因此,他们通过对许多实体使用共同令牌来获得一些网络效应[9]。这些令牌可以直接用于各方之间的端到端支付,并且可以有效地交换不同的资产。另一方面,虽然联盟链也可能有代币,但在大多数情况下,它们没有市场价值。向联盟链添加有价值的代币的一种方法是让外部当局(例如银行)确保其价值;在这种情况下,最终结算是通过区块链以外的当局完成的。问题在于,集中权威的存在会削弱区块链技术的优势,例如透明度。+ ^9 y& q& q- ]! D
& P! r0 K+ |. k, m! n* T- x
    在这里,ICO是一种使用加密货币的众筹,许多创业公司都喜欢这种方式,这是使代币变得有价值的另一种方法,但是由于法律上的复杂性和相关的高成本,大多数企业都要使用它都非常的麻烦。. E. b8 k4 G& s

* H$ w2 a+ N2 t& t2 t& N  m# W! d    另一种更具创新性和分散性的方式是利用交叉链协议将公共区块链中的资产价值转移到联盟链的代币。有几种交叉链解决方案可以解决互操作性和可扩展性问题。一种类型的交叉链是将信任置于验证者节点,如Federatedsidechain,Cosmos和Polkadot:另一种是让个别参与者自己监视区块链上的欺诈行为,例如在AtomicSwap中和Plasma。无论如何,共同的前提是主链中的资产价值转移到另一个链中的代币。
' g3 F" z& @  t5 Q' x1 j. l8 T7 Z; l# a% p
    本文介绍了Niji,这是一种新颖的交叉链协议,支持在没有任何权限的联盟链上进行原子和安全支付。与以前的交叉链解决方案的主要区别在于,我们的协议不会将价值转移到联盟链。相反,通过利用支付渠道,该协议通过智能合约验证付款,从而在联盟链上实现虚拟比特币支付。我们的解决方案很简单,但很容易引入,并且在联盟的背景下是实用的。由于每个链的协议在逻辑上是分离的,因此不需要维持大而复杂的合作系统,这导致显着的成本节省。该联盟可以专注于服务运营而不是经济问题。此外,从第2层的角度来看,我们的贡献通过在不同的区块链上执行安全的脱链比特币支付来扩大使用比特币的机会。这与形成像Lightning这样的网络的方法不同,但是可以在各个区块链的各种宇宙中使用比特币支付。
6 Z+ x' Z  G: B( i9 j. x) a$ u. `8 a: g' R! E* [7 ?7 u
    概述:' `) v' y0 p. E# q3 D: E9 X
( @9 w* r* J5 A' I# c* G
    第二部分介绍了理解本文其余部分所必需的元素。第III节包含使用单向支付渠道的基本Niji协议的详细说明。第四节显示了双向信道的扩展。第五节通过实验实施分析了尼基议定书的安全性及其可行性。我们将Niji与其他交叉链协议进行比较,并在第VI节讨论该协议的可能扩展,并在本文的第VII节中结束。
( a( {! p; b& Z  v' @; l8 o! H2 b  ]+ ?! h. {9 Y  G
    二、创建区块
9 b; b( x# H8 ?. e; ]. }7 c0 S8 i8 M
    本节为理解Niji协议建立了必要的构建模块。在下文中,我们介绍了支付渠道,这是比特币离线支付的技术;然后我们描述了以太坊虚拟机,用它来执行智能合约的任意代码。
3 d- _$ w2 `/ t- i. Q* P0 s) k
3 D. \/ I# a3 q    A.付款渠道
9 j* e# r" @: |4 ^* i2 }1 m( Y. X  F
    支付渠道实现了区块链交易的端到端安全支付。Niji利用支付渠道作为跨链协议的子协议。Hearn和Spilman[15]首次讨论的简单支付渠道允许付款人向收款人发送大量付款,而无需将所有交易提交给区块链。该通道基本上是单向的;也就是说,付款人可以将比特币发送给收款人,但收款人不能以相反的方向发送。在简单的支付渠道中,区块链中只存储两个交易:资金交易和结算交易。资金交易用于开通渠道。该交易将付款人的比特币存入由付款人和收款人管理的2-of-2多重签名帐户。相反,结算交易用于关闭渠道。它最终执行区块链上的资金转移并结算付款人和收款人的余额。
3 \: b' s1 _" r' ^, _9 ^; \1 {" ~9 A9 o$ U3 H
    当通道开放时,付款人可以在存入多签名帐户的资金范围内多次更新他/她的付款。例如,在首次付款中,付款人创建并签署一项交易,该交易将0.1BTC从多签名帐户的1BTC转移到收款人。接下来,在第二次付款以发送剩余的0.4BTC时,付款人创建另一个将0.5BTC发送给收款人并更新通道状态的交易。付款人不能将任何这些交易广播到比特币网络,因为这些交易没有收款人所需的签名。在本文中,我们将这种不完整的交易称为更新交易,它将资金交易指定为输入,并且仅包括付款人的签名。为了从多签名帐户转移资金,交易需要付款人和收款人的签名。因此,只有收款人有权在任意时间签署和广播通道的最后状态(即,具有0.5BTC的结算交易)。为了保护付款人免受收款人没有响应并且通过广播通道的任何状态而不合作的风险,将整个1.0BTC退还给付款人的时间锁定应用于资金交易的输出脚本。有两种不同类型的时间锁;CheckLockTimeVerify(CLTV)是BIP65中指定的操作码,允许用户创建一个事务,其输出可用,直到将来的具体时间。另一方面,BIP112中引入的CheckSequenceVerify(CSV)指定了相对时间。当一个交易
& o& Y3 M5 t, X- ^! \; c
) ]: {9 D$ Y& i# \4 v    CSV存储在区块链中,必须等待指定的块确认,直到交易再次可以消费。
% A8 {* n# V1 T4 M) Y, h* I0 x) V! u/ {% M! O6 o- r! L* |
    上述简单的支付渠道实质上是:
5 r* H+ _# L4 w; c
/ y4 z3 a$ r% [, D4 m    单向的;也就是说,付款人可以将比特币发送给收款人,但不是相反的方向。在双向通道中,流程可以双向进行。比特币双向通道有两个众所周知的建议。第一种称为DuplexMicropaymentChannels,由Decker和Wattenhofer提出。它通过使用具有有限寿命的两个单向支付渠道来实现双向支付渠道。第二个是Poon和Dryja[19]的LightningNetwork,它允许通道无限期地保持开放,依靠惩罚来促进各方之间的诚实。
, w$ x8 F' f$ h! F. B" a% r: g) {- j1 k& B
    此外,关于使用支付渠道的现有解决方案,存在从支付到服务提供的交互过程。对于每笔付款,收款人必须确认渠道状态是否有效。当通过离线网络接收更新事务时,收款人必须验证交易格式并验证包含的签名。然后,收款人可以提供服务,例如WiFi热点服务。如果更新交易的付款无效,则该条款显然会被拒绝。我们的解决方案Niji可以通过在联盟链上使用智能合约来自动化此验证流程。3 u* X+ _1 t; t# O& j

0 Y2 F  A% U( j) _  E6 h    B.以太坊虚拟机" q2 r" {! B3 q9 P& E
6 B6 K8 w; z- Y: l, P5 h4 e$ m8 d3 p
    我们假设以太坊虚拟机(EVM)是联盟链智能合约的执行环境。在Niji协议实施中。EVM执行普通事务并将智能合约字节码视为特殊事务。具体而言,每个智能合约都有自己的存储空间来保持合同的状态。我们的协议可以在其他环境中运行;但是,我们应该从以下几个方面强调EVM的效用。首先,EVM已被移植到几个私有区块链平台。各种公司,开源社区,大学等发布的区块链目前具有不同的技术和框架,因此市场分割正在发生。EVM最初是作为以太坊平台上的智能合约的运行时环境而设计的,并且它已被集成到企业的几个区块链平台中,例如Quorum,Monax,HyperledgerBurrow和Azure上的Ethereum。此外,go-ethereum是Go实施的官方以太坊客户,可以使用权威证明算法(EIP225)建立一个联合区块链。这些事实意味着基于EVM的智能合约可以在多个平台上兼容运行,如上所述。
3 \0 @# N! x9 e* n5 }) I6 H9 G3 O* q& E8 r; t2 w( [
    第二个原因是,EVM智能合约的灵活性不如其他图灵完整的智能合约,如HyperledgerFabric链码。在平台提供的灵活性和开发人员为其编写的代码的安全性之间存在权衡。EVM的目标基本上是提供一个“公共”环境,其中智能合约的任意代码和其他操作可以在以太坊上执行。因此,与仅对封闭环境安全的平台相比,EVM对智能合约的执行不可避免地有更多限制。例如,“气体系统”是一种限制,以防止永久的递归和周期,它鼓励开发人员编写有效的代码(气体系统在第IV-A节中描述)。因此,设计为仅适用于EVM的协议也可以在其他图灵完备平台(如HyperledgerFabric)上运行。0 v" w" N1 U2 H. w3 n
/ X1 d7 {% U& K9 h- Y. [
    三、NIJI协议: w3 @% b! J5 q

3 g. W% ~% C8 j, K  {- s    Niji协议基本上基于比特币支付渠道。如第二部分所述,支付渠道有两种类型:单向和双向。为了直观理解,我们将首先解释基于单向信道的协议(基本协议),然后解释如何将其扩展到更实用的双向协议。& |. H  T: F. P* O

8 Q/ F, _$ v: c( \! `# L    A.概述
. N( i6 b9 x7 s0 Y
6 y$ r/ p. R( u( D    Niji允许支付渠道内的比特币支付触发自动执行联盟链上部署的服务。为实现此目的,收款人不在本地验证从付款人收到的更新交易;相反,EVM智能合约在联盟链中验证这些。Niji提供从支付到执行合同的自主流程,没有任何调解员。5 q- q  \  }! n: E% R- p& s7 d/ B
& F: c: n4 ^% M8 N9 }$ i
    首先,让我们确定代表Niji系统中不同功能的角色:$ t6 H& ^3 X, @/ f8 f

, c$ l/ b3 d+ n0 Z* }! D- G    a)网络:: m0 }& J" E( m) d
  f" h, M, {  q& _4 u$ f$ q' J! f
    Niji系统的每个节点都连接到两个区块链网络:比特币区块链和联盟区块链。与比特币不同,联盟链网络限制对网络的未授权访问以进行安全交易。在该网络中,节点不需要是块生成器(即,诸如比特币挖掘器的联合机构的成员),但是它们需要有权向区块链读取和写入数据(即发布事务)。
1 P! N# H  Z: r- v/ y) G. a4 i6 t' L% [8 y$ |1 E! O- P7 Y8 J; h9 e
    联盟链网络限制对网络的未授权访问以进行安全交易。在该网络中,节点不需要是块生成器(即,诸如比特币挖掘器的联合机构的成员),但是它们需要有权向区块链读取和写入数据(即发布事务)。
' h1 G! j* F# K) F; K& B0 c" r& a1 F, `; f
    b)节点:, \$ w& _3 a; A9 \4 J
4 v( d# p5 v) N' N- s
    用户和服务提供商代表本协议中的各方。用户是付款人节点,其向服务提供商支付比特币以使用在联盟链上操作的服务。当支付渠道开放时,用户进行比特币支付,触发在联盟链上执行智能合约。最后一种支付状态由服务提供商广播为结算交易,并最终存储在区块链中。服务提供商是收款人节点,其目的是通过在联盟链上提供某种服务(例如,共享诸如微电网能量的资源)来赚钱。服务提供商创建服务合同以提供服务并通过联盟链共享。它通过Niji协议从用户收到比特币支付作为本合同的使用费。
' C6 Q3 f/ K/ c8 L" A: o' P- ]. d; r3 z, _
    c)智能合约:
: `) f4 _( P7 q* p7 t( \
! ?* G3 T4 W& V, P/ z    在联盟区块链上部署了两份智能合约。桥接合同具有管理用户付款的功能,而不是服务提供商这样做。它收到付款并对其进行验证;然后,它调用服务合同的功能。服务合同具有调用服务核心功能的接口,并为桥接合同打开接口。在开始Niji协议之前,在联盟区块链上创建和部署这两个合同。- A1 s: _  a2 R2 X% \2 C, r
, J, h6 M1 z+ \2 d" F6 R; L
    协议本身的设计如下。核心思想是自动化非交互式更新支付的过程。这是通过使用不完整的比特币交易来实现的6 ~/ X6 W, \: @& k; [) X, r! ~
) f; x( o/ F# j; K* F
    图1.Niji协议概述。从左侧开始,用户承诺三次支付到桥接合同(i=0,1,2)。带箭头的实线表示向区块链网络发送交易。带箭头的直线虚线表示从区块链中检索数据。! v, ~: R7 I: H. N6 q

, P9 W; a" |2 q" ?% ]/ ?    我们命名transactiontemplates(交易模板),其中缺少有关汇款金额和签名的信息。服务提供商在设置阶段将交易模板注册到桥接合同,并提前在联盟链上发布。表I显示了事务模板的示例。为简单起见,该示例使用非Segwit(Seg-regatedwitness)事务。(Segwit版本在附录A中描述)
1 n" I. b  R" b2 a3 G+ [
& P+ y2 F# g) I! T4 H    在进行付款时,用户会参考交易模板创建与付款相对应的签名,并仅将签名和汇款金额提交给桥接合同。桥接合同代表服务提供商验证提供的签名,并使用注册的交易模板,用户签名和汇款金额验证付款。如果有效,则自动批准付款,这意味着服务提供商接受简单付款渠道中的更新交易。/ ^1 v& W# i) z# B
3 B2 V) B  ~4 K
    B.协议细节: W9 T% t- m7 |& F- G

& ~" ?0 H% ~7 |7 P# b0 u+ g3 N    从设置到结算的Niji协议的三个主要阶段。我们在下面描述每个阶段。' c: w& t" ]2 r. @: t0 F. {, k( ~

9 Z7 J/ d, |! W% H    1)设置:* M3 N2 O# L$ S
3 }5 J* ]. K  R
    设置涉及打开比特币简单支付渠道并在联盟链中注册交易模板。首先,为了打开部分II-A中所示的典型简单支付信道,用户和服务提供商创建2比2的多签名地址α`(m)并向比特币网络广播资金交易T^f。该交易T^f将用户的比特币发送到多签名账户,其中金额表示为σ^f。对于T^f的退款,我们通过将OPCSV应用于多签名帐户来使用相对时间锁定;如果时间锁定到期,用户可以安全地将所有存款退还给他/她的钱包。然后,用户广播事务C`T(setDeposit(α`m,σ^f,ά`u))作为打开信道的证据,其中C`T(func)是调用桥接联系的函数的联盟链事务。函数setDeposit(α`m,σ^f,ά`u)存储包括多签名地址α`m,联合链中的存款量σ^f和地址ά`u的存款信息。这里,ά`u是一个特殊的以太坊式地址,它源自比特币公钥。如何使用ά`u进行验证将在下一小节中解释。
/ \6 h& [# }1 H) G& X# c0 k) A( Z1 N* H: p+ r9 P5 w
    接下来,在做出足够的确认后(例如,六个确认),服务提供商确认存储了T^f
0 b+ |! d6 A' o+ \* I5 K/ W
- l( _- t; F: h    比特币区块链并生成交易模板T~,这是一个缺乏签名的变形交易。T~指定T^f作为输入并对应于完整的交易T(σ|us),这代表了一个有效的交易事务从多重签名地址发送σ个比特币到服务提供商的地址。下标u和s表示T(σ|us)具有用户u和s的签名- O- @' p' `$ u& S& y6 V& y$ X

8 `! I9 a0 U/ j( b, T    服务供应商。T(σ|us)是一个5元组,包括T如下:* C7 B( B0 C1 w% i5 a7 _% T  I
5 a" u; d( x$ t3 J  H% Z
    T(σ|us)=(T~,Sig(u),Sig(s),σ,σ(c))
, _( L' {+ U- q8 ?. o. m# z; u
/ C, A8 P2 X' ?    其中Sig(u)和Sig(s)是u和s的相应签名,σ(c)是返回给u的变化量。9 a/ D! g/ [& d& k/ x2 x' ?

9 [' L9 h8 H" e# ?& C& o: [, x' V    在设置结束时,服务提供商向联盟链网络广播交易C`T(setTmpl(T~))。函数setTmpl(T~)将T存储在联盟区块链上的桥接合约的存储空间中。, V, Y8 P4 I6 o& d

- T+ z- E7 g% @5 P' J' g  f$ W    2)付款:
2 r% Z& i3 M& ]5 G& E# Z# z* ]- l9 x
    此阶段允许桥接合同代表服务提供商验证每笔付款。桥接合约有一个函数getTemplate()用于检索存储的T~和用于更新签名值和汇款金额的(Sig,σ)。首先,用户通过使用getTemplate()从桥接合同中获取T~,并在其格式正确时验证它。然后,当进行支付时,用户使用更新(Sig,σ)为桥接合同提供用户的签名Sigu和σ作为支付证明。用户生成Sigu如下:! `9 Z6 |  w( l6 A" `1 e

, T: [- @, W8 x8 ]$ \) c  K7 v    modtx=SignatureForm(T~,σ)4 B' J; ^2 R( F8 g+ |: {

  L% G& r; W$ l3 O    Sig(u)=EcdsaSign(sk^u,Sha256d(modtx))(3)- ^/ \+ \1 Y% f, a% j, y0 y" ]

- r% B0 J( H  j    modtx是在签名之前修改的事务形式,它由T~和σ创建,其中T^f的redeemScript被放入modtx的输入中,并且散列类型常量被临时附加到末尾。为了生成签名,比特币在标准椭圆曲线secp256k1上使用ECDSA(椭圆曲线数字签名算法),这需要拥有签名密钥sk^u和要签名的mod25x的sha256双哈希。C`T(update(Sig,σ))由用户广播到联盟区块链网络并存储在区块链中,并且桥接合同自动验证其支付。验证包括确认σ的值是否低于σ^f的值并验证签名Sig(u)是否正确。算法1列出桥接合同中的支付更新过程的伪代码。6 ?" c, K8 q8 X2 K' `6 ]2 R; F. i
& H+ S: U; i- j" A3 U' _+ }
    验证:在EVM实施中验证Sig(u)需要一点点聪明才智。由于使用EVM的本机操作码进行签名验证有太多开销,我们使用“预编译合同”,这允许在EVM中使用复杂的加密计算。预编译合约是在EVM外部运行的特定预定义优化函数,但可以从在EVM内部运行的普通智能合约调用。EcdsaRecover,一个这样的预编译合同,可以验证椭圆曲线签名并恢复其公钥pk,如下所示:
+ X/ a1 E$ Q# z, ^5 P- e" E0 z6 y# Q* t
    EcdsaRecover(h,v,r,s)=pk# d& W. M3 D4 y* y* t2 ?- O$ O

; s1 U. p; _7 J- g) ~- j    其中h是要签名的32字节消息,(v,r,s)是消息的ECDSA签名(v是恢复id,1字节值指定曲线点的符号和有限性)。此签名与比特币式签名兼容,该签名具有严格的DER(可分辨编码规则)格式;因此,使用h=Sha256d(modtx)和(v,r,s)^u=Sig(u)到EcdsaRecover恢复公钥pk。最后,如果从pk转换的以太坊式地址与存储在桥接合同中的ά`u匹配,则验证成功。因此,可以使用在桥接合同中登记的T,σ和αu来验证Sig(u)。在这里,通过以太坊式地址进行验证的原因是Solidity的规范,Solidity是用于实施以太坊智能合约的高级语言。
6 }, A0 N1 q6 J9 P7 T( V' r  {: S: p9 \/ \* _: `/ y
    更新付款:总付款金额可更新多次达到用户优先的σ^f量* x2 T& r; j/ ~  M1 K0 d
6 `. Y% Q! t% B' |
    沉积。我们将更新后的σ和Sig(u)表示为σ`i和
+ Q( Z* P+ U( K1 H. T7 T5 S  k6 c0 l- B. B" w
    Sig(u|i)fori=0,...,n。用户向该帐户添加新付款
, _* q' x% T6 Z2 O- F' l4 L3 O# n9 [/ b) V5 H1 i
    (当前支付金额σ),  T9 b( L0 S, D2 z7 m; y7 t

1 D: B# v6 m; p! r    通过广播C`T(update(Sig(u|(i+1)),σ`(i+1)))使用Sig(u|i+1)和σ`(i+1)分别替代Sig(u|i)和σ`(i+1),
( e% m* R( }# C- N& S- X) K
1 x* x0 v, {2 G1 h4 _9 |& b/ B    σ`i必须低于σ`(i+1)(σ`i
  W- n( t$ G* N5 I7 j7 X
: ^' H8 ~! W6 `! l    触发合同的功能:invoke()是桥接合同的一个功能,可以调用服务合同提供的服务。验证付款后,桥接合同执行invoke(),触发与付款相对应的服务合同功能。此过程是智能合约之间的内部通信,用于保护过程中的节点。因此,交易C`T(更新(Sig,σ))的过程安全且自动地从支付到提供。
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

123458513 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    7