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

Updated: 29/04/2018 at 20:00

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.

Được đề cập trong bài viết
Bình luận
Đang tải
Mới cập nhật

Khi Tổng thống Donald Trump ngày càng mở rộng quan hệ với ngành crypto, các thành viên đảng Dân chủ đã lên tiếng cảnh báo, cáo buộc ông đang vận hành một “chính quyền vận hành theo lợi ích”. Tuy nhiên, đằng sau những tranh cãi gay gắt đó, một... ...

Unichain, blockchain Layer 2 gốc của Uniswap, đã vượt qua Ethereum để trở thành chuỗi chủ đạo cho phiên bản Uniswap v4, chiếm khoảng 75% tổng khối lượng giao dịch — theo dữ liệu từ Dune Analytics do Entropy Advisors tổng hợp. Trong khi đó, Ethereum hiện chỉ chiếm dưới... ...

Tổng hợp nhiều chỉ số khác nhau cho thấy ETH đang tiến gần đến thời điểm có thể bứt phá, tuy nhiên dữ liệu on-chain lại cho thấy một bức tranh kém lạc quan, làm gián đoạn khả năng lặp lại các xu hướng lịch sử. Hiện tại, ETH đang... ...

Bitcoin tăng vọt lên trên $104.000 vào ngày 8 tháng 5, đạt mức cao nhất trong hơn ba tháng. Đà tăng giá 4,6% trong ngày đã kích hoạt 205 triệu USD thanh lý các vị thế Short và làm xói mòn giá trị của hầu hết mọi quyền chọn bán... ...

Giá Solana (SOL) bất ngờ bứt phá vượt ngưỡng $160, khơi dậy làn sóng suy đoán khi SOL Strategies chuẩn bị đưa cổ phiếu mã hóa lên nền tảng blockchain Solana. Giá Solana vượt mốc $160 lần đầu tiên kể từ tháng Ba, nhờ đợt tăng mạnh do Trump thúc... ...

AI Coin đang bắt đầu thu hút sự quan tâm mới, nhưng lĩnh vực này vẫn còn cách xa mức đỉnh trước đó. Trong khi đợt tăng giá gần đây đã đẩy các dự án như VIRTUAL và TURBO lên hơn 280% trong 30 ngày qua, hầu hết các AI... ...

Cardano (ADA) tìm thấy sức mạnh mới, tăng hơn 12% trong 24 giờ qua, đưa vốn hóa thị trường lên mức 27,1 tỷ USD. Khối lượng giao dịch đã tăng vọt 131% trong cùng kỳ, đạt hơn 1,4 tỷ USD, báo hiệu sự quan tâm và hoạt động ngày càng... ...

Mới đây, Ripple đã bất ngờ chuyển 300 triệu XRP vào một ví không xác định, tiếp đó là thêm 70 triệu token được luân chuyển qua các địa chỉ ẩn danh. Tổng giá trị của chuỗi giao dịch quy mô “cá voi” này lên tới 782 triệu USD, lập... ...

Ripple Labs và Ủy ban Chứng khoán và Giao dịch Hoa Kỳ (SEC) đã chính thức đạt được một thỏa thuận dàn xếp, mở đường khép lại vụ kiện lịch sử kéo dài từ năm 2020 — nếu được tòa án chấp thuận. Theo hồ sơ nộp lên tòa án... ...

Trong một diễn biến bất ngờ làm đảo lộn các thị trường cá cược toàn cầu, Hồng y người Mỹ Robert Prevost đã được bầu làm Giáo hoàng vào thứ Năm, trở thành vị Giáo hoàng đầu tiên sinh ra tại Hoa Kỳ và đánh bại loạt ứng viên châu... ...

Xem thêm bài viết
Chọn chế độ hiển thị:
Bình thường Bảo vệ mắt Dark Mode