<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>meteosrds</title>
        <link>https://paragraph.com/@cryptovuive</link>
        <description>vui vẻ</description>
        <lastBuildDate>Sat, 22 Aug 2026 07:27:53 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <image>
            <title>meteosrds</title>
            <url>https://storage.googleapis.com/papyrus_images/e18511395fa082b5f6d786baf3da39143eb692453df8a39e46d901d516b80166.png</url>
            <link>https://paragraph.com/@cryptovuive</link>
        </image>
        <copyright>All rights reserved</copyright>
        <item>
            <title><![CDATA[hướng dẫn chạy 4 nhiệm vụ subsquid ]]></title>
            <link>https://paragraph.com/@cryptovuive/h-ng-d-n-ch-y-4-nhi-m-v-subsquid</link>
            <guid>JNjpxVtmEieD3OlCHTue</guid>
            <pubDate>Wed, 04 Oct 2023 14:36:14 GMT</pubDate>
            <description><![CDATA[nên dùng vps hoặc các máy ảo vmw nếu sợ bị dính key log vào máy tính nhé ad sẽ hướng dẫn chạy trên window còn ai dùng vps thì có thể lên đây xem cách cài những cái cần thiết link - mục installbước 1 : tải các phần mềm cần thiết1 . tải hyper -V : link - tải xong về bấm chuột phải chọn run as administrator cho nó tự cài 2 tải docker window : link 3 tai Node.js - link 4 tải git - link 2 3 4 tải về cứ cài như bình thường bước 2 mở phần mềm docker window ( phần mêm này phải luôn mở trong quá trình...]]></description>
            <content:encoded><![CDATA[<p>nên dùng vps hoặc các máy ảo vmw nếu sợ bị dính key log vào máy tính nhé</p><p>ad sẽ hướng dẫn chạy trên window còn ai dùng vps thì có thể lên đây xem cách cài những cái cần thiết <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/subsquid-quests/single-chain-squid/">link</a> - mục install</p><h3 id="h-buoc-1-tai-cac-phan-mem-can-thiet" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">bước 1 : tải các phần mềm cần thiết</h3><p>1 . tải hyper -V : <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.me/free_spam_link/215302">link</a> - tải xong về bấm chuột phải chọn run as administrator cho nó tự cài</p><p>2 tải docker window : <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.docker.com/desktop/install/windows-install/">link</a></p><p>3 tai Node.js - <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://nodejs.org/en/download">link</a></p><p>4 tải git - <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://git-scm.com/download/win">link</a></p><p>2 3 4 tải về cứ cài như bình thường</p><p>bước 2 mở phần mềm docker window ( <strong>phần mêm này phải luôn mở trong quá trình làm</strong> )</p><p>sau khi cài xong mà mở lên nó báo lỗi thì hãy vào cmd ( ctrl + r và nhập cmd để mở ) sau đó chạy lệnh <code>wsl --update</code></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/160f8ce1ed094079e812434a7f625b3638b701a31ad1033bbae0577a7292c3a1.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/8a74c1c84cee28757dc68c7dcc69b7075ed1a16728931e97992f8b52d980da67.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>sau khi chạy xong và mở docker window lên</p><p>bước 3 cài subsquid CLI</p><p>bật cmd và chạy lần lượt 2 lệnh bên dưới</p><p><code>npm install --global @subsquid/cli@latest</code></p><p><code>sqd --version</code></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/cf58661e1b46ecbf96e69d4202b169aef6851ba0a8458d8a74757d5f6d3945d2.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/495a9bf53180625819c627b05c08fd35484adac4dd2e69a0f8a53dabb07a9ce9.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>khi kiểm tra ra phiển bản nhìn giống trên ảnh là ok</p><p>bước 4 : chạy 4 nhiệm vụ deloy</p><p>mỗi nhiệm vụ sẽ có 1 key và 1 link tải đầu tiên khác nhau và khi tải về nó sẽ ra các thư mục khác nhau thì mọi người chú ý</p><p>ad sẽ hướng dẫn chạy <strong>single-chain-squid còn 3 cái sau nó tương tự y hệt chỉ khác mỗi cái link đầu vào</strong></p><p>vào mục quest trên web subsquid - <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://app.subsquid.io/quests">link</a></p><p>và tải cái key ở nhiệm vụ single chain squid về</p><p>bật cmd bạn nên xem mình muốn lưu file tý nữa tạo ở ổ nào nếu ở ổ C mặc định thì k cần làm j cả - nếu muốn chuyển sang ổ D hay E j đó thì trong cmd hãy gõ lệnh D: hoặc E:</p><p>sau dó nhập lệnh này chạy nó sẽ tạo ra 1 file ở trong ổ mà bạn đã để</p><p><code>sqd init xxxxxx -t https://github.com/subsquid-quests/single-chain-squid</code></p><p>thay đổi xxxx thành tên mình muốn đặt cho cái thư mục</p><p>sau khi lênh trên chạy xong hãy chạy tiếp 1 lệnh này</p><p><code>cd xxxxxx</code></p><p>( xxxx là tên mình vừa tạo ở trên )</p><p>ví dụ sẽ đặt tên là test1</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/37bd33cc243ac193283470b6a5b1dcd2350a895156534883e316180c5cfc167c.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>sau khi xong sẽ có 1 file tên là test1 ở trong ổ mình đã đặt - sau đó hãy copy file key tải khi nay vào file test1 đó mục query-gateway và ném vào trong mục key như ảnh bên dưới</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/fe3787b2e47c501f23191fcc40b425427b3541dfadaaad9af7f222c94d0c98f7.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>bước tiếp theo quay lại cmd và chạy lệnh sqd up ( lưu ý docker window phải bật và k cần sing in cũng đc )</p><p><code>sqd up</code></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/9a0d33af04317a1534e850ed591af1f032e7503c199c342e35adc48e2858e3cf.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>lần đầu chạy thì nó có thể lên đến 10 20 cái j đó nhé cứ để nó chạy xong</p><p>sau đó chạy tiếp lệnh npm ci</p><p><code>npm ci</code></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/6188aa4c3648048e3c59995aee9bddcbc77e7ef6847dc826238412e99e07d2dd.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>tiếp tục chạy tiếp lệnh 2 lệnh bên dưới</p><p><code>sqd build</code></p><p><code>sqd migration:apply</code></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/5ba3ad7721cf875981052110b724f2c7d77c75bc65cedc5ff6499f6e7662f747.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>sau đó chạy lệnh sqd run và cứ để cho nó chạy lúc nào thanh % trên nhiệm vụ trên web đầy và cho claim thì thôi</p><p><code>sqd run</code></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/7b75bfb47580f01822349237e6892aee9fbef603b29fa4e1bdb4ce42d867828b.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>trong khi nó chạy thì thỉnh thoảng check web xem % nó lên đc bn vào cho claim chưa</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/1dc3cede9ca0a2e72fb0c672de6a2ef1c4fddf8546fceb917b837ff823cea1ce.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>sau khi claim thì quay lại cmd và bấm ctrl + C và nhập sqd down</p><p>để dừng và xóa file chạy trên docker window</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e58d065e7fcb4d16fd5264f7fab84ecabe856df3da7493223dc8fc2e121dc91e.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>thế là đã xong 1 nhiệm vụ - bên dưới là các link tải của các nhiệm vụ tiếp theo</p><p>double</p><p><code>sqd init xxxxxx -t https://github.com/subsquid-quests/double-chain-squid</code></p><p><strong>triple</strong></p><p><code>sqd init xxxxxx -t https://github.com/subsquid-quests/triple-chain-squid</code></p><p>quad</p><p><code>sqd init xxxxxxx -t https://github.com/subsquid-quests/quad-chain-squid</code></p><p>xxxxx là tên mình tự đọc và tên k trùng nhau</p><p>khi chạy nó đều sẽ chạy ra 1 file riêng</p><p>các nhiệm vụ sau chỉ cần chạy lại từ bước 4 k phải làm từ các bước trước</p>]]></content:encoded>
            <author>cryptovuive@newsletter.paragraph.com (meteosrds)</author>
        </item>
        <item>
            <title><![CDATA[hướng dẫn lấy chứng nhận diễn đàn starknet ]]></title>
            <link>https://paragraph.com/@cryptovuive/h-ng-d-n-l-y-ch-ng-nh-n-di-n-n-starknet</link>
            <guid>pHQgyQRdC7tIt7NMBpiY</guid>
            <pubDate>Wed, 15 Mar 2023 14:01:25 GMT</pubDate>
            <description><![CDATA[Bước 1 : đăng ký hoặc login bằng discord https://community.starknet.io/t/greetings/16734/33 Bước 2 : tạo username và tên Bước 3 : nhấp vào profile và chọn chat với bottiếp tục làm như những ảnh bên dướichọn 1 ngày tùy ýtrả lời bằng 1 link bất kỳtrả lời bằng 1 icontrả lời bằng chữ in đậm hoặc nghiêngtrả lời bằng quote - click đúp chuột vào chỗ văn bảnlike và trả lời bằng hình ảnhtìm kiếm từ khóa capy​barakết thúc - nhận lấy chứng chỉ sơ cấp - làm tiếp theo bên dưới để lấy chứng chỉ cao cấpchứn...]]></description>
            <content:encoded><![CDATA[<p><strong>Bước 1 : đăng ký hoặc login bằng discord</strong></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://community.starknet.io/t/greetings/16734/33">https://community.starknet.io/t/greetings/16734/33</a></p><p><strong>Bước 2 : tạo username và tên</strong></p><p><strong>Bước 3 : nhấp vào profile và chọn chat với bot</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a03003c1a3de7a88a52ea89c865ac48357cabe5fecaa4a3efd4bddd2ddd290d1.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>tiếp tục làm như những ảnh bên dưới</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e45aec6d64641daf4c5813b72f36b8dc7aba9c46f00b029310bead950180e9a7.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>chọn 1 ngày tùy ý</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/1f32f41b36b4ec020bafdef8202e83833e51e5cd340112dd2c44406127ac001d.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>trả lời bằng 1 link bất kỳ</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/5fa336dd88cf3f2a0863276d6c9b43c776a466ab98010cac457ec82ae4ed22c4.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>trả lời bằng 1 icon</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/db116324251970572e2ecf7b9bcbf5b54f7f61841e8a9744f08dc92317f47f55.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/bb4b5c2add97ee031221e30fb47586466a17f2900f9236e0e101d5fdb9e515ba.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>trả lời bằng chữ in đậm hoặc nghiêng</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/eed96057c638e1c75d708735d92623688efd3cbac7ed60fd2498a36d6794a568.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>trả lời bằng quote - click đúp chuột vào chỗ văn bản</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/547bd70de5f1fc46df64b1d8eacfbb65419bb6fa10a93ca4b0263a62b3ffa9f2.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>like và trả lời bằng hình ảnh</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e4c9062895f90ced5e1eac4e5a24700e8461cbed55c32e8323e79728da646169.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>tìm kiếm từ khóa capy​bara</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/4bfea66bdeb284aa970f32ccdc38dea800284f4f99871c7d550422672d0c070c.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/2be6aecec55f83f89fc397228c05f853004b337f644693c1047578c33e56e9ee.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e335963e0de7fb6e4803f72ffd271af51930640a0c2f60b7b0cc0c365253dd19.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/80645055e501e9d081d4db8b029375aaf3c484591009d0ff1b8ea81916b3673e.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>kết thúc - nhận lấy chứng chỉ sơ cấp - làm tiếp theo bên dưới để lấy chứng chỉ cao cấp</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/bec5792320eef93d4f2a781c5c9b27d7df2d85ec8e25f92839cb4771091e3397.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>chứng chỉ cao cấp bấm reply bất kỳ cái nào rùi gọi bot</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/0e4efcbe3389ce739dffc9485e94cc2eec40c382fa764048471f303a18215463.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/abde9550f862683a59f99c841bf929b50febef035b9021b489b3f425cd608234.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>edit lại đoạn văn bản nó cho</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/bb4fedb019b938901a79d3a1677293b55ec5d998d0a8b70a987cf6b11767a8e5.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>xóa đoạn văn bản</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/1244b91a36c4b78f7465d56985e78fb075fac76fb23d9fe528afcdd94220ee6a.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>lấy lại đoạn văn bản</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/129a9d2881eb125869eab79cf37b58758b42b10da061f87061073efce9798893.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>trả lời bằng #</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/eb93cf16255df966f7105a53f6d195aeb862f4bf857c5feca63bd750cc948c65.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>bật thông báo</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/5e46777130cc3760a862d4b996e8249a874a8d44f699c01235c0daabb582f373.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>trả lời bằng hiden details</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/7a2d0ee192fbe99bbe59fe54cfee1311647bd4a4fbc148cee4c86d97ca36ecc7.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>kết thúc sẽ nhận chứng chỉ cao cấp</p>]]></content:encoded>
            <author>cryptovuive@newsletter.paragraph.com (meteosrds)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/bf1f1f5eb619950c0eb057c6db3577a29d2f5c941205e063eb3c340dcefbd102.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[polyhedra testnet ]]></title>
            <link>https://paragraph.com/@cryptovuive/polyhedra-testnet</link>
            <guid>4or3criJvZBu0aqBtyL2</guid>
            <pubDate>Wed, 22 Feb 2023 08:04:36 GMT</pubDate>
            <description><![CDATA[link test B1 : liên kết ví chọn chain tùy ý và bấm create NFTB2 : sau khi tạo xong quay lại chỗ ban đầu và chọn my NFT và chọn NFT mới tạo vàođợi nó chạy xong rùi claimsau đó sang mục history copy id của bước 3qua mục redeem dán vào]]></description>
            <content:encoded><![CDATA[<p>link <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://polyhedra.network/zkbridge">test</a></p><p>B1 : liên kết ví chọn chain tùy ý và bấm create NFT</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c31082bc98ee9384c8f693a98e59c0acdabf58b7b8d47a4c03e4d1c2279122ca.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/2dd90643ee497903fd7fae86fc2646d8ef6ece538c8a86d431789f017bb8ba29.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/3d2f8208ad316821b098604ecaf9905246b47ec39a7eaed85207acc8de18faa6.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>B2 : sau khi tạo xong quay lại chỗ ban đầu và chọn my NFT và chọn NFT mới tạo vào</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/143c95208116d5f44de61d97455e820caf72de8b8c69c6b9c5f136fc409af9de.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/ed2ad1addb89a8fd5bbf31f510660ebc57461b20c7b592cdcb317553a54eeae6.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/ec3c421480dd9a4ee0fecefce01da99e16ac5c27044e21bccb95e6289c962954.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/7924d8bf8f8d3655fa52c92db83858aa519df85cc79aea28460618497a016eab.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d9e44e648deea26a69dc925673a3b931aaf370db7d5e665146329064f9d3c2a0.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/55e5423bf06436717f7fb34765a506378917bc603977b0eefe0b24b8024412f3.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>đợi nó chạy xong rùi claim</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/189fd5cc08156025b62cf76e2fe512ba4fb22aab03a20369be7ed88df0657399.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e2381d5d7995d5e390534c63fffcc0dc647cb7db597af774f25dc82fa049cafb.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/8cf3fe14a5319a08c9519d60b9ed7d8d07c33e1b47d4847c2b3fea22fbe37c49.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>sau đó sang mục history copy id của bước 3</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/38d5fc03f412963ec0cf7d0c5f146a6a37b5e14a90886f3fcda9c3baa9fdd96e.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>qua mục redeem dán vào</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a69cd9b8109a8165e536181f9bbd1e444a1e367943aaa6c2f2e468be2d982348.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e82571553aa2b846d3f7cee82eacd5f4829fce9cafb3c1f067d03d6ff451e870.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure>]]></content:encoded>
            <author>cryptovuive@newsletter.paragraph.com (meteosrds)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/76c566fbedda246067bc6459bbf59d26b3a82d6d7b7efb8cce1b35cab87ab920.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Smart Contract Basics
]]></title>
            <link>https://paragraph.com/@cryptovuive/smart-contract-basics</link>
            <guid>boOQ89uHy2NjjAPT60rK</guid>
            <pubDate>Tue, 10 Jan 2023 15:38:22 GMT</pubDate>
            <description><![CDATA[Solidity Syntax// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; contract Contract { bool public a = true; bool public b = false; } // SPDX-License-Identifier: MIT pragma solidity ^0.8.4; contract Contract { uint8 public a = 3; uint16 public b = 268; uint256 public sum = a + b; } // SPDX-License-Identifier: MIT pragma solidity ^0.8.4; contract Contract { int8 public a = 10; int8 public b = -15; int16 public difference = a - b; } // SPDX-License-Identifier: MIT pragma solidity ^0.8.4; co...]]></description>
            <content:encoded><![CDATA[<h3 id="h-solidity-syntax" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Solidity Syntax</h3><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d8894b7a8cc6e398c667e459f5ffad8b7882593067365376a6621c5ff3991744.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d4dee8000d258d4b2cdc49447f04b5f3031595f34cae372c4a15d608d4d94479.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

contract Contract {
    bool public a = true;
    bool public b = false;
}
"><code><span class="hljs-comment">// SPDX-License-Identifier: MIT</span>
<span class="hljs-meta"><span class="hljs-keyword">pragma</span> <span class="hljs-keyword">solidity</span> ^0.8.4;</span>

<span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">Contract</span> </span>{
    <span class="hljs-keyword">bool</span> <span class="hljs-keyword">public</span> a <span class="hljs-operator">=</span> <span class="hljs-literal">true</span>;
    <span class="hljs-keyword">bool</span> <span class="hljs-keyword">public</span> b <span class="hljs-operator">=</span> <span class="hljs-literal">false</span>;
}
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/ee6bb4ba3b34e3d07847a2ddb3d310566a9280f4c6f4279ee2966f3308e716a7.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

contract Contract {
    uint8 public a = 3;
    uint16 public b = 268;
    uint256 public sum = a + b;
}
"><code><span class="hljs-comment">// SPDX-License-Identifier: MIT</span>
<span class="hljs-meta"><span class="hljs-keyword">pragma</span> <span class="hljs-keyword">solidity</span> ^0.8.4;</span>

<span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">Contract</span> </span>{
    <span class="hljs-keyword">uint8</span> <span class="hljs-keyword">public</span> a <span class="hljs-operator">=</span> <span class="hljs-number">3</span>;
    <span class="hljs-keyword">uint16</span> <span class="hljs-keyword">public</span> b <span class="hljs-operator">=</span> <span class="hljs-number">268</span>;
    <span class="hljs-keyword">uint256</span> <span class="hljs-keyword">public</span> sum <span class="hljs-operator">=</span> a <span class="hljs-operator">+</span> b;
}
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/99bcfc88b630c86453b253c3cc83ff3d75fc53305f28da655bc83c6739ba9abb.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

contract Contract {
    int8 public a = 10;
    int8 public b = -15;
    int16 public difference = a - b;
}
"><code><span class="hljs-comment">// SPDX-License-Identifier: MIT</span>
<span class="hljs-meta"><span class="hljs-keyword">pragma</span> <span class="hljs-keyword">solidity</span> ^0.8.4;</span>

<span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">Contract</span> </span>{
    <span class="hljs-keyword">int8</span> <span class="hljs-keyword">public</span> a <span class="hljs-operator">=</span> <span class="hljs-number">10</span>;
    <span class="hljs-keyword">int8</span> <span class="hljs-keyword">public</span> b <span class="hljs-operator">=</span> <span class="hljs-number">-15</span>;
    <span class="hljs-keyword">int16</span> <span class="hljs-keyword">public</span> difference <span class="hljs-operator">=</span> a <span class="hljs-operator">-</span> b;
}
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d6846441c948d9376db6c8e3ca81dc931cc49918971875ca47bae129cd28e246.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

contract Contract {
    bytes32 public msg1 = &quot;Hello World&quot;;
    string public msg2 = &quot;ccccccccccccccccccccccccccccccccabcd&quot;;
}
"><code><span class="hljs-comment">// SPDX-License-Identifier: MIT</span>
<span class="hljs-meta"><span class="hljs-keyword">pragma</span> <span class="hljs-keyword">solidity</span> ^0.8.4;</span>

<span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">Contract</span> </span>{
    <span class="hljs-keyword">bytes32</span> <span class="hljs-keyword">public</span> msg1 <span class="hljs-operator">=</span> <span class="hljs-string">"Hello World"</span>;
    <span class="hljs-keyword">string</span> <span class="hljs-keyword">public</span> msg2 <span class="hljs-operator">=</span> <span class="hljs-string">"ccccccccccccccccccccccccccccccccabcd"</span>;
}
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b6909aa5497bd09a7202a90a27fa520e51bd802a7e11071a2fa62eb3d1434e4d.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

contract Contract {
    enum Foods { Apple, Pizza, Bagel, Banana }

    Foods public food1 = Foods.Apple;
    Foods public food2 = Foods.Pizza;
    Foods public food3 = Foods.Bagel;
    Foods public food4 = Foods.Banana;
}
"><code><span class="hljs-comment">// SPDX-License-Identifier: MIT</span>
<span class="hljs-meta"><span class="hljs-keyword">pragma</span> <span class="hljs-keyword">solidity</span> ^0.8.4;</span>

<span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">Contract</span> </span>{
    <span class="hljs-keyword">enum</span> <span class="hljs-title">Foods</span> { Apple, Pizza, Bagel, Banana }

    Foods <span class="hljs-keyword">public</span> food1 <span class="hljs-operator">=</span> Foods.Apple;
    Foods <span class="hljs-keyword">public</span> food2 <span class="hljs-operator">=</span> Foods.Pizza;
    Foods <span class="hljs-keyword">public</span> food3 <span class="hljs-operator">=</span> Foods.Bagel;
    Foods <span class="hljs-keyword">public</span> food4 <span class="hljs-operator">=</span> Foods.Banana;
}
</code></pre><h3 id="h-functions" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Functions</h3><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/983dd6faa980cbefcee7b89b2da054d3bf66c9302aa6b4effd98bf1410681998.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c43a4e82636e8b2f55e890f8d93901e8e1b49b56c4fb31612278adfb611dc9d6.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

contract Contract {
    uint public x;

    constructor(uint _x) {
        x = _x;
    }
}
"><code><span class="hljs-comment">// SPDX-License-Identifier: MIT</span>
<span class="hljs-meta"><span class="hljs-keyword">pragma</span> <span class="hljs-keyword">solidity</span> ^0.8.4;</span>

<span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">Contract</span> </span>{
    <span class="hljs-keyword">uint</span> <span class="hljs-keyword">public</span> x;

    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params"><span class="hljs-keyword">uint</span> _x</span>) </span>{
        x <span class="hljs-operator">=</span> _x;
    }
}
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/824009872263303a5002effd6aea24e339d8bf31992a2ca7e87db3e5b22d51c9.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

contract Contract {
    uint public x;

    constructor(uint _x) {
        x = _x;
    }

    function increment() external {
        x = x + 1;
    }
}
"><code><span class="hljs-comment">// SPDX-License-Identifier: MIT</span>
<span class="hljs-meta"><span class="hljs-keyword">pragma</span> <span class="hljs-keyword">solidity</span> ^0.8.4;</span>

<span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">Contract</span> </span>{
    <span class="hljs-keyword">uint</span> <span class="hljs-keyword">public</span> x;

    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params"><span class="hljs-keyword">uint</span> _x</span>) </span>{
        x <span class="hljs-operator">=</span> _x;
    }

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">increment</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> </span>{
        x <span class="hljs-operator">=</span> x <span class="hljs-operator">+</span> <span class="hljs-number">1</span>;
    }
}
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/6507fe19bf37555092fa1fbe6fe873915e5b2057425fc8f729a4bdaf9e8e3aaf.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

contract Contract {
    uint public x;

    constructor(uint _x) {
        x = _x;
    }

    function increment() external {
        x = x + 1;
    }

    function add(uint _x) external view returns(uint) {
        uint sum = x + _x;
        return sum;
    }
}
"><code><span class="hljs-comment">// SPDX-License-Identifier: MIT</span>
<span class="hljs-meta"><span class="hljs-keyword">pragma</span> <span class="hljs-keyword">solidity</span> ^0.8.4;</span>

<span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">Contract</span> </span>{
    <span class="hljs-keyword">uint</span> <span class="hljs-keyword">public</span> x;

    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params"><span class="hljs-keyword">uint</span> _x</span>) </span>{
        x <span class="hljs-operator">=</span> _x;
    }

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">increment</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> </span>{
        x <span class="hljs-operator">=</span> x <span class="hljs-operator">+</span> <span class="hljs-number">1</span>;
    }

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">add</span>(<span class="hljs-params"><span class="hljs-keyword">uint</span> _x</span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title"><span class="hljs-keyword">view</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span>(<span class="hljs-params"><span class="hljs-keyword">uint</span></span>) </span>{
        <span class="hljs-keyword">uint</span> sum <span class="hljs-operator">=</span> x <span class="hljs-operator">+</span> _x;
        <span class="hljs-keyword">return</span> sum;
    }
}
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c77fbda908fd48d0948b7620e56d5926a865afd43194f178c64917035d7cac86.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

contract Contract {
    function double(uint x) external pure returns(uint d) {
        d = x * 2;
    }
}
"><code><span class="hljs-comment">// SPDX-License-Identifier: MIT</span>
<span class="hljs-meta"><span class="hljs-keyword">pragma</span> <span class="hljs-keyword">solidity</span> ^0.8.4;</span>

<span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">Contract</span> </span>{
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">double</span>(<span class="hljs-params"><span class="hljs-keyword">uint</span> x</span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title"><span class="hljs-keyword">pure</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span>(<span class="hljs-params"><span class="hljs-keyword">uint</span> d</span>) </span>{
        d <span class="hljs-operator">=</span> x <span class="hljs-operator">*</span> <span class="hljs-number">2</span>;
    }
}
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/abfc40221d603998fb70535914f71d8d0ccf270660ec82bac9e0d479ff8f4036.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

contract Contract {
    function double(uint x) external pure returns(uint d) {
        d = x * 2;
    }

    function double(uint x, uint y) public pure returns(uint, uint) {         
            return (x*2, y*2);
    }
}
"><code><span class="hljs-comment">// SPDX-License-Identifier: MIT</span>
<span class="hljs-meta"><span class="hljs-keyword">pragma</span> <span class="hljs-keyword">solidity</span> ^0.8.4;</span>

<span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">Contract</span> </span>{
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">double</span>(<span class="hljs-params"><span class="hljs-keyword">uint</span> x</span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title"><span class="hljs-keyword">pure</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span>(<span class="hljs-params"><span class="hljs-keyword">uint</span> d</span>) </span>{
        d <span class="hljs-operator">=</span> x <span class="hljs-operator">*</span> <span class="hljs-number">2</span>;
    }

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">double</span>(<span class="hljs-params"><span class="hljs-keyword">uint</span> x, <span class="hljs-keyword">uint</span> y</span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> <span class="hljs-title"><span class="hljs-keyword">pure</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span>(<span class="hljs-params"><span class="hljs-keyword">uint</span>, <span class="hljs-keyword">uint</span></span>) </span>{         
            <span class="hljs-keyword">return</span> (x<span class="hljs-operator">*</span><span class="hljs-number">2</span>, y<span class="hljs-operator">*</span><span class="hljs-number">2</span>);
    }
}
</code></pre><h3 id="h-smart-contract-communication" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Smart Contract Communication</h3><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/3a0da6cd9c06a169891c2202614792fca1b18aa9172a4114617686662b6e50d5.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/3415e7ed241929e167813e703ec77641e85f1a239c945e7e1413ef9b666b1fa4.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="/**
 * Find the `value` stored in the contract
 *
 * @param {ethers.Contract} contract - ethers.js contract instance
 * @return {promise} a promise which resolves with the `value`
 */
function getValue(contract) {
    let value = contract.value();
    return value;
}

module.exports = getValue;
"><code><span class="hljs-comment">/**
 * Find the `value` stored in the contract
 *
 * @param {ethers.Contract} contract - ethers.js contract instance
 * @return {promise} a promise which resolves with the `value`
 */</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getValue</span>(<span class="hljs-params"><span class="hljs-keyword">contract</span></span>) </span>{
    let value <span class="hljs-operator">=</span> <span class="hljs-keyword">contract</span>.<span class="hljs-built_in">value</span>();
    <span class="hljs-keyword">return</span> value;
}

module.exports <span class="hljs-operator">=</span> getValue;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c84839ec369a63a409560cca74efa8aff087519f7aa1b9380f68bd21c8b0f39a.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="/**
 * Modify the `value` stored in the contract
 *
 * @param {ethers.Contract} contract - ethers.js contract instance
 * @return {promise} a promise of transaction
 */
function setValue(contract) {
    return contract.modify(6);
}

module.exports = setValue;
"><code><span class="hljs-comment">/**
 * Modify the `value` stored in the contract
 *
 * @param {ethers.Contract} contract - ethers.js contract instance
 * @return {promise} a promise of transaction
 */</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">setValue</span>(<span class="hljs-params"><span class="hljs-keyword">contract</span></span>) </span>{
    <span class="hljs-keyword">return</span> <span class="hljs-keyword">contract</span>.modify(<span class="hljs-number">6</span>);
}

module.exports <span class="hljs-operator">=</span> setValue;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/579b2ccd89ffb32191ba157be824a3de5667a318e2fdd6d8b4712b080ee16a18.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="/**
 * Transfer funds on the contract from the current signer 
 * to the friends address
 *
 * @param {ethers.Contract} contract - ethers.js contract instance
 * @param {string} friend - a string containing a hexadecimal ethereum address
 * @return {promise} a promise of the transfer transaction
 */
function transfer(contract, friend) {
    return contract.transfer(friend, 1000);
}

module.exports = transfer;
"><code><span class="hljs-comment">/**
 * Transfer funds on the contract from the current signer 
 * to the friends address
 *
 * @param {ethers.Contract} contract - ethers.js contract instance
 * @param {string} friend - a string containing a hexadecimal ethereum address
 * @return {promise} a promise of the transfer transaction
 */</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">transfer</span>(<span class="hljs-params"><span class="hljs-keyword">contract</span>, friend</span>) </span>{
    <span class="hljs-keyword">return</span> <span class="hljs-keyword">contract</span>.<span class="hljs-built_in">transfer</span>(friend, <span class="hljs-number">1000</span>);
}

module.exports <span class="hljs-operator">=</span> transfer;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/95c930930de662db273e13e1872eaf641fef3142c43e8e6ea6e3b7bc83b6cedb.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="/**
 * Set the message on the contract using the signer passed in
 *
 * @param {ethers.Contract} contract - ethers.js contract instance
 * @param {ethers.types.Signer} signer - ethers.js signer instance
 * @return {promise} a promise of transaction modifying the `message`
 */
function setMessage(contract, signer) {
    return contract.connect(signer).modify(&quot;abc&quot;);
}

module.exports = setMessage;
"><code><span class="hljs-comment">/**
 * Set the message on the contract using the signer passed in
 *
 * @param {ethers.Contract} contract - ethers.js contract instance
 * @param {ethers.types.Signer} signer - ethers.js signer instance
 * @return {promise} a promise of transaction modifying the `message`
 */</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">setMessage</span>(<span class="hljs-params"><span class="hljs-keyword">contract</span>, signer</span>) </span>{
    <span class="hljs-keyword">return</span> <span class="hljs-keyword">contract</span>.connect(signer).modify(<span class="hljs-string">"abc"</span>);
}

module.exports <span class="hljs-operator">=</span> setMessage;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/131fcd514565ec13f6e6d960e2f8c3a8224192049967cae5975430faf5a917c4.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const ethers = require(&apos;ethers&apos;);

/**
 * Deposit at least 1 ether into the contract 
 *
 * @param {ethers.Contract} contract - ethers.js contract instance
 * @return {promise} a promise of the deposit transaction 
 */
function deposit(contract) {
    return contract.deposit({ value: ethers.utils.parseEther(&quot;3&quot;) });
}

module.exports = deposit;
"><code>const ethers <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'ethers'</span>);

<span class="hljs-comment">/**
 * Deposit at least 1 ether into the contract 
 *
 * @param {ethers.Contract} contract - ethers.js contract instance
 * @return {promise} a promise of the deposit transaction 
 */</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">deposit</span>(<span class="hljs-params"><span class="hljs-keyword">contract</span></span>) </span>{
    <span class="hljs-keyword">return</span> <span class="hljs-keyword">contract</span>.deposit({ <span class="hljs-built_in">value</span>: ethers.utils.parseEther(<span class="hljs-string">"3"</span>) });
}

module.exports <span class="hljs-operator">=</span> deposit;
</code></pre><h3 id="h-address-interactions" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Address Interactions</h3><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/6cdfa2d7762ff7fa51ebb8589ddf0089458235382d83835c711347ca8ec07ff6.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/2bda8f96e339f69e08505c327e2bc1ddfd347182a2335d8d07bd3c974251d672.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

contract Contract {
    address public owner;

    constructor() {
        owner = msg.sender;
    }
}
"><code><span class="hljs-comment">// SPDX-License-Identifier: MIT</span>
<span class="hljs-meta"><span class="hljs-keyword">pragma</span> <span class="hljs-keyword">solidity</span> ^0.8.4;</span>

<span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">Contract</span> </span>{
    <span class="hljs-keyword">address</span> <span class="hljs-keyword">public</span> owner;

    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params"></span>) </span>{
        owner <span class="hljs-operator">=</span> <span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>;
    }
}
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/031e18a8a2b3735c97ed7253497c54542536e77a47bb34d98ebf30dc2849aa71.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

contract Contract {
    address public owner;

    constructor() {
        owner = msg.sender;
    }

    receive() external payable {
    }
}
"><code><span class="hljs-comment">// SPDX-License-Identifier: MIT</span>
<span class="hljs-meta"><span class="hljs-keyword">pragma</span> <span class="hljs-keyword">solidity</span> ^0.8.4;</span>

<span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">Contract</span> </span>{
    <span class="hljs-keyword">address</span> <span class="hljs-keyword">public</span> owner;

    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params"></span>) </span>{
        owner <span class="hljs-operator">=</span> <span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>;
    }

    <span class="hljs-function"><span class="hljs-keyword">receive</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title"><span class="hljs-keyword">payable</span></span> </span>{
    }
}
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e0ea5bfc6beefa03ff8f9ace85cc7bc166138b332b56621690943e6e000ef787.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

contract Contract {
    address public owner;

    constructor() {
        owner = msg.sender;
    }

    receive() external payable {
    }

    function tip() public payable {
        (bool ret, ) = owner.call{ value: msg.value }(&quot;&quot;);
        require(ret);
    }
}
"><code><span class="hljs-comment">// SPDX-License-Identifier: MIT</span>
<span class="hljs-meta"><span class="hljs-keyword">pragma</span> <span class="hljs-keyword">solidity</span> ^0.8.4;</span>

<span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">Contract</span> </span>{
    <span class="hljs-keyword">address</span> <span class="hljs-keyword">public</span> owner;

    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params"></span>) </span>{
        owner <span class="hljs-operator">=</span> <span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>;
    }

    <span class="hljs-function"><span class="hljs-keyword">receive</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title"><span class="hljs-keyword">payable</span></span> </span>{
    }

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">tip</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> <span class="hljs-title"><span class="hljs-keyword">payable</span></span> </span>{
        (<span class="hljs-keyword">bool</span> ret, ) <span class="hljs-operator">=</span> owner.<span class="hljs-built_in">call</span>{ <span class="hljs-built_in">value</span>: <span class="hljs-built_in">msg</span>.<span class="hljs-built_in">value</span> }(<span class="hljs-string">""</span>);
        <span class="hljs-built_in">require</span>(ret);
    }
}
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/ef342bf0517e362c98da237f7b792bf72aeb7fe9136920fead35ea5afb20ce6b.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

contract Contract {
    address public owner;
    address public charity;

    constructor(address _charity) {
        owner = msg.sender;
        charity = _charity;
    }

    receive() external payable {
    }

    function tip() public payable {
        (bool ret, ) = owner.call{ value: msg.value }(&quot;&quot;);
        require(ret);
    }

    function donate() public {
        (bool ret, ) = charity.call{ value: address(this).balance }(&quot;&quot;);
        require(ret);
        selfdestruct(payable(msg.sender));
    }
}
"><code><span class="hljs-comment">// SPDX-License-Identifier: MIT</span>
<span class="hljs-meta"><span class="hljs-keyword">pragma</span> <span class="hljs-keyword">solidity</span> ^0.8.4;</span>

<span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">Contract</span> </span>{
    <span class="hljs-keyword">address</span> <span class="hljs-keyword">public</span> owner;
    <span class="hljs-keyword">address</span> <span class="hljs-keyword">public</span> charity;

    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> _charity</span>) </span>{
        owner <span class="hljs-operator">=</span> <span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>;
        charity <span class="hljs-operator">=</span> _charity;
    }

    <span class="hljs-function"><span class="hljs-keyword">receive</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title"><span class="hljs-keyword">payable</span></span> </span>{
    }

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">tip</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> <span class="hljs-title"><span class="hljs-keyword">payable</span></span> </span>{
        (<span class="hljs-keyword">bool</span> ret, ) <span class="hljs-operator">=</span> owner.<span class="hljs-built_in">call</span>{ <span class="hljs-built_in">value</span>: <span class="hljs-built_in">msg</span>.<span class="hljs-built_in">value</span> }(<span class="hljs-string">""</span>);
        <span class="hljs-built_in">require</span>(ret);
    }

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">donate</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> </span>{
        (<span class="hljs-keyword">bool</span> ret, ) <span class="hljs-operator">=</span> charity.<span class="hljs-built_in">call</span>{ <span class="hljs-built_in">value</span>: <span class="hljs-keyword">address</span>(<span class="hljs-built_in">this</span>).<span class="hljs-built_in">balance</span> }(<span class="hljs-string">""</span>);
        <span class="hljs-built_in">require</span>(ret);
        <span class="hljs-built_in">selfdestruct</span>(<span class="hljs-keyword">payable</span>(<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>));
    }
}
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/0c2a6a7e097a02143512c4801dde251c01f798c504883bd3a9e4ad6da27eb54d.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

contract Contract {
    address public owner;
    address public charity;

    constructor(address _charity) {
        owner = msg.sender;
        charity = _charity;
    }

    receive() external payable {
    }

    function tip() public payable {
        (bool ret, ) = owner.call{ value: msg.value }(&quot;&quot;);
        require(ret);
    }

    function donate() public {
        (bool ret, ) = charity.call{ value: address(this).balance }(&quot;&quot;);
        require(ret);
        selfdestruct(payable(msg.sender));
    }
}
"><code><span class="hljs-comment">// SPDX-License-Identifier: MIT</span>
<span class="hljs-meta"><span class="hljs-keyword">pragma</span> <span class="hljs-keyword">solidity</span> ^0.8.4;</span>

<span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">Contract</span> </span>{
    <span class="hljs-keyword">address</span> <span class="hljs-keyword">public</span> owner;
    <span class="hljs-keyword">address</span> <span class="hljs-keyword">public</span> charity;

    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> _charity</span>) </span>{
        owner <span class="hljs-operator">=</span> <span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>;
        charity <span class="hljs-operator">=</span> _charity;
    }

    <span class="hljs-function"><span class="hljs-keyword">receive</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title"><span class="hljs-keyword">payable</span></span> </span>{
    }

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">tip</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> <span class="hljs-title"><span class="hljs-keyword">payable</span></span> </span>{
        (<span class="hljs-keyword">bool</span> ret, ) <span class="hljs-operator">=</span> owner.<span class="hljs-built_in">call</span>{ <span class="hljs-built_in">value</span>: <span class="hljs-built_in">msg</span>.<span class="hljs-built_in">value</span> }(<span class="hljs-string">""</span>);
        <span class="hljs-built_in">require</span>(ret);
    }

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">donate</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> </span>{
        (<span class="hljs-keyword">bool</span> ret, ) <span class="hljs-operator">=</span> charity.<span class="hljs-built_in">call</span>{ <span class="hljs-built_in">value</span>: <span class="hljs-keyword">address</span>(<span class="hljs-built_in">this</span>).<span class="hljs-built_in">balance</span> }(<span class="hljs-string">""</span>);
        <span class="hljs-built_in">require</span>(ret);
        <span class="hljs-built_in">selfdestruct</span>(<span class="hljs-keyword">payable</span>(<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>));
    }
}
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/44a2744aa1a9ffec6d2274f904ef9ebd126aab5e797d3cbf87bb2ea153c34ca5.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/3ff1d79e72ec2e7fa69ddcab35a63182f452cfc7d9f44df11c439c9cc300e7bc.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

contract Contract  {
    address deployer;

    constructor() payable {
        require(msg.value &gt;= 1000000000000000000);
        deployer = msg.sender;
    }

    function withdraw() public {
        (bool ret, ) = deployer.call{ value: address(this).balance }(&quot;&quot;);
        require(ret);
    }
}
"><code><span class="hljs-comment">// SPDX-License-Identifier: MIT</span>
<span class="hljs-meta"><span class="hljs-keyword">pragma</span> <span class="hljs-keyword">solidity</span> ^0.8.4;</span>

<span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">Contract</span>  </span>{
    <span class="hljs-keyword">address</span> deployer;

    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">payable</span></span> </span>{
        <span class="hljs-built_in">require</span>(<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">value</span> <span class="hljs-operator">></span><span class="hljs-operator">=</span> <span class="hljs-number">1000000000000000000</span>);
        deployer <span class="hljs-operator">=</span> <span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>;
    }

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">withdraw</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> </span>{
        (<span class="hljs-keyword">bool</span> ret, ) <span class="hljs-operator">=</span> deployer.<span class="hljs-built_in">call</span>{ <span class="hljs-built_in">value</span>: <span class="hljs-keyword">address</span>(<span class="hljs-built_in">this</span>).<span class="hljs-built_in">balance</span> }(<span class="hljs-string">""</span>);
        <span class="hljs-built_in">require</span>(ret);
    }
}
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/db7f513e53e97918335076d40759402e8d6db35df689e4b5d6bd0aefb832c188.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

contract Contract  {
    address deployer;

    constructor() payable {
        require(msg.value &gt;= 1000000000000000000);
        deployer = msg.sender;
    }

    function withdraw() public {
        require(deployer == msg.sender);
        (bool ret, ) = deployer.call{ value: address(this).balance }(&quot;&quot;);
        require(ret);
    }
}
"><code><span class="hljs-comment">// SPDX-License-Identifier: MIT</span>
<span class="hljs-meta"><span class="hljs-keyword">pragma</span> <span class="hljs-keyword">solidity</span> ^0.8.4;</span>

<span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">Contract</span>  </span>{
    <span class="hljs-keyword">address</span> deployer;

    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">payable</span></span> </span>{
        <span class="hljs-built_in">require</span>(<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">value</span> <span class="hljs-operator">></span><span class="hljs-operator">=</span> <span class="hljs-number">1000000000000000000</span>);
        deployer <span class="hljs-operator">=</span> <span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>;
    }

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">withdraw</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> </span>{
        <span class="hljs-built_in">require</span>(deployer <span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>);
        (<span class="hljs-keyword">bool</span> ret, ) <span class="hljs-operator">=</span> deployer.<span class="hljs-built_in">call</span>{ <span class="hljs-built_in">value</span>: <span class="hljs-keyword">address</span>(<span class="hljs-built_in">this</span>).<span class="hljs-built_in">balance</span> }(<span class="hljs-string">""</span>);
        <span class="hljs-built_in">require</span>(ret);
    }
}
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/3f05e25d984f0e185232d7f4a98716654e044f9ba96165038c1f50d51502560d.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="// SPDX-License-Identifier: MIT
pragma solidity ^0.7.5;

contract Contract {
    address owner;
    uint configA;
    uint configB;
    uint configC;

    constructor() {
        owner = msg.sender;
    }

    function setA(uint _configA) public onlyOwner {
        configA = _configA;
    }

    function setB(uint _configB) public onlyOwner {
        configB = _configB;
    }

    function setC(uint _configC) public onlyOwner {
        configC = _configC;
    }

    modifier onlyOwner {
        require(owner == msg.sender);
        _;
    }
}
"><code><span class="hljs-comment">// SPDX-License-Identifier: MIT</span>
<span class="hljs-meta"><span class="hljs-keyword">pragma</span> <span class="hljs-keyword">solidity</span> ^0.7.5;</span>

<span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">Contract</span> </span>{
    <span class="hljs-keyword">address</span> owner;
    <span class="hljs-keyword">uint</span> configA;
    <span class="hljs-keyword">uint</span> configB;
    <span class="hljs-keyword">uint</span> configC;

    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params"></span>) </span>{
        owner <span class="hljs-operator">=</span> <span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>;
    }

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">setA</span>(<span class="hljs-params"><span class="hljs-keyword">uint</span> _configA</span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> <span class="hljs-title">onlyOwner</span> </span>{
        configA <span class="hljs-operator">=</span> _configA;
    }

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">setB</span>(<span class="hljs-params"><span class="hljs-keyword">uint</span> _configB</span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> <span class="hljs-title">onlyOwner</span> </span>{
        configB <span class="hljs-operator">=</span> _configB;
    }

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">setC</span>(<span class="hljs-params"><span class="hljs-keyword">uint</span> _configC</span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> <span class="hljs-title">onlyOwner</span> </span>{
        configC <span class="hljs-operator">=</span> _configC;
    }

    <span class="hljs-function"><span class="hljs-keyword">modifier</span> <span class="hljs-title">onlyOwner</span> </span>{
        <span class="hljs-built_in">require</span>(owner <span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>);
        <span class="hljs-keyword">_</span>;
    }
}
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/10336a96c07cc22ae1299bebd296c51c106bb473e842a27dd60f4f842f803648.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e038b8b1a724cb8d5cc563d97492288b3cbf8b2f86e576b0079ce8568c99bb5a.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

interface IHero {
    function alert() external;
}

contract Sidekick {
    function sendAlert(address hero) external {
        IHero(hero).alert();
    }
}
"><code><span class="hljs-comment">// SPDX-License-Identifier: MIT</span>
<span class="hljs-meta"><span class="hljs-keyword">pragma</span> <span class="hljs-keyword">solidity</span> ^0.8.4;</span>

<span class="hljs-class"><span class="hljs-keyword">interface</span> <span class="hljs-title">IHero</span> </span>{
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">alert</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span></span>;
}

<span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">Sidekick</span> </span>{
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">sendAlert</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> hero</span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> </span>{
        IHero(hero).alert();
    }
}
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c9cbd5ad0bf05ca3d109e34a4cb03ee7f8e8851ff88559cc86c6cbb8a293a9bc.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

contract Sidekick {
    function sendAlert(address hero) external {
        bytes4 signature = bytes4(keccak256(&quot;alert()&quot;));

        (bool ret, ) = hero.call(abi.encodePacked(signature));

        require(ret);
    }
}
"><code><span class="hljs-comment">// SPDX-License-Identifier: MIT</span>
<span class="hljs-meta"><span class="hljs-keyword">pragma</span> <span class="hljs-keyword">solidity</span> ^0.8.4;</span>

<span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">Sidekick</span> </span>{
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">sendAlert</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> hero</span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> </span>{
        <span class="hljs-keyword">bytes4</span> signature <span class="hljs-operator">=</span> <span class="hljs-keyword">bytes4</span>(<span class="hljs-built_in">keccak256</span>(<span class="hljs-string">"alert()"</span>));

        (<span class="hljs-keyword">bool</span> ret, ) <span class="hljs-operator">=</span> hero.<span class="hljs-built_in">call</span>(<span class="hljs-built_in">abi</span>.<span class="hljs-built_in">encodePacked</span>(signature));

        <span class="hljs-built_in">require</span>(ret);
    }
}
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b75c84e167b8f131b24598da6a19ced4196e209f30322fd7e0b96e162ba065be.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

contract Sidekick {
    function sendAlert(address hero, uint enemies, bool armed) external {
        (bool ret, ) = hero.call(
            abi.encodeWithSignature(&quot;alert(uint256,bool)&quot;, enemies, armed)
        );

        require(ret);
    }
}
"><code><span class="hljs-comment">// SPDX-License-Identifier: MIT</span>
<span class="hljs-meta"><span class="hljs-keyword">pragma</span> <span class="hljs-keyword">solidity</span> ^0.8.4;</span>

<span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">Sidekick</span> </span>{
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">sendAlert</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> hero, <span class="hljs-keyword">uint</span> enemies, <span class="hljs-keyword">bool</span> armed</span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> </span>{
        (<span class="hljs-keyword">bool</span> ret, ) <span class="hljs-operator">=</span> hero.<span class="hljs-built_in">call</span>(
            <span class="hljs-built_in">abi</span>.<span class="hljs-built_in">encodeWithSignature</span>(<span class="hljs-string">"alert(uint256,bool)"</span>, enemies, armed)
        );

        <span class="hljs-built_in">require</span>(ret);
    }
}
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/8bac2cf8383d763b14281756d740d3ac105e570c47970681671110ec644b2bed.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

contract Sidekick {
    function relay(address hero, bytes memory data) external {
        (bool ret, ) = hero.call(data);
        require(ret);
    }
}
"><code><span class="hljs-comment">// SPDX-License-Identifier: MIT</span>
<span class="hljs-meta"><span class="hljs-keyword">pragma</span> <span class="hljs-keyword">solidity</span> ^0.8.4;</span>

<span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">Sidekick</span> </span>{
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">relay</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> hero, <span class="hljs-keyword">bytes</span> <span class="hljs-keyword">memory</span> data</span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> </span>{
        (<span class="hljs-keyword">bool</span> ret, ) <span class="hljs-operator">=</span> hero.<span class="hljs-built_in">call</span>(data);
        <span class="hljs-built_in">require</span>(ret);
    }
}
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/08a907bb404e65806c52ba43795bdd965fade6f9f4486a0db422208590cac815.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

contract Sidekick {
    function makeContact(address hero) external {
        (bool ret, ) = hero.call(abi.encodeWithSignature(&quot;fallback()&quot;));
        require(ret);
    }
}
"><code><span class="hljs-comment">// SPDX-License-Identifier: MIT</span>
<span class="hljs-meta"><span class="hljs-keyword">pragma</span> <span class="hljs-keyword">solidity</span> ^0.8.4;</span>

<span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">Sidekick</span> </span>{
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">makeContact</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> hero</span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> </span>{
        (<span class="hljs-keyword">bool</span> ret, ) <span class="hljs-operator">=</span> hero.<span class="hljs-built_in">call</span>(<span class="hljs-built_in">abi</span>.<span class="hljs-built_in">encodeWithSignature</span>(<span class="hljs-string">"fallback()"</span>));
        <span class="hljs-built_in">require</span>(ret);
    }
}
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/442b6f35ada8947d160a148a67d5f5fe9e063c7c48d3df07ae794db3dd3301d3.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="pragma solidity ^0.8.4;

contract Contract {
    function sumAndAverage(uint a, uint b, uint c, uint d) external pure returns(uint,uint) {
        uint sum = a + b + c + d;
        uint average = sum / 4;

        return (sum, average);
    }
}
"><code><span class="hljs-meta"><span class="hljs-keyword">pragma</span> <span class="hljs-keyword">solidity</span> ^0.8.4;</span>

<span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">Contract</span> </span>{
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">sumAndAverage</span>(<span class="hljs-params"><span class="hljs-keyword">uint</span> a, <span class="hljs-keyword">uint</span> b, <span class="hljs-keyword">uint</span> c, <span class="hljs-keyword">uint</span> d</span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> <span class="hljs-title"><span class="hljs-keyword">pure</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span>(<span class="hljs-params"><span class="hljs-keyword">uint</span>,<span class="hljs-keyword">uint</span></span>) </span>{
        <span class="hljs-keyword">uint</span> sum <span class="hljs-operator">=</span> a <span class="hljs-operator">+</span> b <span class="hljs-operator">+</span> c <span class="hljs-operator">+</span> d;
        <span class="hljs-keyword">uint</span> average <span class="hljs-operator">=</span> sum <span class="hljs-operator">/</span> <span class="hljs-number">4</span>;

        <span class="hljs-keyword">return</span> (sum, average);
    }
}
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/8de34c47a6a8340a3e07ecfbbc97a14f8daa96b60a36457f123a4736063cba57.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

contract Contract {
    uint countdown = 10;

    function tick() external {
        countdown--;
        if (0 == countdown) {
            selfdestruct(payable(msg.sender));
        }
    }
}
"><code><span class="hljs-comment">// SPDX-License-Identifier: MIT</span>
<span class="hljs-meta"><span class="hljs-keyword">pragma</span> <span class="hljs-keyword">solidity</span> ^0.8.4;</span>

<span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">Contract</span> </span>{
    <span class="hljs-keyword">uint</span> countdown <span class="hljs-operator">=</span> <span class="hljs-number">10</span>;

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">tick</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span> </span>{
        countdown<span class="hljs-operator">-</span><span class="hljs-operator">-</span>;
        <span class="hljs-keyword">if</span> (<span class="hljs-number">0</span> <span class="hljs-operator">=</span><span class="hljs-operator">=</span> countdown) {
            <span class="hljs-built_in">selfdestruct</span>(<span class="hljs-keyword">payable</span>(<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>));
        }
    }
}
</code></pre>]]></content:encoded>
            <author>cryptovuive@newsletter.paragraph.com (meteosrds)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/d10a65481cff26688415868b7285be717e848758dba596c324720b940e177329.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Ethereum
]]></title>
            <link>https://paragraph.com/@cryptovuive/ethereum</link>
            <guid>O1er9DxlJIBVyCFzUjeQ</guid>
            <pubDate>Tue, 10 Jan 2023 15:00:17 GMT</pubDate>
            <description><![CDATA[Ethereum Transactionsconst provider = require('./provider'); async function getBlockNumber() { const ret = await provider.send({ jsonrpc: "2.0", id: 1, method: "eth_blockNumber", }); return ret.result; } module.exports = getBlockNumber; const provider = require('./provider'); async function getBalance(address) { const ret = await provider.send({ jsonrpc: "2.0", id: 1, method: "eth_getBalance", params: [address, "latest"], }); return ret.result; } module.exports = getBalance; const provider = ...]]></description>
            <content:encoded><![CDATA[<h3 id="h-ethereum-transactions" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Ethereum Transactions</h3><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/9c734d75ccfa18851a467781c02c67dc12234ccaa27858e214bbd49a1f8d5106.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/35ca9d6762117a5f16902911961d44980da36859bfe108d42a5b5c4eb773cb57.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const provider = require(&apos;./provider&apos;);

async function getBlockNumber() {
    const ret = await provider.send({
        jsonrpc: &quot;2.0&quot;,
        id: 1,
        method: &quot;eth_blockNumber&quot;,
    });
    return ret.result;
}

module.exports = getBlockNumber;
"><code>const provider <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'./provider'</span>);

async <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getBlockNumber</span>(<span class="hljs-params"></span>) </span>{
    const ret <span class="hljs-operator">=</span> await provider.<span class="hljs-built_in">send</span>({
        jsonrpc: <span class="hljs-string">"2.0"</span>,
        id: <span class="hljs-number">1</span>,
        method: <span class="hljs-string">"eth_blockNumber"</span>,
    });
    <span class="hljs-keyword">return</span> ret.result;
}

module.exports <span class="hljs-operator">=</span> getBlockNumber;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/6e4e04372638e92eb627ad94d4c4addfafbdc93fe3f7b9e4e1f2fd81eb56d1b4.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const provider = require(&apos;./provider&apos;);

async function getBalance(address) {
    const ret = await provider.send({
        jsonrpc: &quot;2.0&quot;,
        id: 1,
        method: &quot;eth_getBalance&quot;,
        params: [address, &quot;latest&quot;],
    });
    return ret.result;
}

module.exports = getBalance;
"><code>const provider <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'./provider'</span>);

async <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getBalance</span>(<span class="hljs-params"><span class="hljs-keyword">address</span></span>) </span>{
    const ret <span class="hljs-operator">=</span> await provider.<span class="hljs-built_in">send</span>({
        jsonrpc: <span class="hljs-string">"2.0"</span>,
        id: <span class="hljs-number">1</span>,
        method: <span class="hljs-string">"eth_getBalance"</span>,
        params: [<span class="hljs-keyword">address</span>, <span class="hljs-string">"latest"</span>],
    });
    <span class="hljs-keyword">return</span> ret.result;
}

module.exports <span class="hljs-operator">=</span> getBalance;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/edb4a1348bd0183e5112d2b19a976863c4da4e5319a54237a4fef3cfdbfe7300.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const provider = require(&apos;./provider&apos;);

async function getNonce(address) {
    const ret = await provider.send({
        jsonrpc: &quot;2.0&quot;,
        id: 1,
        method: &quot;eth_getTransactionCount&quot;,
        params: [address, &quot;latest&quot;],
    });
    return ret.result;
}

module.exports = getNonce;
"><code>const provider <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'./provider'</span>);

async <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getNonce</span>(<span class="hljs-params"><span class="hljs-keyword">address</span></span>) </span>{
    const ret <span class="hljs-operator">=</span> await provider.<span class="hljs-built_in">send</span>({
        jsonrpc: <span class="hljs-string">"2.0"</span>,
        id: <span class="hljs-number">1</span>,
        method: <span class="hljs-string">"eth_getTransactionCount"</span>,
        params: [<span class="hljs-keyword">address</span>, <span class="hljs-string">"latest"</span>],
    });
    <span class="hljs-keyword">return</span> ret.result;
}

module.exports <span class="hljs-operator">=</span> getNonce;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/9955d59d176515835fc88a468ba2b7b6ccb2d43fd4615c35c66f197a403f50fb.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const provider = require(&apos;./provider&apos;);

async function getTotalTransactions(blockNumber) {
    const ret = await provider.send({
        jsonrpc: &quot;2.0&quot;,
        id: 1,
        method: &quot;eth_getBlockByNumber&quot;,
        params: [blockNumber, false],
    });
    return ret.result.transactions.length;
}

module.exports = getTotalTransactions;
"><code>const provider <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'./provider'</span>);

async <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getTotalTransactions</span>(<span class="hljs-params">blockNumber</span>) </span>{
    const ret <span class="hljs-operator">=</span> await provider.<span class="hljs-built_in">send</span>({
        jsonrpc: <span class="hljs-string">"2.0"</span>,
        id: <span class="hljs-number">1</span>,
        method: <span class="hljs-string">"eth_getBlockByNumber"</span>,
        params: [blockNumber, <span class="hljs-literal">false</span>],
    });
    <span class="hljs-keyword">return</span> ret.result.transactions.<span class="hljs-built_in">length</span>;
}

module.exports <span class="hljs-operator">=</span> getTotalTransactions;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/112a621686a784e22b0baa32ff29e85ccab7ddc86aa2173c2d3da2e61169bf5a.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const provider = require(&apos;./provider&apos;);

async function getTotalBalance(addresses) {
    let reqs = [];
    for (let i = 0; i &lt; addresses.length; i++) {
        reqs.push({
            jsonrpc: &quot;2.0&quot;,
            id: 1,
            method: &quot;eth_getBalance&quot;,
            params: [addresses[i], &quot;latest&quot;],
        });
    }
    const resps = await provider.send(reqs);
    let t = 0;
    for (let i = 0; i &lt; resps.length; i++) {
        t = t + parseInt(resps[i].result);
    }
    return t;
}

module.exports = getTotalBalance;
"><code>const provider <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'./provider'</span>);

async <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getTotalBalance</span>(<span class="hljs-params">addresses</span>) </span>{
    let reqs <span class="hljs-operator">=</span> [];
    <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> addresses.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
        reqs.<span class="hljs-built_in">push</span>({
            jsonrpc: <span class="hljs-string">"2.0"</span>,
            id: <span class="hljs-number">1</span>,
            method: <span class="hljs-string">"eth_getBalance"</span>,
            params: [addresses[i], <span class="hljs-string">"latest"</span>],
        });
    }
    const resps <span class="hljs-operator">=</span> await provider.<span class="hljs-built_in">send</span>(reqs);
    let t <span class="hljs-operator">=</span> <span class="hljs-number">0</span>;
    <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> resps.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
        t <span class="hljs-operator">=</span> t <span class="hljs-operator">+</span> parseInt(resps[i].result);
    }
    <span class="hljs-keyword">return</span> t;
}

module.exports <span class="hljs-operator">=</span> getTotalBalance;
</code></pre><h3 id="h-front-end-libraries" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Front-End Libraries</h3><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b45dace5ea24fb7388015a8a39daf670cf821d20c9b5599e406807c1d593a89e.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c18a00e38b710adad4a64d3e29212094450cb6b4d6a9cd75d23619d57aecee81.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const ethers = require(&apos;ethers&apos;);
const { Wallet } = ethers;

// create a wallet with a private key
const wallet1 = new Wallet(&quot;0xf2f48ee19680706196e2e339e5da3491186e0c4c5030670656b0e0164837257d&quot;);

// create a wallet from mnemonic
const wallet2 = Wallet.fromMnemonic(&quot;plate lawn minor crouch bubble evidence palace fringe bamboo laptop dutch ice&quot;);

module.exports = {
    wallet1,
    wallet2,
}
"><code>const ethers <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'ethers'</span>);
const { Wallet } <span class="hljs-operator">=</span> ethers;

<span class="hljs-comment">// create a wallet with a private key</span>
const wallet1 <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> Wallet(<span class="hljs-string">"0xf2f48ee19680706196e2e339e5da3491186e0c4c5030670656b0e0164837257d"</span>);

<span class="hljs-comment">// create a wallet from mnemonic</span>
const wallet2 <span class="hljs-operator">=</span> Wallet.fromMnemonic(<span class="hljs-string">"plate lawn minor crouch bubble evidence palace fringe bamboo laptop dutch ice"</span>);

module.exports <span class="hljs-operator">=</span> {
    wallet1,
    wallet2,
}
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c0e9ad793f848b30862936dcf03560fd4a9402e9b10db5f5a30cf185e579d8a3.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const ethers = require(&apos;ethers&apos;);
const { Wallet, utils } = ethers;
const { wallet1 } = require(&apos;./wallets&apos;);

const signaturePromise = wallet1.signTransaction({
    value: utils.parseEther(&apos;1&apos;, &apos;ether&apos;),
    to: &quot;0xdD0DC6FB59E100ee4fA9900c2088053bBe14DE92&quot;,
    gasLimit: utils.parseUnits(&apos;21000&apos;, &apos;wei&apos;),
});

module.exports = signaturePromise;
"><code>const ethers <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'ethers'</span>);
const { Wallet, utils } <span class="hljs-operator">=</span> ethers;
const { wallet1 } <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'./wallets'</span>);

const signaturePromise <span class="hljs-operator">=</span> wallet1.signTransaction({
    <span class="hljs-built_in">value</span>: utils.parseEther(<span class="hljs-string">'1'</span>, <span class="hljs-string">'ether'</span>),
    to: <span class="hljs-string">"0xdD0DC6FB59E100ee4fA9900c2088053bBe14DE92"</span>,
    gasLimit: utils.parseUnits(<span class="hljs-string">'21000'</span>, <span class="hljs-string">'wei'</span>),
});

module.exports <span class="hljs-operator">=</span> signaturePromise;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a1692790aaf4c64b0b132c3672338b3d39e1b340d80965327a276d4c016c9c59.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const { Wallet, utils, providers } = require(&apos;ethers&apos;);
const { ganacheProvider, PRIVATE_KEY } = require(&apos;./config&apos;);

const provider = undefined; 

const wallet = new Wallet(PRIVATE_KEY);

async function sendEther({ value, to }) {
    const rawTx = await wallet.signTransaction({ 
        value, to, 
        gasLimit: 0x5208,
        gasPrice: 0x3b9aca00 
    });

    const provider = new providers.Web3Provider(ganacheProvider);
    resp = await provider.sendTransaction(rawTx);
    return resp;
}

module.exports = sendEther;
"><code>const { Wallet, utils, providers } <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'ethers'</span>);
const { ganacheProvider, PRIVATE_KEY } <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'./config'</span>);

const provider <span class="hljs-operator">=</span> undefined; 

const wallet <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> Wallet(PRIVATE_KEY);

async <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">sendEther</span>(<span class="hljs-params">{ value, to }</span>) </span>{
    const rawTx <span class="hljs-operator">=</span> await wallet.signTransaction({ 
        value, to, 
        gasLimit: <span class="hljs-number">0x5208</span>,
        gasPrice: <span class="hljs-number">0x3b9aca00</span> 
    });

    const provider <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> providers.Web3Provider(ganacheProvider);
    resp <span class="hljs-operator">=</span> await provider.sendTransaction(rawTx);
    <span class="hljs-keyword">return</span> resp;
}

module.exports <span class="hljs-operator">=</span> sendEther;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/9ceebc9749be24646f419c7e04f6043b0560e83d76a1b24e54def138d686c2fd.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const { Wallet, utils, providers } = require(&apos;ethers&apos;);
const { ganacheProvider, PRIVATE_KEY } = require(&apos;./config&apos;);

const provider = new providers.Web3Provider(ganacheProvider);
const wallet = new Wallet(PRIVATE_KEY, provider);

async function sendEther({ value, to }) {
    return wallet.sendTransaction({ value, to });
}

module.exports = sendEther;
"><code>const { Wallet, utils, providers } <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'ethers'</span>);
const { ganacheProvider, PRIVATE_KEY } <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'./config'</span>);

const provider <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> providers.Web3Provider(ganacheProvider);
const wallet <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> Wallet(PRIVATE_KEY, provider);

async <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">sendEther</span>(<span class="hljs-params">{ value, to }</span>) </span>{
    <span class="hljs-keyword">return</span> wallet.sendTransaction({ value, to });
}

module.exports <span class="hljs-operator">=</span> sendEther;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/25c32e25d99cf3f1ad4c1c160142c5ea943563d9c5caca1793124e0f29427924.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const { Wallet, providers } = require(&apos;ethers&apos;);
const { ganacheProvider } = require(&apos;./config&apos;);

const provider = new providers.Web3Provider(ganacheProvider);

function findMyBalance(privateKey) {
    const wallet = new Wallet(privateKey, provider);
    return wallet.getBalance();
}

module.exports = findMyBalance;
"><code>const { Wallet, providers } <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'ethers'</span>);
const { ganacheProvider } <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'./config'</span>);

const provider <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> providers.Web3Provider(ganacheProvider);

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">findMyBalance</span>(<span class="hljs-params">privateKey</span>) </span>{
    const wallet <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> Wallet(privateKey, provider);
    <span class="hljs-keyword">return</span> wallet.getBalance();
}

module.exports <span class="hljs-operator">=</span> findMyBalance;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e0afebc6ea665247812a144cd16f8a7f632f16ea03e15a0c2996cf56fef66bbf.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const { utils, providers, Wallet } = require(&apos;ethers&apos;);
const { ganacheProvider } = require(&apos;./config&apos;);

const provider = new providers.Web3Provider(ganacheProvider);

/**
 * Donate at least 1 ether from the wallet to each charity
 * @param   {string} a hex string private key for a wallet with 10 ETH
 * @param   {array} an array of ethereum charity addresses 
 *
 * @returns {Promise} a promise that resolves after all donations have been sent
 */
async function donate(privateKey, charities) {
    const wallet = new Wallet(privateKey, provider);
    let resps = [];
    nonce = await wallet.getTransactionCount();
    for (let i = 0; i &lt; charities.length; i++) {
        const rawTx = await wallet.signTransaction({
            value: utils.parseEther(&apos;1&apos;, &apos;ether&apos;),
            to: charities[i],
            gasLimit: utils.parseUnits(&apos;21000&apos;, &apos;wei&apos;),
            nonce: nonce + i
        });
        resps.push(provider.sendTransaction(rawTx));
    }

    return Promise.all(resps);
}

module.exports = donate;
"><code>const { utils, providers, Wallet } <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'ethers'</span>);
const { ganacheProvider } <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'./config'</span>);

const provider <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> providers.Web3Provider(ganacheProvider);

<span class="hljs-comment">/**
 * Donate at least 1 ether from the wallet to each charity
 * @param   {string} a hex string private key for a wallet with 10 ETH
 * @param   {array} an array of ethereum charity addresses 
 *
 * @returns {Promise} a promise that resolves after all donations have been sent
 */</span>
async <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">donate</span>(<span class="hljs-params">privateKey, charities</span>) </span>{
    const wallet <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> Wallet(privateKey, provider);
    let resps <span class="hljs-operator">=</span> [];
    nonce <span class="hljs-operator">=</span> await wallet.getTransactionCount();
    <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> charities.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
        const rawTx <span class="hljs-operator">=</span> await wallet.signTransaction({
            <span class="hljs-built_in">value</span>: utils.parseEther(<span class="hljs-string">'1'</span>, <span class="hljs-string">'ether'</span>),
            to: charities[i],
            gasLimit: utils.parseUnits(<span class="hljs-string">'21000'</span>, <span class="hljs-string">'wei'</span>),
            nonce: nonce <span class="hljs-operator">+</span> i
        });
        resps.<span class="hljs-built_in">push</span>(provider.sendTransaction(rawTx));
    }

    <span class="hljs-keyword">return</span> Promise.all(resps);
}

module.exports <span class="hljs-operator">=</span> donate;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c6f6227f86a7fe506e8049724ee20f34ec259ff43d16bbb59fce1e75a9d750b2.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const { providers } = require(&apos;ethers&apos;);
const { ganacheProvider } = require(&apos;./config&apos;);

const provider = new providers.Web3Provider(ganacheProvider);

/**
 * Given an ethereum address find all the addresses
 * that were sent ether from that address
 * @param {string} address - The hexidecimal address for the sender
 * @async
 * @returns {Array} all the addresses that receieved ether
 */
async function findEther(address) {
    let addrs = [];
    let blockNum = await provider.getBlockNumber();
    for (let i = 0; i &lt;= blockNum; i++) {
        let block = await provider.getBlockWithTransactions(i);
        block.transactions.forEach((tx) =&gt; {
            if (tx.from === address) {
                addrs.push(tx.to);
            }
        });
    }
    return addrs;
}

module.exports = findEther;
"><code>const { providers } <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'ethers'</span>);
const { ganacheProvider } <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'./config'</span>);

const provider <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> providers.Web3Provider(ganacheProvider);

<span class="hljs-comment">/**
 * Given an ethereum address find all the addresses
 * that were sent ether from that address
 * @param {string} address - The hexidecimal address for the sender
 * @async
 * @returns {Array} all the addresses that receieved ether
 */</span>
async <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">findEther</span>(<span class="hljs-params"><span class="hljs-keyword">address</span></span>) </span>{
    let addrs <span class="hljs-operator">=</span> [];
    let blockNum <span class="hljs-operator">=</span> await provider.getBlockNumber();
    <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span><span class="hljs-operator">=</span> blockNum; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
        let <span class="hljs-built_in">block</span> <span class="hljs-operator">=</span> await provider.getBlockWithTransactions(i);
        <span class="hljs-built_in">block</span>.transactions.forEach((<span class="hljs-built_in">tx</span>) <span class="hljs-operator">=</span><span class="hljs-operator">></span> {
            <span class="hljs-keyword">if</span> (<span class="hljs-built_in">tx</span>.from <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-keyword">address</span>) {
                addrs.<span class="hljs-built_in">push</span>(<span class="hljs-built_in">tx</span>.to);
            }
        });
    }
    <span class="hljs-keyword">return</span> addrs;
}

module.exports <span class="hljs-operator">=</span> findEther;
</code></pre>]]></content:encoded>
            <author>cryptovuive@newsletter.paragraph.com (meteosrds)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/d10a65481cff26688415868b7285be717e848758dba596c324720b940e177329.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Blockchain Cryptography + Blockchain Storage

]]></title>
            <link>https://paragraph.com/@cryptovuive/blockchain-cryptography-blockchain-storage</link>
            <guid>TLcdSITSGpVHRZptjAPt</guid>
            <pubDate>Tue, 10 Jan 2023 14:44:04 GMT</pubDate>
            <description><![CDATA[chọn bài học ETH nhé1 - Blockchain Cryptographyconst { sha256 } = require("ethereum-cryptography/sha256"); const { toHex, utf8ToBytes } = require("ethereum-cryptography/utils"); // the possible colors that the hash could represent const COLORS = ['red', 'green', 'blue', 'yellow', 'pink', 'orange']; // given a hash, return the color that created the hash function findColor(hash) { hex = toHex(hash); for (let i = 0; i &#x3C; COLORS.length; i++) { b = utf8ToBytes(COLORS[i]); h = sha256(b); if (t...]]></description>
            <content:encoded><![CDATA[<p>chọn bài học ETH nhé</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/625b215fa97d317a3830f99fcef6cfae4e8369e2e2f7cea6a822b016216e4ec0.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h3 id="h-1-blockchain-cryptography" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">1 - Blockchain Cryptography</h3><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b37802922b6505bdcce30e39714ad884525cd29be2340c73c2f80bd349225d0d.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const { sha256 } = require(&quot;ethereum-cryptography/sha256&quot;);
const { toHex, utf8ToBytes } = require(&quot;ethereum-cryptography/utils&quot;);

// the possible colors that the hash could represent
const COLORS = [&apos;red&apos;, &apos;green&apos;, &apos;blue&apos;, &apos;yellow&apos;, &apos;pink&apos;, &apos;orange&apos;];

// given a hash, return the color that created the hash
function findColor(hash) {
    hex = toHex(hash);
    for (let i = 0; i &lt; COLORS.length; i++) {
        b = utf8ToBytes(COLORS[i]);
        h = sha256(b);
        if (toHex(h) === hex) {
            return COLORS[i];
        }
    }
}

module.exports = findColor;
"><code>const { <span class="hljs-built_in">sha256</span> } <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">"ethereum-cryptography/sha256"</span>);
const { toHex, utf8ToBytes } <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">"ethereum-cryptography/utils"</span>);

<span class="hljs-comment">// the possible colors that the hash could represent</span>
const COLORS <span class="hljs-operator">=</span> [<span class="hljs-string">'red'</span>, <span class="hljs-string">'green'</span>, <span class="hljs-string">'blue'</span>, <span class="hljs-string">'yellow'</span>, <span class="hljs-string">'pink'</span>, <span class="hljs-string">'orange'</span>];

<span class="hljs-comment">// given a hash, return the color that created the hash</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">findColor</span>(<span class="hljs-params">hash</span>) </span>{
    hex <span class="hljs-operator">=</span> toHex(hash);
    <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> COLORS.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
        b <span class="hljs-operator">=</span> utf8ToBytes(COLORS[i]);
        h <span class="hljs-operator">=</span> <span class="hljs-built_in">sha256</span>(b);
        <span class="hljs-keyword">if</span> (toHex(h) <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> hex) {
            <span class="hljs-keyword">return</span> COLORS[i];
        }
    }
}

module.exports <span class="hljs-operator">=</span> findColor;
</code></pre><h3 id="h-digital-signatures" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Digital Signatures</h3><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b59c02c026f772a0193b1044b1d0dc6cdc5dbf50c97b4209da33e42502de2823.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c4ae0d8efac0e176bd61aac5cb69aec60298ab99447ab4034d7a069198ce65b5.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const { keccak256 } = require(&quot;ethereum-cryptography/keccak&quot;);
const { utf8ToBytes } = require(&quot;ethereum-cryptography/utils&quot;);

function hashMessage(message) {
    return keccak256(utf8ToBytes(message));
}

module.exports = hashMessage;
"><code>const { <span class="hljs-built_in">keccak256</span> } <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">"ethereum-cryptography/keccak"</span>);
const { utf8ToBytes } <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">"ethereum-cryptography/utils"</span>);

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">hashMessage</span>(<span class="hljs-params">message</span>) </span>{
    <span class="hljs-keyword">return</span> <span class="hljs-built_in">keccak256</span>(utf8ToBytes(message));
}

module.exports <span class="hljs-operator">=</span> hashMessage;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/fd4f450fbc8d76219e34e455dc7cb200a5570f9e51a0d5be621994bd1c6e2b76.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const secp = require(&quot;ethereum-cryptography/secp256k1&quot;);
const hashMessage = require(&apos;./hashMessage&apos;);

const PRIVATE_KEY = &quot;6b911fd37cdf5c81d4c0adb1ab7fa822ed253ab0ad9aa18d77257c88b29b718e&quot;;

async function signMessage(msg) {
    return secp.sign(hashMessage(msg), PRIVATE_KEY, { recovered: true });
}

module.exports = signMessage;
"><code>const secp <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">"ethereum-cryptography/secp256k1"</span>);
const hashMessage <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'./hashMessage'</span>);

const PRIVATE_KEY <span class="hljs-operator">=</span> <span class="hljs-string">"6b911fd37cdf5c81d4c0adb1ab7fa822ed253ab0ad9aa18d77257c88b29b718e"</span>;

async <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">signMessage</span>(<span class="hljs-params"><span class="hljs-built_in">msg</span></span>) </span>{
    <span class="hljs-keyword">return</span> secp.sign(hashMessage(<span class="hljs-built_in">msg</span>), PRIVATE_KEY, { recovered: <span class="hljs-literal">true</span> });
}

module.exports <span class="hljs-operator">=</span> signMessage;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/ec5cb9905bcf676dee23de6e90e4cde338801634c888d44e2e53d1e32bac39a8.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const secp = require(&quot;ethereum-cryptography/secp256k1&quot;);
const hashMessage = require(&quot;./hashMessage&quot;);

async function recoverKey(message, signature, recoveryBit) {
    return secp.recoverPublicKey(hashMessage(message), signature, recoveryBit);
}

module.exports = recoverKey;
"><code>const secp <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">"ethereum-cryptography/secp256k1"</span>);
const hashMessage <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">"./hashMessage"</span>);

async <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">recoverKey</span>(<span class="hljs-params">message, signature, recoveryBit</span>) </span>{
    <span class="hljs-keyword">return</span> secp.recoverPublicKey(hashMessage(message), signature, recoveryBit);
}

module.exports <span class="hljs-operator">=</span> recoverKey;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d54c8aad2d4b788b883e1bd014db607bdca2547e331dbb82b5bee728354504ce.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const secp = require(&quot;ethereum-cryptography/secp256k1&quot;);
const { keccak256 } = require(&quot;ethereum-cryptography/keccak&quot;);

function getAddress(publicKey) {
    return keccak256(publicKey.slice(1)).slice(-20);
}

module.exports = getAddress;
"><code>const secp <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">"ethereum-cryptography/secp256k1"</span>);
const { <span class="hljs-built_in">keccak256</span> } <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">"ethereum-cryptography/keccak"</span>);

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getAddress</span>(<span class="hljs-params">publicKey</span>) </span>{
    <span class="hljs-keyword">return</span> <span class="hljs-built_in">keccak256</span>(publicKey.slice(<span class="hljs-number">1</span>)).slice(<span class="hljs-number">-20</span>);
}

module.exports <span class="hljs-operator">=</span> getAddress;
</code></pre><p>Proof of Work</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/f4eeb463e592dde9657377b9dddf380459cbe9c6204cde34de6d1f2347f5821f.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/83be62c6ea8e7f68ff03b752af45d65c2a4d4fae2d99c23a2dcb016896a144b9.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const SHA256 = require(&apos;crypto-js/sha256&apos;);
const TARGET_DIFFICULTY = BigInt(0x0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);
const MAX_TRANSACTIONS = 10;

const mempool = [];
const blocks = [];

function addTransaction(transaction) {
    mempool.push(transaction);
}

function mine() {
}

module.exports = {
    TARGET_DIFFICULTY,
    MAX_TRANSACTIONS,
    addTransaction,
    mine,
    blocks,
    mempool
};
"><code>const <span class="hljs-attr">SHA256</span> = require(<span class="hljs-string">'crypto-js/sha256'</span>)<span class="hljs-comment">;</span>
const <span class="hljs-attr">TARGET_DIFFICULTY</span> = BigInt(<span class="hljs-number">0</span>x0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)<span class="hljs-comment">;</span>
const <span class="hljs-attr">MAX_TRANSACTIONS</span> = <span class="hljs-number">10</span><span class="hljs-comment">;</span>

const <span class="hljs-attr">mempool</span> = []<span class="hljs-comment">;</span>
const <span class="hljs-attr">blocks</span> = []<span class="hljs-comment">;</span>

function addTransaction(transaction) {
    mempool.push(transaction)<span class="hljs-comment">;</span>
}

function mine() {
}

<span class="hljs-attr">module.exports</span> = {
    TARGET_DIFFICULTY,
    MAX_TRANSACTIONS,
    addTransaction,
    mine,
    blocks,
    mempool
}<span class="hljs-comment">;</span>
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/af79806765e47b7d452e53e85170f8747d03f440cb683fce60554b0bea7409c1.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const SHA256 = require(&apos;crypto-js/sha256&apos;);
const TARGET_DIFFICULTY = BigInt(0x0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);
const MAX_TRANSACTIONS = 10;

const mempool = [];
const blocks = [];

function addTransaction(transaction) {
    mempool.push(transaction);
}

function mine() {
    let block = { id: blocks.length };
    blocks.push(block);
}

module.exports = {
    TARGET_DIFFICULTY,
    MAX_TRANSACTIONS,
    addTransaction,
    mine,
    blocks,
    mempool
};
"><code>const SHA256 <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'crypto-js/sha256'</span>);
const TARGET_DIFFICULTY <span class="hljs-operator">=</span> BigInt(<span class="hljs-number">0x0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff</span>);
const MAX_TRANSACTIONS <span class="hljs-operator">=</span> <span class="hljs-number">10</span>;

const mempool <span class="hljs-operator">=</span> [];
const blocks <span class="hljs-operator">=</span> [];

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">addTransaction</span>(<span class="hljs-params">transaction</span>) </span>{
    mempool.<span class="hljs-built_in">push</span>(transaction);
}

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">mine</span>(<span class="hljs-params"></span>) </span>{
    let <span class="hljs-built_in">block</span> <span class="hljs-operator">=</span> { id: blocks.<span class="hljs-built_in">length</span> };
    blocks.<span class="hljs-built_in">push</span>(<span class="hljs-built_in">block</span>);
}

module.exports <span class="hljs-operator">=</span> {
    TARGET_DIFFICULTY,
    MAX_TRANSACTIONS,
    addTransaction,
    mine,
    blocks,
    mempool
};
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/4ec8392e5a7f75fa30360e4ec8b734a21852b14e104d65c3a03ec0ea58f1af28.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const SHA256 = require(&apos;crypto-js/sha256&apos;);
const TARGET_DIFFICULTY = BigInt(0x0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);
const MAX_TRANSACTIONS = 10;

const mempool = [];
const blocks = [];

function addTransaction(transaction) {
    mempool.push(transaction);
}

function mine() {
    let block = { id: blocks.length };
    block.hash = SHA256(JSON.stringify(block));
    blocks.push(block);
}

module.exports = {
    TARGET_DIFFICULTY,
    MAX_TRANSACTIONS,
    addTransaction,
    mine,
    blocks,
    mempool
};
"><code>const SHA256 <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'crypto-js/sha256'</span>);
const TARGET_DIFFICULTY <span class="hljs-operator">=</span> BigInt(<span class="hljs-number">0x0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff</span>);
const MAX_TRANSACTIONS <span class="hljs-operator">=</span> <span class="hljs-number">10</span>;

const mempool <span class="hljs-operator">=</span> [];
const blocks <span class="hljs-operator">=</span> [];

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">addTransaction</span>(<span class="hljs-params">transaction</span>) </span>{
    mempool.<span class="hljs-built_in">push</span>(transaction);
}

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">mine</span>(<span class="hljs-params"></span>) </span>{
    let <span class="hljs-built_in">block</span> <span class="hljs-operator">=</span> { id: blocks.<span class="hljs-built_in">length</span> };
    <span class="hljs-built_in">block</span>.hash <span class="hljs-operator">=</span> SHA256(JSON.stringify(<span class="hljs-built_in">block</span>));
    blocks.<span class="hljs-built_in">push</span>(<span class="hljs-built_in">block</span>);
}

module.exports <span class="hljs-operator">=</span> {
    TARGET_DIFFICULTY,
    MAX_TRANSACTIONS,
    addTransaction,
    mine,
    blocks,
    mempool
};
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/fc2b8900eac20837cb2308e3aeaee83ff34cab2ea106699b7a2a45baa2fde1c8.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const SHA256 = require(&apos;crypto-js/sha256&apos;);
const TARGET_DIFFICULTY = BigInt(0x0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);
const MAX_TRANSACTIONS = 10;

const mempool = [];
const blocks = [];

function addTransaction(transaction) {
    mempool.push(transaction);
}

function mine() {
    let block = { id: blocks.length, transactions: [] };
    if (mempool.length &gt; 0) {
        for (let i = 0; i &lt; MAX_TRANSACTIONS; i++) {
            block.transactions.push(mempool[0]);
            mempool.shift();
            if (mempool.length &lt;= 0) {
                break;
            }
        }
    }
    block.hash = SHA256(JSON.stringify(block));
    blocks.push(block);
}

module.exports = {
    TARGET_DIFFICULTY,
    MAX_TRANSACTIONS,
    addTransaction,
    mine,
    blocks,
    mempool
};
"><code>const SHA256 <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'crypto-js/sha256'</span>);
const TARGET_DIFFICULTY <span class="hljs-operator">=</span> BigInt(<span class="hljs-number">0x0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff</span>);
const MAX_TRANSACTIONS <span class="hljs-operator">=</span> <span class="hljs-number">10</span>;

const mempool <span class="hljs-operator">=</span> [];
const blocks <span class="hljs-operator">=</span> [];

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">addTransaction</span>(<span class="hljs-params">transaction</span>) </span>{
    mempool.<span class="hljs-built_in">push</span>(transaction);
}

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">mine</span>(<span class="hljs-params"></span>) </span>{
    let <span class="hljs-built_in">block</span> <span class="hljs-operator">=</span> { id: blocks.<span class="hljs-built_in">length</span>, transactions: [] };
    <span class="hljs-keyword">if</span> (mempool.<span class="hljs-built_in">length</span> <span class="hljs-operator">></span> <span class="hljs-number">0</span>) {
        <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> MAX_TRANSACTIONS; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
            <span class="hljs-built_in">block</span>.transactions.<span class="hljs-built_in">push</span>(mempool[<span class="hljs-number">0</span>]);
            mempool.shift();
            <span class="hljs-keyword">if</span> (mempool.<span class="hljs-built_in">length</span> <span class="hljs-operator">&#x3C;</span><span class="hljs-operator">=</span> <span class="hljs-number">0</span>) {
                <span class="hljs-keyword">break</span>;
            }
        }
    }
    <span class="hljs-built_in">block</span>.hash <span class="hljs-operator">=</span> SHA256(JSON.stringify(<span class="hljs-built_in">block</span>));
    blocks.<span class="hljs-built_in">push</span>(<span class="hljs-built_in">block</span>);
}

module.exports <span class="hljs-operator">=</span> {
    TARGET_DIFFICULTY,
    MAX_TRANSACTIONS,
    addTransaction,
    mine,
    blocks,
    mempool
};
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/0edc21c2699d8825cc590bf0322af152c004cb6c2aaa5f5953b81a330135f3a2.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const SHA256 = require(&apos;crypto-js/sha256&apos;);
const TARGET_DIFFICULTY = BigInt(0x0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);
const MAX_TRANSACTIONS = 10;

const mempool = [];
const blocks = [];

function addTransaction(transaction) {
    mempool.push(transaction);
}

function mine() {
    let block = { id: blocks.length, transactions: [] };
    if (mempool.length &gt; 0) {
        for (let i = 0; i &lt; MAX_TRANSACTIONS; i++) {
            block.transactions.push(mempool[0]);
            mempool.shift();
            if (mempool.length &lt;= 0) {
                break;
            }
        }
    }
    block.nonce = 0;
    block.hash = SHA256(JSON.stringify(block));
    let hash = block.hash;
    while (BigInt(`0x${hash}`) &gt;= TARGET_DIFFICULTY) {
        block.nonce = block.nonce + 1;
        block.hash = SHA256(JSON.stringify(block));
        hash = block.hash;
    }
    blocks.push(block);
}

module.exports = {
    TARGET_DIFFICULTY,
    MAX_TRANSACTIONS,
    addTransaction,
    mine,
    blocks,
    mempool
};
"><code>const SHA256 <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'crypto-js/sha256'</span>);
const TARGET_DIFFICULTY <span class="hljs-operator">=</span> BigInt(<span class="hljs-number">0x0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff</span>);
const MAX_TRANSACTIONS <span class="hljs-operator">=</span> <span class="hljs-number">10</span>;

const mempool <span class="hljs-operator">=</span> [];
const blocks <span class="hljs-operator">=</span> [];

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">addTransaction</span>(<span class="hljs-params">transaction</span>) </span>{
    mempool.<span class="hljs-built_in">push</span>(transaction);
}

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">mine</span>(<span class="hljs-params"></span>) </span>{
    let <span class="hljs-built_in">block</span> <span class="hljs-operator">=</span> { id: blocks.<span class="hljs-built_in">length</span>, transactions: [] };
    <span class="hljs-keyword">if</span> (mempool.<span class="hljs-built_in">length</span> <span class="hljs-operator">></span> <span class="hljs-number">0</span>) {
        <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> MAX_TRANSACTIONS; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
            <span class="hljs-built_in">block</span>.transactions.<span class="hljs-built_in">push</span>(mempool[<span class="hljs-number">0</span>]);
            mempool.shift();
            <span class="hljs-keyword">if</span> (mempool.<span class="hljs-built_in">length</span> <span class="hljs-operator">&#x3C;</span><span class="hljs-operator">=</span> <span class="hljs-number">0</span>) {
                <span class="hljs-keyword">break</span>;
            }
        }
    }
    <span class="hljs-built_in">block</span>.nonce <span class="hljs-operator">=</span> <span class="hljs-number">0</span>;
    <span class="hljs-built_in">block</span>.hash <span class="hljs-operator">=</span> SHA256(JSON.stringify(<span class="hljs-built_in">block</span>));
    let hash <span class="hljs-operator">=</span> <span class="hljs-built_in">block</span>.hash;
    <span class="hljs-keyword">while</span> (BigInt(`0x${hash}`) <span class="hljs-operator">></span><span class="hljs-operator">=</span> TARGET_DIFFICULTY) {
        <span class="hljs-built_in">block</span>.nonce <span class="hljs-operator">=</span> <span class="hljs-built_in">block</span>.nonce <span class="hljs-operator">+</span> <span class="hljs-number">1</span>;
        <span class="hljs-built_in">block</span>.hash <span class="hljs-operator">=</span> SHA256(JSON.stringify(<span class="hljs-built_in">block</span>));
        hash <span class="hljs-operator">=</span> <span class="hljs-built_in">block</span>.hash;
    }
    blocks.<span class="hljs-built_in">push</span>(<span class="hljs-built_in">block</span>);
}

module.exports <span class="hljs-operator">=</span> {
    TARGET_DIFFICULTY,
    MAX_TRANSACTIONS,
    addTransaction,
    mine,
    blocks,
    mempool
};
</code></pre><h3 id="h-blockchain-network" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Blockchain Network</h3><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/f75d146c6b60a5c1c92d129270c50d81c0bbefd003e6331bd732e0d4da4c354a.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/2aa91978504c74379b52a7b05b937ef024e52940ee5bbdadba852aefa595fac0.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const SHA256 = require(&apos;crypto-js/sha256&apos;);

class Block {
    constructor() {
    }
    toHash() {
        return SHA256(&quot;a string&quot;);
    }
}

module.exports = Block;
"><code><span class="hljs-keyword">const</span> <span class="hljs-title class_">SHA256</span> = <span class="hljs-built_in">require</span>(<span class="hljs-string">'crypto-js/sha256'</span>);

<span class="hljs-keyword">class</span> <span class="hljs-title class_">Block</span> {
    <span class="hljs-title function_">constructor</span>(<span class="hljs-params"></span>) {
    }
    <span class="hljs-title function_">toHash</span>(<span class="hljs-params"></span>) {
        <span class="hljs-keyword">return</span> <span class="hljs-title class_">SHA256</span>(<span class="hljs-string">"a string"</span>);
    }
}

<span class="hljs-variable language_">module</span>.<span class="hljs-property">exports</span> = <span class="hljs-title class_">Block</span>;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e449833fc897a09b010508caf08614977d5ef9ac7ec2fd506b91ae9b8b21a19e.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const SHA256 = require(&apos;crypto-js/sha256&apos;);

class Block {
    constructor(data) {
        this.data = data;
    }
    toHash() {
        return SHA256(this.data.toString());
    }
}

module.exports = Block;
"><code>const SHA256 <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'crypto-js/sha256'</span>);

class Block {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params">data</span>) </span>{
        <span class="hljs-built_in">this</span>.data <span class="hljs-operator">=</span> data;
    }
    toHash() {
        <span class="hljs-keyword">return</span> SHA256(<span class="hljs-built_in">this</span>.data.toString());
    }
}

module.exports <span class="hljs-operator">=</span> Block;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/8242adb76a835826babab6fb362c8be8918b1e85d5521088b096af52fa1ca875.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const Block = require(&apos;./Block&apos;);

class Blockchain {
    constructor() {
        this.chain = [new Block(&quot;Genesis&quot;)];
    }
}

module.exports = Blockchain;
"><code>const Block <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'./Block'</span>);

class Blockchain {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params"></span>) </span>{
        <span class="hljs-built_in">this</span>.chain <span class="hljs-operator">=</span> [<span class="hljs-keyword">new</span> Block(<span class="hljs-string">"Genesis"</span>)];
    }
}

module.exports <span class="hljs-operator">=</span> Blockchain;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/669c49bd3f2c933caa001b70453766ef8b5b3fe15068d2b1ddc1e08033910e4d.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const Block = require(&apos;./Block&apos;);

class Blockchain {
    constructor() {
        this.chain = [new Block(&quot;Genesis&quot;)];
    }

    addBlock(block) {
        this.chain.push(block);
    }
}

module.exports = Blockchain;
"><code>const Block <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'./Block'</span>);

class Blockchain {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params"></span>) </span>{
        <span class="hljs-built_in">this</span>.chain <span class="hljs-operator">=</span> [<span class="hljs-keyword">new</span> Block(<span class="hljs-string">"Genesis"</span>)];
    }

    addBlock(<span class="hljs-built_in">block</span>) {
        <span class="hljs-built_in">this</span>.chain.<span class="hljs-built_in">push</span>(<span class="hljs-built_in">block</span>);
    }
}

module.exports <span class="hljs-operator">=</span> Blockchain;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/5e539973ca020017016134d5927e0e11aa778f26df5883eded9a8578139a6a0f.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>cái này có 2 code ở 2 mục nhé</strong></p><p><strong>mục Blockchain.js</strong></p><pre data-type="codeBlock" text="const Block = require(&apos;./Block&apos;);

class Blockchain {
    constructor() {
        this.chain = [new Block(&quot;Genesis&quot;)];
    }

    addBlock(block) {
        block.previousHash = this.chain[this.chain.length - 1].toHash();
        this.chain.push(block);
    }
}

module.exports = Blockchain;
"><code>const Block <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'./Block'</span>);

class Blockchain {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params"></span>) </span>{
        <span class="hljs-built_in">this</span>.chain <span class="hljs-operator">=</span> [<span class="hljs-keyword">new</span> Block(<span class="hljs-string">"Genesis"</span>)];
    }

    addBlock(<span class="hljs-built_in">block</span>) {
        <span class="hljs-built_in">block</span>.previousHash <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.chain[<span class="hljs-built_in">this</span>.chain.<span class="hljs-built_in">length</span> <span class="hljs-operator">-</span> <span class="hljs-number">1</span>].toHash();
        <span class="hljs-built_in">this</span>.chain.<span class="hljs-built_in">push</span>(<span class="hljs-built_in">block</span>);
    }
}

module.exports <span class="hljs-operator">=</span> Blockchain;
</code></pre><p><strong>mục Block.js</strong></p><pre data-type="codeBlock" text="const SHA256 = require(&apos;crypto-js/sha256&apos;);

class Block {
    constructor(data) {
        this.data = data;
    }
    toHash() {
        if (this.previousHash) {
            return SHA256(this.data.toString() + this.previousHash.toString());
        } else {
            return SHA256(this.data.toString());
        }
    }
}

module.exports = Block;
"><code>const SHA256 <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'crypto-js/sha256'</span>);

class Block {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params">data</span>) </span>{
        <span class="hljs-built_in">this</span>.data <span class="hljs-operator">=</span> data;
    }
    toHash() {
        <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.previousHash) {
            <span class="hljs-keyword">return</span> SHA256(<span class="hljs-built_in">this</span>.data.toString() <span class="hljs-operator">+</span> <span class="hljs-built_in">this</span>.previousHash.toString());
        } <span class="hljs-keyword">else</span> {
            <span class="hljs-keyword">return</span> SHA256(<span class="hljs-built_in">this</span>.data.toString());
        }
    }
}

module.exports <span class="hljs-operator">=</span> Block;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/67d31036d38f7493030fe8faa5a0ce21c000f672ab79f9c73f68cb0b4ced628f.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const Block = require(&apos;./Block&apos;);

class Blockchain {
    constructor() {
        this.chain = [new Block(&quot;Genesis&quot;)];
    }

    addBlock(block) {
        block.previousHash = this.chain[this.chain.length - 1].toHash();
        this.chain.push(block);
    }

    isValid() {
        for (let i = 0; i &lt; this.chain.length; i++) {
            if ((i + 1) &gt;= this.chain.length) {
                break;
            }
            if (this.chain[i].toHash().toString() !== this.chain[i + 1].previousHash.toString()) {
                return false;
            }
        }
        return true;
    }
}

module.exports = Blockchain;
"><code>const Block <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'./Block'</span>);

class Blockchain {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params"></span>) </span>{
        <span class="hljs-built_in">this</span>.chain <span class="hljs-operator">=</span> [<span class="hljs-keyword">new</span> Block(<span class="hljs-string">"Genesis"</span>)];
    }

    addBlock(<span class="hljs-built_in">block</span>) {
        <span class="hljs-built_in">block</span>.previousHash <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.chain[<span class="hljs-built_in">this</span>.chain.<span class="hljs-built_in">length</span> <span class="hljs-operator">-</span> <span class="hljs-number">1</span>].toHash();
        <span class="hljs-built_in">this</span>.chain.<span class="hljs-built_in">push</span>(<span class="hljs-built_in">block</span>);
    }

    isValid() {
        <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> <span class="hljs-built_in">this</span>.chain.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
            <span class="hljs-keyword">if</span> ((i <span class="hljs-operator">+</span> <span class="hljs-number">1</span>) <span class="hljs-operator">></span><span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.chain.<span class="hljs-built_in">length</span>) {
                <span class="hljs-keyword">break</span>;
            }
            <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.chain[i].toHash().toString() <span class="hljs-operator">!</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.chain[i <span class="hljs-operator">+</span> <span class="hljs-number">1</span>].previousHash.toString()) {
                <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
            }
        }
        <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>;
    }
}

module.exports <span class="hljs-operator">=</span> Blockchain;
</code></pre><h3 id="h-2-blockchain-storage" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">2 - Blockchain Storage</h3><p><strong>Keeping Track of Blockchain User State</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/902e7f02c3cc2f6df44803181c09b085dc1c8659f2e6d382fccaa7672b67f3c4.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d31812d452b187b20dbf5eea5181609e8695ae6d82cec5a2c2c66b65082ade00.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="class TXO {
    constructor(owner, amount) {
        this.owner = owner;
        this.amount = amount;
        this.spent = false;
    }
    spend() {
        this.spent = true;
    }
}

module.exports = TXO;
"><code>class TXO {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params">owner, amount</span>) </span>{
        <span class="hljs-built_in">this</span>.owner <span class="hljs-operator">=</span> owner;
        <span class="hljs-built_in">this</span>.amount <span class="hljs-operator">=</span> amount;
        <span class="hljs-built_in">this</span>.spent <span class="hljs-operator">=</span> <span class="hljs-literal">false</span>;
    }
    spend() {
        <span class="hljs-built_in">this</span>.spent <span class="hljs-operator">=</span> <span class="hljs-literal">true</span>;
    }
}

module.exports <span class="hljs-operator">=</span> TXO;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/4407412cd125e503f4fdb051a789ae2989ca78b264ed34e8217b10fd0d524425.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="class Transaction {
    constructor(inputUTXOs, outputUTXOs) {
        this.inputUTXOs = inputUTXOs;
        this.outputUTXOs = outputUTXOs;
    }
    execute() {
        for (let i = 0; i &lt; this.inputUTXOs.length; i++) {
            if (this.inputUTXOs[i].spent) {
                throw new Error(&quot;already spent&quot;);
            }
        }
    }
}

module.exports = Transaction;
"><code>class Transaction {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params">inputUTXOs, outputUTXOs</span>) </span>{
        <span class="hljs-built_in">this</span>.inputUTXOs <span class="hljs-operator">=</span> inputUTXOs;
        <span class="hljs-built_in">this</span>.outputUTXOs <span class="hljs-operator">=</span> outputUTXOs;
    }
    execute() {
        <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> <span class="hljs-built_in">this</span>.inputUTXOs.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
            <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.inputUTXOs[i].spent) {
                <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> <span class="hljs-built_in">Error</span>(<span class="hljs-string">"already spent"</span>);
            }
        }
    }
}

module.exports <span class="hljs-operator">=</span> Transaction;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/3bf56f33faa634cb845a4077b2d189f7631e9f872b51dadc4b29a18dbb5b5fee.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="class Transaction {
    constructor(inputUTXOs, outputUTXOs) {
        this.inputUTXOs = inputUTXOs;
        this.outputUTXOs = outputUTXOs;
    }
    execute() {
        for (let i = 0; i &lt; this.inputUTXOs.length; i++) {
            if (this.inputUTXOs[i].spent) {
                throw new Error(&quot;already spent&quot;);
            }
        }

        let inn = 0;
        for (let i = 0; i &lt; this.inputUTXOs.length; i++) {
            inn = inn + this.inputUTXOs[i].amount;
        }
        let out = 0;
        for (let i = 0; i &lt; this.outputUTXOs.length; i++) {
            out = out + this.outputUTXOs[i].amount;
        }
        if (inn &lt; out) {
            throw new Error(&quot;less than&quot;);
        }
    }
}

module.exports = Transaction;
"><code>class Transaction {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params">inputUTXOs, outputUTXOs</span>) </span>{
        <span class="hljs-built_in">this</span>.inputUTXOs <span class="hljs-operator">=</span> inputUTXOs;
        <span class="hljs-built_in">this</span>.outputUTXOs <span class="hljs-operator">=</span> outputUTXOs;
    }
    execute() {
        <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> <span class="hljs-built_in">this</span>.inputUTXOs.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
            <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.inputUTXOs[i].spent) {
                <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> <span class="hljs-built_in">Error</span>(<span class="hljs-string">"already spent"</span>);
            }
        }

        let inn <span class="hljs-operator">=</span> <span class="hljs-number">0</span>;
        <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> <span class="hljs-built_in">this</span>.inputUTXOs.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
            inn <span class="hljs-operator">=</span> inn <span class="hljs-operator">+</span> <span class="hljs-built_in">this</span>.inputUTXOs[i].amount;
        }
        let out <span class="hljs-operator">=</span> <span class="hljs-number">0</span>;
        <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> <span class="hljs-built_in">this</span>.outputUTXOs.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
            out <span class="hljs-operator">=</span> out <span class="hljs-operator">+</span> <span class="hljs-built_in">this</span>.outputUTXOs[i].amount;
        }
        <span class="hljs-keyword">if</span> (inn <span class="hljs-operator">&#x3C;</span> out) {
            <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> <span class="hljs-built_in">Error</span>(<span class="hljs-string">"less than"</span>);
        }
    }
}

module.exports <span class="hljs-operator">=</span> Transaction;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/57b3d95e6280e9a079526677e20266aa4ad42260a8f386fd83b9a38e61314da6.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="class Transaction {
    constructor(inputUTXOs, outputUTXOs) {
        this.inputUTXOs = inputUTXOs;
        this.outputUTXOs = outputUTXOs;
    }
    execute() {
        for (let i = 0; i &lt; this.inputUTXOs.length; i++) {
            if (this.inputUTXOs[i].spent) {
                throw new Error(&quot;already spent&quot;);
            }
        }

        let inn = 0;
        for (let i = 0; i &lt; this.inputUTXOs.length; i++) {
            inn = inn + this.inputUTXOs[i].amount;
        }
        let out = 0;
        for (let i = 0; i &lt; this.outputUTXOs.length; i++) {
            out = out + this.outputUTXOs[i].amount;
        }
        if (inn &lt; out) {
            throw new Error(&quot;less than&quot;);
        }

        for (let i = 0; i &lt; this.inputUTXOs.length; i++) {
            this.inputUTXOs[i].spend();
        }
    }
}

module.exports = Transaction;
"><code>class Transaction {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params">inputUTXOs, outputUTXOs</span>) </span>{
        <span class="hljs-built_in">this</span>.inputUTXOs <span class="hljs-operator">=</span> inputUTXOs;
        <span class="hljs-built_in">this</span>.outputUTXOs <span class="hljs-operator">=</span> outputUTXOs;
    }
    execute() {
        <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> <span class="hljs-built_in">this</span>.inputUTXOs.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
            <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.inputUTXOs[i].spent) {
                <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> <span class="hljs-built_in">Error</span>(<span class="hljs-string">"already spent"</span>);
            }
        }

        let inn <span class="hljs-operator">=</span> <span class="hljs-number">0</span>;
        <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> <span class="hljs-built_in">this</span>.inputUTXOs.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
            inn <span class="hljs-operator">=</span> inn <span class="hljs-operator">+</span> <span class="hljs-built_in">this</span>.inputUTXOs[i].amount;
        }
        let out <span class="hljs-operator">=</span> <span class="hljs-number">0</span>;
        <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> <span class="hljs-built_in">this</span>.outputUTXOs.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
            out <span class="hljs-operator">=</span> out <span class="hljs-operator">+</span> <span class="hljs-built_in">this</span>.outputUTXOs[i].amount;
        }
        <span class="hljs-keyword">if</span> (inn <span class="hljs-operator">&#x3C;</span> out) {
            <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> <span class="hljs-built_in">Error</span>(<span class="hljs-string">"less than"</span>);
        }

        <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> <span class="hljs-built_in">this</span>.inputUTXOs.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
            <span class="hljs-built_in">this</span>.inputUTXOs[i].spend();
        }
    }
}

module.exports <span class="hljs-operator">=</span> Transaction;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/92abaa78cfc89597441ef424e8d1cb38d62667f927b10341be363a9ebb263fde.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="class Transaction {
    constructor(inputUTXOs, outputUTXOs) {
        this.inputUTXOs = inputUTXOs;
        this.outputUTXOs = outputUTXOs;
    }
    execute() {
        for (let i = 0; i &lt; this.inputUTXOs.length; i++) {
            if (this.inputUTXOs[i].spent) {
                throw new Error(&quot;already spent&quot;);
            }
        }

        let inn = 0;
        for (let i = 0; i &lt; this.inputUTXOs.length; i++) {
            inn = inn + this.inputUTXOs[i].amount;
        }
        let out = 0;
        for (let i = 0; i &lt; this.outputUTXOs.length; i++) {
            out = out + this.outputUTXOs[i].amount;
        }
        if (inn &lt; out) {
            throw new Error(&quot;less than&quot;);
        }

        for (let i = 0; i &lt; this.inputUTXOs.length; i++) {
            this.inputUTXOs[i].spend();
        }

        this.fee = inn - out;
    }
}

module.exports = Transaction;
"><code>class Transaction {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params">inputUTXOs, outputUTXOs</span>) </span>{
        <span class="hljs-built_in">this</span>.inputUTXOs <span class="hljs-operator">=</span> inputUTXOs;
        <span class="hljs-built_in">this</span>.outputUTXOs <span class="hljs-operator">=</span> outputUTXOs;
    }
    execute() {
        <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> <span class="hljs-built_in">this</span>.inputUTXOs.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
            <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.inputUTXOs[i].spent) {
                <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> <span class="hljs-built_in">Error</span>(<span class="hljs-string">"already spent"</span>);
            }
        }

        let inn <span class="hljs-operator">=</span> <span class="hljs-number">0</span>;
        <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> <span class="hljs-built_in">this</span>.inputUTXOs.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
            inn <span class="hljs-operator">=</span> inn <span class="hljs-operator">+</span> <span class="hljs-built_in">this</span>.inputUTXOs[i].amount;
        }
        let out <span class="hljs-operator">=</span> <span class="hljs-number">0</span>;
        <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> <span class="hljs-built_in">this</span>.outputUTXOs.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
            out <span class="hljs-operator">=</span> out <span class="hljs-operator">+</span> <span class="hljs-built_in">this</span>.outputUTXOs[i].amount;
        }
        <span class="hljs-keyword">if</span> (inn <span class="hljs-operator">&#x3C;</span> out) {
            <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> <span class="hljs-built_in">Error</span>(<span class="hljs-string">"less than"</span>);
        }

        <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> <span class="hljs-built_in">this</span>.inputUTXOs.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
            <span class="hljs-built_in">this</span>.inputUTXOs[i].spend();
        }

        <span class="hljs-built_in">this</span>.fee <span class="hljs-operator">=</span> inn <span class="hljs-operator">-</span> out;
    }
}

module.exports <span class="hljs-operator">=</span> Transaction;
</code></pre><h3 id="h-tree-data-structures" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Tree Data Structures</h3><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/074e4faa0a048ea9f0acf833ce05ff1146136b9dc4b506f1cf0c451f8432c2f6.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/27725816e1794c94c241899ac9daea1c5fc7e16b75c6a521528f3a3bde8bf819.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="class Node {
    constructor(data) {
        this.data = data;
        this.left = null;
        this.right = null;
    }
}

module.exports = Node;
"><code>class Node {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params">data</span>) </span>{
        <span class="hljs-built_in">this</span>.data <span class="hljs-operator">=</span> data;
        <span class="hljs-built_in">this</span>.left <span class="hljs-operator">=</span> null;
        <span class="hljs-built_in">this</span>.right <span class="hljs-operator">=</span> null;
    }
}

module.exports <span class="hljs-operator">=</span> Node;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/1d2d3da78545ae488d6ce481e6a96411204a7a666b429e36f85f55f3aae871b8.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="class Tree {
    constructor() {
        this.root = null;
    }
}

module.exports = Tree;
"><code>class Tree {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params"></span>) </span>{
        <span class="hljs-built_in">this</span>.root <span class="hljs-operator">=</span> null;
    }
}

module.exports <span class="hljs-operator">=</span> Tree;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/24269946ad3266f5a791ffd7fb8ed84d6f8deec9db03f5358a059a2712badf89.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="class Tree {
    constructor() {
        this.root = null;
    }

    addNode(node) {
        this.root = node;
    }
}

module.exports = Tree;
"><code>class Tree {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params"></span>) </span>{
        <span class="hljs-built_in">this</span>.root <span class="hljs-operator">=</span> null;
    }

    addNode(node) {
        <span class="hljs-built_in">this</span>.root <span class="hljs-operator">=</span> node;
    }
}

module.exports <span class="hljs-operator">=</span> Tree;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/bc57ae3e6f89ba849436752cfb3ebc35b9db938c02a8c283a3fc5da11a92404a.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="class Tree {
    constructor() {
        this.root = null;
    }

    addNode(node) {
        if (this.root === null) {
            this.root = node;
        } else if (this.root.data &gt; node.data) {
            this.root.left = node;
        } else {
            this.root.right = node;
        }
    }
}

module.exports = Tree;
"><code>class Tree {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params"></span>) </span>{
        <span class="hljs-built_in">this</span>.root <span class="hljs-operator">=</span> null;
    }

    addNode(node) {
        <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.root <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> null) {
            <span class="hljs-built_in">this</span>.root <span class="hljs-operator">=</span> node;
        } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.root.data <span class="hljs-operator">></span> node.data) {
            <span class="hljs-built_in">this</span>.root.left <span class="hljs-operator">=</span> node;
        } <span class="hljs-keyword">else</span> {
            <span class="hljs-built_in">this</span>.root.right <span class="hljs-operator">=</span> node;
        }
    }
}

module.exports <span class="hljs-operator">=</span> Tree;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/745f90055d8e0cd99501137aa3b3101e87c9c873b032296123e6f958700554e6.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="class Tree {
    constructor() {
        this.root = null;
    }

    addNode(node) {
        if (this.root === null) {
            this.root = node;
        } else {
            let p = this.root;
            while (true) {
                if (p.data &gt; node.data) {
                    if (p.left) {
                        p = p.left;
                    } else {
                        p.left = node;
                        break;
                    }
                } else {
                    if (p.right) {
                        p = p.right;
                    } else {
                        p.right = node;
                        break;
                    }
                }
            }
        }
    }
}

module.exports = Tree;
"><code>class Tree {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params"></span>) </span>{
        <span class="hljs-built_in">this</span>.root <span class="hljs-operator">=</span> null;
    }

    addNode(node) {
        <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.root <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> null) {
            <span class="hljs-built_in">this</span>.root <span class="hljs-operator">=</span> node;
        } <span class="hljs-keyword">else</span> {
            let p <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.root;
            <span class="hljs-keyword">while</span> (<span class="hljs-literal">true</span>) {
                <span class="hljs-keyword">if</span> (p.data <span class="hljs-operator">></span> node.data) {
                    <span class="hljs-keyword">if</span> (p.left) {
                        p <span class="hljs-operator">=</span> p.left;
                    } <span class="hljs-keyword">else</span> {
                        p.left <span class="hljs-operator">=</span> node;
                        <span class="hljs-keyword">break</span>;
                    }
                } <span class="hljs-keyword">else</span> {
                    <span class="hljs-keyword">if</span> (p.right) {
                        p <span class="hljs-operator">=</span> p.right;
                    } <span class="hljs-keyword">else</span> {
                        p.right <span class="hljs-operator">=</span> node;
                        <span class="hljs-keyword">break</span>;
                    }
                }
            }
        }
    }
}

module.exports <span class="hljs-operator">=</span> Tree;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d5c54d00169390c98e071350464830c9f98389571ad298aca60d20076f3ed9a5.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="class Tree {
    constructor() {
        this.root = null;
    }

    addNode(node) {
        if (this.root === null) {
            this.root = node;
        } else {
            let p = this.root;
            while (true) {
                if (p.data &gt; node.data) {
                    if (p.left) {
                        p = p.left;
                    } else {
                        p.left = node;
                        break;
                    }
                } else {
                    if (p.right) {
                        p = p.right;
                    } else {
                        p.right = node;
                        break;
                    }
                }
            }
        }
    }

    hasNode(number) {
        let n = this.root;
        while (n) {
            if (n.data === number) {
                return true;
            } else {
                if (n.data &gt; number) {
                    n = n.left;
                } else {
                    n = n.right;
                }
            }
        }
        return false;
    }
}

module.exports = Tree;
"><code>class Tree {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params"></span>) </span>{
        <span class="hljs-built_in">this</span>.root <span class="hljs-operator">=</span> null;
    }

    addNode(node) {
        <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.root <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> null) {
            <span class="hljs-built_in">this</span>.root <span class="hljs-operator">=</span> node;
        } <span class="hljs-keyword">else</span> {
            let p <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.root;
            <span class="hljs-keyword">while</span> (<span class="hljs-literal">true</span>) {
                <span class="hljs-keyword">if</span> (p.data <span class="hljs-operator">></span> node.data) {
                    <span class="hljs-keyword">if</span> (p.left) {
                        p <span class="hljs-operator">=</span> p.left;
                    } <span class="hljs-keyword">else</span> {
                        p.left <span class="hljs-operator">=</span> node;
                        <span class="hljs-keyword">break</span>;
                    }
                } <span class="hljs-keyword">else</span> {
                    <span class="hljs-keyword">if</span> (p.right) {
                        p <span class="hljs-operator">=</span> p.right;
                    } <span class="hljs-keyword">else</span> {
                        p.right <span class="hljs-operator">=</span> node;
                        <span class="hljs-keyword">break</span>;
                    }
                }
            }
        }
    }

    hasNode(number) {
        let n <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.root;
        <span class="hljs-keyword">while</span> (n) {
            <span class="hljs-keyword">if</span> (n.data <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> number) {
                <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>;
            } <span class="hljs-keyword">else</span> {
                <span class="hljs-keyword">if</span> (n.data <span class="hljs-operator">></span> number) {
                    n <span class="hljs-operator">=</span> n.left;
                } <span class="hljs-keyword">else</span> {
                    n <span class="hljs-operator">=</span> n.right;
                }
            }
        }
        <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
    }
}

module.exports <span class="hljs-operator">=</span> Tree;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/3be6e2285f0983d74ce451eb15f2fbb5a9b94adb311f097e242a2ee3c72ae4fb.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/dc3527152db4f855b49f5700b6a6e18259f1b3b297336f88a3b4a8ad122dfa3e.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="class MerkleTree {
    constructor(leaves, concat) {
        this.leaves = leaves;
        this.concat = concat;
    }
    getRoot() {
        return this.concat(this.leaves[0], this.leaves[1]);
    }
}

module.exports = MerkleTree;
"><code>class MerkleTree {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params">leaves, concat</span>) </span>{
        <span class="hljs-built_in">this</span>.leaves <span class="hljs-operator">=</span> leaves;
        <span class="hljs-built_in">this</span>.concat <span class="hljs-operator">=</span> concat;
    }
    getRoot() {
        <span class="hljs-keyword">return</span> <span class="hljs-built_in">this</span>.concat(<span class="hljs-built_in">this</span>.leaves[<span class="hljs-number">0</span>], <span class="hljs-built_in">this</span>.leaves[<span class="hljs-number">1</span>]);
    }
}

module.exports <span class="hljs-operator">=</span> MerkleTree;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/28304542955b2938b751bcce42f954125c0ba44e31bc3c18294288cf1abf86bd.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="class MerkleTree {
    constructor(leaves, concat) {
        this.leaves = leaves;
        this.concat = concat;
    }
    getRoot(next = this.leaves) {
        while (true) {
            if (next.length &lt;= 1) {
                return next;
            }
            let level = [];
            for (let i = 0; i &lt; next.length; i += 2) {
                level.push(this.concat(next[i], next[i + 1]));
            }
            next = level;
        }
    }
}

module.exports = MerkleTree;
"><code>class MerkleTree {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params">leaves, concat</span>) </span>{
        <span class="hljs-built_in">this</span>.leaves <span class="hljs-operator">=</span> leaves;
        <span class="hljs-built_in">this</span>.concat <span class="hljs-operator">=</span> concat;
    }
    getRoot(next <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.leaves) {
        <span class="hljs-keyword">while</span> (<span class="hljs-literal">true</span>) {
            <span class="hljs-keyword">if</span> (next.<span class="hljs-built_in">length</span> <span class="hljs-operator">&#x3C;</span><span class="hljs-operator">=</span> <span class="hljs-number">1</span>) {
                <span class="hljs-keyword">return</span> next;
            }
            let level <span class="hljs-operator">=</span> [];
            <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> next.<span class="hljs-built_in">length</span>; i <span class="hljs-operator">+</span><span class="hljs-operator">=</span> <span class="hljs-number">2</span>) {
                level.<span class="hljs-built_in">push</span>(<span class="hljs-built_in">this</span>.concat(next[i], next[i <span class="hljs-operator">+</span> <span class="hljs-number">1</span>]));
            }
            next <span class="hljs-operator">=</span> level;
        }
    }
}

module.exports <span class="hljs-operator">=</span> MerkleTree;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/0be4e8b440491f8e185ceba81f2ab6868ad4c040a999db5c50cef5b0a85249a8.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="class MerkleTree {
    constructor(leaves, concat) {
        this.leaves = leaves;
        this.concat = concat;
    }
    getRoot(next = this.leaves) {
        while (true) {
            if (next.length &lt;= 1) {
                return next;
            }
            let level = [];
            for (let i = 0; i &lt; next.length; i += 2) {
                if ((i + 1) &gt;= next.length) {
                    level.push(next[i]);
                } else {
                    level.push(this.concat(next[i], next[i + 1]));
                }
            }
            next = level;
        }
    }
}

module.exports = MerkleTree;
"><code>class MerkleTree {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params">leaves, concat</span>) </span>{
        <span class="hljs-built_in">this</span>.leaves <span class="hljs-operator">=</span> leaves;
        <span class="hljs-built_in">this</span>.concat <span class="hljs-operator">=</span> concat;
    }
    getRoot(next <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.leaves) {
        <span class="hljs-keyword">while</span> (<span class="hljs-literal">true</span>) {
            <span class="hljs-keyword">if</span> (next.<span class="hljs-built_in">length</span> <span class="hljs-operator">&#x3C;</span><span class="hljs-operator">=</span> <span class="hljs-number">1</span>) {
                <span class="hljs-keyword">return</span> next;
            }
            let level <span class="hljs-operator">=</span> [];
            <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> next.<span class="hljs-built_in">length</span>; i <span class="hljs-operator">+</span><span class="hljs-operator">=</span> <span class="hljs-number">2</span>) {
                <span class="hljs-keyword">if</span> ((i <span class="hljs-operator">+</span> <span class="hljs-number">1</span>) <span class="hljs-operator">></span><span class="hljs-operator">=</span> next.<span class="hljs-built_in">length</span>) {
                    level.<span class="hljs-built_in">push</span>(next[i]);
                } <span class="hljs-keyword">else</span> {
                    level.<span class="hljs-built_in">push</span>(<span class="hljs-built_in">this</span>.concat(next[i], next[i <span class="hljs-operator">+</span> <span class="hljs-number">1</span>]));
                }
            }
            next <span class="hljs-operator">=</span> level;
        }
    }
}

module.exports <span class="hljs-operator">=</span> MerkleTree;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/6fa5f0c26767a51a65924a13601f82508b396664766fce5bdb7839d104cc43e6.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="class MerkleTree {
    constructor(leaves, concat) {
        this.leaves = leaves;
        this.concat = concat;
    }
    getRoot(next = this.leaves) {
        while (true) {
            if (next.length &lt;= 1) {
                return next;
            }
            let level = [];
            for (let i = 0; i &lt; next.length; i += 2) {
                if ((i + 1) &gt;= next.length) {
                    level.push(next[i]);
                } else {
                    level.push(this.concat(next[i], next[i + 1]));
                }
            }
            next = level;
        }
    }
    getProof(index, next = this.leaves) {
        let proof = [];
        while (true) {
            if (next.length &lt;= 1) {
                return proof;
            }
            let level = [];
            for (let i = 0; i &lt; next.length; i += 2) {
                if ((i + 1) &gt;= next.length) {
                    level.push(next[i]);
                } else {
                    level.push(this.concat(next[i], next[i + 1]));
                    if (index === i || i === (index - 1)) {
                        if (index === i) {
                            proof.push({ data: next[i + 1], left: false });
                        } else {
                            proof.push({ data: next[i], left: true });
                        }
                    }
                }
            }
            index = Math.floor(index / 2);
            next = level;
        }
    }
}

module.exports = MerkleTree;
"><code>class MerkleTree {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params">leaves, concat</span>) </span>{
        <span class="hljs-built_in">this</span>.leaves <span class="hljs-operator">=</span> leaves;
        <span class="hljs-built_in">this</span>.concat <span class="hljs-operator">=</span> concat;
    }
    getRoot(next <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.leaves) {
        <span class="hljs-keyword">while</span> (<span class="hljs-literal">true</span>) {
            <span class="hljs-keyword">if</span> (next.<span class="hljs-built_in">length</span> <span class="hljs-operator">&#x3C;</span><span class="hljs-operator">=</span> <span class="hljs-number">1</span>) {
                <span class="hljs-keyword">return</span> next;
            }
            let level <span class="hljs-operator">=</span> [];
            <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> next.<span class="hljs-built_in">length</span>; i <span class="hljs-operator">+</span><span class="hljs-operator">=</span> <span class="hljs-number">2</span>) {
                <span class="hljs-keyword">if</span> ((i <span class="hljs-operator">+</span> <span class="hljs-number">1</span>) <span class="hljs-operator">></span><span class="hljs-operator">=</span> next.<span class="hljs-built_in">length</span>) {
                    level.<span class="hljs-built_in">push</span>(next[i]);
                } <span class="hljs-keyword">else</span> {
                    level.<span class="hljs-built_in">push</span>(<span class="hljs-built_in">this</span>.concat(next[i], next[i <span class="hljs-operator">+</span> <span class="hljs-number">1</span>]));
                }
            }
            next <span class="hljs-operator">=</span> level;
        }
    }
    getProof(index, next <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.leaves) {
        let proof <span class="hljs-operator">=</span> [];
        <span class="hljs-keyword">while</span> (<span class="hljs-literal">true</span>) {
            <span class="hljs-keyword">if</span> (next.<span class="hljs-built_in">length</span> <span class="hljs-operator">&#x3C;</span><span class="hljs-operator">=</span> <span class="hljs-number">1</span>) {
                <span class="hljs-keyword">return</span> proof;
            }
            let level <span class="hljs-operator">=</span> [];
            <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> next.<span class="hljs-built_in">length</span>; i <span class="hljs-operator">+</span><span class="hljs-operator">=</span> <span class="hljs-number">2</span>) {
                <span class="hljs-keyword">if</span> ((i <span class="hljs-operator">+</span> <span class="hljs-number">1</span>) <span class="hljs-operator">></span><span class="hljs-operator">=</span> next.<span class="hljs-built_in">length</span>) {
                    level.<span class="hljs-built_in">push</span>(next[i]);
                } <span class="hljs-keyword">else</span> {
                    level.<span class="hljs-built_in">push</span>(<span class="hljs-built_in">this</span>.concat(next[i], next[i <span class="hljs-operator">+</span> <span class="hljs-number">1</span>]));
                    <span class="hljs-keyword">if</span> (index <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> i <span class="hljs-operator">|</span><span class="hljs-operator">|</span> i <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> (index <span class="hljs-operator">-</span> <span class="hljs-number">1</span>)) {
                        <span class="hljs-keyword">if</span> (index <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> i) {
                            proof.<span class="hljs-built_in">push</span>({ data: next[i <span class="hljs-operator">+</span> <span class="hljs-number">1</span>], left: <span class="hljs-literal">false</span> });
                        } <span class="hljs-keyword">else</span> {
                            proof.<span class="hljs-built_in">push</span>({ data: next[i], left: <span class="hljs-literal">true</span> });
                        }
                    }
                }
            }
            index <span class="hljs-operator">=</span> Math.floor(index <span class="hljs-operator">/</span> <span class="hljs-number">2</span>);
            next <span class="hljs-operator">=</span> level;
        }
    }
}

module.exports <span class="hljs-operator">=</span> MerkleTree;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/26c8f2a4eddc6460be4e2b2bf345d4e993e3a0adc7fd85a621ed8f36782ad6a6.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function verifyProof(proof, node, root, concat) {
    let n = node;
    proof.forEach((e, _) =&gt; {
        if (e.left) {
            n = concat(e.data, n);
        } else {
            n = concat(n, e.data);
        }
    });

    if (n === root) {
        return true;
    } else {
        return false;
    }
}

module.exports = verifyProof;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">verifyProof</span>(<span class="hljs-params">proof, node, root, concat</span>) </span>{
    let n <span class="hljs-operator">=</span> node;
    proof.forEach((e, <span class="hljs-keyword">_</span>) <span class="hljs-operator">=</span><span class="hljs-operator">></span> {
        <span class="hljs-keyword">if</span> (e.left) {
            n <span class="hljs-operator">=</span> concat(e.data, n);
        } <span class="hljs-keyword">else</span> {
            n <span class="hljs-operator">=</span> concat(n, e.data);
        }
    });

    <span class="hljs-keyword">if</span> (n <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> root) {
        <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>;
    } <span class="hljs-keyword">else</span> {
        <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
    }
}

module.exports <span class="hljs-operator">=</span> verifyProof;
</code></pre><h3 id="h-blockchain-data-storage" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Blockchain Data Storage</h3><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/6230ce430f3a52677a9bc9af7194d04453a770188b4ad959b27e5a05b41130e8.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/628b3504fc46740fcb1aa5f083b524ab36e62f4da7f89677e5d34e308ba58a68.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>có 2 mục nhé chú ý</strong> :</p><p><strong>mục TrieNode.js</strong></p><pre data-type="codeBlock" text="class TrieNode {
    constructor(key) {
        this.key = key;
        this.children = {};
        this.isWord = false;
    }
}

module.exports = TrieNode;
"><code>class TrieNode {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params">key</span>) </span>{
        <span class="hljs-built_in">this</span>.key <span class="hljs-operator">=</span> key;
        <span class="hljs-built_in">this</span>.children <span class="hljs-operator">=</span> {};
        <span class="hljs-built_in">this</span>.isWord <span class="hljs-operator">=</span> <span class="hljs-literal">false</span>;
    }
}

module.exports <span class="hljs-operator">=</span> TrieNode;
</code></pre><p><strong>mục Trie.js</strong></p><pre data-type="codeBlock" text="const TrieNode = require(&apos;./TrieNode&apos;);

class Trie {
    constructor() {
        this.root = new TrieNode(null);
    }
}

module.exports = Trie;
"><code>const TrieNode <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'./TrieNode'</span>);

class Trie {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params"></span>) </span>{
        <span class="hljs-built_in">this</span>.root <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> TrieNode(null);
    }
}

module.exports <span class="hljs-operator">=</span> Trie;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/11de9f641557d8fd689f6b2964654af6dbb8114083bb5e2b799c6bfe16a04b12.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const TrieNode = require(&apos;./TrieNode&apos;);

class Trie {
    constructor() {
        this.root = new TrieNode(null);
    }

    insert(data) {
        let n = this.root;
        for (let i = 0; i &lt; data.length; i++) {
            let node = new TrieNode(data[i]);
            n.children[data[i]] = node;
            if ((i + 1) === data.length) {
                node.isWord = true;
            }
            n = node;
        }
    }
}

module.exports = Trie;
"><code>const TrieNode <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'./TrieNode'</span>);

class Trie {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params"></span>) </span>{
        <span class="hljs-built_in">this</span>.root <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> TrieNode(null);
    }

    insert(data) {
        let n <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.root;
        <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> data.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
            let node <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> TrieNode(data[i]);
            n.children[data[i]] <span class="hljs-operator">=</span> node;
            <span class="hljs-keyword">if</span> ((i <span class="hljs-operator">+</span> <span class="hljs-number">1</span>) <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> data.<span class="hljs-built_in">length</span>) {
                node.isWord <span class="hljs-operator">=</span> <span class="hljs-literal">true</span>;
            }
            n <span class="hljs-operator">=</span> node;
        }
    }
}

module.exports <span class="hljs-operator">=</span> Trie;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/f23c7bad2b9f0ada7c07bea07b61cc308fb172182f6511972d47f112b3a78f41.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const TrieNode = require(&apos;./TrieNode&apos;);

class Trie {
    constructor() {
        this.root = new TrieNode(null);
    }

    insert(data) {
        let n = this.root;
        for (let i = 0; i &lt; data.length; i++) {
            let node = n.children[data[i]];
            if (!node) {
                node = new TrieNode(data[i]);
            }
            n.children[data[i]] = node;
            if ((i + 1) === data.length) {
                node.isWord = true;
            }
            n = node;
        }
    }
}

module.exports = Trie;
"><code>const TrieNode <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'./TrieNode'</span>);

class Trie {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params"></span>) </span>{
        <span class="hljs-built_in">this</span>.root <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> TrieNode(null);
    }

    insert(data) {
        let n <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.root;
        <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> data.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
            let node <span class="hljs-operator">=</span> n.children[data[i]];
            <span class="hljs-keyword">if</span> (<span class="hljs-operator">!</span>node) {
                node <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> TrieNode(data[i]);
            }
            n.children[data[i]] <span class="hljs-operator">=</span> node;
            <span class="hljs-keyword">if</span> ((i <span class="hljs-operator">+</span> <span class="hljs-number">1</span>) <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> data.<span class="hljs-built_in">length</span>) {
                node.isWord <span class="hljs-operator">=</span> <span class="hljs-literal">true</span>;
            }
            n <span class="hljs-operator">=</span> node;
        }
    }
}

module.exports <span class="hljs-operator">=</span> Trie;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/2787a49e68c134bf3a246d82592169edb5a457e188c8b0f4e4cf5cfc9ac86e2c.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const TrieNode = require(&apos;./TrieNode&apos;);

class Trie {
    constructor() {
        this.root = new TrieNode(null);
    }

    insert(data) {
        let n = this.root;
        for (let i = 0; i &lt; data.length; i++) {
            let node = n.children[data[i]];
            if (!node) {
                node = new TrieNode(data[i]);
            }
            n.children[data[i]] = node;
            if ((i + 1) === data.length) {
                node.isWord = true;
            }
            n = node;
        }
    }

    contains(word) {
        let n = this.root.children[word[0]];
        if (n === null) {
            return false;
        }
        let i = 1;
        while (n) {
            if (i &gt;= word.length) {
                if (n.isWord) {
                    return true;
                } else {
                    return false;
                }
            }
            n = n.children[word[i]];
            if (n === null) {
                return false;
            }
            i = i + 1;
        }
    }
}

module.exports = Trie;
"><code>const TrieNode <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'./TrieNode'</span>);

class Trie {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params"></span>) </span>{
        <span class="hljs-built_in">this</span>.root <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> TrieNode(null);
    }

    insert(data) {
        let n <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.root;
        <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> data.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
            let node <span class="hljs-operator">=</span> n.children[data[i]];
            <span class="hljs-keyword">if</span> (<span class="hljs-operator">!</span>node) {
                node <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> TrieNode(data[i]);
            }
            n.children[data[i]] <span class="hljs-operator">=</span> node;
            <span class="hljs-keyword">if</span> ((i <span class="hljs-operator">+</span> <span class="hljs-number">1</span>) <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> data.<span class="hljs-built_in">length</span>) {
                node.isWord <span class="hljs-operator">=</span> <span class="hljs-literal">true</span>;
            }
            n <span class="hljs-operator">=</span> node;
        }
    }

    contains(word) {
        let n <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.root.children[word[<span class="hljs-number">0</span>]];
        <span class="hljs-keyword">if</span> (n <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> null) {
            <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
        }
        let i <span class="hljs-operator">=</span> <span class="hljs-number">1</span>;
        <span class="hljs-keyword">while</span> (n) {
            <span class="hljs-keyword">if</span> (i <span class="hljs-operator">></span><span class="hljs-operator">=</span> word.<span class="hljs-built_in">length</span>) {
                <span class="hljs-keyword">if</span> (n.isWord) {
                    <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>;
                } <span class="hljs-keyword">else</span> {
                    <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
                }
            }
            n <span class="hljs-operator">=</span> n.children[word[i]];
            <span class="hljs-keyword">if</span> (n <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> null) {
                <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
            }
            i <span class="hljs-operator">=</span> i <span class="hljs-operator">+</span> <span class="hljs-number">1</span>;
        }
    }
}

module.exports <span class="hljs-operator">=</span> Trie;
</code></pre><p><strong>next qua các phần k phải điền code</strong></p>]]></content:encoded>
            <author>cryptovuive@newsletter.paragraph.com (meteosrds)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/d10a65481cff26688415868b7285be717e848758dba596c324720b940e177329.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Alchemy University - tổng hợp ]]></title>
            <link>https://paragraph.com/@cryptovuive/alchemy-university-t-ng-h-p</link>
            <guid>R6euDo2VfwBfSFJRBBOt</guid>
            <pubDate>Wed, 14 Dec 2022 12:49:49 GMT</pubDate>
            <description><![CDATA[Dự án Alchemy với định giá 10,2 tỷ $ và được tài trợ 545 triệu $, các nhiệm vụ hàng tuần của trường đại học sẽ dần bắt đầu. mọi người đã claim NFT truy cập sớm thì có thể bắt đầu cuộc sống đại học nhé hiện tại chỉ có 1 phần nhỏ bài học ra mắt , còn rất nhiều khóa học đằng sau đợi mở nữa nên cứ bình thường mà học cũng không chắc đã có thưởng cho người học nên ai không thích thì có thể không làm nhé vì nó cũng tốn khá nhiều thời gian của mọi người mục tiêu : bài viết này được viết ra là để hướn...]]></description>
            <content:encoded><![CDATA[<p>Dự án Alchemy với định giá 10,2 tỷ $ và được tài trợ 545 triệu $, các nhiệm vụ hàng tuần của trường đại học sẽ dần bắt đầu. mọi người đã claim NFT truy cập sớm thì có thể bắt đầu cuộc sống đại học nhé</p><p>hiện tại chỉ có 1 phần nhỏ bài học ra mắt , còn rất nhiều khóa học đằng sau đợi mở nữa nên cứ bình thường mà học</p><p><strong>cũng không chắc đã có thưởng cho người học nên ai không thích thì có thể không làm nhé vì nó cũng tốn khá nhiều thời gian của mọi người</strong></p><p><strong>mục tiêu :</strong> bài viết này được viết ra là để hướng dẫn cho mọi người làm dễ nhất có thể chả cần có kiến thức j cả chỉ cần <strong>copy paste</strong> để hoàn thành khóa học là được vì không phải ai cũng giỏi và có nhiều thời gian mà tự mò được</p><p>mọi người chỉ cần làm theo tất cả các bước bên dưới mở đúng chỗ là làm xong nhé</p><p><strong>bắt đầu học nhé :</strong></p><p><strong>Bước 1:</strong> hôm trước ai đã đăng ký và claim NFT qua link nó gửi về mail <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.me/cryptovuive/14403">tại đây</a> thì vào discord veri và lấy role nhé - <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.gg/CVRbbz5x">link</a></p><p><strong>Bước 2:</strong> tiếp theo đăng ký tài khoản bằng google và liên kết ví tại web này ( yêu cầu ví có NFT ở trên ) - <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://university.alchemy.com/">link</a></p><p><strong>Bước 3:</strong> đăng ký xong mọi người có thể vào profile và cài đặt các thông tin</p><p><strong>Bước 4:</strong> tiếp theo dưới đây là toàn bộ các đáp án của từng phần trong khóa học hiện tại</p><h3 id="h-phan-1-javascript-fundamentals" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">phần 1 : javascript fundamentals</h3><p>A. The Basic - vì nó quá dài nên sẽ chia thành những link nhỏ để xem cho dễ nhé</p><p>the basic phần 1 - <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/0x4450dB99260EC3140B4690F1c6bDd64d5d9644A9/ER3kwx3xSUSnX30LI1KKPBpu82rBpyZuAlR__Kv5T6c">link</a></p><p>the basic phần 2 - <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/0x4450dB99260EC3140B4690F1c6bDd64d5d9644A9/wH-AHWMrZX8sYEE37KVu2eNM7zJK7XlLi7OoqTMxQcs">link</a></p><p>the basic phần 3 - <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/0x4450dB99260EC3140B4690F1c6bDd64d5d9644A9/56otMRNbbwMlcKvyOhyN3STKPVBZzE7Tg_OXKNBQm70">link</a></p><p>B. Data Structures - <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/0x4450dB99260EC3140B4690F1c6bDd64d5d9644A9/-4pFqEs-4lCKOPUG20wGISEZnTgi9FQS-WMAVpldzyE">link</a></p><p>C. Networks - <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/0x4450dB99260EC3140B4690F1c6bDd64d5d9644A9/uELodCo--CBUDN7AVUjVNCKRg5V7_M0hdAyvq_Za2lc">link</a></p><h3 id="h-phan-2-ethereum-developer-bootcamp-djoi-update-soon-nhe" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">phần 2 : Ethereum Developer Bootcamp - đợi update soon nhé</h3><p>phần 1+ 2 - <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/0x4450dB99260EC3140B4690F1c6bDd64d5d9644A9/3mCw8ExD14tSNZ3Qamp9a1t7uikk1FVMJ4ETdmfPkro">link</a></p><p>phần 3 <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/0x4450dB99260EC3140B4690F1c6bDd64d5d9644A9/hU93IwLWX0gRxCzt4DPDGdZaAP7dp5KW_7Vbm95k9M8">link</a></p><p>phần 4 - <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/0x4450dB99260EC3140B4690F1c6bDd64d5d9644A9/h4BQVYngHTqxCvZgzUqtWdK_Rw7_ORhWioimB-ft7Jc">link</a></p><p>phần 5</p><p>phần 6</p>]]></content:encoded>
            <author>cryptovuive@newsletter.paragraph.com (meteosrds)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/bbc14d3f25daff04a591cff054b18d30ff36bee225bc6902e794d51b2c353670.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Networks]]></title>
            <link>https://paragraph.com/@cryptovuive/networks</link>
            <guid>jhxRYaa3SJuhsMnClfKa</guid>
            <pubDate>Wed, 14 Dec 2022 12:38:09 GMT</pubDate>
            <description><![CDATA[bấm next qua 2 cái trên ảnh1. đáp án CALLBACK FUNCTIONS/** * Runs a callback function immediately * @param {function} callbackFunction */ function runCallback(callbackFunction) { callbackFunction(); } module.exports = runCallback; /** * Runs a callback function immediately * @param {function} callbackFunction */ function runCallback(callbackFunction) { setTimeout(callbackFunction, 1000); } module.exports = runCallback; class Dialog { onClose(callbackFunction) { this.carr = this.carr || []; th...]]></description>
            <content:encoded><![CDATA[<figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/36dc2484ba81e8e2bc2211c6716dff03233c63d1183ce216efc83866bf9c53eb.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>bấm next qua 2 cái trên ảnh</p><h2 id="h-1-djap-an-callback-functions" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">1. đáp án CALLBACK FUNCTIONS</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/56c609794c5d3cf2e4cc85427b3cdd4c1f76ec44c9b3ad83487776020667c206.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d64c0142ad571dd9a5aabc071299b1cda73ced70f3b7ffcafd8c63ff135aa689.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="/**
 * Runs a callback function immediately
 * @param {function} callbackFunction
 */
function runCallback(callbackFunction) {
    callbackFunction();
}

module.exports = runCallback;
"><code><span class="hljs-comment">/**
 * Runs a callback function immediately
 * @param {function} callbackFunction
 */</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">runCallback</span>(<span class="hljs-params">callbackFunction</span>) </span>{
    callbackFunction();
}

module.exports <span class="hljs-operator">=</span> runCallback;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/54910ec5eae864f7a24d312642193390660f0c18f84d5a41bb455190a822de42.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="/**
 * Runs a callback function immediately
 * @param {function} callbackFunction
 */
function runCallback(callbackFunction) {
    setTimeout(callbackFunction, 1000);
}

module.exports = runCallback;
"><code><span class="hljs-comment">/**
 * Runs a callback function immediately
 * @param {function} callbackFunction
 */</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">runCallback</span>(<span class="hljs-params">callbackFunction</span>) </span>{
    setTimeout(callbackFunction, <span class="hljs-number">1000</span>);
}

module.exports <span class="hljs-operator">=</span> runCallback;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/2fbf5f3f633b973ffcfd0dfde6e61f2cf26a725779ac1d91810192fc3c24ab41.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="class Dialog {
    onClose(callbackFunction) {
        this.carr = this.carr || [];
        this.carr.push(callbackFunction);
    }

    close() {
        for (let i = 0; i &lt; this.carr.length; i++) {
            this.carr[i]();
        }
    }
}

module.exports = Dialog;
"><code>class Dialog {
    onClose(callbackFunction) {
        <span class="hljs-built_in">this</span>.carr <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.carr <span class="hljs-operator">|</span><span class="hljs-operator">|</span> [];
        <span class="hljs-built_in">this</span>.carr.<span class="hljs-built_in">push</span>(callbackFunction);
    }

    close() {
        <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> <span class="hljs-built_in">this</span>.carr.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
            <span class="hljs-built_in">this</span>.carr[i]();
        }
    }
}

module.exports <span class="hljs-operator">=</span> Dialog;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/630de547c3561f60186c65012fca357c76df1cebc8842991a2c9ec9d02f78c6f.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="class Dialog {
    onClose(callbackFunction) {
        this.carr = this.carr || [];
        this.carr.push(callbackFunction);
    }

    close() {
        for (let i = 0; i &lt; this.carr.length; i++) {
            this.carr[i]();
        }
    }
}

module.exports = Dialog;
"><code>class Dialog {
    onClose(callbackFunction) {
        <span class="hljs-built_in">this</span>.carr <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.carr <span class="hljs-operator">|</span><span class="hljs-operator">|</span> [];
        <span class="hljs-built_in">this</span>.carr.<span class="hljs-built_in">push</span>(callbackFunction);
    }

    close() {
        <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> <span class="hljs-built_in">this</span>.carr.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
            <span class="hljs-built_in">this</span>.carr[i]();
        }
    }
}

module.exports <span class="hljs-operator">=</span> Dialog;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/ddbd2b80c370b8d1825f44db1714dcec69dba36942bb6e91ded7fb2b8701818b.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function forEach(arr, callback) {
    for (let i = 0; i &lt; arr.length; i++) {
        callback(arr[i], i);
    }
}

module.exports = forEach;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">forEach</span>(<span class="hljs-params">arr, callback</span>) </span>{
    <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> arr.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
        callback(arr[i], i);
    }
}

module.exports <span class="hljs-operator">=</span> forEach;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d0605d1023ee9b02672fc33d0ce14f5800942c3a87395474c943f705fb147b6c.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function map(arr, callback) {
    let a = [];
    for (let i = 0; i &lt; arr.length; i++) {
        a.push(callback(arr[i]));
    }

    return a;
}

module.exports = map;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">map</span>(<span class="hljs-params">arr, callback</span>) </span>{
    let a <span class="hljs-operator">=</span> [];
    <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> arr.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
        a.<span class="hljs-built_in">push</span>(callback(arr[i]));
    }

    <span class="hljs-keyword">return</span> a;
}

module.exports <span class="hljs-operator">=</span> map;
</code></pre><h2 id="h-2-djap-an-introduction-to-promises" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">2. đáp án INTRODUCTION TO PROMISES</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/8f823b6eaadf9b1b485246f3b8807e310216777ba46c39db195377eba04d12fe.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e01708e568513b229c185c54702cc5aa84672d691e662d3ee6aefcaf50604643.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="code bên dưới
"><code><span class="hljs-selector-tag">code</span> <span class="hljs-selector-tag">b</span>ên dướ<span class="hljs-selector-tag">i</span>
</code></pre><pre data-type="codeBlock" text="const { makeFood } = require(&apos;./Kitchen&apos;);

class Order {
    constructor() {
        this.isReady = false;
    }
    request(food) {
        const promise = makeFood(food);
        promise.then( (food) =&gt; {
            this.isReady = true;
        });
    }
}

module.exports = Order;
"><code>const { makeFood } <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'./Kitchen'</span>);

class Order {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params"></span>) </span>{
        <span class="hljs-built_in">this</span>.isReady <span class="hljs-operator">=</span> <span class="hljs-literal">false</span>;
    }
    request(food) {
        const promise <span class="hljs-operator">=</span> makeFood(food);
        promise.then( (food) <span class="hljs-operator">=</span><span class="hljs-operator">></span> {
            <span class="hljs-built_in">this</span>.isReady <span class="hljs-operator">=</span> <span class="hljs-literal">true</span>;
        });
    }
}

module.exports <span class="hljs-operator">=</span> Order;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/173edfd5cd0da925910336b1c24e725ceafa581e9a932b7769803b678a9a6f47.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const { makeFood } = require(&apos;./Kitchen&apos;);

class Order {
    constructor() {
        this.isReady = false;
    }
    request(food) {
        const promise = makeFood(food);
        promise.then((food) =&gt; {
            this.isReady = true;
        });
        promise.catch((err) =&gt; {
            this.error = err;
        });
    }
}

module.exports = Order;
"><code>const { makeFood } <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'./Kitchen'</span>);

class Order {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params"></span>) </span>{
        <span class="hljs-built_in">this</span>.isReady <span class="hljs-operator">=</span> <span class="hljs-literal">false</span>;
    }
    request(food) {
        const promise <span class="hljs-operator">=</span> makeFood(food);
        promise.then((food) <span class="hljs-operator">=</span><span class="hljs-operator">></span> {
            <span class="hljs-built_in">this</span>.isReady <span class="hljs-operator">=</span> <span class="hljs-literal">true</span>;
        });
        promise.catch((err) <span class="hljs-operator">=</span><span class="hljs-operator">></span> {
            <span class="hljs-built_in">this</span>.error <span class="hljs-operator">=</span> err;
        });
    }
}

module.exports <span class="hljs-operator">=</span> Order;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/70d7b95b9a4a3683d9be21e767c07ff52b2ef513c25a2601fa6a6ffbf67924cb.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function timer() {

    const promise = new Promise(function (resolve, reject) {
        setTimeout(function () {
            resolve(&apos;resolve&apos;);
        }, 1000);
    });

    return promise;
}

module.exports = timer;
"><code><span class="hljs-keyword">function</span> <span class="hljs-title function_">timer</span>(<span class="hljs-params"></span>) {

    <span class="hljs-keyword">const</span> promise = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Promise</span>(<span class="hljs-keyword">function</span> (<span class="hljs-params">resolve, reject</span>) {
        <span class="hljs-built_in">setTimeout</span>(<span class="hljs-keyword">function</span> (<span class="hljs-params"></span>) {
            <span class="hljs-title function_">resolve</span>(<span class="hljs-string">'resolve'</span>);
        }, <span class="hljs-number">1000</span>);
    });

    <span class="hljs-keyword">return</span> promise;
}

<span class="hljs-variable language_">module</span>.<span class="hljs-property">exports</span> = timer;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/7c1621359c75669ff6b7651500fb4428d52bd959e882346c2165c3787663e5d4.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function timer() {

    const promise = new Promise(function (resolve, reject) {
        setTimeout(function () {
            resolve(&apos;resolve&apos;);
        }, 1000);
    });

    return promise;
}

module.exports = timer;
"><code><span class="hljs-keyword">function</span> <span class="hljs-title function_">timer</span>(<span class="hljs-params"></span>) {

    <span class="hljs-keyword">const</span> promise = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Promise</span>(<span class="hljs-keyword">function</span> (<span class="hljs-params">resolve, reject</span>) {
        <span class="hljs-built_in">setTimeout</span>(<span class="hljs-keyword">function</span> (<span class="hljs-params"></span>) {
            <span class="hljs-title function_">resolve</span>(<span class="hljs-string">'resolve'</span>);
        }, <span class="hljs-number">1000</span>);
    });

    <span class="hljs-keyword">return</span> promise;
}

<span class="hljs-variable language_">module</span>.<span class="hljs-property">exports</span> = timer;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/474136fb5e369d88e302ca68f3b950f6851b0ca07006a64b8849e02f4514e918.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const { getResults } = require(&apos;./lab&apos;);
const { sendResults } = require(&apos;./messaging&apos;);
const { logResponse, logError } = require(&apos;./logs&apos;);

async function handleResults(patientId) {
    try {
        const res = await getResults(patientId);
        const r = await sendResults(patientId, res);
        await logResponse(r);
    } catch (ex) {
        logError(ex);
    }
}

module.exports = handleResults;
"><code><span class="hljs-keyword">const</span> { getResults } = <span class="hljs-built_in">require</span>(<span class="hljs-string">'./lab'</span>);
<span class="hljs-keyword">const</span> { sendResults } = <span class="hljs-built_in">require</span>(<span class="hljs-string">'./messaging'</span>);
<span class="hljs-keyword">const</span> { logResponse, logError } = <span class="hljs-built_in">require</span>(<span class="hljs-string">'./logs'</span>);

<span class="hljs-keyword">async</span> <span class="hljs-keyword">function</span> <span class="hljs-title function_">handleResults</span>(<span class="hljs-params">patientId</span>) {
    <span class="hljs-keyword">try</span> {
        <span class="hljs-keyword">const</span> res = <span class="hljs-keyword">await</span> <span class="hljs-title function_">getResults</span>(patientId);
        <span class="hljs-keyword">const</span> r = <span class="hljs-keyword">await</span> <span class="hljs-title function_">sendResults</span>(patientId, res);
        <span class="hljs-keyword">await</span> <span class="hljs-title function_">logResponse</span>(r);
    } <span class="hljs-keyword">catch</span> (ex) {
        <span class="hljs-title function_">logError</span>(ex);
    }
}

<span class="hljs-variable language_">module</span>.<span class="hljs-property">exports</span> = handleResults;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d7cd52dbac36fa663e15a29f1f9f8bf339ec961f0b29e84cf09910414d9cf398.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const { getResults } = require(&apos;./lab&apos;);
const { sendResults } = require(&apos;./messaging&apos;);
const { logResponse, logError } = require(&apos;./logs&apos;);

async function handleResults(patientId) {
    try {
        const res = await getResults(patientId);
        const r = await sendResults(patientId, res);
        await logResponse(r);
    } catch (ex) {
        logError(ex);
    }
}

module.exports = handleResults;
"><code><span class="hljs-keyword">const</span> { getResults } = <span class="hljs-built_in">require</span>(<span class="hljs-string">'./lab'</span>);
<span class="hljs-keyword">const</span> { sendResults } = <span class="hljs-built_in">require</span>(<span class="hljs-string">'./messaging'</span>);
<span class="hljs-keyword">const</span> { logResponse, logError } = <span class="hljs-built_in">require</span>(<span class="hljs-string">'./logs'</span>);

<span class="hljs-keyword">async</span> <span class="hljs-keyword">function</span> <span class="hljs-title function_">handleResults</span>(<span class="hljs-params">patientId</span>) {
    <span class="hljs-keyword">try</span> {
        <span class="hljs-keyword">const</span> res = <span class="hljs-keyword">await</span> <span class="hljs-title function_">getResults</span>(patientId);
        <span class="hljs-keyword">const</span> r = <span class="hljs-keyword">await</span> <span class="hljs-title function_">sendResults</span>(patientId, res);
        <span class="hljs-keyword">await</span> <span class="hljs-title function_">logResponse</span>(r);
    } <span class="hljs-keyword">catch</span> (ex) {
        <span class="hljs-title function_">logError</span>(ex);
    }
}

<span class="hljs-variable language_">module</span>.<span class="hljs-property">exports</span> = handleResults;
</code></pre><h2 id="h-3-djap-an-pact-a-promise-library" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">3. đáp án PACT: A PROMISE LIBRARY</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b18811122d8bd36fe2e7721361f99fa7c52f7b4b6de78ec0a5a1309a1733f158.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e52e607c5e2cb2b6e1f0ce3fceddac351b000e726a8d27b5650e6706b06feb1c.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="code bên đưới 
"><code><span class="hljs-selector-tag">code</span> <span class="hljs-selector-tag">b</span>ên đướ<span class="hljs-selector-tag">i</span> 
</code></pre><pre data-type="codeBlock" text="class Pact {
    constructor(fn) {
        this.catchs = [];
        this.thens = [];
        this.f1 = (value)=&gt; {
            for (let i = 0; i &lt; this.thens.length; i++) {
                this.thensi;
            }
        };
        this.f2 = (value)=&gt; {
            for (let i = 0; i &lt; this.catchs.length; i++) {
                this.catchsi;
            }
        };
        fn(this.f1, this.f2);
    }
    catch(c) {
        this.catchs.push(c);
    }
    then(t) {
        this.thens.push(t);
    }
}

module.exports = Pact;
"><code>class Pact {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params">fn</span>) </span>{
        <span class="hljs-built_in">this</span>.catchs <span class="hljs-operator">=</span> [];
        <span class="hljs-built_in">this</span>.thens <span class="hljs-operator">=</span> [];
        <span class="hljs-built_in">this</span>.f1 <span class="hljs-operator">=</span> (value)<span class="hljs-operator">=</span><span class="hljs-operator">></span> {
            <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> <span class="hljs-built_in">this</span>.thens.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
                <span class="hljs-built_in">this</span>.thensi;
            }
        };
        <span class="hljs-built_in">this</span>.f2 <span class="hljs-operator">=</span> (value)<span class="hljs-operator">=</span><span class="hljs-operator">></span> {
            <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> <span class="hljs-built_in">this</span>.catchs.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
                <span class="hljs-built_in">this</span>.catchsi;
            }
        };
        fn(<span class="hljs-built_in">this</span>.f1, <span class="hljs-built_in">this</span>.f2);
    }
    <span class="hljs-keyword">catch</span>(c) {
        <span class="hljs-built_in">this</span>.catchs.<span class="hljs-built_in">push</span>(c);
    }
    then(t) {
        <span class="hljs-built_in">this</span>.thens.<span class="hljs-built_in">push</span>(t);
    }
}

module.exports <span class="hljs-operator">=</span> Pact;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/847bb312d32bdd1c3956cf565d4e98af1407114bb9e9d9200db1686f19dc4e2a.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="code bên dưới 
"><code><span class="hljs-selector-tag">code</span> <span class="hljs-selector-tag">b</span>ên dướ<span class="hljs-selector-tag">i</span> 
</code></pre><pre data-type="codeBlock" text="class Pact {
    constructor(fn) {
        this.catchs = [];
        this.thens = [];
        this.f1 = (value)=&gt; {
            for (let i = 0; i &lt; this.thens.length; i++) {
                this.thensi;
            }
        };
        this.f2 = (value)=&gt; {
            for (let i = 0; i &lt; this.catchs.length; i++) {
                this.catchsi;
            }
        };
        fn(this.f1, this.f2);
    }
    catch(c) {
        this.catchs.push(c);
    }
    then(t) {
        this.thens.push(t);
    }
}

module.exports = Pact;
"><code>class Pact {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params">fn</span>) </span>{
        <span class="hljs-built_in">this</span>.catchs <span class="hljs-operator">=</span> [];
        <span class="hljs-built_in">this</span>.thens <span class="hljs-operator">=</span> [];
        <span class="hljs-built_in">this</span>.f1 <span class="hljs-operator">=</span> (value)<span class="hljs-operator">=</span><span class="hljs-operator">></span> {
            <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> <span class="hljs-built_in">this</span>.thens.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
                <span class="hljs-built_in">this</span>.thensi;
            }
        };
        <span class="hljs-built_in">this</span>.f2 <span class="hljs-operator">=</span> (value)<span class="hljs-operator">=</span><span class="hljs-operator">></span> {
            <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> <span class="hljs-built_in">this</span>.catchs.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
                <span class="hljs-built_in">this</span>.catchsi;
            }
        };
        fn(<span class="hljs-built_in">this</span>.f1, <span class="hljs-built_in">this</span>.f2);
    }
    <span class="hljs-keyword">catch</span>(c) {
        <span class="hljs-built_in">this</span>.catchs.<span class="hljs-built_in">push</span>(c);
    }
    then(t) {
        <span class="hljs-built_in">this</span>.thens.<span class="hljs-built_in">push</span>(t);
    }
}

module.exports <span class="hljs-operator">=</span> Pact;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/1f2ddda4c7d46500f653d2f29ab290bd0ca15507e9c51d79a4de837a8f340d6d.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="code bên dưới
"><code><span class="hljs-selector-tag">code</span> <span class="hljs-selector-tag">b</span>ên dướ<span class="hljs-selector-tag">i</span>
</code></pre><pre data-type="codeBlock" text="class Pact {
    constructor(fn) {
        this.catchs = [];
        this.thens = [];
        this.f1 = (value)=&gt; {
            for (let i = 0; i &lt; this.thens.length; i++) {
                this.thensi;
            }
        };
        this.f2 = (value)=&gt; {
            for (let i = 0; i &lt; this.catchs.length; i++) {
                this.catchsi;
            }
        };
        fn(this.f1, this.f2);
    }
    catch(c) {
        this.catchs.push(c);
    }
    then(t) {
        this.thens.push(t);
    }
}

module.exports = Pact;
"><code>class Pact {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params">fn</span>) </span>{
        <span class="hljs-built_in">this</span>.catchs <span class="hljs-operator">=</span> [];
        <span class="hljs-built_in">this</span>.thens <span class="hljs-operator">=</span> [];
        <span class="hljs-built_in">this</span>.f1 <span class="hljs-operator">=</span> (value)<span class="hljs-operator">=</span><span class="hljs-operator">></span> {
            <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> <span class="hljs-built_in">this</span>.thens.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
                <span class="hljs-built_in">this</span>.thensi;
            }
        };
        <span class="hljs-built_in">this</span>.f2 <span class="hljs-operator">=</span> (value)<span class="hljs-operator">=</span><span class="hljs-operator">></span> {
            <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> <span class="hljs-built_in">this</span>.catchs.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
                <span class="hljs-built_in">this</span>.catchsi;
            }
        };
        fn(<span class="hljs-built_in">this</span>.f1, <span class="hljs-built_in">this</span>.f2);
    }
    <span class="hljs-keyword">catch</span>(c) {
        <span class="hljs-built_in">this</span>.catchs.<span class="hljs-built_in">push</span>(c);
    }
    then(t) {
        <span class="hljs-built_in">this</span>.thens.<span class="hljs-built_in">push</span>(t);
    }
}

module.exports <span class="hljs-operator">=</span> Pact;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c1043e1f398f8e9b8e06d3f1e9d69e94358fbc8c3f94f06505981e472975f012.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="code bên dưới
"><code><span class="hljs-selector-tag">code</span> <span class="hljs-selector-tag">b</span>ên dướ<span class="hljs-selector-tag">i</span>
</code></pre><pre data-type="codeBlock" text="class Pact {
    constructor(fn) {
        this.catchs = [];
        this.thens = [];
        this.f1 = (value)=&gt; {
            for (let i = 0; i &lt; this.thens.length; i++) {
                this.thensi;
            }
        };
        this.f2 = (value)=&gt; {
            for (let i = 0; i &lt; this.catchs.length; i++) {
                this.catchsi;
            }
        };
        fn(this.f1, this.f2);
    }
    catch(c) {
        this.catchs.push(c);
    }
    then(t) {
        this.thens.push(t);
    }
}

module.exports = Pact;
"><code>class Pact {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params">fn</span>) </span>{
        <span class="hljs-built_in">this</span>.catchs <span class="hljs-operator">=</span> [];
        <span class="hljs-built_in">this</span>.thens <span class="hljs-operator">=</span> [];
        <span class="hljs-built_in">this</span>.f1 <span class="hljs-operator">=</span> (value)<span class="hljs-operator">=</span><span class="hljs-operator">></span> {
            <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> <span class="hljs-built_in">this</span>.thens.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
                <span class="hljs-built_in">this</span>.thensi;
            }
        };
        <span class="hljs-built_in">this</span>.f2 <span class="hljs-operator">=</span> (value)<span class="hljs-operator">=</span><span class="hljs-operator">></span> {
            <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> <span class="hljs-built_in">this</span>.catchs.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
                <span class="hljs-built_in">this</span>.catchsi;
            }
        };
        fn(<span class="hljs-built_in">this</span>.f1, <span class="hljs-built_in">this</span>.f2);
    }
    <span class="hljs-keyword">catch</span>(c) {
        <span class="hljs-built_in">this</span>.catchs.<span class="hljs-built_in">push</span>(c);
    }
    then(t) {
        <span class="hljs-built_in">this</span>.thens.<span class="hljs-built_in">push</span>(t);
    }
}

module.exports <span class="hljs-operator">=</span> Pact;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/dfbea46bc5576e21b4b34907ce3a91a6d8cb209bdd954d33843505715e831a9d.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="code bên dưới 
"><code><span class="hljs-selector-tag">code</span> <span class="hljs-selector-tag">b</span>ên dướ<span class="hljs-selector-tag">i</span> 
</code></pre><pre data-type="codeBlock" text="class Pact {
    constructor(fn) {
        this.catchs = [];
        this.thens = [];
        this.f1 = (value)=&gt; {
            for (let i = 0; i &lt; this.thens.length; i++) {
                this.thensi;
            }
        };
        this.f2 = (value)=&gt; {
            for (let i = 0; i &lt; this.catchs.length; i++) {
                this.catchsi;
            }
        };
        fn(this.f1, this.f2);
    }
    catch(c) {
        this.catchs.push(c);
    }
    then(t) {
        this.thens.push(t);
    }
}

module.exports = Pact;
"><code>class Pact {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params">fn</span>) </span>{
        <span class="hljs-built_in">this</span>.catchs <span class="hljs-operator">=</span> [];
        <span class="hljs-built_in">this</span>.thens <span class="hljs-operator">=</span> [];
        <span class="hljs-built_in">this</span>.f1 <span class="hljs-operator">=</span> (value)<span class="hljs-operator">=</span><span class="hljs-operator">></span> {
            <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> <span class="hljs-built_in">this</span>.thens.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
                <span class="hljs-built_in">this</span>.thensi;
            }
        };
        <span class="hljs-built_in">this</span>.f2 <span class="hljs-operator">=</span> (value)<span class="hljs-operator">=</span><span class="hljs-operator">></span> {
            <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> <span class="hljs-built_in">this</span>.catchs.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
                <span class="hljs-built_in">this</span>.catchsi;
            }
        };
        fn(<span class="hljs-built_in">this</span>.f1, <span class="hljs-built_in">this</span>.f2);
    }
    <span class="hljs-keyword">catch</span>(c) {
        <span class="hljs-built_in">this</span>.catchs.<span class="hljs-built_in">push</span>(c);
    }
    then(t) {
        <span class="hljs-built_in">this</span>.thens.<span class="hljs-built_in">push</span>(t);
    }
}

module.exports <span class="hljs-operator">=</span> Pact;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/f9f5af45d066e681ef6078136c3ea812d041b3c8a3e52055aa128a70d043d70b.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="code bên dưới 
"><code><span class="hljs-selector-tag">code</span> <span class="hljs-selector-tag">b</span>ên dướ<span class="hljs-selector-tag">i</span> 
</code></pre><pre data-type="codeBlock" text="const STATUS = {
    PENDING: 0,
    RESOLVED: 1,
    REJECTED: 2,
}

class Pact {
    constructor(fn) {
        this.catchs = [];
        this.thens = [];
        this.status = STATUS.PENDING;
        this.f1 = (value)=&gt; {
            this.resolvedValue = value;
            this.status = STATUS.RESOLVED;
            for (let i = 0; i &lt; this.thens.length; i++) {
                this.thensi;
            }
        };
        this.f2 = (value)=&gt; {
            this.rejectedValue = value;
            this.status = STATUS.REJECTED;
            for (let i = 0; i &lt; this.catchs.length; i++) {
                this.catchsi;
            }
        };
        fn(this.f1, this.f2);
    }
    catch(c) {
        if (this.status === STATUS.PENDING) {
            this.catchs.push(c);
        }
        else if (this.status === STATUS.REJECTED) {
            c(this.rejectedValue);
        }
    }
    then(t) {
        if (this.status === STATUS.PENDING) {
            this.thens.push(t);
        }
        else if (this.status === STATUS.RESOLVED) {
            t(this.resolvedValue);
        }
    }
}

module.exports = Pact;
"><code>const STATUS <span class="hljs-operator">=</span> {
    PENDING: <span class="hljs-number">0</span>,
    RESOLVED: <span class="hljs-number">1</span>,
    REJECTED: <span class="hljs-number">2</span>,
}

class Pact {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params">fn</span>) </span>{
        <span class="hljs-built_in">this</span>.catchs <span class="hljs-operator">=</span> [];
        <span class="hljs-built_in">this</span>.thens <span class="hljs-operator">=</span> [];
        <span class="hljs-built_in">this</span>.status <span class="hljs-operator">=</span> STATUS.PENDING;
        <span class="hljs-built_in">this</span>.f1 <span class="hljs-operator">=</span> (value)<span class="hljs-operator">=</span><span class="hljs-operator">></span> {
            <span class="hljs-built_in">this</span>.resolvedValue <span class="hljs-operator">=</span> value;
            <span class="hljs-built_in">this</span>.status <span class="hljs-operator">=</span> STATUS.RESOLVED;
            <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> <span class="hljs-built_in">this</span>.thens.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
                <span class="hljs-built_in">this</span>.thensi;
            }
        };
        <span class="hljs-built_in">this</span>.f2 <span class="hljs-operator">=</span> (value)<span class="hljs-operator">=</span><span class="hljs-operator">></span> {
            <span class="hljs-built_in">this</span>.rejectedValue <span class="hljs-operator">=</span> value;
            <span class="hljs-built_in">this</span>.status <span class="hljs-operator">=</span> STATUS.REJECTED;
            <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> <span class="hljs-built_in">this</span>.catchs.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
                <span class="hljs-built_in">this</span>.catchsi;
            }
        };
        fn(<span class="hljs-built_in">this</span>.f1, <span class="hljs-built_in">this</span>.f2);
    }
    <span class="hljs-keyword">catch</span>(c) {
        <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.status <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> STATUS.PENDING) {
            <span class="hljs-built_in">this</span>.catchs.<span class="hljs-built_in">push</span>(c);
        }
        <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.status <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> STATUS.REJECTED) {
            c(<span class="hljs-built_in">this</span>.rejectedValue);
        }
    }
    then(t) {
        <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.status <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> STATUS.PENDING) {
            <span class="hljs-built_in">this</span>.thens.<span class="hljs-built_in">push</span>(t);
        }
        <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.status <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> STATUS.RESOLVED) {
            t(<span class="hljs-built_in">this</span>.resolvedValue);
        }
    }
}

module.exports <span class="hljs-operator">=</span> Pact;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/1dac73ab720740fad92548b22c3093540474c0ef29192fe529f38fbea2726302.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="code bên dưới 
"><code><span class="hljs-selector-tag">code</span> <span class="hljs-selector-tag">b</span>ên dướ<span class="hljs-selector-tag">i</span> 
</code></pre><pre data-type="codeBlock" text="const STATUS = {
    PENDING: 0,
    RESOLVED: 1,
    REJECTED: 2,
}

class Pact {
    constructor(fn) {
        this.catchs = [];
        this.thens = [];
        this.status = STATUS.PENDING;
        this.f1 = (value)=&gt; {
            this.resolvedValue = value;
            this.status = STATUS.RESOLVED;
            for (let i = 0; i &lt; this.thens.length; i++) {
                this.thensi;
            }
        };
        this.f2 = (value)=&gt; {
            this.rejectedValue = value;
            this.status = STATUS.REJECTED;
            for (let i = 0; i &lt; this.catchs.length; i++) {
                this.catchsi;
            }
        };
        fn(this.f1, this.f2);
    }
    catch(c) {
        if (this.status === STATUS.PENDING) {
            this.catchs.push(c);
        }
        else if (this.status === STATUS.REJECTED) {
            c(this.rejectedValue);
        }
    }
    then(t) {
        if (this.status === STATUS.PENDING) {
            return new Pact((resolve, reject) =&gt; {
                this.thens.push((val) =&gt; {
                    if (val instanceof Pact) {
                        val.then((val) =&gt; resolve(t(val)));
                    }
                    else {
                        resolve(t(val));
                    }
                });
            });
        }
        else if (this.status === STATUS.RESOLVED) {
            t(this.resolvedValue);
        }
    }
}

module.exports = Pact;
"><code>const STATUS <span class="hljs-operator">=</span> {
    PENDING: <span class="hljs-number">0</span>,
    RESOLVED: <span class="hljs-number">1</span>,
    REJECTED: <span class="hljs-number">2</span>,
}

class Pact {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params">fn</span>) </span>{
        <span class="hljs-built_in">this</span>.catchs <span class="hljs-operator">=</span> [];
        <span class="hljs-built_in">this</span>.thens <span class="hljs-operator">=</span> [];
        <span class="hljs-built_in">this</span>.status <span class="hljs-operator">=</span> STATUS.PENDING;
        <span class="hljs-built_in">this</span>.f1 <span class="hljs-operator">=</span> (value)<span class="hljs-operator">=</span><span class="hljs-operator">></span> {
            <span class="hljs-built_in">this</span>.resolvedValue <span class="hljs-operator">=</span> value;
            <span class="hljs-built_in">this</span>.status <span class="hljs-operator">=</span> STATUS.RESOLVED;
            <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> <span class="hljs-built_in">this</span>.thens.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
                <span class="hljs-built_in">this</span>.thensi;
            }
        };
        <span class="hljs-built_in">this</span>.f2 <span class="hljs-operator">=</span> (value)<span class="hljs-operator">=</span><span class="hljs-operator">></span> {
            <span class="hljs-built_in">this</span>.rejectedValue <span class="hljs-operator">=</span> value;
            <span class="hljs-built_in">this</span>.status <span class="hljs-operator">=</span> STATUS.REJECTED;
            <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> <span class="hljs-built_in">this</span>.catchs.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
                <span class="hljs-built_in">this</span>.catchsi;
            }
        };
        fn(<span class="hljs-built_in">this</span>.f1, <span class="hljs-built_in">this</span>.f2);
    }
    <span class="hljs-keyword">catch</span>(c) {
        <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.status <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> STATUS.PENDING) {
            <span class="hljs-built_in">this</span>.catchs.<span class="hljs-built_in">push</span>(c);
        }
        <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.status <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> STATUS.REJECTED) {
            c(<span class="hljs-built_in">this</span>.rejectedValue);
        }
    }
    then(t) {
        <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.status <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> STATUS.PENDING) {
            <span class="hljs-keyword">return</span> <span class="hljs-keyword">new</span> Pact((resolve, reject) <span class="hljs-operator">=</span><span class="hljs-operator">></span> {
                <span class="hljs-built_in">this</span>.thens.<span class="hljs-built_in">push</span>((val) <span class="hljs-operator">=</span><span class="hljs-operator">></span> {
                    <span class="hljs-keyword">if</span> (val instanceof Pact) {
                        val.then((val) <span class="hljs-operator">=</span><span class="hljs-operator">></span> resolve(t(val)));
                    }
                    <span class="hljs-keyword">else</span> {
                        resolve(t(val));
                    }
                });
            });
        }
        <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.status <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> STATUS.RESOLVED) {
            t(<span class="hljs-built_in">this</span>.resolvedValue);
        }
    }
}

module.exports <span class="hljs-operator">=</span> Pact;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/4c22cab04301761c0d0747916ab42b5095fe794faf5d0fbb2ffa68c39f1b2cb1.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="code bên dưới 
"><code><span class="hljs-selector-tag">code</span> <span class="hljs-selector-tag">b</span>ên dướ<span class="hljs-selector-tag">i</span> 
</code></pre><pre data-type="codeBlock" text="const STATUS = {
    PENDING: 0,
    RESOLVED: 1,
    REJECTED: 2,
}

class Pact {
    constructor(fn) {
        this.catchs = [];
        this.thens = [];
        this.status = STATUS.PENDING;
        this.f1 = (value)=&gt; {
            this.resolvedValue = value;
            this.status = STATUS.RESOLVED;
            for (let i = 0; i &lt; this.thens.length; i++) {
                this.thensi;
            }
        };
        this.f2 = (value)=&gt; {
            this.rejectedValue = value;
            this.status = STATUS.REJECTED;
            for (let i = 0; i &lt; this.catchFn.length; i++) {
                this.catchsi;
            }
        };
        fn(this.f1, this.f2);
    }
    catch(c) {
        if (this.status === STATUS.PENDING) {
            this.catchs.push(c);
        }
        else if (this.status === STATUS.REJECTED) {
            c(this.rejectedValue);
        }
    }
    then(t) {
        if (this.status === STATUS.PENDING) {
            return new Pact((resolve, reject) =&gt; {
                this.thens.push((val) =&gt; {
                    if (val instanceof Pact) {
                        val.then((val) =&gt; resolve(t(val)));
                    }
                    else {
                        resolve(t(val));
                    }
                });
            });
        }
        else if (this.status === STATUS.RESOLVED) {
            t(this.resolvedValue);
        }
    }
}

module.exports = Pact;
"><code>const STATUS <span class="hljs-operator">=</span> {
    PENDING: <span class="hljs-number">0</span>,
    RESOLVED: <span class="hljs-number">1</span>,
    REJECTED: <span class="hljs-number">2</span>,
}

class Pact {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params">fn</span>) </span>{
        <span class="hljs-built_in">this</span>.catchs <span class="hljs-operator">=</span> [];
        <span class="hljs-built_in">this</span>.thens <span class="hljs-operator">=</span> [];
        <span class="hljs-built_in">this</span>.status <span class="hljs-operator">=</span> STATUS.PENDING;
        <span class="hljs-built_in">this</span>.f1 <span class="hljs-operator">=</span> (value)<span class="hljs-operator">=</span><span class="hljs-operator">></span> {
            <span class="hljs-built_in">this</span>.resolvedValue <span class="hljs-operator">=</span> value;
            <span class="hljs-built_in">this</span>.status <span class="hljs-operator">=</span> STATUS.RESOLVED;
            <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> <span class="hljs-built_in">this</span>.thens.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
                <span class="hljs-built_in">this</span>.thensi;
            }
        };
        <span class="hljs-built_in">this</span>.f2 <span class="hljs-operator">=</span> (value)<span class="hljs-operator">=</span><span class="hljs-operator">></span> {
            <span class="hljs-built_in">this</span>.rejectedValue <span class="hljs-operator">=</span> value;
            <span class="hljs-built_in">this</span>.status <span class="hljs-operator">=</span> STATUS.REJECTED;
            <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> <span class="hljs-built_in">this</span>.catchFn.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
                <span class="hljs-built_in">this</span>.catchsi;
            }
        };
        fn(<span class="hljs-built_in">this</span>.f1, <span class="hljs-built_in">this</span>.f2);
    }
    <span class="hljs-keyword">catch</span>(c) {
        <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.status <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> STATUS.PENDING) {
            <span class="hljs-built_in">this</span>.catchs.<span class="hljs-built_in">push</span>(c);
        }
        <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.status <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> STATUS.REJECTED) {
            c(<span class="hljs-built_in">this</span>.rejectedValue);
        }
    }
    then(t) {
        <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.status <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> STATUS.PENDING) {
            <span class="hljs-keyword">return</span> <span class="hljs-keyword">new</span> Pact((resolve, reject) <span class="hljs-operator">=</span><span class="hljs-operator">></span> {
                <span class="hljs-built_in">this</span>.thens.<span class="hljs-built_in">push</span>((val) <span class="hljs-operator">=</span><span class="hljs-operator">></span> {
                    <span class="hljs-keyword">if</span> (val instanceof Pact) {
                        val.then((val) <span class="hljs-operator">=</span><span class="hljs-operator">></span> resolve(t(val)));
                    }
                    <span class="hljs-keyword">else</span> {
                        resolve(t(val));
                    }
                });
            });
        }
        <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.status <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> STATUS.RESOLVED) {
            t(<span class="hljs-built_in">this</span>.resolvedValue);
        }
    }
}

module.exports <span class="hljs-operator">=</span> Pact;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b3ce78b601b4644cd7a950217bd497e8b30d2646e600ba835c2f64b825a1219e.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>vào xem và next qua 2 mục này là kết thúc phần network</strong></p>]]></content:encoded>
            <author>cryptovuive@newsletter.paragraph.com (meteosrds)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/bbc14d3f25daff04a591cff054b18d30ff36bee225bc6902e794d51b2c353670.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Data Structures]]></title>
            <link>https://paragraph.com/@cryptovuive/data-structures</link>
            <guid>DL4Z25WDADERuv0eI6wJ</guid>
            <pubDate>Wed, 14 Dec 2022 11:54:35 GMT</pubDate>
            <description><![CDATA[1. đáp án array sortfunction sortUp(array) { return array.sort(function comparison(a, b) { if (b &#x3C; a) { return 1; } if (a &#x3C; b) { return -1; } return 0; }); } module.exports = sortUp; function sortDown(array) { return array.sort(function comparison(a, b) { if (b &#x3C; a) { return -1; } if (a &#x3C; b) { return 1; } return 0; }); } module.exports = sortDown; function sortStringsUp(array) { return array.sort(function comparison(a, b) { return a.localeCompare(b); }); } module.exports =...]]></description>
            <content:encoded><![CDATA[<h2 id="h-1-djap-an-array-sort" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">1. đáp án array sort</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c7d234e8b632175e6e261bbecdd3ba88774cbf570774def2659a464289ffb9fd.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d877cc12f69ba0200aadd36ff9d4a729cb5ba28a3f84b44283ca5e1463bdcb56.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function sortUp(array) {
    return array.sort(function comparison(a, b) {
        if (b &lt; a) {
            return 1;
        }
        if (a &lt; b) {
            return -1;
        }
        return 0;
    });
}

module.exports = sortUp;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">sortUp</span>(<span class="hljs-params">array</span>) </span>{
    <span class="hljs-keyword">return</span> array.sort(<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">comparison</span>(<span class="hljs-params">a, b</span>) </span>{
        <span class="hljs-keyword">if</span> (b <span class="hljs-operator">&#x3C;</span> a) {
            <span class="hljs-keyword">return</span> <span class="hljs-number">1</span>;
        }
        <span class="hljs-keyword">if</span> (a <span class="hljs-operator">&#x3C;</span> b) {
            <span class="hljs-keyword">return</span> <span class="hljs-number">-1</span>;
        }
        <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
    });
}

module.exports <span class="hljs-operator">=</span> sortUp;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/cbd7e996bbd75531fe26aaf287f8c8b6f68b3cc552f3865639d1f29c11452051.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function sortDown(array) {
    return array.sort(function comparison(a, b) {
        if (b &lt; a) {
            return -1;
        }
        if (a &lt; b) {
            return 1;
        }
        return 0;
    });
}

module.exports = sortDown;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">sortDown</span>(<span class="hljs-params">array</span>) </span>{
    <span class="hljs-keyword">return</span> array.sort(<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">comparison</span>(<span class="hljs-params">a, b</span>) </span>{
        <span class="hljs-keyword">if</span> (b <span class="hljs-operator">&#x3C;</span> a) {
            <span class="hljs-keyword">return</span> <span class="hljs-number">-1</span>;
        }
        <span class="hljs-keyword">if</span> (a <span class="hljs-operator">&#x3C;</span> b) {
            <span class="hljs-keyword">return</span> <span class="hljs-number">1</span>;
        }
        <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
    });
}

module.exports <span class="hljs-operator">=</span> sortDown;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/db115a700552e1be7700858a0e73f171cfc7bcd93b1074d6767ac8a4a4dcc34f.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function sortStringsUp(array) {
    return array.sort(function comparison(a, b) {
        return a.localeCompare(b);
    });
}

module.exports = sortStringsUp;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">sortStringsUp</span>(<span class="hljs-params">array</span>) </span>{
    <span class="hljs-keyword">return</span> array.sort(<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">comparison</span>(<span class="hljs-params">a, b</span>) </span>{
        <span class="hljs-keyword">return</span> a.localeCompare(b);
    });
}

module.exports <span class="hljs-operator">=</span> sortStringsUp;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/2856a7d64127ed76d085ac72949a27e0393f740fc0cbabaaf84525bf9bcfb14a.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function sortStringsDown(array) {
    return array.sort(function comparison(a, b) {
        if (a.localeCompare(b) === 1) {
            return -1;
        }
        if (a.localeCompare(b) === -1) {
            return 1;
        }
        return a.localeCompare(b);
    });
}

module.exports = sortStringsDown;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">sortStringsDown</span>(<span class="hljs-params">array</span>) </span>{
    <span class="hljs-keyword">return</span> array.sort(<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">comparison</span>(<span class="hljs-params">a, b</span>) </span>{
        <span class="hljs-keyword">if</span> (a.localeCompare(b) <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-number">1</span>) {
            <span class="hljs-keyword">return</span> <span class="hljs-number">-1</span>;
        }
        <span class="hljs-keyword">if</span> (a.localeCompare(b) <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-number">-1</span>) {
            <span class="hljs-keyword">return</span> <span class="hljs-number">1</span>;
        }
        <span class="hljs-keyword">return</span> a.localeCompare(b);
    });
}

module.exports <span class="hljs-operator">=</span> sortStringsDown;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/1c33fbc00413d9f165354e84cad46c0c873c57272befd3b8176b7b2aa52ec43d.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function sortStudents(students) {
    return students.sort(function comparison(a, b) {
        if (a.graduated !== b.graduated) {
            if (a.graduated) {
                return -1;
            } else {
                return 1;
            }
        }
        if (a.grade &gt; b.grade) {
            return -1;
        }
        if (a.grade &lt; b.grade) {
            return 1;
        }
        return 0;
    });
}

module.exports = sortStudents;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">sortStudents</span>(<span class="hljs-params">students</span>) </span>{
    <span class="hljs-keyword">return</span> students.sort(<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">comparison</span>(<span class="hljs-params">a, b</span>) </span>{
        <span class="hljs-keyword">if</span> (a.graduated <span class="hljs-operator">!</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> b.graduated) {
            <span class="hljs-keyword">if</span> (a.graduated) {
                <span class="hljs-keyword">return</span> <span class="hljs-number">-1</span>;
            } <span class="hljs-keyword">else</span> {
                <span class="hljs-keyword">return</span> <span class="hljs-number">1</span>;
            }
        }
        <span class="hljs-keyword">if</span> (a.grade <span class="hljs-operator">></span> b.grade) {
            <span class="hljs-keyword">return</span> <span class="hljs-number">-1</span>;
        }
        <span class="hljs-keyword">if</span> (a.grade <span class="hljs-operator">&#x3C;</span> b.grade) {
            <span class="hljs-keyword">return</span> <span class="hljs-number">1</span>;
        }
        <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
    });
}

module.exports <span class="hljs-operator">=</span> sortStudents;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a6d77fb00572fcc040eb900b410c5986edd48c186d8f327155047d8dadb88305.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const MONTHS = [
    &apos;JAN&apos;, &apos;FEB&apos;, &apos;MAR&apos;, &apos;APR&apos;, &apos;MAY&apos;, &apos;JUN&apos;,
    &apos;JUL&apos;, &apos;AUG&apos;, &apos;SEP&apos;, &apos;OCT&apos;, &apos;NOV&apos;, &apos;DEC&apos;
];

function sortByMonth(events) {
    return events.sort(function comparison(a, b) {
        let ai = MONTHS.indexOf(a.month);
        let bi = MONTHS.indexOf(b.month);
        if (ai &lt; bi) {
            return -1;
        }
        if (ai &gt; bi) {
            return 1;
        }
        return 0;
    });
}

module.exports = sortByMonth;
"><code>const MONTHS <span class="hljs-operator">=</span> [
    <span class="hljs-string">'JAN'</span>, <span class="hljs-string">'FEB'</span>, <span class="hljs-string">'MAR'</span>, <span class="hljs-string">'APR'</span>, <span class="hljs-string">'MAY'</span>, <span class="hljs-string">'JUN'</span>,
    <span class="hljs-string">'JUL'</span>, <span class="hljs-string">'AUG'</span>, <span class="hljs-string">'SEP'</span>, <span class="hljs-string">'OCT'</span>, <span class="hljs-string">'NOV'</span>, <span class="hljs-string">'DEC'</span>
];

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">sortByMonth</span>(<span class="hljs-params">events</span>) </span>{
    <span class="hljs-keyword">return</span> events.sort(<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">comparison</span>(<span class="hljs-params">a, b</span>) </span>{
        let ai <span class="hljs-operator">=</span> MONTHS.indexOf(a.month);
        let bi <span class="hljs-operator">=</span> MONTHS.indexOf(b.month);
        <span class="hljs-keyword">if</span> (ai <span class="hljs-operator">&#x3C;</span> bi) {
            <span class="hljs-keyword">return</span> <span class="hljs-number">-1</span>;
        }
        <span class="hljs-keyword">if</span> (ai <span class="hljs-operator">></span> bi) {
            <span class="hljs-keyword">return</span> <span class="hljs-number">1</span>;
        }
        <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
    });
}

module.exports <span class="hljs-operator">=</span> sortByMonth;
</code></pre><h2 id="h-2-djap-an-array-map" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">2. đáp án ARRAY MAP</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/29aec5f1f47fbf74d914c76029720eae0db56e7ed7c6968a8060a35456c1be97.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/52571e8793bbe99515f0ba95f26f771047422691b2aefa45de20c8d6b5a87c0b.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function plusOne(arr) {
    return arr.map(function (x) {
        return (x + 1);
    });
}

module.exports = plusOne;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">plusOne</span>(<span class="hljs-params">arr</span>) </span>{
    <span class="hljs-keyword">return</span> arr.map(<span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params">x</span>) </span>{
        <span class="hljs-keyword">return</span> (x <span class="hljs-operator">+</span> <span class="hljs-number">1</span>);
    });
}

module.exports <span class="hljs-operator">=</span> plusOne;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/211989cd2561fa522250429faf42db0e580c5ef173e98454db5ef07bb18d3c01.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function squareRoot(arr) {
    return arr.map(function (x) {
        return Math.sqrt(x);
    });
}

module.exports = squareRoot;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">squareRoot</span>(<span class="hljs-params">arr</span>) </span>{
    <span class="hljs-keyword">return</span> arr.map(<span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params">x</span>) </span>{
        <span class="hljs-keyword">return</span> Math.sqrt(x);
    });
}

module.exports <span class="hljs-operator">=</span> squareRoot;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/cce5b4ca3f1dfcdcf7cd948d8d3d96f91688aa105155e7e70cb46dc66a872ddc.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="/**
 * Given a number n, square it.
 *
 * @param {number} n 
 * @return {number} n squared
 */
function squared(n) {
    return (n * n);
}

module.exports = squared;
"><code><span class="hljs-comment">/**
 * Given a number n, square it.
 *
 * @param {number} n 
 * @return {number} n squared
 */</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">squared</span>(<span class="hljs-params">n</span>) </span>{
    <span class="hljs-keyword">return</span> (n <span class="hljs-operator">*</span> n);
}

module.exports <span class="hljs-operator">=</span> squared;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/32d9bf8050cee2d2fb30e2d5800824c4d3f8073cfb42f9b6eea2fa1f2e0f8aaf.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const squared = require(&apos;./squared&apos;);

function squaredMap(arr) {
    return arr.map(squared);
}

module.exports = squaredMap;
"><code>const squared <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'./squared'</span>);

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">squaredMap</span>(<span class="hljs-params">arr</span>) </span>{
    <span class="hljs-keyword">return</span> arr.map(squared);
}

module.exports <span class="hljs-operator">=</span> squaredMap;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b36383a7b9d25ca2653ed4b99c4ad9b1a0b8578f45af3336b47ea061db5b7791.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function addScore(players) {
    let i = 0;

    return players.map(function (player) {
        i++;
        let one = player;
        if (i &lt; 4) {
            one.score = one.score + 10;
        }

        return one;
    });
}

module.exports = addScore;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">addScore</span>(<span class="hljs-params">players</span>) </span>{
    let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>;

    <span class="hljs-keyword">return</span> players.map(<span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params">player</span>) </span>{
        i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>;
        let one <span class="hljs-operator">=</span> player;
        <span class="hljs-keyword">if</span> (i <span class="hljs-operator">&#x3C;</span> <span class="hljs-number">4</span>) {
            one.score <span class="hljs-operator">=</span> one.score <span class="hljs-operator">+</span> <span class="hljs-number">10</span>;
        }

        <span class="hljs-keyword">return</span> one;
    });
}

module.exports <span class="hljs-operator">=</span> addScore;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/299ebdabc0ca4e70eb45a057982c4207f4aa179efe0a1779c5e520a476b74146.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function addScore(players) {
    let i = 0;

    return players.map(function (player) {
        i++;
        let one = player;
        if (i &lt; 4) {
            one.score = one.score + 10;
        }

        return one;
    });
}

module.exports = addScore;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">addScore</span>(<span class="hljs-params">players</span>) </span>{
    let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>;

    <span class="hljs-keyword">return</span> players.map(<span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params">player</span>) </span>{
        i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>;
        let one <span class="hljs-operator">=</span> player;
        <span class="hljs-keyword">if</span> (i <span class="hljs-operator">&#x3C;</span> <span class="hljs-number">4</span>) {
            one.score <span class="hljs-operator">=</span> one.score <span class="hljs-operator">+</span> <span class="hljs-number">10</span>;
        }

        <span class="hljs-keyword">return</span> one;
    });
}

module.exports <span class="hljs-operator">=</span> addScore;
</code></pre><h2 id="h-3-djap-an-array-filter" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">3. đáp án ARRAY FILTER</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/66cb614292dc701c584867cc8041aadafa58d038cd6d9ca89ccb9bfb74e2f783.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/885c3b4d3072302a9fc91534a09be26d453313f92222896fdfbaed8971235de6.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function lessThanFive(array) {
    return array.filter(function (e) {
        return (e &lt; 5);
    });
}

module.exports = lessThanFive;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">lessThanFive</span>(<span class="hljs-params">array</span>) </span>{
    <span class="hljs-keyword">return</span> array.filter(<span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params">e</span>) </span>{
        <span class="hljs-keyword">return</span> (e <span class="hljs-operator">&#x3C;</span> <span class="hljs-number">5</span>);
    });
}

module.exports <span class="hljs-operator">=</span> lessThanFive;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/8bafefc21c3a1dc0ce80907377a0c46bb3041b0b8391748251394cbeaa94a83c.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function onlyTrue(array) {
    return array.filter(function (e) {
        return e;
    });
}

module.exports = onlyTrue;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">onlyTrue</span>(<span class="hljs-params">array</span>) </span>{
    <span class="hljs-keyword">return</span> array.filter(<span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params">e</span>) </span>{
        <span class="hljs-keyword">return</span> e;
    });
}

module.exports <span class="hljs-operator">=</span> onlyTrue;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/aad0a2b52ac0adba420ce8da6c748965b9f077aaae9ba71e5e605da5506abe59.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function shortStrings(array) {
    return array.filter(function (e) {
        return (e.length &lt;= 3);
    });
}

module.exports = shortStrings;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">shortStrings</span>(<span class="hljs-params">array</span>) </span>{
    <span class="hljs-keyword">return</span> array.filter(<span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params">e</span>) </span>{
        <span class="hljs-keyword">return</span> (e.<span class="hljs-built_in">length</span> <span class="hljs-operator">&#x3C;</span><span class="hljs-operator">=</span> <span class="hljs-number">3</span>);
    });
}

module.exports <span class="hljs-operator">=</span> shortStrings;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/f001cabbd963be58309abda9c3a065b713b07c7fc7a9efd8f7784e7e79c65fa5.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function topStudents(array) {
    return array.filter(function (e) {
        return (e.grade &gt;= 90);
    });
}

module.exports = topStudents;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">topStudents</span>(<span class="hljs-params">array</span>) </span>{
    <span class="hljs-keyword">return</span> array.filter(<span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params">e</span>) </span>{
        <span class="hljs-keyword">return</span> (e.grade <span class="hljs-operator">></span><span class="hljs-operator">=</span> <span class="hljs-number">90</span>);
    });
}

module.exports <span class="hljs-operator">=</span> topStudents;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/9dac09f5faffe7da5d847b00c615025dcb16a6272202485c97dece752c4d4666.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function firstThree(array) {
    let i = 0;
    return array.filter(function (e) {
        i++;
        if (i &lt; 4) {
            return true;
        } else {
            return false;
        }
    });
}

module.exports = firstThree;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">firstThree</span>(<span class="hljs-params">array</span>) </span>{
    let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>;
    <span class="hljs-keyword">return</span> array.filter(<span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params">e</span>) </span>{
        i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>;
        <span class="hljs-keyword">if</span> (i <span class="hljs-operator">&#x3C;</span> <span class="hljs-number">4</span>) {
            <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>;
        } <span class="hljs-keyword">else</span> {
            <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
        }
    });
}

module.exports <span class="hljs-operator">=</span> firstThree;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/cca761e41103e12af957207cd8563075cb27012f4ab5d5d93bdf39c5412a9193.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function unique(array) {
    let a = [];
    return array.filter(function (e) {
        if (a.indexOf(e) === -1) {
            a.push(e);
            return true;
        }
        return false;
    });
}

module.exports = unique;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">unique</span>(<span class="hljs-params">array</span>) </span>{
    let a <span class="hljs-operator">=</span> [];
    <span class="hljs-keyword">return</span> array.filter(<span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params">e</span>) </span>{
        <span class="hljs-keyword">if</span> (a.indexOf(e) <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-number">-1</span>) {
            a.<span class="hljs-built_in">push</span>(e);
            <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>;
        }
        <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
    });
}

module.exports <span class="hljs-operator">=</span> unique;
</code></pre><h2 id="h-4-djap-an-array-reduce" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">4. đáp án ARRAY REDUCE</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c8949bbff7683616fde259e753a7090a08f3a8c9d0a0b43b810ba47c87e3d2ca.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/64e8961ee07996b2fea78903490dd8f3550cf4966541769827b4f89a81e34df4.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="// numbers is an array full of numbers
// let&apos;s add all the numbers and return the sum
// i.e. [1,2,3,4,5] =&gt; 15
function sum(numbers) {
    return numbers.reduce((accumulator, currentValue) =&gt; {
        accumulator = accumulator + currentValue;
        return accumulator;
    });
}

module.exports = sum;
"><code><span class="hljs-comment">// numbers is an array full of numbers</span>
<span class="hljs-comment">// let's add all the numbers and return the sum</span>
<span class="hljs-comment">// i.e. [1,2,3,4,5] => 15</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">sum</span>(<span class="hljs-params">numbers</span>) </span>{
    <span class="hljs-keyword">return</span> numbers.reduce((accumulator, currentValue) <span class="hljs-operator">=</span><span class="hljs-operator">></span> {
        accumulator <span class="hljs-operator">=</span> accumulator <span class="hljs-operator">+</span> currentValue;
        <span class="hljs-keyword">return</span> accumulator;
    });
}

module.exports <span class="hljs-operator">=</span> sum;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d6707230b257a2a2e3ef6c94e32dcc83bfb16358f0c6f814aec26299530bc036.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="// numbers is an array full of numbers
// let&apos;s find the largest and return it
// i.e. [2,3,5,1,4] =&gt; 5
function largest(numbers) {
    return numbers.reduce((accumulator, currentValue) =&gt; {
        if (accumulator &gt; currentValue) {
            return accumulator;
        } else {
            return currentValue;
        }
    }, 1);
}

module.exports = largest;
"><code><span class="hljs-comment">// numbers is an array full of numbers</span>
<span class="hljs-comment">// let's find the largest and return it</span>
<span class="hljs-comment">// i.e. [2,3,5,1,4] => 5</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">largest</span>(<span class="hljs-params">numbers</span>) </span>{
    <span class="hljs-keyword">return</span> numbers.reduce((accumulator, currentValue) <span class="hljs-operator">=</span><span class="hljs-operator">></span> {
        <span class="hljs-keyword">if</span> (accumulator <span class="hljs-operator">></span> currentValue) {
            <span class="hljs-keyword">return</span> accumulator;
        } <span class="hljs-keyword">else</span> {
            <span class="hljs-keyword">return</span> currentValue;
        }
    }, <span class="hljs-number">1</span>);
}

module.exports <span class="hljs-operator">=</span> largest;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d3b87648f8cddec53a1748d529539ef42151b1ffd42361411fb9f4642fd390fa.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="// numbers is an array full of numbers
// let&apos;s find the largest and return it
// i.e. [2,3,5,1,4] =&gt; 5
function largest(numbers) {
    return numbers.reduce((accumulator, currentValue) =&gt; {
        if (accumulator &gt; currentValue) {
            return accumulator;
        } else {
            return currentValue;
        }
    }, 1);
}

module.exports = largest;
"><code><span class="hljs-comment">// numbers is an array full of numbers</span>
<span class="hljs-comment">// let's find the largest and return it</span>
<span class="hljs-comment">// i.e. [2,3,5,1,4] => 5</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">largest</span>(<span class="hljs-params">numbers</span>) </span>{
    <span class="hljs-keyword">return</span> numbers.reduce((accumulator, currentValue) <span class="hljs-operator">=</span><span class="hljs-operator">></span> {
        <span class="hljs-keyword">if</span> (accumulator <span class="hljs-operator">></span> currentValue) {
            <span class="hljs-keyword">return</span> accumulator;
        } <span class="hljs-keyword">else</span> {
            <span class="hljs-keyword">return</span> currentValue;
        }
    }, <span class="hljs-number">1</span>);
}

module.exports <span class="hljs-operator">=</span> largest;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/eb306fa7d91f2910831cf8b4c28a11cc6263b86ac13a9ce95562ef76428f21e5.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="// numbers is an array full of numbers
// let&apos;s remove any duplicates and return it
// i.e. [2,2,3,5,1,3,4] =&gt; [2,3,5,1,4]
function removeDuplicates(numbers) {
    return numbers.reduce((accumulator, currentValue) =&gt; {
        if (-1 === accumulator.indexOf(currentValue)) {
            accumulator.push(currentValue);
        }
        return accumulator;
    }, []);
}

module.exports = removeDuplicates;
"><code><span class="hljs-comment">// numbers is an array full of numbers</span>
<span class="hljs-comment">// let's remove any duplicates and return it</span>
<span class="hljs-comment">// i.e. [2,2,3,5,1,3,4] => [2,3,5,1,4]</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">removeDuplicates</span>(<span class="hljs-params">numbers</span>) </span>{
    <span class="hljs-keyword">return</span> numbers.reduce((accumulator, currentValue) <span class="hljs-operator">=</span><span class="hljs-operator">></span> {
        <span class="hljs-keyword">if</span> (<span class="hljs-number">-1</span> <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> accumulator.indexOf(currentValue)) {
            accumulator.<span class="hljs-built_in">push</span>(currentValue);
        }
        <span class="hljs-keyword">return</span> accumulator;
    }, []);
}

module.exports <span class="hljs-operator">=</span> removeDuplicates;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/80bfc4907cd920dc60458be9f6128754622494d7b2fd57c228747b76c62275f8.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="// food is an array full of food objects
// let&apos;s group them by &quot;type&quot; and return them
function group(foods) {
    return foods.reduce((accumulator, currentValue) =&gt; {
        accumulator[currentValue.type] = accumulator[currentValue.type] || [];
        accumulator[currentValue.type].push(currentValue.food);
        return accumulator;
    }, {});
}

module.exports = group;
"><code><span class="hljs-comment">// food is an array full of food objects</span>
<span class="hljs-comment">// let's group them by "type" and return them</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">group</span>(<span class="hljs-params">foods</span>) </span>{
    <span class="hljs-keyword">return</span> foods.reduce((accumulator, currentValue) <span class="hljs-operator">=</span><span class="hljs-operator">></span> {
        accumulator[currentValue.type] <span class="hljs-operator">=</span> accumulator[currentValue.type] <span class="hljs-operator">|</span><span class="hljs-operator">|</span> [];
        accumulator[currentValue.type].<span class="hljs-built_in">push</span>(currentValue.food);
        <span class="hljs-keyword">return</span> accumulator;
    }, {});
}

module.exports <span class="hljs-operator">=</span> group;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c0487f49f434add1b1a0a5fae0a9199c1e92d4e6b3001dbc3bef06a7299f7623.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="// numbers is an array full of integers
// let&apos;s figure if all the numbers are unique
// i.e. [1,2,3,1] =&gt; false
// [1,2,3] =&gt; true
function allUnique(numbers) {
    return numbers.reduce((accumulator, currentValue, index) =&gt; {
        if (!accumulator) {
            return false;
        }
        c = numbers.indexOf(currentValue);
        return (c === index);
    }, true);
}

module.exports = allUnique;
"><code><span class="hljs-comment">// numbers is an array full of integers</span>
<span class="hljs-comment">// let's figure if all the numbers are unique</span>
<span class="hljs-comment">// i.e. [1,2,3,1] => false</span>
<span class="hljs-comment">// [1,2,3] => true</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">allUnique</span>(<span class="hljs-params">numbers</span>) </span>{
    <span class="hljs-keyword">return</span> numbers.reduce((accumulator, currentValue, index) <span class="hljs-operator">=</span><span class="hljs-operator">></span> {
        <span class="hljs-keyword">if</span> (<span class="hljs-operator">!</span>accumulator) {
            <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
        }
        c <span class="hljs-operator">=</span> numbers.indexOf(currentValue);
        <span class="hljs-keyword">return</span> (c <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> index);
    }, <span class="hljs-literal">true</span>);
}

module.exports <span class="hljs-operator">=</span> allUnique;
</code></pre><h2 id="h-5-djap-an-recursion" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">5. đáp án RECURSION</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/78b2d2730ce1c2f2cc275b521b621c6f4beda5a9f71463d7b2ec7b2024d34ea0.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c32060f2d3df37aac567c4897131626ad47649e2671b8ba78e60bd385c69ae89.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function factorial(n) {
    if (n === 1) {
        return 1;
    }

    return n * factorial(n - 1);
}

module.exports = factorial;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">factorial</span>(<span class="hljs-params">n</span>) </span>{
    <span class="hljs-keyword">if</span> (n <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-number">1</span>) {
        <span class="hljs-keyword">return</span> <span class="hljs-number">1</span>;
    }

    <span class="hljs-keyword">return</span> n <span class="hljs-operator">*</span> factorial(n <span class="hljs-operator">-</span> <span class="hljs-number">1</span>);
}

module.exports <span class="hljs-operator">=</span> factorial;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b6f661f93ca302914028e3af128c301790a5656d3cad3e99a1542dab138bd851.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function factorial(n) {
    if (n === 1) {
        return 1;
    }

    return n * factorial(n - 1);
}

module.exports = factorial;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">factorial</span>(<span class="hljs-params">n</span>) </span>{
    <span class="hljs-keyword">if</span> (n <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-number">1</span>) {
        <span class="hljs-keyword">return</span> <span class="hljs-number">1</span>;
    }

    <span class="hljs-keyword">return</span> n <span class="hljs-operator">*</span> factorial(n <span class="hljs-operator">-</span> <span class="hljs-number">1</span>);
}

module.exports <span class="hljs-operator">=</span> factorial;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/1348211fab0322bb6a8e376897b376e102cac5c98d628874f22165dcab304aea.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function factorial(n) {
    if (n === 1) {
        return 1;
    }

    return n * factorial(n - 1);
}

module.exports = factorial;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">factorial</span>(<span class="hljs-params">n</span>) </span>{
    <span class="hljs-keyword">if</span> (n <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-number">1</span>) {
        <span class="hljs-keyword">return</span> <span class="hljs-number">1</span>;
    }

    <span class="hljs-keyword">return</span> n <span class="hljs-operator">*</span> factorial(n <span class="hljs-operator">-</span> <span class="hljs-number">1</span>);
}

module.exports <span class="hljs-operator">=</span> factorial;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/2a91d720e56eebdae3a365d1dcf6e2eec1559cda57161d5067329402fc92d10c.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function walk(node) {
    if (node.next) {
        return walk(node.next);
    } else {
        return node;
    }
}

module.exports = walk;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">walk</span>(<span class="hljs-params">node</span>) </span>{
    <span class="hljs-keyword">if</span> (node.next) {
        <span class="hljs-keyword">return</span> walk(node.next);
    } <span class="hljs-keyword">else</span> {
        <span class="hljs-keyword">return</span> node;
    }
}

module.exports <span class="hljs-operator">=</span> walk;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/6f22ad41724ec092bd87a5438703b662b0142aac36692fb1543f8466d6873266.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function walk(node) {
    if (node.next) {
        return walk(node.next);
    } else {
        return node;
    }
}

module.exports = walk;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">walk</span>(<span class="hljs-params">node</span>) </span>{
    <span class="hljs-keyword">if</span> (node.next) {
        <span class="hljs-keyword">return</span> walk(node.next);
    } <span class="hljs-keyword">else</span> {
        <span class="hljs-keyword">return</span> node;
    }
}

module.exports <span class="hljs-operator">=</span> walk;
</code></pre><h2 id="h-6-djap-an-stacks-undo-and-redo-operations" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">6. đáp án STACKS: UNDO &amp; REDO OPERATIONS</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/9e0f63e71363fcc7608531218505476002e16c552cbde2cb1883539d4c943f4e.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/cf50cddbcb229849048219a62a8ea6e973b3b84f1327baada84bb5a5d66436b0.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const { MAX_STACK_SIZE } = require(&apos;./config&apos;);

class Stack {
    constructor() {
        this.items = [];
    }
    push(item) {
        if (this.items.length &gt;= MAX_STACK_SIZE) {
            throw new Error(&quot;size Overflow error&quot;);
        }
        this.items.push(item);
    }
    pop() {
        if (this.items.length === 0) {
            throw new Error(&quot;0 item error&quot;);
        }
        return this.items.pop();
    }
    isEmpty() {
        return (this.items.length === 0);
    }
    peek() {
        if (this.isEmpty()) {
            return;
        }
        return this.items[this.items.length - 1];
    }
}

module.exports = Stack;
"><code>const { MAX_STACK_SIZE } <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'./config'</span>);

class Stack {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params"></span>) </span>{
        <span class="hljs-built_in">this</span>.items <span class="hljs-operator">=</span> [];
    }
    push(item) {
        <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.items.<span class="hljs-built_in">length</span> <span class="hljs-operator">></span><span class="hljs-operator">=</span> MAX_STACK_SIZE) {
            <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> <span class="hljs-built_in">Error</span>(<span class="hljs-string">"size Overflow error"</span>);
        }
        <span class="hljs-built_in">this</span>.items.<span class="hljs-built_in">push</span>(item);
    }
    pop() {
        <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.items.<span class="hljs-built_in">length</span> <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-number">0</span>) {
            <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> <span class="hljs-built_in">Error</span>(<span class="hljs-string">"0 item error"</span>);
        }
        <span class="hljs-keyword">return</span> <span class="hljs-built_in">this</span>.items.<span class="hljs-built_in">pop</span>();
    }
    isEmpty() {
        <span class="hljs-keyword">return</span> (<span class="hljs-built_in">this</span>.items.<span class="hljs-built_in">length</span> <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-number">0</span>);
    }
    peek() {
        <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.isEmpty()) {
            <span class="hljs-keyword">return</span>;
        }
        <span class="hljs-keyword">return</span> <span class="hljs-built_in">this</span>.items[<span class="hljs-built_in">this</span>.items.<span class="hljs-built_in">length</span> <span class="hljs-operator">-</span> <span class="hljs-number">1</span>];
    }
}

module.exports <span class="hljs-operator">=</span> Stack;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/7966c5c106c193f0504a68c2d15172525e1f6818f26481f2490b71c3cad6871b.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const { MAX_STACK_SIZE } = require(&apos;./config&apos;);

class Stack {
    constructor() {
        this.items = [];
    }
    push(item) {
        if (this.items.length &gt;= MAX_STACK_SIZE) {
            throw new Error(&quot;size Overflow error&quot;);
        }
        this.items.push(item);
    }
    pop() {
        if (this.items.length === 0) {
            throw new Error(&quot;0 item error&quot;);
        }
        return this.items.pop();
    }
    isEmpty() {
        return (this.items.length === 0);
    }
    peek() {
        if (this.isEmpty()) {
            return;
        }
        return this.items[this.items.length - 1];
    }
}

module.exports = Stack;
"><code>const { MAX_STACK_SIZE } <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'./config'</span>);

class Stack {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params"></span>) </span>{
        <span class="hljs-built_in">this</span>.items <span class="hljs-operator">=</span> [];
    }
    push(item) {
        <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.items.<span class="hljs-built_in">length</span> <span class="hljs-operator">></span><span class="hljs-operator">=</span> MAX_STACK_SIZE) {
            <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> <span class="hljs-built_in">Error</span>(<span class="hljs-string">"size Overflow error"</span>);
        }
        <span class="hljs-built_in">this</span>.items.<span class="hljs-built_in">push</span>(item);
    }
    pop() {
        <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.items.<span class="hljs-built_in">length</span> <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-number">0</span>) {
            <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> <span class="hljs-built_in">Error</span>(<span class="hljs-string">"0 item error"</span>);
        }
        <span class="hljs-keyword">return</span> <span class="hljs-built_in">this</span>.items.<span class="hljs-built_in">pop</span>();
    }
    isEmpty() {
        <span class="hljs-keyword">return</span> (<span class="hljs-built_in">this</span>.items.<span class="hljs-built_in">length</span> <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-number">0</span>);
    }
    peek() {
        <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.isEmpty()) {
            <span class="hljs-keyword">return</span>;
        }
        <span class="hljs-keyword">return</span> <span class="hljs-built_in">this</span>.items[<span class="hljs-built_in">this</span>.items.<span class="hljs-built_in">length</span> <span class="hljs-operator">-</span> <span class="hljs-number">1</span>];
    }
}

module.exports <span class="hljs-operator">=</span> Stack;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b9f25764363982e9ac864f2d8a912cc12b173ea7d3be47ff016baff2072dbc72.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const { MAX_STACK_SIZE } = require(&apos;./config&apos;);

class Stack {
    constructor() {
        this.items = [];
    }
    push(item) {
        if (this.items.length &gt;= MAX_STACK_SIZE) {
            throw new Error(&quot;size Overflow error&quot;);
        }
        this.items.push(item);
    }
    pop() {
        if (this.items.length === 0) {
            throw new Error(&quot;0 item error&quot;);
        }
        return this.items.pop();
    }
    isEmpty() {
        return (this.items.length === 0);
    }
    peek() {
        if (this.isEmpty()) {
            return;
        }
        return this.items[this.items.length - 1];
    }
}

module.exports = Stack;
"><code>const { MAX_STACK_SIZE } <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'./config'</span>);

class Stack {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params"></span>) </span>{
        <span class="hljs-built_in">this</span>.items <span class="hljs-operator">=</span> [];
    }
    push(item) {
        <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.items.<span class="hljs-built_in">length</span> <span class="hljs-operator">></span><span class="hljs-operator">=</span> MAX_STACK_SIZE) {
            <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> <span class="hljs-built_in">Error</span>(<span class="hljs-string">"size Overflow error"</span>);
        }
        <span class="hljs-built_in">this</span>.items.<span class="hljs-built_in">push</span>(item);
    }
    pop() {
        <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.items.<span class="hljs-built_in">length</span> <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-number">0</span>) {
            <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> <span class="hljs-built_in">Error</span>(<span class="hljs-string">"0 item error"</span>);
        }
        <span class="hljs-keyword">return</span> <span class="hljs-built_in">this</span>.items.<span class="hljs-built_in">pop</span>();
    }
    isEmpty() {
        <span class="hljs-keyword">return</span> (<span class="hljs-built_in">this</span>.items.<span class="hljs-built_in">length</span> <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-number">0</span>);
    }
    peek() {
        <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.isEmpty()) {
            <span class="hljs-keyword">return</span>;
        }
        <span class="hljs-keyword">return</span> <span class="hljs-built_in">this</span>.items[<span class="hljs-built_in">this</span>.items.<span class="hljs-built_in">length</span> <span class="hljs-operator">-</span> <span class="hljs-number">1</span>];
    }
}

module.exports <span class="hljs-operator">=</span> Stack;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/5268e5870e3368728996cf478fdd90a60cdfe52bce21a6c122ebfc755add69f9.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const Stack = require(&apos;./Stack&apos;);

class OperationManager {
    constructor() {
        this.operations = new Stack();
        this.undos = new Stack();
    }

    addOperation(operation) {
        this.operations.push(operation);
    }

    undo() {
        this.undos.push(this.operations.pop());
    }

    redo() {
        this.operations.push(this.undos.pop());
    }

    redoAll() {
        while (!this.undos.isEmpty()) {
            this.operations.push(this.undos.pop());
        }
    }
}

module.exports = OperationManager;
"><code>const Stack <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'./Stack'</span>);

class OperationManager {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params"></span>) </span>{
        <span class="hljs-built_in">this</span>.operations <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> Stack();
        <span class="hljs-built_in">this</span>.undos <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> Stack();
    }

    addOperation(operation) {
        <span class="hljs-built_in">this</span>.operations.<span class="hljs-built_in">push</span>(operation);
    }

    undo() {
        <span class="hljs-built_in">this</span>.undos.<span class="hljs-built_in">push</span>(<span class="hljs-built_in">this</span>.operations.<span class="hljs-built_in">pop</span>());
    }

    redo() {
        <span class="hljs-built_in">this</span>.operations.<span class="hljs-built_in">push</span>(<span class="hljs-built_in">this</span>.undos.<span class="hljs-built_in">pop</span>());
    }

    redoAll() {
        <span class="hljs-keyword">while</span> (<span class="hljs-operator">!</span><span class="hljs-built_in">this</span>.undos.isEmpty()) {
            <span class="hljs-built_in">this</span>.operations.<span class="hljs-built_in">push</span>(<span class="hljs-built_in">this</span>.undos.<span class="hljs-built_in">pop</span>());
        }
    }
}

module.exports <span class="hljs-operator">=</span> OperationManager;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e2cf507f8ff0e2cc35827adea8f91a25f1dbe921f7cd96a2bee380ebda28bf2d.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const Stack = require(&apos;./Stack&apos;);

class OperationManager {
    constructor() {
        this.operations = new Stack();
        this.undos = new Stack();
    }

    addOperation(operation) {
        this.operations.push(operation);
    }

    undo() {
        this.undos.push(this.operations.pop());
    }

    redo() {
        this.operations.push(this.undos.pop());
    }

    redoAll() {
        while (!this.undos.isEmpty()) {
            this.operations.push(this.undos.pop());
        }
    }
}

module.exports = OperationManager;
"><code>const Stack <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'./Stack'</span>);

class OperationManager {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params"></span>) </span>{
        <span class="hljs-built_in">this</span>.operations <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> Stack();
        <span class="hljs-built_in">this</span>.undos <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> Stack();
    }

    addOperation(operation) {
        <span class="hljs-built_in">this</span>.operations.<span class="hljs-built_in">push</span>(operation);
    }

    undo() {
        <span class="hljs-built_in">this</span>.undos.<span class="hljs-built_in">push</span>(<span class="hljs-built_in">this</span>.operations.<span class="hljs-built_in">pop</span>());
    }

    redo() {
        <span class="hljs-built_in">this</span>.operations.<span class="hljs-built_in">push</span>(<span class="hljs-built_in">this</span>.undos.<span class="hljs-built_in">pop</span>());
    }

    redoAll() {
        <span class="hljs-keyword">while</span> (<span class="hljs-operator">!</span><span class="hljs-built_in">this</span>.undos.isEmpty()) {
            <span class="hljs-built_in">this</span>.operations.<span class="hljs-built_in">push</span>(<span class="hljs-built_in">this</span>.undos.<span class="hljs-built_in">pop</span>());
        }
    }
}

module.exports <span class="hljs-operator">=</span> OperationManager;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/2baf5c2a374e1ec7835692d8337128f1c35395d7aa086ea319271133bfb7a4d2.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const Stack = require(&apos;./Stack&apos;);

class OperationManager {
    constructor() {
        this.operations = new Stack();
        this.undos = new Stack();
    }

    addOperation(operation) {
        this.operations.push(operation);
    }

    undo() {
        this.undos.push(this.operations.pop());
    }

    redo() {
        this.operations.push(this.undos.pop());
    }

    redoAll() {
        while (!this.undos.isEmpty()) {
            this.operations.push(this.undos.pop());
        }
    }
}

module.exports = OperationManager;
"><code>const Stack <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'./Stack'</span>);

class OperationManager {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params"></span>) </span>{
        <span class="hljs-built_in">this</span>.operations <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> Stack();
        <span class="hljs-built_in">this</span>.undos <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> Stack();
    }

    addOperation(operation) {
        <span class="hljs-built_in">this</span>.operations.<span class="hljs-built_in">push</span>(operation);
    }

    undo() {
        <span class="hljs-built_in">this</span>.undos.<span class="hljs-built_in">push</span>(<span class="hljs-built_in">this</span>.operations.<span class="hljs-built_in">pop</span>());
    }

    redo() {
        <span class="hljs-built_in">this</span>.operations.<span class="hljs-built_in">push</span>(<span class="hljs-built_in">this</span>.undos.<span class="hljs-built_in">pop</span>());
    }

    redoAll() {
        <span class="hljs-keyword">while</span> (<span class="hljs-operator">!</span><span class="hljs-built_in">this</span>.undos.isEmpty()) {
            <span class="hljs-built_in">this</span>.operations.<span class="hljs-built_in">push</span>(<span class="hljs-built_in">this</span>.undos.<span class="hljs-built_in">pop</span>());
        }
    }
}

module.exports <span class="hljs-operator">=</span> OperationManager;
</code></pre><h2 id="h-7-djap-an-linked-list" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">7. đáp án LINKED LIST</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/9bbd57aa7dfa0d1c8d29620b09542b1611232ef683ecee929e7681766efac6f2.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/3c596fd52de622f2cc75cdad19acac0df58ae7b2c7f5eeb45a504b99172d2f22.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="class Node {
    constructor(data) {
        this.data = data;
        this.next = null;
    }
}

module.exports = Node;
"><code>class Node {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params">data</span>) </span>{
        <span class="hljs-built_in">this</span>.data <span class="hljs-operator">=</span> data;
        <span class="hljs-built_in">this</span>.next <span class="hljs-operator">=</span> null;
    }
}

module.exports <span class="hljs-operator">=</span> Node;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/931719bde68c612a6fc9bbd1f74aee4dd71a4203e97a42d852248a6cdb4e20ec.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="class LinkedList {
    constructor() {
        this.head = null;
    }

    addFirst(node) {
        node.next = this.head;
        this.head = node;
    }

    addLast(node) {
        if (this.head === null) {
            this.head = node;
            return;
        }

        let last = this.head;
        while (last.next !== null) {
            last = last.next;
        }
        last.next = node;
    }

    indexOf(node) {
        let i = 0;
        for (let p = this.head; p !== null; p = p.next) {
            if (node === p) {
                return i;
            }
            i = i + 1;
        }

        return -1;
    }

    removeAt(index) {
        if (this.head === null) {
            return;
        }
        if (index === 0) {
            this.head = this.head.next;
            return;
        }

        let i = 1;
        let p = this.head;
        let n = this.head.next;
        while (n) {
            if (i === index) {
                p.next = n.next;
                return;
            }
            p = p.next;
            n = n.next;
            i++;
        }
    }
}

module.exports = LinkedList;
"><code>class LinkedList {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params"></span>) </span>{
        <span class="hljs-built_in">this</span>.head <span class="hljs-operator">=</span> null;
    }

    addFirst(node) {
        node.next <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.head;
        <span class="hljs-built_in">this</span>.head <span class="hljs-operator">=</span> node;
    }

    addLast(node) {
        <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.head <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> null) {
            <span class="hljs-built_in">this</span>.head <span class="hljs-operator">=</span> node;
            <span class="hljs-keyword">return</span>;
        }

        let last <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.head;
        <span class="hljs-keyword">while</span> (last.next <span class="hljs-operator">!</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> null) {
            last <span class="hljs-operator">=</span> last.next;
        }
        last.next <span class="hljs-operator">=</span> node;
    }

    indexOf(node) {
        let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>;
        <span class="hljs-keyword">for</span> (let p <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.head; p <span class="hljs-operator">!</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> null; p <span class="hljs-operator">=</span> p.next) {
            <span class="hljs-keyword">if</span> (node <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> p) {
                <span class="hljs-keyword">return</span> i;
            }
            i <span class="hljs-operator">=</span> i <span class="hljs-operator">+</span> <span class="hljs-number">1</span>;
        }

        <span class="hljs-keyword">return</span> <span class="hljs-number">-1</span>;
    }

    removeAt(index) {
        <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.head <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> null) {
            <span class="hljs-keyword">return</span>;
        }
        <span class="hljs-keyword">if</span> (index <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-number">0</span>) {
            <span class="hljs-built_in">this</span>.head <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.head.next;
            <span class="hljs-keyword">return</span>;
        }

        let i <span class="hljs-operator">=</span> <span class="hljs-number">1</span>;
        let p <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.head;
        let n <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.head.next;
        <span class="hljs-keyword">while</span> (n) {
            <span class="hljs-keyword">if</span> (i <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> index) {
                p.next <span class="hljs-operator">=</span> n.next;
                <span class="hljs-keyword">return</span>;
            }
            p <span class="hljs-operator">=</span> p.next;
            n <span class="hljs-operator">=</span> n.next;
            i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>;
        }
    }
}

module.exports <span class="hljs-operator">=</span> LinkedList;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/202c59bfa1542e21c426f059bfbf9a11044b74e4091cf2533dd9637cd7b19857.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="class LinkedList {
    constructor() {
        this.head = null;
    }

    addFirst(node) {
        node.next = this.head;
        this.head = node;
    }

    addLast(node) {
        if (this.head === null) {
            this.head = node;
            return;
        }

        let last = this.head;
        while (last.next !== null) {
            last = last.next;
        }
        last.next = node;
    }

    indexOf(node) {
        let i = 0;
        for (let p = this.head; p !== null; p = p.next) {
            if (node === p) {
                return i;
            }
            i = i + 1;
        }

        return -1;
    }

    removeAt(index) {
        if (this.head === null) {
            return;
        }
        if (index === 0) {
            this.head = this.head.next;
            return;
        }

        let i = 1;
        let p = this.head;
        let n = this.head.next;
        while (n) {
            if (i === index) {
                p.next = n.next;
                return;
            }
            p = p.next;
            n = n.next;
            i++;
        }
    }
}

module.exports = LinkedList;
"><code>class LinkedList {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params"></span>) </span>{
        <span class="hljs-built_in">this</span>.head <span class="hljs-operator">=</span> null;
    }

    addFirst(node) {
        node.next <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.head;
        <span class="hljs-built_in">this</span>.head <span class="hljs-operator">=</span> node;
    }

    addLast(node) {
        <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.head <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> null) {
            <span class="hljs-built_in">this</span>.head <span class="hljs-operator">=</span> node;
            <span class="hljs-keyword">return</span>;
        }

        let last <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.head;
        <span class="hljs-keyword">while</span> (last.next <span class="hljs-operator">!</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> null) {
            last <span class="hljs-operator">=</span> last.next;
        }
        last.next <span class="hljs-operator">=</span> node;
    }

    indexOf(node) {
        let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>;
        <span class="hljs-keyword">for</span> (let p <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.head; p <span class="hljs-operator">!</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> null; p <span class="hljs-operator">=</span> p.next) {
            <span class="hljs-keyword">if</span> (node <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> p) {
                <span class="hljs-keyword">return</span> i;
            }
            i <span class="hljs-operator">=</span> i <span class="hljs-operator">+</span> <span class="hljs-number">1</span>;
        }

        <span class="hljs-keyword">return</span> <span class="hljs-number">-1</span>;
    }

    removeAt(index) {
        <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.head <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> null) {
            <span class="hljs-keyword">return</span>;
        }
        <span class="hljs-keyword">if</span> (index <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-number">0</span>) {
            <span class="hljs-built_in">this</span>.head <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.head.next;
            <span class="hljs-keyword">return</span>;
        }

        let i <span class="hljs-operator">=</span> <span class="hljs-number">1</span>;
        let p <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.head;
        let n <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.head.next;
        <span class="hljs-keyword">while</span> (n) {
            <span class="hljs-keyword">if</span> (i <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> index) {
                p.next <span class="hljs-operator">=</span> n.next;
                <span class="hljs-keyword">return</span>;
            }
            p <span class="hljs-operator">=</span> p.next;
            n <span class="hljs-operator">=</span> n.next;
            i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>;
        }
    }
}

module.exports <span class="hljs-operator">=</span> LinkedList;
</code></pre><pre data-type="codeBlock" text="class LinkedList {
    constructor() {
        this.head = null;
    }

    addFirst(node) {
        node.next = this.head;
        this.head = node;
    }

    addLast(node) {
        if (this.head === null) {
            this.head = node;
            return;
        }

        let last = this.head;
        while (last.next !== null) {
            last = last.next;
        }
        last.next = node;
    }

    indexOf(node) {
        let i = 0;
        for (let p = this.head; p !== null; p = p.next) {
            if (node === p) {
                return i;
            }
            i = i + 1;
        }

        return -1;
    }

    removeAt(index) {
        if (this.head === null) {
            return;
        }
        if (index === 0) {
            this.head = this.head.next;
            return;
        }

        let i = 1;
        let p = this.head;
        let n = this.head.next;
        while (n) {
            if (i === index) {
                p.next = n.next;
                return;
            }
            p = p.next;
            n = n.next;
            i++;
        }
    }
}

module.exports = LinkedList;
"><code>class LinkedList {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params"></span>) </span>{
        <span class="hljs-built_in">this</span>.head <span class="hljs-operator">=</span> null;
    }

    addFirst(node) {
        node.next <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.head;
        <span class="hljs-built_in">this</span>.head <span class="hljs-operator">=</span> node;
    }

    addLast(node) {
        <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.head <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> null) {
            <span class="hljs-built_in">this</span>.head <span class="hljs-operator">=</span> node;
            <span class="hljs-keyword">return</span>;
        }

        let last <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.head;
        <span class="hljs-keyword">while</span> (last.next <span class="hljs-operator">!</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> null) {
            last <span class="hljs-operator">=</span> last.next;
        }
        last.next <span class="hljs-operator">=</span> node;
    }

    indexOf(node) {
        let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>;
        <span class="hljs-keyword">for</span> (let p <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.head; p <span class="hljs-operator">!</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> null; p <span class="hljs-operator">=</span> p.next) {
            <span class="hljs-keyword">if</span> (node <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> p) {
                <span class="hljs-keyword">return</span> i;
            }
            i <span class="hljs-operator">=</span> i <span class="hljs-operator">+</span> <span class="hljs-number">1</span>;
        }

        <span class="hljs-keyword">return</span> <span class="hljs-number">-1</span>;
    }

    removeAt(index) {
        <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.head <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> null) {
            <span class="hljs-keyword">return</span>;
        }
        <span class="hljs-keyword">if</span> (index <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-number">0</span>) {
            <span class="hljs-built_in">this</span>.head <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.head.next;
            <span class="hljs-keyword">return</span>;
        }

        let i <span class="hljs-operator">=</span> <span class="hljs-number">1</span>;
        let p <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.head;
        let n <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.head.next;
        <span class="hljs-keyword">while</span> (n) {
            <span class="hljs-keyword">if</span> (i <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> index) {
                p.next <span class="hljs-operator">=</span> n.next;
                <span class="hljs-keyword">return</span>;
            }
            p <span class="hljs-operator">=</span> p.next;
            n <span class="hljs-operator">=</span> n.next;
            i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>;
        }
    }
}

module.exports <span class="hljs-operator">=</span> LinkedList;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/8c5c1b3a8ca12643c69f962119e7ced6a5b71ca0d607ec47a5822a2dfb99c098.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="class LinkedList {
    constructor() {
        this.head = null;
    }

    addFirst(node) {
        node.next = this.head;
        this.head = node;
    }

    addLast(node) {
        if (this.head === null) {
            this.head = node;
            return;
        }

        let last = this.head;
        while (last.next !== null) {
            last = last.next;
        }
        last.next = node;
    }

    indexOf(node) {
        let i = 0;
        for (let p = this.head; p !== null; p = p.next) {
            if (node === p) {
                return i;
            }
            i = i + 1;
        }

        return -1;
    }

    removeAt(index) {
        if (this.head === null) {
            return;
        }
        if (index === 0) {
            this.head = this.head.next;
            return;
        }

        let i = 1;
        let p = this.head;
        let n = this.head.next;
        while (n) {
            if (i === index) {
                p.next = n.next;
                return;
            }
            p = p.next;
            n = n.next;
            i++;
        }
    }
}

module.exports = LinkedList;
"><code>class LinkedList {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params"></span>) </span>{
        <span class="hljs-built_in">this</span>.head <span class="hljs-operator">=</span> null;
    }

    addFirst(node) {
        node.next <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.head;
        <span class="hljs-built_in">this</span>.head <span class="hljs-operator">=</span> node;
    }

    addLast(node) {
        <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.head <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> null) {
            <span class="hljs-built_in">this</span>.head <span class="hljs-operator">=</span> node;
            <span class="hljs-keyword">return</span>;
        }

        let last <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.head;
        <span class="hljs-keyword">while</span> (last.next <span class="hljs-operator">!</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> null) {
            last <span class="hljs-operator">=</span> last.next;
        }
        last.next <span class="hljs-operator">=</span> node;
    }

    indexOf(node) {
        let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>;
        <span class="hljs-keyword">for</span> (let p <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.head; p <span class="hljs-operator">!</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> null; p <span class="hljs-operator">=</span> p.next) {
            <span class="hljs-keyword">if</span> (node <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> p) {
                <span class="hljs-keyword">return</span> i;
            }
            i <span class="hljs-operator">=</span> i <span class="hljs-operator">+</span> <span class="hljs-number">1</span>;
        }

        <span class="hljs-keyword">return</span> <span class="hljs-number">-1</span>;
    }

    removeAt(index) {
        <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.head <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> null) {
            <span class="hljs-keyword">return</span>;
        }
        <span class="hljs-keyword">if</span> (index <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-number">0</span>) {
            <span class="hljs-built_in">this</span>.head <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.head.next;
            <span class="hljs-keyword">return</span>;
        }

        let i <span class="hljs-operator">=</span> <span class="hljs-number">1</span>;
        let p <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.head;
        let n <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.head.next;
        <span class="hljs-keyword">while</span> (n) {
            <span class="hljs-keyword">if</span> (i <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> index) {
                p.next <span class="hljs-operator">=</span> n.next;
                <span class="hljs-keyword">return</span>;
            }
            p <span class="hljs-operator">=</span> p.next;
            n <span class="hljs-operator">=</span> n.next;
            i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>;
        }
    }
}

module.exports <span class="hljs-operator">=</span> LinkedList;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/af45134f0b9fff0de841e5bd4be37f4620e7a4105ae1f08126c214ea09e11743.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="class LinkedList {
    constructor() {
        this.head = null;
    }

    addFirst(node) {
        node.next = this.head;
        this.head = node;
    }

    addLast(node) {
        if (this.head === null) {
            this.head = node;
            return;
        }

        let last = this.head;
        while (last.next !== null) {
            last = last.next;
        }
        last.next = node;
    }

    indexOf(node) {
        let i = 0;
        for (let p = this.head; p !== null; p = p.next) {
            if (node === p) {
                return i;
            }
            i = i + 1;
        }

        return -1;
    }

    removeAt(index) {
        if (this.head === null) {
            return;
        }
        if (index === 0) {
            this.head = this.head.next;
            return;
        }

        let i = 1;
        let p = this.head;
        let n = this.head.next;
        while (n) {
            if (i === index) {
                p.next = n.next;
                return;
            }
            p = p.next;
            n = n.next;
            i++;
        }
    }
}

module.exports = LinkedList;
"><code>class LinkedList {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params"></span>) </span>{
        <span class="hljs-built_in">this</span>.head <span class="hljs-operator">=</span> null;
    }

    addFirst(node) {
        node.next <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.head;
        <span class="hljs-built_in">this</span>.head <span class="hljs-operator">=</span> node;
    }

    addLast(node) {
        <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.head <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> null) {
            <span class="hljs-built_in">this</span>.head <span class="hljs-operator">=</span> node;
            <span class="hljs-keyword">return</span>;
        }

        let last <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.head;
        <span class="hljs-keyword">while</span> (last.next <span class="hljs-operator">!</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> null) {
            last <span class="hljs-operator">=</span> last.next;
        }
        last.next <span class="hljs-operator">=</span> node;
    }

    indexOf(node) {
        let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>;
        <span class="hljs-keyword">for</span> (let p <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.head; p <span class="hljs-operator">!</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> null; p <span class="hljs-operator">=</span> p.next) {
            <span class="hljs-keyword">if</span> (node <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> p) {
                <span class="hljs-keyword">return</span> i;
            }
            i <span class="hljs-operator">=</span> i <span class="hljs-operator">+</span> <span class="hljs-number">1</span>;
        }

        <span class="hljs-keyword">return</span> <span class="hljs-number">-1</span>;
    }

    removeAt(index) {
        <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.head <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> null) {
            <span class="hljs-keyword">return</span>;
        }
        <span class="hljs-keyword">if</span> (index <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-number">0</span>) {
            <span class="hljs-built_in">this</span>.head <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.head.next;
            <span class="hljs-keyword">return</span>;
        }

        let i <span class="hljs-operator">=</span> <span class="hljs-number">1</span>;
        let p <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.head;
        let n <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.head.next;
        <span class="hljs-keyword">while</span> (n) {
            <span class="hljs-keyword">if</span> (i <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> index) {
                p.next <span class="hljs-operator">=</span> n.next;
                <span class="hljs-keyword">return</span>;
            }
            p <span class="hljs-operator">=</span> p.next;
            n <span class="hljs-operator">=</span> n.next;
            i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>;
        }
    }
}

module.exports <span class="hljs-operator">=</span> LinkedList;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/4e2493cba275c39ec58a0f161fe04e81f71e5db18276d648802fca9106f3b472.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="class LinkedList {
    constructor() {
        this.head = null;
    }

    addFirst(node) {
        node.next = this.head;
        this.head = node;
    }

    addLast(node) {
        if (this.head === null) {
            this.head = node;
            return;
        }

        let last = this.head;
        while (last.next !== null) {
            last = last.next;
        }
        last.next = node;
    }

    indexOf(node) {
        let i = 0;
        for (let p = this.head; p !== null; p = p.next) {
            if (node === p) {
                return i;
            }
            i = i + 1;
        }

        return -1;
    }

    removeAt(index) {
        if (this.head === null) {
            return;
        }
        if (index === 0) {
            this.head = this.head.next;
            return;
        }

        let i = 1;
        let p = this.head;
        let n = this.head.next;
        while (n) {
            if (i === index) {
                p.next = n.next;
                return;
            }
            p = p.next;
            n = n.next;
            i++;
        }
    }
}

module.exports = LinkedList;
"><code>class LinkedList {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params"></span>) </span>{
        <span class="hljs-built_in">this</span>.head <span class="hljs-operator">=</span> null;
    }

    addFirst(node) {
        node.next <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.head;
        <span class="hljs-built_in">this</span>.head <span class="hljs-operator">=</span> node;
    }

    addLast(node) {
        <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.head <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> null) {
            <span class="hljs-built_in">this</span>.head <span class="hljs-operator">=</span> node;
            <span class="hljs-keyword">return</span>;
        }

        let last <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.head;
        <span class="hljs-keyword">while</span> (last.next <span class="hljs-operator">!</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> null) {
            last <span class="hljs-operator">=</span> last.next;
        }
        last.next <span class="hljs-operator">=</span> node;
    }

    indexOf(node) {
        let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>;
        <span class="hljs-keyword">for</span> (let p <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.head; p <span class="hljs-operator">!</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> null; p <span class="hljs-operator">=</span> p.next) {
            <span class="hljs-keyword">if</span> (node <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> p) {
                <span class="hljs-keyword">return</span> i;
            }
            i <span class="hljs-operator">=</span> i <span class="hljs-operator">+</span> <span class="hljs-number">1</span>;
        }

        <span class="hljs-keyword">return</span> <span class="hljs-number">-1</span>;
    }

    removeAt(index) {
        <span class="hljs-keyword">if</span> (<span class="hljs-built_in">this</span>.head <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> null) {
            <span class="hljs-keyword">return</span>;
        }
        <span class="hljs-keyword">if</span> (index <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-number">0</span>) {
            <span class="hljs-built_in">this</span>.head <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.head.next;
            <span class="hljs-keyword">return</span>;
        }

        let i <span class="hljs-operator">=</span> <span class="hljs-number">1</span>;
        let p <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.head;
        let n <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.head.next;
        <span class="hljs-keyword">while</span> (n) {
            <span class="hljs-keyword">if</span> (i <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> index) {
                p.next <span class="hljs-operator">=</span> n.next;
                <span class="hljs-keyword">return</span>;
            }
            p <span class="hljs-operator">=</span> p.next;
            n <span class="hljs-operator">=</span> n.next;
            i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>;
        }
    }
}

module.exports <span class="hljs-operator">=</span> LinkedList;
</code></pre><h2 id="h-8-djap-an-deep-retrieval" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">8. đáp án DEEP RETRIEVAL</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a26182c598e1bb84795e9092c0c51859cf8c483f45fa72941b9c0e71e662b377.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/0466195b272de15e0534c50f94aa1ec690a102d7a851907dce802c16b0deb0d5.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="// retrieve a prop that is deeply nested within objects
// i.e. { prop: { prop: { prop: 3 }}} =&gt; 3
function deepRetrieval(obj) {
    if (&quot;object&quot; === typeof (obj.prop)) {
        return deepRetrieval(obj.prop);
    }

    return obj.prop;
}

module.exports = deepRetrieval;
"><code><span class="hljs-comment">// retrieve a prop that is deeply nested within objects</span>
<span class="hljs-comment">// i.e. { prop: { prop: { prop: 3 }}} => 3</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">deepRetrieval</span>(<span class="hljs-params">obj</span>) </span>{
    <span class="hljs-keyword">if</span> (<span class="hljs-string">"object"</span> <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> typeof (obj.prop)) {
        <span class="hljs-keyword">return</span> deepRetrieval(obj.prop);
    }

    <span class="hljs-keyword">return</span> obj.prop;
}

module.exports <span class="hljs-operator">=</span> deepRetrieval;
</code></pre><p>vậy là kết thúc phần</p>]]></content:encoded>
            <author>cryptovuive@newsletter.paragraph.com (meteosrds)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/bbc14d3f25daff04a591cff054b18d30ff36bee225bc6902e794d51b2c353670.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[The basic - Phần 3]]></title>
            <link>https://paragraph.com/@cryptovuive/the-basic-ph-n-3</link>
            <guid>4wQwe7bgNBSeiwRLThWf</guid>
            <pubDate>Wed, 14 Dec 2022 10:12:11 GMT</pubDate>
            <description><![CDATA[1. đáp án Practice problems 3function eitherNotBoth(num) { if (num % 5 === 0) { if (num % 3 === 0) { return false; } else { return true; } } else { if (num % 3 === 0) { return true; } else { return false; } } } module.exports = eitherNotBoth; function fizzBuzz(numbers) { let str = ""; for (let i = 0; i &#x3C; numbers.length; i++) { if ((numbers[i] % 3 === 0) &#x26;&#x26; (numbers[i] % 5 === 0)) { str += "fizzbuzz"; } else if (numbers[i] % 5 === 0) { str += "buzz"; } else if (numbers[i] % 3 ==...]]></description>
            <content:encoded><![CDATA[<h2 id="h-1-djap-an-practice-problems-3" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">1. đáp án Practice problems 3</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/3842f8266697022586902cdd1e3d1b004f24523c7fa570fb46ff97618ed00a21.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/fa0cc817af1cf54e9c41dcf26f8d3efc9315b7342bbe700e6028a35b74343188.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function eitherNotBoth(num) {
    if (num % 5 === 0) {
        if (num % 3 === 0) {
            return false;
        } else {
            return true;
        }
    } else {
        if (num % 3 === 0) {
            return true;
        } else {
            return false;
        }
    }
}

module.exports = eitherNotBoth;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">eitherNotBoth</span>(<span class="hljs-params">num</span>) </span>{
    <span class="hljs-keyword">if</span> (num <span class="hljs-operator">%</span> <span class="hljs-number">5</span> <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-number">0</span>) {
        <span class="hljs-keyword">if</span> (num <span class="hljs-operator">%</span> <span class="hljs-number">3</span> <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-number">0</span>) {
            <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
        } <span class="hljs-keyword">else</span> {
            <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>;
        }
    } <span class="hljs-keyword">else</span> {
        <span class="hljs-keyword">if</span> (num <span class="hljs-operator">%</span> <span class="hljs-number">3</span> <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-number">0</span>) {
            <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>;
        } <span class="hljs-keyword">else</span> {
            <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
        }
    }
}

module.exports <span class="hljs-operator">=</span> eitherNotBoth;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b2e1b91786432c2e5dd8322cf9ae691650aeec295c10308e4abc7145a641bb5a.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function fizzBuzz(numbers) {
    let str = &quot;&quot;;

    for (let i = 0; i &lt; numbers.length; i++) {
        if ((numbers[i] % 3 === 0) &amp;&amp; (numbers[i] % 5 === 0)) {
            str += &quot;fizzbuzz&quot;;
        } else if (numbers[i] % 5 === 0) {
            str += &quot;buzz&quot;;

        } else if (numbers[i] % 3 === 0) {
            str += &quot;fizz&quot;;
        }
    }

    return str;
}

module.exports = fizzBuzz;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">fizzBuzz</span>(<span class="hljs-params">numbers</span>) </span>{
    let str <span class="hljs-operator">=</span> <span class="hljs-string">""</span>;

    <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> numbers.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
        <span class="hljs-keyword">if</span> ((numbers[i] <span class="hljs-operator">%</span> <span class="hljs-number">3</span> <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-number">0</span>) <span class="hljs-operator">&#x26;</span><span class="hljs-operator">&#x26;</span> (numbers[i] <span class="hljs-operator">%</span> <span class="hljs-number">5</span> <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-number">0</span>)) {
            str <span class="hljs-operator">+</span><span class="hljs-operator">=</span> <span class="hljs-string">"fizzbuzz"</span>;
        } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (numbers[i] <span class="hljs-operator">%</span> <span class="hljs-number">5</span> <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-number">0</span>) {
            str <span class="hljs-operator">+</span><span class="hljs-operator">=</span> <span class="hljs-string">"buzz"</span>;

        } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (numbers[i] <span class="hljs-operator">%</span> <span class="hljs-number">3</span> <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-number">0</span>) {
            str <span class="hljs-operator">+</span><span class="hljs-operator">=</span> <span class="hljs-string">"fizz"</span>;
        }
    }

    <span class="hljs-keyword">return</span> str;
}

module.exports <span class="hljs-operator">=</span> fizzBuzz;
</code></pre><h2 id="h-2-djap-an-this-keyword" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">2. đáp án THIS KEYWORD</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b65d44609d8834aef2d43e2ca21a063af32c6d70c32bf619c548d8029ecad702.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/9a9907735c28d2a748329a715348ed8d6fc96e2eb07f6ac475825a9480b7d114.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function thisName() {
    return this.name;
}

const newFunction = thisName.bind({ name: &apos;Bob&apos; });

module.exports = newFunction;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">thisName</span>(<span class="hljs-params"></span>) </span>{
    <span class="hljs-keyword">return</span> <span class="hljs-built_in">this</span>.<span class="hljs-built_in">name</span>;
}

const newFunction <span class="hljs-operator">=</span> thisName.bind({ name: <span class="hljs-string">'Bob'</span> });

module.exports <span class="hljs-operator">=</span> newFunction;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/7bc5b7a6fb9520e9f038a541a12b993b2e1cd7f12ebec33524d0dda57f2ddd06.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function thisName() {
    return this.name;
}

const newFunction = thisName.bind({ name: &apos;Bob&apos; });

module.exports = newFunction;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">thisName</span>(<span class="hljs-params"></span>) </span>{
    <span class="hljs-keyword">return</span> <span class="hljs-built_in">this</span>.<span class="hljs-built_in">name</span>;
}

const newFunction <span class="hljs-operator">=</span> thisName.bind({ name: <span class="hljs-string">'Bob'</span> });

module.exports <span class="hljs-operator">=</span> newFunction;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b3934d631bc87da8328fecab047d621aa9e4be27eb119ddd16609f5e3e4d2efe.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const obj = {
    name: &apos;Bob&apos;,
    getName: function () {
        return this.name;
    }
}

module.exports = obj;
"><code>const obj <span class="hljs-operator">=</span> {
    name: <span class="hljs-string">'Bob'</span>,
    getName: <span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params"></span>) </span>{
        <span class="hljs-keyword">return</span> <span class="hljs-built_in">this</span>.<span class="hljs-built_in">name</span>;
    }
}

module.exports <span class="hljs-operator">=</span> obj;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/212037fcde288532fbb44ba964328e305c82c5901b6285ef5ca7ee96d78f402b.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const fetchAge = require(&apos;./fetchAge&apos;);

function Celebrity(name) {
    this.name = name;
    const that = this;
    fetchAge(this.name, function (age) {
        that.age = age;
    });
}

module.exports = Celebrity;
"><code>const fetchAge <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'./fetchAge'</span>);

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">Celebrity</span>(<span class="hljs-params">name</span>) </span>{
    <span class="hljs-built_in">this</span>.<span class="hljs-built_in">name</span> <span class="hljs-operator">=</span> name;
    const that <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>;
    fetchAge(<span class="hljs-built_in">this</span>.<span class="hljs-built_in">name</span>, <span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params">age</span>) </span>{
        that.age <span class="hljs-operator">=</span> age;
    });
}

module.exports <span class="hljs-operator">=</span> Celebrity;
</code></pre><h2 id="h-djap-an-prototype-chain" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">đáp án PROTOTYPE CHAIN</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/5daf46e9b758e971734803d7cb449ae870111a26389163bcd4e3a6aa5cc83715.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/bd7f123a194a1076df70315427620c3c4afb12435cd4f2176f94c9494c0c36d5.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="// Our Shape &quot;Constructor&quot;
function Shape(x, y) {
    // store x and y in this.position
    this.position = {x, y};
    this.position.x = x;
    this.position.y = y;
}

module.exports = Shape;
"><code><span class="hljs-comment">// Our Shape "Constructor"</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">Shape</span>(<span class="hljs-params">x, y</span>) </span>{
    <span class="hljs-comment">// store x and y in this.position</span>
    <span class="hljs-built_in">this</span>.position <span class="hljs-operator">=</span> {x, y};
    <span class="hljs-built_in">this</span>.position.x <span class="hljs-operator">=</span> x;
    <span class="hljs-built_in">this</span>.position.y <span class="hljs-operator">=</span> y;
}

module.exports <span class="hljs-operator">=</span> Shape;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/46f2e1fbbb38adb2554e5f37cf33a0d3876708a78a95d8567ee292e99ba7111a.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="// Our Shape &quot;Constructor&quot;
function Shape(x, y) {
    this.position = {x, y};
    this.position.x = x;
    this.position.y = y;
}

    Shape.prototype.move = function(a, b) {
        this.position.x += a;
        this.position.y += b;
    }

module.exports = Shape;
"><code><span class="hljs-comment">// Our Shape "Constructor"</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">Shape</span>(<span class="hljs-params">x, y</span>) </span>{
    <span class="hljs-built_in">this</span>.position <span class="hljs-operator">=</span> {x, y};
    <span class="hljs-built_in">this</span>.position.x <span class="hljs-operator">=</span> x;
    <span class="hljs-built_in">this</span>.position.y <span class="hljs-operator">=</span> y;
}

    Shape.prototype.move <span class="hljs-operator">=</span> <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">a, b</span>) </span>{
        <span class="hljs-built_in">this</span>.position.x <span class="hljs-operator">+</span><span class="hljs-operator">=</span> a;
        <span class="hljs-built_in">this</span>.position.y <span class="hljs-operator">+</span><span class="hljs-operator">=</span> b;
    }

module.exports <span class="hljs-operator">=</span> Shape;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/934ca9b21532ff08aa19edb5059f750886c3f790dee6a25b28f113b71b9d797a.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const Shape = require(&apos;./Shape&apos;);

function Circle(x, y, radius) {
    Shape.call(this, x, y);
    this.radius = radius;
}

module.exports = Circle;
"><code>const Shape <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'./Shape'</span>);

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">Circle</span>(<span class="hljs-params">x, y, radius</span>) </span>{
    Shape.<span class="hljs-built_in">call</span>(<span class="hljs-built_in">this</span>, x, y);
    <span class="hljs-built_in">this</span>.radius <span class="hljs-operator">=</span> radius;
}

module.exports <span class="hljs-operator">=</span> Circle;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/8943e8979731c6777c0b33f01ad9878ec0ec38bf24c7784bf56b61b3340222ed.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const Shape = require(&apos;./Shape&apos;);

function Circle(x, y, radius) {
    Shape.call(this, x, y);
    this.radius = radius;
    Circle.prototype = Object.create(Shape.prototype);
}

module.exports = Circle;
"><code>const Shape <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'./Shape'</span>);

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">Circle</span>(<span class="hljs-params">x, y, radius</span>) </span>{
    Shape.<span class="hljs-built_in">call</span>(<span class="hljs-built_in">this</span>, x, y);
    <span class="hljs-built_in">this</span>.radius <span class="hljs-operator">=</span> radius;
    Circle.prototype <span class="hljs-operator">=</span> Object.create(Shape.prototype);
}

module.exports <span class="hljs-operator">=</span> Circle;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/2ce7f6e941160856ed156e19f5891c13de34f14b7914b942a1f6f4f9d749741a.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const Shape = require(&apos;./Shape&apos;);

function Rectangle(x, y, height, width) {
    Shape.call(this, x, y);
    this.height = height;
    this.width = width;
    Rectangle.prototype = Object.create(Shape.prototype);
    Rectangle.prototype.flip = function () {
        let t = this.width;
        this.width = this.height;
        this.height = t;
    }
}

module.exports = Rectangle;
"><code>const Shape <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'./Shape'</span>);

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">Rectangle</span>(<span class="hljs-params">x, y, height, width</span>) </span>{
    Shape.<span class="hljs-built_in">call</span>(<span class="hljs-built_in">this</span>, x, y);
    <span class="hljs-built_in">this</span>.height <span class="hljs-operator">=</span> height;
    <span class="hljs-built_in">this</span>.width <span class="hljs-operator">=</span> width;
    Rectangle.prototype <span class="hljs-operator">=</span> Object.create(Shape.prototype);
    Rectangle.prototype.flip <span class="hljs-operator">=</span> <span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params"></span>) </span>{
        let t <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.width;
        <span class="hljs-built_in">this</span>.width <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.height;
        <span class="hljs-built_in">this</span>.height <span class="hljs-operator">=</span> t;
    }
}

module.exports <span class="hljs-operator">=</span> Rectangle;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/ff4441f6dbd80e9893946f99964e16f4bb443959a555cae1c40d90446baf8b77.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const Shape = require(&apos;./Shape&apos;);

function Rectangle(x, y, height, width) {
    Shape.call(this, x, y);
    this.height = height;
    this.width = width;
    Rectangle.prototype = Object.create(Shape.prototype);
    Rectangle.prototype.flip = function () {
        let t = this.width;
        this.width = this.height;
        this.height = t;
    }
}

module.exports = Rectangle;
"><code>const Shape <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'./Shape'</span>);

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">Rectangle</span>(<span class="hljs-params">x, y, height, width</span>) </span>{
    Shape.<span class="hljs-built_in">call</span>(<span class="hljs-built_in">this</span>, x, y);
    <span class="hljs-built_in">this</span>.height <span class="hljs-operator">=</span> height;
    <span class="hljs-built_in">this</span>.width <span class="hljs-operator">=</span> width;
    Rectangle.prototype <span class="hljs-operator">=</span> Object.create(Shape.prototype);
    Rectangle.prototype.flip <span class="hljs-operator">=</span> <span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params"></span>) </span>{
        let t <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.width;
        <span class="hljs-built_in">this</span>.width <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.height;
        <span class="hljs-built_in">this</span>.height <span class="hljs-operator">=</span> t;
    }
}

module.exports <span class="hljs-operator">=</span> Rectangle;
</code></pre><pre data-type="codeBlock" text="
"><code></code></pre><h2 id="h-djap-an-classes" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">đáp án classes</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/440431e00e218b4b3cd979e3989ecedaf653e438f96c69e3c7de3f581645e00f.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="class Hero {
    constructor() {
        this.health = 50;
    }
    takeDamage(health) {
        this.health -= health;
    }
}

module.exports = Hero;
"><code>class Hero {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params"></span>) </span>{
        <span class="hljs-built_in">this</span>.health <span class="hljs-operator">=</span> <span class="hljs-number">50</span>;
    }
    takeDamage(health) {
        <span class="hljs-built_in">this</span>.health <span class="hljs-operator">-</span><span class="hljs-operator">=</span> health;
    }
}

module.exports <span class="hljs-operator">=</span> Hero;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/62b138a629dc7c1c5d3317291a69efe2e4a78eec34a57a9c47b1d46859afebac.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="class Hero {
    constructor() {
        this.health = 50;
    }
    takeDamage(health) {
        this.health -= health;
    }
}

module.exports = Hero;
"><code>class Hero {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params"></span>) </span>{
        <span class="hljs-built_in">this</span>.health <span class="hljs-operator">=</span> <span class="hljs-number">50</span>;
    }
    takeDamage(health) {
        <span class="hljs-built_in">this</span>.health <span class="hljs-operator">-</span><span class="hljs-operator">=</span> health;
    }
}

module.exports <span class="hljs-operator">=</span> Hero;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/5a2a2e2d21d4d512732d43a926f18cef30a499f98f643a657501ffb15861dd87.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const Hero = require(&apos;./Hero&apos;);

class Warrior extends Hero {
    constructor(health) {
        super(health);
        this.rage = 0;
    }
    takeDamage(health) {
        this.rage += 1;
        super.takeDamage(health);
    }
}

module.exports = Warrior;
"><code>const Hero <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'./Hero'</span>);

class Warrior extends Hero {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params">health</span>) </span>{
        <span class="hljs-built_in">super</span>(health);
        <span class="hljs-built_in">this</span>.rage <span class="hljs-operator">=</span> <span class="hljs-number">0</span>;
    }
    takeDamage(health) {
        <span class="hljs-built_in">this</span>.rage <span class="hljs-operator">+</span><span class="hljs-operator">=</span> <span class="hljs-number">1</span>;
        <span class="hljs-built_in">super</span>.takeDamage(health);
    }
}

module.exports <span class="hljs-operator">=</span> Warrior;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/483e0709bd458f1856940a980bc5a4ee897e08bdcdfb11fbfea261c5373f9fe4.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const Hero = require(&apos;./Hero&apos;);

class Warrior extends Hero {
    constructor(health) {
        super(health);
        this.rage = 0;
    }
    takeDamage(health) {
        this.rage += 1;
        super.takeDamage(health);
    }
}

module.exports = Warrior;
"><code>const Hero <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'./Hero'</span>);

class Warrior extends Hero {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params">health</span>) </span>{
        <span class="hljs-built_in">super</span>(health);
        <span class="hljs-built_in">this</span>.rage <span class="hljs-operator">=</span> <span class="hljs-number">0</span>;
    }
    takeDamage(health) {
        <span class="hljs-built_in">this</span>.rage <span class="hljs-operator">+</span><span class="hljs-operator">=</span> <span class="hljs-number">1</span>;
        <span class="hljs-built_in">super</span>.takeDamage(health);
    }
}

module.exports <span class="hljs-operator">=</span> Warrior;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/9558c10c8b511fd39d5a660cf010a9eacd9e07d0fe04666b3bb7d4a139a2abf9.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const Hero = require(&apos;./Hero&apos;);

class Warrior extends Hero {
    constructor(health) {
        super(health);
        this.rage = 0;
    }
    takeDamage(health) {
        this.rage += 1;
        super.takeDamage(health);
    }
}

module.exports = Warrior;
"><code>const Hero <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'./Hero'</span>);

class Warrior extends Hero {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params">health</span>) </span>{
        <span class="hljs-built_in">super</span>(health);
        <span class="hljs-built_in">this</span>.rage <span class="hljs-operator">=</span> <span class="hljs-number">0</span>;
    }
    takeDamage(health) {
        <span class="hljs-built_in">this</span>.rage <span class="hljs-operator">+</span><span class="hljs-operator">=</span> <span class="hljs-number">1</span>;
        <span class="hljs-built_in">super</span>.takeDamage(health);
    }
}

module.exports <span class="hljs-operator">=</span> Warrior;
</code></pre><h2 id="h-dje-y-cai-thu-6-duoi-djay-se-co-2-code-djien-2-ben-nhe" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Để ý cái thứ 6 dưới đây sẽ có 2 code điền 2 bên nhé</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d53bd7b140f97b03ca1c1d7be81dc9d6ca8d5d054677718bd586fc8a38790bbf.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const Hero = require(&apos;./Hero&apos;);

class Warrior extends Hero {
    constructor(health) {
        super(health);
        this.rage = 0;
    }
    takeDamage(health) {
        this.rage += 1;
        super.takeDamage(health);
    }
}

module.exports = Warrior;
"><code>const Hero <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'./Hero'</span>);

class Warrior extends Hero {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params">health</span>) </span>{
        <span class="hljs-built_in">super</span>(health);
        <span class="hljs-built_in">this</span>.rage <span class="hljs-operator">=</span> <span class="hljs-number">0</span>;
    }
    takeDamage(health) {
        <span class="hljs-built_in">this</span>.rage <span class="hljs-operator">+</span><span class="hljs-operator">=</span> <span class="hljs-number">1</span>;
        <span class="hljs-built_in">super</span>.takeDamage(health);
    }
}

module.exports <span class="hljs-operator">=</span> Warrior;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/9911ce180f4f0efbd2475d110160b3a391e892bf969a944b60e81650e2de1cca.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="class Hero {
    constructor(health) {
        this.health = health;
    }

    takeDamage(health) {
        this.health = this.health - health;
    }
}

module.exports = Hero;
"><code>class Hero {
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params">health</span>) </span>{
        <span class="hljs-built_in">this</span>.health <span class="hljs-operator">=</span> health;
    }

    takeDamage(health) {
        <span class="hljs-built_in">this</span>.health <span class="hljs-operator">=</span> <span class="hljs-built_in">this</span>.health <span class="hljs-operator">-</span> health;
    }
}

module.exports <span class="hljs-operator">=</span> Hero;
</code></pre><p>end</p>]]></content:encoded>
            <author>cryptovuive@newsletter.paragraph.com (meteosrds)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/bbc14d3f25daff04a591cff054b18d30ff36bee225bc6902e794d51b2c353670.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[The basic - Phần 2]]></title>
            <link>https://paragraph.com/@cryptovuive/the-basic-ph-n-2</link>
            <guid>KuM393W7lNB2iRovDmC1</guid>
            <pubDate>Wed, 14 Dec 2022 09:59:51 GMT</pubDate>
            <description><![CDATA[đáp án STRING MANIPULATIONfunction startsWithX(string) { let xstring = string.slice(0, 1); xstring = xstring.toLowerCase(); if (xstring === "x") { return true; } else { return false; } } module.exports = startsWithX; function startsWithX(string) { let xstring = string.slice(0, 1); xstring = xstring.toLowerCase(); if (xstring === "x") { return true; } else { return false; } } module.exports = startsWithX; function endsWithX(string) { let xstring = string.slice(-1); xstring = xstring.toLowerCas...]]></description>
            <content:encoded><![CDATA[<p><strong>đáp án STRING MANIPULATION</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/f39c9da09e1a7ff704de0f1d0bee90d46b82cdeb536e8d282405505de5be22a6.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/622223249c431bce1b36b5ba0171d03376b0ed699b57560771e5ad56a4f8a742.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function startsWithX(string) {
    let xstring = string.slice(0, 1);

    xstring = xstring.toLowerCase();
    if (xstring === &quot;x&quot;) {
        return true;
    }
    else {
        return false;
    }
}

module.exports = startsWithX;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">startsWithX</span>(<span class="hljs-params"><span class="hljs-keyword">string</span></span>) </span>{
    let xstring <span class="hljs-operator">=</span> <span class="hljs-built_in">string</span>.slice(<span class="hljs-number">0</span>, <span class="hljs-number">1</span>);

    xstring <span class="hljs-operator">=</span> xstring.toLowerCase();
    <span class="hljs-keyword">if</span> (xstring <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-string">"x"</span>) {
        <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>;
    }
    <span class="hljs-keyword">else</span> {
        <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
    }
}

module.exports <span class="hljs-operator">=</span> startsWithX;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/49c8da5232f7ff29063bb20bf6dc8cb8d358c30a8baaaa8a0bff4d955b00acf5.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function startsWithX(string) {
    let xstring = string.slice(0, 1);

    xstring = xstring.toLowerCase();
    if (xstring === &quot;x&quot;) {
        return true;
    }
    else {
        return false;
    }
}

module.exports = startsWithX;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">startsWithX</span>(<span class="hljs-params"><span class="hljs-keyword">string</span></span>) </span>{
    let xstring <span class="hljs-operator">=</span> <span class="hljs-built_in">string</span>.slice(<span class="hljs-number">0</span>, <span class="hljs-number">1</span>);

    xstring <span class="hljs-operator">=</span> xstring.toLowerCase();
    <span class="hljs-keyword">if</span> (xstring <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-string">"x"</span>) {
        <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>;
    }
    <span class="hljs-keyword">else</span> {
        <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
    }
}

module.exports <span class="hljs-operator">=</span> startsWithX;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/6fe41cc4bd2d04240a1933d48ace080c9377d66d4cf8442168cb4bf06512509a.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function endsWithX(string) {
    let xstring = string.slice(-1);

    xstring = xstring.toLowerCase();
    if (xstring !== &quot;x&quot;) {
        return false;
    }
    else {
        return true;
    }
}

module.exports = endsWithX;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">endsWithX</span>(<span class="hljs-params"><span class="hljs-keyword">string</span></span>) </span>{
    let xstring <span class="hljs-operator">=</span> <span class="hljs-built_in">string</span>.slice(<span class="hljs-number">-1</span>);

    xstring <span class="hljs-operator">=</span> xstring.toLowerCase();
    <span class="hljs-keyword">if</span> (xstring <span class="hljs-operator">!</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-string">"x"</span>) {
        <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
    }
    <span class="hljs-keyword">else</span> {
        <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>;
    }
}

module.exports <span class="hljs-operator">=</span> endsWithX;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/0a3aabd1527a07ee90ef009fa8fccfe6adaf7780663fa83134d68f79d9b5ce8d.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function isAllX(string) {
    for (let i = 0; i &lt; string.length; i++) {
        let xstring = string[i];
        xstring = xstring.toUpperCase();
        if (xstring !== &quot;X&quot;) {
            return false;
        }
    }

    return true;
}

module.exports = isAllX;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">isAllX</span>(<span class="hljs-params"><span class="hljs-keyword">string</span></span>) </span>{
    <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> <span class="hljs-built_in">string</span>.length; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
        let xstring <span class="hljs-operator">=</span> <span class="hljs-keyword">string</span>[i];
        xstring <span class="hljs-operator">=</span> xstring.toUpperCase();
        <span class="hljs-keyword">if</span> (xstring <span class="hljs-operator">!</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-string">"X"</span>) {
            <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
        }
    }

    <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>;
}

module.exports <span class="hljs-operator">=</span> isAllX;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/aae3f54b7df7f89eca7947f208f26d3af19aec3d4c8875a30f4274234c4569fe.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function findFirstX(string) {
    for (let i = 0; i &lt; string.length; i++) {
        let xstring = string[i];

        if (xstring === &quot;x&quot;) {
            return i;
        }
    }
}

module.exports = findFirstX;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">findFirstX</span>(<span class="hljs-params"><span class="hljs-keyword">string</span></span>) </span>{
    <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> <span class="hljs-built_in">string</span>.length; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
        let xstring <span class="hljs-operator">=</span> <span class="hljs-keyword">string</span>[i];

        <span class="hljs-keyword">if</span> (xstring <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-string">"x"</span>) {
            <span class="hljs-keyword">return</span> i;
        }
    }
}

module.exports <span class="hljs-operator">=</span> findFirstX;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/bbe28827b5fa0d3353717632e31061829faa7bead63dec1201842e65c1fc5674.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function splitAtX(string) {
    for (let i = 0; i &lt; string.length; i++) {
        let xstring = string[i];

        if (xstring === &quot;x&quot;) {
            xstring1 = string.slice(i + 1, string.length);
            xstring2 = string.slice(0, i);
            if (xstring1.length &lt; xstring2.length) {
                return xstring2;
            }
            else {
                return xstring1;
            }
        }
    }
}

module.exports = splitAtX;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">splitAtX</span>(<span class="hljs-params"><span class="hljs-keyword">string</span></span>) </span>{
    <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> <span class="hljs-built_in">string</span>.length; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
        let xstring <span class="hljs-operator">=</span> <span class="hljs-keyword">string</span>[i];

        <span class="hljs-keyword">if</span> (xstring <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-string">"x"</span>) {
            xstring1 <span class="hljs-operator">=</span> <span class="hljs-built_in">string</span>.slice(i <span class="hljs-operator">+</span> <span class="hljs-number">1</span>, <span class="hljs-built_in">string</span>.length);
            xstring2 <span class="hljs-operator">=</span> <span class="hljs-built_in">string</span>.slice(<span class="hljs-number">0</span>, i);
            <span class="hljs-keyword">if</span> (xstring1.<span class="hljs-built_in">length</span> <span class="hljs-operator">&#x3C;</span> xstring2.<span class="hljs-built_in">length</span>) {
                <span class="hljs-keyword">return</span> xstring2;
            }
            <span class="hljs-keyword">else</span> {
                <span class="hljs-keyword">return</span> xstring1;
            }
        }
    }
}

module.exports <span class="hljs-operator">=</span> splitAtX;
</code></pre><h2 id="h-djap-an-arrays" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">đáp án ARRAYS</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e7313a88199bcd14213ad950c3a94f6ca587c53a263fb8d0621654cf7833ebfd.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/09ea4d1720031754959b840bf79baddc3b2aca15f62837036f283d254168059f.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const array = [1, 2, 3];// &lt;-- create an array here!

module.exports = array;
"><code>const <span class="hljs-attr">array</span> = [<span class="hljs-number">1</span>, <span class="hljs-number">2</span>, <span class="hljs-number">3</span>]<span class="hljs-comment">;// &#x3C;-- create an array here!</span>

<span class="hljs-attr">module.exports</span> = array<span class="hljs-comment">;</span>
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/5baeacc273ab92886a8fe9d29fc5d945ff04612534fb135324554411e855a595.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function hasOne(array) {
    if (array.indexOf(1) === -1) {
        return false;
    }

    return true;
}

module.exports = hasOne;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">hasOne</span>(<span class="hljs-params">array</span>) </span>{
    <span class="hljs-keyword">if</span> (array.indexOf(<span class="hljs-number">1</span>) <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-number">-1</span>) {
        <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
    }

    <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>;
}

module.exports <span class="hljs-operator">=</span> hasOne;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b9d80e810080956e620305b63c76e50a89c168f2a53318aa9d23c8bd8b21e12c.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function sumEven(array) {
    let s = 0;
    for (let i = 0; i &lt; array.length; i++) {
        if (array[i] % 2 === 0) {
            s = s + array[i];
        }
    }

    return s;
}

module.exports = sumEven;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">sumEven</span>(<span class="hljs-params">array</span>) </span>{
    let s <span class="hljs-operator">=</span> <span class="hljs-number">0</span>;
    <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> array.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
        <span class="hljs-keyword">if</span> (array[i] <span class="hljs-operator">%</span> <span class="hljs-number">2</span> <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-number">0</span>) {
            s <span class="hljs-operator">=</span> s <span class="hljs-operator">+</span> array[i];
        }
    }

    <span class="hljs-keyword">return</span> s;
}

module.exports <span class="hljs-operator">=</span> sumEven;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/5b65fdc469fde4393cca89efb4aa19c3f551897ff2d6677d4b42027bfbe81d01.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function unique(array) {
    let r = [];
    for (let i = 0; i &lt; array.length; i++) {
        if (r.indexOf(array[i]) === -1) {
            r.push(array[i]);
        }
    }
    return r;
}

module.exports = unique;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">unique</span>(<span class="hljs-params">array</span>) </span>{
    let r <span class="hljs-operator">=</span> [];
    <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> array.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
        <span class="hljs-keyword">if</span> (r.indexOf(array[i]) <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-number">-1</span>) {
            r.<span class="hljs-built_in">push</span>(array[i]);
        }
    }
    <span class="hljs-keyword">return</span> r;
}

module.exports <span class="hljs-operator">=</span> unique;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/47e4da913178efaacba35adf46153619ac16f9967aac4950d3016ac8f3b3c14d.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function addOne(array) {
    for (let i = 0; i &lt; array.length; i++) {
        array[i] = array[i] + 1;
    }
}

module.exports = addOne;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">addOne</span>(<span class="hljs-params">array</span>) </span>{
    <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> array.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
        array[i] <span class="hljs-operator">=</span> array[i] <span class="hljs-operator">+</span> <span class="hljs-number">1</span>;
    }
}

module.exports <span class="hljs-operator">=</span> addOne;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e155b0e76f66279f7982c60d2e3a3aad323fc984a3975256c2591e36b7920e85.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function removeOccurrences(array, num) {
    for (let i = array.indexOf(num); i !== -1; i = array.indexOf(num)) {
        array.splice(i, 1);
    }
}

module.exports = removeOccurrences;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">removeOccurrences</span>(<span class="hljs-params">array, num</span>) </span>{
    <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> array.indexOf(num); i <span class="hljs-operator">!</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-number">-1</span>; i <span class="hljs-operator">=</span> array.indexOf(num)) {
        array.splice(i, <span class="hljs-number">1</span>);
    }
}

module.exports <span class="hljs-operator">=</span> removeOccurrences;
</code></pre><h2 id="h-djap-an-objects" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">đáp án OBJECTS</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/79c66d2728468b7446c2ddfc9c16f43a82e2ab55dc35b36ffcd9d243d585d47e.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e000b55695b4636180140d1d2d8ac96234c1e8a79d58412cf450ce5439a05af6.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const order = {
    pizzas: 2,
    extraCheese: true,
    deliveryInstructions: &quot;go to build&quot;
};

module.exports = order;
"><code>const <span class="hljs-attr">order</span> = {
    pizzas: 2,
    extraCheese: true,
    deliveryInstructions: "go to build"
}<span class="hljs-comment">;</span>

<span class="hljs-attr">module.exports</span> = order<span class="hljs-comment">;</span>
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/ea0a23e2309944e0699645e94d24c9a39401d0eef7e948a9248f9e0d71c59686.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function numberOfPizzas(order) {
    return order.pizzas;
}

module.exports = numberOfPizzas;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">numberOfPizzas</span>(<span class="hljs-params">order</span>) </span>{
    <span class="hljs-keyword">return</span> order.pizzas;
}

module.exports <span class="hljs-operator">=</span> numberOfPizzas;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/6c50eb2b1dd3dddfaa081f16b4fd1a230afacf155396e3b5be60f97d4b5c703f.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function numberOfPizzas(orders) {
    let s = 0;
    for (let i = 0; i &lt; orders.length; i++) {
        s = s + orders[i].pizzas;
    }

    return s;
}

module.exports = numberOfPizzas;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">numberOfPizzas</span>(<span class="hljs-params">orders</span>) </span>{
    let s <span class="hljs-operator">=</span> <span class="hljs-number">0</span>;
    <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> orders.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
        s <span class="hljs-operator">=</span> s <span class="hljs-operator">+</span> orders[i].pizzas;
    }

    <span class="hljs-keyword">return</span> s;
}

module.exports <span class="hljs-operator">=</span> numberOfPizzas;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d2cc0018fd3b6cdb4a7cd1662acd58e5d21a4e0d111c728d32bcc038187cdd73.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const ORDER_TYPES = {
    PIZZA: 0,
    SALAD: 1,
    FRIES: 2
}

module.exports = ORDER_TYPES;
"><code>const <span class="hljs-attr">ORDER_TYPES</span> = {
    PIZZA: 0,
    SALAD: 1,
    FRIES: 2
}

<span class="hljs-attr">module.exports</span> = ORDER_TYPES<span class="hljs-comment">;</span>
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/1e4e1bd855cdd993284ba43c96d716c2a714a6862329b5a0ab7e90bcb41e9cec.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const ORDER_TYPES = require(&apos;./orderTypes&apos;);

function numberOfPizzas(orders) {
    let s = 0;

    for (let i = 0; i &lt; orders.length; i++) {
        if (orders[i].type === ORDER_TYPES.PIZZA) {
            s = s + orders[i].pizzas;
        }
    }
    return s;
}

module.exports = numberOfPizzas;
"><code>const ORDER_TYPES <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'./orderTypes'</span>);

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">numberOfPizzas</span>(<span class="hljs-params">orders</span>) </span>{
    let s <span class="hljs-operator">=</span> <span class="hljs-number">0</span>;

    <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> orders.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
        <span class="hljs-keyword">if</span> (orders[i].type <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> ORDER_TYPES.PIZZA) {
            s <span class="hljs-operator">=</span> s <span class="hljs-operator">+</span> orders[i].pizzas;
        }
    }
    <span class="hljs-keyword">return</span> s;
}

module.exports <span class="hljs-operator">=</span> numberOfPizzas;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/5536fd028fe232ed0b236e0e73a952db96e64a71b10c28f74ae888c3e095231e.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function numberOfKeys(object) {
    let n = 0;
    for (let key in object) {
        n = n + 1;
    }

    return n;
}

module.exports = numberOfKeys;
"><code>function numberOfKeys(object) {
    let <span class="hljs-attr">n</span> = <span class="hljs-number">0</span><span class="hljs-comment">;</span>
    for (let key in object) {
        <span class="hljs-attr">n</span> = n + <span class="hljs-number">1</span><span class="hljs-comment">;</span>
    }

    return n<span class="hljs-comment">;</span>
}

<span class="hljs-attr">module.exports</span> = numberOfKeys<span class="hljs-comment">;</span>
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/54526e00aeb846818b7a474368446b9516962b00b9e6f5ad60fe00f775881408.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function removeSecret(object) {
    delete object.secret
}

module.exports = removeSecret;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">removeSecret</span>(<span class="hljs-params">object</span>) </span>{
    <span class="hljs-keyword">delete</span> object.secret
}

module.exports <span class="hljs-operator">=</span> removeSecret;
</code></pre><h2 id="h-djap-an-practive-problems-2" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">đáp án Practive Problems 2</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/77b95b9f574308dc5faa761a40aeaa19b1fbeed4c4bdd3af0c70d2fd678b2e5c.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c66db07e50c211e4d4fac1f34542672f8b645a72371f0efe0ea18e0f865b54ea.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function shortestString(str1, str2) {
    if (str1.length &lt; str2.length) {
        return str1;
    } else {
        return str2;
    }
}

module.exports = shortestString;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">shortestString</span>(<span class="hljs-params">str1, str2</span>) </span>{
    <span class="hljs-keyword">if</span> (str1.<span class="hljs-built_in">length</span> <span class="hljs-operator">&#x3C;</span> str2.<span class="hljs-built_in">length</span>) {
        <span class="hljs-keyword">return</span> str1;
    } <span class="hljs-keyword">else</span> {
        <span class="hljs-keyword">return</span> str2;
    }
}

module.exports <span class="hljs-operator">=</span> shortestString;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/3305284da8d531af96de0ff9ba245fe59dc16c4c3d38891074e0fedfbe5c3f4e.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function halfValue(numbers) {
    let retarr = [];

    for (let i = 0; i &lt; numbers.length; i++) {
        if (0 === numbers[i] % 2) {
            retarr.push(numbers[i] / 2);
        } else {
            let tmp = Math.floor(numbers[i] / 2) + 1;
            retarr.push(tmp);
        }
    }

    return retarr;
}

module.exports = halfValue;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">halfValue</span>(<span class="hljs-params">numbers</span>) </span>{
    let retarr <span class="hljs-operator">=</span> [];

    <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> numbers.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
        <span class="hljs-keyword">if</span> (<span class="hljs-number">0</span> <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> numbers[i] <span class="hljs-operator">%</span> <span class="hljs-number">2</span>) {
            retarr.<span class="hljs-built_in">push</span>(numbers[i] <span class="hljs-operator">/</span> <span class="hljs-number">2</span>);
        } <span class="hljs-keyword">else</span> {
            let tmp <span class="hljs-operator">=</span> Math.floor(numbers[i] <span class="hljs-operator">/</span> <span class="hljs-number">2</span>) <span class="hljs-operator">+</span> <span class="hljs-number">1</span>;
            retarr.<span class="hljs-built_in">push</span>(tmp);
        }
    }

    <span class="hljs-keyword">return</span> retarr;
}

module.exports <span class="hljs-operator">=</span> halfValue;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d1eb564857f20567031d8acd67fd474f00170a0dcee0b4c983cf9c35c75c29ca.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function countC(str) {
    let c = 0;
    let cstr = str.toLowerCase();
    let i = cstr.indexOf(&quot;c&quot;);

    while (-1 !== i) {
        c = c + 1;
        i = cstr.indexOf(&quot;c&quot;, i + 1);
    }

    return c;
}

module.exports = countC;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">countC</span>(<span class="hljs-params">str</span>) </span>{
    let c <span class="hljs-operator">=</span> <span class="hljs-number">0</span>;
    let cstr <span class="hljs-operator">=</span> str.toLowerCase();
    let i <span class="hljs-operator">=</span> cstr.indexOf(<span class="hljs-string">"c"</span>);

    <span class="hljs-keyword">while</span> (<span class="hljs-number">-1</span> <span class="hljs-operator">!</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> i) {
        c <span class="hljs-operator">=</span> c <span class="hljs-operator">+</span> <span class="hljs-number">1</span>;
        i <span class="hljs-operator">=</span> cstr.indexOf(<span class="hljs-string">"c"</span>, i <span class="hljs-operator">+</span> <span class="hljs-number">1</span>);
    }

    <span class="hljs-keyword">return</span> c;
}

module.exports <span class="hljs-operator">=</span> countC;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/33edbff5c6a645498820cce2e46444be7f9d736955756eb04db3f6c1992d6ffc.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function countVowels(str) {
    let vowels = &quot;aeiou&quot;;
    let c = 0;
    let vowelstr = str.toLowerCase();

    for (let i = 0; i &lt; vowelstr.length; i++) {
        if (-1 !== vowels.indexOf(vowelstr[i])) {
            c = c + 1;
        }
    }

    return c;
}

module.exports = countVowels;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">countVowels</span>(<span class="hljs-params">str</span>) </span>{
    let vowels <span class="hljs-operator">=</span> <span class="hljs-string">"aeiou"</span>;
    let c <span class="hljs-operator">=</span> <span class="hljs-number">0</span>;
    let vowelstr <span class="hljs-operator">=</span> str.toLowerCase();

    <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> vowelstr.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
        <span class="hljs-keyword">if</span> (<span class="hljs-number">-1</span> <span class="hljs-operator">!</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> vowels.indexOf(vowelstr[i])) {
            c <span class="hljs-operator">=</span> c <span class="hljs-operator">+</span> <span class="hljs-number">1</span>;
        }
    }

    <span class="hljs-keyword">return</span> c;
}

module.exports <span class="hljs-operator">=</span> countVowels;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/1ab28df7caf93ef6e68446c45011240af8da241d857f560008ca54c12c89a31c.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function reverse(string) {
    let retstr = &quot;&quot;;
    for (let i = 0; i &lt; string.length; i++) {
        retstr = string[i] + retstr;
    }

    return retstr;
}

module.exports = reverse;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">reverse</span>(<span class="hljs-params"><span class="hljs-keyword">string</span></span>) </span>{
    let retstr <span class="hljs-operator">=</span> <span class="hljs-string">""</span>;
    <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> <span class="hljs-built_in">string</span>.length; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
        retstr <span class="hljs-operator">=</span> <span class="hljs-keyword">string</span>[i] <span class="hljs-operator">+</span> retstr;
    }

    <span class="hljs-keyword">return</span> retstr;
}

module.exports <span class="hljs-operator">=</span> reverse;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b7700771d37a21db7914f833a7219f7fa3009a915da9c7e43252d41dd8073849.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function isPalindrome(string) {
    let i = 0;
    let endi = string.length - 1;
    while (endi &gt;= i) {
        if (string[i] === string[endi]) {
            i = i + 1;
            endi = endi - 1;
        } else {
            return false;
        }
    }

    return true;
}

module.exports = isPalindrome;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">isPalindrome</span>(<span class="hljs-params"><span class="hljs-keyword">string</span></span>) </span>{
    let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>;
    let endi <span class="hljs-operator">=</span> <span class="hljs-built_in">string</span>.length <span class="hljs-operator">-</span> <span class="hljs-number">1</span>;
    <span class="hljs-keyword">while</span> (endi <span class="hljs-operator">></span><span class="hljs-operator">=</span> i) {
        <span class="hljs-keyword">if</span> (<span class="hljs-keyword">string</span>[i] <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-keyword">string</span>[endi]) {
            i <span class="hljs-operator">=</span> i <span class="hljs-operator">+</span> <span class="hljs-number">1</span>;
            endi <span class="hljs-operator">=</span> endi <span class="hljs-operator">-</span> <span class="hljs-number">1</span>;
        } <span class="hljs-keyword">else</span> {
            <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
        }
    }

    <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>;
}

module.exports <span class="hljs-operator">=</span> isPalindrome;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/244b8921f2562b0d6dc511d53f17b93175b5566f1e42c96933ca26ef65f26ce3.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function sumTogether(arr1, arr2) {
    let a = [];

    for (let i = 0; i &lt; arr1.length; i++) {
        a[i] = arr1[i] + arr2[i];
    }

    return a;
}

module.exports = sumTogether;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">sumTogether</span>(<span class="hljs-params">arr1, arr2</span>) </span>{
    let a <span class="hljs-operator">=</span> [];

    <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> arr1.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
        a[i] <span class="hljs-operator">=</span> arr1[i] <span class="hljs-operator">+</span> arr2[i];
    }

    <span class="hljs-keyword">return</span> a;
}

module.exports <span class="hljs-operator">=</span> sumTogether;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/689448d098d232bd7474f459f50f08db45c47942a17b53aee08a13efc4e67741.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function countElements(elements) {
    let countEle = {};

    for (let i = 0; i &lt; elements.length; i++) {
        if (countEle.hasOwnProperty(elements[i])) {
            countEle[elements[i]] = countEle[elements[i]] + 1;
        } else {
            countEle[elements[i]] = 1;
        }
    }

    return countEle;
}

module.exports = countElements;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">countElements</span>(<span class="hljs-params">elements</span>) </span>{
    let countEle <span class="hljs-operator">=</span> {};

    <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> elements.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
        <span class="hljs-keyword">if</span> (countEle.hasOwnProperty(elements[i])) {
            countEle[elements[i]] <span class="hljs-operator">=</span> countEle[elements[i]] <span class="hljs-operator">+</span> <span class="hljs-number">1</span>;
        } <span class="hljs-keyword">else</span> {
            countEle[elements[i]] <span class="hljs-operator">=</span> <span class="hljs-number">1</span>;
        }
    }

    <span class="hljs-keyword">return</span> countEle;
}

module.exports <span class="hljs-operator">=</span> countElements;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b015aa8604bc1acda861bb78c4f559aabd637af97413c0f657f3372b1d92bc63.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function playerHandScore(hand) {
    const jqkScore = { &quot;J&quot;: 2, &quot;Q&quot;: 3, &quot;K&quot;: 4 };
    let s = 0;

    for (let i = 0; i &lt; hand.length; i++) {
        s = s + jqkScore[hand[i]];
    }

    return s;
}

module.exports = playerHandScore;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">playerHandScore</span>(<span class="hljs-params">hand</span>) </span>{
    const jqkScore <span class="hljs-operator">=</span> { <span class="hljs-string">"J"</span>: <span class="hljs-number">2</span>, <span class="hljs-string">"Q"</span>: <span class="hljs-number">3</span>, <span class="hljs-string">"K"</span>: <span class="hljs-number">4</span> };
    let s <span class="hljs-operator">=</span> <span class="hljs-number">0</span>;

    <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> hand.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
        s <span class="hljs-operator">=</span> s <span class="hljs-operator">+</span> jqkScore[hand[i]];
    }

    <span class="hljs-keyword">return</span> s;
}

module.exports <span class="hljs-operator">=</span> playerHandScore;
</code></pre><h2 id="h-djap-an-logical-operators" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">đáp án LOGICAL OPERATORS</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b5f961eb9cb1bf0ef0e0191fc2e2e5774abb5451ae87ec233d3df42bceb76f7f.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/5878875e7549c54d7678c54ba7442c0eeb6d78fa04b82c76624e49d7c8b49c54.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function willEat(hasPizza, hasDonuts, hasCookies) {
    if (hasPizza || hasDonuts || hasCookies) {
        return true;
    } else {
        return false;
    }
}

module.exports = willEat;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">willEat</span>(<span class="hljs-params">hasPizza, hasDonuts, hasCookies</span>) </span>{
    <span class="hljs-keyword">if</span> (hasPizza <span class="hljs-operator">|</span><span class="hljs-operator">|</span> hasDonuts <span class="hljs-operator">|</span><span class="hljs-operator">|</span> hasCookies) {
        <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>;
    } <span class="hljs-keyword">else</span> {
        <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
    }
}

module.exports <span class="hljs-operator">=</span> willEat;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/5a45454c2957fcc2eb716770504e21673ba22c96b642a7a556ea853102c11508.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function double(x) {
    const def = x || &quot;Undefined&quot;;

    if (&quot;Undefined&quot; === def) {
        return 0;
    } else {
        return x * 2;
    }
}

module.exports = double;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">double</span>(<span class="hljs-params">x</span>) </span>{
    const def <span class="hljs-operator">=</span> x <span class="hljs-operator">|</span><span class="hljs-operator">|</span> <span class="hljs-string">"Undefined"</span>;

    <span class="hljs-keyword">if</span> (<span class="hljs-string">"Undefined"</span> <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> def) {
        <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
    } <span class="hljs-keyword">else</span> {
        <span class="hljs-keyword">return</span> x <span class="hljs-operator">*</span> <span class="hljs-number">2</span>;
    }
}

module.exports <span class="hljs-operator">=</span> double;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a40b839337554ce26865867258b8903345f30538abf9d93069e37a55f40ea5e7.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function canBreathe(isConnected, hasOxygen, aboveWater) {
    if (aboveWater) {
        return true;
    }
    if (isConnected &amp;&amp; hasOxygen) {
        return true;
    }
    if (isConnected &amp;&amp; aboveWater) {
        return true;
    }

    return false;
}

module.exports = canBreathe;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">canBreathe</span>(<span class="hljs-params">isConnected, hasOxygen, aboveWater</span>) </span>{
    <span class="hljs-keyword">if</span> (aboveWater) {
        <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>;
    }
    <span class="hljs-keyword">if</span> (isConnected <span class="hljs-operator">&#x26;</span><span class="hljs-operator">&#x26;</span> hasOxygen) {
        <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>;
    }
    <span class="hljs-keyword">if</span> (isConnected <span class="hljs-operator">&#x26;</span><span class="hljs-operator">&#x26;</span> aboveWater) {
        <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>;
    }

    <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
}

module.exports <span class="hljs-operator">=</span> canBreathe;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/5479f120969020ce3f66c19a218a82131f321d8b7060086e58c10d028c20abec.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function friendName(friend) {
    if (friend) {
        if (typeof (friend.name) != &quot;undefined&quot;) {
            return friend.name;
        }
    }
}

module.exports = friendName;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">friendName</span>(<span class="hljs-params">friend</span>) </span>{
    <span class="hljs-keyword">if</span> (friend) {
        <span class="hljs-keyword">if</span> (typeof (friend.<span class="hljs-built_in">name</span>) <span class="hljs-operator">!</span><span class="hljs-operator">=</span> <span class="hljs-string">"undefined"</span>) {
            <span class="hljs-keyword">return</span> friend.<span class="hljs-built_in">name</span>;
        }
    }
}

module.exports <span class="hljs-operator">=</span> friendName;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/ea26da5a6c9e01315547d290250be3eaf89f9bd63559d7c003ce6cf504d5512b.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function carCrossing(aCrossing, bCrossing) {
    if (aCrossing) {
        if (bCrossing) {
            return false;
        } else {
            return true;
        }
    } else {
        if (bCrossing) {
            return true;
        } else {
            return false;
        }
    }
}

module.exports = carCrossing;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">carCrossing</span>(<span class="hljs-params">aCrossing, bCrossing</span>) </span>{
    <span class="hljs-keyword">if</span> (aCrossing) {
        <span class="hljs-keyword">if</span> (bCrossing) {
            <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
        } <span class="hljs-keyword">else</span> {
            <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>;
        }
    } <span class="hljs-keyword">else</span> {
        <span class="hljs-keyword">if</span> (bCrossing) {
            <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>;
        } <span class="hljs-keyword">else</span> {
            <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
        }
    }
}

module.exports <span class="hljs-operator">=</span> carCrossing;
</code></pre><h2 id="h-djap-an-exceptions" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">đáp án EXCEPTIONS</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c743be24b95a2f26c46d31895eb6ea188eb897f6ca023ea17fe9d5c2cebd6995.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="
"><code></code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/70ebe9b988a3127fb0aecef6580a5985cfc9c0b404de06c567632999b3cd5536.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function throwError() {
    throw new Error(&quot;ee error !!.&quot;);
}

module.exports = throwError;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">throwError</span>(<span class="hljs-params"></span>) </span>{
    <span class="hljs-keyword">throw</span> <span class="hljs-keyword">new</span> <span class="hljs-built_in">Error</span>(<span class="hljs-string">"ee error !!."</span>);
}

module.exports <span class="hljs-operator">=</span> throwError;
</code></pre><pre data-type="codeBlock" text="
"><code></code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/62aa876ace10e3d27b9dc5826239317edd54098604cb9ad44cd923e2e92f2ea7.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function catchError(fn) {
    try {
        fn();
    } catch (ex) {
        console.log(ex);
    }
}

module.exports = catchError;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">catchError</span>(<span class="hljs-params">fn</span>) </span>{
    <span class="hljs-keyword">try</span> {
        fn();
    } <span class="hljs-keyword">catch</span> (ex) {
        console.log(ex);
    }
}

module.exports <span class="hljs-operator">=</span> catchError;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/42be023d4e42a579c27df237d9ff517c9e14b4b872fe756d9a91a81fa1f3b5ad.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function catchError(fn) {
    try {
        fn();
    } catch (ex) {
        return ex;
    }

    return false;
}

module.exports = catchError;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">catchError</span>(<span class="hljs-params">fn</span>) </span>{
    <span class="hljs-keyword">try</span> {
        fn();
    } <span class="hljs-keyword">catch</span> (ex) {
        <span class="hljs-keyword">return</span> ex;
    }

    <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
}

module.exports <span class="hljs-operator">=</span> catchError;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/71884d0f71d01608026c9f6c50ccfdec5b55d50a280113ccfed0aeb98999647f.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function startError() {
    let abc;

    abc.prop;
}

module.exports = startError;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">startError</span>(<span class="hljs-params"></span>) </span>{
    let abc;

    abc.prop;
}

module.exports <span class="hljs-operator">=</span> startError;
</code></pre><h2 id="h-djap-an-type-conversion" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">đáp án TYPE CONVERSION</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b0c1dad73701c8726e3375a8bda320028a2811a31a045ff19dec084c51efedae.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/47ddb8a46723160fe75e35b899b6282d0bffa57837c3528226926c2b4b3e20f8.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function toNumber(string) {
    let n = Number(string);
    if (isNaN(n)) {
        return 0;
    } else {
        return n;
    }
}

module.exports = toNumber;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">toNumber</span>(<span class="hljs-params"><span class="hljs-keyword">string</span></span>) </span>{
    let n <span class="hljs-operator">=</span> Number(<span class="hljs-keyword">string</span>);
    <span class="hljs-keyword">if</span> (isNaN(n)) {
        <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
    } <span class="hljs-keyword">else</span> {
        <span class="hljs-keyword">return</span> n;
    }
}

module.exports <span class="hljs-operator">=</span> toNumber;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/044b18c6397d606161663bce344a47ada3452e081afe5c1c77b0f25ce4f8dd6a.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function combineToString(a, b) {
    return String(a) + String(b);
}

module.exports = combineToString;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">combineToString</span>(<span class="hljs-params">a, b</span>) </span>{
    <span class="hljs-keyword">return</span> String(a) <span class="hljs-operator">+</span> String(b);
}

module.exports <span class="hljs-operator">=</span> combineToString;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/dc76c5126209f663ef1aaed9f2c433b1ba994a15e62e87ddc20b0006691a8449.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function isTruthy(a) {
    return Boolean(a);
}

module.exports = isTruthy;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">isTruthy</span>(<span class="hljs-params">a</span>) </span>{
    <span class="hljs-keyword">return</span> Boolean(a);
}

module.exports <span class="hljs-operator">=</span> isTruthy;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/4cdc5e09a6edbc9f564c9b3d1a2bcd2d61aa8064ca2aa61b78ccf4494d3112a1.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function looseEquals(a, b) {
    return a == b;
}

module.exports = looseEquals;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">looseEquals</span>(<span class="hljs-params">a, b</span>) </span>{
    <span class="hljs-keyword">return</span> a <span class="hljs-operator">=</span><span class="hljs-operator">=</span> b;
}

module.exports <span class="hljs-operator">=</span> looseEquals;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/0df39018a5bf95bfb7f27577c7226f76810e33ced4d3fcda5b12703ca0f0456d.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function toJSON(obj) {
    return JSON.stringify(obj);
}

module.exports = toJSON;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">toJSON</span>(<span class="hljs-params">obj</span>) </span>{
    <span class="hljs-keyword">return</span> JSON.stringify(obj);
}

module.exports <span class="hljs-operator">=</span> toJSON;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/6b9bbaaf661fdb2c5f50b821710487028c290a5d78901a2bb2c8b272ef02c269.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const personJSON = `
    {
        &quot;name&quot;: &quot;jami&quot;,
        &quot;age&quot;: 36,
        &quot;isReal&quot;: false
    } 
`;

module.exports = personJSON;
"><code>const personJSON <span class="hljs-operator">=</span> `
    {
        <span class="hljs-string">"name"</span>: <span class="hljs-string">"jami"</span>,
        <span class="hljs-string">"age"</span>: <span class="hljs-number">36</span>,
        <span class="hljs-string">"isReal"</span>: <span class="hljs-literal">false</span>
    } 
`;

module.exports <span class="hljs-operator">=</span> personJSON;
</code></pre>]]></content:encoded>
            <author>cryptovuive@newsletter.paragraph.com (meteosrds)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/bbc14d3f25daff04a591cff054b18d30ff36bee225bc6902e794d51b2c353670.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[The basic - phần 1 ]]></title>
            <link>https://paragraph.com/@cryptovuive/the-basic-ph-n-1</link>
            <guid>LTwkuAG3dvlHfvwat3rE</guid>
            <pubDate>Wed, 14 Dec 2022 09:03:20 GMT</pubDate>
            <description><![CDATA[sau khi đăng ký xong và vào trong thì nó sẽ có giao diện như này mọi người chọn như trên ảnhnhững chỗ nào không có bảng code hiện ra thì mọi người cứ bấm next bỏ quakhi có bảng code hiện ra thì mọi người chỉ cần nhìn cái tên như số 1 và copy đúng đoạn code ở các đáp án bên dưới để paste vào 2 và chạy run test là xong1. đáp án intro to javascritconst a = 3module.exports = a; như này là thành công và next sang bài tiếp theoconst a = 5; const b = a; module.exports = { a, b } const a = false; con...]]></description>
            <content:encoded><![CDATA[<p>sau khi đăng ký xong và vào trong thì nó sẽ có giao diện như này mọi người chọn như trên ảnh</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/1abb8a2b27ed14b2782f65ef6a5b6e137e73bd6f7e5ad4042ddf7dd723afac05.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>những chỗ nào không có bảng code hiện ra thì mọi người cứ bấm next bỏ qua</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/5f64f641e3d98bb86ea8d52a774a70fcbb23ed4b8f1407f0375e4bb29297511d.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>khi có bảng code hiện ra thì mọi người chỉ cần nhìn cái tên như số 1 và <strong>copy</strong> đúng đoạn code ở các đáp án bên dưới để <strong>paste</strong> vào 2 và chạy <strong>run test</strong> là xong</p><h2 id="h-1-djap-an-intro-to-javascrit" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">1. đáp án intro to javascrit</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/56512aa0220d1dd3dd0fd0ee34effa500e69042877bb4ea5218e5b88e678fd9a.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/2f58242b3f227c4b76f62ef6455eaabafc4f77ed78dfc745d72f22dc8faa8ffc.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h3 id="h-const-a-3" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">const a = 3</h3><p>module.exports = a;</p><p>như này là thành công và next sang bài tiếp theo</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/14ef0128eaa4a2077ba4d21722f05dc88a19a7b10c40771d8264a1a0329f450f.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/92be92d4ff3e53f12a7737816c9d981aff2faba2243fde702d29a64bccf1240f.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const a = 5;
const b = a;

module.exports = { a, b }
"><code>const <span class="hljs-attr">a</span> = <span class="hljs-number">5</span><span class="hljs-comment">;</span>
const <span class="hljs-attr">b</span> = a<span class="hljs-comment">;</span>

<span class="hljs-attr">module.exports</span> = { a, b }
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/add24ad75264f24b2e0bf428625f7ab659c1dc7d14896005f23e38865f62dfef.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const a = false;
const b = true;

module.exports = { a, b }
"><code>const <span class="hljs-attr">a</span> = <span class="hljs-literal">false</span><span class="hljs-comment">;</span>
const <span class="hljs-attr">b</span> = <span class="hljs-literal">true</span><span class="hljs-comment">;</span>

<span class="hljs-attr">module.exports</span> = { a, b }
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/7e328c1e9c1a06865465435e7afa9d6b9729b11dfb9cf1d885bea0a79c7af3a9.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const a = &quot;World&quot;;
const b = &quot;Hello World&quot;

module.exports = { a,b }
"><code>const <span class="hljs-attr">a</span> = <span class="hljs-string">"World"</span><span class="hljs-comment">;</span>
const <span class="hljs-attr">b</span> = <span class="hljs-string">"Hello World"</span>

<span class="hljs-attr">module.exports</span> = { a,b }
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/dcc63a47f0cb4a5921159d8ab38c62361fd15e882e026533393a8b652c632f7b.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="let a = 3;

a = 5;

module.exports = a;
"><code>let <span class="hljs-attr">a</span> = <span class="hljs-number">3</span><span class="hljs-comment">;</span>

<span class="hljs-attr">a</span> = <span class="hljs-number">5</span><span class="hljs-comment">;</span>

<span class="hljs-attr">module.exports</span> = a<span class="hljs-comment">;</span>
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/4e6767db4e90c103f92679ed88d0344e743bdc3c72cfb4db17109337734db934.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="// all shoes are on sale this week!
const shoesCost = 49;

module.exports = shoesCost;
"><code>// all shoes are on sale this week!
const <span class="hljs-attr">shoesCost</span> = <span class="hljs-number">49</span><span class="hljs-comment">;</span>

<span class="hljs-attr">module.exports</span> = shoesCost<span class="hljs-comment">;</span>
</code></pre><h2 id="h-2djap-an-functions-and-operators" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">2.đáp án Functions and operators</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/71a6ca86be5d0c1874f3e813d27135337dffd02c85fdbb4eb042c42802e8e5f0.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/43967f5f2a06efe6c3ae2731b0a8a9377d66e1dde9b01b722e10d2ba4cecc2d8.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function getMessage() {
    return &quot;Hello World!&quot;;
}

module.exports = getMessage;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getMessage</span>(<span class="hljs-params"></span>) </span>{
    <span class="hljs-keyword">return</span> <span class="hljs-string">"Hello World!"</span>;
}

module.exports <span class="hljs-operator">=</span> getMessage;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/f299bd20190c616e811c124dc8c39ec7594694bdd2adbc1cfc674288337d4500.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function addTwo(input) {
    return input + 2;
}

module.exports = addTwo;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">addTwo</span>(<span class="hljs-params">input</span>) </span>{
    <span class="hljs-keyword">return</span> input <span class="hljs-operator">+</span> <span class="hljs-number">2</span>;
}

module.exports <span class="hljs-operator">=</span> addTwo;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/2f5cb4aa1c2aa5ddfaaad8b9c0cf4098632509a048a0ca73adf45d1a1cf6ff16.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function product(a,b) {
    return a * b;
}

module.exports = product;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">product</span>(<span class="hljs-params">a,b</span>) </span>{
    <span class="hljs-keyword">return</span> a <span class="hljs-operator">*</span> b;
}

module.exports <span class="hljs-operator">=</span> product;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/8962706579e3875b556b4c9c28a8ebd437fe09b11181ac6b029f9d58ea17a061.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function average(a, b, c, d) {
    return average = (a + b + c + d) / 4;
    
}

module.exports = average;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">average</span>(<span class="hljs-params">a, b, c, d</span>) </span>{
    <span class="hljs-keyword">return</span> average <span class="hljs-operator">=</span> (a <span class="hljs-operator">+</span> b <span class="hljs-operator">+</span> c <span class="hljs-operator">+</span> d) <span class="hljs-operator">/</span> <span class="hljs-number">4</span>;
    
}

module.exports <span class="hljs-operator">=</span> average;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/9b0dac14169257084c47675a92f96453a6f8b242110e55b8b30b5733c37b689b.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function getRandom() {
    return getRandom = Math.random();
}

module.exports = getRandom;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getRandom</span>(<span class="hljs-params"></span>) </span>{
    <span class="hljs-keyword">return</span> getRandom <span class="hljs-operator">=</span> Math.random();
}

module.exports <span class="hljs-operator">=</span> getRandom;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/92679c0843181f7a86be02a85aa4dc85e7646bb1a0c01dadc13af56feb253cea.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function getFloor(x) {
    return x = Math.floor(x);
}

module.exports = getFloor;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getFloor</span>(<span class="hljs-params">x</span>) </span>{
    <span class="hljs-keyword">return</span> x <span class="hljs-operator">=</span> Math.floor(x);
}

module.exports <span class="hljs-operator">=</span> getFloor;
</code></pre><h2 id="h-3-djap-an-conditionals" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">3. đáp án Conditionals</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/9daf34177e5459d037ba5c992b31a608c2529df38783d1ecdb52453ec2578543.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/136fb09b903fa2f61cf74c81eff800953ceb405909d611f752aea2e630fcc075.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="code bên dưới 
"><code><span class="hljs-selector-tag">code</span> <span class="hljs-selector-tag">b</span>ên dướ<span class="hljs-selector-tag">i</span> 
</code></pre><p>function isEqual(a, b) { return a === b; }</p><p>module.exports = isEqual;</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/4ebbd1d6a13fcfa11eaffe4f1d72d81069060d0941866d93d0c76173bb762828.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function isNotEqual(a, b) {
    if (a !== b) {
        return true;
    }
    else {
        return false;
    }
}

module.exports = isNotEqual;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">isNotEqual</span>(<span class="hljs-params">a, b</span>) </span>{
    <span class="hljs-keyword">if</span> (a <span class="hljs-operator">!</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> b) {
        <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>;
    }
    <span class="hljs-keyword">else</span> {
        <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
    }
}

module.exports <span class="hljs-operator">=</span> isNotEqual;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d53130f1430a5e8f19e1e040e65447e4579e13f1b1cde8fe09f34c7c5ffe637d.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function isNotEqual(a, b) {
    if (a !== b) {
        return true;
    }
    else {
        return false;
    }
}

module.exports = isNotEqual;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">isNotEqual</span>(<span class="hljs-params">a, b</span>) </span>{
    <span class="hljs-keyword">if</span> (a <span class="hljs-operator">!</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> b) {
        <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>;
    }
    <span class="hljs-keyword">else</span> {
        <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
    }
}

module.exports <span class="hljs-operator">=</span> isNotEqual;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/7fbb4a94ff430f918e8798e70ad7c830f074017fb555fb3412d14a99c20bd76e.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function greater(first, last) {
    if (first &gt; last) {
        return first;
    }
    else if (last &gt; first) {
        return last;
    }
}

module.exports = greater;
"><code><span class="hljs-keyword">function</span> greater(<span class="hljs-keyword">first</span>, <span class="hljs-keyword">last</span>) {
    if (<span class="hljs-keyword">first</span> <span class="hljs-operator">></span> <span class="hljs-keyword">last</span>) {
        <span class="hljs-keyword">return</span> <span class="hljs-keyword">first</span>;
    }
    <span class="hljs-keyword">else</span> if (<span class="hljs-keyword">last</span> <span class="hljs-operator">></span> <span class="hljs-keyword">first</span>) {
        <span class="hljs-keyword">return</span> <span class="hljs-keyword">last</span>;
    }
}

module.exports <span class="hljs-operator">=</span> greater;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d13c012ecf4f18adf89958e9c3186708cdc3e3969650c27c7ad9c65b51e048f1.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function isEnough(cost, money) {
    return money &gt;= cost;
}

module.exports = isEnough;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">isEnough</span>(<span class="hljs-params">cost, money</span>) </span>{
    <span class="hljs-keyword">return</span> money <span class="hljs-operator">></span><span class="hljs-operator">=</span> cost;
}

module.exports <span class="hljs-operator">=</span> isEnough;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/1a88fdc66a7e24e8b5e28f76d78e2fa4e276d233b0bc95e54358277cbd5810d2.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function canAccess(purchasedSubscription, freeTrial) {
    if (purchasedSubscription) {
        return true;
    } else if (freeTrial) {
        return true;
    } else {
        return false;
    }
}

module.exports = canAccess;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">canAccess</span>(<span class="hljs-params">purchasedSubscription, freeTrial</span>) </span>{
    <span class="hljs-keyword">if</span> (purchasedSubscription) {
        <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>;
    } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (freeTrial) {
        <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>;
    } <span class="hljs-keyword">else</span> {
        <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
    }
}

module.exports <span class="hljs-operator">=</span> canAccess;
</code></pre><h2 id="h-4-djap-an-loops" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">4. đáp án loops</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/77a91ca6e988de0ac172188550d2fc90d56a0411d3f9e5fe03c40237e21bbb99.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a884144a81a2cda931cce3593b6e60940cbc56734938025d4f57d2ff6a7cd769.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function summation(n) {
    let s = 0;

    for (let i = 1; i &lt;= n; i++) {
        s = s + i;
    }

    return s;
}

module.exports = summation;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">summation</span>(<span class="hljs-params">n</span>) </span>{
    let s <span class="hljs-operator">=</span> <span class="hljs-number">0</span>;

    <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">1</span>; i <span class="hljs-operator">&#x3C;</span><span class="hljs-operator">=</span> n; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
        s <span class="hljs-operator">=</span> s <span class="hljs-operator">+</span> i;
    }

    <span class="hljs-keyword">return</span> s;
}

module.exports <span class="hljs-operator">=</span> summation;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/2fd0fbad194b930ec045a8e560e257b6b05276f7666372caec582e4d41f5a295.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function factorial(n) {
    let r = 1;
    for (let i = n; i &gt;= 1; i--) {
        r = r * i;
    }

    return r;
}

module.exports = factorial;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">factorial</span>(<span class="hljs-params">n</span>) </span>{
    let r <span class="hljs-operator">=</span> <span class="hljs-number">1</span>;
    <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> n; i <span class="hljs-operator">></span><span class="hljs-operator">=</span> <span class="hljs-number">1</span>; i<span class="hljs-operator">-</span><span class="hljs-operator">-</span>) {
        r <span class="hljs-operator">=</span> r <span class="hljs-operator">*</span> i;
    }

    <span class="hljs-keyword">return</span> r;
}

module.exports <span class="hljs-operator">=</span> factorial;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e730ddb4375c8c5e60b5ace13f48f27cd7bc65d1a60410a699f1526a70103a23.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function scream(n) {
    let s = &quot;&quot;;
    for(let i = 1; i &lt;= n; i++) {
        s += &quot;a&quot;;
    }

    return s;
}

module.exports = scream;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">scream</span>(<span class="hljs-params">n</span>) </span>{
    let s <span class="hljs-operator">=</span> <span class="hljs-string">""</span>;
    <span class="hljs-keyword">for</span>(let i <span class="hljs-operator">=</span> <span class="hljs-number">1</span>; i <span class="hljs-operator">&#x3C;</span><span class="hljs-operator">=</span> n; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
        s <span class="hljs-operator">+</span><span class="hljs-operator">=</span> <span class="hljs-string">"a"</span>;
    }

    <span class="hljs-keyword">return</span> s;
}

module.exports <span class="hljs-operator">=</span> scream;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/596b2ace8d5b10688cc0a8559dd19b60f959aad0d887f46fcb9e8bb5407af321.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function scream(n) {
    let returnStr = &quot;&quot;;

    returnStr += &quot;a&quot;;
    oddeven = n % 2;

    if (0 === oddeven) {
        for (let i = n - 1; i &gt;= 1; i--) {
            oe = i % 2;

            if (oe === 0) {
                returnStr += &quot;a&quot;;
            }
            else {
                returnStr += &quot;A&quot;;
            }
        }
    }
    else {
        for (let i = n - 1; i &gt;= 1; i--) {
            oe = i % 2;

            if (oe === 0) {
                returnStr += &quot;A&quot;;
            }
            else {
                returnStr += &quot;a&quot;;
            }
        }
    }

    return returnStr;
}

module.exports = scream;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">scream</span>(<span class="hljs-params">n</span>) </span>{
    let returnStr <span class="hljs-operator">=</span> <span class="hljs-string">""</span>;

    returnStr <span class="hljs-operator">+</span><span class="hljs-operator">=</span> <span class="hljs-string">"a"</span>;
    oddeven <span class="hljs-operator">=</span> n <span class="hljs-operator">%</span> <span class="hljs-number">2</span>;

    <span class="hljs-keyword">if</span> (<span class="hljs-number">0</span> <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> oddeven) {
        <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> n <span class="hljs-operator">-</span> <span class="hljs-number">1</span>; i <span class="hljs-operator">></span><span class="hljs-operator">=</span> <span class="hljs-number">1</span>; i<span class="hljs-operator">-</span><span class="hljs-operator">-</span>) {
            oe <span class="hljs-operator">=</span> i <span class="hljs-operator">%</span> <span class="hljs-number">2</span>;

            <span class="hljs-keyword">if</span> (oe <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-number">0</span>) {
                returnStr <span class="hljs-operator">+</span><span class="hljs-operator">=</span> <span class="hljs-string">"a"</span>;
            }
            <span class="hljs-keyword">else</span> {
                returnStr <span class="hljs-operator">+</span><span class="hljs-operator">=</span> <span class="hljs-string">"A"</span>;
            }
        }
    }
    <span class="hljs-keyword">else</span> {
        <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> n <span class="hljs-operator">-</span> <span class="hljs-number">1</span>; i <span class="hljs-operator">></span><span class="hljs-operator">=</span> <span class="hljs-number">1</span>; i<span class="hljs-operator">-</span><span class="hljs-operator">-</span>) {
            oe <span class="hljs-operator">=</span> i <span class="hljs-operator">%</span> <span class="hljs-number">2</span>;

            <span class="hljs-keyword">if</span> (oe <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-number">0</span>) {
                returnStr <span class="hljs-operator">+</span><span class="hljs-operator">=</span> <span class="hljs-string">"A"</span>;
            }
            <span class="hljs-keyword">else</span> {
                returnStr <span class="hljs-operator">+</span><span class="hljs-operator">=</span> <span class="hljs-string">"a"</span>;
            }
        }
    }

    <span class="hljs-keyword">return</span> returnStr;
}

module.exports <span class="hljs-operator">=</span> scream;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a4df6f6e55262a35e6ecdf1e65fa547e284d44e30d85fbabb9d6af61f0606c33.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function topDouble(value, top) {
    let val = value;
    let r = val;
    while (val &lt; top) {
        r = val;
        val *= 2;
    }

    return r;
}

module.exports = topDouble;
"><code>function topDouble(value, top) {
    let <span class="hljs-attr">val</span> = value<span class="hljs-comment">;</span>
    let <span class="hljs-attr">r</span> = val<span class="hljs-comment">;</span>
    while (val &#x3C; top) {
        <span class="hljs-attr">r</span> = val<span class="hljs-comment">;</span>
        val *= 2<span class="hljs-comment">;</span>
    }

    return r<span class="hljs-comment">;</span>
}

<span class="hljs-attr">module.exports</span> = topDouble<span class="hljs-comment">;</span>
</code></pre><h2 id="h-5-djap-an-practice-problems-1-co-5-cai-cu-bam-next-la-djuoc" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">5. đáp án Practice Problems 1 có 5 cái cứ bấm next là được</h2><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/925708a355fa08fe4271d51a6ff1e9dac19ce92d66524443c2f735bf29e8d8e1.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/ebf469673c7040ec25911da8b247efb40892f8eda9a237c2cb66c1cfe321aa09.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function isEven(num) {
    isE = num % 2;
    return isE === 0;
}

module.exports = isEven;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">isEven</span>(<span class="hljs-params">num</span>) </span>{
    isE <span class="hljs-operator">=</span> num <span class="hljs-operator">%</span> <span class="hljs-number">2</span>;
    <span class="hljs-keyword">return</span> isE <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-number">0</span>;
}

module.exports <span class="hljs-operator">=</span> isEven;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/17251c1558664845dcbbc69bc175fc0d3d72c3bc7465f41ca0d5d3d307070735.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function smallerNumber(num1, num2) {
    if (num1 &gt; num2) {
        return num2;
    }
    else {
        return num1;
    }
}

module.exports = smallerNumber;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">smallerNumber</span>(<span class="hljs-params">num1, num2</span>) </span>{
    <span class="hljs-keyword">if</span> (num1 <span class="hljs-operator">></span> num2) {
        <span class="hljs-keyword">return</span> num2;
    }
    <span class="hljs-keyword">else</span> {
        <span class="hljs-keyword">return</span> num1;
    }
}

module.exports <span class="hljs-operator">=</span> smallerNumber;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/48638b2ae279dfbcaf4e8d5db4136c791ab357f0d57eebf9b34fa01c351f0994.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="const fakeName = require(&apos;./fakeName&apos;);

const message = `
    Hello, ${fakeName}! You left a package at the office today.
    You can pick up tomorrow at 10am, ${fakeName}. 
    If not I will drop it off this weekend.
    Goodbye ${fakeName}!
`;

module.exports = message;
"><code>const fakeName <span class="hljs-operator">=</span> <span class="hljs-built_in">require</span>(<span class="hljs-string">'./fakeName'</span>);

const message <span class="hljs-operator">=</span> `
    Hello, ${fakeName}<span class="hljs-operator">!</span> You left a package at the office today.
    You can pick up tomorrow at 10am, ${fakeName}. 
    If not I will drop it off <span class="hljs-built_in">this</span> weekend.
    Goodbye ${fakeName}<span class="hljs-operator">!</span>
`;

module.exports <span class="hljs-operator">=</span> message;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/6171842b8080d93602841b217c14406f236bcc0e7c16b7240506cdc505573061.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function checkNumber(num) {
    if (num &gt; 0) {
        return &quot;positive&quot;;
    } else if (num === 0) {
        return &quot;zero&quot;;
    } else {
        return &quot;negative&quot;;
    }
}

module.exports = checkNumber;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">checkNumber</span>(<span class="hljs-params">num</span>) </span>{
    <span class="hljs-keyword">if</span> (num <span class="hljs-operator">></span> <span class="hljs-number">0</span>) {
        <span class="hljs-keyword">return</span> <span class="hljs-string">"positive"</span>;
    } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (num <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-number">0</span>) {
        <span class="hljs-keyword">return</span> <span class="hljs-string">"zero"</span>;
    } <span class="hljs-keyword">else</span> {
        <span class="hljs-keyword">return</span> <span class="hljs-string">"negative"</span>;
    }
}

module.exports <span class="hljs-operator">=</span> checkNumber;
</code></pre><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/de9f62d9d35af5d47a68edda068322810647317e4f70d1ce60f86d10f2f19b1d.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><pre data-type="codeBlock" text="function maxSum(num) {
    if (num &lt; 0) {
        return 0;
    }

    let r = 0;
    for (let i = 1; i &lt;= num; i++) {
        r += i;
    }

    return r;
}

module.exports = maxSum;
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">maxSum</span>(<span class="hljs-params">num</span>) </span>{
    <span class="hljs-keyword">if</span> (num <span class="hljs-operator">&#x3C;</span> <span class="hljs-number">0</span>) {
        <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
    }

    let r <span class="hljs-operator">=</span> <span class="hljs-number">0</span>;
    <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">1</span>; i <span class="hljs-operator">&#x3C;</span><span class="hljs-operator">=</span> num; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
        r <span class="hljs-operator">+</span><span class="hljs-operator">=</span> i;
    }

    <span class="hljs-keyword">return</span> r;
}

module.exports <span class="hljs-operator">=</span> maxSum;
</code></pre><p><strong>kết thúc phần 1 có thể bấm đây qua phần 2 của basic luôn</strong> - <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/0x4450dB99260EC3140B4690F1c6bDd64d5d9644A9/wH-AHWMrZX8sYEE37KVu2eNM7zJK7XlLi7OoqTMxQcs">link</a></p>]]></content:encoded>
            <author>cryptovuive@newsletter.paragraph.com (meteosrds)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/bbc14d3f25daff04a591cff054b18d30ff36bee225bc6902e794d51b2c353670.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Sui Name Service ($SNS)]]></title>
            <link>https://paragraph.com/@cryptovuive/sui-name-service-sns</link>
            <guid>jQKuqmX7ooPJOoFw0Clo</guid>
            <pubDate>Sat, 10 Dec 2022 03:33:58 GMT</pubDate>
            <description><![CDATA[twitter :discord :Discord - Group Chat That&#x27;s All Fun & GamesDiscord is great for playing games and chilling with friends, or even building a worldwide community. Customize your own space to talk, play, and hang out.https://discord.comIt&apos;s finally here! Join our Crew3 and earn your spot in the $SNS DAO ➤ http://snsdomains.crew3.xyz ➤ New Quests added Daily! 10 people to Like/RT this tweet will also be selected for the Stork role - Winners selected below. #Sui isn&apos;t ready. Let&a...]]></description>
            <content:encoded><![CDATA[<p>twitter :</p><div data-type="embedly" src="https://twitter.com/snsstork" data="{&quot;provider_url&quot;:&quot;https://twitter.com&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;title&quot;:&quot;JavaScript is not available.&quot;,&quot;url&quot;:&quot;https://twitter.com/snsstork&quot;,&quot;html&quot;:&quot;&lt;a class=\&quot;twitter-timeline\&quot; href=\&quot;https://twitter.com/snsstork?ref_src=twsrc%5Etfw\&quot;&gt;Tweets by snsstork&lt;/a&gt;\n&lt;script async src=\&quot;https://platform.twitter.com/widgets.js\&quot; charset=\&quot;utf-8\&quot;&gt;&lt;/script&gt;&quot;,&quot;provider_name&quot;:&quot;Twitter&quot;,&quot;cache_age&quot;:3153600000,&quot;type&quot;:&quot;rich&quot;}" format="iframe"></div><p>discord :</p><div data-type="embedly" src="https://discord.gg/snsdomains" data="{&quot;provider_url&quot;:&quot;https://discord.com&quot;,&quot;description&quot;:&quot;Discord is great for playing games and chilling with friends, or even building a worldwide community. Customize your own space to talk, play, and hang out.&quot;,&quot;title&quot;:&quot;Discord - Group Chat That&apos;s All Fun &amp; Games&quot;,&quot;mean_alpha&quot;:86.3007936508,&quot;thumbnail_width&quot;:1200,&quot;url&quot;:&quot;https://discord.com/invite/snsdomains&quot;,&quot;thumbnail_url&quot;:&quot;https://storage.googleapis.com/papyrus_images/fd5daf4cc4569214cd87e650d89285a0aac548020f1d6734eaffa8b0add2160e.png&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;Discord&quot;,&quot;type&quot;:&quot;link&quot;,&quot;thumbnail_height&quot;:630,&quot;image&quot;:{&quot;img&quot;:{&quot;width&quot;:1200,&quot;height&quot;:630,&quot;src&quot;:&quot;https://storage.googleapis.com/papyrus_images/fd5daf4cc4569214cd87e650d89285a0aac548020f1d6734eaffa8b0add2160e.png&quot;}}}" format="small"><link rel="preload" as="image" href="https://storage.googleapis.com/papyrus_images/fd5daf4cc4569214cd87e650d89285a0aac548020f1d6734eaffa8b0add2160e.png"/><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://discord.gg/snsdomains" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>Discord - Group Chat That&#x27;s All Fun &amp; Games</h2><p>Discord is great for playing games and chilling with friends, or even building a worldwide community. Customize your own space to talk, play, and hang out.</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://discord.com</span></div><img src="https://storage.googleapis.com/papyrus_images/fd5daf4cc4569214cd87e650d89285a0aac548020f1d6734eaffa8b0add2160e.png"/></div></a></div></div><p>It&apos;s finally here! Join our Crew3 and earn your spot in the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/search?q=%24SNS&amp;src=cashtag_click">$SNS</a> DAO</p><p>➤ <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/uGQotDDKTj">http://snsdomains.crew3.xyz</a></p><p>➤ New Quests added Daily! 10 people to Like/RT this tweet will also be selected for the Stork role - Winners selected below. <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/hashtag/Sui?src=hashtag_click">#Sui</a> isn&apos;t ready.</p><p>Let&apos;s get Acquainted! Meet the founder of the Sui Name Service in our 4th ever SNS blog post. This is a protocol by the people, for the people. Read more below: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://t.co/IaHAzwcWsh">https://blog.sns.domains/meet-the-team-1-6097ebbdc204</a></p>]]></content:encoded>
            <author>cryptovuive@newsletter.paragraph.com (meteosrds)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/9981efb0f3772b8b15f06a8caab1b958a4a3d10a12d6fc653a17db7befbb0b29.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[tương tác Harpie]]></title>
            <link>https://paragraph.com/@cryptovuive/t-ng-t-c-harpie</link>
            <guid>VN5PzOXT3Kr4Q4E6nQFZ</guid>
            <pubDate>Fri, 02 Dec 2022 16:51:11 GMT</pubDate>
            <description><![CDATA[liên kết víxem ví mình dùng cái nào thì chọn - ví hold token thì chọn cái trên , ví chơi nft thì chọn cái dưới hoặc chọn cả 2 cũng đcchọn cái nào muốn bảo vệđợi cho nó load xong và import token mạng eth hoặc nft nào mà mình muốn bảo vệadd bn token hay nft tùy thích - sau đó chọn protecttốn chút fee ethnhư vậy là xong bước 1tiếp theo chọn setupnhập địa chỉ ví - tốn fee eth - nhập 1 địa chỉ ví khác ví đang dùngtiếp theo đến bước 3chọn mint FAU - tốn fee ethBẤM protect faucet token - tốn fee eth...]]></description>
            <content:encoded><![CDATA[<p><strong>liên kết ví</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/f4ef92bd09e8c2458fe8912c36a0e987bb222da23b46371ae06fc22fd3f8ccc4.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>xem ví mình dùng cái nào thì chọn - ví hold token thì chọn cái trên , ví chơi nft thì chọn cái dưới</strong> <strong>hoặc chọn cả 2 cũng đc</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e85f1db27464b84020b67fa57249279688f9d7dbfb2592c77035d9c433246863.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>chọn cái nào muốn bảo vệ</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/8f7927dc8363ad48c33adf2d992a3f57c463872b459cae19bdb0a2ae9c67e4b6.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/5cf822c63f73107f384648dc0a6abd2656a6895872b8365f06134a97c4766728.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/7b40f40f6c2bcab98f7b5210e448c2b9736a9297f6ed981755100162293959cd.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/5ba20c061b9b51baff6d06c604058e0a1ec0226050a2768f5f5157d62f24fb18.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>đợi cho nó load xong và import token mạng eth hoặc nft nào mà mình muốn bảo vệ</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/aa5ab682a8580512d9d9dd592e4ed9dbe7459ea23cb26e9c89a0217cea21a38e.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>add bn token hay nft tùy thích - sau đó chọn protect</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/712ff79b6618ce5a9db6628b761951d9769d68a03ce3c73f3426df3cb118629b.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>tốn chút fee eth</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e4fcd766c7d8629663b160e3b08464883785e41f405e499a0de5afd2c871f4f0.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>như vậy là xong bước 1</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/fa73102807215d9ca5857f8ea1d17da03fa1f816e70e76bd25fc56ba242eb89d.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>tiếp theo chọn setup</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/46edf8e7501f9e88cad280d0dff240bae49f8fd399270a08bb1aa911949e903e.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d2c43f1c853f9b8ea8a0c1d06dbdd46cfb962d141691f7e1f1ca1592acfb5bd5.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>nhập địa chỉ ví - tốn fee eth - nhập 1 địa chỉ ví khác ví đang dùng</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/967214ba85ae2cfd83e2f5e59672076ecf45f39e717b644e570bf993ffffb4b6.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>tiếp theo đến bước 3</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/7cdecf5dcc278f0afb505935d5124622e4d48fac6c36e92ac0da5c72f26c5d52.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>chọn mint FAU - tốn fee eth</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c32b4fe84fd844b3404f3b00cde4c4b94d46fc27156f3e366a8be0f06c42d2ea.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>BẤM protect faucet token</strong> <strong>- tốn fee eth</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c17961a5038aeb17d5c1c6e57d4bbfd01fd9759fcf9fd3dd6f7851e5de6de07f.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>tiếp theo bấm begin live test - tốn fee eth</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/7d880b1997d4393f7432d52723a08cf004cb68a0a01105a8091c516047e449a9.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>quay lại my dashboad xem có như ảnh dưới chưa đồng thời check ví</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/2de3a1d627a9e2a3712ff4717337fae582e4dcf38d5e881d9cc4dbe5323f547e.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure>]]></content:encoded>
            <author>cryptovuive@newsletter.paragraph.com (meteosrds)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/845b56cfcc21c1be41134a9e2673c8e95187a78d3cecebbd44ace471fc09c7ac.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Manta cho window ]]></title>
            <link>https://paragraph.com/@cryptovuive/manta-cho-window</link>
            <guid>VjyRl3bEE0GnVL3rxfvs</guid>
            <pubDate>Mon, 21 Nov 2022 03:27:32 GMT</pubDate>
            <description><![CDATA[discord : link twitter: link điền from : link cần làm các bước như bên dưới để lấy public key và signature để điền form bước 1 : tải file này về - tải xong thì nên ném vào ổ D làm cho dễ k ở trong thư mục nào ( đường link nó chỉ là D:\ hoặc C:\ ) cái này dành cho những ai k quen dùng - còn ai quen dùng các bước bên dưới thì để đâu cũng đượcbước 2 : bấm window + R rùi gõ powershell để mở windows powershell bước 3 : rùi đến ổ mà lưu file vừa tải về khi mở powershell thì nó mặc định ở ổ C nhé - ...]]></description>
            <content:encoded><![CDATA[<p>discord : <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.gg/mantanetwork">link</a></p><p>twitter: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/MantaNetwork">link</a></p><p>điền from : <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mantanetwork.typeform.com/TrustedSetup">link</a></p><p>cần làm các bước như bên dưới để lấy public key và signature để điền form</p><p>bước 1 : tải file này về - tải xong thì nên ném vào ổ D làm cho dễ k ở trong thư mục nào ( đường link nó chỉ là D:\ hoặc C:\ ) cái này dành cho những ai k quen dùng - còn ai quen dùng các bước bên dưới thì để đâu cũng được</p><div data-type="embedly" src="https://github.com/Manta-Network/manta-rs/releases/download/v0.5.5/manta-trusted-setup-x86_64-pc-windows-msvc.exe" data="{&quot;url&quot;:&quot;https://release-assets.githubusercontent.com/github-production-release-asset/401879924/b1f2ad6e-1a30-4fd3-971c-57ac3d155b74?sp=r&amp;sv=2018-11-09&amp;sr=b&amp;spr=https&amp;se=2025-10-24T23%3A53%3A21Z&amp;rscd=attachment%3B+filename%3Dmanta-trusted-setup-x86_64-pc-windows-msvc.exe&amp;rsct=application%2Foctet-stream&amp;skoid=96c2d410-5711-43a1-aedd-ab1947aa7ab0&amp;sktid=398a6654-997b-47e9-b12b-9515b896b4de&amp;skt=2025-10-24T22%3A53%3A11Z&amp;ske=2025-10-24T23%3A53%3A21Z&amp;sks=b&amp;skv=2018-11-09&amp;sig=CCrHBzym35qUVtb7ZkbQjmeDu%2B29AYc5%2FGmpg8930BQ%3D&amp;jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmVsZWFzZS1hc3NldHMuZ2l0aHVidXNlcmNvbnRlbnQuY29tIiwia2V5Ijoia2V5MSIsImV4cCI6MTc2MTM0NzMzNiwibmJmIjoxNzYxMzQ3MDM2LCJwYXRoIjoicmVsZWFzZWFzc2V0cHJvZHVjdGlvbi5ibG9iLmNvcmUud2luZG93cy5uZXQifQ.Q6_mnXaFKt6kF70dczJVXjKfhSO7j5U9p8Nmc6NTm6E&amp;response-content-disposition=attachment%3B%20filename%3Dmanta-trusted-setup-x86_64-pc-windows-msvc.exe&amp;response-content-type=application%2Foctet-stream&quot;,&quot;provider_url&quot;:&quot;https://release-assets.githubusercontent.com&quot;,&quot;provider_name&quot;:&quot;Release-assets&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;type&quot;:&quot;link&quot;}" format="small"></div><p>bước 2 : bấm window + R rùi gõ <strong>powershell</strong> để mở windows powershell</p><p>bước 3 : rùi đến ổ mà lưu file vừa tải về</p><p>khi mở powershell thì nó mặc định ở ổ C nhé - nếu để file ở ổ C thì k cần di chuyển</p><p>còn ai để ở ổ D hay F thì nhập <strong>D:</strong> rùi bấm <strong>enter</strong></p><p>bước 4 : copy đoạn bên dưới nhập vào sau bấm enter</p><p><strong>./manta-trusted-setup-x86_64-pc-windows-msvc register</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/8bd358883b9ef340b957727c0c24a2ee61ecd452db6d4c75720b8aee1b2ca201.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>sau đó nó hiện ra chỗ để mình đăng ký nhập twitter và gmail</p><p>sau đó nó cho public key và mấy dòng dưới - copy điền vào form bên trên và cũng lưu lại chỗ nào đó sau này cần</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/2220848444c17593418f7d1f086de91846157d9954e34ba4a44b24484d389ba0.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>khi điền form đến cuối thì nó bảo điền ví mạng Calamari để sau nhận NFT nhé</p><p>cách lấy địa chỉ ví Calamari đầu là d…… nhé</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mantanetwork.notion.site/Retrieving-Your-KMA-Address-559b877865954c46bbf8d17ccceb605a">link</a> hoặc ai dùng quen bên ví polkadot này rùi thì cứ vào mấy ví nhập tên mạng calamari là ra</p>]]></content:encoded>
            <author>cryptovuive@newsletter.paragraph.com (meteosrds)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/fe0ee4431ce68c2f7b843c5935dcc78c4870e92f4fb897c7c625c41f0a877e90.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Treehouse trải nghiệm và cơ hội retro ]]></title>
            <link>https://paragraph.com/@cryptovuive/treehouse-tr-i-nghi-m-v-c-h-i-retro</link>
            <guid>7p8ZX671bsmj8GBSQqYo</guid>
            <pubDate>Wed, 16 Nov 2022 09:04:24 GMT</pubDate>
            <description><![CDATA[tham gia discord dự án theo dõi twitter dự án nhiệm vụ gồm 2 phần :GAIA - là phần bắt buộc nhéHarvest - dành cho những ai có vốn dư giả và săn retrophần 1 : đối với GAIA làm như bên dưới vào trang webliên kết vísau đó bấm nextbấm đến lúc nào ra như này là xongphần 2 : đối với những ai tham gia Harvest thì xem bên dưới nhé ( mất tiền và không khuyến thích tham gia vì cũng chưa chắc đã retro - nếu có token mạng nào trúng kèo và dán vào nó hiện mà giá bán tương đương trên các trang web khác thì ...]]></description>
            <content:encoded><![CDATA[<p>tham gia discord <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.gg/f57f6TEa">dự án</a></p><p>theo dõi twitter <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://twitter.com/TreehouseFi">dự án</a></p><p>nhiệm vụ gồm 2 phần :</p><ol><li><p>GAIA - là phần bắt buộc nhé</p></li><li><p>Harvest - dành cho những ai có vốn dư giả và săn retro</p></li></ol><p><strong>phần 1 : đối với GAIA</strong> <strong>làm như bên dưới</strong></p><p>vào trang <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://gaia.treehouse.finance/?_gl=1">web</a></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/4a04adcbe7cc65b66bec9d3e7f214f8832f3d438dd128d353ea0d1947c288aee.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/28c34deb49e9a76560a4e2bd6f4254f3bff4966c683c6e513245f9fbdb8248f2.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>liên kết ví</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/9dc6f00313f9335373f80fe3106329aba3e2c4ea1c0f49a4156de21388c3e005.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>sau đó bấm next</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/1a86df7a1bc48e602bc3b2c7e9c92835c86f2eecb1b1a7f3bef6d83c297cc7ca.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>bấm đến lúc nào ra như này là xong</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/7dd55f41a42551fb198dbdb458b8a6c902fa0ba16ef6711a2ff84ee1882a708c.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>phần 2 : đối với những ai tham gia Harvest thì xem bên dưới nhé</strong> <strong>( mất tiền và không khuyến thích tham gia vì cũng chưa chắc đã retro - nếu có token mạng nào trúng kèo và dán vào nó hiện mà giá bán tương đương trên các trang web khác thì có thể giao dịch lấy tương tác )</strong></p><p>vào trang <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://harvest.treehouse.finance/portfolio/processing"><strong>web</strong></a> và liên kết ví</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/95f2a70d9fa5a4e8d0b48119096c7bf9ea74fdff0a3e4b170ca1bcb99b53ada1.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>đợi nó đồng bộ tất cả các giao dịch từ 21-11-2020 đến nay nhé - ai nhiều giao dịch thì khá là lâu</strong> <strong>có thể mất tận 1 ngày nhé</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/3a742770012bbf7fb4843e2fbc1afceebc2d0d273bba3a6cc26917341128bff5.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>đăng ký xong cứ treo nó ở đó - đến bước tiếp theo</strong> <strong>vào mục swap và swap hoặc bridge qua các mạng khác nhau</strong> ( có thể mất nhiều fee nhé )</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/4e87ea4fc28c8b3bf9a4e627b0cc48041da28a0ad6edaa0d552adc0ba482e913.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>lưu ý</strong> :</p><ol><li><p>ưu tiên <strong>swap</strong> các mạng có fee rẻ như matic , op , arbitrum ( arbitrum sau có thể có air tương tác mạng )</p></li><li><p><strong>swap</strong> thì tùy theo lượng vốn của mỗi người mà căn lượng vol giao dịch nhé</p></li><li><p>có thể 1 tuần <strong>swap</strong> 1 2 lần hoặc 1 tháng swap 1 2 lần ( qua 2 3 mạng j đó )</p></li><li><p>còn đối với <strong>bridge</strong> thì nên bridge qua 2 - 3 mạng</p></li></ol>]]></content:encoded>
            <author>cryptovuive@newsletter.paragraph.com (meteosrds)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/90e0b551313ea4c0854d73cc7c5af1a972756bb641cb7c7b9ab99205cbb4192f.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[nulink testnet]]></title>
            <link>https://paragraph.com/@cryptovuive/nulink-testnet</link>
            <guid>NpKj2LUnA3R33UcW9Ueb</guid>
            <pubDate>Tue, 15 Nov 2022 00:57:47 GMT</pubDate>
            <description><![CDATA[bước 1 : cài đặt tiện ích nulink - dowload file này về và giải nén sau đó đến trang tiện ích mở rộng chrome://extensions chọn chế độ dành cho nhà phát triển và úp file vừa giải nén lênB2: Tạo ví và lưu lại backup ví cẩn thận - vì khoảng 1 năm nữa mới ra token mà mất key ví thì coi như xongB3 : faucet BNB test và TNLK test BNB test : linkTNLK test : linkB5 : bắt đầu test vào discover và chọn upload file và tải 1 file bất kì nênsau khi xong vào trang cá nhân xem file đã được update lên chưaquay...]]></description>
            <content:encoded><![CDATA[<p><strong>bước 1 : cài đặt tiện ích nulink - </strong><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://download.nulink.org/release/agent/nulink-agent-1.0.zip"><strong>dowload file này</strong></a><strong> về và giải nén</strong></p><p><strong>sau đó đến trang tiện ích mở rộng chrome://extensions chọn chế độ dành cho nhà phát triển và úp file vừa giải nén lên</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/97ba518cc9747ee0b22ed721c24c753af1603936f99049252e503eaf5e36caba.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>B2: Tạo ví và lưu lại backup ví cẩn thận - vì khoảng 1 năm nữa mới ra token mà mất key ví thì coi như xong</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/2ff1623973dea623392378a156bdeedd19de3dc9c5ee3123596aa7cf3b0a8780.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/211b1717ac48e68c9265ec772aa7e33c8416dc6d28658ad541054b20000b5812.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>B3 : faucet BNB test và TNLK test</strong></p><p><strong>BNB test : </strong><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://testnet.binance.org/faucet-smart"><strong>link</strong></a></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/f6479d005b90282c53512a5ef1efe080276976791dc630252c8bfa28e7e46f0f.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>TNLK test : </strong><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://filetransfer.nulink.org/faucet"><strong>link</strong></a></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/19c1c9a713e90d392658a0e87f6e111deed1cc1443e3b28eb899f97cf4cdc7ea.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>B5 : bắt đầu test</strong></p><p><strong>vào discover và chọn upload file và tải 1 file bất kì nên</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/3534cf6f2e38ec1ceae1ba628eeaf0792617e4771e455ccd341c63b662e95043.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/aa1b4acd2afaa218d89857ef8f9261a8d49631a722e70cd2d985f5cedd520d54.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>sau khi xong vào </strong><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://filetransfer.nulink.org/memberCenter"><strong>trang cá nhân</strong></a><strong> xem file đã được update lên chưa</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/5dc97fc11f1ade81efdc55548c9350b65f22de45a7cbf0147f7eb83f84e0f7b9.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>quay lại discover và chọn 1 ảnh của 1 người bất kì ( hoặc có thể tương tác chéo với mấy người trong nhóm để họ đồng ý ) sau đó bấm request the file -→ chọn số ngày -→ và xác nhận</strong> <strong>-→ đợi người ta xác nhận đồng ý cho mình tải file đó về</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/51bc813026dfd59ba92f7e084434e7daee87980debd740d8ca20183f1810f770.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/91323a7b2907a257f3de185b7315166902de62ec9f20c20eb1522fc3bcb7a971.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/34664e192341a9e6f35634292f39d09addfb5f1813a294c3dc7b2ff37ce050e4.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>Nếu chủ hồ sơ không duyệt hồ sơ, người nộp hồ sơ sẽ luôn hiển thị trạng thái “chờ xử lý</strong>”</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/89681a5b6c60a21a91ad1347581cb462a882c46e27029a9c803e6f51414c6d13.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>Sau khi chủ sở hữu dữ liệu hoàn tất việc phê duyệt, người đăng ký có thể vào trang chi tiết này và tải xuống tệp</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/61bdf60fd3687329bdf3cd4310dd2334f3a68ab2e1399728de0eb8a1b69469c9.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>B6 : cách xác nhận của người khác khi nhận được yêu cầu tải file của mình xuống</strong></p><p><strong>vào incoming requets và chọn review request</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/f7229fc96386b62e7725a302f5269e1cdcaafa16949e0b899b874b6b66d31ca9.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>chọn yes hoặc no và xác nhận</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/bb1868310d08c9404c590d47e75ff86bb2192138c9a1a6be059270c55d25ffa4.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>B6 : điền form khi có vấn đề : </strong><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.google.com/forms/d/e/1FAIpQLSfyXt9u_in78ETutHcWPCg2AuaRjdCvtb1WBeiGJXGLcX8oiA/viewform"><strong>link</strong></a><strong> - k có lỗi cũng điền form cho có tương tác</strong></p><p><strong>đặc biệt sự kiện hàng tuần</strong></p><p>mỗi tuần top 10 người share được file mà có tổng thời gian nhiều nhất sẽ chia 10k NLK</p><p>top 1-5 nhận 1k5 NLK và top 6 -10 nhận 500 NLK</p><p>giải thích cơ chế : thời gian file là thời gian mà người khác đã muốn mình chia sẻ file cho họ</p><p>ví dụ : người ta yêu cầu mình chia sẻ file cho 1 ngày thì khi mình xác nhận thì thời gian mình nhận được là 1 ngày</p>]]></content:encoded>
            <author>cryptovuive@newsletter.paragraph.com (meteosrds)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/9ae6359efc1b688bf41d2fb803d5590dafb263d4bd5fdd7a8654e372c0819a73.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[mute.switch trên hệ sinh thái zksync]]></title>
            <link>https://paragraph.com/@cryptovuive/mute-switch-tr-n-h-sinh-th-i-zksync</link>
            <guid>0ZRyx1Ym8GnkOlgznTmi</guid>
            <pubDate>Fri, 11 Nov 2022 13:01:24 GMT</pubDate>
            <description><![CDATA[faucet token test:ZKsync Bridge | Transfer funds between ZKsync and EthereumWith the ZKsync Bridge you can easily deposit tokens to ZKsync. Enjoy faster, cheaper and more efficient transactions with the future proof zkEVM scaling Ethereum&#x27;s security and values.https://portal.zksync.iovào trang web test https://testnet.switch.mute.io/bấm vào swap và chọn cặp để swapbấm vào pool để thêm thanh khoảnadd lq xong rùi rút]]></description>
            <content:encoded><![CDATA[<p><strong>faucet token test:</strong></p><div data-type="embedly" src="https://portal.zksync.io/faucet" data="{&quot;provider_url&quot;:&quot;https://portal.zksync.io&quot;,&quot;description&quot;:&quot;With the ZKsync Bridge you can easily deposit tokens to ZKsync. Enjoy faster, cheaper and more efficient transactions with the future proof zkEVM scaling Ethereum&apos;s security and values.&quot;,&quot;title&quot;:&quot;ZKsync Bridge | Transfer funds between ZKsync and Ethereum&quot;,&quot;thumbnail_width&quot;:2400,&quot;url&quot;:&quot;https://portal.zksync.io/faucet&quot;,&quot;thumbnail_url&quot;:&quot;https://storage.googleapis.com/papyrus_images/f403dbf646156c111036c66d74d452ddde1026ee9fe326bc848a9ae8fd3c2e31.png&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;ZKsync Bridge | Transfer funds between ZKsync and Ethereum&quot;,&quot;type&quot;:&quot;link&quot;,&quot;thumbnail_height&quot;:1260,&quot;image&quot;:{&quot;img&quot;:{&quot;width&quot;:2400,&quot;height&quot;:1260,&quot;src&quot;:&quot;https://storage.googleapis.com/papyrus_images/f403dbf646156c111036c66d74d452ddde1026ee9fe326bc848a9ae8fd3c2e31.png&quot;}}}" format="small"><link rel="preload" as="image" href="https://storage.googleapis.com/papyrus_images/f403dbf646156c111036c66d74d452ddde1026ee9fe326bc848a9ae8fd3c2e31.png"/><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://portal.zksync.io/faucet" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>ZKsync Bridge | Transfer funds between ZKsync and Ethereum</h2><p>With the ZKsync Bridge you can easily deposit tokens to ZKsync. Enjoy faster, cheaper and more efficient transactions with the future proof zkEVM scaling Ethereum&#x27;s security and values.</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://portal.zksync.io</span></div><img src="https://storage.googleapis.com/papyrus_images/f403dbf646156c111036c66d74d452ddde1026ee9fe326bc848a9ae8fd3c2e31.png"/></div></a></div></div><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/3fa34af8d7e280270898375d35c0a8a9a17b58eda78ff91b6310547c71a8338f.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>vào trang web test</strong></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://testnet.switch.mute.io/">https://testnet.switch.mute.io/</a></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/5dd08845229473bbaf6a89941ec4e4845d20b7c75af185f68481fd012d3d9b80.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/cd8580e2946960aead43941eceb22d5509467ee460624f539f51b593eeb93584.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>bấm vào swap và chọn cặp để swap</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/adce79e880712b8b062e1542f3aef80f27712afc9a5998b4c8a69faf8e3145d4.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>bấm vào pool để thêm thanh khoản</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/949ce6542aa1186d8bf8e759d3574d141beda35a40e83eb8325d63ca9b5f327e.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e86c2a382201ee0a7a40821bbb9ba26f6193770a62ab6227fa25c066ae8e14fb.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/fa9c910aa43fc560d35d5ac5a4076d5fb63f801599ed5dbcdaf7aaca6d3d3288.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/31cc2b3c3ec7dfae265de04a49939d7ed910d9119a29f53702f8c8c2191c1d98.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>add lq xong rùi rút</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/7210dcd395a22dd042c03c208fa8795be837982ca7bb08b07d3f2c5e838dfee6.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure>]]></content:encoded>
            <author>cryptovuive@newsletter.paragraph.com (meteosrds)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/70d616e34e21623c95abed1ecb1666a4897d5aaa1f73d0a571906cb353e92578.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[ZKasino - testnet trên zksync]]></title>
            <link>https://paragraph.com/@cryptovuive/zkasino-testnet-tr-n-zksync</link>
            <guid>ZLmvifxrLv4MrejjAka4</guid>
            <pubDate>Tue, 08 Nov 2022 15:06:37 GMT</pubDate>
            <description><![CDATA[twitter :discord :Discord - Group Chat That&#x27;s All Fun & GamesDiscord is great for playing games and chilling with friends, or even building a worldwide community. Customize your own space to talk, play, and hang out.https://discord.comlink testnet : https://play.zkasino.io/ bước 1 : kết nối ví chọn mạng zksync alpha testnetbước 2 : bấm request & tweet -→ đăng bài lên twitterbước 3 : mint token testbước 4 : chơi game có 7 tròbước 5 chơi xong vào discord feaback lỗi các thứ]]></description>
            <content:encoded><![CDATA[<p>twitter :</p><div data-type="embedly" src="https://twitter.com/ZKasino_io" data="{&quot;provider_url&quot;:&quot;https://twitter.com&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;title&quot;:&quot;JavaScript is not available.&quot;,&quot;url&quot;:&quot;https://twitter.com/ZKasino_io&quot;,&quot;html&quot;:&quot;&lt;a class=\&quot;twitter-timeline\&quot; href=\&quot;https://twitter.com/ZKasino_io?ref_src=twsrc%5Etfw\&quot;&gt;Tweets by ZKasino_io&lt;/a&gt;\n&lt;script async src=\&quot;https://platform.twitter.com/widgets.js\&quot; charset=\&quot;utf-8\&quot;&gt;&lt;/script&gt;&quot;,&quot;provider_name&quot;:&quot;Twitter&quot;,&quot;cache_age&quot;:3153600000,&quot;type&quot;:&quot;rich&quot;}" format="iframe"></div><p>discord :</p><div data-type="embedly" src="https://discord.com/invite/ZKasino" data="{&quot;provider_url&quot;:&quot;https://discord.com&quot;,&quot;description&quot;:&quot;Discord is great for playing games and chilling with friends, or even building a worldwide community. Customize your own space to talk, play, and hang out.&quot;,&quot;title&quot;:&quot;Discord - Group Chat That&apos;s All Fun &amp; Games&quot;,&quot;mean_alpha&quot;:86.3007936508,&quot;thumbnail_width&quot;:1200,&quot;url&quot;:&quot;https://discord.com/invite/ZKasino&quot;,&quot;thumbnail_url&quot;:&quot;https://storage.googleapis.com/papyrus_images/fd5daf4cc4569214cd87e650d89285a0aac548020f1d6734eaffa8b0add2160e.png&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;Discord&quot;,&quot;type&quot;:&quot;link&quot;,&quot;thumbnail_height&quot;:630,&quot;image&quot;:{&quot;img&quot;:{&quot;width&quot;:1200,&quot;height&quot;:630,&quot;src&quot;:&quot;https://storage.googleapis.com/papyrus_images/fd5daf4cc4569214cd87e650d89285a0aac548020f1d6734eaffa8b0add2160e.png&quot;}}}" format="small"><link rel="preload" as="image" href="https://storage.googleapis.com/papyrus_images/fd5daf4cc4569214cd87e650d89285a0aac548020f1d6734eaffa8b0add2160e.png"/><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://discord.com/invite/ZKasino" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>Discord - Group Chat That&#x27;s All Fun &amp; Games</h2><p>Discord is great for playing games and chilling with friends, or even building a worldwide community. Customize your own space to talk, play, and hang out.</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://discord.com</span></div><img src="https://storage.googleapis.com/papyrus_images/fd5daf4cc4569214cd87e650d89285a0aac548020f1d6734eaffa8b0add2160e.png"/></div></a></div></div><p><strong>link testnet :</strong></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://play.zkasino.io/">https://play.zkasino.io/</a></p><p><strong>bước 1 : kết nối ví chọn mạng zksync alpha testnet</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a08855c3748fa188c61098c8c35cd89bf2c4606bd51f71f6e7617f751bbe12c6.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>bước 2 : bấm request &amp; tweet -→ đăng bài lên twitter</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/17f4efe5f87be2787685db47479a6abc9c373fcc6eb1805d30a1bf404e0c168a.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>bước 3 : mint token test</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/9a55920a844ec79d044ca5702a4ffa4e83786b1e0ffe7a9dd371dc2c9e634fea.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>bước 4 : chơi game có 7 trò</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a8d2e625330afa19d13649750d3a8c08fa7d662b9be7574d2170e713c1275283.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p><strong>bước 5 chơi xong vào discord feaback lỗi các thứ</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/048ce4666834ab5d5a59b4360b8332b8795eb3350e9a3e97381e2e993747907d.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure>]]></content:encoded>
            <author>cryptovuive@newsletter.paragraph.com (meteosrds)</author>
        </item>
    </channel>
</rss>