自然界也有源代码:一位程序员逆向工程了辉瑞新冠疫苗

新闻 前端
我们都知道,计算机程序是用代码编写而成的。最底层会有机器代码和汇编语言,诸如 C、Python 之类的高级语言让人们更容易理解。

 前几天,一位程序员的作品在推特火了。

科普 | 自然界也有源代码:一位程序员逆向工程了辉瑞新冠疫苗

我们都知道,计算机程序是用代码编写而成的。最底层会有机器代码和汇编语言,诸如 C、Python 之类的高级语言让人们更容易理解。其实,自然界也有源代码,它的形式是「DNA 和 RNA 字符串」,其中就包含着构成生命元素的代码。

在这篇文章中,作者 Bert Hubert 介绍了计算机和生物学之间的有趣联系。对于一般读者来说,这是一篇简单但不失科普意义的分析文章,站在生物学的角度解释了一些高度复杂的概念。读完这篇博客内容,一些人也许能够受到启发,从而走进遗传学和生物学的世界。

言归正传,大众印象中的疫苗是一种由手臂注射的液体,为什么要讨论它的源代码?

这个问题很好。如果想要解答它,就先从 BioNTech / 辉瑞的新冠疫苗「 BNT162b2」源代码的一小部分开始,该疫苗又被称为 Tozinameran、Comirnaty。

科普 | 自然界也有源代码:一位程序员逆向工程了辉瑞新冠疫苗

BNT162b2 mRNA 的前 500 个字符。资料来源:世界卫生组织。

BNT162b mRNA 疫苗内部就有这样的数字代码,它的长度为 4284 个字符。在疫苗生产期间,就有人将此代码上传到了 DNA 打印机,然后将磁盘上的字节转换为实际的 DNA 分子。

[[360620]]

BioXpTM 3200 DNA 打印机

这台机器产生的 DNA 很少,经过大量的生物和化学处理后,DNA 最终变成了疫苗瓶中的 RNA。30 微克剂量的疫苗实际上包含 30 微克的 RNA,此外还包含一个脂质包装系统,可将 mRNA 导入人体细胞。

RNA 算是 DNA 的 volatile「工作内存」版本。DNA 就像生物领域的闪存存储,非常耐用、可存储冗余且非常可靠。但是,就像计算机不能直接从闪存驱动器运行代码一样,在某些事情发生前,代码会被复制到更快、功能更广泛但更脆弱的系统中。

在计算机领域,RAM 如此,在生物学领域,RNA 亦如此。很多事情就是这样惊人地相似,RAM 降低地很快,RNA 也是「易碎的花朵」,因此辉瑞 / BioNTech mRNA 疫苗必须存放于最深的冷冻柜中。

每个 RNA 字符的重量约为 0.53·10^⁻²¹ 克,意味着一剂 30 微克的疫苗中就有 6·10^¹⁶个字符,以字节表示的话约为 25 PB,也就是说由 2 万亿段重复的 4284 个字符组成。疫苗包含的实际信息量刚刚超过 1KB,新型冠状病毒( SARS-CoV-2)本身的重量是 7.5KB 左右。

基本背景介绍

DNA 是数字代码,与使用 0 和 1 的计算机不同,生物学领域使用 A、C、G 和 U / T(「核苷酸」、「核苷」或「碱基」)。

A、C、G 和 U/ T 是分子,以链状存储在 DNA 或 RNA 中。

在计算机中,8 比特为一字节,字节是计算机数据处理的最小存储单元。而自然界将 3 个核苷酸编为一个密码子,密码子是遗传信息中的基本内容,包含 6 个比特的信息。

疫苗的宗旨是教会人体免疫系统如何抵抗病原体,却不会生病。所以代码的作用是什么呢?

源代码

我们先来看世卫组织(WHO)披露的图:

科普 | 自然界也有源代码:一位程序员逆向工程了辉瑞新冠疫苗

我们先从「cap」开始。就像你不能在计算机文件中输入操作码并运行一样,生物操作系统也需要头文件(header)、链接器(linker)和调用约定(calling convention)等。

辉瑞疫苗的代码从以下两个核苷酸开始:

  1. GA 

这相当于以 MZ 开头的 DOS 和 Windows 可执行文件,或以 #! 开始的 UNIX 脚本。在生命系统和操作系统中,这两个字母都不会以任何方式执行,但它们必须存在,否则其他操作将不会发生。

mRNA cap 具备很多功能,例如它可以将编码标记为来自细胞核。而在本文讨论的疫苗范畴内,编码来自疫苗。cap 使编码看起来合规,从而避免受到破坏。

GA 核苷酸的化学成分与 RNA 的其他部分略有不同,此处 GA 有某种带外(out-of-band)信号。

5′ 非翻译区(5′ UTR)

蛋白质是生命的物质基础。当 RNA 转化为蛋白质时,这就叫做「翻译」。

RNA 分子只能从一个方向读取,读取在 5′ 非翻译区开始,在 3' 非翻译区停止。

5′ 非翻译区(5′ UTR)是指成熟 mRNA 位于编码区(CDS)上游、5′端帽下游不被翻译为蛋白质的区域:

  1. GAAΨAAACΨAGΨAΨΨCΨΨCΨGGΨCCCCACAGACΨCAGAGAGAACCCGCCACC 

这里我们遇到了第一个惊喜。RNA 的碱基主要有四种:A(腺嘌呤)、G(鸟嘌呤)、C(胞嘧啶)和 U(尿嘧啶),U 在 DNA 中被称为「T」。但这里出现了 Ψ。

Ψ 是辉瑞疫苗极聪明的地方。人体运行着一个强大的防病毒系统。因此,细胞对外来 RNA 极其冷漠,并试图在它做出什么之前摧毁它。这就是疫苗面临的一个问题,它需要逃过人体免疫系统。过去数年的实验发现,如果 RNA 中的 U 被一个经过略微修改的分子替代,则免疫系统会对它失去兴趣。

因此,辉瑞疫苗中的每一个 U 都被 Ψ(1-methyl-3’-pseudouridylyl)替代。其中的聪明之处在于,尽管 Ψ 安抚了人体免疫系统,但它仍被细胞相关部分以正常的 U 接受。

计算机安全领域也有类似的事情。有时一条信息的轻微受损版本可以骗过防火墙和安全解决方案进行传播,而它仍被后端服务器所接受。

很多人问,疫苗可以利用 Ψ 技术击败人体免疫系统吗?答案是否定的。生命本身不具备构建 1-methyl-3’-pseudouridylyl 核苷酸的机制。病毒依赖该生命机制来复制自己,但该机制不存在。mRNA 疫苗在人体中快速降解,因此不可能存在Ψ修正后的 RNA 不可能进行复制。

现在回到 5′ 非翻译区。这 51 个字母在做什么?和自然界中的每个事物一样,几乎没有什么事物具备一种清晰功能。当细胞需要将 RNA 翻译为蛋白质时,这需要通过一种称作核糖体的机器完成。核糖体就像一个蛋白质 3D 打印机,它吸收 RNA,并输出氨基酸,然后生成蛋白质。

[[360622]]

图源:维基百科用户 @Bensaccount。

如动图中所示,底部的黑色带状物是 RNA,带状物出现在绿色区域的部分是合成的蛋白质,飞来飞去的东西是氨基酸和适配器,使得它们适合 RNA。

该核糖体需要在物理上位于 RNA 链才能起作用,一旦固定,它就可以基于摄入的其他 RNA 开始形成蛋白质。由此可以想象出它不能读取其最先着陆的部分。这只是 UTR 的功能之一:核糖体着陆区。UTR 提供了「导入」的功能。

除此之外,UTR 还包含元数据:翻译何时发生?发生多少?对于疫苗来说,他们采取了从 α 珠蛋白基因中获得的「即刻」UTR 。众所周知,该基因能产生大量蛋白质。在过去的几年中,科学家们已经找到了进一步优化该 UTR 的方法,并不是 α 珠蛋白 UTR,总体更好一些。

S 糖蛋白信号肽

如前所述,疫苗的目的是使细胞产生大量的 SARS-CoV-2 刺突蛋白。到目前为止,我们在疫苗源代码中遇到的都是元数据和「调用约定」。现在进入真正的病毒蛋白领域。

然而,我们还有一层元数据需要处理。一旦核糖体制造出一个蛋白质,则该蛋白质依然需要去到某处。这就是在「S 糖蛋白信号肽(扩展的导肽序列)」中进行编码。

如何了解这种情况呢?在蛋白质的开头有一种地址标签,它们被编码为蛋白质的一部分。在这一案例中,信号肽表明这一蛋白质应通过「内质网」从细胞中分离出来。

此外,「信号肽」并不长,但当我们查看代码时会发现,病毒和疫苗 RNA 之间是有区别的。具体如下代码所示,为方便对比,这里使用规则的 RNA U 替代了修正后的Ψ:

  1.            3   3   3   3   3   3   3   3   3   3   3   3   3   3   3   3 
  2. Virus:   AUG UUU GUU UUU CUU GUU UUA UUG CCA CUA GUC UCU AGU CAG UGU GUU 
  3. Vaccine: AUG UUC GUG UUC CUG GUG CUG CUG CCU CUG GUG UCC AGC CAG UGU GUU 
  4.                !   !   !   !   ! ! ! !     !   !   !   !   ! 

发生了什么?RNA 并不是偶然地以 3 个字母一组的形式列出。我们知道,3 个 RNA 字符组成一个密码子,并且每个密码子对特定的氨基酸进行编码。疫苗信号肽中包含的氨基酸与病毒本身中的氨基酸完全相同。

那么 RNA 为何不同呢?

由于有 4 个 RNA 字符,其中 3 个在密码子中,所以共有 4^³=64 个不同的密码子。但是只有 20 种不同的氨基酸,所以多个密码子需要对同一种氨基酸进行编码。

下图为 RNA 密码子与氨基酸之间的映射关系:

科普 | 自然界也有源代码:一位程序员逆向工程了辉瑞新冠疫苗

RNA 密码子。图源:Wikipedia

如上表所列,疫苗的修改(UUU → UUC)都是同义(synonymous)的。疫苗 RNA 编码不同,但产生了相同的氨基酸和蛋白质。

如果仔细观察,我们可以看到大多数的变化出现在密码子的第 3 个位置,上面标有「3」。如果检查通用密码子图表的话,则会发现第 3 个位置与氨基酸的产生无关。

所以,变化是同义的。但为何会出现这些变化呢?仔细观察就会发现,除了其中一个变化之外,其余所有变化都会导致更多的 C 和 Gs。

所以为何要这么做呢?如上文所述,我们的免疫系统对「外源性」RNA(即来自细胞外的 RNA 代码)持悲观态度。为了逃避检测,RNA 中的「U」已经被Ψ所替代。

但结果表明,拥有更多 Gs 和 Cs 的 RNA 也可以更高效地转换成蛋白质。通过将更多的字符替代成 Gs 和 Cs,疫苗 RNA 中已经实现了这一点。

真正的刺突蛋白

疫苗 RNA 接下来的 3777 个字符进行类似的「密码子优化」,以添加更多的 C 和 G。基于空间考虑,这里没有列出所有的代码,但列出了非常特殊的部分。这部分代码能够真正起到作用,并有助于人们生活恢复常态:

  1.                   *   * 
  2.           L   D   K   V   E   A   E   V   Q   I   D   R   L   I   T   G 
  3. Virus:   CUU GAC AAA GUU GAG GCU GAA GUG CAA AUU GAU AGG UUG AUC ACA GGC 
  4. Vaccine: CUG GAC CCU CCU GAG GCC GAG GUG CAG AUC GAC AGA CUG AUC ACA GGC 
  5.           L   D   P   P   E   A   E   V   Q   I   D   R   L   I   T   G 
  6.            !     !!! !!        !   !       !   !   !   ! ! 

如上代码所示,我们可以看到同义的 RNA 变化。例如,在第一个密码子中,CUU 变成了 CUG。这表示在疫苗中增加了另一个「G」,它有助于增强蛋白质生产。由于 CUU 和 CUG 都对氨基酸「L」(亮氨酸)进行编码,所以蛋白质中没有变化。

当我们比较疫苗中整个刺突蛋白时发现,所有的变化都是同义的,但以下两个除外。

上面的第 3 和第 4 个密码子代表了实际变化。K 和 V 氨基酸都被「P」( 脯氨酸)所替代。对于「K」氨基酸,需要 3 次变化 (「!!!」);对于「V」氨基酸,则只需要 2 次变化 (「!!」)。

这表明,这两种变化极大地提升了疫苗效率。

如果观察真正的 SARS-CoV-2 粒子,则会看到一簇簇的刺突蛋白,如下图所示:

[[360623]]

SARS 病毒粒子。图源:Wikipedia SARS virus particles

这些刺突被植入到病毒体(核衣壳蛋白)上。但问题是,我们的疫苗只产生刺突,不会把它们植入到任何病毒体内。

结果是,未经修饰的、独立的刺突蛋白坍缩成不同的结构。如果作为疫苗注射,这确实会使我们的身体产生免疫力,但只针对坍缩的刺突蛋白。

真正的 SARS-CoV-2 是带着刺突的。在这种情况下,疫苗不会很有效。

那该怎么办呢?2017 年,有人描述了如何在正确位置放置一个双脯氨酸替代将使 SARS-CoV-1 和 MERS S 蛋白形成「预融合」结构,即使不是整个病毒的一部分。这是因为脯氨酸是一种非常坚硬的氨基酸。它就像一种夹板,在我们需要向免疫系统展示的状态下稳定蛋白质。

蛋白质的末端,下一步

如果我们浏览源代码的剩余部分,则会在刺突蛋白的末端遇到一些小的修饰:

  1.           V   L   K   G   V   K   L   H   Y   T   s              
  2. Virus:   GUG CUC AAA GGA GUC AAA UUA CAU UAC ACA UAA 
  3. Vaccine: GUG CUG AAG GGC GUG AAA CUG CAC UAC ACA UGA UGA  
  4.           V   L   K   G   V   K   L   H   Y   T   s   s           
  5.                !   !   !   !     ! !   !          ! 

在蛋白质末端,我们会发现一个「终止」密码子,用小写「s」表示。这是一种礼貌说法,表示蛋白质应该到此为止。最初的病毒使用 UAA 终止密码子,疫苗使用两个 UGA 终止密码子,这也许会为了更好的措施。

3′ 非翻译区(3’ UTR)

就像核糖体在 5 '端需要一些导入,我们发现了' 5UTR。在蛋白质的末端我们发现了一个类似的结构,称之为 3 ' UTR。

关于 3'UTR 有很多说法,这里我们引用维基百科的说法:「3' UTR 在基因表达中起着关键作用,它影响着 mRNA 的定位、稳定性、输出以及翻译效率。目前尽管我们对 3' UTR 有所了解,但它们仍然相对神秘。」

我们所知道的是,某些 3'-UTR 在促进蛋白质表达方面非常成功。根据 WHO 文件,辉瑞疫苗 3'-UTR「从 split (AES) mRNA 的氨基末端增强子和编码 12S 核糖体 RNA 的线粒体提取,以保证 RNA 的稳定性和高总蛋白表达。」

科普 | 自然界也有源代码:一位程序员逆向工程了辉瑞新冠疫苗

The AAAAAAAAAAAAAAAAAAAAAA end of it all

mRNA 最末端是聚腺苷化的。这是一种很奇特的说法,它以「AAAAAAAAAAAAAAAAAAA」结尾。

mRNA 可以重复使用多次,但当这种情况发生时,它也会在末端失去一些 A。一旦 A 耗尽,mRNA 不再起作用而被丢弃。这样,「poly-A」尾巴就可以防止其退化。

有研究发现了,对于 mRNA 疫苗,末端 A 的最佳数目是多少。公开文献中的数据表明,该数字在 120 上下时达到峰值。

BNT162b2 疫苗的结尾是:

  1.                                      ****** **** 
  2. UAGCAAAAAA AAAAAAAAAA AAAAAAAAAA AAAAGCAUAU GACUAAAAAA AAAAAAAAAA  
  3. AAAAAAAAAA AAAAAAAAAA AAAAAAAAAA AAAAAAAAAA AAAAAAAAAA AAAA 

这是 30 个 A,然后是 10 个核苷酸连接体 (GCAUAUGACU),然后又是 70 个 A。

总结

我们现在知道了 BNT162b2 疫苗确切的 mRNA 含量,并且在很大程度上理解了它们存在的原因。可以概括如下几点

  • CAP 来确保 RNA 看起来像普通的 mRNA;
  • 已知的成功和优化的 5'UTR;
  • 密码子优化信号肽,可以将刺突蛋白发送到正确的位置(100% 复制自原始病毒);
  • 原始刺突密码子优化版本,有两个「脯氨酸」替代,以确保蛋白质以正确的形式出现;
  • 已知成功和优化的 3'UTR;
  • 有点神秘的多聚腺苷酸尾(Poly-A Tail),里面有一个无法解释的连接器。

最后,密码子优化在 mRNA 上增加了大量的 G 和 C。与此同时,使用Ψ(1 - 甲基 - 3'- 伪尿苷酰基)替代 U,有助于逃避自身免疫系统,因此 mRNA 会停留足够长的时间,所以我们实际上可以帮助训练免疫系统。 

责任编辑:张燕妮 来源: 机器之心Pro
相关推荐

2021-01-13 10:36:02

数据泄露黑客疫苗

2013-06-28 13:28:09

2014-06-27 09:17:53

程序员

2013-12-05 13:41:15

女程序员奋斗

2019-04-17 09:14:39

程序员 996马云

2015-04-14 09:29:25

CTO程序员

2011-09-06 13:48:09

程序员

2021-02-20 10:37:43

代码编码开发

2021-03-31 10:58:16

新冠疫苗辉瑞BioNTech

2015-06-02 04:38:54

程序员俄罗斯程序员

2015-10-28 09:11:31

Python导师级程序员

2013-11-04 10:32:01

Facebook女程序员

2022-03-24 08:00:00

人工智能新冠病毒超级计算机

2015-12-22 15:49:28

程序员互动访谈

2015-10-23 10:53:39

代码航天程序员

2021-03-27 06:57:15

微信新冠疫苗腾讯

2015-12-24 18:00:45

资深程序员

2013-03-19 10:18:07

程序员

2020-12-07 14:58:50

程序员开源开发者

2011-03-03 20:53:28

程序员人才
点赞
收藏

51CTO技术栈公众号