<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:series="https://publishpress.com/"
	>

<channel>
	<title>Anh Tien Tran, Author at Tomoshare</title>
	<atom:link href="https://blog.tomosia.com.vn/author/anhtientran/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.tomosia.com.vn/author/anhtientran/</link>
	<description>Kênh chia sẻ kiến thức Tomosia Việt Nam</description>
	<lastBuildDate>Mon, 11 Dec 2023 02:54:01 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://blog.tomosia.com.vn/wp-content/uploads/2023/09/cropped-icon-32x32.png</url>
	<title>Anh Tien Tran, Author at Tomoshare</title>
	<link>https://blog.tomosia.com.vn/author/anhtientran/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Web 3 &#8211; Nền dân chủ kĩ thuật số. Kết nối ví với Web 3.0 bằng ReactJS</title>
		<link>https://blog.tomosia.com.vn/web-3-nen-dan-chu-ki-thuat-so-ket-noi-vi-voi-web-3-0-bang-reactjs/</link>
					<comments>https://blog.tomosia.com.vn/web-3-nen-dan-chu-ki-thuat-so-ket-noi-vi-voi-web-3-0-bang-reactjs/#comments</comments>
		
		<dc:creator><![CDATA[Anh Tien Tran]]></dc:creator>
		<pubDate>Fri, 08 Dec 2023 06:17:06 +0000</pubDate>
				<category><![CDATA[ReactJS]]></category>
		<category><![CDATA[React]]></category>
		<category><![CDATA[Web3.0]]></category>
		<guid isPermaLink="false">https://blog.tomosia.com.vn/?p=2276</guid>

					<description><![CDATA[<p>Ngược dòng lịch sử 1 chút, chúng ta cùng nhau tìm hiểu về 2 thời kì đã qua&#8230;</p>
<p>The post <a href="https://blog.tomosia.com.vn/web-3-nen-dan-chu-ki-thuat-so-ket-noi-vi-voi-web-3-0-bang-reactjs/">Web 3 &#8211; Nền dân chủ kĩ thuật số. Kết nối ví với Web 3.0 bằng ReactJS</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="585" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/12/web3-1024x585.png" alt="" class="wp-image-2278" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/12/web3-1024x585.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/web3-300x171.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/web3-768x439.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/web3-380x217.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/web3-800x457.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/web3-1160x663.png 1160w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/web3.png 1400w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="has-text-align-left">Ngược dòng lịch sử 1 chút, chúng ta cùng nhau tìm hiểu về 2 thời kì đã qua của Web 3.0.</p>



<h2 id="thu-vien-online-web-1-0" class="wp-block-heading">Thư viện online Web 1.0.</h2>



<p>Web 1 được xem là thời kì khủng long của Internet với tiêu chí 3 KHÔNG: </p>



<ul class="wp-block-list">
<li>KHÔNG có sự tương tác, chỉ tiếp cận thông tin theo 1 chiều</li>



<li>KHÔNG bị quản lý bởi cá nhân hay tổ chức nào cả</li>



<li>KHÔNG có các thuật toán để sàng lọc thông tin. Khiến người dùng rất khó tìm thông tin liên quan</li>
</ul>



<p>Sau tất cả, chúng ta có công thức chốt hạ cho Web 1.0</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><strong>WEB1 = THE INTERNET OF INFORMATION; I.E., THE HTML CSS WEBSITES YOU CANNOT INTERACT WITH.</strong></p>



<p><sub><sup><em>Web1 = kỷ nguyên internet của không tin. Bao gồm HTML CSS và không thể tương tác.</em></sup></sub></p>
</blockquote>



<h2 id="web-2-0-xuat-hien-voi-dien-mao-moi-cai-tien-moi" class="wp-block-heading">Web 2.0 xuất hiện với diện mạo mới, cải tiến mới.</h2>



<p>Năm 2005, Web 2.0 chính thức được ra đời với diện mạo mới. Được cải tiến từ Web 1.0 và một trong những thay đổi quan trọng lớn nhất đó là <strong>sự tương tác</strong>.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="2416" height="1422" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screenshot-2023-12-04-at-7.58.32-PM.png" alt="" class="wp-image-2280" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screenshot-2023-12-04-at-7.58.32-PM.png 2416w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screenshot-2023-12-04-at-7.58.32-PM-300x177.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screenshot-2023-12-04-at-7.58.32-PM-1024x603.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screenshot-2023-12-04-at-7.58.32-PM-768x452.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screenshot-2023-12-04-at-7.58.32-PM-1536x904.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screenshot-2023-12-04-at-7.58.32-PM-2048x1205.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screenshot-2023-12-04-at-7.58.32-PM-380x224.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screenshot-2023-12-04-at-7.58.32-PM-800x471.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screenshot-2023-12-04-at-7.58.32-PM-1160x683.png 1160w" sizes="(max-width: 2416px) 100vw, 2416px" /></figure>



<p>Khi bạn sử dụng Meta, Youtube,&#8230;những nền tảng này sẽ thu thập những thông tin của người dùng tìm kiếm để trả lại những thông tin phù hợp nhất.</p>



<p>Cụ thể hơn tí nhé!  Khi bạn search trên Youtube với từ khoá là Blockchain, lúc này Youtube sẽ đề cử những video liên quan đến Blockchain. Từ ví dụ này chúng ta có thể thấy 1 điểm sáng tiếp theo của Web 2.0 đối với Web 1.0 đó chính là <strong>thuật toán</strong>. Web 2.0 sử dụng thuật toán để sàng lọc thông tin liên quan đến những cái mà người dùng quan tâm. </p>



<p>Nghe đến đây, mọi người có đang nghĩ rằng Web 2 là đủ rồi, cần gì phải cải tiến hơn nữa?</p>



<p>Không thể phũ nhận Web 2 có nhiều tiện ích và khả năng phát triển vô cùng lớn. Nhưng cái gì cũng có ưu và nhược điểm cả. Chắc hẳn mọi người cũng đã từng nghe qua cụm từ <strong>&#8220;Facebook nghe lén&#8221;</strong>. Đúng vậy, Web 2 đang dần lộ ra yếu điểm chính là việc thông tin cá nhân của người dùng bị xâm phạm. Những gã khổng lồ công nghệ như là Google, Meta, Amazon,&#8230; đang hằng ngày thu thập dữ liệu và bán cho các bên quảng cáo.</p>



<p>Để giúp cho người dùng có thể kiểm soát được quyền riêng tư, cũng như là dữ liệu của mình. Thì đây là lúc Web 3 xuất hiện. Vậy Web 3.0 là gì nhỉ!</p>



<h2 id="web-3-0-nen-dan-chu-ki-thuat-so" class="wp-block-heading">Web 3.0 nền dân chủ kĩ thuật số.</h2>



<p>Điểm sáng cho Web 3.0 là dựa vào công nghệ mở đường Blockchain, là loại hình công nghệ giúp lưu trữ, sắp xếp và quản lí thông tin trên mạng lưới Internet 1 cách phi tập trung</p>



<figure class="wp-block-image size-full is-style-default"><img decoding="async" width="2294" height="1348" src="http://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screenshot-2023-12-04-at-9.13.49-PM.png" alt="" class="wp-image-2298" style="aspect-ratio:16/9;object-fit:cover" srcset="https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screenshot-2023-12-04-at-9.13.49-PM.png 2294w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screenshot-2023-12-04-at-9.13.49-PM-300x176.png 300w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screenshot-2023-12-04-at-9.13.49-PM-1024x602.png 1024w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screenshot-2023-12-04-at-9.13.49-PM-768x451.png 768w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screenshot-2023-12-04-at-9.13.49-PM-1536x903.png 1536w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screenshot-2023-12-04-at-9.13.49-PM-2048x1203.png 2048w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screenshot-2023-12-04-at-9.13.49-PM-380x223.png 380w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screenshot-2023-12-04-at-9.13.49-PM-800x470.png 800w, https://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screenshot-2023-12-04-at-9.13.49-PM-1160x682.png 1160w" sizes="(max-width: 2294px) 100vw, 2294px" /></figure>



<p>Các thiết bị chia sẻ thông tin 1 cách trực tiếp với nhau mà không cần phải chịu sự kiểm soát bởi cá nhân hay tổ chức nào. Có thể thấy bước cải tiến này của Web 3.0 đã ăn đứt Web 2.0 nhỉ. Nếu ở Web 2.0 quyền lợi của người dùng là rất mong manh và bị kiểm soát bởi các ông lớn công nghệ, thì Web 3.0 hứa hẹn người dùng chính là chủ sở hữu dữ liệu của họ, họ hoàn toàn có quyền quyết định và kiểm soát những dữ liệu đó.</p>



<p>Với Web 3.0, những ca nhạc sĩ có thể trực tiếp đăng tải sản phẩm âm nhạc của họ lên mạng thông qua công nghệ Blockchain. Sản phẩm sẽ được số hoá thành Token hoặc NFT. Họ có thể kiếm lợi nhuận từ việc bán sản phẩm đó và hoàn toàn loại bỏ được bên thứ 3.</p>



<p>Web 3.0 ra đời là mối đe doạ đến các ông lớn. Nó thay <strong>đổi luật chơi</strong>, <strong>loại bỏ trung gian</strong> và <strong>sang bằng lợi nhuận</strong>.</p>



<h2 id="connect-wallet-with-web3-react" class="wp-block-heading">Connect wallet with Web3-React</h2>



<p>Step 1: Cài đặt ethers và web3-react</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">JavaScript</span><span role="button" tabindex="0" data-code="npm i ethers@5.5.4
npm i @web3-react/core@6.1.9" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F6F6F4">npm i ethers@</span><span style="color: #BF9EEE">5.5</span><span style="color: #F6F6F4">.</span><span style="color: #BF9EEE">4</span></span>
<span class="line"><span style="color: #F6F6F4">npm i @</span><span style="color: #62E884; font-style: italic">web3</span><span style="color: #F286C4">-</span><span style="color: #62E884; font-style: italic">react</span><span style="color: #F286C4">/</span><span style="color: #62E884; font-style: italic">core</span><span style="color: #F6F6F4">@</span><span style="color: #BF9EEE">6.1</span><span style="color: #F6F6F4">.</span><span style="color: #BF9EEE">9</span></span></code></pre></div>



<p>Step 2: Khởi tạo Web3ReactProvider</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:16.859375px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">TypeScript</span><span role="button" tabindex="0" data-code="import { Web3ReactProvider } from &quot;@web3-react/core&quot;;
import { ethers } from &quot;ethers&quot;;

const getLibrary = (provider: any) =&gt; {
  return new ethers.providers.Web3Provider(provider);
}

&lt;React.StrictMode&gt;
  &lt;Web3ReactProvider getLibrary={getLibrary}&gt;
    &lt;App /&gt;
  &lt;/Web3ReactProvider&gt;
&lt;/React.StrictMode&gt;
" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F286C4">import</span><span style="color: #F6F6F4"> { Web3ReactProvider } </span><span style="color: #F286C4">from</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">@web3-react/core</span><span style="color: #DEE492">&quot;</span><span style="color: #F6F6F4">;</span></span>
<span class="line"><span style="color: #F286C4">import</span><span style="color: #F6F6F4"> { ethers } </span><span style="color: #F286C4">from</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">ethers</span><span style="color: #DEE492">&quot;</span><span style="color: #F6F6F4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F286C4">const</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">getLibrary</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> (</span><span style="color: #FFB86C; font-style: italic">provider</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #97E1F1; font-style: italic">any</span><span style="color: #F6F6F4">) </span><span style="color: #F286C4">=&gt;</span><span style="color: #F6F6F4"> {</span></span>
<span class="line"><span style="color: #F6F6F4">  </span><span style="color: #F286C4">return</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4; font-weight: bold">new</span><span style="color: #F6F6F4"> ethers.providers.</span><span style="color: #62E884">Web3Provider</span><span style="color: #F6F6F4">(provider);</span></span>
<span class="line"><span style="color: #F6F6F4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F286C4">&lt;</span><span style="color: #F6F6F4">React.StrictMode</span><span style="color: #F286C4">&gt;</span></span>
<span class="line"><span style="color: #F6F6F4">  </span><span style="color: #F286C4">&lt;</span><span style="color: #F6F6F4">Web3ReactProvider getLibrary</span><span style="color: #F286C4">=</span><span style="color: #F6F6F4">{getLibrary}</span><span style="color: #F286C4">&gt;</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #F286C4">&lt;</span><span style="color: #F6F6F4">App </span><span style="color: #F286C4">/&gt;</span></span>
<span class="line"><span style="color: #F6F6F4">  </span><span style="color: #F286C4">&lt;/</span><span style="color: #F6F6F4">Web3ReactProvider</span><span style="color: #F286C4">&gt;</span></span>
<span class="line"><span style="color: #F286C4">&lt;/</span><span style="color: #F6F6F4">React.StrictMode</span><span style="color: #F286C4">&gt;</span></span>
<span class="line"></span></code></pre></div>



<p>Step 3: Cài đặt Wallet Connectors</p>



<div class="wp-block-kevinbatdorf-code-block-pro alignwide cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">JavaScript</span><span role="button" tabindex="0" data-code="npm i @web3-react/walletlink-connector # Coinbase Wallet
npm i @web3-react/injected-connector # Metamask" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F6F6F4">npm i @</span><span style="color: #62E884; font-style: italic">web3</span><span style="color: #F286C4">-</span><span style="color: #62E884; font-style: italic">react</span><span style="color: #F286C4">/</span><span style="color: #62E884; font-style: italic">walletlink</span><span style="color: #F286C4">-</span><span style="color: #62E884; font-style: italic">connector</span><span style="color: #F6F6F4"> # Coinbase Wallet</span></span>
<span class="line"><span style="color: #F6F6F4">npm i @</span><span style="color: #62E884; font-style: italic">web3</span><span style="color: #F286C4">-</span><span style="color: #62E884; font-style: italic">react</span><span style="color: #F286C4">/</span><span style="color: #62E884; font-style: italic">injected</span><span style="color: #F286C4">-</span><span style="color: #62E884; font-style: italic">connector</span><span style="color: #F6F6F4"> # Metamask</span></span></code></pre></div>



<p>Tạo file <strong>connectors.ts</strong> với mục đích khởi tạo các trình kết nối để tích hợp vào app của mình</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:16.859375px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">TypeScript</span><span role="button" tabindex="0" data-code="import { InjectedConnector } from &quot;@web3-react/injected-connector&quot;;
import { WalletLinkConnector } from &quot;@web3-react/walletlink-connector&quot;;

const injected = new InjectedConnector({
  supportedChainIds: [1, 5],
});

const coinbaseWallet = new WalletLinkConnector({
  url: `https://mainnet.infura.io/v3/${process.env.INFURA_KEY}`,
  appName: &quot;web3-react-demo&quot;,
});

export const connectors = {
  injected: injected,
  coinbaseWallet: coinbaseWallet,
};" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F286C4">import</span><span style="color: #F6F6F4"> { InjectedConnector } </span><span style="color: #F286C4">from</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">@web3-react/injected-connector</span><span style="color: #DEE492">&quot;</span><span style="color: #F6F6F4">;</span></span>
<span class="line"><span style="color: #F286C4">import</span><span style="color: #F6F6F4"> { WalletLinkConnector } </span><span style="color: #F286C4">from</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">@web3-react/walletlink-connector</span><span style="color: #DEE492">&quot;</span><span style="color: #F6F6F4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F286C4">const</span><span style="color: #F6F6F4"> injected </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4; font-weight: bold">new</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">InjectedConnector</span><span style="color: #F6F6F4">({</span></span>
<span class="line"><span style="color: #F6F6F4">  supportedChainIds</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> [</span><span style="color: #BF9EEE">1</span><span style="color: #F6F6F4">, </span><span style="color: #BF9EEE">5</span><span style="color: #F6F6F4">],</span></span>
<span class="line"><span style="color: #F6F6F4">});</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F286C4">const</span><span style="color: #F6F6F4"> coinbaseWallet </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4; font-weight: bold">new</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">WalletLinkConnector</span><span style="color: #F6F6F4">({</span></span>
<span class="line"><span style="color: #F6F6F4">  url</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #E7EE98">`https://mainnet.infura.io/v3/</span><span style="color: #F286C4">${</span><span style="color: #F6F6F4">process.env.</span><span style="color: #BF9EEE">INFURA_KEY</span><span style="color: #F286C4">}</span><span style="color: #E7EE98">`</span><span style="color: #F6F6F4">,</span></span>
<span class="line"><span style="color: #F6F6F4">  appName</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">web3-react-demo</span><span style="color: #DEE492">&quot;</span><span style="color: #F6F6F4">,</span></span>
<span class="line"><span style="color: #F6F6F4">});</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F286C4">export</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">const</span><span style="color: #F6F6F4"> connectors </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> {</span></span>
<span class="line"><span style="color: #F6F6F4">  injected</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> injected,</span></span>
<span class="line"><span style="color: #F6F6F4">  coinbaseWallet</span><span style="color: #F286C4">:</span><span style="color: #F6F6F4"> coinbaseWallet,</span></span>
<span class="line"><span style="color: #F6F6F4">};</span></span></code></pre></div>



<ul class="wp-block-list">
<li><strong>supportedChainIds</strong>: Nó được sử dụng để xác định danh sách các chainId (ID chuỗi) mà một ứng dụng hoặc một thư viện hỗ trợ. Mỗi mạng Ethereum hoặc chuỗi con có một chainId duy nhất để xác định nó. Tham khảo https://chainlist.org/</li>



<li><strong>INFURA_KEY</strong>: là một khóa API được sử dụng để kết nối ứng dụng của bạn với mạng Ethereum và IPFS thông qua dịch vụ Infura. Tham khảo https://www.infura.io/</li>
</ul>



<p>Step 4: Connect and Disconnect from Wallet</p>



<p>Trong file <strong>App.tsx</strong> sử dụng <strong>useWeb3React</strong> hook để connect và disconnect ví</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">JavaScript</span><span role="button" tabindex="0" data-code="&lt;import { useWeb3React } from '@web3-react/core'" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F6F6F4">&lt;</span><span style="color: #F286C4">import</span><span style="color: #F6F6F4"> </span><span style="color: #F286C4">{</span><span style="color: #F6F6F4"> useWeb3React </span><span style="color: #F286C4">}</span><span style="color: #F6F6F4"> </span><span style="color: #62E884; font-style: italic">from</span><span style="color: #F6F6F4"> </span><span style="color: #DEE492">&#39;</span><span style="color: #E7EE98">@web3-react/core</span><span style="color: #DEE492">&#39;</span></span></code></pre></div>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:8.4296875px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">JavaScript</span><span role="button" tabindex="0" data-code="function App() {
  
  const { activate, deactivate } = useWeb3React();
    ...
}" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F286C4">function</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">App</span><span style="color: #F6F6F4">() {</span></span>
<span class="line"><span style="color: #F6F6F4">  </span></span>
<span class="line"><span style="color: #F6F6F4">  </span><span style="color: #F286C4">const</span><span style="color: #F6F6F4"> { activate, deactivate } </span><span style="color: #F286C4">=</span><span style="color: #F6F6F4"> </span><span style="color: #62E884">useWeb3React</span><span style="color: #F6F6F4">();</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #F286C4">...</span></span>
<span class="line"><span style="color: #F6F6F4">}</span></span></code></pre></div>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#f6f6f4;--cbp-line-number-width:16.859375px;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#ebebe6">TypeScript</span><span role="button" tabindex="0" data-code="&lt;button onClick={() =&gt; { activate(connectors.coinbaseWallet) }}&gt;
  Coinbase Wallet
&lt;/button&gt;

&lt;button onClick={() =&gt; {
  if (window.ethereum) {
    activate(connectors.injected);
  } else {
    alert(&quot;Please install Meta Mask Extension&quot;);
  }
}}&gt;
  Meta Mask
&lt;/button&gt;

&lt;button onClick={deactivate}&gt;Disconnect&lt;/button&gt;" style="color:#f6f6f4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dracula-soft" style="background-color: #282A36" tabindex="0"><code><span class="line"><span style="color: #F286C4">&lt;</span><span style="color: #F6F6F4">button onClick</span><span style="color: #F286C4">=</span><span style="color: #F6F6F4">{() =&gt; { </span><span style="color: #62E884">activate</span><span style="color: #F6F6F4">(connectors.coinbaseWallet) }}</span><span style="color: #F286C4">&gt;</span></span>
<span class="line"><span style="color: #F6F6F4">  Coinbase Wallet</span></span>
<span class="line"><span style="color: #F286C4">&lt;/</span><span style="color: #F6F6F4">button</span><span style="color: #F286C4">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F286C4">&lt;</span><span style="color: #F6F6F4">button onClick</span><span style="color: #F286C4">=</span><span style="color: #F6F6F4">{() =&gt; {</span></span>
<span class="line"><span style="color: #F6F6F4">  </span><span style="color: #F286C4">if</span><span style="color: #F6F6F4"> (window.ethereum) {</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #62E884">activate</span><span style="color: #F6F6F4">(connectors.injected);</span></span>
<span class="line"><span style="color: #F6F6F4">  } </span><span style="color: #F286C4">else</span><span style="color: #F6F6F4"> {</span></span>
<span class="line"><span style="color: #F6F6F4">    </span><span style="color: #62E884">alert</span><span style="color: #F6F6F4">(</span><span style="color: #DEE492">&quot;</span><span style="color: #E7EE98">Please install Meta Mask Extension</span><span style="color: #DEE492">&quot;</span><span style="color: #F6F6F4">);</span></span>
<span class="line"><span style="color: #F6F6F4">  }</span></span>
<span class="line"><span style="color: #F6F6F4">}}</span><span style="color: #F286C4">&gt;</span></span>
<span class="line"><span style="color: #F6F6F4">  Meta Mask</span></span>
<span class="line"><span style="color: #F286C4">&lt;/</span><span style="color: #F6F6F4">button</span><span style="color: #F286C4">&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F286C4">&lt;</span><span style="color: #F6F6F4">button onClick</span><span style="color: #F286C4">=</span><span style="color: #F6F6F4">{deactivate}</span><span style="color: #F286C4">&gt;</span><span style="color: #F6F6F4">Disconnect</span><span style="color: #F286C4">&lt;/</span><span style="color: #F6F6F4">button</span><span style="color: #F286C4">&gt;</span></span></code></pre></div>



<p>Cùng xem demo nhé. </p>



<figure class="wp-block-video"><video height="1800" style="aspect-ratio: 2880 / 1800;" width="2880" controls src="http://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Recording-2023-12-06-at-1.22.21-PM.mov"></video></figure>



<p></p>



<p>Cảm ơn mọi người đã đọc ^^</p>



<p></p>



<p>Nguồn tham khảo:</p>



<p><em><a href="https://docs.cloud.coinbase.com/wallet-sdk/docs/web3-react">https://docs.cloud.coinbase.com/wallet-sdk/docs/web3-react</a></em></p>



<p><em><a href="https://www.youtube.com/watch?v=6xZdv1hiphg&amp;t=362s">https://www.youtube.com/watch?v=6xZdv1hiphg&amp;t=362s</a></em></p>
<p>The post <a href="https://blog.tomosia.com.vn/web-3-nen-dan-chu-ki-thuat-so-ket-noi-vi-voi-web-3-0-bang-reactjs/">Web 3 &#8211; Nền dân chủ kĩ thuật số. Kết nối ví với Web 3.0 bằng ReactJS</a> appeared first on <a href="https://blog.tomosia.com.vn">Tomoshare</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.tomosia.com.vn/web-3-nen-dan-chu-ki-thuat-so-ket-noi-vi-voi-web-3-0-bang-reactjs/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		<enclosure url="http://blog.tomosia.com.vn/wp-content/uploads/2023/12/Screen-Recording-2023-12-06-at-1.22.21-PM.mov" length="11502414" type="video/quicktime" />

			</item>
	</channel>
</rss>
