Bitcoin Addict - ข่าวสารและบทความคริปโต

internet computer get to know basics of internet in blockchain world
26 January 2024บทความโดย Rawiwarn Owattasanee

Internet Computer ทำความรู้จักพื้นฐานของอินเตอร์เน็ตบนโลกบล็อกเชน

บทความนี้แนะนำพื้นฐานของ Internet Computer พร้อมอธิบายแนวคิดสำคัญอย่าง Principal และ Identity ที่นักพัฒนาต้องรู้เพื่อเริ่มสร้างแอปฯ บนบล็อกเชน

บทความนี้จะเล่าเกี่ยวกับชุดข้อมูลพื้นฐานของ Internet Computer พร้อมคำจำกัดความของ "Principal" และ "Identity" เพื่อจัดการแอปฯ ที่ปรับใช้บน Internet Computer

เกี่ยวกับบทความนี้

ในบทความนี้จะมีการอธิบายแนวคิดสำคัญที่นักพัฒนาจำเป็นต้องรู้เพื่อเริ่มมีส่วนร่วมกับ Internet Computer และสร้างแอปฯ อย่างง่าย ๆ

โดยจะมีการยกตัวอย่างที่เข้าใจง่าย ถ้าหากคุณมีพื้นฐานในการสร้างเว็บแอปพลิเคชันอยู่แล้ว หรือรู้ภาษาโปรแกรมอย่างน้อยหนึ่งภาษา และโต้ตอบกับคอมพิวเตอร์ของคุณด้วยคำสั่งได้อย่างสบายใจ

มาเริ่มทำความคุ้นเคยกับแนวคิดหลักในการจัดการแอปฯ ที่นำไปใช้กับ Internet Computer กันดีกว่า!

Internet Computer (ICP) คืออะไร?

Internet Computer (ICP) คือแพลตฟอร์มรูปแบบใหม่สำหรับสร้างแอปฯ อินเทอร์เน็ตที่มีคุณสมบัติของผู้ให้บริการระบบคลาวด์ เช่น AWS เข้ากับบล็อกเชนแบบกระจายศูนย์ เช่น Ethereum หรือ Solana โดย Internet Computer เหมาะอย่างยิ่งสำหรับการใช้งาน 3 กรณี ดังนี้

  1. ทำให้เว็บ/แอปมือถือมีความโปร่งใส ยืดหยุ่น และผ่านการเซ็นเซอร์มากขึ้น
  2. เร่งความเร็วแอปฯ บล็อกเชน เช่น Tokens, NFTs, DeFi เพื่อให้ทำงานที่ความเร็วระดับเว็บ เร็วขึ้นหลายร้อยหรือหลายพันเท่า และราคาถูกกว่าบล็อกเชน Ethereum
  3. รวมแอปฯ ทั้งสองแบบไว้ในแพ็คเดียวที่ช่วยให้นักพัฒนาสามารถเสนอบริการประเภทใหม่ เช่น NFT รุ่นต่อไปและการกำกับดูแลที่เปิดกว้างมากขึ้น

ในขั้นของการใช้งาน Internet Computer คือเครือข่ายของศูนย์ข้อมูลแบบกระจาย (โหนด) ทั่วโลกที่รันโค้ดแอปพลิเคชันและจัดเก็บข้อมูล โดยทำงานเป็นโปรโตคอล ซึ่งหมายความว่าเครือข่ายของโหนดเปิดอยู่ ดังนั้น ใครก็สามารถเข้าเข้าร่วมเพื่อเพิ่มความสามารถในการคำนวณและรับค่าธรรมเนียมก๊าซเป็นการตอบแทนได้

แอปฯ ของ Internet Computer ประกอบด้วยส่วนประกอบง่าย ๆ ที่เรียกว่าสัญญาอัจฉริยะแบบ canister โดยคุณสามารถมองว่า canister เป็นสิ่งที่คล้ายกับวัตถุจากการเขียนโปรแกรมเชิงวัตถุ ที่รวมทั้งรหัสและข้อมูลและสามารถสื่อสารกับโลกภายนอก: ผู้ใช้ บริการเครือข่าย และ canister อื่น ๆ

“Principal” คืออะไร?

Principal” คือบุคคลที่สามารถโต้ตอบกับระบบคอมพิวเตอร์และสามารถระบุตัวตนเพื่อจุดประสงค์นี้ โดย Internet Computer มี Principal อยู่ 2 ประเภท ได้แก่

  • ผู้ใช้ สามารถโต้ตอบกับ Internet Computer โดยการปรับใช้ canister ย้ายโทเค็น ICP จากบัญชีหนึ่งไปยังอีกบัญชีหนึ่ง หรือการเรียกใช้ canister methods
  • Canister สามารถดำเนินการในแบบเดียวกันโดยทางโปรแกรม

โดยส่วนใหญ่แล้วเมื่อเราพูดถึง Principal เราจะหมายถึง "Principal id" ซึ่งเป็นตัวระบุเฉพาะที่กำหนดให้กับ Principal และสามารถใช้เพื่อระบุทรัพยากรที่ผู้ใช้หรือ Canister สามารถเข้าถึงได้ โดยในเอกสารและเครื่องมือของ Internet Computer เราจะใช้ "principal" และ "principal id" สลับกันได้

และนี้คือตัวอย่างการแสดงข้อความของ Principal id:

% dfx identity get-principal

nfxu4-cn7qt-x7r3c-5dhnk-dcrct-gmgoz-67gcg-5glvc-2krhv-gcmsr-qqe

Principals จะคล้ายกับคีย์ SSH สาธารณะ ตัวอย่างเช่น เราเพิ่มคีย์ SSH สาธารณะลงใน GitHub เพื่อให้สามารถเข้าถึงพื้นที่เก็บข้อมูลส่วนตัวได้ ในทำนองเดียวกัน เราต้องลงทะเบียนตัวการของคุณกับบริการที่คุณวางแผนจะโต้ตอบด้วยในอนาคต Principals (เช่น คีย์ SSH สาธารณะ) ไม่ได้เป็นความลับ ดังนั้น คุณจึงสามารถแชร์กับใครก็ได้เมื่อจำเป็น

คุณสมบัติทั่วไปของ Principals และคีย์ SSH สาธารณะ:

  • They are not secret ไม่เป็นความลับ
  • จำเป็นต้องลงทะเบียนกับบริการที่คุณต้องการเข้าถึง
  • ต้องมีรหัสลับเพิ่มเติมในการตรวจสอบสิทธิ์ (แต่ไม่ต้องกังวล — คุณได้สร้างรหัสลับไว้แล้วโดยอัตโนมัติ)

แล้วทำไมเราถึงต้องการ Principal?

ในฐานะนักพัฒนา เราต้องมี Principal เพื่อระบุตัวเองต่อ Internet Computer เพื่อทำหน้าที่ต่อไปนี้:

  • ปรับใช้ Canister (เหมือนกับการปรับใช้ dapps หรือสัญญาอัจฉริยะ)
  • โต้ตอบกับ Canister ที่ใช้งานอยู่แล้ว เช่น โดยการเรียกเมธอด canister method
  • จัดการ Canister เช่น หยุดหรือเปลี่ยนพารามิเตอร์ และจัดการการชำระเงินโฮสติ้ง (ดูบทความถัดไปใน Cycle Wallets) 

Canister ใช้ Principal เพื่อให้แน่ใจว่าการดำเนินการแต่ละครั้งจะดำเนินการโดยผู้ใช้ที่ได้รับอนุญาตเท่านั้น ตัวอย่างเช่น ผู้ใช้จำเป็นต้องระบุตัวเองว่าเป็น Principal เฉพาะเพื่อให้สามารถปรับใช้ Canister ด้วยรหัสที่อัปเดตอีกครั้ง หรือย้ายยอดการชำระเงินของ Canister ไปยังกระเป๋าเงินอื่น

Internet Identity ยังใช้ Principal ในเบื้องหลังเพื่อระบุตัวคุณต่อ DApps ที่ต้องพบปะกับผู้ใช้ต่าง ๆ อย่างไรก็ตาม ในกรณีนี้ เราแทบจะไม่ได้เห็น Principal ของเราโดยตรงเลย

จะได้รับ Principal ปัจจุบันได้อย่างไร?

โดยส่วนใหญ่ คุณจะโต้ตอบกับ Principal ในระหว่างการพัฒนา IC dapps บนเครื่องพัฒนาของคุณ คุณสามารถรับ Principal ปัจจุบันได้โดยพิมพ์คำสั่งนี้ลงในคอนโซล:

% dfx identity get-principal

nfxu4-cn7qt-x7r3c-5dhnk-dcrct-gmgoz-67gcg-5glvc-2krhv-gcmsr-qqe

โปรดทราบว่าเราต้องติดตั้งและรันคำสั่ง dfx ก่อนจึงจะเห็น Principal ของเรา

“identity” คืออะไร?

เนื่องจาก Principal ของผู้ใช้คือการแสดงข้อความของคีย์สาธารณะของคู่คีย์เข้ารหัสลับแบบอสมมาตร Principal ของผู้ใช้แต่ละคนจึงมีคีย์ส่วนตัวที่เกี่ยวข้องกัน คีย์ทั้งสองถูกจัดเก็บเป็นวัตถุที่เรียกว่า "ข้อมูลประจำตัว" คุณสามารถติดตั้งข้อมูลระบุตัวตนหลายรายการบนเครื่องของคุณได้ และข้อมูลระบุตัวตนแต่ละรายการจะมีชื่อ

แม้ว่าชื่อจะคล้ายกัน แต่คำสั่งอย่าง Identities จะแตกต่างจากข้อมูลประจำตัวของเว็บที่สร้างผ่านบริการ Internet Identity

Identity จะถูกจัดเก็บไว้ในไดเร็กทอรีผู้ใช้ของเราที่ ~/.config/dfx/identity/<identity_name>/identity.pem แอปฯ คำสั่งจะใช้ไฟล์ .pem เพื่อยืนยันตัวตนของเราต่อบริการต่าง ๆ กระบวนการนี้คล้ายกับการเข้าถึงเซิร์ฟเวอร์ SSH ซึ่งคุณต้องใช้คีย์ SSH ส่วนตัวเพื่อพิสูจน์ Identity ของเราและเข้าถึงเซิร์ฟเวอร์ที่คุณเพิ่มคีย์สาธารณะไว้ก่อนหน้านี้

หากสูญเสียไฟล์ข้อมูลประจำตัว (เช่น การทำคอมพิวเตอร์สูญหาย) ผู้ใช้จะไม่สามารถระบุตัวเองว่าเป็นผู้ดำเนินการรายนี้ได้อีกต่อไป

ไฟล์ Identity .pem เป็นความลับสูง ไม่ควรแบ่งปันข้อมูลเหล่านี้กับใครเลย

โดยค่าเริ่มต้น identity ใหม่จะถูกสร้างขึ้นเมื่อคุณเรียกใช้ dfx บนเครื่องใหม่เป็นครั้งแรก  identity นี้เรียกว่า " identity เริ่มต้น" และจะถูกใช้สำหรับการโต้ตอบของ IC ทั้งหมดตามค่าเริ่มต้น เว้นแต่คุณจะเลือกข้อมูลอื่นด้วยตนเอง

คุณยังสามารถคัดลอก identity ของคุณจากคอมพิวเตอร์เครื่องเก่าที่คุณสร้างไว้ได้ เนื่องจากคุณสามารถคัดลอกคีย์ SSH ของคุณได้

จะจัดการข้อมูลประจำตัวหลายรายการได้อย่างไร?

คุณสามารถติดตั้งข้อมูล identity ได้หลายรายการในเครื่องเดียวกัน หากต้องการสร้าง identity ใหม่ คุณสามารถเรียกใช้ dfx identity new <identity_name> ได้ ตัวอย่างเช่น คุณสามารถเรียกใช้คำสั่งนี้เพื่อสร้างชื่อ identity ใหม่ “new_identity”:

% dfx identity new new_identity

สร้าง identity: "new_identity".

identity ที่ถูกสร้าง: "new_identity".

หากต้องการสลับ identity สามารถใช้ผู้ใช้ identity dfx <identity_name>:

% dfx identity use new_identity

ใช้ identity: "new_identity".

หากต้องการทราบว่าจะใช้ Principal ใดในขณะนี้ สามารถใช้ dfx identity whoami:

% dfx identity whoami

new_identity

หากต้องการรับรายการ identity ทั้งหมด สามารถใช้คำสั่ง dfx identity list:

% dfx identity list

anonymous

default

new_identity *

การคัดลอกข้อมูลประจำตัวระหว่างเครื่องทำอย่างไร?

อย่างที่ได้กล่าวไว้ก่อนหน้านี้ เราสามารถคัดลอกข้อมูลประจำตัวของเราระหว่างเครื่องต่าง ๆ ได้เพื่อหลีกเลี่ยงการลงทะเบียน Principal หลายคนกับบริการของเรา โดยกระบวนการนี้คล้ายกับการคัดลอกคีย์ SSH ระหว่างคอมพิวเตอร์

ในการเริ่มต้น เราจะต้องคัดลอกไฟล์ .pem ข้อมูลระบุตัวตนของคุณจากคอมพิวเตอร์เครื่องเดิมที่ไฟล์ถูกสร้างขึ้น ไฟล์ .pem สำหรับแต่ละเอกลักษณ์จะถูกเก็บไว้ที่ ~/.config/dfx/identity/<identity_name>/identity.pem

สมมติว่าเราคัดลอกไฟล์ ident.pem จากคอมพิวเตอร์เครื่องเก่าไปยัง ~/import/identity.pem บนเครื่องใหม่ จากนั้นเราสามารถเรียกใช้คำสั่งนี้เพื่อนำเข้าไฟล์นี้เพื่อให้ได้รับการยอมรับว่าเป็นหนึ่งในข้อมูลประจำตัวบนคอมพิวเตอร์เครื่องนี้:

% dfx identity import old_identity ~/import/identity.pem

การสร้าง identity: "old_identity".

identity ที่ถูกสร้าง: "old_identity".

จากนั้นเราจะสามารถใช้งาน identity ที่นำเข้ามาโดยการเรียกใช้:

% dfx identity use old_identity

ใช้ identity: "old_identity".

วิธีตั้ง Principal ให้เป็นตัวควบคุม Canister

เมื่อคุณปรับใช้ canister คุณต้องแน่ใจว่า Principal ปัจจุบันของคุณได้รับการตั้งค่าเป็นตัวควบคุม canister ผู้ควบคุมคือผู้หลักที่สามารถจัดการกระป๋องได้ เช่น:

  • Deploy and update the canister ปรับใช้และอัปเดต canister
  • ควบคุมวงจรในกระเป๋าเงินของ canister (เพื่อชำระค่าคำนวณและจัดเก็บข้อมูล)

เมื่อต้องการแสดง Pricipal สำหรับหนึ่งใน canister คุณสามารถเรียกใช้สถานะ canister dfx <canister_name> ตัวอย่างเช่น:

% dfx canister status hello

Canister status call result for hello.

Status: Running

Controllers: nfxu4-cn7qt-x7r3c-5dhnk-dcrct-gmgoz-67gcg-5glvc-2krhv-gcmsr-qqe

Memory allocation: 0

Compute allocation: 0

Freezing threshold: 2_592_000

Memory Size: Nat(363948)

Balance: 4_000_000_000_000 Cycles

Module hash: 0xfa16da03d37cffe89382b29db2077de1229841ea31b91b8c040b740317390cb7:

หากต้องการตั้งค่า identity รายการใดรายการหนึ่งเป็นตัวควบคุม เราสามารถใช้ dfx canister update-settings <canister_name> --controller <identity_name_or_principal_id> ตัวอย่างเช่น:

% dfx canister update-settings hello --controller old_identity

ตั้งค่าตัวควบคุมของ "hello" เป็น: old_identity

สรุป

Principals คือตัวแทนข้อความของกุญแจสาธารณะ (Public Key) ที่ระบุ Canister และตัวผู้ใช้ โดยผู้ใช้หลักแต่ละคนจะได้เป็นส่วนหนึ่งของข้อมูลประจำตัว คู่ของกุญแจสาธารณะ (Prrincipal) และรหัสลับ

Identities are stored on your machine in the ~/.config/dfx/identity folder.

There are a few commands that you need to know to manage identities:

  • dfx identity import - to copy identities between machines and import them
  • dfx identity new - to create a new identity
  • dfx identity use - to switch between identities
  • dfx identity whoami- to check which identity is currently used

Source: DFINITY

บทความทั้งหมด