最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

當(dāng)前位置:主頁(yè) > 區(qū)塊鏈 > 區(qū)塊鏈技術(shù) > Tornado Cash混幣器分享

解讀Tornado Cash混幣器:監(jiān)管者的眼中釘,卻是最精妙的ZK零知識(shí)應(yīng)用

2026-06-14 15:34:58 | 來(lái)源: | 作者:佚名
近期 Vitalik 和一些學(xué)者聯(lián)名發(fā)表了新論文,其中提到了 Tornado Cash 如何實(shí)現(xiàn)反洗錢(qián)方案(其實(shí)就是讓取款人證明,自己的存款記錄屬于一個(gè)不包含黑錢(qián)的集合), 但文中缺乏對(duì) Tornado Cash 業(yè)務(wù)邏輯與原理的細(xì)致解讀,讓人似懂非懂

前陣子被監(jiān)管者盯上的混幣器協(xié)議 Tornado Cash,其實(shí)是理解 ZK 應(yīng)用的最佳案例。

近期 Vitalik 和一些學(xué)者聯(lián)名發(fā)表了新論文,其中提到了 Tornado Cash 如何實(shí)現(xiàn)反洗錢(qián)方案(其實(shí)就是讓取款人證明,自己的存款記錄屬于一個(gè)不包含黑錢(qián)的集合), 但文中缺乏對(duì) Tornado Cash 業(yè)務(wù)邏輯與原理的細(xì)致解讀,讓人似懂非懂。

此外值得一提的是,Tornado 為代表的隱私項(xiàng)目才是真正用到了 ZK-SNARK 算法的零知識(shí)性,而大多數(shù)打著 ZK 旗號(hào)的 Rollup,用到的只是 ZK-SNARK 的簡(jiǎn)潔性。很多時(shí)候人們往往混淆了 Validity Proof 與 ZK 的區(qū)別,而 Tornado 恰好是理解 ZK 應(yīng)用的極佳案例。

延伸閱讀:科普|zk-SNARKs是什么?V神定調(diào)零知識(shí)證明未來(lái)十年「非常重要」

本文作者恰好在 2022 年于 Web3Caff Research 寫(xiě)過(guò)一篇關(guān)于 Tornado 原理的文章,今日將其部分段落節(jié)選并拓展,整理成文,以便大家系統(tǒng)的理解 Tornado Cash。

「龍卷風(fēng)」 的原理

Tornado Cash 是利用了零知識(shí)證明的混幣器協(xié)議,舊版本在 2019 年投入使用,新版本在 2021 年底啟動(dòng)了 beta 版。Tornado 舊版本基本實(shí)現(xiàn)了去中心化,鏈上合約開(kāi)源且無(wú)多簽控制,前端代碼開(kāi)源且備份在了 IPFS 網(wǎng)絡(luò)里。由于舊版 Tornado 的整體結(jié)構(gòu)更簡(jiǎn)單易懂,所以本文將針對(duì)舊版本進(jìn)行解讀。

Tornado 的主要思路是: 把大量的訪(fǎng)問(wèn)款行為混雜在一起,存款者在 Tornado 存入 Token 后,出示 ZK Proof 證明自己存過(guò)款,再用一個(gè)新地址提款,以此切斷訪(fǎng)問(wèn)款地址之間的關(guān)聯(lián)性。

更具體的概括,Tornado 就像一個(gè)玻璃箱,混雜了很多人放進(jìn)去的 Coin 硬幣。我們能看到放 Coin 的是哪些人,但這些 Coin 高度同質(zhì)化,如果有生面孔的人從玻璃箱拿走一枚 Coin,我們很難知道他拿走的 Coin 最初是誰(shuí)放進(jìn)去的。

這種場(chǎng)景似乎屢見(jiàn)不鮮:當(dāng)我們從 Uniswap 池子里 SWAP 幾枚 ETH 時(shí),根本無(wú)法知道劃走的 ETH 是誰(shuí)提供的,因?yàn)樵o Uniswap 提供流動(dòng)性的人太多了。但不同之處是,每次用 Uniswap 劃走 Token,我們需要用其他 Token 作為等價(jià)的成本,且不能把資金 「私密的」 轉(zhuǎn)讓給別人;而混幣器只需要提款者出示存款憑證就行。

為了讓訪(fǎng)問(wèn)款動(dòng)作看起來(lái)有同質(zhì)性,Tornado 池子的存款地址每次存入的資金、取款地址每次取出的資金都保持一致,比如 某個(gè)池子的 100 個(gè)存款者和 100 名取款者,雖然公開(kāi)可見(jiàn),但看起來(lái)彼此沒(méi)有任何聯(lián)系,而且每人存入的金額、取出的金額,都是一樣的。

這時(shí)就可以混淆視聽(tīng),沒(méi)法按照訪(fǎng)問(wèn)款金額判斷關(guān)聯(lián)性,進(jìn)而切斷資金轉(zhuǎn)移痕跡,顯而易見(jiàn)的是,這為洗錢(qián)行為提供了天然的便利。

但有一個(gè)關(guān)鍵問(wèn)題:取款者在提款時(shí),怎么證明自己存過(guò)款?向混幣器發(fā)起取款的地址,與所有的存款地址都不關(guān)聯(lián),那么該如何判斷他的提款資格?看起來(lái)最直接的方法,是取款者直接披露自己的存款記錄是哪一筆,但這就直接泄露了身份。此時(shí)零知識(shí)證明就派上了用場(chǎng)。

提款者出具一個(gè) ZK Proof,證明自己在 Tornado 合約里有存款記錄,且該筆存款尚未被提取,就能順利發(fā)起取款。零知識(shí)證明本身就實(shí)現(xiàn)了隱私保護(hù),外界只知道:取款人的確往資金池里存過(guò)款,但不知道他對(duì)應(yīng)哪個(gè)存款者。

要證明 「我在 Tornado 資金池里存過(guò)款」 可以被轉(zhuǎn)化為 「我的存款記錄可以在 Tornado 合約里找到」。如果用 Cn 表示存款記錄,問(wèn)題就歸納為:

已知 Tornado 的存款記錄集合為 {C1,C2,…C100…},取款者 Bob 證明自己曾用手上的密鑰,生成了存款記錄里的某個(gè) Cn,但通過(guò) ZK 不泄露 Cn 具體是哪個(gè)。

這里要用到 Merkle Proof 的特殊性質(zhì)。因?yàn)?Tornado 的所有存款記錄,都存進(jìn)了鏈上構(gòu)造的一棵 MerkleTree,作為其最底層的葉子結(jié)點(diǎn),而葉子總數(shù)約為 2 的 20 次方 > 100 萬(wàn),大多數(shù)都處于空白狀態(tài)(賦予了初始值)。每當(dāng)有新存款行為產(chǎn)生時(shí),合約就會(huì)把其對(duì)應(yīng)的特征值 Commitment 寫(xiě)入一個(gè)葉子里,然后更新 Merkle Tree 的 root。

比如,Bob 的存款操作是 Tornado 有史以來(lái)第 1 萬(wàn)筆,那么與這筆存款有關(guān)聯(lián)的一個(gè)特征值 Cn 會(huì)寫(xiě)入 Merkle Tree 的第 1 萬(wàn)個(gè)葉子結(jié)點(diǎn),也即 C10000= Cn。然后合約會(huì)自動(dòng)算出新的 Root,update 一下。(ps:為了節(jié)約計(jì)算量,Tornado 合約會(huì)緩存之前一批有變化的節(jié)點(diǎn)的數(shù)據(jù),比如下圖中的 Fs1 和 Fs2、Fs0)

而 MerkleProof 本身很簡(jiǎn)潔輕便,它利用了樹(shù)狀數(shù)據(jù)結(jié)構(gòu)在檢索 / 溯源過(guò)程中的簡(jiǎn)潔性。若想對(duì)外證明某筆交易 TD 存在于 MerkleTree 中,只要給出 Root 對(duì)應(yīng)的 MerkleProof(如下圖中右邊的部分),它相當(dāng)簡(jiǎn)潔。如果 Merkle Tree 格外龐大,底層葉子有 2 的 20 次方個(gè),也就是包含 100 萬(wàn)筆存款記錄,Merkle Proof 也只需要包含 21 個(gè)節(jié)點(diǎn)的數(shù)值,非常短。

如果要證明某筆交易 H3 的確包含在 Merkle Tree 中,設(shè)法證明用 H3 和 Merkle Tree 上其他的部分?jǐn)?shù)據(jù),可以生成 Root,而生成 Root 所需要的那部分?jǐn)?shù)據(jù)(包括 Td 在內(nèi))就構(gòu)成了 Merkle Proof。

而 Bob 在取款時(shí),要證明自己擁有的憑證對(duì)應(yīng)著 Merkle Tree 上有記錄的某筆存款hash Cn。也就是說(shuō),他要證明兩件事:

?Cn 存在于鏈上 Tornado 合約里的 Merkle Tree 中,具體可以構(gòu)造一個(gè) Merkle Proof,里面包含 Cn;

?Cn 與 Bob 手上的存款憑證有關(guān)聯(lián)。

Tornado 業(yè)務(wù)邏輯詳解

Tornado 用戶(hù)界面的前端代碼中事先實(shí)現(xiàn)了很多功能,當(dāng)一名存款者打開(kāi) TornadoCash 網(wǎng)頁(yè)并點(diǎn)擊存款按鈕后,前端代碼附帶的程序會(huì)在本地生成 2 個(gè)隨機(jī)數(shù) K 和 r,隨后會(huì)計(jì)算出 Cn=Hash (K,r) 的值,再把 Cn(就是下圖中的 commitment)傳入 Tornado 合約,插入到后者記錄的 Merkle Tree 里。說(shuō)白了,K 和 r 相當(dāng)于私鑰。它們很重要,系統(tǒng)會(huì)提示用戶(hù)妥善保存。后面提款時(shí)仍然要用到 K 和 r。

值得注意的是,以上工作皆發(fā)生于鏈下,也就是說(shuō):Tornado 合約和外界觀(guān)察者都不知曉 K 和 r。 如果 K 和 r 被泄露了,就類(lèi)似于錢(qián)包私鑰被盜。

Tornado 合約收到用戶(hù)存款,并收到用戶(hù)提交的 Cn=Hash (K,r) 后,便將 Cn 插入到 Merkle 樹(shù)的最底層,作為新的葉子結(jié)點(diǎn),同時(shí)會(huì)更新 Root 的數(shù)值。 所以,Cn 和用戶(hù)的存款動(dòng)作是一對(duì)一關(guān)聯(lián)的,外界可以知道每個(gè) Cn 對(duì)應(yīng)著哪個(gè)用戶(hù),知道有哪些人往混幣器里存入了 Token,并且知道每個(gè)存款者對(duì)應(yīng)的存款記錄 Cn。

在取款步驟中,取款者在前端網(wǎng)頁(yè)里輸入憑證 / 私鑰(存款時(shí)生成的隨機(jī)數(shù) K 和 r),TornadoCash 前端代碼中的程序會(huì)使用 K 和 r、Cn=Hash (K,r)、Cn 對(duì)應(yīng)的 Merkle Proof 作為輸入?yún)?shù),生成 ZK Proof,證明 Cn 是存在于 Merkle Tree 上的某筆存款記錄,而 K 和 r 是對(duì)應(yīng) Cn 的憑證。

這一步就相當(dāng)于證明:我知道某筆記錄于 Merkle Tree 上的存款記錄對(duì)應(yīng)的密鑰。當(dāng) ZK Proof 被提交給 Tornado 合約時(shí),上述 4 個(gè)參數(shù)均被隱藏,外界(包括 Tornado 合約)無(wú)法獲知,借此保障了隱私。

生成 ZKProof 涉及的其他參數(shù)還包括: 取款時(shí) Tornado 合約里 Merkle Tree 的根 root、自定義的收款地址 A、防止重放攻擊的標(biāo)識(shí)符 nf (后面會(huì)講)。這 3 個(gè)參數(shù)會(huì)公開(kāi)發(fā)布到鏈上,外界可以獲知,但不影響隱私。

延伸閱讀:重入攻擊是什么?Curve池內(nèi)的7000萬(wàn)美元如何丟的?

這里面有個(gè)細(xì)節(jié),就是存款操作生成 Cn 時(shí),用了 2 個(gè)隨機(jī)數(shù) K 和 r 來(lái)生成 Cn,而不是單個(gè)隨機(jī)數(shù)。這是因?yàn)閱蝹€(gè)隨機(jī)數(shù)不夠安全,有一定概率發(fā)生碰撞,比如,采用單隨機(jī)數(shù)可能導(dǎo)致兩個(gè)不同的存款者恰巧采用 1 個(gè)同樣的隨機(jī)數(shù),導(dǎo)致生成的 Cn 撞車(chē)。

至于上圖中的 A,代表接收提款的地址,由提款者自己填寫(xiě)。nf 則是一個(gè)防止重放攻擊的標(biāo)識(shí)符,其數(shù)值 nf=Hash(K),K 就是存款生成 Cn 那一步用到的 2 個(gè)隨機(jī)數(shù)之一(K 和 r)。這樣一來(lái),nf 就與 Cn 關(guān)聯(lián)了起來(lái),換言之,每個(gè) Cn 都有對(duì)應(yīng)的 nf,兩者一一關(guān)聯(lián)。

為什么要防止重放攻擊呢? 由于混幣器在設(shè)計(jì)上的特性,取款時(shí)不知道用戶(hù)提走的幣對(duì)應(yīng) Merkle 樹(shù)的哪個(gè)葉子 Cn,也就不知道提款人和哪些存款人關(guān)聯(lián),就不知道提款人到底存過(guò)幾次款。提款者可以利用這一特性頻繁提款,發(fā)起重放攻擊,多次從混幣器池里取走 Token,直到把資金池抽干。

在這里,nf 標(biāo)識(shí)符的作用類(lèi)似于每個(gè)以太坊地址都有的交易計(jì)數(shù)器 nonce,都是為了防止某筆交易被重放而設(shè)置。當(dāng)一筆取款發(fā)生時(shí),取款者需要提交一個(gè) nf,檢查這個(gè) nf 是否已被使用過(guò)(記錄在案):如果有,此次取款無(wú)效。如果沒(méi)有,表示該 nf 尚未被使用,取款有效,對(duì)應(yīng)的 nf 會(huì)被記錄下來(lái)。下次再有人提交這個(gè) nf 時(shí),對(duì)應(yīng)的取款動(dòng)作直接判定為無(wú)效。

如果有人胡亂生成一個(gè)合約沒(méi)記錄過(guò)的 nf 行不行? 當(dāng)然不行,因?yàn)槿】钫呱?ZK Proof 時(shí),需要保證 nf=Hash(K),而隨機(jī)數(shù) K 與存款記錄 Cn 關(guān)聯(lián),也就是說(shuō),nf 與某筆有記錄的存款 Cn 關(guān)聯(lián)。如果隨便編造一個(gè) nf,這個(gè) nf 與存款記錄中的所有存款都對(duì)不上號(hào),就不能順利生成有效的 ZK Proof,后續(xù)的工作就無(wú)法順利完成,取款操作就不會(huì)成功。

可能也有人會(huì)問(wèn):不用 nf 行不行?既然提款者在提款時(shí)需要提交 ZK 證明,證明自己和某個(gè) Cn 有關(guān)聯(lián),那么每當(dāng)提款動(dòng)作發(fā)生時(shí),查找對(duì)應(yīng)的 ZK Proof 是否被提交到鏈上過(guò),不就行了嗎?

但事實(shí)上,這樣做的成本很高,因?yàn)?Tornado cash 合約不會(huì)永久保存過(guò)去提交的 ZK Proof,因?yàn)檫@會(huì)嚴(yán)重浪費(fèi)保存空間。與其比較每個(gè)新交到鏈上的 ZKProof 和既有的 Proof 是否一致,還不如設(shè)置個(gè)占地很小的標(biāo)識(shí)符 nf 并將其永久保存來(lái)的更劃算。

按照取款函數(shù)的代碼示例,其需要的參數(shù)和業(yè)務(wù)邏輯如下:

用戶(hù)提交 ZKProof、nf(NullifierHash)=Hash(K),自定義一個(gè)接收提款的地址 recipent,ZKProof 隱藏了 Cn 和 K、r 的數(shù)值,讓外界無(wú)法獲取判斷用戶(hù)身份。recipent 往往會(huì)填寫(xiě)一個(gè)干凈的新地址,也不會(huì)泄露個(gè)人信息。

但這里面有個(gè)小問(wèn)題,就是用戶(hù)在取款時(shí),為了不可溯源,往往用新申請(qǐng)的地址發(fā)起取款交易,此時(shí)新地址沒(méi)有 ETH 來(lái)支付 gas 費(fèi)。所以取款地址發(fā)起取款時(shí),要顯式聲明一個(gè)中繼者 relayer,由它代付 gas 費(fèi),之后混幣器合約會(huì)直接從用戶(hù)提款里扣掉一部分交給 relayer,作為回報(bào)。

綜上所述,TornadoCash 可以隱瞞取款者與存款者的關(guān)聯(lián),在用戶(hù)量很大的情況下,就如同一個(gè)鬧市區(qū),犯人混進(jìn)人群后警方就難以追蹤。取款過(guò)程中需要用到 ZK-SNARK,被隱藏起來(lái)的 witness 部分包含取款人關(guān)鍵信息,這是整個(gè)混幣器最關(guān)鍵的一點(diǎn)。目前看來(lái),Tornado 可能是與 ZK 相關(guān)的最巧妙的應(yīng)用層項(xiàng)目之一。

免責(zé)聲明:本文只為提供市場(chǎng)訊息,所有內(nèi)容及觀(guān)點(diǎn)僅供參考,不構(gòu)成投資建議,不代表本站觀(guān)點(diǎn)和立場(chǎng)。投資者應(yīng)自行決策與交易,對(duì)投資者交易形成的直接或間接損失,作者及本站將不承擔(dān)任何責(zé)任。!
Tag:混幣器   Cash   Tornado  

你可能感興趣的文章

幣圈快訊

  • 阿拉格齊:伊朗與阿曼談判接近完成

    2026-08-03 01:06
    8月3日,當(dāng)?shù)貢r(shí)間8月2日,伊朗外交部長(zhǎng)阿拉格齊在政府內(nèi)閣會(huì)議上介紹伊朗與阿曼談判最新進(jìn)展時(shí)表示,雙方談判目前進(jìn)展順利,已進(jìn)入最后階段,接近完成。據(jù)伊朗方面7月26日消息,伊朗外交部發(fā)言人巴加埃表示,伊朗與阿曼就管理霍爾木茲海峽安全航運(yùn)的共同原則及操作機(jī)制進(jìn)行討論,會(huì)談“富有成效并取得一些進(jìn)展”。阿拉格齊27日與阿曼以及沙特阿拉伯外交大臣分別通話(huà),討論霍爾木茲海峽事宜。根據(jù)伊朗外交部發(fā)表的聲明,阿拉格齊在通話(huà)中強(qiáng)調(diào)“加強(qiáng)合作的必要性”。
  • 香港單周接獲25宗網(wǎng)戀詐騙案件:某女子遭誘導(dǎo)投資虛擬貨幣損失逾2600萬(wàn)港元

    2026-08-03 00:49
    8月2日,據(jù)港媒東網(wǎng)報(bào)道,香港執(zhí)法部門(mén)統(tǒng)計(jì),7月24日至30日期間共接獲25宗涉及網(wǎng)戀的投資詐騙案件,總損失金額接近7000萬(wàn)港元,其中一宗大型網(wǎng)戀投資詐騙案,一名五旬保險(xiǎn)從業(yè)員遭自稱(chēng)“汽車(chē)買(mǎi)賣(mài)商”的網(wǎng)戀對(duì)象誘騙投資虛擬貨幣,最終損失超過(guò)2600萬(wàn)港元。警方提醒,投資者應(yīng)警惕通過(guò)社交平臺(tái)建立關(guān)系后推薦投資項(xiàng)目的行為,尤其是涉及虛擬貨幣、保證高回報(bào)或要求通過(guò)陌生平臺(tái)交易的投資機(jī)會(huì),切勿因感情或信任放松資金安全防范。
  • Strategy維持STRC股息12%股價(jià)仍低于面值

    2026-08-03 00:25
    8月2日,據(jù)Cointelegraph報(bào)道,Strategy宣布將STRC優(yōu)先股股息率維持在12%,該利率自7月1日起生效,為2025年7月推出以來(lái)的最高水平。然而STRC股價(jià)7月31日收盤(pán)約89.46美元,仍顯著低于100美元面值。Strategy同步推出五項(xiàng)數(shù)字信貸資本框架,包括約25.5億美元美元儲(chǔ)備、兩項(xiàng)10億美元回購(gòu)計(jì)劃及BTC貨幣化授權(quán)。公司明確表示,不會(huì)僅因STRC交易價(jià)格低于面值而上調(diào)股息率,并將STRC目標(biāo)交易區(qū)間設(shè)定為99至100美元。
  • 社區(qū)用戶(hù)用AI對(duì)Coldcard代碼進(jìn)行審計(jì)僅8分鐘即發(fā)現(xiàn)致命漏洞

    2026-08-02 23:59
    8月3日消息,Reddit上有開(kāi)發(fā)者使用ClaudeCode對(duì)Coldcard開(kāi)源固件進(jìn)行漏洞掃描,8分鐘內(nèi)定位到核心問(wèn)題:固件生成私鑰時(shí)調(diào)用了軟件偽隨機(jī)數(shù)生成器而非硬件真隨機(jī)數(shù)生成器,而正是該漏洞導(dǎo)致1,196個(gè)錢(qián)包共計(jì)約7000萬(wàn)美元BTC被盜。同時(shí),亦有社區(qū)用戶(hù)反饋,用智譜GLM5.2(6月16日訓(xùn)練,未聯(lián)網(wǎng))獨(dú)立掃描同樣發(fā)現(xiàn)該漏洞。該bug在開(kāi)源錢(qián)包代碼中存在已超過(guò)五年。
  • 中國(guó)警方AI算法追蹤比特幣洗錢(qián)準(zhǔn)確率達(dá)90%

    2026-08-02 23:45
    8月2日,據(jù)《南華早報(bào)》報(bào)道,中國(guó)人民公安大學(xué)研究人員開(kāi)發(fā)了一套AI框架,可檢測(cè)非法加密貨幣交易,整體準(zhǔn)確率達(dá)89.4%,對(duì)非法交易的精確率為89.1%,召回率為64.5%。該系統(tǒng)結(jié)合動(dòng)態(tài)圖神經(jīng)網(wǎng)絡(luò)、記憶模塊與大語(yǔ)言模型,通過(guò)分析交易結(jié)構(gòu)、資金流向及歷史非法交易模式,生成風(fēng)險(xiǎn)評(píng)分與推理鏈,為監(jiān)管機(jī)構(gòu)提供可追溯的決策依據(jù)。研究成果發(fā)表于同行評(píng)審期刊《情報(bào)雜志》,測(cè)試數(shù)據(jù)集來(lái)自公開(kāi)的Elliptic比特幣交易數(shù)據(jù)集,含逾20萬(wàn)筆交易節(jié)點(diǎn)。
  • 查看更多
更多

熱門(mén)幣種

  • 幣種
    最新價(jià)格
    24H漲跌幅
  • bitcoin BTC 比特幣

    BTC

    比特幣

    $ 63198.12¥ 427149.77
    +0.47%
  • ethereum ETH 以太坊

    ETH

    以太坊

    $ 1863.27¥ 12593.65
    -0.24%
  • tether USDT 泰達(dá)幣

    USDT

    泰達(dá)幣

    $ 0.9991¥ 6.7528
    +0.01%
  • binance-coin BNB 幣安幣

    BNB

    幣安幣

    $ 587.76¥ 3972.61
    +1.64%
  • usdc USDC USD Coin

    USDC

    USD Coin

    $ 1.0007¥ 6.7636
    +0%
  • ripple XRP 瑞波幣

    XRP

    瑞波幣

    $ 1.0806¥ 7.3036
    +1.79%
  • solana SOL Solana

    SOL

    Solana

    $ 73.1481¥ 494.4
    +0.76%
  • tron TRX 波場(chǎng)

    TRX

    波場(chǎng)

    $ 0.3276¥ 2.2142
    -0.46%
  • hyperliquid HYPE Hyperliquid

    HYPE

    Hyperliquid

    $ 52.2234¥ 352.97
    -0.52%
  • dogecoin DOGE 狗狗幣

    DOGE

    狗狗幣

    $ 0.070392¥ 0.4757
    +0.36%
绥滨县| 南投县| 南华县| 阿尔山市| 志丹县| 进贤县| 吉林省| 甘孜县| 饶平县| 禹城市| 石门县| 永吉县| 阳朔县| 北安市| 阿合奇县| 博野县| 江川县| 化德县| 柳州市| 仁怀市| 泗洪县| 浦县| 康平县| 江达县| 兴山县| 秦安县| 九龙城区| 额济纳旗| 霍山县| 洪泽县| 郴州市| 桦南县| 资阳市| 上饶市| 绍兴市| 介休市| 玉龙| 精河县| 惠来县| 贺兰县| 南阳市|