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

Hạ viện Montana bác bỏ dự luật đưa Bitcoin vào danh mục dự trữ...

Ngày 22/2, Hạ viện Montana đã bỏ phiếu bác bỏ một dự luật có thể đưa Bitcoin trở thành tài sản dự trữ của...

Memecoin là nguyên mẫu của tiềm thức tập thể – CEO CryptoQuant

CEO CryptoQuant Ki Young Ju mới đây nhận định rằng “memecoin là hiện thân của tiềm thức tập thể” — một khái niệm do...
Biến động ngụ ý của Bitcoin gần mức thấp kỷ lục khi Strategy báo hiệu mua BTC

Biến động ngụ ý của Bitcoin gần mức thấp kỷ lục khi Strategy báo...

Bitcoin hướng tới mức 95.000 USD vào cuối tuần (23/2) giữa những tín hiệu cho thấy công ty phân tích dữ liệu doanh nghiệp...

Đề xuất Arbitrum DAO đầu tư 7.500 ETH vào dự án ngoài hệ gây...

Kế hoạch tái đầu tư một phần lượng ETH trong kho bạc của Arbitrum vào các cơ hội sinh lợi đang vấp phải sự phản...
FXGuys ($FXG) so với XRP so với BNB: Đồng nào sẽ tăng trưởng 1000% trước

[QC] FXGuys ($FXG) so với XRP so với BNB: Đồng nào sẽ tăng trưởng...

Các chuyên gia đã theo dõi chặt chẽ FXGuys ($FXG), Ripple (XRP) và Binance coin (BNB) để tìm ra đồng nào sẽ tăng trưởng...
4-altcoin-btc

4 altcoin này cho thấy triển vọng bứt phá khi BTC tiếp tục đi...

Bitcoin (BTC) đã trượt xuống dưới mức $95.500 vào ngày 23/2 sau khi không thể vượt qua ngưỡng $100.000 vào ngày 21/2. Càng kéo...

eXch phủ nhận cáo buộc rửa tiền khi dự trữ ETH tăng vọt sau...

Nhóm Lazarus, được cho là thủ phạm đứng sau vụ hack 1,4 tỷ USD vào sàn Bybit, đang tìm cách rửa số tiền chiếm...

Hacker Bybit có thể đứng sau các vụ lừa đảo memecoin trên Solana: ZachXBT

Theo nhà điều tra on-chain ZachXBT, Lazarus Group, nhóm tội phạm bị tình nghi đứng sau vụ hack Bybit trị giá 1,4 tỷ USD,...

Ủy viên SEC Hester Peirce kêu gọi ý kiến công chúng về quy định...

Ủy viên Ủy ban Chứng khoán và Giao dịch Hoa Kỳ (SEC) Hester Peirce nhấn mạnh rằng sự đóng góp ý kiến từ công...
DeFi

DeFi và vấn đề thanh khoản: Làm thế nào để đảm bảo hệ sinh...

Khủng hoảng thanh khoản ở DeFi không phải là vấn đề mới, nhưng ngành này vẫn chưa tìm ra giải pháp bền vững. Trong...
Michael Saylor của Strategy ám chỉ việc tiếp tục mua Bitcoin

Michael Saylor của Strategy ám chỉ việc tiếp tục mua Bitcoin

Strategy, trước đây được biết đến với tên MicroStrategy, tiếp tục thể hiện cam kết mạnh mẽ với Bitcoin khi nhà sáng lập Michael...
ripple

CTO Ripple giải mã bí ẩn ví ấm: Lợi ích và rủi ro

Trong một phản hồi gần đây trên X, CTO Ripple, David Schwartz, giải thích về khái niệm ví ấm - một loại ví tiền...
Nước Mỹ đang quay trở lại đúng hướng để giành lại vị thế dẫn đầu về tiền điện tử

Nước Mỹ đang quay trở lại đúng hướng để giành lại vị thế dẫn...

Không thể phủ nhận rằng lễ nhậm chức của Tổng thống Trump đánh dấu một cột mốc quan trọng đối với những nhà đổi...
XRP

Cảnh báo: XRP chuẩn bị cho một động thái lớn về giá

Sau nhiều ngày giao dịch đi ngang, các chỉ báo kỹ thuật cho thấy Ripple (XRP) đang chuẩn bị cho động thái giá quyết...

TVL của Solana giảm 30% – Liệu mạng lưới có thể phục hồi sau...

Tổng giá trị khóa (TVL) của Solana gần đây đã giảm xuống mức thấp mới là 9,9 tỷ đô la, đánh dấu một cột...

Sự chấp thuận của ETF sẽ giúp Solana thoát khỏi danh xưng ‘meme chain’

Khi Solana ra mắt vào năm 2020, Anatoly Yakovenko đã mang đến một tầm nhìn đầy tham vọng về việc xây dựng nền tảng...