《疫苗接種知識:台灣大學》饅頭主播
此資料主要摘譯、整理自美國CDC、Uptodate、各大期刊網站、學會及專家資訊,主要針對COVID-19疫苗常見疑問、疫苗簡介、特殊族群及罕見的不良反應,進行面向家庭醫師/基層醫療人員的介紹,一般民眾可先參考COVID-19疫苗Q&A、美國CDC Q&A或美國CDC疫苗迷思。
值得注意的是,這份資料本來大多是基於有明確研究證據的脈絡來書寫,某些政策與醫療行為可能跟台灣狀況不盡相同。
感謝費城兒童醫院提供的FAQ與Addison Lin團隊翻譯的中文版本。
Fact sheet:NEJM Vaccine FAQ, Canada, Canada, Ontario, Toronto, HSE (Ireland)
Q:打疫苗可以預防COVID感染嗎?
A:接種第一劑疫苗21天後,仍有少數機會會罹患COVID-19,但可有效預防COVID-19重症,大幅減少住院機會及死亡。目前無足夠證據顯示,接種疫苗後若仍感染,是否可降低病毒排出或傳染給他人的機率;但接種至少一劑21天後,似乎可減少家庭內傳染,且以色列研究顯示接種第一劑BNT疫苗後可減少體內病毒量,英國研究也有相似的結果。因此接種完疫苗後,仍須遵守防疫新生活原則,勤洗手、佩戴口罩、保持社交距離。
Q:什麼樣的人建議暫緩施打或選擇適當疫苗?
慢性病控制不穩定、發燒或患有急性中重度疾病者且病情不穩時。
曾有血栓合併血小板低下症候群或肝素引起之血小板低下症,避免接種AZ疫苗。
對核磁共振顯影劑(gadolinium)、電腦斷層含碘顯影劑(Ultravist、Omnipaque、Opitray...)或以下藥物(Niflec、Depo-Medrol、Depo-Provera、Micera、Neulasta、Herceptin...)產生過敏反應,應告知醫師、或許可建議施打非Moderna疫苗。
其他暫緩或選擇疫苗可參考下方特殊族群。
Q:什麼樣的老人建議暫緩打疫苗?
A:老年人若感染,重症的比例較高,因此衡量利大於弊之下,都建議接種疫苗。挪威專家指出,在生活完全無法自理且輕微病症就難以康復、預期壽命很短(少於6個月)的老人接種疫苗應謹慎評估利弊,因為輕微的副作用可能造成嚴重後果。更多詳細資訊請見年長者。
Q:AZ疫苗的常見副作用有哪些?
A:第一劑接種後,主要副作用為注射部位疼痛(58%)、疲倦(52%)、肌肉痛(48%)與頭痛(37%);發燒18-49歲約32.7%、50-64歲約13.8%、65歲以上約4.6%,並且不超過2天。第二劑接種後,主要副作用為注射部位疼痛(45%)、疲倦(25%);發燒約佔3.0%。常見不良反應低於第一劑。其他副作用可參考下方。
Q:Moderna疫苗的常見副作用有哪些?
A:第一劑接種後,主要副作用為注射部位疼痛(18-49歲約81%、50-64歲約62%、65歲以上39%)、疲倦(35%)、肌肉痛(28%)、頭痛(18%);發燒(3.1%)通常不超過2天。Moderna第二劑接種後,三日內常見不良反應高於第一劑,主要有注射部位疼痛(18-49歲約90%、50-64歲約77%、65歲以上57%)、發燒有35.6%,18-49歲接種後疲倦(>57%)、注射部位腫脹(>52%)、肌肉痛(>43%)、頭痛(>37%)、發冷(>22%)。這些症狀通常隨年齡層增加而減少,並於數天內消失。其他副作用可參考下方。
Q:打完疫苗後注射的手臂很痛,我該怎麼辦?
A:建議參考: 台灣運動醫學學會以及台灣復健醫學會(詳細圖文建議)
注射部位疼痛是常見的疫苗副作用。手臂請盡量放鬆並保持活動,避免僵硬。也可以輕微冰敷,等到消腫後(約1~2天),改為間歇性溫敷。如果真的非常疼痛,合併發燒,紅腫範圍持續擴大,可以諮詢醫師。參考資料:CDC、EM、healthgrades。
Q:打完疫苗會讓我變成萬磁王嗎?會讓我的手臂可以吸附金屬嗎?
A:不會!! COVID疫苗成份沒有任何金屬或是磁力物質。美國CDC、臺灣事實查核中心。
Q:我打完疫苗之後發燒,要去看醫生嗎?可以預防性吃普拿疼嗎?
A1:接種後2天內發燒可先使用acetaminophen退燒, 其他藥物(如ibuprofen)請與醫師討論,未持續超過2天原則上無須採檢,於退燒24小時後可返回醫院或單位上班,但如為有較高暴露風險者或經評估有採檢需要者,仍應進行通報採檢。其他資訊請參考下方。
若接種2天後持續發燒,甚至出現新的呼吸道症狀、腹瀉、嗅味覺改變,建議請醫師評估。
A2:注射疫苗前不建議預防性使用普拿疼Acetaminophen或NSAID藥物,因為可能會影響免疫反應。(NEJM FAQ)
Q:是否可以使用抗組織胺(anti-histamine)預防嚴重的過敏性休克呢?
A:美國CDC不建議,因為抗組織胺藥不能預防過敏性休克(Anaphylaxis),如果預防性使用可能會掩蓋皮膚症狀,導致延誤診斷和處理過敏反應。Moderna約百萬分之2.5~24、BNT約百萬分之11.1~13.63、AZ約為百萬分之16.83。其他資訊請參考施打站準備、過敏性休克。
Q:怎樣的人比較會發生疫苗誘發的血栓呢?
A:目前因全球發生個案數太少無明確的風險因子,且主要發生於AZ及J&J。一開始認為年輕人、女性較易產生血栓,但可能起因於早期施打疫苗群體主要也是年輕、女性為主而造成偏差,後來男性案例較多可能因女性施打減少。目前粗估血栓約為每十萬人中0.79至3.77人(跟一張統一發票中三獎、四獎的機率差不多),而感染COVID住院中發現靜脈血栓約為3-20%。
Q:如果打完疫苗引發的血栓會有什麼症狀?
A:施打COVID-19疫苗後 4-28 天內,開始發生以下症狀之一
1. 嚴重持續性頭痛、視力改變或癲癇(任一皆為腦靜脈竇血栓之可能症狀)。
2. 嚴重且持續腹痛超過 24 小時以上(腹內靜脈血栓之可能症狀)。
3. 下肢腫脹或疼痛(深層靜脈血栓之症狀)。
4. 嚴重胸痛或呼吸困難(肺栓塞之可能症狀)。
5. 皮膚出現自發性出血點、瘀青、紫斑等。其他資訊可參考下方。
Q:什麼是疫苗保護力? 我打了保護力 95%的Moderna是不是代表只有5%機率會得病?
A:可以分成兩個部分:Efficacy(效力) 與 Effectiveness(有效性)。
Efficacy(效力)是Relative risk reduction(相對風險下降率)的概念。在臨床試驗中會把受試者隨機分成兩組,一組為安慰劑組,另一組為疫苗組,如果安慰劑組有80%得病,疫苗組有10%得病,那Efficacy就是 (80%-10%)/80%=87.5%,也就是疫苗組相對安慰劑組減少87.5%的感染機率。此外,臨床試驗設定的outcome也會影響疫苗效力的結果:有症狀感染、重症、死亡,各自所計算出的efficacy就會不同。所以打了保護力95%的Moderna疫苗代表跟沒打的人比起來可以減少95%的有症狀感染的機率。
Effectiveness(有效性)是在真實世界中,觀察有施打疫苗與沒施打疫苗的人染病的差距,與臨床試驗不同,真實世界中包含較多無法準確控制的因素(如:接種者的年紀、本身疾病/用藥、疫苗儲存溫度...),但也較符合實際狀況,讓社會能整體評估這個疫苗的實用性。
CDC vaccine effectiveness study
Q:為什麼兩種疫苗的效力不能直接比較?
A:因為臨床試驗進行的時間與地點不一樣。Moderna和BNT在流行尚未大爆發的時候在美國國內進行研究,所以相對得病的比例可能較低。相反的J&J剛好在美國國內疫情大爆發的時候做研究而且有包含其他國家受試者(南非、巴西),可能有較高比例的變種株(傳播力較強,致病力較高)。因此,如果要直接比較兩種疫苗,必須在相同臨床試驗,相同地點、時間、相同收案/排除條件,才有比較上的意義與價值。
Vox:Why you can't compare Covid-19 vaccines
Q:兩劑型的疫苗是否可以只打一劑就好?
A:目前仍建議完整接種兩劑。此處不討論公衛政策與國家施打涵蓋率。目前尚無足夠證據說明只打一劑疫苗有多少的保護力,但目前研究(大型前瞻性研究、小型研究)指出,施打一劑疫苗後,觀察28天後可達到臨床上8成以上的效力。但也有研究指出BNT疫苗若只打一劑恐怕無法對英國和南非變種病毒產生足夠保護力,且施打兩劑後抗體表現也較痊癒者高。
Q:是否可第一劑打AZ, 第二劑打Moderna (Mixing and Matching)?
A1:台灣CDC目前不建議,因為尚無足夠安全性與疫苗效力證據。但若已如此施打,也不需補打。如接種疫苗後出現症狀經醫師評估懷疑與疫苗施打有關,且通報疫苗不良事件通報系統(VAERS)者,建議依原第一劑疫苗廠牌之接種間隔、以不同技術產製的疫苗完成接種。
A2:根據臨床試驗(RH Shaw, CombiVacS, D Hillus, Hannover, Saarland)及專家建議,加拿大NACI於2021/06/01更新疫苗mixing-matching建議,考量有疫苗不足、VITT風險、增加短期免疫反應,可於第一劑AZ/COVISHIELD疫苗後間隔8~12週施打mRNA疫苗(BNT/Moderna),但是會增加輕度到中度的不良反應;若第一劑接種mRNA疫苗則可混打他種mRNA疫苗,但是第二劑不建議改為AZ/COVISHIELD疫苗`。後續Com-COV研究針對AZ/BNT混打也有類似的結果,混打可增加抗體表現,且似乎並無相關嚴重不良反應。瑞典針對AZ/Moderna混打也有增加抗體表現、副作用較多的情形(但無統計學上差異),似乎對南非變種有較好的保護力。
* 歐洲似乎相對較接受混打的策略,甚至認為可以減少對vaccine virus vector本身產生的immunity,也可能對不同病毒株有更好的保護力。參考:歐盟執行委員會
Q:COVID疫苗對變異株的保護力為何?
A:英格蘭公共衛生署公佈針對Delta變異株的資料顯示(6/21/2021):施打第一及第二劑後,減少住院的有效性:輝瑞BNT:第一劑:94%, 第二劑:96%。AZ:第一劑:71%, 第二劑:92%。輝瑞和AZ疫苗皆具有高度保護力。能夠避免感染Delta變異株,轉而住院重症的防護率超過九成。根據英國數據顯示,40多歲以下的人,佔Delta變異株病例數的75%。60 多歲的人中,已有90% 的人接種疫苗,僅佔病例數的4%。從數據仍可見疫苗正發揮強大的作用。
完成兩劑AZ疫苗注射,對Delta/Alpha variant的效力可達92%/86% (2021/6/16)
完成兩劑mRNA疫苗注射,對Beta/Alpha variant的有效性可達77%/86%(2021/07/13)
變異株與疫苗政策:NEJM 2021/6/23 SARS-CoV-2 Variants and Vaccines
Q:接種mRNA疫苗會改變我的DNA?
A:否。COVID-19 mRNA疫苗不會以任何方式改變您的DNA或與您的DNA產生交互作用。mRNA疫苗作用機轉是教導人體細胞自行產出SARS-CoV-2病毒蛋白質片段(疫苗抗原),進而誘發體內產生免疫反應。疫苗中的mRNA永遠不會進入細胞核(人體DNA存在的地方)。
Q:腺病毒載體疫苗AZ會鑲入人體的DNA、誘發癌症?
A:非複製型腺病毒載體疫苗是利用修飾後的腺病毒做為載體,病毒的DNA嵌入可表現SARS-CoV-2病毒棘蛋白的基因,此腺病毒不具人體內複製力、亦無人體致病性。接種後進入人體宿主細胞內表達疫苗抗原(SARS-CoV-2棘蛋白),進而誘導宿主對該疫苗抗原蛋白產生免疫反應。由病毒載體所攜帶的基因片段並不會嵌入人體的DNA。 (台灣CDC疫苗原理)
目前也沒有證據顯示病毒棘蛋白有任何細胞毒性。(POLITIFACT)
Q:我有在吃抗凝血劑(anticoagulant)是否可以打疫苗?
A:可以!! 吃抗凝血劑並非施打疫苗的禁忌症。台灣腦中風學會
若您服用的是單線 / 雙線抗血小板藥物,施打疫苗前不需要停藥或調整劑量,但施打後建議加壓施打處2 / 5~10分鐘以上,並確認是否止血或有血腫狀況。
若您服用的是wafarin,在施打疫苗前請確認您回診的凝血功能檢查(INR),若皆穩定且小於3,可直接進行疫苗注射,若您最近的INR不穩定或大於3,則建議回診與您的醫師討論。若預定施打疫苗時間與服藥時間非常接近,可考慮暫緩服藥,施打完成確認無血腫之後再服用當天藥物。施打完成後加壓施打處5~10分鐘。若您服用的是新型抗凝血劑(NOAC), 施打疫苗前不需要做凝血功能檢查。若預定施打疫苗時間與服藥時間非常接近,可考慮暫緩服藥,施打完成確認無血腫之後再服用當天藥物。施打完成後加壓施打處5~10分鐘。
2021 EHRA NOAC guide(p.10) 吃新型抗凝血劑(NOAC)病人,一天一次(QD)的藥可以延遲到注射完疫苗之後3小時再服用,一天兩次的藥(BID)可以跳過打疫苗前的那次服藥。
Q:我有在吃賀爾蒙/避孕藥,可以打疫苗嗎? 要停藥多久?
A:不用停藥可以直接打!! 台灣CDC曾建議要停藥28天再打,但已經在5/21修正建議可以直接打!! 吃避孕藥,血栓的風險,大約2000人會有一個(十萬人有50個)打AZ 疫苗,血栓的風險,大約是十萬個有一個。吃避孕藥比打AZ疫苗有高50倍的風險產生血栓。兩種血栓發生的機轉是不一樣的。荷爾蒙是讓凝血因子多了,血液太黏稠,所以產生血栓,發生的位置,大多在深部靜脈。AZ 疫苗發生的血栓,比較像某種自體免疫的疾病,血小板是少的,大多發生在腦膜上的靜脈。(資料來源:雙和醫院副院長賴鴻政教授)
Q:我在吃類固醇(glucocorticoid)若想打疫苗是否需要停藥?
A:若您服用的類固醇劑量<20mg/day prednisolone,基本上劑量不需要調整,也不需要停藥。若劑量>20mg/day,建議要等到減低(taper)劑量到<20mg/day再施打疫苗(BC),並建議與您的風濕免疫科醫師討論。若是可延緩的注射型的類固醇,可考慮接受疫苗後14天再注射類固醇,以達到最好的效果。(ARMA)
Q:我有在吃抗病毒藥物可以打疫苗嗎?
A:可以!! 目前沒有證據顯示抗病毒藥物會影響疫苗注射後的免疫反應。
Q:我對某些食物/藥物過敏,可不可以打疫苗?
A:基本上可以施打,除非是對前一劑施打的COVID疫苗或已知的疫苗內容物產生過敏反應,但若您有任何疑慮或過敏性休克病史,建議與醫師討論諮詢。若最後決定接受疫苗注射,建議注射後確實觀察30分鐘。若曾經對核磁共振顯影劑、電腦斷層顯影劑或以下藥物(Niflec、Depo-Medrol、Depo-Provera、Micera、Neulasta、Herceptin...)產生過敏反應,應告知醫師,或許可建議施打非Moderna疫苗。(詳細資訊請見下文)
Q:我曾對流感疫苗有過敏反應,可不可以打COVID疫苗?
A:可以,目前尚未有證據顯示兩者之間有相關性。
Q:我在抽菸/戒菸可以打疫苗嗎?
A:強烈建議施打疫苗!!! 也強烈建議您放下手中的菸!!! 趁著這次疫情一鼓作氣把菸戒了!!加油!! 吸菸是COVID重症風險之一,吸菸產生的氣溶膠,也可能擴大病毒傳播範圍(電子菸也是同樣現象)。使用戒菸藥物不須停藥(包含戒必適、尼古丁替代療法)。
Q:我剛打完HPV/HBV/MMR…疫苗,要隔多久可以打COVID疫苗?
A:儘管沒有COVID-19疫苗與其他疫苗一起施打的安全性與有效性資料,美國CDC目前建議COVID-19疫苗可與其他疫苗間隔任何時間甚至同時施打。美國ACIP過去曾建議在施打COVID-19疫苗後的14天內不宜施打其他疫苗,但此建議已經被修正,因為可能造成疫苗施打的延後。目前不確定同時施打會不會造成更頻繁或更強的局部或全身副作用。
*英國建議帶狀皰疹的活性減毒疫苗間隔7天,避免COVID疫苗造成的發炎去減少對活性疫苗的免疫反應。green book
台灣疾管署2021/06/13修改建議:接種COVID-19疫苗,應與其他疫苗間隔至少 14 天。如小於上述間隔,各該疫苗無需再補種。
Q:打肺炎鏈球菌疫苗是否可以減少COVID感染?
A:目前沒有直接證據可預防新冠肺炎,但根據研究指出,年紀大於65歲施打肺炎鏈球菌13價疫苗(PCV13)能減少COVID確診、住院及死亡率,而23價疫苗(PPV23)則無統計學意義,但另一篇針對PPV23則有預防確診及死亡率的效果;而針對特殊族群也有統計意義上的負相關,另一篇及病例對照研究顯示施打PCV13可能減少確診率;但也有研究指出,大於65歲施打肺鏈疫苗跟住院率、死亡率並無差異。因此,減少COVID-19感染是否是因為施打肺炎鏈球菌疫苗的族群大多為較高收入、較注意健康者或有其他族群特性,而非直接或間接保護,是值得考慮的事。對於公共衛生而言,在無法立即接種COVID疫苗的情形下,或許可先施打肺鏈疫苗提升針對肺炎鏈球菌的保護力,進而降低因細菌型肺炎的住院及死亡率。
Q:是否可在疫苗注射期間做結核桿菌相關檢驗(TST或IGRA)?
A:臺灣CDC建議先完成檢驗(IGRA或TST)再接種疫苗;IGRA抽血完成後可同日或異日接種疫苗;惟TST檢驗須完成判讀後再接種疫苗,以避免疫苗接種後影響TST判讀結果。
美國CDC:目前沒有證據顯示TST或IGRA會影響COVID mRNA疫苗的效力。根據ACIP,非活化(inactive)疫苗並不會影響結核桿菌相關檢驗,而活性減毒疫苗(如:MMR)可能會降低TST的反應造成偽陰性的結果。 COVID mRNA疫苗並非活性減毒疫苗,但目前也不清楚在其接種後的最初4週是否會影響TST/IGRA檢驗結果,因此針對一般無症狀(入住機構等...行政需求)民眾建議在注射疫苗前、當天或注射後4週再接受結核桿菌相關檢驗;其他有症狀或有高風險結核桿菌暴露人員建議與醫療團隊諮商討論。
Q:打完COVID疫苗要隔多久可以捐血?
A:AZ要間隔14天; Pfizer, Moderna不須間隔!! (捐血中心)
Q:我是孕婦/哺乳中可以打疫苗嗎?
A:建議接種!! 雖然目前安全性證據有限,但孕婦也屬於重症高風險族群,權衡感染與安全,還是建議接種。優先選擇mRNA疫苗,但如果第一劑已施打AZ, 第二劑還是建議施打AZ。此外,哺乳中也可以施打疫苗,抗體也會出現在母乳中,可能對新生兒有保護效果。
(其他詳細資訊見內文)
Q:我有高血壓/糖尿病/腎臟病(洗腎)/中風/心臟疾病/肺部疾病/氣喘/肝臟疾病/神經疾病/免疫不全疾病/肥胖/吸菸/貧血等,可以打疫苗嗎?
A:強烈建議!! 有以上疾病皆建議接種疫苗!男性、年紀超過65歲、住在安養或長照機構及有以上疾病且未控制,可能為COVID感染後重症的高危險群!且接種疫苗後能有效降低住院及重症的情形,因此強烈建議施打疫苗!
注射疫苗前不須停用胰島素、血糖藥、血壓藥、膽固醇用藥,請繼續規律服藥。
對於突發心律失常死亡綜合症的病患(包含LQTS, Brugada syndrome, CPVT等),目前並無相關研究指出不適合哪種疫苗,建議施打前可諮詢心臟專科醫師,過敏性休克時一樣可施打epinephrine;另外,布魯蓋達氏症候群(Brugada syndrome)的患者接種後若發燒則盡早退燒,避免發燒誘發致死性心律不整。
補充:洗腎病人建議施打,近日有新聞指出有洗腎患者在打完AZ疫苗之後過世,讓不少腎友對疫苗卻步。根據2019年台灣腎病年報,2017年這一整年總共的透析患者死亡人數為9753 人,所以平均一天會有 26.7 位透析腎友過世。這些死亡的病人,絕大部分都有糖尿病、高血壓或心血管疾病的共病。「在這樣的背景值之下,必須去釐清打疫苗跟死亡的原因是不是有直接的相關:還是這個事件,只是剛好是背景值的呈現!」
Q:中風後多久才可以打疫苗?
A:據台灣腦中風學會,腦中風並非施打新冠肺炎疫苗之禁忌症。但由於腦中風病人,在剛發作之急性期,可能會出現中風症狀惡化、再次中風、心臟血管事件、感染等相關併發症,因此建議在中風急性期(大約1~2週)過後,經醫師評估整體身體狀況已穩定,再施打疫苗。
Q:有腦血管栓塞的病史,可以打疫苗嗎?
A:可以,但若腦血管栓塞是屬於腦部靜脈栓塞或與特殊免疫或血液疾病相關,則建議與醫師討論後決定。施打新冠肺炎疫苗後產生之罕見血栓併發症,目前的研究認為上是體內免疫反應產生特殊抗體(如anti-platelet factor 4 抗體)而引起血栓,與多數腦中風栓塞的血管病變或心律不整產生血栓的機轉不同。此外,疫苗可降低感染新冠肺炎本身引起之血栓風險,並減少重症比例及死亡率,因此有腦血管栓塞病史的病人仍可接種新冠肺炎疫苗。(台灣腦中風學會)
Q:有血栓相關疾病病史(thromboembolic disease)可否施打COVID疫苗?
A:大部分人建議施打!! 疫苗相關的血栓機轉較類似於Heparin-induced thrombocytopenia,目前尚無證據顯示一般靜脈血栓病史(無合併血小板低下)或thrombophilic disorder有較高機率產生此不良反應,但如果過去曾發生血栓合併血小板低下症候群,或肝素引起之血小板低下症者,應避免接種AZ疫苗。
Q:我有巴金森氏症,可不可以打疫苗? 兩天前我接種了COVID-19疫苗,我的顫抖更嚴重,跟疫苗有關嗎?
A:據台灣巴金森之友協會,建議病友施打疫苗,並接種在較不便的手臂(減少健側因痠痛而造成不便)!目前沒有證據顯示疫苗會如何影響巴金森症狀的大量數據。對於部分病友來說,巴金森症狀在短期內會變得更糟,但接下來的幾天內預期能夠恢復到以前的基準。
Q:我有癲癇,可不可以打疫苗? 新冠肺炎疫苗會讓我癲癇發作增加嗎? 疫苗會不會影響到癲癇藥物濃度?
A:可以!! 注射疫苗後可能會發燒,若您的癲癇容易在發燒時發作建議與醫師討論,並可於注射疫苗後服用退燒藥。依藥物動力學及臨床經驗,疫苗與抗癲癇藥沒有明顯交互作用,目前沒有證據顯示會影響藥物濃度。(資料來源:台灣癲癇醫學會)
Q:我有蠶豆症,可不可以打疫苗?
A:可以!!目前並無證據顯示哪種疫苗較好,蠶豆症患者應施打當地所能提供的疫苗為主。
Q:風濕疾病患者是否能注射新冠肺炎疫苗(COVID-19 vaccine)?
A:基本上可以!! 領有重大傷病之病友,位列公費疫苗施打對象之第九順位。
參考資料:TCR COVID20210625 民眾版 (其他資訊見下方)
Q:我有後天免疫缺乏症候群(people with HIV),可以打疫苗嗎?
A:目前尚未有完整研究,但聯合國愛滋病規劃署建議可考慮施打疫苗。也有研究指出部分族群,注射AZ疫苗後似乎可產生與對照組無異的抗體濃度。(其他資訊見下方)
Q:我擔心/曾有帶狀皰疹(Herpes Zoster),可以打疫苗嗎?
A:如果目前正在治療帶狀皰疹,建議暫緩施打直到治療完成。目前觀察、文獻回顧指出,COVID感染1~2周後可能會出現帶狀皰疹。另外個案研究也指出,mRNA疫苗、不活化疫苗施打後,似乎會誘發帶狀泡疹,特別是自體免疫患者、免疫功能低下患者,但帶狀皰疹是有疫苗可注射且可治療,因此仍建議施打,接種後需注意!
*台灣CDC建議COVID疫苗與所有疫苗間隔14天。美國CDC認為COVID疫苗與任何疫苗不需要間隔。英國建議帶狀皰疹的活性減毒疫苗與COVID疫苗間隔7天,避免COVID疫苗造成的發炎去減少對活性疫苗的免疫反應。green book
Q:我擔心/曾有格林─巴利症候群(Guillain-Balre´ Syndrome)、貝爾氏麻痹症(Bell's palsy),可以打疫苗嗎?
A:可以!! 目前沒有明確證據顯示,疫苗會誘發GBS、Bell’s palsy或使這些病症復發,反而是感染COVID後可能會誘發!也因此台灣及美國CDC都未將這些病症列為接種疫苗的禁忌症,但施打後仍須注意!
https://docs.google.com/document/d/e/2PACX-1vRonbj6D3bX0UU1mTTjQO8u5iynhDUg-8d0Rf8qnKcNCS5o3sirFqF6fSh6Jc5YKYyNFNi9jRhpw3VD/pub
「轉譯後修飾位置」的推薦目錄:
- 關於轉譯後修飾位置 在 文茜的世界周報 Sisy's World News Facebook 的最佳貼文
- 關於轉譯後修飾位置 在 國家衛生研究院-論壇 Facebook 的最讚貼文
- 關於轉譯後修飾位置 在 Taipei Ethereum Meetup Facebook 的最佳貼文
- 關於轉譯後修飾位置 在 今天分子生物學了沒- #國考倒數15又4分之1天... | Facebook 的評價
- 關於轉譯後修飾位置 在 國立台東高級中學 的評價
- 關於轉譯後修飾位置 在 4-2-10 真核生物的轉譯後修飾 - YouTube 的評價
- 關於轉譯後修飾位置 在 typescript-book/README-zh_CN.md at main - GitHub 的評價
轉譯後修飾位置 在 國家衛生研究院-論壇 Facebook 的最讚貼文
【mRNA疫苗臨床試驗95%有效! mRNA疫苗會是COVID-19的救世主嗎?】:發表在新英格蘭醫學期刊(NEJM)上的兩篇論文提到【註1】,兩個mRNA疫苗臨床研究分別收案3萬多人與4萬多人,在打完疫苗之後的兩個月追蹤當中,施打疫苗讓COVID-19感染率減少了95%!【註3】
在本文開始前,在此先簡述說明一下「分子生物學的中心法則」,建立對DNA、RNA、mRNA的基礎認識。
■分子生物學的中心法則 (central dogma)(圖1)
用最簡單最直接的方式來描述的話,生物體的遺傳訊息是儲存在細胞核的DNA中,每次細胞分裂時,DNA可以複製自己 (replication),因而確保每一代的細胞都帶有同樣數量的DNA。
而當細胞需要表現某個基因時,會將DNA的訊息轉錄 (transcribe) 到RNA上頭,再由RNA轉譯 (translate) 到蛋白質,而由蛋白質執行身體所需要的功能。這也就是所謂的分子生物學的中心法則 (central dogma)。
對於最終會製造成蛋白質的基因來說,RNA是扮演了中繼的角色,也就是說遺傳訊息本來儲存在 DNA 上頭,然後經過信使 RNA (messenger RNA, mRNA) 的接棒,最後在把這個訊息傳下去,製造出蛋白質。【註4】
■冠狀病毒的基因組由RNA構成
RNA不如DNA穩定,複製過程容易出錯,因此一般RNA病毒的基因組都不大。但冠狀病毒鶴立雞群,基因組幾乎是其他RNA病毒的三倍長,是所有RNA病毒中最大、最複雜的種類。
冠狀病毒還能以重組RNA的方式,相當頻繁地產生變異,但是基因組中位在最前端的RNA序列相對穩定,因為其中有掌控病毒蛋白酶與RNA聚合酶的基因,一旦發生變異,冠狀病毒很可能無法繼續繁衍。
目前抗病毒藥物的研發策略之一,正是設法抑制病毒RNA複製酶(RdRp)。而最前端的RNA序列也是現階段以反轉錄聚合酶連鎖反應(RT-PCR)檢驗新冠病毒時鎖定的目標。中央研究院院士賴明詔表示,不同病毒的核酸序列當中還是有各自的獨特變異,正好用來區分是哪一種冠狀病毒。【註5】
■SARS-CoV-2是具有3萬個鹼基的RNA病毒
中國科學院的《國家科學評論》(National Science Review)期刊【註2】,2020年3月發表《關於SARS-CoV-2的起源和持續進化》論文指出,現已發生149個突變點,並演化出L、S亞型。
病毒會變異的原因可略分成兩種:
▶一是「自然演變」
冠狀病毒是RNA病毒,複製精準度不如DNA病毒精準度高,只要出現複製誤差,就是變異。
▶二是「演化壓力」
當病毒遇到抗體攻擊,就會想辦法朝有抗藥性的方向演變,找出生存之道。【註6】
■mRNA 疫苗是一種新型預防傳染病的疫苗
近期,美國莫德納生物技術公司(Moderna)與輝瑞公司(Pfizer),皆相繼宣布其COVID-19 mRNA疫苗的研究成果。
莫德納公司在2020年11月30日宣布他們的mRNA-1273疫苗在三期臨床試驗達到94.1%(p<0.0001)的超高保護力,受試者中約四成為高風險族群(患糖尿病或心臟病等),7000人為高齡族群(65歲以上),另也包含拉丁裔與非裔族群(報告中未提到亞洲裔)。
傳統大藥廠輝瑞公司,亦在美國時間11月18日發佈令人振奮的新聞稿:他們的RNA疫苗(BNT162b2)三期臨床試驗已達設定終點,保護力高達95%(p<0.0001)。該試驗包含了4萬名受試者,其中約有四成受試者為中高齡族群(56~85歲),而亞洲裔受試者約占5%。
■mRNA疫苗為什麼可以對抗病毒?
為什麼mRNA疫苗會有用?就讓我們先從疫苗的原理「讓白血球以為有外來入侵者談起」。
在過往,疫苗策略大致上可分為兩種:
● 將病毒的屍體直接送入人體,如最早的天花疫苗(牛痘,cowpox)、小兒麻痺疫苗(沙克疫苗,polio vaccines)、肺結核疫苗(卡介苗,Bacillus Calmette-Guérin, BCG)以及流感疫苗等。
✎補正
卡介苗 BCG(Bacillus Calmette-Guerin vaccine) :卡介苗是一種牛的分枝桿菌所製成的活性疫苗,經減毒後注入人體,可產生對結核病的抵抗力,一般對初期症候的預防效果約85%,主要可避免造成結核性腦膜炎等嚴重併發症。
▶以流感疫苗為例,科學家通常先讓病毒在雞胚胎大量繁殖後,再將其殺死,也有部分藥廠會再去除病毒屍體上的外套膜(envelope),進一步降低疫苗對人體可能產生的副作用後,再製成疫苗。
● 將病毒的蛋白質面具,裝在另一隻無害的病毒上再送入人體,如伊波拉病毒(Ebola virus disease, EVD)疫苗等。
▶以伊波拉病毒疫苗為例,科學家會剪下伊波拉病毒特定的醣蛋白(glycoproteins)基因,置換入砲彈病毒(Rhabdoviridae)的基因組中,使砲彈病毒長出伊波拉病毒的醣蛋白面具。
上述例子都是將致命病毒的部分殘肢送入人體,當病毒被樹突細胞(dendritic cells)或巨噬細胞(macrophages)等抗原呈現細胞(antigen-presenting cell, APC)吃掉後,再由細胞將病毒殘肢吐出給其他白血球,進而活化整個免疫系統,然而,mRNA疫苗採取了更奇詭的路數 - 「讓人體細胞自己生產病毒殘肢!」
■mRNA 疫苗設計原理(圖2)
將人工設計好可轉譯出病毒蛋白質片段的mRNA,包裹於奈米脂質顆粒中,送入淋巴結組織內,奈米脂質顆粒會在細胞中釋出RNA,使人體細胞能自行產出病毒蛋白質片段,呈現給其他白血球,活化整個免疫系統。
■mRNA疫苗設計流程(圖3)
1「科學家獲得病毒的全基因序列」
因社群媒體的發達、公衛專家、病毒研究者以及期刊編輯的努力,這次的COVID-19病毒序列很快的被發表;中國北京疾病管制局的研究團隊,挑選了九位患者,其中有八位,都有前往華南海鮮市場的病史,並從這些患者採取了呼吸道分泌物的檢體,運用次世代定序 (NGS,Next Generation Sequencing) 的方式,拼湊出新型冠狀病毒全部與部分的基因序列。並陸續將這些序列資料,提供給全世界的病毒研究者交互確認,修正序列的錯誤。
2「解析病毒基因群裡所有的功能,選定目標蛋白質(Covid-19病毒棘蛋白質)」
以冠狀病毒為例,通常會選病毒表面的棘狀蛋白(spike protein)。因為棘蛋白分布於病毒表面,可作為白血球的辨識目標,同時病毒需透過棘蛋白和人體細胞受體(receptor)結合,進而撬開人體細胞,因此以病毒繁殖的策略而言,此處的蛋白質結構較穩定。
3「製造要送入人體的mRNA,挑選出會製造棘蛋白的mRNA進行修飾」
挑選會轉譯(translation)出目標蛋白質的mRNA,並進行各項修飾,以提高該人工mRNA在細胞裡被轉譯成蛋白質的效率。如:輝瑞的mRNA疫苗(BNT162b1)選用甲基化(methylation)後的偽尿嘧啶(1-methyl-pseudouridine)取代mRNA裡的原始尿嘧啶(uracil, U),有助於提升mRNA的穩定性,並提高mRNA被轉譯成病毒棘蛋白的效率。
4「將人工mRNA裹入特殊載體,將mRNA包裹入特殊載體顆粒中」
因為mRNA相當脆弱且容易被分解,因此需要對載體進行包裹和保護。然而,有了載體後,接踵而來的問題是「該怎麼送到正確的位置(淋巴結)?」。而輝瑞和莫德納不約而同地都選用了奈米脂質顆粒(lipid nanoparticles)包裹mRNA載體,奈米脂質顆粒通常由帶電荷的脂質(lipid)、膽固醇(cholesterol)或聚乙二醇(polyethylene glycol, PEG)修飾過的脂質等組成,可以保護RNA,並將mRNA送到抗原呈現細胞豐富的淋巴結組織。
5「包覆mRNA的奈米脂質顆粒,注射在肌肉組織」
使其能循環到淋巴結,被淋巴結中的細胞吃掉。奈米脂質顆粒釋放出mRNA,使細胞產出病毒蛋白質片段,進而呈現給其他白血球並活化整個免疫系統。【註7】
mRNA可將特定蛋白質的製造指示送至細胞核糖體(ribosomes)進行生產。mRNA 疫苗會將能製造新冠病毒棘狀蛋白的 mRNA 送至人體內,並不斷製造棘狀蛋白,藉此驅動免疫系統攻擊與記憶此類病毒蛋白,增加人體對新冠病毒的免疫力,最終 mRNA 將被細胞捨棄。
值得注意的是,由於 mRNA 疫苗並無攜帶所有能製造新冠病毒的核酸(nucleic acid),且不會進入人體細胞核,所以施打疫苗無法使人感染新冠病毒。
Pfizer、BioNTech 研發的 BNT162b2 是美國第 1 個取得 EUA 的 mRNA 疫苗,施打對象除成年人,還包含 16 歲以上非成年人。且相比 Moderna 製造的 mRNA-1273 疫苗,患者施打第 2 劑 BNT162b2 的副作用較輕微。
Moderna 也不遑多讓,mRNA-1273 於 2020 年 12 月中取得 EUA,且具備在 -20°C 儲存超過 30 天的優勢。在臨床試驗中,使用 mRNA-1273 的 196 位受試者皆無演變成重度 COVID-19,相較安慰劑組中卻有 30 人最終被標為重度 COVID-19 患者。【註8】
為了觸發免疫反應,許多疫苗會將一種減弱或滅活的細菌注入我們體內。mRNA疫苗並非如此。相反,該疫苗教會我們的細胞如何製造出一種蛋白質,甚至一種蛋白質片段,從而觸發我們體內的免疫反應。如果真正的病毒進入我們的身體,這種產生抗體的免疫反應可以保護我們免受感染。【註9】
【Reference】
▶DNA的英文全名是Deoxyribonucleic acid,中文翻譯為【去氧核糖核酸】
▶RNA 的英文全名是 Ribonucleic acid,中文翻譯為【核糖核酸】。
1.來源
➤➤資料
∎【註1】
Baden LR, El Sahly HM, Essink B, et al. Efficacy and Safety of the mRNA-1273 SARS-CoV-2 Vaccine. N Engl J Med. 2020 Dec 30:NEJMoa2035389. doi: 10.1056/NEJMoa2035389. Epub ahead of print. PMID: 33378609; PMCID: PMC7787219.
https://www.nejm.org/doi/full/10.1056/NEJMoa2035389
Polack FP, Thomas SJ, Kitchin N, et al. Safety and Efficacy of the BNT162b2 mRNA Covid-19 Vaccine. N Engl J Med. 2020 Dec 31;383(27):2603-2615. doi: 10.1056/NEJMoa2034577. Epub 2020 Dec 10. PMID: 33301246; PMCID: PMC7745181.
https://www.nejm.org/doi/full/10.1056/NEJMoa2034577
∎【註2】
Xiaoman Wei, Xiang Li, Jie Cui, Evolutionary perspectives on novel coronaviruses identified in pneumonia cases in China, National Science Review, Volume 7, Issue 2, February 2020, Pages 239–242, https://doi.org/10.1093/nsr/nwaa009
∎【註3】
▶蘇一峰 醫師:https://www.facebook.com/bsbipoke
▶中時新聞網 「mRNA疫苗臨床試驗95%有效 醫:哪國搶到就能結束比賽」:
https://www.chinatimes.com/realtimenews/20210104004141-260405?chdtv
∎【註4】
( 台大醫院 National Taiwan University Hospital-基因分子診斷實驗室)「DNA、RNA 以及蛋白質」:https://www.ntuh.gov.tw/gene-lab-mollab/Fpage.action?muid=4034&fid=3852
∎【註5】
《科學人》粉絲團 - 「新冠病毒知多少?」:https://sa.ylib.com/MagArticle.aspx?id=4665
∎【註6】
(報導者 The Reporter)【肺炎疫情關鍵問答】科學解惑 - 10個「為什麼」,看懂COVID-19病毒特性與防疫策略:https://www.twreporter.org/a/covid-19-ten-facts-ver-2
∎【註7】
科學月刊 Science Monthly - 「讓免疫系統再次偉大!mRNA疫苗會是COVID-19的救世主嗎?」:https://www.scimonth.com.tw/tw/article/show.aspx?num=4823&page=1
∎【註8】
GeneOnline 基因線上 「4 大 COVID-19 疫苗大解密!」 :https://geneonline.news/index.php/2021/01/04/4-covid-vaccine/
∎【註9】
(CDC)了解mRNA COVID-19疫苗
https://chinese.cdc.gov/coronavirus/2019-ncov/vaccines/different-vaccines/mrna.html
➤➤照片
∎【註4】:
圖1、分子生物學中心法則
∎【註7】:
圖2:mRNA 疫苗設計原理
圖3:mRNA 疫苗設計流程圖
2. 【國衛院論壇出版品 免費閱覽】
▶國家衛生研究院論壇出版品-電子書(PDF)-線上閱覽:
https://forum.nhri.org.tw/publications/
3. 【國衛院論壇學術活動】
▶https://forum.nhri.org.tw/events/
#國家衛生研究院 #國衛院 #國家衛生研究院論壇 #國衛院論壇 #衛生福利部 #疾病管制署 #COVID-19 #mRNA疫苗 #新英格蘭醫學醫學期刊 #NEJM
衛生福利部 / 疾病管制署 - 1922防疫達人 / 財團法人國家衛生研究院 / 國家衛生研究院-論壇
轉譯後修飾位置 在 Taipei Ethereum Meetup Facebook 的最佳貼文
📜 [專欄新文章] 類 Python 的合約語言 Vyper 開發入門:與 Solidity 差異、用 Truffle 部署、ERC20 賣幣合約實做
✍️ 田少谷 Shao
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
有鑒於個人近期關注的 Uniswap 及 Curve 皆用 Vyper 實作,索性瀏覽了官方文件並嘗試一些開發工具,希望此文能減少一些讀者初嘗 Vyper 會遇到的麻煩!
Vyper and Solidity
Outline
一. Vyper 極簡介二. 與 Solidity 語法差異三. 開發、開發環境設置 1. 語法高亮 2. 本地 Vyper compiler 安裝 3. 使用 Truffle 操作 ERC20 - 安裝 Truffle - 發幣 - 寫個簡易賣幣合約四. 已知 Remix 問題 五. 結語
一. Vyper 極簡介
Vyper 是除 Solidity 外,以太坊上的另一智能合約 (Smart contract) 語言。其語法和 Python 相近,但畢竟也是寫合約的語言,邏輯差異不大,所以若熟悉 Solidity 應該不難理解用 Vyper 寫出的合約!
Vyper 主要被設計和 Solidity 的區別是安全性及可讀性,這部分會在下一段落及後方的實作中舉例說明。
二. 與 Solidity 語法差異
Vyper 與 Solidity 的差異有許多,在本段只就個人認為感受較深的三點進行說明,其他差異只進行翻譯,有興趣的讀者可以到官方文件詳細了解:https://vyper.readthedocs.io/en/latest/index.html
1. 沒有 modifier
Solidity 常見的 onlyOwner() modifier; 由於 gist 沒有 Solidity 的語法高亮,故截圖
在 Vyper 中單純用 assert 及 assert_modifiable 來進行條件檢查,兩者差別為若要檢查函數執行後的返還值,要用後者,如下圖:
Vyper 寫法
2. 沒有 Class inheritance 繼承
繼承是物件導向程式設計 (OOP) 的核心概念,但各種繼承關係有時候確實很複雜。Vyper 沒有繼承,這無疑大幅地增加了程式可讀性及安全性,以及降低審計程式碼的難度。在此提供一個例子供不熟悉 OOP 複雜之處的讀者有個概念:
source: https://consensys.github.io/smart-contract-best-practices/recommendations/#multiple-inheritance-caution
在上例中,contract A 的 fee 值 (因繼承自 contract B 和 C,故有 fee 一值) 是 5、a 值也是 5 (因繼承自 contract Final,故有 a 一值)。原因是 A 先繼承 B 再繼承 C,因此 contract A 中的 setFee() 是使用了 contract C 的 setFee(),而 a 值是由於 C(5),這代表 contract C 的 constructor (舊版本中即 function C(),函式名稱同 contract 名稱) 被傳入的值為 5。
稍微延伸一下以上概念,將 contract A 改成:contract A is C, B。如此一來,a 值還有 fee 值都會是 3,因為這次 A 先繼承 C 再繼承 B,因此最終吃到的值是 contract B 的。
以上就是 OOP 繼承的複雜之處的簡單範例說明,應該能稍微感受到爲什麼除去繼承後會大幅提高可讀性及安全性,畢竟即使是熟悉 OOP 的人有時頭腦一混亂也會開始懷疑自己寫的程式碼繼承結構是否正確 …
3. 沒有 dynamic array 動態陣列
這應該是目前 Vyper 設計中爭議最大的部分。沒有動態陣列代表在宣告陣列時需要宣告其長度,也就是說 Solidity 中的寫法 uint[], bool[] 等等,這些是不會出現在 Vyper 的。在 Vyper 中只能出現諸如:
# Vyper 的變數宣告方式為 變數名稱: 存取範圍(變數型態(若為陣列給長度))
values: uint256[10]participants: public(address[20])
可以看到上方的 uint256 及 address 兩陣列皆需要宣告長度,不能不宣告而使其動態地配置空間。
沒有動態陣列固然可以確保執行運算的範圍、次數,但一來動態陣列真的很方便、二來在 Solidity 有此功能而 Vyper 卻沒有的情況下可能會造成麻煩,詳見此一討論串:點我。
4. 沒有 inline assembly,程式碼中不會有組合語言
5. 沒有 function overloading,函式不會因傳入的參數數目不同而結果不同
6. 沒有 operator overloading,運算符號不會有不同於預設的自定義功能
7. 沒有無限迴圈,可免於 gas limit attack
8. 十進位定點數 decimal fixed point 而非二進位 (binary) 定點數,詳見:點我
三. 開發、開發環境設置
結論先講
開發 Vyper 的最佳姿勢目前個人認為是在本地裝上 Vyper compiler、用 Truffle 部署,並在撰寫時將檔名後加上 .py 就能有 Python 的語法高亮👌
1. 語法高亮 (syntax highlighting)
有語法高亮絕對是舒服地寫程式的第一步。
Remix 有 Vyper 的語法高亮,但一來個人目前不推薦使用 Remix 來撰寫 Vyper,原因詳見下方 4. 已知 Remix 問題;二來 Remix 的語法高亮其實也沒有很清楚,因此個人推薦:在本地開發,將檔名後加上 .py 就會有 Python 的語法高亮。
2. 本地 Vyper compiler 安裝
照官方說明使用 Python 的虛擬環境 virtualenv:
source: https://vyper.readthedocs.io/en/latest/installing-vyper.html#installing-vyper
簡單兩點提醒:
如果中間那行報錯但確實已經有 Python,則可能是版本問題。依照自己電腦上的版本改成相應的即可,ex: python3.6 改成 python3
進入虛擬環境後(檔案路徑前方應有 vyper-venv 的提示),使用此指令: vyper {檔案名稱}.vy,即可編譯 .vy 檔;使用完畢後輸入 deactivate 即可退出
3. 使用 Truffle 操作 ERC20
安裝 Truffle
Truffle 雖有冗餘的 migration 但也別無他法,畢竟 Remix 目前仍不完善 :(
下載流程可以照官方文件,使用 vyper-example:
source: https://github.com/truffle-box/vyper-example-box
由於我們會接上測試網 Ropsten,因此還要下載 truffle-hdwallet-provider:
source: https://github.com/trufflesuite/truffle-hdwallet-provider
接者就可以開始使用 Vyper 寫合約了!
發幣
由於 Vyper 的官方文件中已經有許多優質範例,因此本文希望來點不一樣但大家卻又很熟悉的…以 ERC20 為例(這千篇一律的主題xD):
用 Curve 的 ERC20 程式碼為範本,發一個幣(又要發…)
寫一個簡易賣幣合約
選擇這個主題一方面畢竟 ERC20 是以太坊的最大宗應用之一,二來有興趣的讀者可以透過讀 ERC20 的程式碼來熟悉 Vyper,並在看過本文的流程後對於用 Vyper+Truffle 來操作 ERC20 有完整的概念!
好的,首先複製一份 Curve 的 ERC20 程式碼(看到就順手拿來用),並複製到 Truffle 所在路徑的 contracts 資料夾中:https://github.com/curvefi/curve-contract/blob/pool_compound/vyper/ERC20.vy
由於第一點希望著重在跑一次流程,因此不改動合約的程式碼。
將 ERC20.vy 複製到 contracts 資料夾中後,到 migrations 資料夾開啟 2_deploy_contracts.js,首先將 require() 中的參數改為 ERC20.vy 的檔名 ERC20,再來依照自己喜好決定幣的名稱、代號、小數點位數及發行總量,輸入於 deployer.deploy() 中。
接著,為了和測試網 Ropsten 互動,需要將以下程式碼寫入 truffle-config.js。
第二行的 privateKeys 是帳號的私鑰。以下實作需要兩個帳號來操作,因此請從錢包匯入兩組私鑰(並非助憶詞)。
在第 13 行中 HDWalletProvider 此函式的第三個參數代表要用第幾個帳號最為預設帳號(部署合約等),第四個函數代表總共匯入幾組帳號。而第二個參數則是需要至 Infura 申請一個 project 來得到串接 Ropsten 的連結。這兩步驟並非本文重點,因此不詳細解說步驟,Google 搜尋關鍵字應該就會找到方法!
接著,就可以輸入以下指令來將代幣發佈到 Ropsten:
truffle deploy --network ropsten
有進入虛擬環境才可以編譯 .vy 檔,若忘記就會收到如下的錯誤訊息:
記得打開虛擬環境才能編譯 .vy 檔
成功後就可以在 contract address 中看到代幣發佈的位置,加入到 Metamask 中就可以看到。本文的例子是維尼代幣 Winnie the Coin, WTC ;)
contract address 便是 ERC20 的所在
Winnie the Coin, WTC
好了,到此測試網上又多了一個測試用的垃圾廢幣。
寫個簡易賣幣合約
賣幣合約中我想要簡單有兩個功能就好:付錢買幣 、結束銷售,以下就是程式碼。買幣的部分就不寫太詳細,固定價格為 0.01 Ether 可以買 500 代幣。
簡單說明幾點:
Solidity 的 constructor() 在 Vyper 中為 Python 風的 __init__():
函式的屬性(public, private, payable 等等)放在函式上方,與 Python 的修飾器位置相同
總之寫法跟 Python 很像,次方也一樣是用兩次乘法代表:**
變數前加上 self 代表是當前合約的變數/全域變數,因此非常容易與函式中的變數/區域變數做區隔
由於已經在第一行匯入了 ERC20 那份合約,因此透過將地址傳入合約當參數,就可以呼叫在該地址的合約:ERC20(self.tokenAddress) 。並且,可以將部署的合約存成一個變數 erc20 較方便
寫完合約後一樣要更改 migrations 資料夾中的 2_deploy_contracts.js 如下,將代幣所在的地址作為參數輸入。
由於先前已經部署過一次了,因此要重置才能再部署第二次,輸入以下指令:
truffle deploy --reset --network ropsten
部署成功之後就要來試著買幣啦!輸入以下來進入 console:
truffle console --network ropsten
成功進入後應該會看到 truffle(ropsten)> 的字樣。接著,首先取得部署的兩合約,並查看是否有返回合約資訊:
# ERC20 及 SellToken 是先前在 2_deploy_contracts.js 中的變數名稱,代表被部署的合約
let instance1 = await ERC20.deployed()instance1 # 印出 instance1 的資訊
let instance2 = await SellToken.deployed()instance2 # 印出 instance2 的資訊
再來,為了讓 SellToken 可以賣幣,要先用 ERC20 的合約匯幣到 SellToken 的合約。因此,輸入以下指令:
instance1.transfer(instance2.address, 10000)
# 這裡數字只要設為 > 500 就可以
接著,我們要利用第二個帳號去買幣(第一個帳號為預設帳號,因此就是代幣擁有者)。將帳號的資訊存入變數 accounts 中,再指定送出交易的帳號是第二個帳號。由於我個人匯入私鑰的順序是將第一個帳號存在 truffle-config.js 的 privateKeys[0]、第二個帳號存在 privateKeys[1],因此第二個帳號的地址就會在 accounts[1] 的位置:
let accounts = await web3.eth.getAccounts()
instance2.buyToken({from: accounts[1], value: 10000000000000000})
# value 為 10^16 是因為在 SellToken 的 buyToken 函式中買一次要 0.01 Ether, 即為 10^16 wei
然後應該就會在自己的第二個帳號中看到匯入的幣了~
最後,由於合約中結束銷售就是一個自殺 selfdestruct 函式,因此可以呼叫看看,第一個帳戶錢包中的錢應該會增加,因為第二個帳戶有付款買幣;並且,可以到 Ropsten 上瀏覽,應該能看到相關提示:
中間 contract 的右上角有 Self Destruct 的樣式
四. 已知 Remix 問題
Remix 目前有兩個版本,只有新版有 Vyper 的編譯器。在此整理目前遇到的問題,如果有人也遇到可以對照一下本處,可以省去很多自我懷疑xD
不會報錯
Remix 的編譯結果有時會是錯的、和本地端編譯出來的結果不同
舉上方的 SellToken 合約為例,將其複製到 Remix 中使用左邊的 Remote Compiler 有錯,但又不報錯 q_q (ERC20 的合約有在同檔案目錄)
左方有紅色三角形,代表編譯失敗,但沒有報錯訊息可以看…
getter function 竟然要花錢
用 Solidity 寫的合約,查詢 public 變數的值應該是不用消耗 gas 的,但不知何故查詢 Vyper 寫的合約的 public 變數卻要消耗 gas,如下圖…
可以看到中下方有 22026 gas 的消耗
Local compiler 無法使用
圖中的 Local Compiler 此選項,個人雖照官方文件執行 vyper-serve 但卻失敗,因此若有讀者成功希望能留個言不吝分享!
五. 結語
Vyper 作為一個比 Solidity 更新的合約語言,在寫程式碼的方面沒什麼問題,但相關的開發工具、學習資源等都遠不及 Solidity。
Vyper 主打的兩個特色:可讀性的部分相信看完上面的讀者應該已經有些感覺;安全性…小白如作者我倒是沒有感受到顯著的不同。況且 Solidity 已經發展許久,很多錯誤的寫法、知名的安全漏洞大家應該也很熟悉了,還有 Openzeppelin 提供安全合約寫法的範本,因此有待以後高人解說安全性是否真的是 Vyper 較好。
有興趣者可以查看 Vyper 的安全報告:點我,大意是目前 Vyper 的編譯器仍有許多問題待改進! (感謝 Chih-Cheng Liang 的提供)
本文對 Vyper 的介紹及其與 Solidity 的差異只講了個大概,欲知更詳細的介紹還是要麻煩讀者前往官方文件了:https://vyper.readthedocs.io/en/latest/index.html
最後,如果本文有任何錯誤,請不吝提出,我會盡快做修正;而如果我的文章有幫助到你,可以看看我的其他文章,歡迎一起交流 :)
田少谷 Shao - Medium
類 Python 的合約語言 Vyper 開發入門:與 Solidity 差異、用 Truffle 部署、ERC20 賣幣合約實做 was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
轉譯後修飾位置 在 國立台東高級中學 的推薦與評價
7有關原核生物與真核生物的轉錄與轉譯的比較,下列何者正確? (A)皆於細胞核內進行轉錄和修飾mRNA (B)皆於細胞質液 ... 21下列何者並非屬於轉譯後蛋白質修飾的過程? ... <看更多>
轉譯後修飾位置 在 4-2-10 真核生物的轉譯後修飾 - YouTube 的推薦與評價
108課綱《選修生物一》細胞學(龍騰) 第四章:DNA與生物科技. ... <看更多>
轉譯後修飾位置 在 今天分子生物學了沒- #國考倒數15又4分之1天... | Facebook 的推薦與評價
轉譯 起始點原則上是第一個AUG出現的位置,但 更精確則是由一個有保守性的 Kozak concensus所包圍的AUG作為起始 ㊙mRNA的5'帽和eIF4E結合,3'尾以在轉錄後修飾時接 ... <看更多>