TMT观察网_独特视角观察TMT行业

是誰控制了比特幣?BTC地址與交易原理大剖析區(qū)塊鏈

火星財經(jīng) 2018-10-05 13:32
分享到:
導讀

比特幣地址有1打頭的地址,也有3打頭的地址,這兩者有什么區(qū)別嗎?在哪種情況下,地址上的比特幣會被鎖死?到底是誰擁有比特幣的控制權(quán),是你?還是你的錢包?

比特幣地址有 1 打頭的地址 ,也有 3 打頭的地址,這兩者有什么區(qū)別嗎?

在哪種情況下,地址上的比特幣會被鎖死?

到底是誰擁有比特幣的控制權(quán),是你?還是你的錢包?

如果你在使用比特幣錢包,但卻無法回答上面三個問題,那么這篇文章是為你而寫。

安比(SECBIT)實驗室在對數(shù)字錢包源碼審計時,發(fā)現(xiàn)一個名為 pywallet 的比特幣錢包開源庫包含了一個嚴重缺陷。如果向 pywallet 生成的 OmniLayer 收款地址轉(zhuǎn)賬,將導致資產(chǎn)永久丟失。

據(jù)安比(SECBIT)實驗室區(qū)塊鏈技術(shù)專家 zer0to0ne 解釋,OmniLayer 協(xié)議允許在比特幣區(qū)塊鏈上發(fā)行自定義資產(chǎn)(比如 USDT)。OmniLayer 資產(chǎn)交易的本質(zhì)是比特幣交易。比特幣交易的代碼庫有很多,pywallet 便是其中一種。它可以方便的構(gòu)造符合 OmniLayer 格式的比特幣交易。目前 pywallet 已經(jīng)被應用在一些數(shù)字錢包軟件中。

但是,開源庫 pywallet 在生成 OmniLayer 錢包地址的時候,誤將地址的前綴寫反了,若干資產(chǎn)被鎖死在無效的地址內(nèi)!

下面是 pywallet 相關(guān)錯誤代碼截圖:

文件地址:https://github.com/ranaroussi/pywallet/commit/eb784ea4dd62fe2a50e1352e7d24438fc66a4ac0#diff-ca3a8be6f2ab4be3bfd69a49f5f4122a

插隊科普一下:比特幣網(wǎng)絡上最常見的地址類型有三種:普通公鑰地址(1-地址),腳本哈希地址(3-地址)和隔離見證地址(bc1-地址),地址類型通過地址的前綴來區(qū)分。其中1-地址的前綴為 0x00,3-地址 的前綴為 0x05。

1-地址:這是最常見的比特幣地址,通常用于普通轉(zhuǎn)賬收款。1-地址 實際上為公鑰Hash的編碼。驗證 1-地址的簽名后便可解鎖收款。

3-地址:這個地址為腳本(Script)哈希地址。這類地址實際對應為一段比特幣腳本Hash的編碼。

bc1-地址:bech32編碼地址,用于隔離見證交易。

開源庫 pywallet 顛倒了地址前綴,將 1-地址 錯誤地設置為 3-地址。因此原本要轉(zhuǎn)給 1-地址 的資產(chǎn)會誤轉(zhuǎn)入 3-地址。當賬戶持有者以 1-地址 的驗證方式,也就是私鑰簽名去取出資產(chǎn)的時候,區(qū)塊鏈網(wǎng)絡卻以 3-地址 執(zhí)行腳本的方式去執(zhí)行驗證,導致用戶無法正常取出資產(chǎn)!

請慎重使用 pywallet 開源庫

真相:比特幣從未真正實現(xiàn)過轉(zhuǎn)賬功能

這一點出乎很多人的意料,由于比特幣的實現(xiàn)基于 UTXO 模型,與我們直觀理解的賬戶模型不一樣。zer0to0ne 解釋說,實際上比特幣從未真正實現(xiàn)過通常意義上的轉(zhuǎn)賬功能。中本聰只給比特幣設計了一系列比特幣腳本操作符和比特幣腳本執(zhí)行器,而所謂的轉(zhuǎn)賬過程實際是由一段比特幣腳本鎖定、解鎖過程來模擬。這與日常生活中的賬本概念(或稱之為賬戶模型)不一樣。

為了便于理解,我們可以把比特幣區(qū)塊鏈上的資產(chǎn)交易比喻成 將資產(chǎn)鎖進保險箱,只有持有保險箱鑰匙的人(即收款人)才能拿出保險箱中的資產(chǎn)進行交易。舉個例子,如果 Alice 要向 Bob 支付一筆資產(chǎn),Alice 將這筆資產(chǎn)鎖進一個保險箱中,只有 Bob 才有這個保險箱的鑰匙,即只有Bob才能取出這筆資產(chǎn)。如果 Bob 要取出資產(chǎn),那么要求 Bob 必須同時花掉這筆資產(chǎn)(即鎖入另一個保險箱)。在 Bob 沒有取出資產(chǎn)前,資產(chǎn)并不真正屬于 Bob。設想如果 Bob 丟了鑰匙,那么將無法再取出資產(chǎn)。 換句話說,這筆資產(chǎn)還在保險箱中保存的時候,既不屬于Alice,也不完全屬于Bob。當然,Alice 也可以把資產(chǎn)放入任何人都可以打開的保險箱中,這也被稱之為 Anyone-Can-Spend 交易。

由于比特幣區(qū)塊鏈上的收款地址不同,保險箱的類型也有所不同。不同類型的保險箱需要不同類型的鑰匙來開啟。付款人為收款人定制一個保險箱,將資產(chǎn)放入保險箱中并上鎖,再將保險箱丟到公共場所。而保險箱有兩種開啟方法:

? 若收款人為 1-地址,我們稱保險箱為1-類保險箱 。而相應的鑰匙必須是指定收款地址對應的私鑰。解鎖保險箱的過程也就是驗證 1-地址公鑰以及公鑰對應的數(shù)字簽名,這也是我們通常所理解的向普通賬戶地址轉(zhuǎn)賬的驗證過程。

? 若收款人為 3-地址,我們稱為3-類保險箱 。開啟鑰匙必須為一段可以執(zhí)行的比特幣腳本。解鎖保險箱的過程是:比特幣腳本的Hash值對應到 3-地址 ,同時比特幣腳本執(zhí)行器運行該腳本后成功返回。也就是說只有擁有腳本原文并可以成功執(zhí)行的人才可以提取這個保險箱里的資產(chǎn)。

回到這一節(jié)的問題:為什么說比特幣從未實現(xiàn)真正意義上的轉(zhuǎn)賬功能。答案很簡單,因為比特幣系統(tǒng)中根本就不存在賬戶的概念,賬戶之間的轉(zhuǎn)賬也無從談起。一個人能在未來打開多少個保險箱,也是未知數(shù)。

通過上面的解釋,我們可知:當 pywallet 開源庫誤將 1-地址 識別為 3-地址 時,就好像將原本的1-類保險箱 改造成了3-類保險箱,而賬戶持有者還是拿著 1-類保險箱 的鑰匙去解鎖,那么自然無法打開保險箱。那么之前 zer0to0ne 發(fā)現(xiàn)的被誤鎖住的 OmniLayer 數(shù)字資產(chǎn)是否能恢復?

是否存在一種可能性,采用 1-地址 的鑰匙去開啟 3-保險箱 ?

zer0to0ne 接著向我們詳細解釋了兩個重要概念 P2PKH(Pay to Public Key Hash) 與 P2SH (Pay to Script Hash)的來龍去脈。這兩個名詞分別代表了兩種不同的比特幣交易類型。

下面是 zer0to0ne 的精彩技術(shù)細節(jié)分析

P2PKH——中本聰?shù)膫ゴ蟀l(fā)明

Pay to Public Key Hash 顧名思義,是將比特幣放入一個保險箱,鑰匙孔為公鑰 Hash(Public Key Hash)。我們最常見到的 1-地址 本質(zhì)上就是 Public Key Hash 的一種編碼。1-地址 的生成過程也很簡單,將公鑰經(jīng)過Hash160運算得到 Public Key Hash,在 Public Key Hash 頭部補上前綴 0x00,Hash 尾部補上校驗和,經(jīng)過Base58便得到了1開頭的比特幣地址。

Base58(0x00 <Public Key Hash> Checksum)

我們來看看P2PKH交易類型的保險箱構(gòu)造過程,Alice發(fā)送比特幣給Bob為例:

付款方 Alice 在構(gòu)造保險箱的時候需要設置一個鎖定腳本:

OP_DUP 
OP_HASH160 
(Bob收款地址蘊含的Public Key Hash) 
OP_EQUALVERIFY 
OP_CHECKSIG

注:我們可以把這一步理解為 Alice 為 Bob 定制了一個保險箱,把比特幣放入保險箱并用 Bob 的公鑰 PubKey Hash上鎖。現(xiàn)在這把鎖除了持有私鑰的 Bob,誰都無法打開。

當 Bob 需要花費 Alice 給他的比特幣時,需要提供必要的參數(shù):交易簽名 公鑰(技術(shù)黑話:scriptSig)來開啟保險箱,使得鎖定腳本執(zhí)行后返回 True,這一步通常由錢包自動完成。

我們來看看比特幣節(jié)點是如何校驗 scriptSig 合法性的。

(圖片來自Mastering Bitcoin)

腳本執(zhí)行過程如圖所示,Bob將交易簽名后得到的數(shù)據(jù)(實際上還要包含數(shù)據(jù)長度信息),真正的scriptSig 應該為<sig len> <sig> <pubKey len> <pubKey>,比特幣腳本執(zhí)行器從 PUSH 數(shù)據(jù)開始,PUSH 操作會讀取第一個字節(jié)獲取將要入棧的數(shù)據(jù)長度信息,然后持續(xù)執(zhí)行比特幣腳本,直到最后執(zhí)行完畢檢查執(zhí)行結(jié)果。

首先入棧的是 <sig>,然后將 <PubK> 入棧,一次DUP操作將在棧頂復制一份 <PubK>,HASH160彈出棧頂?shù)?并計算Hash,將結(jié)果壓回棧中,之后使用 EQUALVERIFY 彈出Hash對比是否合相等,如果相等則返回True,不相等便標記交易為無效。執(zhí)行到這一步,暴露了公鑰,確保了簽名者的身份的正確性,但是黑客或礦工可以通過暴露的公鑰構(gòu)造出一個新的交易替換原始交易,無法保證安全,那么便需要下一步來保證交易無法偽造。此時棧上還有 <PubK> 和 <sig>,執(zhí)行 CHECKSIG,將校驗數(shù)字簽名的正確性,確保了簽名者擁有地址對應的私鑰。

數(shù)字簽名除了持有私鑰的人,誰也無法偽造,執(zhí)行至此,一筆比特幣P2PKH交易已經(jīng)安全地完成了。

再解釋一遍:當 Bob 要花費 Alice 給他的比特幣時,Bob 只有用正確的鑰匙才能打開 Alice 留給他的保險箱,把錢放入 Bob 新構(gòu)造的一個保險箱里。

這時候一些聰明的讀者會注意到一個細節(jié):如果 Bob 取出鑰匙,在還未打開保險箱的時刻,區(qū)塊鏈上的任何礦工都能看得見這把鑰匙的形狀,理論上他們是可以立即復制一把鑰匙,把 Alice 留給 Bob 的保險箱打開并花掉(俗稱 Front-running 攻擊)。真的可以這樣做嗎?顯然中本聰考慮了這個問題,這把鑰匙中的交易簽名是 Bob 發(fā)起的交易的完整簽名。假設 Bob 要將 Alice 構(gòu)造的保險箱中的比特幣 裝入一個新的保險箱(留給Charlie),這時候 Bob 出示的鑰匙包含了 Charlie 的公鑰Hash,礦工雖然可以復制 Bob 的鑰匙,但是這把鑰匙已經(jīng)隱藏了下一個新保險箱的關(guān)鍵信息,因此礦工無法使用這個復制鑰匙來完成別的動作(無法挪用數(shù)字簽名)。

P2SH——后中本聰時代的重大創(chuàng)新

中本聰設計了一個這么強大的腳本系統(tǒng),只用來構(gòu)造轉(zhuǎn)賬交易似乎太浪費了,我們試試用其他指令構(gòu)造一些特別的鎖定腳本,并使用其他方式來解鎖。

例如我們可以構(gòu)造一個用 Hash 原象(Pre-image)來解鎖交易的腳本:

OP_HASH160
<Hash>
OP_EQUAL

這個腳本的含義是:當滿足 Hash160(Pre-image)==<Hash>這個條件時,便可成功將腳本解鎖。

我們繼續(xù)通過保險箱的例子來解釋,并給這類保險箱起名為 3-類保險箱。現(xiàn)在 Alice 給 Bob 的比特幣鎖定在一個由上述 Hash160保護的保險箱里,我們姑且稱之為哈希鎖吧。

這把鎖依然需要正確的形狀才能開啟,但是安全性卻弱很多,缺少數(shù)字簽名機制導致鑰匙隱藏的關(guān)鍵信息不會隨著Bob 新建的保險箱而變化。任何礦工都能在 Bob 亮出鑰匙的一瞬間復制出一摸一樣的鑰匙,搶著去開Alice留給Bob的保險箱(Front-running),將幣轉(zhuǎn)給另一個人 Eve,于是原本屬于 Bob 的比特幣會被洗劫一空。

雖然這個腳本非常不安全,但是它卻有兩個非常神奇的功能:

1. 交易構(gòu)造的輸出足夠短,意味著比特幣節(jié)點維護的 UTXO 緩存占用空間將會大大減小

2. Pre-image 總是在交易被花費時作為 input 來引用,不會在交易的 output 側(cè)出現(xiàn),UTXO依然保持精簡,同時可以把手續(xù)費負擔轉(zhuǎn)嫁給接收方。

既然所述的輸出腳本好處很多,那我們是否有辦法讓這種交易方式變得安全呢?這就需要講講什么是 P2SH了。

比特幣核心開發(fā)者 Gavin Adresen 提出了一種叫做 Pay to Script Hash (P2SH) 的技術(shù)。

P2SH 的交易輸出依然是判斷 Hash160(Script)==<Script Hash>,這里Script 就是上文中提到的 Pre-image 但是在判斷完畢后又增加了一個步驟:使用比特幣腳本執(zhí)行器再次運行 Script 本身。

比特幣開發(fā)者為這類交易創(chuàng)建了特殊的地址,用 3 作為開頭(0x05經(jīng)過 Base58 編碼后變?yōu)?0x03),地址生成規(guī)則為:

Base58(0x05 <Script Hash> Checksum)

這樣事情就變得有趣了,在前 P2SH 時代 Script 僅僅作為 Hash160 的原象存在,但是一旦激活了P2SH,Script 必須要求是一段有意義、可執(zhí)行的比特幣腳本。

我們可以在 Script 中加入數(shù)字簽名檢查的指令,或者多重簽名檢查功能,甚至智能合約都可以在P2SH的基礎(chǔ)上進行開發(fā),既使用了強大的比特幣腳本,又能讓交易保持精簡。并且由于 P2SH 交易地址中只存有 Script Hash,相當于保險箱上只有 Hash。在交易被成功花費之前,任何人都無法知曉 Script 內(nèi)容,很好的保護了隱私。

P2SH在2012年4月1日激活,開啟了比特幣的P2SH時代

現(xiàn)在全世界的 3-類保險箱 經(jīng)過了升級,再也不怕鑰匙被復制了,因為保險箱的鑰匙會內(nèi)置芯片。升級后的保險箱除了能夠校驗鑰匙形狀,更能讀取鑰匙中內(nèi)置的芯片的數(shù)據(jù),芯片中的內(nèi)容會影響鑰匙的形狀。Bob制作了一個能夠校驗鑰匙芯片中數(shù)字簽名的保險箱,讓Alice把錢放進這個保險箱然后鎖起來。Bob開啟保險箱的鑰匙形狀雖然可以被復制,但是這把鑰匙內(nèi)置了芯片,芯片中可以包含各種高級約束條件,保證鑰匙不會被越權(quán)濫用。保險箱會在校驗完形狀后,會執(zhí)行鑰匙芯片內(nèi)的程序查有效性,只有兩個檢查都通過才能開啟保險箱。

被鎖死的幣是否有挽回可能

再回到開頭的那個問題,zer0to0ne 遇到的錢包錯誤鎖死資產(chǎn)的事故,能否采用 1-地址 的鑰匙去開啟 3-保險箱 ,挽救保險箱中的資產(chǎn)呢?

這個問題可以解釋為:Alice 按照 Bob 的要求制作了一個 3-類保險箱,但是這個保險箱是被 pywallet 錯誤修改的,實際上 Bob 的本意是需要一個 1-類保險箱 ,因為 Bob 手里只有一個1-類保險箱 的鑰匙。

當 Bob 請求 Alice 把比特幣鎖定到 3-類保險箱 時,這個保險箱就需要同時校驗鑰匙形狀和鑰匙芯片內(nèi)容了,但是 Bob 的1-類保險箱 的鑰匙形狀是 Public Key 決定的,在保險箱誤變?yōu)?nbsp;3-類保險箱后,鑰匙形狀校驗卻沒有改變,也沒有相應的鑰匙芯片內(nèi)容。

Bob 嘗試在鑰匙芯片中寫入Public Key,使得鑰匙形狀和鎖匹配,但是芯片中的Public Key 卻無法被保險箱正確執(zhí)行,所以 Bob 可能再也無法將他的比特幣從保險箱中解鎖了。

SegWit——全新時代來臨

比特幣開核心發(fā)者 Eric Lombrozo, Johnson Lau, Pieter Wuille 提出來了一種全新的概念,隔離見證(Segregated Witness,簡稱SegWit)。這是一種有效緩解比特幣區(qū)塊擁堵的技術(shù),并且徹底解決了交易延展性問題(Transaction Malleability)。

在SegWit升級之前,每一個用完的鑰匙都插在保險箱上,鑰匙占據(jù)了一定的體積導致倉庫無法密集堆積這些用完的保險箱,總是要為了露在外面一大截的鑰匙騰空間。那我們想想能不能把鑰匙體積減小,并且用足夠廉價的材料來制作,節(jié)約成本。

于是便有了隔離見證(Segregated Witness簡稱SegWit),它干脆直接把鎖從保險箱上移走,變成一個遠程無線校驗的保險箱,用戶可以把鑰匙統(tǒng)一插在遠離保險箱的地方來遠程開啟對應的保險箱。

2017年08月24日,SegWit軟分叉被正式激活,結(jié)束了曠日持久的礦工開發(fā)者對峙

為了兼容3-類保險箱,比特幣開發(fā)者使用了一種叫做P2SH-P2WPKH的技術(shù),即通過P2SH來包裹P2WPKH交易,讓P2WPKH交易可以騙過不支持SegWit的老舊節(jié)點。還有一種類似P2SH包裹的P2WSH技術(shù)(P2SH-P2WSH),在此不多做介紹。

我們先來解釋一下P2WPKH是什么:

P2WPKH全稱Pay to Witness Public Key Hash,相較于P2PKH,P2WPKH把scriptSig移動到交易外部,節(jié)省了占用的區(qū)塊空間。

為了向前兼容未及時升級的比特幣節(jié)點,這個P2SH需要如何構(gòu)造呢?

Bob首先產(chǎn)生一個P2PKH地址,從地址中解析出PubKey Hash,然后構(gòu)造一個這樣的腳本:

Script = 0x0014 <Pubkey Hash>

然后計算Script的Hash160得到Script Hash,構(gòu)造出一個3地址:

Base58(0x05 <Script Hash> Checksum)

當 Alice 把幣鎖定到 Bob 提供的 <Script Hash> 中,意味著 Bob 需要提供正確的 Script 才能解鎖。

Bob通過構(gòu)造有效的Script通過了Hash160檢查,即成功的通過了鑰匙形狀檢查,并且鑰匙里的程序也能被保險箱正確解析并執(zhí)行。

細心的讀者應該又發(fā)現(xiàn)了問題,這個鑰匙卻少了相關(guān)安全性約束,很容易被復制,(Front-running)礦工有機會將交易篡改,把幣轉(zhuǎn)給 Eve。

但是升級了 SegWit 之后,支持 SegWit 的比特幣節(jié)點會在校驗 P2SH 后再額外地校驗Bob的簽名是否正確,數(shù)字簽名作為獨立于交易之外的安全約束,不再占用寶貴的區(qū)塊空間。

zer0to0ne:

SegWit 為比特幣擴容做出了貢獻的同時,也同時在保持向前兼容性上面付出了一些代價。在原生 SegWit 交易被廣泛采用之前,使用了混亂的 P2SH 兼容技術(shù)。如果未來比特幣全部統(tǒng)一到 bc1-地址 ,那么就可以徹底避免使用 P2SH 包裹技術(shù),并且最大限度地利用區(qū)塊容量。

對三個問題的回復

比特幣地址有 1 打頭地址 ,也有 3 打頭的地址,你知道這兩者有什么區(qū)別嗎?

1-地址 是用做 P2PKH 交易的目標地址,而 3-地址 是用作 P2SH,SegWit交易的目標地址。

在哪種情況下,地址上的比特幣會被鎖死?

假設一個比特幣地址為 3-地址 ,如果世界上沒有人能夠提供一個可以通過Hash160校驗并有效可執(zhí)行的腳本,那么這個地址上的比特幣會被鎖死。

到底是誰擁有比特幣的控制權(quán),是你?還是你在使用的錢包?

如果一個比特幣地址為 1-地址 ,那么該地址上的比特幣被鎖在一個 1-類保險箱 中,擁有私鑰的用戶擁有該地址上的比特幣。這里請注意“擁有私鑰”有兩層含義:(1)自己牢記私鑰,(2)其他人無從知曉。

如果一個比特幣地址為 3-地址 ,那么在某個用戶披露一個“解鎖腳本”之前,沒人知道該地址上的比特幣歸屬。因為腳本由錢包來生成的,而用戶只“擁有私鑰”,如果你不知道地址對應的腳本,就相當于交出了地址控制權(quán)。腳本的內(nèi)容才真正決定了比特幣的歸屬。

本文由安比(SECBIT)實驗室提供,安比實驗室致力于解決區(qū)塊鏈全生態(tài)的安全問題,共建共識、可信、有序的區(qū)塊鏈經(jīng)濟體。

比特幣 保險箱 交易 地址 鑰匙
分享到:

1.TMT觀察網(wǎng)遵循行業(yè)規(guī)范,任何轉(zhuǎn)載的稿件都會明確標注作者和來源;
2.TMT觀察網(wǎng)的原創(chuàng)文章,請轉(zhuǎn)載時務必注明文章作者和"來源:TMT觀察網(wǎng)",不尊重原創(chuàng)的行為TMT觀察網(wǎng)或?qū)⒆肪控熑危?br> 3.作者投稿可能會經(jīng)TMT觀察網(wǎng)編輯修改或補充。


主站蜘蛛池模板: 奇酷教育-Python培训|UI培训|WEB大前端培训|Unity3D培训|HTML5培训|人工智能培训|JAVA开发的教育品牌 | 钢托盘,铁托盘,钢制托盘,镀锌托盘,饲料托盘,钢托盘制造商-南京飞天金属13260753852 | 高压无油空压机_无油水润滑空压机_水润滑无油螺杆空压机_无油空压机厂家-科普柯超滤(广东)节能科技有限公司 | 电采暖锅炉_超低温空气源热泵_空气源热水器-鑫鲁禹电锅炉空气能热泵厂家 | 北京易通慧公司从事北京网站优化,北京网络推广、网站建设一站式服务商-北京网站优化公司 | 自动气象站_气象站监测设备_全自动气象站设备_雨量监测站-山东风途物联网 | 精雕机-火花机-精雕机 cnc-高速精雕机-电火花机-广东鼎拓机械科技有限公司 | 制丸机,小型中药制丸机,全自动制丸机价格-甘肃恒跃制药设备有限公司 | 企业VI设计_LOGO设计公司_品牌商标设计_【北京美研】 | 离子色谱自动进样器-青岛艾力析实验科技有限公司 | 深圳美安可自动化设备有限公司,喷码机,定制喷码机,二维码喷码机,深圳喷码机,纸箱喷码机,东莞喷码机 UV喷码机,日期喷码机,鸡蛋喷码机,管芯喷码机,管内壁喷码机,喷码机厂家 | 压滤机滤板_厢式_隔膜_板框压滤机滤板厂家价格型号材质-大凯环保 | 炭黑吸油计_测试仪,单颗粒子硬度仪_ASTM标准炭黑自销-上海贺纳斯仪器仪表有限公司(HITEC中国办事处) | 知网论文检测系统入口_论文查重免费查重_中国知网论文查询_学术不端检测系统 | 合肥展厅设计-安徽展台设计-合肥展览公司-安徽奥美展览工程有限公司 | 密封圈_泛塞封_格莱圈-[东莞市国昊密封圈科技有限公司]专注密封圈定制生产厂家 | 浇钢砖,流钢砖_厂家价低-淄博恒森耐火材料有限公司 | 股指期货-期货开户-交易手续费佣金加1分-保证金低-期货公司排名靠前-万利信息开户 | 双齿辊破碎机-大型狼牙破碎机视频-对辊破碎机价格/型号图片-金联机械设备生产厂家 | 冷水机,风冷冷水机,水冷冷水机,螺杆冷水机专业制造商-上海祝松机械有限公司 | 流程管理|流程管理软件|企业流程管理|微宏科技-AlphaFlow_流程管理系统软件服务商 | 北京发电机出租_发电机租赁_北京发电机维修 - 河北腾伦发电机出租 | 步进驱动器「一体化」步进电机品牌厂家-一体式步进驱动 | 超声波清洗机_大型超声波清洗机_工业超声波清洗设备-洁盟清洗设备 | 团建-拓展-拓展培训-拓展训练-户外拓展训练基地[无锡劲途] | 肉嫩度仪-凝胶测试仪-国产质构仪-气味分析仪-上海保圣实业发展有限公司|总部 | 细砂提取机,隔膜板框泥浆污泥压滤机,螺旋洗砂机设备,轮式洗砂机械,机制砂,圆锥颚式反击式破碎机,振动筛,滚筒筛,喂料机- 上海重睿环保设备有限公司 | 越南专线物流_东莞国际物流_东南亚专线物流_行通物流 | 智能家居全屋智能系统多少钱一套-小米全套价格、装修方案 | 彼得逊采泥器-定深式采泥器-电动土壤采样器-土壤样品风干机-常州索奥仪器制造有限公司 | 免费分销系统 — 分销商城系统_分销小程序开发 -【微商来】 | 环讯传媒,永康网络公司,永康网站建设,永康小程序开发制作,永康网站制作,武义网页设计,金华地区网站SEO优化推广 - 永康市环讯电子商务有限公司 | 电子万能试验机_液压拉力试验机_冲击疲劳试验机_材料试验机厂家-济南众标仪器设备有限公司 | 刘秘书_你身边专业的工作范文写作小秘书| 塑胶跑道施工-硅pu篮球场施工-塑胶网球场建造-丙烯酸球场材料厂家-奥茵 | T恤衫定做,企业文化衫制作订做,广告T恤POLO衫定制厂家[源头工厂]-【汉诚T恤定制网】 | 杭州实验室尾气处理_实验台_实验室家具_杭州秋叶实验设备有限公司 | 步进驱动器「一体化」步进电机品牌厂家-一体式步进驱动 | 北京京云律师事务所 | 碳化硅,氮化硅,冰晶石,绢云母,氟化铝,白刚玉,棕刚玉,石墨,铝粉,铁粉,金属硅粉,金属铝粉,氧化铝粉,硅微粉,蓝晶石,红柱石,莫来石,粉煤灰,三聚磷酸钠,六偏磷酸钠,硫酸镁-皓泉新材料 | 西安标准厂房_陕西工业厂房_西咸新区独栋厂房_长信科技产业园官方网站 |