Trang chủ Tạp chí Lập trình smart contracts: Phần 4 Bài toán thực tế

Lập trình smart contracts: Phần 4 Bài toán thực tế

Chúng ta cùng đi vào giải quyết bài toán thực tế, qua đó ta có thể thấy được ưu và nhược điểm của smart contracts trên nền Ethereum, cũng như nhìn cận cảnh quá trình phát triển một dApp thực sự.

Chọn chủ đề

Mình chọn chủ đề hợp đồng làm việc part time

Phân tích bài toán

Bài toán hợp đồng làm việc part time sẽ bao gồm những chức năng sau:

  • Tạo hợp đồng part time
  • Định ra khoảng thời gian để hợp đồng có hiệu lực
  • Giải quyết tranh chấp
  • Hiển thị các hợp đồng đang khả dụng
  • Kí kết các hợp đồng khả dụng
  • Thế chấp và chi trả hợp đồng
  • Xóa bỏ hợp đồng quá hạn
  • Đánh giá các cá nhân

Vấn đề được giải quyết khi áp dụng smart contracts và dApp:

  • Giảm thiểu chi phí vận hành
  • Đảm bảo hợp đồng luôn được thực thi như đã định
  • Thời gian của hợp đồng có thể trong vòng kéo dài trong 1 tiếng
  • Minh bạch và tạo ra market mở cho mọi cá nhân tham gia

Mô hình của hệ thống

Smart contracts

Phần màu xanh mô tả vể quá trình phát triển smart contracts:

  • Smart contract được viết bằng một ngôn ngữ phổ biến như Solidity (Viper).
  • Smart contract thông qua trình biên dịch solidity compiler (solc) được biên dịch thành operation code
  • Operation code được deploy vào blockchain của Ethereum tại một logical address.

Phần màu cam mô tả front-end của dApp:

  • Private key & public key sẽ lưu trữ ở phía client side, điều này khác biệt hoàn với các application truyền thống, khi mà phần quan trọng nhất lại không nắm bởi third party
  • GUI có thể được xây dựng bằng bất cứ thứ gì, thuận tiện với developer. Trong ví dụ này mình chọn Web UI (HTML/CSS/JS).
  • Users sẽ tương tác với smart contracts thông qua Web UI. Và Web UI còn hiển thị dữ liệu của smart contracts.
  • Mỗi lần trigger methodscủa smart contract thông qua Web UI sẽ tiêu tốn Ethereum.

Tiến hành

Mình thực hiện lệnh truffle init để tạo khởi tạo project sử dụng development framework là truffle. Viết mã nguồn đầu tiên của Part Time contract.

Toàn bộ smart contract như sau

pragma solidity ^0.4.17;

contract PartTime {

struct Job {

uint256 id;

address creator;

uint256 salary;

bytes title;

bytes description;

}

uint256 totalJob;

mapping (uint256 => Job) public jobData;

function createJob(uint256 salary, bytes title, bytes description)

returns(uint256 jobId)

{

// Saving a little gas by create a temporary object

Job memory newJob;

// Assign jobId

jobId = totalJob;

newJob.id = jobId;

newJob.title = title;

newJob.description = description;

newJob.salary = salary;

newJob.creator = msg.sender;

// Append newJob to jobData

jobData[totalJob++] = newJob;

}

}

Struct job

Mình define struct Job chứa thông tin của một công việc part time, bao gồm các thông tin như id, title, description, salary, creator:

struct Job {

uint256 id;

address creator;

uint256 salary;

bytes title;

bytes description;

}

Mapping dữ liệu

Mình muốn có thể chứa nhiều công việc trong smart contract, nên mình khai báo một mapping để chứa được nhiều jobs hơn, đoạn code này làm nhiệm vụ mapping một unsigned integer 256 bits vào một struct job:

mapping (uint256 => Job) public jobData;

Mapping thế này cho phép bạn truy cập lại dữ liệu cũ khi bạn có được index của dữ liệu, thông qua sử dụng toán tử [] (khá giống với array, nhưng dùng mapping tiết kiệm gas hơn).

Thêm một record vào bảng mapping

function createJob(uint256 salary, bytes title, bytes description)

returns(uint256 jobId)

{

// Saving a little gas by create a temporary object

Job memory newJob;

// Assign jobId

jobId = totalJob;

newJob.id = jobId;

newJob.title = title;

newJob.description = description;

newJob.salary = salary;

newJob.creator = msg.sender;

 

// Append newJob to jobData

jobData[totalJob++] = newJob;

}

Function này sẽ thêm một job vào phía cuối mapping table chứa rất nhiều struct job mà chúng ta lưu trong jobData.

Thử nghiệm deploy

Smart contracts

Đầu tiên mình thực thi ganache-cli:

Smart contracts

Giờ chúng ta open một command prompt khác thực thi:Toàn bộ mã nguồn các bạn có thể tải về tại https://github.com/chiro-hiro/part-time-dapp (phân phối theo giấy phép MIT).

Dislaimer: Đây là thông tin cung cấp dưới dạng blog cá nhân, không phải thông tin tổng hợp hay lời khuyên đầu tư. Chúng tôi không chịu trách nhiệm về các quyết định đầu tư của bạn.

MỚI CẬP NHẬT

Runes thêm gia vị cho bữa tiệc halving, khơi dậy mùa mới cho Bitcoin...

Halving năm 2024 là một sự kiện lớn trong thế giới tiền điện tử. Tuy nhiên, năm nay, giao thức Runes – và cuộc...

Michael Saylor kiếm được 370 triệu USD từ việc bán cổ phiếu MicroStrategy khi...

Trong bối cảnh giá Bitcoin tăng vọt 46% từ đầu năm đến nay, bò BTC Michael Saylor đã bán 370.000 cổ phiếu MicroStrategy một...

Lý do giá IMX vẫn tăng 3% dù ImmutableX mở khóa 69 triệu đô...

ImmutableX (IMX), được xếp hạng trong số 15 giải pháp Ethereum Layer 2 hàng đầu theo vốn hóa thị trường, đã tăng gần 3%...

Nhà phát triển Bitcoin Ordinals chia sẻ mẹo khai thác Runes trong thời gian...

Nhà phát triển Bitcoin Ordinals sẽ sớm ra mắt giao thức mới, được gọi là Runes, có kế hoạch cạnh tranh với tiêu chuẩn...

Telegram có kế hoạch token hóa sticker và hỗ trợ chức năng blockchain trên...

Mới đây, trong bối cảnh TON tăng trưởng vượt bậc, Pavel Durov đã vạch ra kế hoạch cho ứng dụng nhắn tin Telegram nhằm...
Tho dao Bitcoin

Benchmark: Các thợ đào Bitcoin được định vị tốt hơn cho halving lần này

Khi halving lần thứ tư của Bitcoin chỉ còn chưa đầy một ngày, nhà môi giới Benchmark cho biết thợ đào là nhóm bị...

Cách tiếp cận halving Bitcoin lần thứ tư với tư cách là một nhà...

Sự sụt giảm gần đây của Bitcoin (BTC) mang đến cơ hội cho các nhà đầu tư mua dip khi halving Bitcoin lần thứ...

Tether mở rộng USDT và XAUT sang mạng The Open Network khi TON tăng...

Trong bối cảnh thị trường biến động khi sự kiện halving chuẩn bị diễn ra, Tether, công ty đứng sau stablecoin lớn nhất thế...
Fed

32% trader Polymarket cược rằng Fed Hoa Kỳ không cắt giảm lãi suất trong...

Những người đặt cược trên trang web cá cược dựa vào blockchain Polymarket hiện nhận thấy 32% khả năng Cục Dự trữ Liên bang...

[QC] ICO Đồng Meme Coin Dogeverse Huy Động Được 6 triệu USD Sau Khi...

 Đồng Meme coin đa chuỗi mới, Dogeverse đã huy động được 6 triệu USD trong đợt presale và gần đây đã vượt qua được...

Runes có thể sẽ được hỗ trợ sau cơn sốt BRC-20 và Ordinals

Với mọi sự chú ý đổ dồn vào sự kiện halving, Bitcoin đang là trung tâm trên thị trường. Tiền điện tử tiên phong...

Tin vắn Crypto 19/04: Bitcoin đang chuẩn bị cho động thái lớn sau halving...

Từ nhận định Bitcoin có thể sắp diễn ra động thái lớn sau halving đến Tập đoàn SBI công bố kế hoạch phát hành...

Đây là lý do tại sao Bitcoin sẽ không dừng ở mức 100 nghìn...

Khi nói về các chính sách tiền tệ được thực hiện bởi chính phủ Hoa Kỳ cũng như các gã khổng lồ kinh tế...
Casino Tiền Điện Tử Mega Dice Ra Mắt Chương Trình Presale

[QC] Casino Tiền Điện Tử Mega Dice Ra Mắt Chương Trình Presale, Cán Mốc...

 Mega Dice, một dự án casino tiền điện tử trực tuyến đang phát triển cực kỳ nhanh chóng và đang làm mưa làm gió...

Halving chỉ còn 87 block: Bitcoin phục hồi lên gần 65.000 USD

Trong bối cảnh căng thẳng địa chính trị leo thang ở Trung Đông, Bitcoin đã đưa giới đầu tư đi tàu lượn siêu tốc...
bitcoin

Nhà sáng lập Skybridge: Bitcoin có thể tăng vọt lên 200.000 đô la sau...

Trong một cuộc phỏng vấn gần đây về tương lai của Bitcoin, Anthony Scaramucci, nhà sáng lập và đối tác quản lý của Skybridge...