เนื่องจากยุคของบล็อกเชน 2.0 ที่มุ่งเน้นไปที่สัญญาอัจฉริยะ (Smart Contract) และแอปพลิเคชันบล็อกเชน (DApps) ค่อยๆ กลายเป็นกระแสหลัก ความปลอดภัยของสัญญาอัจฉริยะและแอปพลิเคชันบล็อกเชนจึงกลายเป็นจุดสนใจในอุตสาหกรรมมากขึ้น
โดยเฉพาะอย่างยิ่ง หลังจากประสบกับเหตุการณ์ต่างๆ เช่น THE DAO และการขโมย Binance วิธีการตรวจสอบและรับประกันความปลอดภัยของสัญญาอัจฉริยะและแอปพลิเคชันบล็อกเชนได้กลายเป็นปัญหาเร่งด่วนในอุตสาหกรรมบล็อกเชนในปัจจุบัน
ผู้เขียนได้จัดทำสถิติง่ายๆ ขึ้น ตั้งแต่เดือนกันยายน 2017 ถึงกันยายน 2018 ช่องโหว่ที่เกี่ยวข้องของสัญญาอัจฉริยะและแอปพลิเคชันบล็อกเชนแสดงให้เห็นรูปแบบการระบาดบ่อยครั้งและผลที่ตามมานั้นกว้างไกล ไม่เพียงแต่ทำให้สูญเสียเงินจำนวนมากโดยตรงเท่านั้น จากมุมมองของการพัฒนาในระยะยาว มันยังส่งผลต่อการพัฒนาที่ยั่งยืนของเทคโนโลยีเกิดใหม่อย่างบล็อกเชนในอนาคตอีกด้วย
นอกจากนี้ แม้ว่าช่องโหว่ที่อาจเกิดขึ้นของสัญญาอัจฉริยะและแอปพลิเคชันบล็อกเชนในปัจจุบันยังไม่ได้รับการแก้ไขอย่างเหมาะสม แต่สถานะที่เป็นอยู่คือจำนวนของสัญญาอัจฉริยะและแอปพลิเคชันบล็อกเชนยังคงเพิ่มขึ้นอย่างรวดเร็วด้วยอัตราการเติบโตเฉลี่ยหลายหมื่นรายการทุกวัน
ไม่ยากที่จะเห็นว่าอัตราการเติบโตและความปลอดภัยของสัญญาอัจฉริยะและแอปพลิเคชันบล็อกเชนนั้นอยู่ร่วมกันในความสัมพันธ์ที่ไม่แข็งแรง หากเราใช้การเปรียบเทียบอุปสงค์และอุปทาน (อัตราการเติบโตคือ "อุปทาน" ความปลอดภัยคือ "อุปสงค์") สถานะทั่วไปในปัจจุบันของสัญญาอัจฉริยะและแอปพลิเคชันบล็อกเชนคือสถานะ "อุปทานเกินอุปสงค์"
จากสิ่งนี้ วิธีการรับประกันความปลอดภัยของสัญญาอัจฉริยะขนาดใหญ่และแอปพลิเคชันบล็อกเชนได้กลายเป็นประเด็นหลักสำหรับองค์กรที่มองไปข้างหน้าและบุคคลในอุตสาหกรรมบล็อกเชน ในความเป็นจริง ปัจจุบันมีวิธีการพิเศษในอุตสาหกรรมเพื่อเอาชนะจุดบกพร่องนี้ เช่น การจับคู่รหัสคุณลักษณะ การตรวจสอบอัตโนมัติตามการดำเนินการเชิงสัญลักษณ์และนามธรรมเชิงสัญลักษณ์ และการตรวจสอบอัตโนมัติตามการตรวจสอบอย่างเป็นทางการ ในหมู่พวกเขา หลังจากสำรวจและฝึกฝนอย่างกว้างขวางในอุตสาหกรรม "การตรวจสอบอัตโนมัติตามการตรวจสอบอย่างเป็นทางการ" ได้กลายเป็นวิธีการที่ค่อนข้างสมบูรณ์และเป็นที่นิยมในอุตสาหกรรม
ดังนั้น ผู้เขียนจึงเน้นเป็นพิเศษไปที่ "การตรวจสอบอย่างเป็นทางการ" เลือกเครื่องมือตรวจสอบอย่างเป็นทางการที่สำคัญ 2 เครื่องมือ (VaaS & Mythril) ในอุตสาหกรรมปัจจุบัน และทำการเปรียบเทียบการทดสอบอย่างง่าย โดยเฉพาะอย่างยิ่ง เวอร์ชันของเครื่องมือมิธริลที่ใช้สำหรับการทดสอบคือ "0.21.12"
ชื่อเรื่องรอง
ข้อมูลเบื้องต้นเกี่ยวกับเครื่องมือ VaaS และ Mythril
01. รู้เบื้องต้นเกี่ยวกับเครื่องมือ VaaS
เครื่องมือ VaaS เป็นเครื่องมือตรวจสอบอย่างเป็นทางการอัตโนมัติที่พัฒนาโดย Beosin Chengdu Lianan โดยใช้สิทธิ์ในทรัพย์สินทางปัญญาของตนเอง โดยสามารถให้บริการตรวจสอบอย่างเป็นทางการ "ระดับกองทัพ" สำหรับสัญญาอัจฉริยะและแอปพลิเคชันบล็อกเชน และสามารถระบุตำแหน่งรหัสที่มีความเสี่ยงได้อย่างแม่นยำ ตำแหน่งและ มีการชี้ให้เห็นถึงสาเหตุของความเสี่ยง และช่องโหว่ด้านความปลอดภัยทั่วไป คุณลักษณะด้านความปลอดภัย และความถูกต้องในการทำงานของสัญญาอัจฉริยะได้รับการตรวจพบอย่างมีประสิทธิภาพด้วยความแม่นยำมากกว่า 95%
02. รู้เบื้องต้นเกี่ยวกับเครื่องมือ Mythril
ชื่อเรื่องรอง
องค์ประกอบของกรณีทดสอบ
กรณีทดสอบสัญญาประกอบด้วยสัญญาโทเค็น 260 สัญญาและสัญญาธุรกิจ 20 สัญญา
- สัญญาโทเค็นรวมถึงสัญญาโทเค็น Top200 และสัญญาโทเค็นทั่วไป 60 รายการสำหรับการตรวจสอบ ครอบคลุมการทำงานต่างๆ เช่น ICO การล็อค การขุด และการเบิร์น 
- ชื่อเรื่องรอง 
ภาพรวมของผลการทดสอบ
เครื่องมือ VaaS สามารถตรวจจับกรณีการทดสอบสัญญาทั้งหมดของโทเค็นและคลาสธุรกิจได้ อย่างไรก็ตาม เครื่องมือ Mythril สามารถตรวจจับได้เฉพาะสัญญาโทเค็นเท่านั้นแต่ไม่สามารถตรวจจับสัญญาธุรกิจได้ ดังนั้น ควรสังเกตว่าภาพรวมของผลการทดสอบนี้เป็นเพียงการวิเคราะห์เปรียบเทียบรายการสัญญาโทเค็นเท่านั้น
เครื่องมือ VaaS มีการตรวจสอบช่องโหว่ทั้งหมด 28 รายการ แต่เครื่องมือ Mythril มีการตรวจสอบช่องโหว่เพียง 9 รายการเมื่อเทียบกับเครื่องมือ VaaS ดังนั้น รายการตรวจจับของเครื่องมือ VaaS จึงมากกว่าของเครื่องมือ Mythril รายการตรวจจับเฉพาะจะถูกเปรียบเทียบดังนี้:
การเปรียบเทียบรายการตรวจจับ VaaS และ Mythril


01. ผลการทดสอบสำหรับรายการทดสอบเดียวกัน
สำหรับกรณีทดสอบโทเค็น 260 รายการที่เลือก เครื่องมือ Mythril สามารถเรียกใช้ผลลัพธ์ของสัญญาได้ 184 รายการภายใน 15 นาที และ 76 รายการไม่มีผลการตรวจพบ ในขณะที่เครื่องมือ VaaS สามารถรันผลลัพธ์ทั้งหมดได้ นำผลลัพธ์ 184 รายการที่ทั้งเครื่องมือ Mythril และเครื่องมือ VaaS สามารถเรียกใช้เพื่อเปรียบเทียบ และผลลัพธ์มีดังนี้
- อัตราการเข้าชมและอัตราการบวกเท็จ 
จากการเปรียบเทียบผลการตรวจจับ เปรียบเทียบกับรายการตรวจจับเดียวกัน ความสามารถในการตรวจจับของเครื่องมือ VaaS นั้นสูงกว่าของเครื่องมือ Mythril มาก จากการคำนวณ ความแม่นยำในการตรวจจับของเครื่องมือ VaaS คือ 96.9% ความแม่นยำในการตรวจจับของเครื่องมือ Mythril คือ 36.6% อัตราการตรวจพบที่ผิดพลาดของเครื่องมือ VaaS คือ 15.3% อัตราการตรวจพบที่ผิดพลาดของเครื่องมือ Mythril คือ 48.5% ดูภาพด้านล่างสำหรับรายละเอียด

ควรสังเกตว่าสูตรการคำนวณของอัตราการเข้าชมและอัตราการเตือนที่ผิดพลาดคือ:
- อัตราการเข้าชม = จำนวนครั้งที่เข้าชม/จำนวนคำถามทั้งหมด 
- อัตราผลบวกปลอม = จำนวนผลบวกปลอม/(จำนวนผลบวกปลอม + จำนวนครั้ง) 
ตามสถิติของผู้เขียน รายการตรวจจับที่ดำเนินการโดยทั้งเครื่องมือ VaaS และเครื่องมือ Mythril มีคำถามทั้งหมด 655 คำถาม:
- เครื่องมือ VaaS ตรวจพบปัญหาทั้งหมด 635 รายการ โดยมีอัตราการพบปัญหา 96.9% ตรวจพบข้อผิดพลาดทั้งหมด 115 รายการ โดยมีอัตราการตรวจพบเท็จ 15.3% 
- เครื่องมือ Mythril ตรวจพบปัญหาทั้งหมด 240 รายการ โดยมีอัตราการพบปัญหา 36.6% พบผลบวกปลอมทั้งหมด 226 รายการ โดยมีอัตราผลบวกลวง 48.5% ในหมู่พวกเขา การโจมตีกลับเข้าระบบของเครื่องมือ Mythril และการปฏิเสธบริการ อัตราการเตือนที่ผิดพลาดนั้นค่อนข้างสูง คิดเป็น 93.3% ของทั้งหมด 
มูลค่ารวมของการตรวจจับถูกเปรียบเทียบในตารางต่อไปนี้:

- จำกัด เวลาทดสอบ 
เวลาทดสอบเฉลี่ยของเครื่องมือ Mythril คือ 226.2 วินาที ในขณะที่เวลาทดสอบเฉลี่ยของเครื่องมือ VaaS คือ 164.4 วินาที แสดงให้เห็นว่าประสิทธิภาพการทำงานของเครื่องมือ VaaS ดีกว่าเครื่องมือ Mythril
02. ผลการตรวจจับของรายการตรวจจับเฉพาะสำหรับเครื่องมือ VaaS
ดูตารางด้านล่างสำหรับรายละเอียด:
ชื่อเรื่องรอง

การนำเสนอกรณี
01. กรณีของรายการตรวจจับเดียวกัน
- รีเอนทรานซ์ 
กรณี:

interface TEST {
function test123() external view returns (uint256);
function getBlocknumber() external view returns (uint256);
}
contract test2 {
function testCalling(address _testAdddress) public {
TEST t = TEST(_testAdddress);
t.test123();//mythril ผลบวกลวง
}
function testFormal(address _testAdddress) public view returns(uint256 time){
TEST t = TEST(_testAdddress);
t.getBlocknumber();//mythril บวกเท็จ
return time;
}
}
contract Reentrancy {
mapping(address => uint256) public balances;
event WithdrawFunds(address _to,uint256 _value);
function depositFunds() public payable {
balances[msg.sender] += msg.value;
}
function showbalance() public view returns (uint256 ){
return address(this).balance;
}
function withdrawFunds (uint256 _weiToWithdraw) public {
require(balances[msg.sender] >= _weiToWithdraw);
require(msg.sender.call.value(_weiToWithdraw)());
ยอดคงเหลือ[msg.sender] -= _weiToWithdraw;//mythril ผลบวกลวงที่เห็นได้ชัด
emit WithdrawFunds(msg.sender,_weiToWithdraw);
}
}

- ผลการทดสอบเครื่องมือ VaaS: 

- ผลการทดสอบเครื่องมือ Mythril: 


▷ จากการวิเคราะห์ของผู้เขียน เครื่องมือ VaaS รายงานตำแหน่งของการโจมตีการกลับเข้ามาใหม่ ในขณะที่เครื่องมือ Mythril ส่งสัญญาณแจ้งเตือนสำหรับการโทรจากภายนอก มีการเตือนทั้งหมด 4 รายการ โดย 2 รายการเป็นการโทรจากภายนอกปกติ และอีกรายการคือ การแจ้งเตือนที่ผิดพลาดที่เห็นได้ชัด โดยมีอัตราการตรวจพบที่ผิดพลาดสูง
- TXOriginAuthentication (ข้อผิดพลาดในการใช้งาน tx.origin) 
กรณี:

contract TxUserWallet {
address owner;
constructor() public {
owner = msg.sender;
}
function transferTo(address dest, uint amount) public {
require(tx.origin == owner);
dest.transfer(amount);
}
}

- ผลการทดสอบเครื่องมือ VaaS: 

- ผลการทดสอบเครื่องมือ Mythril: 

▷ จากการวิเคราะห์ของผู้เขียน ทั้งเครื่องมือ VaaS และเครื่องมือ Mythril สามารถตรวจจับและแจ้งเตือนคีย์เวิร์ด tx.origin ได้
- เรียกใช้การโทรระดับต่ำ (การโทร, การโทรจากผู้รับมอบสิทธิ์, การโทรฟังก์ชันฆ่าตัวตาย) 
กรณี:

contract Delegatecall{
uint public q;
bool public b;
address addr = 0xde6a66562c299052b1cfd24abc1dc639d429e1d6;
function Delegatecall() public payable {
}
function call1() public returns(bool) {
b = addr.delegatecall
(bytes4(keccak256("fun(uint256,uint256)")),2,3);
return b;
}
function call2(address add) public returns(bool){
b=add.delegatecall
(bytes4(keccak256("fun(uint256,uint256)")),2,3);
return b;
}
}

- ผลการทดสอบเครื่องมือ VaaS: 

- ผลการทดสอบเครื่องมือ Mythril: 

▷ จากการวิเคราะห์ของผู้เขียน มีการเรียก delegetacall สองครั้งในกรณีนี้ ในขณะที่เครื่องมือ Mythril รายงานเพียงครั้งเดียว ดังนั้นจึงมีความเสี่ยงที่จะรายงานน้อยเกินไป
- การจัดการ BlockMembers (การพึ่งพาพารามิเตอร์บล็อก) 
กรณี:

function createTokens() payable external {
if (isFinalized) throw;
if (block.number < fundingStartBlock) throw;
if (block.number > fundingEndBlock) throw;
if (msg.value == 0) throw;
uint256 tokens = safeMult(msg.value, tokenExchangeRate);
uint256 checkedSupply = safeAdd(totalSupply, tokens);
if (tokenCreationCap < checkedSupply) throw;
totalSupply = checkedSupply;
balances[msg.sender] += tokens;
CreateBAT(msg.sender, tokens);
}
function finalize() external {
if (isFinalized) throw;
if (msg.sender != ethFundDeposit) throw;
if(totalSupply < tokenCreationMin) throw;
if(block.number <= fundingEndBlock && totalSupply != tokenCreationCap) throw;
// move to operational
isFinalized = true;
if(!ethFundDeposit.send(this.balance)) throw;
}
function refund() external {
if(isFinalized) throw;
if (block.number <= fundingEndBlock) throw;
if(totalSupply >= tokenCreationMin) throw;
if(msg.sender == batFundDeposit) throw;
uint256 batVal = balances[msg.sender];
if (batVal == 0) throw;
balances[msg.sender] = 0;
totalSupply = safeSubtract(totalSupply, batVal);
uint256 ethVal = batVal / tokenExchangeRate;
LogRefund(msg.sender, ethVal);
if (!msg.sender.send(ethVal)) throw;
}
}

- ผลการทดสอบเครื่องมือ VaaS: 

- ผลการทดสอบเครื่องมือ Mythril: 

▷ จากการวิเคราะห์ของผู้เขียน ทั้งเครื่องมือ VaaS และเครื่องมือ Mythril สามารถตรวจจับการพึ่งพาพารามิเตอร์ของบล็อกได้ อย่างไรก็ตาม เครื่องมือ Mythril มีความเสี่ยงที่จะเกิดผลบวกลวง
- การปฏิเสธการให้บริการ 
กรณี:

contract Auction {
address public highestBidder = 0x0;
uint256 public highestBid;
function Auction(uint256 _highestBid) {
require(_highestBid > 0);
highestBid = _highestBid;
highestBidder = msg.sender;
}
function bid() payable {
require(msg.value > highestBid);
highestBidder.transfer(highestBid);
highestBidder = msg.sender;
highestBid = msg.value;
}
function auction_end() {
}
}

- ผลการทดสอบเครื่องมือ VaaS: 

- ผลการทดสอบเครื่องมือ Mythril: 

▷ จากการวิเคราะห์ของผู้เขียน ทั้งเครื่องมือ VaaS และเครื่องมือ Mythril สามารถดำเนินการตรวจจับความเสี่ยงสำหรับการปฏิเสธบริการ อย่างไรก็ตาม ในกรณีนี้ ผู้เสนอราคาสูงสุดอาจโจมตีสัญญาอย่างมุ่งร้ายส่งผลให้การถ่ายโอนล้มเหลวอย่างต่อเนื่องส่งผลให้สัญญาปฏิเสธที่จะรับบริการ ในกรณีนี้ เครื่องมือ VaaS สามารถตรวจจับความเสี่ยงของการปฏิเสธบริการ แต่เครื่องมือมิธริลตรวจไม่พบ
- ยกเลิกการเลือกการโทรหรือส่งค่าส่งคืน (การโทรและส่งการตรวจจับค่าส่งคืน) 
กรณี:

if (lastTimeOfNewCredit + TWELVE_HOURS < block.timestamp) {
msg.sender.send(amount);
creditorAddresses[creditorAddresses.length - 1].send(profitFromCrash);
corruptElite.send(this.balance);
...
return true;
}
else {
msg.sender.send(amount);
return false;
}

- ผลการทดสอบเครื่องมือ VaaS: 

- ผลการทดสอบเครื่องมือ Mythril: 

▷ จากการวิเคราะห์ของผู้เขียน ทั้งเครื่องมือ VaaS และเครื่องมือ Mythril สามารถตรวจจับค่าที่ส่งคืนของการโทรที่ไม่ได้ตรวจสอบได้ อย่างไรก็ตาม เครื่องมือ Mythril มีความเสี่ยงที่จะเกิดผลบวกลวง
- จำนวนเต็มล้น 
กรณีที่ 1:

function distributeBTR(address[] addresses) onlyOwner {
for (uint i = 0; i < addresses.length; i++) {
balances[owner] -= 2000 * 10**8;
alances[addresses[i]] += 2000 * 10**8;
Transfer(owner, addresses[i], 2000 * 10**8);
}
}

▷ จากการวิเคราะห์ของผู้เขียน ค่าของยอดคงเหลือ [เจ้าของ] ไม่ได้รับการตรวจสอบในกรณีข้างต้น ซึ่งอาจทำให้เกิดการโอเวอร์โฟลว์ แต่เครื่องมือ Mythrill จะไม่รายงานข้อผิดพลาด ซึ่งหมายความว่าเครื่องมือ Mythrill จะไม่ตรวจสอบการทำงานอย่างต่อเนื่อง
กรณีที่ 2:

contract A {
uint c;
function add(uint8 a,uint8 b){
uint8 sum = a+b;
c=sum;
}
}

- ผลการทดสอบเครื่องมือ VaaS: 

- ผลการทดสอบเครื่องมือ Mythril: 

▷ จากการวิเคราะห์ของผู้เขียน การตรวจจับการล้นของเครื่องมือ Mythrill สำหรับประเภทข้อมูลที่ไม่ใช่ uint256 นั้นไม่ถูกต้อง
กรณีที่ 3:
- ผลการตรวจจับบางอย่างของเครื่องมือมิธริล: 


▷ จากการวิเคราะห์ของผู้เขียน เครื่องมือ Mythrill ไม่ได้ประมวลผลตัวแปรเฉพาะบางตัว ส่งผลให้เกิดผลบวกปลอม เช่น อาร์เรย์ msg.value เดี๋ยวนี้ เป็นต้น
02. กรณีของรายการตรวจจับเฉพาะสำหรับเครื่องมือ VaaS
กรณีที่ 1:

...
contract ERC20 is ERC20Basic {
function allowance(address owner, address spender) constant returns (uint);
function transferFrom(address from, address to, uint value);
function approve(address spender, uint value);
event Approval(address indexed owner, address indexed spender, uint value);
}
...
function transfer(address _to, uint _value) onlyPayloadSize(2 * 32) {
balances[msg.sender] = balances[msg.sender].sub(_value);
balances[_to] = balances[_to].add(_value);
Transfer(msg.sender, _to, _value);
}

- ผลการทดสอบ: 


กรณีที่ 2:

contract A {
B b;
uint c;
function test(uint a){
b = new B(a);
c = b.get(200);
}
}
contract B {
uint b;
function B(uint e){
b=100;
}
function get(uint a)returns(uint){
require(a<100);
return a;
}
}

- ผลการทดสอบ: 

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

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


