บทช่วยสอน Ethereum - มองลึกเข้าไปใน Ethereum!



บทช่วยสอน Ethereum นี้อธิบาย Ethereum จากมุมมองทางสถาปัตยกรรมและวิธีสร้างแพลตฟอร์มที่ดีที่สุดสำหรับการสร้าง DAPPS และ DAO

Ethereum บทช่วยสอน:

ในบล็อกบทช่วยสอน Ethereum นี้ฉันจะอธิบายการทำงานภายในของสถาปัตยกรรมของ ethereum และฉันจะแสดงให้คุณเห็นถึงการใช้งาน ethereum ผ่านทาง สัญญาอัจฉริยะ .

ฉันมองว่า Ethereum เป็นบล็อกเชนที่ตั้งโปรแกรมได้ซึ่งจะให้บริการองค์กร B2C ส่วนใหญ่ในอนาคต Ethereum ให้อิสระแก่นักพัฒนาในการสร้างแบบจำลองที่ซับซ้อนเพื่อดำเนินการบนบล็อกเชนแทนที่จะ จำกัด การดำเนินการที่กำหนดไว้ล่วงหน้าเช่น Bitcoin blockchain





ด้วยวิธีการนี้ Ethereum ได้เปลี่ยนตัวเองให้กลายเป็นแพลตฟอร์มสำหรับแอปพลิเคชันและองค์กรแบบกระจายอำนาจมากมายซึ่งรวมถึง แต่ไม่ จำกัด เพียงสกุลเงินดิจิตอลเข้ารหัส

ฉันจะพูดถึงหัวข้อต่างๆอย่างละเอียดถี่ถ้วนผ่านบล็อก“ Ethereum Tutorial” นี้ หัวข้อเหล่านี้ ได้แก่ :



คุณสามารถดูการบันทึก Ethereum Tutorial ซึ่งผู้สอนของเราได้อธิบายหัวข้อโดยละเอียดด้วย ซึ่งจะช่วยให้คุณเข้าใจแนวคิดนี้ได้ดีขึ้น

บทช่วยสอน Ethereum | สัญญาอัจฉริยะ Ethereum | Edureka

บทช่วยสอน Ethereum: บัญชี Ethereum

เครือข่าย Ethereum มีบัญชีสองประเภท ได้แก่ :



  • บัญชีภายนอก
  • บัญชีสัญญา

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

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

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

ในทางกลับกันบัญชีสัญญาคือชุดของรหัสที่อยู่ในบล็อกเชนตามที่อยู่เฉพาะ สัญญาเหล่านี้เรียกใช้โดยบัญชีภายนอกหรือโดยสัญญาอื่น ๆ ผ่านฟังก์ชันคำกระตุ้นการตัดสินใจเฉพาะ สัญญาเหล่านี้เขียนด้วยภาษาสคริปต์ระดับสูงเช่น Solidity, Serpent หรือ LLL ทุกสัญญาที่อยู่บน ethereum blockchain จะถูกจัดเก็บในรูปแบบเฉพาะที่เรียกว่า EVM (Ethereum Virtual Machine) bytecode ซึ่งเป็นรูปแบบไบนารีเฉพาะของ ethereum

จะยุติธรรมก็ต่อเมื่อฉันอธิบาย EVM ในตอนนี้ซึ่งฉันได้บอกคุณเกี่ยวกับ EVM-bytecode แล้ว

บทช่วยสอน Ethereum: เครื่องเสมือน Ethereum

Ethereum ในแบบชนบทกำหนดชุดของโปรโตคอลทั่วไปซึ่งกลายเป็นเสาหลักของการพัฒนาแอปพลิเคชันแบบกระจายอำนาจ หัวใจสำคัญของสิ่งนี้คือ Ethereum Virtual Machine รูปด้านล่างอธิบายสถาปัตยกรรม:

ผสานอัลกอริทึมการจัดเรียง c ++

สถาปัตยกรรม Ethereum - บทช่วยสอน Ethereum - Edureka

สิ่งสำคัญคือต้องทราบว่า Ethereum Virtual Machine ไม่เพียง แต่เป็นแซนด์บ็อกซ์อย่างสมบูรณ์ แต่ยังแยกออกจากกันโดยสิ้นเชิง ซึ่งหมายความว่ารหัสที่กำลังทำงานบน EVM ไม่สามารถเข้าถึงเครือข่ายหรือระบบไฟล์และสามารถเข้าถึงสัญญาอื่น ๆ ได้

เมื่อเราเข้าใจถึงหัวใจหลักของแพลตฟอร์มแล้วเรามาดูรายละเอียดเกี่ยวกับโหนดเครือข่ายกันดีกว่า

บทช่วยสอน Ethereum: เครือข่าย Ethereum

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

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

โหนดน้ำหนักเบา ในทางกลับกันมีเพียงส่วนย่อยของบล็อกเชนทั้งหมด โหนดประเภทนี้ส่วนใหญ่จะใช้ใน e-wallets ซึ่งจะต้องมีน้ำหนักเบาและด้วยเหตุนี้บล็อกเชนทั้งหมดจึงไม่สามารถเก็บไว้ในนั้นได้ ในทางตรงกันข้ามโหนดเหล่านี้ไม่ได้ตรวจสอบทุกบล็อกหรือธุรกรรมและอาจไม่มีสำเนาของสถานะบล็อกเชนปัจจุบัน พวกเขาอาศัยโหนดแบบเต็มเพื่อให้รายละเอียดที่ขาดหายไป (หรือขาดฟังก์ชันเฉพาะ) ข้อได้เปรียบของไลท์โหนดคือสามารถเริ่มต้นและใช้งานได้เร็วขึ้นมากสามารถทำงานบนอุปกรณ์ที่ จำกัด การคำนวณ / หน่วยความจำได้มากขึ้นและไม่กินพื้นที่เก็บข้อมูลเกือบเท่า

ทุกบล็อกเชนสาธารณะมีสกุลเงินติดอยู่ Ethereum ไม่แตกต่างกัน มาดูรายละเอียดเพิ่มเติมเกี่ยวกับสกุลเงินดิจิทัลของ Ethereum

ความแตกต่างระหว่างการแทนที่และการโอเวอร์โหลด

บทช่วยสอน Ethereum: Ether และ Gas

Ether เป็นชื่อของสกุลเงินดิจิตอลที่ใช้ในการชำระเงินสำหรับธุรกรรมบนเครือข่าย ethereum นอกเหนือจากการจ่ายเงินสำหรับธุรกรรมและบริการทั่วไปแล้ว Ether ยังใช้เพื่อซื้อ Gas ซึ่งจะใช้ในการจ่ายสำหรับการคำนวณภายใน EVM

อีเธอร์เป็นหน่วยเมตริกและมีหลายนิกายที่ช่วยในการจ่ายเงินสำหรับธุรกรรมและก๊าซได้อย่างถูกต้อง นิกายที่เล็กที่สุด a.k.a หน่วยฐานเรียกว่า Wei นิกายพร้อมกับชื่อเฉพาะสามารถดูได้ในตารางด้านล่าง:

หน่วยเว่ยค่าเว่ย
เหว่ย1 ไวหนึ่ง
Kwei1e3 wei1,000
Mwei1e6 เหว่ย1,000,000
ถัก1e9 เวย1,000,000,000
microEther1e12 wei1,000,000,000,000
milliEther1e15 เวย1,000,000,000,000,000
อีเธอร์1e18 wei1,000,000,000,000,000,000

ตามที่กล่าวไว้ก่อนหน้านี้เราทราบดีว่า EVM มีหน้าที่ในการเรียกใช้โค้ดที่ปรับใช้บนเครือข่าย แล้วอะไรคือการหยุดไม่ให้ใครบางคนใช้งานวนซ้ำที่ไม่สิ้นสุดบน EVM และทำให้หน่วยความจำทำงานหนักเกินไป? นี่คือที่มาของแนวคิดของ Gas

ก๊าซถูกใช้เป็นตัวชี้วัดสำหรับการจ่ายเงินสำหรับทรัพยากรการคำนวณบนเครือข่าย ทุกสัญญาบนเครือข่ายมีการกำหนดปริมาณก๊าซสูงสุดที่สามารถใช้สำหรับการคำนวณได้ สิ่งนี้เรียกว่า“ ขีด จำกัด ก๊าซ 'เงื่อนไขก๊าซอื่น ๆ ที่เกี่ยวข้องมีดังนี้:

  • ราคาแก๊ส : นี่คือต้นทุนของก๊าซในรูปของโทเค็นเช่นอีเธอร์และนิกายอื่น ๆ เพื่อรักษาเสถียรภาพของมูลค่าก๊าซราคาก๊าซเป็นมูลค่าลอยตัวซึ่งหากต้นทุนของโทเค็นหรือสกุลเงินมีความผันผวนราคาก๊าซจะเปลี่ยนไปเพื่อให้คงมูลค่าที่แท้จริงเท่าเดิม
  • ค่าธรรมเนียมก๊าซ : นี่คือจำนวนก๊าซที่ต้องจ่ายอย่างมีประสิทธิผลเพื่อดำเนินธุรกรรมหรือโปรแกรมเฉพาะ (เรียกว่าสัญญา)

ดังนั้นหากมีคนพยายามเรียกใช้โค้ดที่ทำงานตลอดไปในที่สุดสัญญาจะเกินขีด จำกัด ก๊าซและธุรกรรมทั้งหมดที่เรียกใช้สัญญาจะถูกย้อนกลับไปสู่สถานะก่อนหน้า


เมื่อเราทราบเกี่ยวกับสกุลเงินแล้วเรามาดูกระบวนการสร้างสกุลเงินใหม่กัน

บทช่วยสอน Ethereum: การขุด

Ethereum เช่นเดียวกับเทคโนโลยีบล็อกเชนสาธารณะอื่น ๆ ช่วยให้มั่นใจในความปลอดภัยผ่านรูปแบบที่อิงแรงจูงใจ สิ่งนี้เรียกว่ากลไกการพิสูจน์การทำงาน รูปด้านล่างแสดงให้เห็นว่าการขุด ethereum ทำงานอย่างไร:

จากมุมมองทางเทคนิคที่มากขึ้นอัลกอริธึมการพิสูจน์การทำงานที่ใช้เรียกว่า Ethash ซึ่งเป็นอัลกอริธึมการแฮชที่ได้รับแรงบันดาลใจจากอัลกอริทึม Dagger-Hashimoto

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

บทช่วยสอน Ethereum: กรณีการใช้งาน Crowd Funding แบบกระจายอำนาจ

คำชี้แจงปัญหา : ‘ความคิด’ ที่ดีไม่ใช่ทุกสิ่งในโลกปัจจุบันในการเริ่มต้นธุรกิจที่ประสบความสำเร็จ จำเป็นต้องใช้เงินทุนและความพยายามจำนวนมากในการนำไอเดียไปใช้ นี่คือจุดที่องค์กรอย่าง“ Kickstarter” เข้ามาในภาพ พวกเขาจัดหาโครงการที่มีการเปิดเผยต่อสาธารณะที่จำเป็นสำหรับการบริจาคต่อโครงการของพวกเขาเพื่อให้ดำเนินการได้ แต่สถาปัตยกรรมแบบรวมศูนย์ของแรงจูงใจดังกล่าวมีข้อเสียส่วนใหญ่อยู่ที่วิธีจัดการรางวัล เนื่องจากผู้มีอำนาจรวมศูนย์ทำการตัดสินใจทั้งหมดระบบจึงมีแนวโน้มที่จะออกกฎเช่น:

  • ใครก็ตามที่พลาดกำหนดเวลาแคมเปญจะไม่สามารถเข้าร่วมได้อีก
  • ผู้บริจาคที่เปลี่ยนใจไม่สามารถออกไปได้

วิธีการ :

เราใช้วิธีการแบบกระจายอำนาจเพื่อแก้ไขปัญหาดังที่อธิบายไว้ในภาพด้านล่าง:

โครงสร้างข้อมูลและอัลกอริทึมใน java

สารละลาย :

นี่คือสัญญาอัจฉริยะที่เป็นของแข็งสำหรับคำชี้แจงปัญหาข้างต้น

pragma solidity ^ 0.4.16 โทเค็นอินเทอร์เฟซ {การถ่ายโอนฟังก์ชัน (ตัวรับที่อยู่จำนวน uint)} สัญญา Crowdsale {ที่อยู่ผู้รับผลประโยชน์สาธารณะ uint การระดมทุนสาธารณะเป้าหมาย uint จำนวนสาธารณะเพิ่มขีดเส้นตายสาธารณะ uint โทเค็นราคาสาธารณะการจับคู่รางวัล (ที่อยู่ => uint256) ยอดคงเหลือสาธารณะของบูล การระดมทุน GoalReached = False bool crowdsaleClosed = เหตุการณ์เท็จ GoalReached (ผู้รับที่อยู่, uint totalAmountRaised) เหตุการณ์ FundTransfer (ผู้สนับสนุนที่อยู่, จำนวน uint, บูล isContribution) / ** * ฟังก์ชัน Constrctor * * ตั้งค่าเจ้าของ * / ฟังก์ชัน Crowdsale (ที่อยู่ ifSuccessfulSendTo // ที่อยู่ ของเจ้าของเมื่อการระดมทุนประสบความสำเร็จในการระดมทุน uintGoalInEthers // จำนวนเงินเป้าหมายที่จะเพิ่มระยะเวลา uintInMinutes // เวลาที่กำหนด uint etherCostOfEachToken // ต้นทุนของส่วนของผู้ถือหุ้นในที่อยู่อีเธอร์ addressOfTokenUsedAsReward // ที่อยู่โทเค็น) {ผู้รับผลประโยชน์ = ifSuccessfulSendTo การระดมทุนGoal = การระดมทุน GoalInEthers ตอนนี้ * 1 + ระยะเวลา InMinutes * ราคา 1 นาที = etherCostOfEachToken * 1 อีเธอร์ถึง kenReward = token (addressOfTokenUsedAsReward)} / ** * ฟังก์ชันทางเลือก * * ฟังก์ชันที่ไม่มีชื่อเป็นฟังก์ชันเริ่มต้นที่เรียกเมื่อใดก็ตามที่ใครก็ตามส่งเงินไปยังสัญญา * / function () payable {require (! crowdsaleClosed) uint amount = msg value balanceOf [msg.sender] + = amount amountRaised + = amount tokenReward.transfer (msg.sender, amount / price) FundTransfer (msg.sender, amount, true)} โมดิฟายเออร์ afterDeadline () {if (now = fundingGoal) {fundoGoalReached = true GoalReached (ผู้รับผลประโยชน์, amountRaised)} crowdsaleClosed = true} / ** * ถอนเงิน * * ตรวจสอบเพื่อดูว่าบรรลุเป้าหมายหรือเวลาที่กำหนดหรือไม่และหากเป็นเช่นนั้นและบรรลุเป้าหมายการระดมทุน * ส่งเงินทั้งหมด ให้กับผู้รับผลประโยชน์ หากไม่บรรลุเป้าหมายผู้ร่วมให้ข้อมูลแต่ละคนสามารถถอน * จำนวนเงินที่บริจาคได้ * / function safeWithdrawal () afterDeadline {if (! circulationGoalReached) {uint amount = balanceOf [msg.sender] balanceOf [msg.sender] = 0 if (amount> 0) {if (msg.sender.send (amount)) { FundTransfer (msg.sender, amount, false)} else {balanceOf [msg.sender] = amount}}} ถ้า (fundoalReached && benefit == msg.sender) {if (benefiticiary.send (amountRaised)) {FundTransfer (ผู้รับผลประโยชน์, amountRaised, false)} else {// หากเราไม่สามารถส่งเงินไปยังผู้รับผลประโยชน์ได้ให้ปลดล็อกผู้ให้ทุนให้สมดุลกับการระดมทุน GoalReached = false}}}}

ในกรณีที่คุณสนใจที่จะเรียนรู้ความแข็งแกร่งโปรดดูบล็อกของเราที่ ซึ่งใช้สำหรับการพัฒนาส่วนบุคคลสัญญาอัจฉริยะ

หากคุณต้องการเรียนรู้ Blockchain และสร้างอาชีพใน Blockchain Technologies โปรดดูที่ ซึ่งมาพร้อมกับการฝึกอบรมสดที่นำโดยผู้สอนและประสบการณ์โครงการในชีวิตจริง การฝึกอบรมนี้จะช่วยให้คุณเข้าใจ Blockchain ในเชิงลึกและช่วยให้คุณมีความเชี่ยวชาญในเรื่องนั้น ๆ

มีคำถามสำหรับเรา? โปรดระบุไว้ในส่วนความคิดเห็น และเราจะติดต่อกลับโดยเร็วที่สุด