1. 程式人生 > >教你僅用15分鐘在以太坊編寫一個區塊鏈Web應用

教你僅用15分鐘在以太坊編寫一個區塊鏈Web應用

作者 | 汪曉明 

以太坊是什麼

以太坊是一個全新開放的區塊鏈平臺,它允許任何人在平臺中建立和使用通過區塊鏈技術執行的去中心化應用。就像比特幣一樣,以太坊不受任何人控制,也不歸任何人所有——它是一個開源專案,由全球區塊鏈愛好者共同建立。和比特幣協議有所不同的是,以太坊的設計十分靈活,極具適應性。

比特幣 vs 以太坊

如果對比特幣和以太坊,一個形象的比喻是計算器和智慧手機,計算器只有一些內建的加減乘除功能,智慧手機可以安裝實現各種功能的App。因此,比特幣會在金融支付等特定領域發揮價值,而以太坊可以為各行各業提供解決方案。

以太坊發展歷史回顧

2013年末以太坊創始人Vitalik Buterin第一次描述了這個專案,作為他研究比特幣的成果。不久後,Vitalik發表了以太坊白皮書,書中詳細描述了以太坊協議的技術設計和基本原理,以及智慧合約的結構。2014年1月,Vitalik在美國佛羅里達州邁阿密舉行的北美比特幣會議上正式宣佈了以太坊。

與此同時,Vitalik開始和Gavin Wood博士合作共同實現以太坊。2014年4月,Gavin發表了以太坊黃皮書,作為以太坊虛擬機器的技術說明。按照黃皮書中的具體說明,以太坊客戶端已經有8種程式語言實現。

從2014年6月開始,以太坊藉助42天公開的以太幣預售活動對第一批以太幣進行了分配,共籌集31591個比特幣,當時價值1843萬美元,交換出大約6000萬以太幣。眾籌所得主要用於回報開發者們數月以來的努力,以及資助以太坊的持續開發。這筆資金為以太坊後續的發展提供了充足的的資金保證。

經過兩年的快速發展,在以太坊平臺上創立新的應用十分簡便,隨著Homestead的釋出,任何人都可以安全地使用該平臺上的應用。

以太坊核心概念之虛擬機器(EVM)

以太坊是可程式設計的區塊鏈。它並不是給使用者一系列預先設定好的操作(例如比特幣交易),而是允許使用者按照自己的意願建立複雜的操作。這樣一來,它就可以作為多種型別去中心化區塊鏈應用的平臺,包括加密貨幣在內,但並不僅限於此。

以太坊狹義上是指一系列定義去中心化應用平臺的協議,它的核心是以太坊虛擬機器Ethereum Virtual Machine(EVM),可以執行任意複雜演算法的編碼。在計算機科學術語中,以太坊是“圖靈完備的”。開發者能夠使用現有的以JavaScript和Python等語言為模型的其他友好的程式語言,創建出在EVM上執行的應用。熟悉JVM的同學很好理解,EVM就是一個程式執行的容器。

和其他區塊鏈一樣,以太坊也有一個點對點網路協議。以太坊區塊鏈資料庫由眾多連線到網路的節點來維護和更新。每個網路節點都執行著EVM並執行相同的指令。因此,人們有時形象地稱以太坊為“世界電腦”。

以太坊如何工作?

以太坊合併了對比特幣使用者來說熟悉的特徵和技術,同時自己也進行了修正和創新。比特幣區塊鏈純粹是一個關於交易的列表,而以太坊的基礎單元是賬戶。以太坊區塊鏈跟蹤每個賬戶的狀態,所有以太坊區塊鏈上的狀態轉換都是賬戶之間價值和資訊的轉移。賬戶分為兩類:

1. 外部賬戶(EOA),由私鑰控制;

2. 合約賬戶,由它們的合約編碼控制,只能由外部賬戶“啟用”

對於大部分使用者來說,兩者基本的區別在於外部賬戶是由人類使用者掌控——因為他們能夠控制私鑰,進而控制外部賬戶。而合約賬戶則是由內部編碼管控。

如果他們是被人類使用者“控制”的,那也是因為程式設定它們被具有特定地址的外部賬戶控制,進而被持有私鑰控制外部賬戶的人控制著。“智慧合約”這個流行的術語指的是在合約賬戶中編碼——交易被髮送給該賬戶時所執行的程式。使用者可以通過在區塊鏈中部署編碼來建立新的合約。

只有當外部賬戶發出指令時,合約賬戶才會執行相應的操作。所以合約賬戶不可能自發地執行諸如任意數碼生成或應用程式介面呼叫等操作——只有受外部賬戶提示時,它才會做這些事。這是因為以太坊要求節點能夠與運算結果保持一致,這就要求保證嚴格確定執行。

和比特幣一樣,以太坊使用者必須向網路支付少量交易費用。這可以使以太坊區塊鏈免受無關緊要或惡意的運算任務干擾,比如分散式拒絕服務(DDoS)攻擊或無限迴圈 。交易的傳送者必須在啟用的“程式”每一步付款,包括運算和記憶儲存。費用通過以太坊自有的有價代幣,以太幣的形式支付。

交易費用由節點收集,節點使網路生效。這些“礦工”就是以太坊網路中收集、傳播、確認和執行交易的節點。礦工們將交易分組(包括許多以太坊區塊鏈中賬戶“狀態”的更新),分成的組被稱為“區塊”,礦工們會互相競爭,以使他們的區塊可以新增到下一個區塊鏈上。礦工們每挖到一個成功的區塊就會得到以太幣獎勵。這就為人們帶來了經濟激勵,促使人們為以太坊網路貢獻硬體和電力。

和比特幣網路一樣,礦工們有解決複雜數學問題的任務以便成功地“挖”到區塊,這被稱為“工作量證明(POW)”。一個運算問題如果在演算法上解決比驗證解決方法需要更多數量級的資源,那麼它就是工作證明的極佳選擇。為防止比特幣網路中已經發生的,專門硬體(例如特定用途積體電路ASIC)造成的中心化現象,以太坊選擇了難以儲存的運算問題。如果問題需要儲存器和CPU,事實上理想的硬體是普通的電腦。這就使以太坊的工作量證明具有抗特定用途積體電路性,和比特幣這種由專門硬體控制挖礦的區塊鏈相比,能夠帶來更加去中心化的安全分佈。

以太坊基礎使用指南

以太坊上線之前計劃的初始開發路線圖主要有以下幾個里程碑:

1. 預釋出:Olympic testnet —— 2015年5月

2. 釋出第一版:Frontier —— 2015年7月30日

3. 釋出第二版: Homestead —— 2016年3月14日(π日)

4. 釋出第三版: Metropolis —— 預計2017年上半年

5. 釋出第四版:Serenity——未知

通過本節可以獲取使用者參與以太坊專案中的基本方法。首先,要想成為網路中的節點,需要執行一個以太坊客戶端。

以太坊客戶端的選擇與安裝

為什麼有多個以太坊客戶端?

以太坊客戶端與Java虛擬機器和.NET執行環境類似,能夠讓你在電腦上執行“以太坊程式”。以太坊客戶端按照書面說明(黃皮書)執行,可以彼此協作,因此,你可以使用Go、C++、Java等熟悉的語言來參與以太坊網路。

專案早期,在眾多不同的作業系統中就有多個可以彼此協作的客戶端實現,客戶端的多樣性對於整個生態系統來說是巨大的成功。它使我們能夠證明協議是明確清晰的,為後續創新打開了空間,也讓我們都保持誠實。但是對終端使用者來說,沒有通用的“以太坊安裝程式”可供他們使用,可能引起他們的困惑。

進入到Homestead階段以後,Go客戶端佔據了主導地位,但情況並不一直是這樣,將來也說不定。除了EthereumH,其他客戶端都有Homestead相容的版本。目前有8種客戶端:C++、Go、Python、Java、JavaScript、Haskell、Rust、Ruby。

公有鏈、聯盟鏈、私有鏈

當今大多數以太坊專案都選擇了以太坊公有鏈,公有鏈可以接觸到更多使用者、網路節點、貨幣和市場。但有些領域則更偏好私有鏈或聯盟鏈(在一群值得信任的參與者中)。例如,銀行、保險領域的很多公司都希望以太坊作為他們私有鏈的平臺。

三種區塊鏈在許可方面的區別:

1. 公有鏈:所有人都可以閱讀和傳送交易,合法資訊都會被包括在內。任何人都能參與到共識形成過程——決定在鏈條上新增什麼區塊以及現狀是怎樣的。作為中心化或準中心化信任的替代品,公有鏈受加密經濟的保護,加密經濟是經濟激勵和加密驗證的結合,用類似工作量證明或權益證明的機制,遵循的總原則是人們影響共識形成的程度與他們能夠影響的經濟資源數量成正比。這類區塊鏈通常被認為是“完全去中心化”。

2. 聯盟鏈:共識形成過程由預先選擇的一系列的節點所掌控,例如,設想一個有15個金融機構的團體,每個機構都操作一個節點,為了使區塊生效,其中的10個必須簽署那個區塊。閱讀區塊鏈的權利可能是公開的,或僅限於參與者,也有混合的路徑,比如區塊的根雜湊和應用程式程式設計介面一起公開,使公共成員可以進行一定量的查詢,重獲一部分割槽塊鏈狀態的加密證明。這類區塊鏈被認為是“部分去中心化”。

3. 私有鏈:寫入許可權對一個組織保持中心化。讀許可權可能是公開的或者限制在任意程度。應用很可能包含對單個公司內部的資料庫管理,審查等,因此公共的可讀性在很多情況下根本不必要,但在另一些情況下人們又想要公共可讀性。

在未來的區塊鏈行業解決方案領域,聯盟鏈可能會扮演很重要的角色。

以太坊賬戶管理

賬戶在以太坊中發揮著中心作用。前面我們講了共有兩種賬戶型別:外部和合約賬戶。這裡重點講一下外部賬戶,以下會簡稱為賬戶。如果我們把以太坊限制為只有外部賬戶,只允許外部賬戶之間進行交易,我們就會進入到“代幣”系統,這樣就類似於一個比特幣網路。

鑰匙檔案

每個賬戶都由一對鑰匙定義,一個私鑰和一個公鑰。 賬戶以地址為索引,地址由公鑰衍生而來,取公鑰的最後20個位元組。每對私鑰和地址都編碼在一個鑰匙檔案裡。鑰匙檔案是JSON文字檔案,可以用任何文字編輯器開啟和瀏覽。鑰匙檔案的關鍵部分是賬戶私鑰,通常用你建立帳戶時設定的密碼進行加密。鑰匙檔案可以在以太坊節點資料目錄的keystore子目錄下找到,一定要確保經常給鑰匙檔案備份。

建立鑰匙和建立帳戶是一樣的,在此過程中:

1. 不必告訴任何人你的操作

2. 不必和區塊鏈同步

3. 不必執行客戶端

4. 不必連線到網路

當然新賬戶不包含任何以太幣,但它將會是你的,大可放心,沒有你的鑰匙和密碼,沒有人能進入。轉移備份整個目錄或任何以太坊節點之間的個人鑰匙檔案都是安全的。

建立賬號

使用geth account new

一旦安裝了geth客戶端,建立賬號就只在終端執行 geth account new指令就可以了。

注意不必執行geth客戶端或者和區塊鏈同步來使用geth account指令。

$ geth account new

Your new account is locked with a password. Please give a password. Do not forget this password.

Passphrase:

Repeat Passphrase:

Address: {168bc315a2ee09042d83d7c5811b533620531f67}

警告:記住密碼並“備份鑰匙檔案”。你必須同時有鑰匙檔案和密碼才能從賬號傳送交易,包括髮送以太幣。確保鑰匙檔案有個備份並牢記密碼,儘可能安全地儲存它們。如果鑰匙檔案丟失或忘記密碼,就會丟失所有的以太幣。沒有密碼不可能進入賬號,也沒有忘記密碼選項,所以一定不要忘記密碼。

要列出目前在你的keystore資料夾中的鑰匙檔案的所有賬號,使用geth account指令的list子指令:

$ geth account list

account #0: {a94f5374fce5edbc8e2a8697c15331677e6ebf0b}

account #1: {c385233b188811c9f355d4caec14df86d6248235}

account #2: {7f444580bfef4b9bc7e14eb7fb2a029336b07c9d}

使用geth控制檯

也可以通過控制檯建立新賬號,我們必須先在控制檯模式開啟geth

> geth console 2>> file_to_log_output

控制檯使你能夠通過發出指令與本地節點互相作用。比如,試一下這個列出賬號的指令:

> eth.accounts

{

code: -32000,

message: "no keys in store"

}

這就表明你沒有賬號。你可以從控制檯建立一個賬號:

> personal.newAccount()

Passphrase:

Repeat passphrase:

"0xb2f69ddf70297958e582a0cc98bce43294f1007d"

我們剛剛建立了第一個賬號。如果再次試著列出賬號,就可以看到新建立的賬號了。

> eth.accounts

["0xb2f69ddf70297958e582a0cc98bce43294f1007d"]

案例演示:通過命令列做轉賬操作

安裝完以太坊客戶端,就可以使用命令了,以Go語言客戶端為例。

檢視幫助命令:

geth –h

列出賬戶:

geth account list

指定目錄啟動一個節點:

geth --datadir "~/ethdev" —dev

進入控制檯:

geth --dev console 2>> file_to_log_output

列出賬戶:

> eth.accounts

指定密碼為123456,建立一個賬戶

> personal.newAccount('123456')

> eth.accounts

建立第二個賬戶

> personal.newAccount('123456')

> eth.accounts

取出第一個賬戶,賦值給user1

> user1 = eth.accounts[0]

取出第二個賬戶,賦值給user2

> user2 = eth.accounts[1]

檢視user1初始餘額

> eth.getBalance(user1)

0

檢視user2初始餘額

> eth.getBalance(user2)

0

檢視當前區塊號

> eth.blockNumber

0

啟動挖礦

> miner.start()

檢視當前區塊號

> eth.blockNumber

檢視user1當前餘額

eth.getBalance(user1)

檢視user2當前餘額

eth.getBalance(user2)

停止挖礦

> miner.stop()

檢視當前區塊號

> eth.blockNumber

user1轉賬給user2(會報錯,請看下一步)

> eth.sendTransaction({from: user1, to: user2, value: web3.toWei(3, "ether")})

轉賬涉及到資金支出,需要提供密碼解鎖轉出賬戶

> personal.unlockAccount(user1, "123456”)

重新執行轉賬操作:

> eth.sendTransaction({from: user1, to: user2, value: web3.toWei(3, "ether")})

轉賬成功以後,檢視user1和user2餘額

> eth.getBalance(user1)

> eth.getBalance(user2)

好了,一個完整的命令列轉賬功能就完成了。

15分鐘編寫一個區塊鏈Web應用:truffle開發入門

以太坊是區塊鏈開發領域最好的程式設計平臺,而truffle是以太坊最受歡迎的一個開發框架。實戰是最重要的事情,這一節不講原理,只搭建環境,並執行一個區塊鏈程式。

【安裝truffle】

$ npm install -g truffle

【依賴環境】

訪問https://nodejs.org 官方網站下載安裝NodeJS

推薦Mac OS 系統,不建議使用Windows,會碰到各種各樣的問題,導致放棄。

需要安裝Ethereum客戶端來支援JSON RPC API呼叫開發環境,推薦使用EthereumJS TestRPC: https://github.com/ethereumjs/testrpc

安裝命令:

$ npm install -g ethereumjs-testrpc

【新建第一個專案】

$ mkdir zhaoxi

$ cd zhaoxi

$ truffle init

預設會生成一個MetaCoin的demo,可以從這個demo中學習truffle的架構

專案一級目錄結構如下:

/Users/bob/workspace/zhaoxi/

▶ app/

▶ contracts/

▶ migrations/

▶ test/

truffle.js

專案所有檔案目錄如下:

/Users/bob/workspace/zhaoxi/

▼ app/

▼ images/

▼ javascripts/

app.js

▼ stylesheets/

app.css

index.html

▼ contracts/

ConvertLib.sol

MetaCoin.sol

Migrations.sol

▼ migrations/

1_initial_migration.js

2_deploy_contracts.js

▼ test/

metacoin.js

truffle.js

【編譯專案】

$ truffle compile

[email protected] zhaoxi % truffle compile                               

Compiling ConvertLib.sol...

Compiling MetaCoin.sol...

Compiling Migrations.sol...

Writing artifacts to ./build/contracts

【部署專案】

部署之前先啟動TestRPC

$ testrpc

$ truffle deploy

[email protected] zhaoxi % truffle migrate 

Running migration: 1_initial_migration.js

  Deploying Migrations...

  Migrations: 0x43d6a4e2196dcc73fe146edc73d2ebd8f15b5a7a

Saving successful migration to network...

Saving artifacts...

Running migration: 2_deploy_contracts.js

  Deploying ConvertLib...

  ConvertLib: 0x57625b35460974b61c5e2862f1fcb463e2500b7b

  Linking ConvertLib to MetaCoin

  Deploying MetaCoin...

  MetaCoin: 0xd90058c2b73fa50403b1368d2f48c601576b8b40

Saving successful migration to network...

Saving artifacts...

【啟動服務】

$ truffle serve

啟動服務後,可以在瀏覽器訪問專案:

http://localhost:8080/ ,網頁介面如圖1所示。



圖1  網頁服務介面

好了,第一個Web區塊鏈程式跑起來了,後面可以不斷地實踐深入學習了。

【參考資料】

以太坊官方網站:https://ethereum.org/

汪曉明的部落格:http://wangxiaoming.com/

以太坊開發視訊:http://ethcast.com/

以太坊愛好者:http://ethfans.org/

作者簡介:汪曉明,朝夕網路創始人,前Beltal CTO。十年網際網路產品技術經驗,區塊鏈、以太坊早期的探索者,目前致力於培養區塊鏈技術人才,推動區塊鏈應用的落地。維護著區塊鏈技術開發視訊網站(EthCast.com)。

相關推薦

15分鐘編寫一個區塊Web應用

作者 | 汪曉明  以太坊是什麼 以太坊是一個全新開放的區塊鏈平臺,它允許任何人在平臺中建立和使用通過區塊鏈技術執行的去中心化應用。就像比特幣一樣,以太坊不受任何人控制,也不歸任何人所有——它是一個開源專案,由全球區塊鏈愛好者共同建立。和比特幣協議有所不同的是,以

Python互動將區塊資料存入sql資料庫

關於區塊鏈介紹性的研討會通常以易於理解的點對點網路和銀行分類賬這類故事開頭,然後直接跳到編寫智慧合約,這顯得非常突兀。因此,想象自己走進叢林,想象以太坊區塊鏈是一個你即將研究的奇怪生物。今天我們將觀察該生物,並與其進行互動然後將有關它的所有資料收集到一個集中儲存中供自己使用。 進行第一次設

區塊研究(一)搭建基於的Windows區塊環境

1.下載Geth.exe並安裝官網地址: https://ethereum.github.io/go-ethereum/downloads/ (另附百度網盤地址:連結: https://pan.baidu.com/s/1kVVMBsz 密碼: dr5j)進入之後顯示如下介面,

IPFS和儲存資料

如何將JSON檔案儲存在IPFS上,並使用Oraclize訪問智慧合約中的資料呢? 以太坊是一個成熟的區塊鏈,使開發人員能夠建立智慧合約,在區塊鏈上執行的程式可以由交易觸發。人們經常將區塊鏈稱為資料庫,但使用區塊鏈作為資料儲存非常昂貴。 以目前的價格(530美元,4gwei)在以太坊

多節點私有的搭建

以太坊多節點私有鏈的搭建 參考連結:http://www.360bchain.com/article/157.html 資料同步可能會出現的問題:https://blog.csdn.net/wo541075754/article/details/79247282/ 1、啟動節點 啟動節點

POA搭建聯盟——geth命令手記

創世塊使用:puppeth建立 參考:https://blog.csdn.net/code_segment/article/details/78160660   密碼:123 node: 128809dd3d9fe616381ce21b868191ce90091c7e

最詳細私搭建教程

第1步 - 建立datadir資料夾       執行專用區塊鏈時,強烈建議使用特定資料夾來儲存專用區塊鏈的資料(資料庫和錢包),而不會影響用於儲存來自公共區塊鏈的資料的資料夾。在您的計算機上,建立將託管您的第一個礦工的資料夾: 命令:mkdir -p ~/ChainSk

api訪問,區塊同步監測

以太坊geth api訪問,區塊同步監測 curl查詢geth區塊高度 supervisor管理以太坊geth程序 geth程序健康檢查 # curl訪問geth api #使用curl訪問geth api查詢區塊高度 curl -s -X POST -H "Content-Type":app

搭建基於ethereum環境的私有

安裝geth在之前的部落格有提到,所以本篇預設已經安裝成功 geth -h //能成功顯示輸出幫助,則表示已經成功安裝 12 一、創世塊 現在通過配置創世塊來建立私有鏈。同一個網路中,創世塊必須是一樣的,否則無法聯通。 建立一個private的根目錄,新建創世塊

區塊入門三部曲(二) (最全最詳細 )Geth搭建私有

1.     Geth的搭建私有鏈搭建私有鏈首先需要配置一個創業區塊。下圖是創世區塊genesis.jsonConfig:config必不可少,否則建立不成功。ChildId不能為0。Alloc:用來預置賬號以及賬號的以太幣數量,因為私有鏈挖礦比較容易,所以我們不需要預置有幣

單節點私搭建(go+geth+Etherum Wallet)

前言: geth和Etherum Wallet是個什麼東西呢? 簡單說,是以太坊客戶端。以太坊客戶端主要分成兩類。 第一類:後臺命令列客戶端。 如:geth(go語言),parity(Rust語言),他們是一個與以太坊網路互動的命令列客戶端。

多節點私有的配置與安裝

./geth -targetgaslimit 4294967295 -rpc -rpcaddr "127.0.0.1" -rpcport "8101" -port "30303" -rpcapi "eth,web3,personal" -networkid 123 -identity 123 -nodisco

科普貼 | 代幣錢包MyEtherWallet使用教程,一步步玩轉MEW

按鈕 wid isp 查詢 到你 pan fail VC oam MyEtherWallet 是一個以太坊的網頁錢包,使用非常簡單,打開網頁就可以使用,源代碼開源,不會在服務器上存儲用戶的錢包信息如私鑰和密碼。支持 Ledger Wallet、TREZOR 等硬件錢包

如何選擇適合自己的ETH挖礦模式(也適合BCD/VTC/DASH挖礦等)

還記得2017年年底,比特幣瘋狂暴漲嗎?不知造就了多少百萬富翁,千萬富翁。區塊鏈近兩年發展如日中天,人們對數字貨幣的投資熱情日益高漲。當然投資數字貨幣(所謂的炒幣)的收益確實很高,但也面臨著同樣高的風險。所以衍生出低風險的行業,那就是挖礦,越來越多的人們開始湧入這一行列,成為一名辛勤的礦工

如何在上建立屬於自己的ERC20代幣

本文從技術角度詳細介紹如何基於以太坊ERC20建立代幣的流程。 (需要幫忙代做的可以聯絡V信:WangSanfeng0417) 寫在前面 本文所講的代幣是使用以太坊智慧合約建立,閱讀本文前,你應該對以太坊、智慧合約有所瞭解,如果你還不瞭解,建議你先看以太坊是什麼

手把手從原始碼開始搭建自己的(四)部署及連線多個節點

1. 使用相同的創世區塊檔案genesis.json 創世區塊genesis.json檔案內容如下: { "config": { "chainId": 100, "homestea

一步步建立自己的數字貨幣(代幣)進行ICO

寫在前面 本文所講的代幣是使用以太坊智慧合約建立,閱讀本文前,你應該對以太坊、智慧合約有所瞭解,如果你還不瞭解,建議你先看以太坊是什麼 代幣Token 如果不那麼追求精確的定義,代幣就是數字貨幣,比特幣、以太幣就是一個代幣。 利用以太坊的智慧合約可以輕鬆編寫出

手把手發行自己的ERC20 Token

一、安裝環境1、在chrome瀏覽器安裝MetaMask外掛安裝完成後,你會看到chrome右上角有一個新的圖示。安裝MetaMask外掛2、新建錢包輸入密碼,儲存助記詞3、使用測試網路由於使用以太坊主網路釋出智慧合約需要真正的ETH,在這裡我使用的是測試網路(如果要在主網路釋出一個Token,只需要選擇主網

手把手發行自己的ERC20 Token 並進行轉賬

代幣Token 如果不那麼追求精確的定義,代幣就是數字貨幣,比特幣、以太幣就是一個代幣。 利用以太坊的智慧合約可以輕鬆編寫出屬於自己的代幣,代幣可以代表任何可以交易的東西,如:積分、財產、證書等等。 因此不管是出於商業,還是學習很多人想建立一個自己的代幣,

三天竟然爆發兩起大漏洞事件!我們來如何跳過的坑

“現在進入你還是先行者,最後觀望者進場才是韭菜。”美圖董事長蔡文勝在三點鐘群中的預言一語成讖。在