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 Virtual Machine ไม่เพียง แต่เป็นแซนด์บ็อกซ์อย่างสมบูรณ์ แต่ยังแยกออกจากกันโดยสิ้นเชิง ซึ่งหมายความว่ารหัสที่กำลังทำงานบน EVM ไม่สามารถเข้าถึงเครือข่ายหรือระบบไฟล์และสามารถเข้าถึงสัญญาอื่น ๆ ได้
เมื่อเราเข้าใจถึงหัวใจหลักของแพลตฟอร์มแล้วเรามาดูรายละเอียดเกี่ยวกับโหนดเครือข่ายกันดีกว่า
บทช่วยสอน Ethereum: เครือข่าย Ethereum
เครือข่าย ethereum เป็นเครือข่ายบล็อกเชนสาธารณะ เป็นพื้นฐานของแอปพลิเคชันและองค์กรแบบเพียร์ทูเพียร์ที่กระจายอำนาจทั้งหมดที่ทำงานบนเครือข่าย เครือข่ายประกอบด้วยโหนดสองประเภทคือโหนดเต็มและโหนดน้ำหนักเบา
โหนดเต็ม มีประวัติทั้งหมดของการทำธุรกรรมตั้งแต่บล็อกการกำเนิด สิ่งเหล่านี้เป็นเครื่องพิสูจน์ความสมบูรณ์ของเครือข่ายบล็อกเชน โหนดแบบเต็มจะต้องมีแต่ละธุรกรรมที่ได้รับการตรวจสอบตามกฎที่กำหนดโดยข้อกำหนดของ Ethereum
โหนดน้ำหนักเบา ในทางกลับกันมีเพียงส่วนย่อยของบล็อกเชนทั้งหมด โหนดประเภทนี้ส่วนใหญ่จะใช้ใน e-wallets ซึ่งจะต้องมีน้ำหนักเบาและด้วยเหตุนี้บล็อกเชนทั้งหมดจึงไม่สามารถเก็บไว้ในนั้นได้ ในทางตรงกันข้ามโหนดเหล่านี้ไม่ได้ตรวจสอบทุกบล็อกหรือธุรกรรมและอาจไม่มีสำเนาของสถานะบล็อกเชนปัจจุบัน พวกเขาอาศัยโหนดแบบเต็มเพื่อให้รายละเอียดที่ขาดหายไป (หรือขาดฟังก์ชันเฉพาะ) ข้อได้เปรียบของไลท์โหนดคือสามารถเริ่มต้นและใช้งานได้เร็วขึ้นมากสามารถทำงานบนอุปกรณ์ที่ จำกัด การคำนวณ / หน่วยความจำได้มากขึ้นและไม่กินพื้นที่เก็บข้อมูลเกือบเท่า
ทุกบล็อกเชนสาธารณะมีสกุลเงินติดอยู่ Ethereum ไม่แตกต่างกัน มาดูรายละเอียดเพิ่มเติมเกี่ยวกับสกุลเงินดิจิทัลของ Ethereum
ความแตกต่างระหว่างการแทนที่และการโอเวอร์โหลด
บทช่วยสอน Ethereum: Ether และ Gas
Ether เป็นชื่อของสกุลเงินดิจิตอลที่ใช้ในการชำระเงินสำหรับธุรกรรมบนเครือข่าย ethereum นอกเหนือจากการจ่ายเงินสำหรับธุรกรรมและบริการทั่วไปแล้ว Ether ยังใช้เพื่อซื้อ Gas ซึ่งจะใช้ในการจ่ายสำหรับการคำนวณภายใน EVM
อีเธอร์เป็นหน่วยเมตริกและมีหลายนิกายที่ช่วยในการจ่ายเงินสำหรับธุรกรรมและก๊าซได้อย่างถูกต้อง นิกายที่เล็กที่สุด a.k.a หน่วยฐานเรียกว่า Wei นิกายพร้อมกับชื่อเฉพาะสามารถดูได้ในตารางด้านล่าง:
หน่วย | เว่ยค่า | เว่ย |
เหว่ย | 1 ไว | หนึ่ง |
Kwei | 1e3 wei | 1,000 |
Mwei | 1e6 เหว่ย | 1,000,000 |
ถัก | 1e9 เวย | 1,000,000,000 |
microEther | 1e12 wei | 1,000,000,000,000 |
milliEther | 1e15 เวย | 1,000,000,000,000,000 |
อีเธอร์ | 1e18 wei | 1,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 ในเชิงลึกและช่วยให้คุณมีความเชี่ยวชาญในเรื่องนั้น ๆ
มีคำถามสำหรับเรา? โปรดระบุไว้ในส่วนความคิดเห็น และเราจะติดต่อกลับโดยเร็วที่สุด