一針輝瑞疫苗,其實是2萬億段代碼:程式設計師逆向重建mRNA原始碼

2021-01-08 手機鳳凰網

從輝瑞疫苗被批准以後,它就被置於世界的聚光燈下。近日,一位程式設計師從計算機科學的角度,對輝瑞疫苗的設計進行了「逆向工程」,文章引起不小的反響,從信頭 (Header)、元數據(Metadata),到幫助偽裝躲過人體免疫系統防火牆的 Ψ 分子,一支疫苗有2萬億段重複的代碼,我們看到了計算機與生物學那頗為神秘的聯繫。

輝瑞疫苗,逆向工程?

聽起來有些不可思議,但一位程式設計師從計算機科學的角度深度剖析了Biotech/輝瑞的mRNA新冠疫苗BNT162b設計,並撰寫了這篇文章—— Biotech/輝瑞SARS-CoV-2疫苗的原始碼的反向工程(Reverse Engineering the source code of the BioNTech/Pfizer SARS-CoV-2 Vaccine)。(以下簡稱輝瑞疫苗)

讀過後,你或許會開始會讓你對生命和計算機世界產生奇妙的聯繫。

簡單的生物學背景

讓我們先來回顧一下生物學知識,這裡,我們將透過程式設計師的眼睛看待生命編碼。

DNA和程序的種種相似的地方,但與計算機使用0和1不同,生命使用A、C、G和U/T來編碼。

在自然界中,A、C、G和U/T都是分子,以鏈的形式儲存在DNA(或RNA)中。

在計算機中,我們把8位編入一個字節,字節是處理數據的典型單位。

自然界將3個核苷酸組合成一個密碼子,而這個密碼子是典型的處理單元。

密碼子包含6位信息 (每個DNA字符2位,3字符= 6位,這意味著2⁶ = 64種不同密碼子值) 。

其次,疫苗是一種液體,我們該如何談論原始碼?

原始碼!

讓我們從疫苗的一小部分原始碼開始,下圖為世界衛生組織公布的BNT162b前500個字符。

mRNA新冠疫苗BNT162b的核心就是這個數字代碼。它有4284個字符長,在疫苗生產過程的最開始,將這段代碼上傳到DNA印表機,然後印表機將磁碟上的字節轉換成實際的DNA分子。

DNA印表機,型號BioXp 3200

從這樣的機器中產生了少量的DNA,在經過大量的生物和化學處理後,最終成為疫苗瓶中的RNA。

RNA就像計算機的RAM一樣,但是,RNA非常脆弱,所以,輝瑞的mRNA疫苗必須儲存在最深處的深冷庫裡。

每個RNA字符的重量為 0.53·10⁻²¹克,一針疫苗裡有2萬億段重複的代碼,相當於25 Pb的數據量。

讓我們來看世衛組織文件披露的一頁:

首先,cap是什麼?就像你不能在計算機上的一個文件中輸入操作碼然後運行它一樣,生物作業系統需要頭文件、連結器和調用約定之類的東西。

疫苗的編碼由以下兩個核苷酸開始:

這可以與以MZ開頭的DOS和Windows可執行文件,或以#!開頭的UNIX腳本進行比較。在生活系統和作業系統中,這兩個字符都不會以任何方式執行。但他們必須在那裡,否則什麼都不會發生。

mRNA 「帽」有許多功能,它讓代碼看起來合法,從而保護它不被我們身體裡的免疫系統破壞。

未翻譯區5 'UTR

生命由蛋白質組成。當RNA轉化為蛋白質時,這被稱為翻譯。

RNA分子只能從一個方向讀取。令人困惑的是,閱讀開始的部分被稱為5'UTR。讀數在3 'UTR停止。

UTR(Untranslated Regions) 即非翻譯區,是mRNA分子兩端的非編碼片段:

在這裡,我們遇到了第一個驚喜。正常的RNA特徵是A、C、G和U。U在DNA中也被稱為「T」。但在這裡我們發現了一個ψ

怎麼回事?

這是關於疫苗的一個特別聰明的地方。我們的身體運行著一個強大的反病毒系統,由於這個原因,細胞對外來RNA非常冷淡,並且在它做出任何反應之前就要破壞它。

這對我們的疫苗來說是個問題——它需要偷偷通過我們的免疫系統。經過多年的實驗,人們發現,如果RNA中的U被一種稍作修飾的分子所取代,我們的免疫系統就會失去興趣。

所以在輝瑞疫苗中,每個U都被1-甲基-3 ' -偽尿醯(ψ)所取代,它能幫助我們的疫苗逃過免疫系統這一關。

在計算機安全領域,我們也知道這個訣竅:有時可能傳輸某樣東西,雖然這會引起防火牆和安全解決方案的懷疑,但這仍然被後端伺服器接受,然後可能被黑客攻擊。

很多人問,病毒能否也用ψ技術來打敗我們的免疫系統?

這是不太可能的。因為生命根本沒有製造1-甲基-3 ' -偽尿醯核苷酸的機制,而病毒需要依靠生命的機制來繁殖自己。而mRNA疫苗在人體內迅速降解,而ψ修飾後的RNA不可能在那裡複製。

回到5 ' UTR。這51個字符是做什麼的?如同自然界的一切事物一樣,幾乎沒有任何事物有一個明確的功能。

當我們的細胞需要將RNA翻譯成蛋白質時,這需要使用一種叫做核糖體的機器。核糖體就像蛋白質的3D印表機。它攝取一串RNA,在此基礎上釋放出一串胺基酸,然後摺疊成蛋白質。

這就是我們在上面看到的情況。底部的黑色絲帶是RNA。出現在綠色部分的緞帶是正在形成的蛋白質。進出的東西是胺基酸和使它們適合RNA的適配器。

這個核糖體需要坐在RNA鏈上才能發揮作用。一旦就位,它就可以開始根據它攝入的RNA進一步形成蛋白質。從這一點上,你可以想像它還不能讀出它首先降落的地方。

這只是UTR的功能之一:核糖體著陸區。UTR提供「導入」。

S糖蛋白信號肽

如前所述,疫苗的目標是讓細胞產生大量刺突蛋白。到目前為止,我們在疫苗原始碼中遇到的大多是元數據和調用約定。現在我們進入病毒蛋白質的領域。

然而,我們還有一層元數據需要處理。一旦核糖體製造出一個蛋白質,這個蛋白質仍然需要去某個地方。這是編碼在「S糖蛋白信號肽(擴展先導序列)」。

了解這一點的方法是,在蛋白質的開頭有一種地址標籤,作為蛋白質本身編碼的一部分。在這個特定的例子中,信號肽表明這種蛋白質應該通過「內質網」離開細胞。

「信號肽」不是很長,但是當我們看代碼時,病毒和疫苗的RNA是有區別的:

怎麼回事呢?我們知道,在生物學中,三個RNA字符組成一個密碼子。每個密碼子都對特定的胺基酸進行編碼。而疫苗中的信號肽與病毒本身的胺基酸完全相同。

那麼RNA是怎麼不同的呢?

有4³=64個不同的密碼子,因為有4個RNA字符,一個密碼子中有3個。然而只有20種不同的胺基酸。這意味著多個密碼子對同一種胺基酸進行編碼。

下表映射了RNA密碼子和胺基酸之間的編碼關係:

RNA密碼子表丨維基百科

在這個表中,我們可以看到疫苗(UUU -> UUC)的修改都是同義的。疫苗的RNA編碼不同,但會產生相同的胺基酸和蛋白質。

如果我們仔細觀察,我們會發現大部分的變化發生在密碼子的第三個位置,上面有一個' 3 '。如果我們檢查通用密碼子表,我們會發現第三個位置通常與產生的胺基酸無關。

所以,這些變化是同義的,但為什麼會有這些變化呢?仔細觀察,我們發現除了一個變化之外,所有的變化都會導致更多的C和G。

你為什麼要這麼做?如上所述,我們的免疫系統會對「外源性」RNA進行攻擊,為了逃避檢測,RNA中的「U」已經被ψ所取代了。

然而,事實證明,含有更多G和C的RNA也能更有效地轉化為蛋白質,這已經在疫苗RNA中實現了只要有可能就用G和C替換許多字符。

真正的刺突蛋白

疫苗RNA的下3777個字符類似於「密碼子優化」,可以添加大量的C和G。

這裡我們看到同義的RNA變化。例如,在第一個密碼子中CUU變成了CUG。這給疫苗增加了另一個「G」,我們知道這有助於提高蛋白質的生產。

當我們比較疫苗中的整個刺突蛋白時,所有的變化都是同義的。除了兩個,這就是我們在這裡看到的。

上面的第三和第四個密碼子代表了實際的變化。那裡的K和V胺基酸都被P或脯氨酸所取代。對於「K」,這需要改變三次(「!!」),而對於「V」,這只需要改變兩次(「!!」)。

事實證明,這兩個變化極大地提高了疫苗的效率。

那麼這裡發生了什麼?如果你看一個真正的冠狀病毒粒子,你可以看到刺突蛋白:

這些刺釘被安裝在病毒體內 (「核衣殼蛋白」)。但問題是,我們的疫苗只會產生刺突,我們不會把它們植入任何一種病毒體內。

結果是,未經修飾的,獨立的刺突蛋白崩潰成不同的結構。如果作為疫苗注射,這確實會使我們的身體產生免疫力。但只針對崩潰的刺突蛋白。

真正的冠狀病毒是帶著尖刺的。在這種情況下,疫苗不會很有效。

那麼該怎麼辦呢?

2017年,有人描述了如何在正確的位置放置一個雙脯氨酸替代,將使SARS-CoV-1和MERS S蛋白形成「預融合」結構,即使不是整個病毒的一部分。這是因為脯氨酸是一種非常堅硬的胺基酸。它就像一種夾板,在我們需要向免疫系統展示的狀態下穩定蛋白質。

蛋白質的末端,下一步

如果我們瀏覽其餘的原始碼,我們會在刺突蛋白的末端遇到一些小的修改:

在蛋白質的末端,我們會發現一個「停止」密碼子,在這裡用小寫的「s」表示。這是一種禮貌的說法,表示蛋白質應該到此為止。最初的病毒使用UAA終止密碼子,疫苗使用兩個UGA終止密碼子,也許只是為了更好的措施。

3 'UTR

就像核糖體在5 '端需要引入,我們發現了' 5UTR,在蛋白質的末端我們發現了一個類似的結構,稱為3 ' UTR。

關於3 ' UTR有很多說法,但這裡引用維基百科的說法:「3 ' UTR在基因表達中起著至關重要的作用,它影響mRNA的定位、穩定性、輸出和翻譯效率。儘管我們目前對3 ' -UTRs有了解,但它們仍然是相對神秘的。」

我們所知道的是,某些3 ' UTR在促進蛋白質表達方面非常成功。根據世衛組織的文件,輝瑞疫苗3 ' UTR是從「split (AES) mRNA的氨基末端增強子和編碼12S核糖體RNA的線粒體中提取的,以保證RNA的穩定性和高總蛋白表達」。

The AAAAAAAAAAAAAAAAAAAAAA end of it all

mRNA的最末端是聚腺苷化的。這是一種以「AAAAAAAAAAAAAAAAAAAAAA」的奇特結尾。

似乎,就連mRNA似乎也受夠了這個糟糕的2020年!

mRNA可以重複使用很多次,但在這個過程中,它也會在末端失去一些A。一旦A耗盡,mRNA就不再起作用而被丟棄。這樣,「多聚腺苷酸尾(Poly-A Tail)」就可以防止其退化。

有研究表明,對於mRNA疫苗來說,A的最佳數量是多少。我在公開文獻中讀到,這個數字在120左右達到了頂峰。

BNT162b2疫苗的是:

這是30個A,然後是「10個核苷酸連接體」(GCAUAUGACU),再後面是70個A。

太長不看版

如果上面的一切讓你感到雲裡霧裡,作者在這裡為您準備了一份「太長不看版」

帽子來確保RNA看起來像普通的mRNA

已知的成功和優化的5 ' UTR

密碼子優化信號肽,將刺突蛋白送到正確的位置(100%從原始病毒複製)

原始刺的密碼子優化版本,有兩個「脯氨酸」替代,以確保蛋白質以正確的形式出現

一個已知的成功和優化的3 ' UTR

一個有點神秘的多聚腺苷酸尾(Poly-A Tail),裡面有一個無法解釋的「連接器」

密碼子優化在mRNA上增加了大量的G和C。與此同時,用ψ(1-甲基-3 ' -偽尿醯ψ)而不是U來幫助逃避我們的免疫系統,因此mRNA會停留足夠長的時間,所以我們實際上可以幫助訓練免疫系統。

文章在reddit上引起了廣泛討論,學科間的邊界似乎也越來越模糊。

一位網友看完後直言:我通過稍微修飾U核苷酸,可以使RNA越過我們的「安全系統」。我們的安全系真的糟透了!

你呢?你怎麼看?

相關焦點

  • 科普| 自然界也有原始碼:一位程式設計師逆向工程了輝瑞新冠疫苗
    機器之心編輯部  新冠疫苗和「原始碼」,有什麼關係?來自荷蘭的中年程式設計師,對輝瑞 BNT162b2 疫苗進行了「逆向工程」,讓我們看到了計算機科學與生物學之間的有趣聯繫。  前幾天,一位程式設計師的作品在推特火了。
  • 一針重複 2 萬億段代碼,我「逆向工程」了輝瑞疫苗!
    ,[20,"\n","24:\"W3tM\""],[20,"\n","24:\"VnUj\""],[20,"蛋白質的末端,下一步"],[20,"\n","24:\"FAtJ\"|heading:\"title\""],[20,"\n","24:\"sTqb\""],[20,"如果我們瀏覽其餘的原始碼,我們會在刺突蛋白的末端遇到一些小的修改:"],[20,"\n","24:\"YbvU\""],[20
  • 阿波羅11號登月飛船原始碼:除了代碼還有笑料和吐槽
    對於現今的很多程式設計師來說,彙編語言晦澀難懂,其目的是方便計算機理解,而不是便於人類理解。MIT的程式設計師們為阿波羅制導計算機(AGC)編寫了成千上萬行的那種深奧代碼。 從下圖中,可以直觀地感受到他們到底寫了多少代碼。圖為阿波羅登月計劃軟體工程主管瑪格麗特·漢密爾頓(Margaret Hamilton),她旁邊是一大堆的AGC代碼文件。
  • 程式設計師如何寫出高質量的代碼程序
    編碼是程式設計師最重要的工作,每個程式設計師都希望自己可以寫出優雅,高性能,高質量的代碼,對於大師級別的程式設計師,他們的寫的代碼就和藝術品一樣,你會忍不住發出驚嘆,他們怎麼可以創造出如此驚豔的作品出來。下面筆者就以自己的淺薄學識和一些經驗來總結下優秀的程序應該具有的特點。
  • 阿波羅11號登月原始碼公布,其中竟隱藏莎翁名言
    (只不過當年用彙編寫的代碼,一般人可能看不太懂就是了)其實,「阿波羅11號」登月項目的原始碼早在2003年就被科技學者Ron Burkey公布於眾,那時他不得不從一份原文的掃描版中人工將代碼一行一行地敲入計算機,並上傳到網絡。如下圖所示,照片右側一人高的紙上全是阿波羅11號登月的代碼,你就可以想像Ron Burkey是多麼有毅力的一個人。除
  • 《代碼整潔之道》精讀與演繹】之四 優秀代碼的格式準則
    優秀的源文件也要像報紙文章一樣。名稱應當簡單並且一目了然,名稱本身應該足夠告訴我們是否在正確的模塊中。源文件最頂部應該給出高層次概念和算法。細節應該往下漸次展開,直至找到源文件中最底層的函數和細節。  2 恰如其分的注釋  帶有少量注釋的整潔而有力的代碼,比帶有大量注釋的零碎而複雜的代碼更加優秀。
  • 程式設計師最愛的8款代碼遊戲 邊玩遊戲邊擼代碼
    如果有這麼一款遊戲,能在放鬆的同時鞏固學到的代碼、學到新代碼,就再好不過了。W3Cschool精選8款熱門遊戲,趕緊來邊玩遊戲邊擼代碼吧!1.Hack Run、Hack Run Zero、Hack Time這是黑客入侵解謎遊戲系列遊戲,相信不少程式設計師並不陌生。在這個遊戲中,你將化身黑客,接受很多不一樣的任務,比如說你要入侵別人帳號,去破解密碼或者竊取信息。
  • 能寫出這種代碼的程式設計師都是神仙吧!
    源 / 頂級程式設計師    文 / An先生或許在大多數人眼中,敲代碼是件乏味枯燥的事。但,並不是!
  • 什麼仇什麼怨,前員工洩露大疆原始碼被罰20萬
    在此之前,今年2月,某雲代碼託管平臺因項目權限設置存在歧義,導致開發者操作失誤,造成至少 40 家以上企業的 200 多個項目代碼洩露事件同樣鬧得沸沸揚揚。爆料者稱,之所以出現這種情況,可能是因為這些公司的程式設計師在給項目建庫時操作不當,將項目權限設置成「平臺公開」。
  • Android被指抄襲Java代碼引爭議
    Mueller仔細檢查了Android的代碼,除了甲骨文在訴訟中提到的一個文件之外,他還發現了六個與Java文件非常相似的文件。這些文件是在Android 2.2版和2.3版中發現的。此外,Mueller指出,在Android的代碼中有三十七個文件包含一些提示,稱這個代碼是Sun專有的代碼。
  • Java程式設計師必備基礎:Java代碼是怎麼運行的?
    前言 作為一名Java程式設計師,我們需要知道Java代碼是怎麼運行的。最近複習了深入理解Java虛擬機,做了一下總結,希望對大家有幫助,如果有不正確的地方,歡迎提出,感激不盡。
  • 偉大的公司都推崇代碼評審,平庸的程式設計師卻認為是浪費時間
    今天來聊一聊程式設計師如何提升自己,曾經我讀過一篇文章,為什麼很多人工作十年,卻無法成為架構師,無法成為技術專家,很多人寫了十萬個小時代碼,卻還是碌碌無為。寫代碼,就好比在大海上泛舟,很多人找不到參照物,隨波逐流。
  • 5個表白代碼,比千元禮物浪漫,2分鐘學會,一輩子抓住她的心
    先來2個不需要代碼的簡單方式1、最簡單的Ctrl+f這個是利用的網頁查找功能,在網頁中打開這些字,因為無法寫出來只好放圖,大家記得在網頁中複製這段文字。然後點擊Ctrl+f,在輸入框中輸入「9」,就會出現下面的情況了。
  • 程式設計師掉入傳銷組織用「代碼」求救,同事秒懂
    南京一家大型軟體企業的年輕程式設計師小張(化名)萬萬沒有想到,當他被傳銷組織控制、幾近絕望之時,自己嘗試利用計算機「代碼」向同事傳遞求救信息,他的程式設計師同事們竟然「秒懂」,並赴天津協助警方,將他成功解救出來。
  • 程式設計師福音,麻省理工將推出代碼移植工具 CodeCarbonCopy
    通過CodeCarbonCopy,開發人員可先選擇A軟體的一段程式碼,再選擇B軟體的插入點,系統就能自動進行必要的變更,如改變參數名稱等,以確保代碼妥善的植入B軟體中。 並且,在移植代碼時,CodeCarbonCopy還能執行靜態分析,移除在A軟體中必要但在B軟體中毫無作用的功能。
  • 中國第一代程式設計師裡的「四大天王」,30年前敲代碼,現狀如何?
    據說在相親界裡程式設計師是個很吃香的職業,因為有的阿姨給程式設計師總結了3個優點:『錢多、話少、死得早』。現在的程式設計師還沒到考慮第三件事的時候,因為很多程式設計師更擔心的是35歲之後的職業發展。網際網路來中國的時間不長,平時接觸的程式設計師敲代碼超過十年以上的也是少數,在為自己擔心的時候,不妨看一下中國的第一代程式設計師們的現狀,他們從1988年開始敲代碼,如今也已經有了三十年的經驗當時的他們名震世界,如今卻差距太大,有的人身價千億、有的人財務自由瀟灑過生活、有的人卻被掃地出門黯然離場。
  • 程式設計師:停電去網吧寫代碼,被當成黑客報警了,網友:想偷我戒指
    甚至在很多人眼裡,這就是年薪百萬,一夜成名的職業了,也讓程式設計師這個行業增添了幾分神秘感,這也讓很多人好奇,究竟是做什麼能夠讓自己收入這麼多呢,他們為何有如此強大的吸金能力呢?有位網友就在論壇上發表自己作為一位程式設計師曾遇到的尷尬事情。
  • 開發者需要的 6 款代碼比較工具
    在程序開發的過程中,程式設計師會經常對原始碼以及庫文件進行代碼對比,在這篇文章裡我們向大家介紹六款程式設計師常用的代碼比較工具WinMergeWinMerge是一款運行於Windows系統下的文件比較和合併工具,使用它可以非常方便地比較多個文檔內容,適合程式設計師或者經常需要撰寫文稿的朋友使用
  • 數學公式太晦澀,不如用代碼寫出來:這是程式設計師學數學的獨特方式
    我發現代碼不僅能用來寫程序,而且還是用於解釋複雜問題的全球通用語言。當我學習數據科學背後的數學時,我總是發現理解數學的最佳方式是寫出描述這些等式的代碼段。最終,我理解了這些符號,現在讀它們就像讀一篇普通論文一樣。我希望通過這篇文章分享一些示例,讓大家知道用代碼描述數學竟會如此簡單!
  • 代碼審查不是用來…… ( Code Review )
    我知道有些公司會忍不住制定一些規程,要求程式設計師在提 交代碼前必須進行「審查」和「批准」,但這並不能保證代碼的質量。而且,程式設計師很快就會把這種代碼審查當作一種「愚蠢」的公司形式過程,會開始抵制它(例 如,每月改一次密碼。例如,使用像mypass1,mypass2等的密碼)。