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

Các ứng dụng tiền điện tử bùng nổ nhờ memecoin TRUMP

Sau khi memecoin chính thức của Tổng thống Hoa Kỳ Donald Trump được ra mắt, các ứng dụng liên quan đến tiền điện tử...

Đây là cách memecoin TRUMP và MELANIA thúc đẩy mạnh mẽ việc chấp nhận...

Một cuộc khảo sát gần đây cho thấy nhiều người mua memecoin Official Trump (TRUMP) và Official Melania (MELANIA) là những nhà đầu tư tiền...

Đã đến lúc thúc đẩy tăng trưởng mạnh mẽ cho Avalanche tại Hoa Kỳ:...

Vào ngày 21 tháng 1, Emin Gün Sirer, nhà sáng lập Ava Labs, đã bày tỏ sự lạc quan về động lực đổi mới...
Coinbase

Nhà điều hành Coinbase xác định được 430 Bitcoin liên quan đến Ross Ulbricht

Giám đốc chiến lược sản phẩm và hoạt động kinh doanh của Coinbase, Conor Grogan, tuyên bố đã xác định được khoảng 430 Bitcoin...
Solana

Solana giảm 13% từ ATH nhưng đà tăng vẫn bền vững

Tính đến thời điểm viết bài, Solana (SOL) giảm 13% so với mức cao nhất mọi thời đại (ATH) là 294,33 đô la đạt...

Dogecoin (DOGE) hướng đến mức cao nhất trong nhiều năm khi thời gian nắm...

Dogecoin (DOGE), memecoin hàng đầu, đang nhấp nháy tín hiệu breakout tiềm năng khỏi phạm vi giao dịch hẹp của mình. Nếu động lực này...
Coinbase

Coinbase xử lý giao dịch chậm trên Solana, cam kết hỗ trợ cấp độ...

CEO Coinbase Brian Armstrong thông báo sàn giao dịch đã giải quyết triệt để tình trạng chậm trễ trong giao dịch Solana, phản hồi trước...
crypto token

Công ty crypto nhận tội wash trading token do FBI tạo ra

Một công ty dịch vụ tài chính crypto đã nhận tội hỗ trợ thao túng thị trường cho một token do FBI tạo ra...

Nhà phát triển Ethereum Eric Conner từ chức, bày tỏ thất vọng với ban...

Eric Conner, một trong những nhà phát triển cốt lõi của hệ sinh thái Ethereum, đã thông báo rời khỏi cộng đồng Ethereum, nêu...

CARV ra mắt D.A.T.A Framework, giúp AI Agent ‘nhìn và nghe’ dữ liệu on-chain...

CARV, hệ sinh thái AI chain cho phép chủ quyền dữ liệu ở quy mô lớn, vừa công bố ra mắt D.A.T.A Framework, một...

Ví Solana liên kết với ZachXBT đã rút gần 4 triệu đô la từ...

Một ví Solana liên kết với nhà điều tra blockchain nổi tiếng ZachXBT đã rút gần 4 triệu đô la từ một dự án...

80% hodler Bitcoin ngắn hạn đang có lãi khi FOMO diễn ra mạnh mẽ

Sau khi ghi nhận mức tăng 10% vào ngày 20 tháng 1, giá Bitcoin (BTC) tiếp tục duy trì trên 100.000 USD trong suốt...

Joe Lubin: Các nhà phát hành Ethereum ETF mong đợi staking sẽ sớm được...

Các nhà phát hành quỹ hoán đổi danh mục Ethereum (ETF) hy vọng rằng các quỹ cung cấp dịch vụ staking có thể "sớm"...

Giá TORN tăng 175% sau khi Tòa án Hoa Kỳ lật ngược lệnh trừng...

Tòa án Quận phía Tây Texas đã ra lệnh đảo ngược quyết định trước đó ủng hộ các biện pháp trừng phạt đối với...

Thợ đào Bitcoin chứng kiến biên lợi nhuận gấp 3 lần mặc dù độ...

Các thợ đào Bitcoin đang ghi nhận mức lợi nhuận tăng gấp ba lần, bất chấp độ khó khai thác ngày càng gia tăng. Mô...

Vụ lừa đảo “ví XRP của Bộ Ngân khố Hoa Kỳ” lan truyền trên...

Một vụ lừa đảo trên mạng xã hội gần đây đã gây xôn xao cộng đồng crypto, khi những cá nhân có trụ sở...