0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一支疫苗有2万亿段重复的代码

Linux爱好者 来源:新智元 作者:新智元 2021-01-20 09:38 次阅读

【新智元导读】从辉瑞疫苗被批准以后,它就被置于世界的聚光灯下。近日,一位程序员从计算机科学的角度,对辉瑞疫苗的设计进行了「逆向工程」,文章引起不小的反响,从信头 (Header)、元数据(Metadata),到帮助伪装躲过人体免疫系统防火墙的Ψ 分子,一支疫苗有2万亿段重复的代码,我们看到了计算机与生物学那颇为神秘的联系。

辉瑞疫苗,逆向工程?

听起来有些不可思议,但一位程序员从计算机科学的角度深度剖析了Biotech/辉瑞的mRNA新冠疫苗BNT162b设计,并撰写了这篇文章——Biotech/辉瑞SARS-CoV-2疫苗的源代码的反向工程(Reverse Engineering the sourcecode 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个字符。

ba1310f4-4ee2-11eb-8b86-12bb97331649.png

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是有区别的:

bc2284c4-4ee2-11eb-8b86-12bb97331649.png

怎么回事呢?我们知道,在生物学中,三个RNA字符组成一个密码子。每个密码子都对特定的氨基酸进行编码。而疫苗中的信号肽与病毒本身的氨基酸完全相同。

那么RNA是怎么不同的呢?

有4³=64个不同的密码子,因为有4个RNA字符,一个密码子中有3个。然而只有20种不同的氨基酸。这意味着多个密码子对同一种氨基酸进行编码。

下表映射了RNA密码子和氨基酸之间的编码关系:

bc6232e0-4ee2-11eb-8b86-12bb97331649.png

RNA密码子表(维基百科)

在这个表中,我们可以看到疫苗(UUU -> UUC)的修改都是同义的。疫苗的RNA编码不同,但会产生相同的氨基酸和蛋白质。

如果我们仔细观察,我们会发现大部分的变化发生在密码子的第三个位置,上面有一个' 3 '。如果我们检查通用密码子表,我们会发现第三个位置通常与产生的氨基酸无关。

所以,这些变化是同义的,但为什么会有这些变化呢?仔细观察,我们发现除了一个变化之外,所有的变化都会导致更多的C和G。

你为什么要这么做?如上所述,我们的免疫系统会对「外源性」RNA进行攻击,为了逃避检测,RNA中的「U」已经被ψ所取代了。

然而,事实证明,含有更多G和C的RNA也能更有效地转化为蛋白质,这已经在疫苗RNA中实现了只要有可能就用G和C替换许多字符。

真正的刺突蛋白

疫苗RNA的下3777个字符类似于「密码子优化」,可以添加大量的C和G。

bcce6802-4ee2-11eb-8b86-12bb97331649.png

这里我们看到同义的RNA变化。例如,在第一个密码子中CUU变成了CUG。这给疫苗增加了另一个「G」,我们知道这有助于提高蛋白质的生产。

当我们比较疫苗中的整个刺突蛋白时,所有的变化都是同义的。除了两个,这就是我们在这里看到的。

上面的第三和第四个密码子代表了实际的变化。那里的K和V氨基酸都被P或脯氨酸所取代。对于「K」,这需要改变三次(「!!」),而对于「V」,这只需要改变两次(「!!」)。

事实证明,这两个变化极大地提高了疫苗的效率。

那么这里发生了什么?如果你看一个真正的冠状病毒粒子,你可以看到刺突蛋白:

这些刺钉被安装在病毒体内(「核衣壳蛋白」)。但问题是,我们的疫苗只会产生刺突,我们不会把它们植入任何一种病毒体内。

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

真正的冠状病毒是带着尖刺的。在这种情况下,疫苗不会很有效。

那么该怎么办呢?

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

蛋白质的末端,下一步

如果我们浏览其余的源代码,我们会在刺突蛋白的末端遇到一些小的修改:

bd4d5770-4ee2-11eb-8b86-12bb97331649.png

在蛋白质的末端,我们会发现一个「停止」密码子,在这里用小写的「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疫苗的是:

eed39872-4ee2-11eb-8b86-12bb97331649.png

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

太长不看版

如果上面的一切让你感到云里雾里,作者在这里为您准备了一份「太长不看版」:

帽子来确保RNA看起来像普通的mRNA

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

密码子优化信号肽,将刺突蛋白送到正确的位置(100%从原始病毒复制)

原始刺的密码子优化版本,有两个「脯氨酸」替代,以确保蛋白质以正确的形式出现

一个已知的成功和优化的3 ' UTR

一个有点神秘的多聚腺苷酸尾(Poly-ATail),里面有一个无法解释的「连接器

密码子优化在mRNA上增加了大量的G和C。与此同时,用ψ(1-甲基-3 ' -伪尿酰ψ)而不是U来帮助逃避我们的免疫系统,因此mRNA会停留足够长的时间,所以我们实际上可以帮助训练免疫系统。

文章在reddit上引起了广泛讨论,学科间的边界似乎也越来越模糊。

一位网友看完后直言:我通过稍微修饰U核苷酸,可以使RNA越过我们的「安全系统」。我们的安全系真的糟透了!

你呢?你怎么看?

责任编辑:lq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 计算机
    +关注

    关注

    19

    文章

    6649

    浏览量

    84504
  • 编码
    +关注

    关注

    6

    文章

    835

    浏览量

    54457
  • 代码
    +关注

    关注

    30

    文章

    4555

    浏览量

    66751

原文标题:一针重复2万亿段代码,我「逆向工程」了辉瑞疫苗!

文章出处:【微信号:LinuxHub,微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    请问STM8中的RAM会像51系列一段初始化清零代码吗?

    最近在做防止复位脚复位的程序,想利用RAM的保存数据特性做一段复位恢复,STM8 中的RAM会像51系列一段初始化清零代码吗?
    发表于 04-16 06:49

    STM32F103C8下载程序过程中中断,然后上电运行MCU,此时MCU在跑哪一段代码

    STM32F103C8下载程序过程中中断,然后上电运行MCU,此时,MCU在跑哪一段代码哪些外设在工作?多谢
    发表于 03-29 08:05

    将MULTICH_CONNECT_PCB SDL线连接到ESP8266时,代码挂起的原因?

    我编写了一段简单的代码,通过 I2C 访问 esp8266。 bilnk led 和 i2c_write ; LOOP 当 SDL 没有连接到 ESP8266 时,循环
    发表于 03-05 07:21

    Falsh和RAM中运行同一段代码,执行效率相同吗?

    在Flash中运行程序和在RAM中运行程序,同一段代买执行时间是不是在RAM中更短,如果RAM中执行效率更高,如何将代码全部拷贝到RAM中运行
    发表于 02-19 07:10

    求教下source insight 的使用问题,关于#if #endif中的代码变暗的

    source insight 4.0在实际使用时,#if 0#endif会使中间的代码变暗,但假如我的#if 0是通过宏定义的,如图的IOT_PTINTF_TEST为0,代码就不会
    发表于 12-08 11:06

    python处理重复值的方法

    数据结构。通过将重复值添加到集合中,可以很容易地将重复值去除。以下是使用集合处理重复值的示例代码: # 创建一个包含重复值的列表 my_li
    的头像 发表于 11-21 15:47 567次阅读

    【阿尔达H-30T恒温电烙铁试用体验】一支很用心的烙铁,阿尔达H-30T恒温电烙铁

    热效果好。 右边是我现在用的烙铁,在阿尔达H-30T恒温电烙铁面前简直没法用,有鉴于其历史,先束之高阁…… 二、一支实力的烙铁 阿尔达烙铁的三大特色优势:1)热的够快!2)全面彻底的静电漏电防范
    发表于 11-13 23:00

    为什么要重复接地?重复接地如何做?

    重复接地指的是:在低压配电系统中,保护接地导体PEN或保护导体PE(俗称地线)除了在电源处与系统接地(亦称工作接地)一起与大地相连(即与接地装置相连)以外,还将保护接地导体PEN或保护导体PE(俗称地线)的一点或多点与大地再次作金属连接,称为重复接地。
    的头像 发表于 10-16 09:59 1224次阅读
    为什么要<b class='flag-5'>重复</b>接地?<b class='flag-5'>重复</b>接地如何做?

    优化重复冗余代码的8种方式

    日常开发中,我们经常会遇到一些重复冗余的代码 。大家都知道重复代码不好 ,它主要有这些缺点:可维护性差、可读性差、增加错误风险 等等。最近呢,我优化了一些系统中的
    的头像 发表于 09-11 09:47 358次阅读

    如何使用C代码中的比特幅操作

    设置/ 清除, 从而增加操作速度 。 本样本展示了如何使用 C 中的比特幅操作, 使用简单的预处理器宏来进行存取 。 您可以在下列时间下载样本代码http://www.nuvoton.com/resources-downlo. 0102175736 nuvoton
    发表于 08-31 09:58

    基于STM32单片机的疫苗箱系统设计

    本次疫苗箱的设计使用STM32单片机作为控制中心,该系统由温湿度检测模块,GPS定位模块,RFID刷卡模块和无线通信模块组成,检测到的数据通过ESP8266模块上传到上位机端,检测到刷卡增加则显示疫苗数量加1,检测到刷卡减少则显示疫苗
    的头像 发表于 07-25 11:01 346次阅读
    基于STM32单片机的<b class='flag-5'>疫苗</b>箱系统设计

    在Verilog中利用函数将重复性的行为级设计进行提取

    在 Verilog 中,可以利用任务(关键字为 task)或函数(关键字为 function),将重复性的行为级设计进行提取,并在多个地方调用,来避免重复代码的多次编写,使代码更加的简
    的头像 发表于 06-02 11:39 860次阅读
    在Verilog中利用函数将<b class='flag-5'>重复</b>性的行为级设计进行提取

    html页面末尾的重复代码是怎么回事?如何处理?

    大家好!我正在测试这个很棒的网络服务器,我总是看到相同的行为:HTML 页面在文件末尾重复代码,例如: index.tpl ...
    发表于 05-19 10:28

    斩波电路把电压调成一段一段不连续的直流电什么作用呢?

    斩波电路把电压调成一段一段不连续的直流电什么作用呢?
    发表于 05-11 17:13

    斩波电路把电压调成一段一段不连续的直流电什么作用呢?

    斩波电路把电压调成一段一段不连续的直流电什么作用呢?
    发表于 05-11 17:12