<?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>0xbarchitect</title>
        <link>https://paragraph.com/@0xbarchitect</link>
        <description>A first-principle thinker.
An extreme programmer.
An WEB3 builder.</description>
        <lastBuildDate>Sun, 05 Jul 2026 14:42:17 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <image>
            <title>0xbarchitect</title>
            <url>https://storage.googleapis.com/papyrus_images/d7514f9ed517d9cbbd73d31dca712d0636eac53f497217f68472588294b5d967.png</url>
            <link>https://paragraph.com/@0xbarchitect</link>
        </image>
        <copyright>All rights reserved</copyright>
        <item>
            <title><![CDATA[EIP-3643: tiêu chuẩn token Tài sản thế giới thực (RWA)]]></title>
            <link>https://paragraph.com/@0xbarchitect/eip-3643-ti-u-chu-n-token-t-i-s-n-th-gi-i-th-c-rwa</link>
            <guid>ppivjNgmJ2cj0hpKR4iq</guid>
            <pubDate>Thu, 14 Nov 2024 04:02:32 GMT</pubDate>
            <description><![CDATA[Một trong những ứng dụng quan trọng nhất của công nghệ blockchain đó là cho phép phát hành tài sản thế giới thực (Real-world assets, viết tắt RWA) lên không gian blockchain thông qua việc mã hóa tài sản dưới dạng các token chia nhỏ được (fungible token, viết tắt FT) hoặc token không thể chia nhỏ được (non-fungible token, viết tắt NFT). Khi được phát hành lên không gian blockchain, quyền sở hữu tài sản RWA sẽ được bảo đảm tuyệt đối bởi các thuật toán mã hóa, vì vậy, có thể nói blockchain đã cu...]]></description>
            <content:encoded><![CDATA[<p>Một trong những ứng dụng quan trọng nhất của công nghệ blockchain đó là cho phép phát hành tài sản thế giới thực (Real-world assets, viết tắt RWA) lên không gian blockchain thông qua việc mã hóa tài sản dưới dạng các token chia nhỏ được (fungible token, viết tắt FT) hoặc token không thể chia nhỏ được (non-fungible token, viết tắt NFT). Khi được phát hành lên không gian blockchain, quyền sở hữu tài sản RWA sẽ được bảo đảm tuyệt đối bởi các thuật toán mã hóa, vì vậy, có thể nói blockchain đã cung cấp quyền sở hữu “thật sự” (true ownership) cho tài sản. Khi có quyền sở hữu “thật sự”, mọi cá nhân có thể yên tâm mua bán, giao dịch tài sản RWA trên không gian blockchain, theo một cách thức nhanh chóng, tiện lợi, xuyên biên giới, với chi phí rẻ và tính bảo mật cao. RWA cũng được nhận định là một trong các xu hướng chủ đạo, dẫn dắt chu kỳ crypto 2024-2025.</p><p>Tuy nhiên, để có thể tạo ra một môi trường an toàn cho giao dịch tài sản RWA, công nghệ blockchain cần đi kèm với những tiêu chuẩn được công nhận rộng rãi, đảm bảo tính tin cậy, minh bạch giữa các nhà phát triển công nghệ và người dùng cá nhân hoặc tổ chức. Mỗi blockchain sẽ có một hệ thống quản lý tiêu chuẩn riêng, đối với Ethereum là hệ thống Đề xuất cải tiến Ethereum (Ethereum improvement proposals, viết tắt là EIP). Bài viết này tập trung làm rõ EIP-3643, là tiêu chuẩn cho token RWA. Cụ thể, EIP-3643 đề xuất tiêu chuẩn cho việc phát hành, giao dịch, sở hữu token RWA. Ứng dụng triển khai EIP-3643 sẽ đảm bảo token RWA tuân thủ các quy định pháp lý, giúp token RWA trở thành tài sản được công nhận trong thị trường tài chính.</p><h2 id="h-cac-khai-niem" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Các khái niệm</h2><h3 id="h-eip" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">EIP</h3><p>EIP, viết tắt của Ethereum Improvement Proposal, là các tiêu chuẩn (hoặc đề xuất) nhằm cải tiến, nâng cấp giao thức Ethereum. Có thể coi EIP giống như tiêu chuẩn ISO trong thế giới thực. Các ứng dụng trên blockhain cần tuân thủ các tiêu chuẩn EIP này để tăng cường tính bảo mật và tương thích với toàn bộ hệ sinh thái.</p><p>Ví dụ, EIP-20 là tiêu chuẩn dành cho token chia nhỏ được (fungible token); EIP-721 và EIP-1155 là các tiêu chuẩn dành cho token không chia nhỏ được (non-fungible token). Mỗi EIP sẽ tập trung vào giải quyết một vấn đề cụ thể, nêu rõ hiện trạng, động lực (motivation), đề xuất giải pháp, diễn giải tính hợp lý (rationale), tính tương thích (backwards compatibility) với giao thức hiện có. Mỗi EIP cũng phải đảm bảo tính bảo mật (security), không gây nguy hại tới giao thức lõi. EIP trải qua nhiều giai đoạn trước khi được công nhận chính thức, bao gồm: Nháp (draft), Xem xét (Review), Xem xét lần cuối (Last call), Phê duyệt chính thức (Final). Việc xem xét và phê duyệt được thực hiện bởi cộng đồng các nhà phát triển và tổ chức Ethereum, đảm bảo tính cẩn trọng, công bằng, và minh bạch. Các EIP đạt được trạng thái phê duyệt chính thức (final) sẽ cung cấp tiêu chuẩn an toàn, tin cậy nhất cho các nhà phát triển ứng dụng và người dùng.</p><h3 id="h-tai-san-the-gioi-thuc-rwa" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Tài sản thế giới thực (RWA)</h3><p>Tài sản thế giới thực (Real world assets, viết tắt RWA), là khái niệm chỉ các tài sản vật lý và hữu hình trong thế giới thực. RWA có thể là bất động sản, hàng hóa (vàng, dầu thô, nông sản), tác phẩm nghệ thuật, cổ phiếu, trái phiếu, hợp đồng quyền chọn, hợp đồng tương lai. Khác với các tài sản số (digital assets) như ảnh, phim , bài hát, vật phẩm game, … thì RWA thường có các quy định pháp luật chặt chẽ về quyền được phát hành, giao dịch, sở hữu tài sản. Về mặt kỹ thuật, sử dụng công nghệ blockchain, chúng ta có thể token hóa RWA thành các token FT hoặc NFT. Tuy nhiên, việc phát hành, giao dịch, sở hữu các token này cần tuân thủ các quy định pháp lý của tài sản gốc. Tiêu chuẩn EIP-3643 được đề xuất nhằm giải quyết vấn đề này.</p><h3 id="h-onchainid" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">OnchainID</h3><p>OnchainID là giải pháp xác thực danh tính cho cá nhân, công ty hoặc tổ chức (gọi chung là đối tượng) trên môi trường blockchain. OnchainID bao gồm một bộ hợp đồng thông minh (smart contract) và ứng dụng offchain. Hệ thống này cung cấp cho mỗi người dùng một tài khoản OnchainID, liên kết 1-1 với địa chỉ ví của người dùng. Tài khoản OnchainID lưu trữ các thông tin, quyền, chứng thực của người dùng, đồng thời cung cấp các thông tin này cho bên thứ 3 khi có nhu cầu. Có thể coi OnchainID như hộ chiếu blockchain của đối tượng. Mặc dù blockchain được thiết kế theo nguyên lý phân tán và ẩn danh, tuy nhiên đối với một số ứng dụng, như RWA, thì các bên tham gia giao dịch cần đảm bảo các quy định, ví dụ như là công dân của một quốc gia hợp lệ, khi đó, OnchainID đóng vai trò cần thiết để đảm bảo tính pháp lý của giao dịch.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/6b4e795f164f818d91ef9b29272b1ff1296bb5d283f317bcc6639ab96dd01499.png" alt="Hệ thống OnchainID." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Hệ thống OnchainID.</figcaption></figure><h2 id="h-eip-3643" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">EIP-3643</h2><p>EIP-3643 là tiêu chuẩn dành cho token RWA. EIP-3643 đã đạt trạng thái Chính thức bởi tổ chức và cộng đồng các nhà phát triển Ethereum. Tiêu chuẩn này bao gồm một bộ thư viện giao diện (interface) cho các hợp đồng thông minh, cùng giải pháp quản lý giao dịch dựa trên hệ thống xác thực phân tán.</p><h3 id="h-token-rwa-security-token" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Token RWA (security token)</h3><p>Đối tượng của EIP-3643 là token RWA, hay còn gọi là token chứng khoán (security token). Token chứng khoán, khác với các token ứng dụng (utility token), thường đi kèm với các quy định pháp lý chặt chẽ đối với việc phát hành, giao dịch, sở hữu token. Đối với blockchain hiện nay, các token ứng dụng phổ biến hơn, được phát hành dưới dạng các token EIP-20 thông qua các Đợt phát hành lần đầu ra công chúng (ICO, IDO). Các token này thường được các giao thức phát hành nhằm mục đích quản trị giao thức, ví dụ token UNI của giao thức Uniswap, vì vậy chúng được gọi là token ứng dụng.</p><p>Bảng sau đây cung cấp so sánh giữa token ứng dụng và token chứng khoán.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d5cfee483113a455a35c7889c9493593fb754224d5ea9cf3891f7016ba3d9435.png" alt="Bảng so sánh token ứng dụng và token chứng khoán." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Bảng so sánh token ứng dụng và token chứng khoán.</figcaption></figure><p>Thông thường, đối với token chứng khoán, sẽ cần tuân thủ 2 loại quy định sau:</p><p><strong>Quy định quản lý chung</strong></p><p>Quy định quản lý chung (general regulatory controls), áp dụng cho toàn bộ token chứng khoán. Ví dụ quy định về Hiểu danh tính khách hàng (Know your customer, viết tắt KYC), Chống rửa tiền (Anti-money laundering, viết tắt AML), Danh sách đen (blacklist).</p><p><strong>Quy định riêng của loại chứng khoán</strong></p><p>Đối với từng loại chứng khoán, có thể có các quy định riêng, ví dụ giới hạn đối với loại nhà đầu tư, xuất xứ nhà đầu tư, khối lượng giao dịch trong một khoảng thời gian.</p><p>Để đáp ứng các quy định trên, việc phát hành, giao dịch, sở hữu token chứng khoán cần thực hiện thông qua một hệ thống xác thực danh tính onchain. Giữa token chứng khoán và hệ thống cần thống nhất về mặt giao diện (interface) để có thể hoàn thành các luồng nghiệp vụ phức tạp.</p><p>Token chứng khoán theo tiêu chuẩn EIP-3643 là một phiên bản nâng cấp của token EIP-20. Thay đổi quan trọng nhất là bổ xung logic điều kiện trong 2 hàm <em>transfer</em> và <em>transferFrom</em> của hợp đồng thông minh. Chúng ta sẽ tìm hiểu chi tiết hơn về token EIP-3643 ở phần sau của bài viết.</p><h3 id="h-he-thong-xac-thuc-phan-tan" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Hệ thống xác thực phân tán</h3><p>Hệ thống xác thực phân tán (Decentralized validation system, viết tắt DVS), đóng vai trò thiết yếu đối với giao dịch token RWA. Hệ thống này tham gia vào thực thi giao dịch, đảm bảo giao dịch tuân thủ các quy định pháp lý. Nói cách khác, DVS đảm bảo tính hợp pháp của token RWA.</p><p><strong>Luồng giao dịch</strong></p><p>Luồng giao dịch token EIP-3643 được miêu tả ở sơ đồ 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/883e8343e506592971b4925217972c28dd3208b00de7404b85e8f83bd6326bb1.png" alt="Luồng giao dịch token EIP-3643." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Luồng giao dịch token EIP-3643.</figcaption></figure><p>Bước 1. Khởi tạo giao dịch</p><p>Bên bán (seller) khởi tạo giao dịch bằng cách tương tác với hợp đồng thông minh của token. Thông thường, tương tác này thực hiện thông qua việc gọi hàm <em>transfer</em> của hợp đồng thông minh.</p><p>Bước 2. Khởi tạo xác thực</p><p>Hợp đồng thông minh của token sẽ khởi tạo xác thực thông qua việc gọi sang hệ thống xác thực (validator), cung cấp thông tin về giao dịch như địa chỉ ví bên mua (buyer), khối lượng giao dịch.</p><p>Bước 3. Thực thi xác thực</p><p>Hệ thống xác thực (validator) sẽ thực thi các logic cần thiết để kiểm tra giao dịch đảm bảo các yêu cầu pháp lý. Ví dụ, bên mua đã thực hiện KYC, AML hay chưa, có nằm trong blacklist không, khối lượng giao dịch có vượt mức cho phép hay không,…</p><p>Bước 4. Trả kết quả xác thực</p><p>Hệ thống xác thực (validator) trả kết quả về cho hợp đồng thông minh của token. Nếu kết quả xác thực thất bại, giao dịch sẽ bị hủy ở bước này.</p><p>Bước 5. Hoàn thành giao dịch</p><p>Nếu kết quả xác thực ở bước 4 là thành công, hợp đồng thông minh token sẽ chuyển quyền sở hữu token từ bên bán (seller) sang bên mua (buyer).</p><p>Như vậy, có thể thấy, sự khác biệt lớn nhất giữa token EIP-3643 và EIP-20 là điều kiện ở hàm <em>transfer</em> và <em>transferFrom</em>. Các điều kiện này sẽ được hệ thống xác thực kiểm tra, bằng cách tra cứu thông tin OnchainID của bên mua (buyer), cũng như kiểm tra tính hợp lệ của giao dịch đối với các quy định chung của token.</p><h3 id="h-onchainid-thong-tin-va-bang-chung" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">OnchainID, thông tin và bằng chứng</h3><p>OnchainID là thành phần thiết yếu của hệ thống xác thực phân tán (DVS). Để đảm bảo tính pháp lý của giao dịch token RWA, các bên tham gia giao dịch cần sở hữu tài khoản OnchainID. Các chứng thực (claims), như KYC, AML sẽ được lưu trữ trên tài khoản OnchainID. Các chứng thực này cần được phát hành bởi một tổ chức uy tín (trusted third party), như ngân hàng, cục quản lý hành chính quốc gia, …, đi kèm với bằng chứng (proof). Thông thường, các bằng chứng sẽ phát hành dưới dạng các chữ ký của tổ chức, đồng thời được lưu trữ onchain, cho phép các bên tham gia giao dịch kiểm chứng. Các bên tham gia hệ thống OnchainID bao gồm: nhà phát hành (issuer), nhà đầu tư (investor), đại lý (agent), chứng khoán (securities).</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e70260414d180649669a6d1a928ef79a3d41f43da1d522b85081bb6767139141.png" alt="Các bên tham gia OnchainID." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Các bên tham gia OnchainID.</figcaption></figure><p>Ví dụ, một nhà phát hành chứng thực (claim issuer) có thể cấp cho một người dùng (identity) chứng thực về việc người dùng này đã thực hiện KYC bằng căn cước công dân và ảnh selfie. Các thông tin này, do tính nhạy cảm, sẽ không được lưu trữ onchain, mà sẽ lưu trữ trên hệ thống offchain của nhà phát hành. Tuy nhiên, bằng chứng của chứng thực này, là chữ ký của nhà phát hành, được lưu trữ onchain. Do đó, bất kỳ bên thứ 3 nào cũng có thể xác thực bằng chứng, hay chữ ký này, mà không cần xin phép (permissionless). Tuy nhiên, nếu muốn truy cập vào các thông tin nhạy cảm trên, bên thứ 3 cần có sự cho phép của đối tượng sở hữu (permissioned).</p><p>OnchainID cho phép lưu trữ, tổng hợp nhiều chứng thực, do nhiều nhà phát hành khác nhau, trên cùng một tài khoản OnchainID, như hình vẽ 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/76d6392033ccaaded63934e0bcef8429e17dac4cb22d8d3fc0256379ed0820b4.png" alt="Lưu trữ, tổng hợp chứng thực trên một tài khoản OnchainID." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Lưu trữ, tổng hợp chứng thực trên một tài khoản OnchainID.</figcaption></figure><h3 id="h-hop-djong-thong-minh" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Hợp đồng thông minh</h3><p>EIP-3643 đề xuất một bộ thư viện giao diện (interface) cho hợp đồng thông minh (viết tắt HĐTM), bao gồm HĐTM của token, cơ sở dữ liệu (viết tắt CSDL) khách hàng (identity registry), Tính tuân thủ (compliance).</p><p><strong>Token</strong></p><p>Như đã đề cập ở trên, token EIP-3643 là phiên bản nâng cấp của token EIP-20, trong đó, thay đổi quan trọng nhất là bổ xung điều kiện thực thi hàm <em>transfer</em> và <em>transferFrom.</em></p><p>Hàm <em>transfer</em> của token EIP-3643 có logic như sau:</p><pre data-type="codeBlock" text="function transfer(address _to, uint256 _amount) public override whenNotPaused returns (bool) {
        require(!_frozen[_to] &amp;&amp; !_frozen[msg.sender], &quot;ERC-3643: Frozen wallet&quot;);
        require(_amount &lt;= balanceOf(msg.sender) - (_frozenTokens[msg.sender]), &quot;ERC-3643: Insufficient Balance&quot;);
        require( _tokenIdentityRegistry.isVerified(to), &quot;ERC-3643: Invalid identity&quot; ); 
        require( _tokenCompliance.canTransfer(from, to, amount), &quot;ERC-3643: Compliance failure&quot; );
        _transfer(msg.sender, _to, _amount);
        _tokenCompliance.transferred(msg.sender, _to, _amount);
        return true;
    }
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">transfer</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> _to, <span class="hljs-keyword">uint256</span> _amount</span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> <span class="hljs-title"><span class="hljs-keyword">override</span></span> <span class="hljs-title">whenNotPaused</span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">bool</span></span>) </span>{
        <span class="hljs-built_in">require</span>(<span class="hljs-operator">!</span>_frozen[_to] <span class="hljs-operator">&#x26;</span><span class="hljs-operator">&#x26;</span> <span class="hljs-operator">!</span>_frozen[<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>], <span class="hljs-string">"ERC-3643: Frozen wallet"</span>);
        <span class="hljs-built_in">require</span>(_amount <span class="hljs-operator">&#x3C;</span><span class="hljs-operator">=</span> balanceOf(<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>) <span class="hljs-operator">-</span> (_frozenTokens[<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>]), <span class="hljs-string">"ERC-3643: Insufficient Balance"</span>);
        <span class="hljs-built_in">require</span>( _tokenIdentityRegistry.isVerified(to), <span class="hljs-string">"ERC-3643: Invalid identity"</span> ); 
        <span class="hljs-built_in">require</span>( _tokenCompliance.canTransfer(<span class="hljs-keyword">from</span>, to, amount), <span class="hljs-string">"ERC-3643: Compliance failure"</span> );
        _transfer(<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>, _to, _amount);
        _tokenCompliance.transferred(<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>, _to, _amount);
        <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>;
    }
</code></pre><p>Hàm <em>transferFrom</em> có logic tương tự, trong khi hàm <em>mint</em> chỉ yêu cầu địa chỉ nhận được whitelist và xác thực trên CSDL khách hàng (identity registry). Thay đổi quan trọng nhất trong hàm <em>transfer</em> bao gồm việc bổ xung 2 điều kiện sau:</p><p><strong>isVerified</strong></p><p>Hàm <em>isVerified</em> được gọi trong hàm <em>transfer</em> của token. Hàm này kiểm tra tính hợp lệ của địa chỉ nhận (bên mua), bao gồm kiểm tra địa chỉ nhận có nằm trong CSDL khách hàng của token không, OnchainID của địa chỉ nhận có các chứng thực cần thiết như KYC, AML hay không. Nếu các điều kiên được đáp ứng đủ, hàm này trả về kết quả TRUE, nếu không thì trả về kết quả FALSE.</p><p><strong>canTransfer</strong></p><p>Hàm <em>canTransfer</em> được gọi trong hàm <em>transfer</em> của token. Hàm này kiểm tra tính hợp lệ của giao dịch theo các quy định chung của token, ví dụ tổng số nhà đầu tư từ một quốc gia không vượt quá giới hạn cho phép, hoặc số lượng token một nhà đầu tư sở hữu không vượt quá giới hạn cho phép.</p><h3 id="h-csdl-khach-hang" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">CSDL khách hàng</h3><p>CSLD khách hàng (Identity registry) của token chứng khoán, là một hợp đồng thông minh lưu trữ danh sách địa chỉ ví các nhà đầu tư được whitelist của token. Mỗi địa chỉ ví sẽ liên kết với một tài khoản OnchainID và mã quốc gia của nhà đầu tư. CSDL khách hàng cung cấp hàm <em>isVerified</em> cho phép HĐTM token kiểm tra tính hợp lệ của địa chỉ nhận trong giao dịch.</p><p>Giao diện (interface) của CSDL khách hàng như sau:</p><pre data-type="codeBlock" text="interface IIdentityRegistry {


    // events
    event ClaimTopicsRegistrySet(address indexed claimTopicsRegistry);
    event IdentityStorageSet(address indexed identityStorage);
    event TrustedIssuersRegistrySet(address indexed trustedIssuersRegistry);
    event IdentityRegistered(address indexed investorAddress, IIdentity indexed identity);
    event IdentityRemoved(address indexed investorAddress, IIdentity indexed identity);
    event IdentityUpdated(IIdentity indexed oldIdentity, IIdentity indexed newIdentity);
    event CountryUpdated(address indexed investorAddress, uint16 indexed country);


    // functions
    // identity registry getters
    function identityStorage() external view returns (IIdentityRegistryStorage);
    function issuersRegistry() external view returns (ITrustedIssuersRegistry);
    function topicsRegistry() external view returns (IClaimTopicsRegistry);

    //identity registry setters
    function setIdentityRegistryStorage(address _identityRegistryStorage) external;
    function setClaimTopicsRegistry(address _claimTopicsRegistry) external;
    function setTrustedIssuersRegistry(address _trustedIssuersRegistry) external;

    // registry actions
    function registerIdentity(address _userAddress, IIdentity _identity, uint16 _country) external;
    function deleteIdentity(address _userAddress) external;
    function updateCountry(address _userAddress, uint16 _country) external;
    function updateIdentity(address _userAddress, IIdentity _identity) external;
    function batchRegisterIdentity(address[] calldata _userAddresses, IIdentity[] calldata _identities, uint16[] calldata _countries) external;

    // registry consultation
    function contains(address _userAddress) external view returns (bool);
    function isVerified(address _userAddress) external view returns (bool);
    function identity(address _userAddress) external view returns (IIdentity);
    function investorCountry(address _userAddress) external view returns (uint16);
}
"><code><span class="hljs-class"><span class="hljs-keyword">interface</span> <span class="hljs-title">IIdentityRegistry</span> </span>{


    <span class="hljs-comment">// events</span>
    <span class="hljs-function"><span class="hljs-keyword">event</span> <span class="hljs-title">ClaimTopicsRegistrySet</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> <span class="hljs-keyword">indexed</span> claimTopicsRegistry</span>)</span>;
    <span class="hljs-function"><span class="hljs-keyword">event</span> <span class="hljs-title">IdentityStorageSet</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> <span class="hljs-keyword">indexed</span> identityStorage</span>)</span>;
    <span class="hljs-function"><span class="hljs-keyword">event</span> <span class="hljs-title">TrustedIssuersRegistrySet</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> <span class="hljs-keyword">indexed</span> trustedIssuersRegistry</span>)</span>;
    <span class="hljs-function"><span class="hljs-keyword">event</span> <span class="hljs-title">IdentityRegistered</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> <span class="hljs-keyword">indexed</span> investorAddress, IIdentity <span class="hljs-keyword">indexed</span> identity</span>)</span>;
    <span class="hljs-function"><span class="hljs-keyword">event</span> <span class="hljs-title">IdentityRemoved</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> <span class="hljs-keyword">indexed</span> investorAddress, IIdentity <span class="hljs-keyword">indexed</span> identity</span>)</span>;
    <span class="hljs-function"><span class="hljs-keyword">event</span> <span class="hljs-title">IdentityUpdated</span>(<span class="hljs-params">IIdentity <span class="hljs-keyword">indexed</span> oldIdentity, IIdentity <span class="hljs-keyword">indexed</span> newIdentity</span>)</span>;
    <span class="hljs-function"><span class="hljs-keyword">event</span> <span class="hljs-title">CountryUpdated</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> <span class="hljs-keyword">indexed</span> investorAddress, <span class="hljs-keyword">uint16</span> <span class="hljs-keyword">indexed</span> country</span>)</span>;


    <span class="hljs-comment">// functions</span>
    <span class="hljs-comment">// identity registry getters</span>
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">identityStorage</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">view</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params">IIdentityRegistryStorage</span>)</span>;
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">issuersRegistry</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">view</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params">ITrustedIssuersRegistry</span>)</span>;
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">topicsRegistry</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">view</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params">IClaimTopicsRegistry</span>)</span>;

    <span class="hljs-comment">//identity registry setters</span>
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">setIdentityRegistryStorage</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> _identityRegistryStorage</span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span></span>;
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">setClaimTopicsRegistry</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> _claimTopicsRegistry</span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span></span>;
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">setTrustedIssuersRegistry</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> _trustedIssuersRegistry</span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span></span>;

    <span class="hljs-comment">// registry actions</span>
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">registerIdentity</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> _userAddress, IIdentity _identity, <span class="hljs-keyword">uint16</span> _country</span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span></span>;
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">deleteIdentity</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> _userAddress</span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span></span>;
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">updateCountry</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> _userAddress, <span class="hljs-keyword">uint16</span> _country</span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span></span>;
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">updateIdentity</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> _userAddress, IIdentity _identity</span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span></span>;
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">batchRegisterIdentity</span>(<span class="hljs-params"><span class="hljs-keyword">address</span>[] <span class="hljs-keyword">calldata</span> _userAddresses, IIdentity[] <span class="hljs-keyword">calldata</span> _identities, <span class="hljs-keyword">uint16</span>[] <span class="hljs-keyword">calldata</span> _countries</span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span></span>;

    <span class="hljs-comment">// registry consultation</span>
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">contains</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> _userAddress</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">bool</span></span>)</span>;
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">isVerified</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> _userAddress</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">bool</span></span>)</span>;
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">identity</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> _userAddress</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">IIdentity</span>)</span>;
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">investorCountry</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> _userAddress</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">uint16</span></span>)</span>;
}
</code></pre><h3 id="h-tinh-tuan-thu-compliance" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Tính tuân thủ (compliance)</h3><p>Hợp đồng tuân thủ là HĐTM quản lý các quy định chung mà token cần phải tuân thủ trong suốt vòng đời. Ví dụ, quy định về số lượng tối đa nhà đầu tư đến từ một quốc gia, số lượng token tối đa mỗi nhà đầu tư được phép sở hữu, danh sách các quốc gia được phép sở hữu token, ... Hợp đồng tuân thủ cung cấp hàm <em>canTransfer</em> cho phép HĐTM token kiểm tra tính hợp lệ của giao dịch đối với các quy định chung.</p><p>Giao diện (interface) của hợp đồng tuân thủ như sau:</p><pre data-type="codeBlock" text="interface ICompliance {

    // events
    event TokenBound(address _token);
    event TokenUnbound(address _token);

    // functions
    // initialization of the compliance contract
    function bindToken(address _token) external;
    function unbindToken(address _token) external;

    // check the parameters of the compliance contract
    function isTokenBound(address _token) external view returns (bool);
    function getTokenBound() external view returns (address);

    // compliance check and state update
    function canTransfer(address _from, address _to, uint256 _amount) external view returns (bool);
    function transferred(address _from, address _to, uint256 _amount) external;
    function created(address _to, uint256 _amount) external;
    function destroyed(address _from, uint256 _amount) external;
}
"><code><span class="hljs-class"><span class="hljs-keyword">interface</span> <span class="hljs-title">ICompliance</span> </span>{

    <span class="hljs-comment">// events</span>
    <span class="hljs-function"><span class="hljs-keyword">event</span> <span class="hljs-title">TokenBound</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> _token</span>)</span>;
    <span class="hljs-function"><span class="hljs-keyword">event</span> <span class="hljs-title">TokenUnbound</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> _token</span>)</span>;

    <span class="hljs-comment">// functions</span>
    <span class="hljs-comment">// initialization of the compliance contract</span>
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">bindToken</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> _token</span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span></span>;
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">unbindToken</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> _token</span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span></span>;

    <span class="hljs-comment">// check the parameters of the compliance contract</span>
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">isTokenBound</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> _token</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">bool</span></span>)</span>;
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getTokenBound</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">view</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">address</span></span>)</span>;

    <span class="hljs-comment">// compliance check and state update</span>
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">canTransfer</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> _from, <span class="hljs-keyword">address</span> _to, <span class="hljs-keyword">uint256</span> _amount</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">bool</span></span>)</span>;
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">transferred</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> _from, <span class="hljs-keyword">address</span> _to, <span class="hljs-keyword">uint256</span> _amount</span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span></span>;
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">created</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> _to, <span class="hljs-keyword">uint256</span> _amount</span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span></span>;
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">destroyed</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> _from, <span class="hljs-keyword">uint256</span> _amount</span>) <span class="hljs-title"><span class="hljs-keyword">external</span></span></span>;
}
</code></pre><h2 id="h-ket-luan" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Kết luận</h2><p>Tài sản thế giới thực (RWA) là một ứng dụng hết sức quan trọng của blockchain và được nhận định là một trong các xu hướng dẫn dắt chu kỳ crypto 2024-2025. Tuy nhiên, các tiêu chuẩn và giải pháp cho RWA còn khá hạn chế. Vì vậy, có thể coi EIP-3643 như là một tiêu chuẩn tiên phong, mở ra cơ hội cho RWA được triển khai và sử dụng rộng rãi trong thị trường crypto nói riêng, tài chính nói chung. Cụ thể, EIP-3643 là một phiên bản nâng cấp của EIP-20, đưa ra tiêu chuẩn cho việc phát hành, giao dịch, sở hữu token RWA. Dựa trên OnchainID và hệ thống xác thực phân tán DVS, các giao dịch token RWA sẽ được đảm bảo tính pháp lý, cho phép RWA trở thành một công cụ tài chính được công nhận chính thức. Hy vọng trong tương lai không xa, các tài sản thế giới thực như bất động sản, chứng khoán, trái phiếu sẽ được token hóa và giao dịch một cách thuận tiện, nhanh chóng và an toàn trên không gian blockchain. Điều này sẽ mở ra một thị trường lớn hàng trăm tỷ đô la, đồng thời chứng minh tính ứng dụng và giá trị thực tiễn của công nghệ blockchain với đời sống.</p>]]></content:encoded>
            <author>0xbarchitect@newsletter.paragraph.com (0xbarchitect)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/6e444b1eba706c574fbdcc9e937cd8af4875a0aa0ccca39a31b39782f4a13dc8.png" length="0" type="image/png"/>
        </item>
    </channel>
</rss>